{"version":3,"sources":["vs/editor/fake","vs/editor/vs/base/common/marked/raw.marked.js","vs/editor/vs/css.js","vs/editor/vs/nls.js","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/iframe.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/list/rangeMap.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/scrollbar/scrollbarState.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/arrays.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/assert.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/collections.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/color.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/decorators.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/diff/diffChange.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/diff/diff.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/events.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/functional.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/hash.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/htmlContent.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/idGenerator.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/iterator.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/history.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/json.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/keyCodes.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/lifecycle.ts","vs/editor/vs/base/common/marked/marked.js","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/network.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/platform.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/scorer.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/stopwatch.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/types.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/graph.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/objects.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/uri.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/map.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/marshalling.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/strings.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/octiconLabel/octiconLabel.mock.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/filters.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/paths.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/comparers.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/labels.ts","vs/editor/vs/base/common/winjs.base.raw.js","vs/editor/vs/base/common/winjs.base.js","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/errors.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/callbackList.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/event.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/browser.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/event.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/keyboardEvent.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/mouseEvent.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/cancellation.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/async.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/eventEmitter.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/dom.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/fastDomNode.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/globalMouseMoveMonitor.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/htmlContentRenderer.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/touch.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/highlightedlabel/highlightedLabel.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/list/rowCache.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/widget.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/scrollbar/scrollbarArrow.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/actions.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/glob.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/mime.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/scrollable.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/scrollbar/scrollbarVisibilityController.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/scrollbar/abstractScrollbar.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/scrollbar/horizontalScrollbar.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/scrollbar/verticalScrollbar.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/worker/simpleWorker.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/parts/quickopen/browser/quickOpenViewer.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/parts/quickopen/common/quickOpen.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/parts/tree/browser/tree.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/parts/tree/browser/treeDnd.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/parts/tree/browser/treeModel.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/parts/tree/browser/treeViewModel.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/worker/defaultWorkerFactory.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/builder.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/checkbox/checkbox.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/contextview/contextview.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/countBadge/countBadge.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/iconLabel/iconLabel.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/progressbar/progressbar.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/sash/sash.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/scrollbar/scrollableElement.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/list/listView.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/list/listWidget.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/parts/tree/browser/treeView.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/selectBox/selectBox.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/config/charWidthReader.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/config/elementSizeObserver.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/editorBrowser.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/editorDom.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/view/viewLayer.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/config/editorZoom.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/controller/cursorEvents.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/core/editorState.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/core/position.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/core/range.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/widget/diffNavigator.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/core/editOperation.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/commands/trimTrailingWhitespaceCommand.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/core/selection.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/commands/replaceCommand.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/commands/surroundSelectionCommand.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/core/token.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/core/uint.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/core/characterClassifier.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/controller/wordCharacterClassifier.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/diff/diffComputer.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/editorAction.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/editorCommon.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/controller/textAreaState.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/controller/textAreaInput.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/model/editStack.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/model/indentRanges.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/model/indentationGuesser.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/model/textModelEvents.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/model/textModelSearch.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/model/textSource.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/model/tokensBinaryEncoding.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/core/viewLineToken.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/core/lineTokens.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/model/modelLine.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/model/wordHelper.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/modes/abstractMode.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/modes/languageConfiguration.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/modes/languageSelector.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/modes/languageFeatureRegistry.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/modes/linkComputer.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/modes/supports/characterPair.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/modes/supports/indentRules.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/modes/supports/inplaceReplaceSupport.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/modes/supports/onEnter.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/modes/supports/richEditBrackets.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/modes/supports/tokenization.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/modes/tokenizationRegistry.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/modes.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/modes/nullMode.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/modes/supports.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/modes/supports/electricCharacter.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/modes/languageConfigurationRegistry.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/modes/textToHtmlTokenizer.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/services/abstractCodeEditorService.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/standalone/standaloneBase.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/view/minimapCharRenderer.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/view/renderingContext.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/lines/rangeUtil.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/view/runtimeMinimapCharRenderer.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/view/viewContext.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/view/viewEventDispatcher.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/view/viewEvents.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/viewLayout/lineDecorations.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/viewLayout/viewLineRenderer.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/viewLayout/viewLinesViewportData.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/viewLayout/whitespaceComputer.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/viewLayout/linesLayout.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/viewModel/prefixSumComputer.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/model/mirrorModel.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/services/editorSimpleWorker.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/viewModel/viewEventHandler.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/view/dynamicViewOverlay.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/view/viewPart.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/contentWidgets/contentWidgets.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/decorations/decorations.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/linesDecorations/linesDecorations.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/margin/margin.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/marginDecorations/marginDecorations.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/viewZones/viewZones.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/viewModel/viewModel.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/viewLayout/viewLayout.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/viewModel/viewModelDecorations.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/caretOperations/common/moveCaretCommand.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/comment/common/blockCommentCommand.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/comment/common/lineCommentCommand.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/dnd/common/dragAndDropCommand.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/find/common/findState.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/find/common/replaceAllCommand.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/find/common/replacePattern.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/folding/common/folding.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/folding/common/indentFoldStrategy.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/format/common/formatCommand.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/goToDeclaration/browser/clickLinkGesture.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/hover/browser/hoverOperation.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/hover/browser/hoverWidgets.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/inPlaceReplace/common/inPlaceReplaceCommand.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/indentation/common/indentUtils.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/linesOperations/common/copyLinesCommand.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/linesOperations/common/deleteLinesCommand.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/linesOperations/common/sortLinesCommand.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/quickFix/browser/lightBulbWidget.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/quickFix/browser/quickFixWidget.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/smartSelect/common/tokenTree.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/snippet/browser/snippetParser.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/snippet/browser/snippetVariables.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/suggest/browser/completionModel.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/standalone/browser/colorizer.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/standalone/common/monarch/monarchCommon.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/standalone/common/monarch/monarchCompile.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/standalone/common/monarch/monarchLexer.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/actionbar/actionbar.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/menu/menu.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/aria/aria.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/findinput/findInputCheckboxes.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/inputbox/inputBox.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/findinput/findInput.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/keybindingLabels.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/browser/ui/keybindingLabel/keybindingLabel.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/common/severity.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/parts/quickopen/browser/quickOpenModel.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/parts/tree/browser/treeDefaults.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/parts/tree/browser/treeImpl.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/base/parts/quickopen/browser/quickOpenWidget.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/config/editorOptions.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/config/fontInfo.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/model/textModel.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/controller/cursorCommon.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/commands/shiftCommand.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/controller/cursorColumnSelection.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/controller/cursorMoveOperations.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/controller/cursorDeleteOperations.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/controller/cursorTypeOperations.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/controller/cursorWordOperations.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/controller/cursorMoveCommands.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/controller/oneCursor.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/controller/cursorCollection.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/linesOperations/common/moveLinesCommand.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/controller/cursor.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/model/textModelWithTokens.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/model/textModelWithMarkers.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/model/textModelWithDecorations.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/model/editableTextModel.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/model/model.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/viewModel/splitLinesCollection.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/viewModel/characterHardWrappingLineMapper.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/viewModel/viewModelImpl.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/find/common/findDecorations.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/find/common/findModel.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/folding/common/foldingModel.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/snippet/browser/snippetSession.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/zoneWidget/browser/zoneWidget.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/services/bulkEdit.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/referenceSearch/browser/referencesModel.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/contextview/browser/contextMenuHandler.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/contextview/browser/contextMenuService.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/instantiation/common/descriptors.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/instantiation/common/instantiation.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/services/codeEditorService.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/services/editorWorkerService.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/services/modeService.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/services/modelService.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/services/resolverService.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/services/resourceConfiguration.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/services/editorWorkerServiceImpl.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/services/webWorker.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/smartSelect/common/tokenSelectionSupport.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/standalone/common/standaloneThemeService.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/commands/common/commands.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/links/common/links.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/actions/common/actions.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/configuration/common/configuration.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/contextkey/common/contextkey.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/editorContextKeys.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/modes/editorModeContext.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/actions/common/menu.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/contextview/browser/contextView.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/editor/common/editor.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/environment/common/environment.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/files/common/files.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/instantiation/common/serviceCollection.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/instantiation/common/instantiationService.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/keybinding/common/abstractKeybindingService.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/keybinding/common/keybinding.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/keybinding/common/keybindingResolver.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/contextkey/browser/contextKeyService.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/keybinding/common/resolvedKeybindingItem.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/keybinding/common/usLayoutResolvedKeybinding.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/markers/common/markerService.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/markers/common/markers.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/message/common/message.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/opener/browser/openerService.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/opener/common/opener.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/hover/browser/modesGlyphHover.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/progress/common/progress.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/registry/common/platform.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/editorBrowserExtensions.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/modes/modesRegistry.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/services/modelServiceImpl.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/dnd/browser/dnd.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/jsonschemas/common/jsonContributionRegistry.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/configuration/common/configurationRegistry.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/config/commonEditorConfig.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/services/languagesRegistry.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/services/modeServiceImpl.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/configuration/common/model.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/keybinding/common/keybindingsRegistry.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/standalone/browser/simpleServices.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/storage/common/storage.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/config/configuration.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/view/viewOverlays.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/viewCursors/viewCursor.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/telemetry/common/telemetry.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/editorCommonExtensions.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/commonCodeEditor.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/controller/coreCommands.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/view/viewController.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/caretOperations/common/caretOperations.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/caretOperations/common/transpose.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/clipboard/browser/clipboard.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/codelens/browser/codelens.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/comment/common/comment.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/contextmenu/browser/contextmenu.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/cursorUndo/browser/cursorUndo.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/find/common/findController.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/folding/browser/folding.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/format/common/format.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/format/browser/formatActions.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/goToDeclaration/browser/goToDeclaration.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/hover/common/hover.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/hover/browser/modesContentHover.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/linesOperations/common/linesOperations.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/multicursor/common/multicursor.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/parameterHints/common/parameterHints.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/quickFix/browser/quickFix.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/quickFix/browser/quickFixModel.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/quickFix/browser/quickFixCommands.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/quickOpen/common/quickOpen.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/smartSelect/common/smartSelect.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/snippet/browser/snippetController2.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/suggest/browser/suggest.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/suggest/browser/suggestModel.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/toggleTabFocusMode/common/toggleTabFocusMode.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/wordOperations/common/wordOperations.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/standalone/browser/toggleHighContrast/toggleHighContrast.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/contextview/browser/contextViewService.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/theme/common/colorRegistry.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/theme/common/styler.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/standalone/browser/quickOpen/quickOpenEditorWidget.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/theme/common/themeService.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/services/codeEditorServiceImpl.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/editorScrollbar/editorScrollbar.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/lines/viewLine.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/controller/mouseTarget.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/controller/mouseHandler.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/controller/pointerHandler.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/view/viewOutgoingEvents.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/lines/viewLines.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/minimap/minimap.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/selections/selections.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/view/editorColorRegistry.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/currentLineMarginHighlight/currentLineMarginHighlight.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/indentGuides/indentGuides.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/controller/textAreaHandler.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/rulers/rulers.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/widget/diffReview.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/common/view/overviewZoneManager.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/overviewRuler/overviewRulerImpl.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/viewParts/overviewRuler/overviewRuler.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/view/viewImpl.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/widget/codeEditorWidget.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/codeEditor.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/widget/diffEditorWidget.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/browser/widget/embeddedCodeEditorWidget.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/bracketMatching/common/bracketMatching.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/codelens/browser/codelensWidget.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/codelens/browser/codelensController.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/find/browser/findOptionsWidget.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/find/browser/findWidget.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/find/browser/find.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/goToDeclaration/browser/messageController.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/gotoError/browser/gotoError.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/hover/browser/hover.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/inPlaceReplace/common/inPlaceReplace.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/links/browser/links.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/parameterHints/browser/parameterHints.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/rename/browser/renameInputField.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/rename/browser/rename.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/suggest/browser/suggestWidget.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/suggest/browser/suggestController.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/wordHighlighter/common/wordHighlighter.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/zoneWidget/browser/peekViewWidget.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/standalone/browser/inspectTokens/inspectTokens.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/standalone/browser/quickOpen/editorQuickOpen.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/standalone/browser/quickOpen/gotoLine.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/standalone/browser/quickOpen/quickCommand.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/standalone/browser/quickOpen/quickOutline.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/standalone/browser/standaloneCodeEditor.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/standalone/common/themes.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/standalone/browser/standaloneThemeServiceImpl.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/platform/workspace/common/workspace.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/referenceSearch/browser/referencesWidget.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/referenceSearch/browser/referencesController.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/goToDeclaration/browser/goToDeclarationCommands.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/goToDeclaration/browser/goToDeclarationMouse.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/contrib/referenceSearch/browser/referenceSearch.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/editor.all.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/standalone/browser/standaloneServices.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/standalone/browser/standaloneEditor.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/standalone/browser/standaloneLanguages.ts","vs/editor/file:/Users/alex/src/vscode/src/vs/editor/editor.main.ts"],"names":["Lexer","options","this","tokens","links","marked","defaults","rules","block","normal","gfm","tables","InlineLexer","inline","renderer","Renderer","Error","breaks","pedantic","Parser","token","escape","html","encode","replace","unescape","_","n","toLowerCase","charAt","String","fromCharCode","parseInt","substring","regex","opt","source","self","name","val","RegExp","noop","merge","obj","target","key","i","arguments","length","Object","prototype","hasOwnProperty","call","src","callback","pending","highlight","lex","e","done","err","out","parse","type","text","lang","code","escaped","message","silent","CSSLoaderPlugin","__m","__M","deps","result","len","init","define","CSSPlugin","BrowserCSSLoader","_pendingLoads","attachListeners","linkNode","errorback","unbind","removeEventListener","loadEventListener","errorEventListener","addEventListener","_onLoad","_onLoadError","_insertLinkNode","head","document","getElementsByTagName","other","insertBefore","appendChild","createLinkTag","cssUrl","externalCallback","externalErrorback","_this","createElement","setAttribute","_linkTagExists","nameAttr","hrefAttr","getAttribute","load","_cssLoader","req","toUrl","contents","error","doNotInitLoader","NLSLoaderPlugin","_format","args","env","match","rest","index","isPseudo","findLanguageForModule","config","localize","data","_i","createScopedLocalize","scope","idx","defaultValue","restArgs","Array","slice","NLSPlugin","Environment","detect","location","hash","indexOf","_env","apply","concat","setPseudoTranslation","value","create","pluginConfig","language","availableLanguages","suffix","DEFAULT_TAG","messages","isArray","getParentWindowIfSameOrigin","w","parent","location_1","parentLocation","protocol","hostname","port","hasDifferentOriginAncestorFlag","findIframeElementInParentWindow","parentWindow","childWindow","iframe","parentWindowIframes","contentWindow","sameOriginWindowChainCache","IframeUtils","getSameOriginWindowChain","parent_1","window","push","iframeElement","hasDifferentOriginAncestor","getPositionOfChildWindowRelativeToAncestorWindow","ancestorWindow","top","left","windowChain","windowChainEl","boundingRect","getBoundingClientRect","exports","intersect","one","start","end","Math","max","min","isEmpty","range","groupIntersect","groups","groups_1","r","intersection","size","shift","_a","much","consolidate","previousGroup","groups_2","group","reduce","g","relativeComplement","first","second","each","fn","RangeMap","_size","splice","deleteCount","items","diff","before","after","Number","POSITIVE_INFINITY","map","middle","item","t","defineProperty","indexAt","position","count","newSize","floor","indexAfter","positionAt","groupCount","newCount","dispose","ScrollbarState","arrowSize","scrollbarSize","oppositeScrollbarSize","_scrollbarSize","round","_oppositeScrollbarSize","_arrowSize","_visibleSize","_scrollSize","_scrollPosition","_computedAvailableSize","_computedIsNeeded","_computedSliderSize","_computedSliderRatio","_computedSliderPosition","_refreshComputedValues","clone","setVisibleSize","setScrollSize","setScrollPosition","visibleSize","iVisibleSize","scrollSize","iScrollSize","scrollPosition","iScrollPosition","_computeValues","computedAvailableSize","computedRepresentableSize","computedIsNeeded","computedSliderSize","computedSliderRatio","computedSliderPosition","getArrowSize","getScrollPosition","getRectangleLargeSize","getRectangleSmallSize","isNeeded","getSliderSize","getSliderPosition","getSliderCenter","getDesiredScrollPositionFromOffset","offset","desiredSliderPosition","getDesiredScrollPositionFromDelta","delta","findFirst","array","p","low","high","mid","_divideAndMerge","compare","right","leftIdx","rightIdx","ret","firstIndex","tail","equals","itemEquals","a","b","binarySearch","comparator","comp","mergeSort","groupBy","currentGroup","sort","element","removed","added","beforeIdx","afterIdx","beforeElement","afterElement","m","pop","j","coalesce","filter","move","from","to","isFalsyOrEmpty","distinct","keyFn","seen","elem","uniqueFilter","notFoundValue","commonPrefixLength","flatten","arr","v","fill","num","valueFn","indexer","merger","insert","arrayInsert","insertIndex","insertArr","ok","values","forEach","remove","groupFn","data_1","hex2rgba","hex","charCodeAt","_parseHexDigit","RGBA","charCode","rgba2hsla","rgba","h","s","l","chroma","HSLA","hsla2rgba","hsla","q","_hue2rgb","_clampInt_0_255","c","_clampFloat_0_360","_clampFloat_0_1","hue","colorPattern","isValidHexColor","test","Color","arg","fromRGBA","fromHex","parseErrorColor","red","fromHSLA","getLuminosity","luminosity","_luminosityFor","color","pow","getContrast","another","lum1","lum2","isDarker","isLighter","isLighterThan","isDarkerThan","lighten","factor","hsl","toHSLA","darken","transparent","isTransparent","opposite","toString","toRGBHex","toFixed","_toTwoDigitHex","toRGBAHex","compact","toRGBA","getLighterColor","of","relative","getDarkerColor","white","black","blue","green","cyan","lightgrey","memoize","descriptor","fnKey","get","memoizeKey","configurable","enumerable","writable","DifferenceType","Add","Remove","Change","DiffChange","originalStart","originalLength","modifiedStart","modifiedLength","getChangeType","getOriginalEnd","getModifiedEnd","createStringSequence","getLength","getElementHash","pos","stringDiff","original","modified","LcsDiff","ComputeDiff","Debug","Assert","condition","MyArray","Copy","sourceArray","sourceIndex","destinationArray","destinationIndex","DiffChangeHelper","m_changes","m_originalStart","MAX_VALUE","m_modifiedStart","m_originalCount","m_modifiedCount","MarkNextChange","diffChange_1","AddOriginalElement","originalIndex","modifiedIndex","AddModifiedElement","getChanges","getReverseChanges","reverse","originalSequence","newSequence","continueProcessingPredicate","OriginalSequence","ModifiedSequence","ContinueProcessingPredicate","m_originalIds","m_modifiedIds","m_forwardHistory","m_reverseHistory","ComputeUniqueIdentifiers","originalSequenceLength","modifiedSequenceLength","hashTable","currentUniqueId","originalElementHash","modifiedElementHash","ElementsAreEqual","newIndex","_ComputeDiff","originalEnd","modifiedEnd","quitEarlyArr","ComputeDiffRecursive","changes","midOriginalArr","midModifiedArr","ComputeRecursionPoint","midOriginal","midModified","leftChanges","rightChanges","ConcatenateChanges","WALKTRACE","diagonalForwardBase","diagonalForwardStart","diagonalForwardEnd","diagonalForwardOffset","diagonalReverseBase","diagonalReverseStart","diagonalReverseEnd","diagonalReverseOffset","forwardPoints","reversePoints","deltaIsEven","diagonal","forwardChanges","reverseChanges","changeHelper","diagonalMin","diagonalMax","diagonalRelative","lastOriginalIndex","MIN_VALUE","historyIndex","originalStartPoint","modifiedStartPoint","lastForwardChange","numDifferences","maxDifferences","numDiagonals","tempOriginalIndex","furthestOriginalIndex","furthestModifiedIndex","ClipDiagonalBound","abs","matchLengthOfLongest","temp","mergedChangeArr","ChangesOverlap","diagonalBaseIndex","diagonalsBelow","diagonalsAbove","diffEven","Event","originalEvent","time","Date","getTime","PropertyChangeEvent","_super","oldValue","newValue","__extends","ViewerEvent","EventType","PROPERTY_CHANGED","SELECTION","FOCUS","BLUR","HIGHLIGHT","EXPAND","COLLAPSE","TOGGLE","BEFORE_RUN","RUN","EDIT","SAVE","CANCEL","CHANGE","DISPOSE","not","once","didCall","hashVal","numberHash","arrayHash","objectHash","stringHash","booleanHash","initialHashVal","length_1","keys","markedStringArrEquals","aLen","markedStringEqual","markedStringsEquals","textToMarkedString","removeMarkdownEscapes","IdGenerator","prefix","_prefix","_lastId","nextId","defaultGenerator","ArrayIterator","current","next","ArrayNavigator","previous","last","MappedIterator","iterator","MappedNavigator","navigator","HistoryNavigator","history","limit","_initialize","_limit","_onChange","add","_history","addIfNotPresent","has","_navigator","_reduceToLimit","iterator_1","_elements","Set","history_1","entry","elements","createScanner","ignoreTrivia","scanHexDigits","exact","digits","ch","scanNumber","isDigit","scanError","ScanError","UnexpectedEndOfNumber","scanString","UnexpectedEndOfString","isLineBreak","InvalidCharacter","ch_1","InvalidUnicode","InvalidEscapeCharacter","scanNext","None","tokenOffset","SyntaxKind","EOF","isWhiteSpace","Trivia","LineBreakTrivia","OpenBraceToken","CloseBraceToken","OpenBracketToken","CloseBracketToken","ColonToken","CommaToken","StringLiteral","LineCommentTrivia","safeLength","commentClosed","UnexpectedEndOfComment","BlockCommentTrivia","Unknown","NumericLiteral","isUnknownContentCharacter","TrueKeyword","FalseKeyword","NullKeyword","setPosition","newPosition","getPosition","scan","getToken","getTokenValue","getTokenOffset","getTokenLength","getTokenError","getLiteralNodeType","getNodeValue","node","children","prop","visit","visitor","toNoArgVisit","visitFunction","_scanner","toOneArgVisit","disallowComments","handleError","ParseErrorCode","InvalidSymbol","skipUntilAfter","skipUntil","onError","parseString","isValue","onLiteralValue","onObjectProperty","parseLiteral","JSON","InvalidNumberFormat","parseProperty","PropertyNameExpected","onSeparator","parseValue","ValueExpected","ColonExpected","parseObject","onObjectBegin","needsComma","allowTrailingComma","CommaExpected","onObjectEnd","CloseBraceExpected","parseArray","onArrayBegin","onArrayEnd","CloseBracketExpected","EndOfFileExpected","CharacterCodes","stripComments","replaceCh","kind","parts","join","getLocation","setPreviousNode","previousNodeInst","columnOffset","previousNode","segments","earlyReturnException","isAtPropertyKey","sep","path","matches","pattern","k","errors","onValue","currentParent","currentProperty","previousParents","object","parseTree","ensurePropertyComplete","endOffset","valueNode","findNodeAtLocation","root","path_1","segment","found","_b","propertyNode","createSimpleKeybinding","keybinding","OS","ctrlCmd","winCtrl","SimpleKeybinding","KeyCode","KeyCodeStrMap","_keyCodeToStr","_strToKeyCode","keyCode","str","keyCodeToStr","strToKeyCode","uiMap","userSettingsUSMap","userSettingsGeneralMap","uiLabel","usUserSettingsLabel","generalUserSettingsLabel","KeyCodeUtils","fromString","toUserSettingsUS","toUserSettingsGeneral","fromUserSettings","BinaryKeybindingsMask","KeyMod","KeyChord","firstPart","secondPart","createKeybinding","chordPart","ChordKeybinding","KeybindingType","ctrlKey","shiftKey","altKey","metaKey","isModifierKey","isDuplicateModifierCase","ResolvedKeybindingPart","kbLabel","kbAriaLabel","keyLabel","keyAriaLabel","ResolvedKeybinding","d","empty","freeze","combinedDisposable","disposables","toDisposable","fns","fns_1","Disposable","_toDispose","_register","OneDisposable","_value","ReferenceCollection","references","acquire","reference","counter","createReferencedObject","functional_1","destroyReferencedObject","ImmortalReference","newline","fences","hr","heading","nptable","lheading","blockquote","list","def","table","paragraph","bullet","_tag","bq","loose","cap","bull","space","exec","depth","header","split","align","cells","ordered","smartLists","sanitize","pre","sanitizer","href","title","autolink","url","tag","link","reflink","nolink","strong","em","br","del","_inside","_href","output","mangle","inLink","outputLink","codespan","smartypants","image","random","langPrefix","quote","level","raw","headerPrefix","xhtml","body","listitem","tablerow","content","tablecell","flags","prot","decodeURIComponent","tok","peek","parseText","row","cell","setOptions","parser","lexer","inlineLexer","Schemas","inMemory","vscode","internal","walkThrough","walkThroughSnippet","http","https","file","untitled","_isWindows","_isMacintosh","_isLinux","_isRootUser","_isNative","_isWeb","_locale","undefined","_language","LANGUAGE_DEFAULT","process","platform","getuid","rawNlsConfig","nlsConfig","resolved","locale","userAgent","Platform","_platform","Web","Mac","Windows","Linux","isWindows","isMacintosh","isLinux","isRootUser","isNative","isWeb","_globals","global","globals","hasWebWorkerSupport","Worker","setTimeout","bind","clearTimeout","setInterval","clearInterval","OperatingSystem","AccessibilitySupport","isUpper","wordPathBoundary","score","query","cache","cached","queryLen","targetLower","queryLower","startAt","some","lastIndexOf","hasPerformanceNow","platform_1","performance","now","StopWatch","highResolution","_highResolution","_startTime","_now","_stopTime","stop","elapsed","_typeof","number","constructor","isString","string","isObject","isUndefined","isFunction","function","validateConstraint","constraint","isStringArray","every","isNumber","isNaN","isBoolean","isUndefinedOrNull","isEmptyObject","areFunctions","objects","validateConstraints","constraints","ctor","newNode","incoming","outgoing","Graph","_hashFn","_nodes","roots","collections_1","types_1","traverse","inwards","startNode","lookup","_traverse","nodes","insertEdge","fromNode","lookupOrInsertNode","toNode","removeNode","deepClone","getOwnPropertyNames","_cloneAndChange","changer","encounteredObjects","Types","changed","r1","i1","r2","i2","mixin","destination","overwrite","assign","sources","oneKeys","otherKeys","arrayToHash","cloneAndChange","toObject","keyMap","o","ensureProperty","property","createKeywordMatcher","caseInsensitive","x","word","derive","baseClass","derivedClass","basePrototype","derivedPrototype","getOwnPropertyDescriptor","safeStringify","stringify","getOrDefault","base","baseValue","targetValue","_encode","toUpperCase","encodeURIComponent2","encodeURIComponent","encodeNoop","URI","_scheme","_empty","_authority","_path","_query","_fragment","_formatted","_fsPath","isUri","thing","authority","fragment","scheme","_driveLetterPath","substr","with","change","_validate","_parseComponents","_slash","_regexp","components","_schemePattern","_singleSlashStart","_doubleSlashStart","skipEncoding","_asFormatted","uri","encoder","_upperCaseDrive","lastIdx","toJSON","res","fsPath","external","$mid","revive","getOrSet","set","BoundedMap","ratio","Map","entries","setLimit","trim","serialize","serialized","delete","prev","clear","Node","TrieMap","splitter","_root","_splitter","child","lookUp","parts_1","part","findSubstr","lastNode","parts_2","findSuperstr","parts_3","PathSplitter","ResourceMap","ignoreCase","resource","toKey","clb","StrictResourceMap","uri_1","default","Touch","First","Last","LinkedMap","_map","_head","_tail","touch","addItemLast","addItemFirst","removeItem","callbackfn","thisArg","forEachReverse","replacer","multiline","reviver","marshallingConst","escapeRegExpCharacters","ltrim","haystack","needle","needleLen","rtrim","haystackLen","isLowerAsciiLetter","isUpperAsciiLetter","isAsciiLetter","doEqualsIgnoreCase","stopAt","codeA","codeB","substrEquals","aStart","aEnd","bStart","bEnd","isFullWidthCharacter","isFalsyOrWhitespace","pad","char","_formatRegexp","format","convertSimple2RegExpPattern","stripWildcards","startsWith","endsWith","indexOfIgnoreCase","search","createRegExp","searchString","isRegex","wholeWord","modifiers","matchCase","regExpLeadsToEndlessLoop","regexp","lastIndex","canNormalize","nonAsciiCharactersPattern","normalizedCache","map_1","normalizeNFC","normalize","firstNonWhitespaceIndex","chCode","getLeadingWhitespace","lastNonWhitespaceIndex","startIndex","compareIgnoreCase","equalsIgnoreCase","beginsWithIgnoreCase","candidate","candidateLength","commonSuffixLength","aLastIndex","bLastIndex","overlap","isHighSurrogate","isLowSurrogate","CONTAINS_RTL","containsRTL","CONTAINS_EMOJI","containsEmoji","IS_BASIC_ASCII","isBasicASCII","containsFullWidthCharacter","difference","maxLenDelta","lengthDifference","LCS","zeroArray","sqrt","computeLineStarts","lcut","EL","COLOR_START","COLOR_END","removeAnsiEscapeCodes","UTF8_BOM_CHARACTER","startsWithUTF8BOM","appendWithLimit","maxLength","newLength","safeBtoa","btoa","repeat","expand","OcticonLabel","MockOcticonLabel","container","_container","innerHTML","strings_1","or","wordToMatchAgainst","_matchesPrefix","strings","matchesContiguousSubString","matchesSubString","_matchesSubString","isLower","isWhitespace","isAlphanumeric","unshift","nextAnchor","camelCaseWord","_matchesCamelCase","nextUpperIndex","analyzeCamelCaseWord","upper","lower","alpha","numeric","upperPercent","lowerPercent","alphaPercent","numericPercent","isUpperCaseWord","analysis","isCamelCaseWord","isCamelCasePattern","whitespace","matchesCamelCase","_matchesWords","contiguous","nextWordIndex","nextWord","initTable","thisRow","printTable","patternLen","wordLen","fuzzyScore","patternMaxWhitespaceIgnore","patternStartPos","_ws","lowPattern","lowWord","patternPos","wordPos","lastLowWordChar","lowWordChar","_seps","_scores","diag","_table","top_1","_arrows","_debug","console","log","_bucket","_topScore","_patternStartPos","_findAllMatches","LazyArray","toArray","total","lastMatched","simpleMatchCount","arrow","nextTypoPermutation","and","matchesStrictPrefix","matchesPrefix","matchesWords","SubstringMatching","fuzzyContiguousFilter","fuzzySeparateFilter","fuzzyRegExpCache","matchesFuzzy","enableSeparateSubstringMatching","createMatches","position_1","Arrow","_data","_parent","_parentLen","bucket","fuzzyScoreGraceful","basename","_isNormal","win","_winBadPath","_posixBadPath","toOSPath","wantsBackslash","getRoot","skip","streql","prev_start","prev_part","pos_1","isAbsolute_win32","char0","char2","isAbsolute_posix","nativeSep","originalNormalizedFrom","originalNormalizedTo","normalizedFrom","normalizedTo","fromParts","toParts","arrays_1","dirname","extname","isUNC","INVALID_FILE_CHARS","WINDOWS_FORBIDDEN_NAMES","isValidBasename","isEqual","pathA","pathB","identityEquals","isEqualOrParent","sepOffset","isAbsolute","compareFileNames","intlFileNameCollator","intlFileNameCollatorIsNumeric","noIntlCompareFileNames","oneMatch","FileNameMatch","otherMatch","oneName","oneExtension","otherName","otherExtension","compareAnything","lookFor","elementAName","elementBName","prefixCompare","compareByPrefix","elementASuffixMatch","localeCompare","elementAPrefixMatch","elementBPrefixMatch","setFileNameComparer","collator","resolvedOptions","comparePaths","endOne","endOther","onePart","otherPart","oneParts","paths","otherParts","lastOne","lastOther","compareByScore","elementA","elementB","accessor","lookForNormalizedLower","scorerCache","labelA","getLabel","labelB","labelAScore","scorer","labelBScore","resourcePathA","getResourcePath","resourcePathB","resourceAScore","resourceBScore","tildify","userHome","paths_1","getPathLabel","rootProvider","userHomeProvider","baseResource","hasMultipleRoots","getWorkspace2","pathLabel","rootName","ellipsis","unc","shorten","shortenedPaths","pathIndex","subpathLength","subpath","otherPathIndex","isSubpathEnding","subpathWithSep","isOtherPathEnding","Type","template","inVariable","curVal","TEXT","VARIABLE","prevSegment","SEPARATOR","label","_modules","_winjs","moduleId","factory","exportsPassedIn","depsValues","dep","_Global","hasWinRT","markSupportedForProcessing","func","supportedForProcessing","_setImmediate","setImmediate","handler","msWriteProfilerMark","_WinJS","_BaseCoreUtils","_WriteProfilerMark","initializeProperties","members","properties","member","setName","defineProperties","createNamespace","parentNamespace","currentNamespace","namespaceFragments","namespaceName","defineWithParent","_rootNamespace","Namespace","LazyStates","uninitialized","working","initialized","_lazy","f","state","_moduleDefine","publicNS","instanceMembers","staticMembers","mix","Class","_Base","ErrorFromName","createEventProperty","eventPropStateName","userHandler","wrapper","evt","EventMixinEvent","detail","timeStamp","bubbles","cancelable","currentTarget","defaultPrevented","_preventDefaultCalled","trusted","eventPhase","preventDefault","stopImmediatePropagation","_stopImmediatePropagationCalled","stopPropagation","eventMixin","_listeners","listener","useCapture","eventListeners","dispatchEvent","details","listeners","eventValue","_createEventProperty","createEventProperties","props","nop","_traceAsyncOperationStarting","msTraceAsyncOperationStarting","_traceAsyncOperationCompleted","msTraceAsyncOperationCompleted","_traceAsyncCallbackStarting","msTraceAsyncCallbackStarting","_traceAsyncCallbackCompleted","msTraceAsyncCallbackCompleted","_ErrorFromName","_Events","_Trace","completed","promise","targetState","then","state_waiting","state_success_notify","_setState","createErrorDetails","exception","id","detailsForHandledError","errorValue","context","_isException","errorId","_errorId","detailsForChainedError","setErrorInfo","detailsForError","error_number","detailsForException","exceptionValue","onComplete","onProgress","pushListener","asyncOpID","onerrorDetails","callonerror","state_error_notify","notifySuccess","queue","MS_ASYNC_OP_STATUS_SUCCESS","_setCompleteValue","ex","_setExceptionValue","_state","CompletePromise","notifyError","errorID","canceledName","MS_ASYNC_OP_STATUS_CANCELED","MS_ASYNC_OP_STATUS_ERROR","asyncCallbackStarted","handlesOnError","_setChainedErrorValue","ErrorPromise","onerrorDetailsGenerator","promiseEventListeners","errorET","progress","_progress","isException","setErrorValue","state_error","setCompleteValue","state_success","ThenPromise","timeout","timeoutMS","Promise","timeoutWithPromise","cancelTimeout","cancel","setNonUserCodeExceptions","tagWithStack","thenPromise","errorPromise","exceptionPromise","completePromise","all","state_created","state_working","state_waiting_canceled","state_canceled","state_canceling","enter","_completed","_error","_notify","_setErrorValue","waitedUpon","_chainedError","_cancelAction","_cleanupAction","staticCanceledPromise","PromiseStateMachine","_nextState","_run","creator","_stack","_getStack","_creator","unused","_doneHandler","ExceptionPromise","oncancel","_oncancel","stack","eventType","capture","any","complete","canceled","as","is","results","undefineds","argDone","errorCount","canceledCount","Key","Done","thenEach","wrap","wrapError","_veryExpensiveTagWithStack","_veryExpensiveTagWithStack_tag","debuggerEnabled","_cancelBlocker","input","_StateMachine","exported","amd","module","nextTick","winjs","TPromise","PPromise","onUnexpectedError","isPromiseCanceledError","errorHandler","outstandingPromiseErrors","winjs_base_1","ErrorHandler","unexpectedErrorHandler","addListener","_removeListener","emit","setUnexpectedErrorHandler","newUnexpectedErrorHandler","getUnexpectedErrorHandler","onUnexpectedExternalError","onUnexpectedPromiseError","transformErrorForSerialization","$isError","stacktrace","notImplemented","illegalArgument","illegalState","readonly","types","severity","actions","getErrorMessage","CallbackList","_callbacks","_contexts","foundCallbackWithDifferentContext","invoke","callbacks","contexts","errors_1","event","thisArgs","mapEvent","filterEvent","_disposable","Emitter","_options","_event","callbackList_1","firstListener","onFirstListenerAdd","onFirstListenerDidAdd","onListenerDidAdd","_noop","_disposed","onLastListenerRemove","fire","EventMultiplexer","hasListeners","events","emitter","hook","lifecycle_1","unhook","fromEventEmitter","fromCallback","fromPromise","shouldEmit","toPromise","sub","delayed","toCancel","debounceEvent","delay","leading","subscription","handle","cur","_output","EventBufferer","buffers","wrapEvent","buffer","bufferEvents","flush","ChainableEvent","on","chain","stopwatch","echo","getZoomLevel","WindowManager","INSTANCE","getPixelRatio","_zoomLevel","_lastZoomLevelChangeTime","_onDidChangeZoomLevel","event_1","onDidChangeZoomLevel","_zoomFactor","_onDidChangeFullscreen","onDidChangeFullscreen","_accessibilitySupport","_onDidChangeAccessibilitySupport","onDidChangeAccessibilitySupport","getTimeSinceLastZoomLevelChanged","setZoomLevel","zoomLevel","isTrusted","getZoomFactor","setZoomFactor","zoomFactor","ctx","getContext","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","setFullscreen","fullscreen","_fullscreen","isFullscreen","setAccessibilitySupport","accessibilitySupport","getAccessibilitySupport","isIE","isEdge","isEdgeOrIE","isOpera","isFirefox","isWebKit","isChrome","isSafari","isIPad","isChromev56","supportsTranslate3d","canUseTranslate3d","pixelRatio","domEvent","extractKeyCode","keyCodes_1","KEY_CODE_MAP","browser","ctrlKeyMod","metaKeyMod","StandardKeyboardEvent","browserEvent","_asKeybinding","_computeKeybinding","_asRuntimeKeybinding","_computeRuntimeKeybinding","toKeybinding","StandardMouseEvent","timestamp","leftButton","button","middleButton","rightButton","pageX","posx","posy","pageY","clientX","scrollLeft","documentElement","clientY","scrollTop","iframeOffsets","iframe_1","view","DragMouseEvent","dataTransfer","DropMouseEvent","StandardMouseWheelEvent","deltaX","deltaY","targetNode","srcElement","e1","e2","wheelDeltaY","VERTICAL_AXIS","axis","wheelDeltaX","HORIZONTAL_AXIS","wheelDelta","CancellationToken","shortcutEvent","isCancellationRequested","onCancellationRequested","Cancelled","MutableToken","_isCancelled","_emitter","CancellationTokenSource","_token","isThenable","always","toThenable","asWinJsPromise","cancellation_1","resolve","reject","wireCancellationToken","resolveAsUndefinedWhenCancelled","Throttler","activePromise","queuedPromise","queuedPromiseFactory","promiseFactory","onComplete_1","SimpleThrottler","promiseTask","Delayer","defaultDelay","completionPromise","onSuccess","task","trigger","isTriggered","ThrottledDelayer","throttler","PeriodThrottledDelayer","minimumPeriod","periodThrottler","PromiseSource","_completeCallback","_errorCallback","ShallowCancelThenPromise","outer","completeCallback","errorCallback","progressCallback","sequence","promiseFactories","thenHandler","shouldStop","loop","Limiter","maxDegreeOfParalellism","outstandingPromises","runningPromises","_onFinished","consume","iLimitedTask","consumed","Queue","setDisposableTimeout","TimeoutTimer","cancelAndSet","runner","setIfNotSet","IntervalTimer","interval","RunOnceScheduler","timeoutToken","timeoutHandler","onTimeout","isScheduled","setRunner","schedule","nfcall","ninvoke","safeInvokeNoArg","Errors","safeInvoke1Arg","arg1","EmitterEvent","EventEmitter","allowedEventTypes","_bulkListeners","_collectedEvents","_deferredCnt","_allowedEventTypes","bound","addOneTimeListener","disposable","addBulkListener","_removeBulkListener","addEmitter","eventEmitter","_emitEvents","_emitToSpecificTypeListeners","_emitToBulkListeners","bulkListeners","emitterEvent","beginDeferredEmit","endDeferredEmit","_emitCollected","deferredEmit","EmitQueueElement","OrderGuaranteeEventEmitter","_emitQueue","queueElement","addDisposableListener","DomListener","_wrapAsStandardMouseEvent","mouseEvent_1","_wrapAsStandardKeyboardEvent","keyboardEvent_1","getComputedStyle","el","defaultView","getDimension","cssPropertyName","jsPropertyName","computedStyle","getPropertyValue","convertToPixels","getTopLeftOffset","offsetParent","offsetTop","offsetLeft","parentNode","direction","sizeUtils","getBorderLeftWidth","getBorderTopWidth","getTotalWidth","margin","getMarginLeft","getMarginRight","offsetWidth","getTotalScrollWidth","scrollWidth","getRelativeLeft","elementPosition","parentPosition","createStyleSheet","style","media","getDynamicStyleSheetRules","sheet","cssRules","findParentWithAttribute","attribute","HTMLElement","hasAttribute","clearNode","firstChild","removeChild","safeStringifyDOMAware","Element","isInDOM","_manualClassList","class_1","_findClassName","className","classes","classesLen","classLen","_lastStart","_lastEnd","idxEnd","hasClass","addClass","removeClass","toggleClass","shouldHaveIt","_nativeClassList","class_2","classList","contains","toggle","_classList","_node","_type","_handler","_useCapture","addStandardDisposableListener","wrapHandler","addDisposableNonBubblingMouseOutListener","toElement","relatedTarget","_animationFrame","nativeRequestAnimationFrame","requestAnimationFrame","msRequestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","nativeCancelAnimationFrame","cancelAnimationFrame","cancelRequestAnimationFrame","msCancelAnimationFrame","msCancelRequestAnimationFrame","webkitCancelAnimationFrame","webkitCancelRequestAnimationFrame","mozCancelAnimationFrame","mozCancelRequestAnimationFrame","oCancelAnimationFrame","oCancelRequestAnimationFrame","request","AnimationFrameQueueItem","priority","_runner","_canceled","execute","NEXT_QUEUE","CURRENT_QUEUE","animFrameRequested","inAnimationFrameRunner","animationFrameRunner","scheduleAtNextAnimationFrame","runAtThisOrScheduleAtNextAnimationFrame","MINIMUM_TIME_MS","DEFAULT_EVENT_MERGER","lastEvent","currentEvent","TimeoutThrottledDomListener","eventMerger","minimumTimeMs","lastHandlerTime","async_1","invokeHandler","elapsedTime","addDisposableThrottledListener","parseFloat","getBorderRightWidth","getBorderBottomWidth","getPaddingLeft","getPaddingTop","getPaddingRight","getPaddingBottom","getMarginTop","getMarginBottom","__commaSentinel","getDomNodePagePosition","domNode","bb","StandardWindow","scrollX","scrollY","width","height","class_3","getContentWidth","border","padding","getContentHeight","offsetHeight","getTotalHeight","getLargestChildWidth","childWidths","isAncestor","testChild","testAncestor","findParentWithClass","clazz","stopAtClazz","sharedStyle","createCSSRule","selector","cssText","insertRule","getCSSRule","rule","selectorText","removeCSSRulesContainingSelector","ruleName","toDelete","deleteRule","isHTMLElement","nodeType","nodeName","CLICK","AUXCLICK","DBLCLICK","MOUSE_UP","MOUSE_DOWN","MOUSE_OVER","MOUSE_MOVE","MOUSE_OUT","CONTEXT_MENU","WHEEL","KEY_DOWN","KEY_PRESS","KEY_UP","LOAD","UNLOAD","ABORT","ERROR","RESIZE","SCROLL","SELECT","SUBMIT","RESET","INPUT","STORAGE","DRAG_START","DRAG","DRAG_ENTER","DRAG_LEAVE","DRAG_OVER","DROP","DRAG_END","ANIMATION_START","ANIMATION_END","ANIMATION_ITERATION","EventHelper","cancelBubble","returnValue","saveParentsScrollTop","ELEMENT_NODE","restoreParentsScrollTop","FocusTracker","hasFocus","loosingFocus","_eventEmitter","eventEmitter_1","addFocusListener","addBlurListener","trackFocus","append","prepend","SELECTOR_REGEX","$","description","attrs","createTextNode","separator","cloneNode","show","elements_1","display","hide","elements_2","removeTabIndexAndUpdateFocus","activeElement","parentFocusable","parentElement","focus","removeAttribute","finalHandler","domContentLoaded","readyState","computeScreenAwareSize","cssPx","screenPx","FastDomNode","_maxWidth","_width","_height","_top","_left","_bottom","_right","_fontFamily","_fontWeight","_fontSize","_lineHeight","_letterSpacing","_className","_display","_position","_visibility","_layerHint","setMaxWidth","maxWidth","setWidth","unsetWidth","setHeight","unsetHeight","setTop","unsetTop","setLeft","setBottom","bottom","setRight","setFontFamily","fontFamily","setFontWeight","fontWeight","setFontSize","fontSize","setLineHeight","lineHeight","setLetterSpacing","letterSpacing","setClassName","toggleClassName","dom","addClassName","removeClassName","setDisplay","setVisibility","visibility","setLayerHinting","layerHint","willChange","createFastDomNode","standardMouseMoveMerger","ev","GlobalMouseMoveMonitor","hooks","mouseMoveEventMerger","mouseMoveCallback","onStopCallback","stopMonitoring","invokeStopCallback","isMonitoring","startMonitoring","lastSameOriginAncestor","tagName","renderMarkdown","markdown","signalInnerHTML","withInnerHTML","codeBlockRenderer","actionCallback","marked_1","dimensions","splitted","parameters","heightFromParams","widthFromParams","widthIsFinite","isFinite","heightIsFinite","attributes","htmlContent_1","id_1","idGenerator_1","strValue","span","querySelector","DOM","dataset","_renderFormattedText","treeNode","nodeChild","parseFormattedText","actionItemIndex","stream","StringStream","eos","isEscapedFormatType","formatTagType","isFormatTag","advance","newCurrent","textCurrent","renderMarkedString","markedString","renderText","textContent","renderFormattedText","formattedText","FormatType","Tap","Start","End","Contextmenu","Gesture","callOnTarget","activeTouches","targetElement","DomUtils","onTouchStart","onTouchEnd","onTouchMove","newGestureEvent","createEvent","initEvent","targetTouches","identifier","initialTarget","initialTimeStamp","initialPageX","initialPageY","rollingTimestamps","rollingPageX","rollingPageY","activeTouchCount","changedTouches","holdTime","HOLD_DELAY","arrays","finalX","finalY","deltaT","inertia","warn","t1","vX","dirX","vY","dirY","y","delta_pos_x","delta_pos_y","stopped","SCROLL_FRICTION","translationX","translationY","HighlightedLabel","didEverRender","highlights","render","htmlContent","octiconLabel_1","removeFromParent","RowCache","renderers","alloc","templateId","getTemplateCache","dom_1","templateData","renderTemplate","release","releaseRow","garbageCollect","cachedRow","disposeTemplate","Widget","onclick","onmousedown","onmouseover","onnonbubblingmouseout","onkeydown","onkeyup","oninput","onblur","onfocus","onchange","ARROW_IMG_SIZE","ScrollbarArrow","opts","_onActivate","onActivate","bgDomNode","bgWidth","bgHeight","_mouseMoveMonitor","globalMouseMoveMonitor_1","_arrowMouseDown","_mousedownRepeatTimer","_mousedownScheduleRepeatTimer","mouseMoveData","widget_1","isAction","Action","class","enabled","checked","run","cssClass","_onDidChange","_id","_label","_cssClass","_enabled","_actionCallback","_setLabel","_tooltip","_setTooltip","tooltip","_setClass","_setEnabled","_checked","_setChecked","_radio","_setRadio","radio","_order","ActionRunner","action","Events","runAction","starsToRegExp","starCount","NO_PATH_REGEX","PATH_REGEX","splitGlobAware","splitChar","inBraces","inBrackets","parseRegExp","regEx","previousSegmentWasGlobStar_1","braceVal","bracketVal","braceRegExp","parsePattern","NULL","patternKey","trimForExclusions","parsedPattern","CACHE","T1","base_1","T2","trivia2","T3_2","T3","trivia3","T4","trivia4and5","T5","toRegExp","originalPattern","slashBase","backslashBase","basenames","patterns","allBasenames","parsedPatterns","aggregateBasenameMatches","n_1","withBasenames","allPaths","matchPathEnds","nativePath","ALL_FORWARD_SLASHES","nativePathEnd","regExp_1","FALSE","parsedPattern_1","resultPattern","parsedExpression","expression","parseExpressionPattern","requiresSiblings","resultExpression_1","siblingsFn","n_2","withBasenames_1","allPaths_1","resultExpression","siblingsToSiblingsPattern","siblings","siblingsPattern","siblingsResolved","n_3","when_1","when","siblingsPatternToMatchingPattern_1","clausePattern","siblingsPatternFn","basenamePatterns","aggregate","aggregatedPatterns","parseToAsync","getBasenameTerms","patternOrExpression","getPathTerms","toTextMimeAssociationItem","association","mime","filename","extension","filepattern","firstline","userConfigured","filenameLowercase","extensionLowercase","filepatternLowercase","filepatternOnPath","guessMimeTypeByPath","associations","filenameMatch","patternMatch","extensionMatch","glob_1","guessMimeTypeByFirstline","firstLine","registeredAssociations","isUnspecific","MIME_BINARY","MIME_TEXT","MIME_UNKNOWN","nonUserRegisteredAssociations","userRegisteredAssociations","registerTextMime","associationItem","clearTextMimes","onlyUserConfigured","guessMimeTypes","configuredMime","registeredMime","firstlineMime","isBinaryMime","mimes","suggestFilename","langId","ScrollbarVisibility","ScrollState","scrollHeight","createScrollEvent","widthChanged","scrollWidthChanged","scrollLeftChanged","heightChanged","scrollHeightChanged","scrollTopChanged","Scrollable","_onScroll","onScroll","getState","validateScrollTop","desiredScrollTop","validateScrollLeft","desiredScrollLeft","updateState","update","oldState","newState","ScrollbarVisibilityController","visibleClassName","invisibleClassName","_visibleClassName","_invisibleClassName","_domNode","_isVisible","_isNeeded","_shouldBeVisible","_revealTimer","applyVisibilitySetting","shouldBeVisible","scrollable_1","Hidden","Visible","setShouldBeVisible","rawShouldBeVisible","ensureVisibility","setIsNeeded","setDomNode","_reveal","_hide","withFadeAway","AbstractScrollbar","_lazyRender","lazyRender","_host","host","_scrollable","scrollable","_scrollbarState","scrollbarState","_visibilityController","scrollbarVisibilityController_1","extraScrollbarClassName","_shouldRender","fastDomNode_1","_domNodeMouseDown","_createArrow","scrollbarArrow_1","_createSlider","slider","_sliderMouseDown","_onElementSize","_onElementScrollSize","elementScrollSize","_onElementScrollPosition","elementScrollPosition","beginReveal","beginHide","_renderDomNode","_updateSlider","_onMouseDown","delegateMouseDown","domTop","getClientRects","sliderStart","sliderStop","mousePos","_sliderMousePosition","delegateSliderMouseDown","onDragFinished","domNodePosition","setDesiredScrollPosition","_mouseDownRelativePosition","initialMousePosition","initialMouseOrthogonalPosition","_sliderOrthogonalMousePosition","initialScrollbarState","mouseOrthogonalPosition","mouseOrthogonalDelta","mouseDelta","onDragEnd","onDragStart","desiredScrollPosition","validateScrollPosition","oldScrollPosition","_getScrollPosition","_setScrollPosition","HorizontalScrollbar","scrollbarState_1","horizontalHasArrows","horizontal","horizontalScrollbarSize","vertical","verticalScrollbarSize","arrowDelta","scrollbarDelta","onMouseWheel","horizontalSliderSize","sliderSize","sliderPosition","largeSize","smallSize","onDidScroll","abstractScrollbar_1","VerticalScrollbar","verticalHasArrows","verticalSliderSize","INITIALIZE","webWorkerWarningLogged","logOnceWebWorkerWarning","SimpleWorkerProtocol","_workerId","_lastSentReq","_pendingReplies","setWorkerId","workerId","sendMessage","method","reply","_send","vsWorker","handleMessage","serializedMessage","_handleMessage","msg","seq","replyMessage","requestMessage","strMsg","SimpleWorkerClient","workerFactory","_lastRequestTimestamp","lazyProxyFulfill","lazyProxyReject","_worker","_protocol","postMessage","getId","loaderConfiguration","globalRequire","require","getConfig","requirejs","_lazyProxy","_onModuleLoaded","availableMethods","proxy","createProxyMethod","proxyMethodRequest","_onError","_request","getProxyObject","getLastRequestTimestamp","info","SimpleWorkerServer","postSerializedMessage","onmessage","initialize","_requestHandler","loaderConfig","baseUrl","vs","nlsConfig_1","pseudo","nlsPlugin","catchError","cc","ee","handlerModule","methods","DataSource","modelProvider","getModel","tree","model","dataSource","hasChildren","getChildren","getParent","AccessibilityProvider","getAriaLabel","accessibilityProvider","getPosInSet","getSetSize","Filter","isVisible","styles","updateStyles","getHeight","getTemplateId","renderElement","Mode","ContextMenuEvent","_posx","_posy","_target","MouseContextMenuEvent","KeyboardContextMenuEvent","DragOverEffect","DragOverBubble","DRAG_OVER_REJECT","accept","DRAG_OVER_ACCEPT","DRAG_OVER_ACCEPT_BUBBLE_UP","bubble","BUBBLE_UP","DRAG_OVER_ACCEPT_BUBBLE_DOWN","autoExpand","BUBBLE_DOWN","DRAG_OVER_ACCEPT_BUBBLE_UP_COPY","effect","COPY","DRAG_OVER_ACCEPT_BUBBLE_DOWN_COPY","ElementsDragAndDropData","getData","ExternalElementsDragAndDropData","DesktopDragAndDropData","files","getRange","oneHierarchy","getHierarchy","otherHierarchy","nav","getNavigator","oneIndex","otherIndex","LockData","_item","Lock","locks","isLocked","lock","getLock","unbindListener","WinJS","isDisposed","intersects","ItemRegistry","_isDisposed","register","isRegistered","deregister","getItem","Item","registry","doesHaveChildren","needsChildrenRefresh","lastChild","userContent","traits","expanded","shouldAutoexpand","visible","_getHeight","getElement","getDepth","setVisible","isExpanded","_setExpanded","reveal","relativeTop","eventData","refreshChildren","autoExpandSingleChildren","collapse","recursive","collapseChildrenPromise","forEachChild","addTrait","trait","removeTrait","hasTrait","getAllTraits","safe","force","doRefresh","isNested","staleItems","addChild","staleItemId","mapEachChild","refresh","TreeNavigator","isAncestorOf","afterItem","atHead","atTail","isFirstChild","isLastChild","sorter","otherElement","RootItem","subTreeOnly","lastDescendantOf","TreeModel","traitsToItems","setInput","setSelection","setFocus","setHighlight","registryDisposable","getInput","expandAll","promises","collapseAll","toggleExpansion","toggleExpansionAll","getExpandedElements","resolveUnknownParentChain","eventPayload","setTraits","getHighlight","payload","includeHidden","getElementsWithTrait","isHighlighted","select","selectAll","selectRange","fromElement","fromItem","toItem","deselectRange","deselectAll","addTraits","selection","getSelection","deselect","removeTraits","toggleSelection","toggleTrait","isSelected","selectNext","clearSelection","nextItem","selectPrevious","previousItem","selectParent","getFocus","isFocused","focusNext","focusPrevious","focusParent","focusFirstChild","focusFirst","focusNth","navItem","focusLast","traitItems","itemsToRemoveTrait","HeightMap","heightMap","indexes","onInsertItems","afterItemId","viewItem","totalSize","sizeDiff","boundSplice","itemsToInsert","createViewItem","onInsertItem","onRefreshItem","onRemoveItems","itemId","onRemoveItem","onRefreshItemSet","sortedItems","onRefreshItems","newHeight","cummDiff","needsRender","itemsCount","itemAt","withItemsInRange","center","itemAtIndex","itemAfter","getWorkerUrl","fallback","MonacoEnvironment","WebWorker","onMessageCallback","onErrorCallback","worker","terminate","DefaultWorkerFactory","_webWorkerFailedBeforeError","LAST_WORKER_ID","simpleWorker_1","withElementById","offdom","assert","getElementById","Builder","MS_DATA_KEY","hasData","withBuilder","builder","MultiBuilder","getHTMLElement","withElement","offDOM","setPropertyOnElement","getPropertyFromElement","removePropertyFromElement","bindElement","DATA_BINDING_ID","unbindElement","getBindingFromElement","Build","Position","Box","Dimension","substract","box","currentElement","createdElements","toUnbind","captureToUnbind","asContainer","builders","build","htmlContainer","childNodes","appendTo","getContainer","div","doElement","ul","ol","li","img","section","footer","attributesOrFn","attr","domFocus","domSelect","setSelectionRange","domBlur","blur","domClick","click","listenerToUnbindContainer","unbind_1","listenerBinding","getProperty","setProperty","off","unbind_2","firstP","secondP","doSetAttr","alt","draggable","isDraggable","tabindex","doSetStyle","hasFirstP","cssKeyToJavaScriptProperty","nameValue","setClass","shouldAddClass","swapClass","classA","classB","background","backgroundColor","paddingTop","toPixel","paddingRight","paddingBottom","paddingLeft","marginTop","marginRight","marginBottom","marginLeft","minSize","minWidth","minHeight","maxSize","maxHeight","float","cssFloat","fontStyle","textDecoration","italic","bold","underline","overflow","disable","enable","cancelVisibilityPromise","showDelayed","removeProperty","isHidden","toggleVisibility","borderWidth","borderColor","borderStyle","borderTop","borderTopWidth","borderTopColor","borderTopStyle","borderBottom","borderBottomWidth","borderBottomColor","borderBottomStyle","borderLeft","borderLeftWidth","borderLeftColor","borderLeftStyle","borderRight","borderRightWidth","borderRightColor","borderRightStyle","textAlign","verticalAlign","valign","innerHtml","safeInnerHtml","getBinding","querySelectorAll","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","unbindDescendants","clearChildren","destroy","getTotalSize","totalWidth","totalHeight","getContentSize","contentWidth","contentHeight","getClientArea","clientWidth","clientHeight","innerWidth","innerHeight","$outer","returnValues","mergeBuilders","Binding","defaultOpts","inputActiveOptionBorder","color_1","Checkbox","_opts","isChecked","tabIndex","applyStyles","onChange","keyboardEvent","onKeyDown","newIsChecked","actionClassName","layout","around","viewport","anchorPosition","anchorAlignment","chooseBiased","aIsGood","bIsGood","chooseOne","aIsPreferred","posAbove","posBelow","aboveIsGood","belowIsGood","AnchorPosition","ABOVE","posLeft","posRight","leftIsGood","rightIsGood","AnchorAlignment","LEFT","ContextView","$view","builder_1","setContainer","toDispose","toDisposeOnClean","$container","BUBBLE_UP_EVENTS","BUBBLE_DOWN_EVENTS","onDOMEvent","delegate","doLayout","canRelayout","anchor","getAnchor","realAnchor","viewSize","BELOW","containerPosition","onHide","onCapture","badgeBackground","badgeForeground","CountBadge","objects_1","badgeBorder","titleFormat","setCount","setTitleFormat","foreground","IconLabel","supportHighlights","labelNode","highlightedLabel_1","descriptionNode","setValue","extraClasses","FileLabel","provider","setFile","labels_1","progressBarBackground","ProgressBar","workedVal","animationRunning","animationStopToken","bit","opacity","totalWork","doDone","infinite","hasTotal","worked","Orientation","Sash","layoutProvider","$e","gesture","touch_1","onMouseDown","baseSize","browser_1","setOrientation","orientation","VERTICAL","isDisabled","hidden","getOrientation","HORIZONTAL","iframes","mouseDownEvent","startX","startY","startEvent","currentX","currentY","$window","containerCSSClass","lastCurrentX","lastCurrentY","mouseMoveEvent","verticalProvider","getVerticalSashLeft","getVerticalSashTop","getVerticalSashHeight","horizontalProvider","getHorizontalSashTop","getHorizontalSashLeft","getHorizontalSashWidth","VSash","_onPositionChange","sash","onSashDragStart","onSashDrag","onSashDragEnd","onSashReset","dimension","setDimenesion","compute","startPosition","computeSashPosition","sashRatio","sashPosition","midPoint","resolveOptions","useShadows","handleMouseWheel","flipAxes","alwaysConsumeMouseWheel","scrollYToX","mouseWheelScrollSensitivity","listenOnDomNode","Auto","ScrollableElement","_onDidScroll","scrollbarHost","mouseWheelEvent","_onMouseWheel","_onDragStart","_onDragEnd","_verticalScrollbar","verticalScrollbar_1","_horizontalScrollbar","horizontalScrollbar_1","_leftShadowDomNode","_topShadowDomNode","_topLeftShadowDomNode","_listenOnDomNode","_mouseWheelToDispose","_setListeningToMouseWheel","_onMouseOver","_onMouseOut","_hideTimeout","_isDragging","_mouseIsOver","getDomNode","getOverviewRulerLayoutInfo","delegateVerticalScrollbarMouseDown","getScrollState","updateClassName","newClassName","updateOptions","newOptions","massagedOptions","_render","shouldListen","shiftConvert","scrollState","currentScrollTop","currentScrollLeft","renderNow","enableTop","enableLeft","_scheduleHide","DomScrollableElement","_element","scanDomNode","MouseEventTypes","DefaultOptions","ListView","rangeMap","rangeMap_1","rowCache_1","lastRenderTop","lastRenderHeight","rowsContainer","scrollableElement","scrollableElement_1","onTouchChange","previousRenderRange","getRenderRange","removeItemFromDOM","inserted","deleted","renderRange","insertItemInDOM","domElement","elementHeight","elementTop","renderTop","renderHeight","rangesToInsert","rangesToRemove","transform","webkitTransform","getScrollTop","setScrollTop","fireScopedEvent","getItemIndexFromMouseEvent","getItemIndexFromGestureEvent","getItemIndexFromEventTarget","rawIndex","isSelectionSingleChangeEvent","isSelectionRangeChangeEvent","isSelectionChangeEvent","getContiguousRangeContaining","disjunction","CombinedSpliceable","spliceables","TraitRenderer","rendered","elementDisposable","renderIndex","renderIndexes","Trait","_trait","toRender","__decorate","decorators_1","FocusTrait","getDomId","Aria","TraitSpliceable","pastElementsWithTrait","elementsWithTrait","KeyboardController","event_2","onEnter","onUpArrow","onDownArrow","onPageUpArrow","onPageDownArrow","open","focusPreviousPage","focusNextPage","MouseController","onPointer","onDoubleClick","fromKeyboard","fromMouse","changeSelection","selectOnMouseDown","pin","rangeSelection","contiguousRange","newSelection","defaultStyles","listFocusBackground","listActiveSelectionBackground","listActiveSelectionForeground","listFocusAndSelectionBackground","listFocusAndSelectionForeground","listInactiveSelectionBackground","listHoverBackground","listDropBackground","keyboardSupport","mouseSupport","numericSort","PipelineRenderer","_templateId","List","idPrefix","InstanceCount","_onContextMenu","_onOpen","_onPin","_onDOMFocus","_onDOMBlur","_onDispose","aria","getElementDomId","eventBufferer","listView_1","styleElement","spliceable","identityProvider","tracker","controller","onContextMenu","onFocusChange","_onFocusChange","onSelectionChange","_onSelectionChange","ariaLabel","toListEvent","getSelectedElements","lastPageIndex","lastPageElement","getFocusedElements","previousScrollTop","firstPageIndex","firstPageElement","viewItemBottom","wrapperBottom","isDOMFocused","listFocusForeground","listInactiveFocusBackground","listInactiveSelectionForeground","listHoverForeground","listSelectionOutline","listFocusOutline","listInactiveFocusOutline","listHoverOutline","reactionEquals","_cache","","ViewItem","_styles","_draggable","skipUserRender","accessibility","base64Id","paddingOnRow","twistiePixels","indentPixels","firstElementChild","dnd","getDragURI","unbindDragStart","insertInDOM","TreeView","BINDING","removeFromDOM","RootViewItem","lastClickTimeStamp","isRefreshing","refreshingPreviousChildrenIds","instance","modelListeners","viewListeners","dragAndDropListeners","alwaysFocused","verticalScrollMode","Browser","msTouchAction","msContentZooming","wrapperGesture","showTwistie","focusTracker","onFocus","onBlur","onKeyUp","onMouseUp","onClick","onTap","onMsPointerDown","onMsGestureTap","onThrottledMsGestureChange","onDragOver","onDrop","didJustPressContextMenuKey","currentDropTarget","currentDropTargets","shouldInvalidateDropReaction","dragAndDropScrollInterval","dragAndDropScrollTimeout","onHiddenScrollTop","onRowsChanged","setupMSGesture","onVisible","MSGesture","msGesture","onHidden","isTreeVisible","viewHeight","renderBottom","thisRenderBottom","topItem","setModel","newModel","releaseModel","onModelEvents","elementsToRefresh","onRefreshing","onRefreshed","onClearingInput","onSetInput","onItemChildrenRefreshing","onItemChildrenRefreshed","onItemExpanding","onItemExpanded","onItemCollapsing","onItemReveal","onItemAddTrait","onItemRemoveTrait","onModelFocusChange","onItemsRefresh","inputItem","loadingTimer","loading","LOADING_DECORATION_DELAY","childItem","childrenIds","previousChildrenIds","afterModelItems","skipDiff","doToInsertItemsAlreadyExist","Diff","diffChange","beforeItem","getRelativeTop","highlightedItemWasDraggable","refreshViewItem","shouldBeRendered","lastPointerType","Mouse","getItemAround","resultEvent","KeyboardEvent","Keyboard","mouseEvent","effectAllowed","setData","setDragImage","getDragLabel","dragImage_1","currentDragAndDropData","currentExternalDragAndDropData","setupDragAndDropScrollInterval","viewTop","dragAndDropMouseY","scrollDiff","upperLimit","cancelDragAndDropScrollTimeout","cancelDragAndDropScrollInterval","dropTarget","currentDropPromise","currentDropElement","reaction","canDrop","dropEffect","currentDropElementReaction","drop","pointerType","MSPOINTER_TYPE_MOUSE","MSPOINTER_TYPE_TOUCH","addPointer","pointerId","elementFromPoint","elementAfter","Lifecycle","treeViewModel_1","selectBackground","selectForeground","selectBorder","SelectBox","selected","selectElement","_onDidSelect","disabled","i_1","option","createOption","selectedIndex","CharWidthRequestType","CharWidthRequest","chr","fulfill","DomCharWidthReader","bareFontInfo","requests","_bareFontInfo","_requests","_testElements","read","_createDomElements","_readFromDomElements","regularDomNode","boldDomNode","italicDomNode","testElements","testElement","htmlString","testString","readCharWidths","ElementSizeObserver","referenceDomElement","changeCallback","measureReferenceDomElementToken","measureReferenceDomElement","stopObserving","getWidth","startObserving","observe","callChangeCallback","observedWidth","observedHeight","ContentWidgetPositionPreference","OverlayWidgetPositionPreference","MouseTargetType","createEditorPagePosition","editorViewDomNode","editorPos","EditorPagePosition","PageCoordinates","toClientCoordinates","ClientCoordinates","toPageCoordinates","EditorMouseEvent","EditorMouseEventFactory","_editorViewDomNode","_create","onMouseLeave","onMouseMoveThrottled","GlobalEditorMouseMoveMonitor","_globalMouseMoveMonitor","_keydownListener","RenderedLinesCollection","createLine","_createLine","_set","rendLineNumberStart","lines","_lines","_rendLineNumberStart","_get","getStartLineNumber","getEndLineNumber","getCount","getLine","lineNumber","lineIndex","onLinesDeleted","deleteFromLineNumber","deleteToLineNumber","startLineNumber","endLineNumber","deleteCnt","deleteStartIndex","deleteAboveCount","onLinesChanged","changeFromLineNumber","changeToLineNumber","someoneNotified","changedLineNumber","onContentChanged","onLinesInserted","insertFromLineNumber","insertToLineNumber","insertCnt","newLines","beforeLines","afterLines","deletedLines","onTokensChanged","ranges","notifiedSomeone","rng","toLineNumber","fromLineNumber","VisibleLinesCollection","_createDomNode","_linesCollection","createVisibleLine","onConfigurationChanged","layoutInfo","onFlushed","lineDomNode","onScrollChanged","onZonesChanged","getVisibleLine","renderLines","viewportData","inp","ViewLayerRenderer","linesLength","resCtx","relativeVerticalOffset","inContext","stopLineNumber","deltaTop","_finishRendering","_renderUntouchedLines","_insertLinesBefore","removeCnt","_removeLinesBefore","_insertLinesAfter","_removeLinesAfter","endIndex","deltaLN","layoutLine","newLinesLen","removeCount","removeIndex","_finishRenderingNewLines","domNodeIsEmpty","newLinesHTML","wasNew","insertAdjacentHTML","currChild","line","previousSibling","_finishRenderingInvalidLines","invalidLinesHTML","wasInvalid","hugeDomNode","replaceChild","hadNewLine","hadInvalidLine","renderResult","renderLine","EditorZoom","CursorChangeReason","CodeEditorStateFlag","EditorState","editor","modelVersionId","getVersionId","getScrollLeft","_equals","equalsRange","validate","column","isBefore","isBeforeOrEqual","aLineNumber","bLineNumber","lift","isIPosition","Range","startColumn","endColumn","containsPosition","containsRange","otherRange","plusRange","intersectRanges","resultStartLineNumber","resultStartColumn","resultEndLineNumber","resultEndColumn","otherStartLineNumber","otherStartColumn","otherEndLineNumber","otherEndColumn","getEndPosition","getStartPosition","cloneRange","setEndPosition","setStartPosition","collapseToStart","fromPositions","isIRange","areIntersectingOrTouching","compareRangesUsingStarts","aStartLineNumber","bStartLineNumber","aStartColumn","bStartColumn","aEndLineNumber","bEndLineNumber","compareRangesUsingEnds","spansMultipleLines","defaultOptions","followsCaret","ignoreCharChanges","alwaysRevealFirst","DiffNavigator","UPDATED","disposed","nextIdx","ignoreSelectionChange","revealFirst","onDidDispose","onDidUpdateDiff","onDiffUpdated","getModifiedEditor","onDidChangeCursorPosition","onDidChangeModel","getLineChanges","lineChanges","lineChange","charChanges","charChange","rhs","range_1","modifiedStartLineNumber","modifiedStartColumn","modifiedEndLineNumber","modifiedEndColumn","initIdx","fwd","canNavigate","revealPositionInCenter","EditOperation","forceMoveMarkers","replaceMove","trimTrailingWhitespace","cursors","rLen","cursorIndex","cursorLen","lineCount","getLineCount","lineContent","getLineContent","maxLineColumn","minEditColumn","fromColumn","editOperation_1","TrimTrailingWhitespaceCommand","getEditOperations","ops","op","addEditOperation","selectionId","trackSelection","computeCursorState","helper","getTrackedSelection","SelectionDirection","Selection","selectionStartLineNumber","selectionStartColumn","positionLineNumber","positionColumn","equalsSelection","selectionsEqual","getDirection","LTR","RTL","liftSelection","sel","selectionsArrEqual","isISelection","createWithDirection","ReplaceCommand","insertsAutoWhitespace","_range","_text","addTrackedEditOperation","srcRange","getInverseEditOperations","selection_1","ReplaceCommandWithoutChangingPosition","ReplaceCommandWithOffsetCursorState","lineNumberDeltaOffset","columnDeltaOffset","_columnDeltaOffset","_lineNumberDeltaOffset","ReplaceCommandThatPreservesSelection","editRange","initialSelection","_initialSelection","_selectionId","SurroundSelectionCommand","charBeforeSelection","charAfterSelection","_charBeforeSelection","_charAfterSelection","inverseEditOperations","firstOperationRange","secondOperationRange","Token","TokenizationResult","endState","TokenizationResult2","toUint32","Uint8Matrix","rows","cols","Uint8Array","_rows","_cols","col","Constants","toUint8","toUint32Array","Uint32Array","CharacterClassifier","_defaultValue","uint_1","_asciiMap","_createAsciiMap","asciiMap","Boolean","CharacterSet","_actual","WordCharacterClass","WordCharacterClassifier","wordSeparators","characterClassifier_1","getMapForWordSeparators","computeFn","computeDiff","modifiedSequence","diff_1","postProcessCharChanges","rawChanges","originalMatchingLength","modifiedMatchingLength","currChange","prevChange","MINIMUM_MATCHING_CHARACTER_LENGTH","MAXIMUM_RUN_TIME","MarkerSequence","startMarkers","endMarkers","otherMarkerSequence","getStartColumn","getEndColumn","LineMarkerSequence","shouldIgnoreTrimWhitespace","_getFirstNonBlankColumn","_getLastNonBlankColumn","txt","getCharSequence","startMarker","endMarker","CharChange","originalCharSequence","modifiedCharSequence","originalStartLineNumber","originalStartColumn","originalEndLineNumber","originalEndColumn","LineChange","originalLineSequence","modifiedLineSequence","shouldPostProcessCharChanges","DiffComputer","originalLines","modifiedLines","maximumRunTimeMs","shouldConsiderTrimWhitespaceInEmptyCase","computationStartTime","_continueProcessingPredicate","InternalEditorAction","alias","precondition","contextKeyService","_precondition","_contextKeyService","isSupported","contextMatchesRules","OverviewRulerLane","EndOfLinePreference","DefaultEndOfLine","EndOfLineSequence","TextModelResolvedOptions","tabSize","insertSpaces","defaultEOL","trimAutoWhitespace","createChangeEvent","newOpts","FindMatch","TrackedRangeStickiness","isThemeColor","EditorType","ICodeEditor","IDiffEditor","isCommonCodeEditor","getEditorType","isCommonDiffEditor","Handler","ExecuteCommand","ExecuteCommands","ReplacePreviousChar","CompositionStart","CompositionEnd","Paste","Cut","Undo","Redo","TextAreaState","selectionStart","selectionEnd","readFromTextArea","textArea","getValue","getSelectionStart","getSelectionEnd","collapseSelection","writeToTextArea","reason","selectedText","deduceInput","previousState","currentState","couldBeEmojiInput","replaceCharCnt","previousValue","previousSelectionStart","previousSelectionEnd","currentValue","currentSelectionStart","currentSelectionEnd","previousSuffix","currentSuffix","suffixLength","previousPrefix","currentPrefix","prefixLength","potentialEmojiInput","EMPTY","PagedScreenReaderStrategy","_getPageOfLine","_LINES_PER_PAGE","_getRangeForPage","page","fromEditorSelection","selectionStartPage","selectionStartPageRange","selectionEndPage","selectionEndPageRange","pretextRange","pretext","getValueInRange","editorCommon_1","LF","lastLine","lastLineMaxColumn","getLineMaxColumn","posttextRange","posttext","selectionRange1","selectionRange2","CopyOptions","forceCopyWithSyntaxHighlighting","ReadFromTextArea","TextAreaInput","_onFocus","_onBlur","_onKeyDown","_onKeyUp","_onCut","onCut","_onPaste","onPaste","_onType","onType","_onCompositionStart","onCompositionStart","_onCompositionUpdate","onCompositionUpdate","_onCompositionEnd","onCompositionEnd","_textArea","TextAreaWrapper","_asyncTriggerCut","_textAreaState","textAreaState_1","writeScreenReaderContent","_hasFocus","_isDoingComposition","_nextCommand","_setAndWriteTextAreaState","deduceInputFromTextAreaValue","deduceComposition","newState_1","typeInput_1","typeInput","newState_2","typeInput_2","_ensureClipboardGetsEditorSelection","ClipboardEventUtils","canUseTextData","pastePlainText","getTextData","_setHasFocus","focusTextArea","newHasFocus","textAreaState","getScreenReaderContent","copyPlainText","getPlainTextToCopy","copyHTML","getHTMLToCopy","setTextData","clipboardData","richText","currentIsFocused","EditStack","currentOpenStackElement","past","future","pushStackElement","pushEditOperation","beforeCursorState","editOperations","cursorStateComputer","beforeVersionId","getAlternativeVersionId","afterCursorState","afterVersionId","inverseEditOperation","operations","applyEdits","undo","pastStackElement","selections","recordedVersionId","redo","futureStackElement","IndentRange","indent","deepCloneArr","indentRanges","computeRanges","minimumRangeSize","previousRegions","getIndentLevel","spacesDiff","aLength","bLength","aCharCode","bCharCode","aSpacesCnt","aTabsCount","bSpacesCnt","bTabsCount","tabsDiff","guessIndentation","defaultTabSize","defaultInsertSpaces","linesIndentedWithTabsCount","linesIndentedWithSpacesCount","previousLineText","previousLineIndentation","ALLOWED_TAB_SIZE_GUESSES","spacesDiffCount","currentLineText","currentLineHasContent","currentLineIndentation","currentLineSpacesCount","currentLineTabsCount","lenJ","currentSpacesDiff","deltaSpacesCount","tabSizeScore","possibleTabSize","possibleTabSizeScore","TextModelEventType","ModelDispose","ModelTokensChanged","ModelLanguageChanged","ModelOptionsChanged","ModelContentChanged","ModelRawContentChanged2","ModelDecorationsChanged","RawContentChangedType","ModelRawFlush","changeType","ModelRawLineChanged","ModelRawLinesDeleted","ModelRawLinesInserted","ModelRawEOLChanged","ModelRawContentChangedEvent","versionId","isUndoing","isRedoing","containsEvent","createFindMatch","rawMatches","captureMatches","leftIsWordBounday","textLength","matchStartIndex","matchLength","charBefore","firstCharInMatch","rightIsWordBounday","charAfter","lastCharInMatch","isValidMatch","SearchParams","_isMultilineRegexSource","nextChCode","parseSearchRequest","canUseSimpleSearch","SearchData","wordCharacterClassifier_1","simpleSearch","TextModelSearch","findMatches","searchParams","searchRange","limitResultCount","searchData","_doFindMatchesMultiline","Searcher","_doFindMatchesLineByLine","_getMultilineMatchRange","deltaOffset","matchIndex","match0","startOffset","getEOL","lineFeedCountBeforeMatch","lineFeedCountInMatch","getPositionAt","endPosition","searcher","getOffsetAt","reset","resultLen","text_1","_findMatchesInLine","text_2","searchStringLen","lastMatchIndex","findNextMatch","searchStart","_doFindNextMatchMultiline","_doFindNextMatchLineByLine","searchTextStart","_findFirstMatchInLine","text_3","r_1","findPreviousMatch","_doFindPreviousMatchMultiline","_doFindPreviousMatchLineByLine","_findLastMatchInLine","text_4","r_2","bestResult","searchRegex","_wordSeparators","_searchRegex","_prevMatchStartIndex","_prevMatchLength","RawTextSource","rawText","carriageReturnCnt","lastCarriageReturnIndex","BOM","totalCRCount","TextSource","_getEOL","rawTextSource","lineFeedCnt","fromRawTextSource","EOL","TokenMetadata","getLanguageId","metadata","getTokenType","getFontStyle","getForeground","getBackground","getClassNameFromMetadata","getInlineStyleFromMetadata","colorMap","ViewLineToken","_metadata","tokensBinaryEncoding_1","getType","getInlineStyle","equalsArr","ViewLineTokenFactory","inflateArr","lineLength","sliceAndInflate","maxEndOffset","findIndexInSegmentsArray","tokenEndOffset","newEndOffset","desiredIndex","ceil","LineToken","tokenIndex","tokenCount","_source","_tokenIndex","hasPrev","hasNext","tokenAt","LineTokens","_tokens","_tokensCount","_textLength","getTokenCount","getLineLength","getTokenStartOffset","getStandardTokenType","getTokenEndOffset","findTokenIndexAtOffset","viewLineToken_1","findTokenAtOffset","firstToken","lastToken","inflate","computePlusOneIndentLevel","LineMarker","internalDecorationId","stickToPreviousCharacter","updateLineNumber","markersTracker","addChangedMarker","updateColumn","updatePosition","compareMarkers","MarkersTracker","_changedDecorations","_changedDecorationsLen","marker","getDecorationIds","MarkerMoveSemantics","NO_OP_TOKENS_ADJUSTER","adjust","finish","NO_OP_MARKERS_ADJUSTER","adjustDelta","adjustSet","ModelLine","_lineNumber","_setText","_lineTokens","_markers","_setPlusOneIndentLevel","updateTabSize","resetTokenizationState","setState","_getDefaultMetadata","topLevelLanguageId","setTokens","getTokens","rawLineTokens","lineTokens_1","lineTokens","_createTokensAdjuster","tokensLength","tokenStartOffset","removeTokensCount","toColumn","minimumAllowedColumn","minimumAllowedIndex","newTokenStartOffset","tmpTokenIndex","prevTokenStartOffset","lineTextLength","_deleteMarkedTokens","_markOverflowingTokensForDeletion","newTokens","newTokenIdx","_createMarkersAdjuster","markers","markersLength","markersIndex","adjustMarkerBeforeColumn","moveSemantics","newColumn","edits","deltaColumn","resultText","tokensAdjuster","markersAdjuster","edit","deletingCnt","insertingCnt","commonLength","splitColumn","myText","otherText","otherMarkers","myMarkers","otherLine","addMarkers","thisTextLength","otherRawTokens","otherTokens","myRawTokens","myTokens","addMarker","removeMarker","_indexOfMarkerId","removeMarkers","deleteMarkers","getMarkers","newLineNumber","markerId","getWordAtPosFast","wordDefinition","textOffset","getWordAtPosSlow","USUAL_WORD_SEPARATORS","DEFAULT_WORD_REGEXP","allowInWords","usualSeparators","ensureValidWordDefinition","getWordAtText","FrankensteinMode","languageIdentifier","_languageIdentifier","getLanguageIdentifier","IndentAction","StandardAutoClosingPairConditional","close","_standardTokenMask","notIn","isOK","standardToken","candidateUri","candidateLanguage","selector_1","LanguageFeatureRegistry","_clock","_entries","_score","_time","_lastCandidate","isTooLargeForHavingARichMode","_updateScores","_orderedForEach","orderedGroups","lastBucket","lastBucketScore","languageSelector_1","_compareByScoreAndTime","getStateMachine","_stateMachine","StateMachine","getClassifier","_classifier","State","CharacterClass","edges","maxCharCode","maxState","states","_states","_maxCharCode","nextState","LinkComputer","_createLink","classifier","linkBeginIndex","linkEndIndex","lastIncludedCharIndex","computeLinks","stateMachine","linkBeginChCode","hasOpenParens","hasOpenSquareBracket","hasOpenCurlyBracket","resetStateMachine","chClass","CharacterPairSupport","autoClosingPairs","_autoClosingPairs","languageConfiguration_1","brackets","_surroundingPairs","surroundingPairs","getAutoClosingPairs","shouldAutoClosePair","character","standardTokenType","autoClosingPair","getSurroundingPairs","IndentConsts","IndentRulesSupport","indentationRules","_indentationRules","unIndentedLinePattern","decreaseIndentPattern","Outdent","containNonWhitespace","shouldIncrease","increaseIndentPattern","shouldDecrease","shouldIndentNextLine","indentNextLinePattern","shouldIgnore","getIndentMetadata","BasicInplaceReplace","_defaultValueSet","navigateValueSet","range1","text1","range2","text2","up","doNavigateValueSet","numberResult","numberReplace","textReplace","precision","n1","n2","valueSetsReplace","valueSets","valueSetReplace","valueSet","OnEnterSupport","_brackets","bracket","openRegExp","_createOpenBracketRegExp","closeRegExp","_createCloseBracketRegExp","_regExpRules","regExpRules","oneLineAboveText","beforeEnterText","afterEnterText","beforeText","afterText","indentAction","IndentOutdent","Indent","_safeRegExp","createOrRegex","pieces","regexStr","RichEditBracket","forwardRegex","reversedRegex","RichEditBrackets","getRegexForBracketPair","getReversedRegexForBracketPair","getRegexForBrackets","getReversedRegexForBrackets","textIsBracket","textIsOpenBracket","maxBracketLength","toReversedString","reversedStr","lastInput","lastOutput","BracketsUtils","_findPrevBracketInText","reversedBracketRegex","reversedText","matchOffset","absoluteMatchOffset","findPrevBracketInToken","lineText","currentTokenStart","currentTokenEnd","reversedTokenText","findNextBracketInText","bracketRegex","findNextBracketInToken","currentTokenText","parseTokenTheme","ParsedTokenThemeRule","resolveParsedTokenThemeRules","parsedThemeRules","strcmp","defaultFontStyle","defaultForeground","defaultBackground","incomingDefaults","ColorMap","ThemeTrieElementRule","ThemeTrieElement","TokenTheme","toStandardTokenType","tokenType","STANDARD_TOKEN_TYPE_REGEXP","_lastColorId","_id2color","_color2id","getColorMap","_colorMap","createFromRawTokenTheme","createFromParsedTokenTheme","getThemeTrieElement","toExternalThemeTrieElement","_match","languageId","_fontStyle","_foreground","_background","cloneArr","acceptOverwrite","ExternalThemeTrieElement","mainRule","_mainRule","_children","dotIndex","generateTokensCSSForColorMap","TokenizationRegistryImpl","onDidChange","languages","changedLanguages","changedColorMap","support","setColorMap","getDefaultForeground","getDefaultBackground","LanguageId","LanguageIdentifier","FontStyle","ColorId","StandardTokenType","MetadataConsts","DocumentHighlightKind","SymbolKind","symbolKindToCssClass","_fromMapping","File","Module","Package","Method","Property","Field","Constructor","Enum","Interface","Function","Variable","Constant","Null","EnumMember","Struct","Operator","TypeParameter","ReferenceProviderRegistry","languageFeatureRegistry_1","RenameProviderRegistry","SuggestRegistry","SignatureHelpProviderRegistry","HoverProviderRegistry","DocumentSymbolProviderRegistry","DocumentHighlightProviderRegistry","DefinitionProviderRegistry","ImplementationProviderRegistry","TypeDefinitionProviderRegistry","CodeLensProviderRegistry","CodeActionProviderRegistry","DocumentFormattingEditProviderRegistry","DocumentRangeFormattingEditProviderRegistry","OnTypeFormattingEditProviderRegistry","LinkProviderRegistry","TokenizationRegistry","tokenizationRegistry_1","NullStateImpl","NULL_STATE","NULL_MODE_ID","NULL_LANGUAGE_IDENTIFIER","modes_1","nullTokenize","modeId","token_1","nullTokenize2","createScopedLineTokens","desiredLanguageId","lastTokenIndex","firstTokenIndex","ScopedLineTokens","actual","firstCharOffset","lastCharOffset","_firstTokenIndex","_lastTokenIndex","_lastCharOffset","IgnoreBracketsInTokens","ignoreBracketsInToken","BracketElectricCharacterSupport","richEditBrackets","autoClosePairs","contribution","_richEditBrackets","_complexAutoClosePairs","pair","docComment","getElectricCharacters","bracketPair","lastChar","onElectricCharacter","_onElectricAutoClose","_onElectricAutoIndent","supports_1","richEditBrackets_1","bracketText","textBeforeBracket","matchOpenBracket","lastTokenStandardType","appendText","RichEditSupport","rawConf","_conf","_mergeConf","_handleOnEnter","comments","_handleComments","characterPair","characterPair_1","electricCharacter","electricCharacter_1","__electricCharacterSupport","wordPattern","wordHelper_1","indentRulesSupport","indentRules_1","onEnterRules","conf","onEnter_1","commentRule","lineComment","lineCommentToken","blockComment","blockStart","blockEnd","blockCommentStartToken","blockCommentEndToken","LanguageConfigurationRegistryImpl","configuration","_getRichEditSupport","getIndentationRules","_getElectricCharacterSupport","electricCharacterSupport","scopedLineTokens","getComments","_getCharacterPairSupport","characterPairSupport","getWordDefinition","getIndentRulesSupport","getPrecedingValidLine","languageID","getLanguageIdAtPosition","lastLineNumber","resultLineNumber","getInheritIndentForLine","honorIntentialIndent","indentation","precedingUnIgnoredLine","precedingUnIgnoredLineContent","previousLine","previousLineIndentMetadata","stopLine","getGoodIndentForLine","virtualModel","indentConverter","inheritLine","onEnterSupport","_getOnEnterSupport","enterResult","removeText","shiftIndent","unshiftIndent","getIndentForEnter","autoIndent","forceTokenization","getLineTokens","tokenIndexUnderCursor","tokenIndexAtBeginning","scopedLineText","getScopedLineTokens","beforeEnterResult","beforeEnterIndent","beforeEnterIndentAction","beforeEnterIndent_1","afterEnterAction","beforeEnter","afterEnter","afterEnterIndent","getIndentActionForType","afterTypeText","beforeTypeText","getRawEnterActionAtPosition","getEnterAction","enterAction","getIndentationAtPosition","oneLineAboveScopedLineTokens","columnNumber","getBracketsSupport","LanguageConfigurationRegistry","_getSafeTokenizationSupport","tokenizationSupport","getInitialState","nullMode_1","tokenize","tokenize2","_tokenizeToString","tokenizationResult","viewLineTokens","viewLineToken","tokenizeToString","tokenizeLineToHTML","charIndex","tabsCharDelta","tokenEndIndex","partContent","insertSpacesCount","AbstractCodeEditorService","_transientWatchers","_codeEditors","_diffEditors","_onCodeEditorAdd","_onCodeEditorRemove","_onDiffEditorAdd","_onDiffEditorRemove","addCodeEditor","removeCodeEditor","getCodeEditor","editorId","listCodeEditors","addDiffEditor","removeDiffEditor","getDiffEditor","listDiffEditors","getFocusedCodeEditor","editorWithWidgetFocus","editors","hasWidgetFocus","setTransientModelProperty","ModelTransientSettingWatcher","getTransientModelProperty","_removeWatcher","owner","_values","onWillDispose","Severity","chord","CtrlCmd","Shift","Alt","WinCtrl","createMonacoBaseAPI","Uri","MinimapTokensColorTracker","_updateColorMap","getInstance","_INSTANCE","_colors","_backgroundIsLight","colorId","backgroundLuminosity","getColor","backgroundIsLight","MinimapCharRenderer","x2CharData","x1CharData","x2charData","x1charData","x2charDataLight","soften","x1charDataLight","Uint8ClampedArray","_getChIndex","x2RenderChar","dx","dy","useLighterFont","chIndex","outWidth","backgroundR","backgroundG","backgroundB","deltaR","deltaG","deltaB","dest","sourceOffset","destOffset","x1RenderChar","x2BlockRenderChar","colorR","colorG","colorB","x1BlockRenderChar","RestrictedRenderingContext","viewLayout","_viewLayout","getScrollWidth","getScrollHeight","visibleRange","bigNumbersDelta","vInfo","getCurrentViewport","viewportWidth","viewportHeight","getScrolledTopFromAbsoluteTop","absoluteTop","getVerticalOffsetForLineNumber","lineIsVisible","getDecorationsInViewport","RenderingContext","viewLines","_viewLines","linesVisibleRangesForRange","includeNewLines","visibleRangeForPosition","visibleRanges","visibleRangesForRange2","LineVisibleRanges","HorizontalRange","FloatHorizontalRange","RangeUtil","_createRange","_handyReadyRange","createRange","_detachRange","endNode","selectNodeContents","_readClientRects","startElement","endElement","setStart","setEnd","_mergeAdjacentRanges","renderingContext_1","prevLeft","prevWidth","myLeft","myWidth","_createHorizontalRangesFromClientRects","clientRects","clientRectDeltaLeft","clientRect","readHorizontalRanges","startChildIndex","endChildIndex","toUint8ClampedArrat","minimapCharRenderer","getOrCreateMinimapCharRenderer","_x1Data","x1Data","_x2Data","x2Data","minimapCharRenderer_1","ViewContext","theme","privateViewEventBus","addEventHandler","eventHandler","removeEventHandler","ViewEventDispatcher","eventHandlerGateKeeper","_eventHandlerGateKeeper","_eventHandlers","_eventQueue","_isConsumingQueue","consumeQueue","emitMany","_doConsumeQueue","eventHandlers","handleEvents","safeInvokeListener","ViewEventType","ViewConfigurationChangedEvent","canUseLayerHinting","editorClassName","readOnly","emptySelectionClipboard","fontInfo","viewInfo","wrappingInfo","ViewCursorStateChangedEvent","isInEditableRange","screenReaderMessage","ViewDecorationsChangedEvent","ViewFlushedEvent","ViewFocusChangedEvent","ViewLineMappingChangedEvent","ViewLinesChangedEvent","ViewLinesDeletedEvent","ViewLinesInsertedEvent","VerticalRevealType","ViewRevealRangeRequestEvent","verticalType","revealHorizontal","ViewScrollChangedEvent","ViewTokensChangedEvent","ViewThemeChangedEvent","ViewTokensColorsChangedEvent","ViewZonesChangedEvent","ViewEventEmitter","_emit","LineDecoration","insertsBeforeOrAfter","lineDecorations","minLineColumn","inlineClassName","DecorationSegment","Stack","stopOffsets","classNames","consumeLowerThan","maxStopOffset","nextStartOffset","stopOffset","LineDecorationsNormalizer","currentStartOffset","currentEndOffset","resolveRenderLineInput","isOverflowing","useMonospaceOptimizations","stopRenderingLineAfter","transformAndRemoveOverflowing","fauxIndentLength","renderWhitespace","_applyRenderWhitespace","containsForeignElements","len_1","_applyInlineDecorations","mightContainRTL","fontLigatures","splitLargeTokens","ResolvedRenderLineInput","spaceWidth","renderControlCharacters","LinePart","tokensLen","lastTokenEndIndex","piecesCount","pieceEndIndex","lastCharInPiece","onlyBoundary","tmpIndent","wasInWhitespace","isInWhitespace","_lineDecorations","lineDecorations_1","lineDecorationsLen","lineDecorationIndex","lastResultEndIndex","len_2","lineDecoration","_renderLine","fontIsMonospace","characterMapping","CharacterMapping","charOffsetInPart","partIndex","partEndIndex","partType","partContentCnt","setPartData","setPartLength","RenderLineOutput","RenderWhitespace","RenderLineInput","CharacterMappingConstants","partCount","_partLengths","Uint16Array","getPartIndex","partData","getCharIndex","charOffset","getPartLengths","charOffsetToPartData","partDataToCharOffset","partLength","searchEntry","midEntry","minEntry","maxEntry","minPartIndex","renderViewLine","ViewportData","partialData","whitespaceViewportData","_model","getLineMinColumn","getViewLineRenderingData","WhitespaceComputer","_heights","_ids","_afterLineNumbers","_ordinals","_prefixSum","_prefixSumValidIndex","_whitespaceId2Index","_lastWhitespaceId","findInsertionIndex","sortedArray","ordinals","valueOrdinal","insertWhitespace","afterLineNumber","ordinal","heightInPx","insertionIndex","_insertWhitespaceAtIndex","sid","oldIndex","changeWhitespace","newAfterLineNumber","hasChanges","changeWhitespaceHeight","changeWhitespaceAfterLineNumber","newHeightInPx","removeWhitespace","_removeWhitespaceAtIndex","getAccumulatedHeight","getAccumulatedHeightBeforeLineNumber","lastWhitespaceBeforeLineNumber","_findLastWhitespaceBeforeLineNumber","afterLineNumbers","_findFirstWhitespaceAfterLineNumber","firstWhitespaceAfterLineNumber","getFirstWhitespaceIndexAfterLineNumber","getAfterLineNumberForWhitespaceIndex","getIdForWhitespaceIndex","getHeightForWhitespaceIndex","getWhitespaces","deviceLineHeight","heightInLines","LinesLayout","_lineCount","_whitespaces","whitespaceComputer_1","getLinesTotalHeight","getWhitespaceAccumulatedHeightBeforeLineNumber","hasWhitespace","isAfterLines","verticalOffset","getLineNumberAtOrAfterVerticalOffset","linesCount","minLineNumber","maxLineNumber","midLineNumber","midLineNumberVerticalOffset","getLinesViewportData","verticalOffset1","verticalOffset2","currentWhitespaceHeight","currentWhitespaceAfterLineNumber","startLineNumberVerticalOffset","whitespaceIndex","whitespaceCount","currentVerticalOffset","currentLineRelativeOffset","linesOffsets","verticalCenter","centeredLineNumber","currentLineTop","currentLineBottom","endLineNumberVerticalOffset","completelyVisibleStartLineNumber","completelyVisibleEndLineNumber","getVerticalOffsetForWhitespaceIndex","previousLinesHeight","previousWhitespacesHeight","getWhitespaceIndexAtOrAfterVerticallOffset","midWhitespaceIndex","midWhitespaceVerticalOffset","midWhitespaceHeight","minWhitespaceIndex","maxWhitespaceIndex","getWhitespaceAtVerticalOffset","candidateIndex","candidateTop","candidateHeight","getWhitespaceViewportData","PrefixSumIndexOfResult","remainder","PrefixSumComputer","prefixSum","prefixSumValidIndex","Int32Array","insertValues","oldValues","oldPrefixSum","insertValuesLen","subarray","changeValue","removeValues","cnt","maxCnt","getTotalValue","_getAccumulatedValue","getAccumulatedValue","getIndexOf","accumulatedValue","midStop","midStart","PrefixSumComputerWithCache","_cacheAccumulatedValueStart","_bustCache","cacheIndex","warmUpCache","accumulatedValueStart","accumulatedValueEnd","newCache","MirrorModel","eol","_uri","_eol","_versionId","getText","onEvents","_lineStarts","_acceptDeleteRange","_acceptInsertText","_ensureLineStarts","eolLength","lineStartValues","prefixSumComputer_1","_setLineText","insertText","insertLines","newLengths","getLinesContent","getWordAtPosition","wordAtText","getWordUntilPosition","wordAtPosition","_getAllWords","_wordenize","getAllUniqueWords","skipWordOnce","foundSkipWord","uniqueWords","_validateRange","lineEnding","startLineIndex","endLineIndex","resultLines","offsetAt","_validatePosition","hasChanged","maxCharacter","mirrorModel_1","BaseEditorSimpleWorker","_foreignModule","originalUrl","modifiedUrl","ignoreTrimWhitespace","_getModel","diffComputer","diffComputer_1","computeDirtyDiff","computeMoreMinimalEdits","modelUrl","lastEol","edits_1","_diffLimit","editOffset","changes_1","newEdit","linkComputer_1","textualSuggest","wordDef","wordDefFlags","suggestions","wordDefRegExp","currentWord","noAutoAccept","overwriteBefore","selectionText","wordRange","inplaceReplaceSupport_1","loadForeignModule","createData","foreignModule","getMirrorModels","_getModels","fmr","EditorSimpleWorkerImpl","_models","acceptNewModel","acceptModelChanged","strURL","acceptRemovedModel","importScripts","monaco","standaloneBase_1","ViewEventHandler","shouldRender","forceShouldRender","setShouldRender","onDidRender","onCursorStateChanged","onDecorationsChanged","onFocusChanged","onLineMappingChanged","onRevealRangeRequest","onTokensColorsChanged","onThemeChanged","DynamicViewOverlay","viewEventHandler_1","ViewPart","_context","PartFingerprint","PartFingerprints","write","partId","collect","Coordinate","ViewContentWidgets","viewDomNode","_viewDomNode","_widgets","viewPart_1","overflowingContentWidgetsDomNode","widgetId","addWidget","_widget","myWidget","allowEditorOverflow","setWidgetPosition","widget","preference","removeWidget","shouldSuppressMouseDownOnWidget","suppressMouseDown","prepareRender","_fixedOverflowWidgets","fixedOverflowWidgets","_contentWidth","_contentLeft","contentLeft","_preference","_renderData","_updateMaxWidth","_layoutBoxInViewport","topLeft","aboveLineTop","heightAboveLine","underLineTop","aboveTop","fitsAbove","belowTop","fitsBelow","actualLeft","_layoutBoxInPage","left0","absoluteAboveTop","absoluteBelowTop","absoluteLeft","INNER_WIDTH","_prepareRenderWidgetAtExactPositionOverflowing","_getTopLeft","_prepareRenderWidget","validModelPosition","validateModelPosition","coordinatesConverter","modelPositionIsVisible","convertModelPositionToViewPosition","placement","fetchPlacement","pass","pref","editorBrowser_1","DecorationsOverlay","_typicalHalfwidthCharacterWidth","typicalHalfwidthCharacterWidth","_renderResult","_decorations","decorations","decorationsLen","aClassName","bClassName","visibleStartLineNumber","visibleEndLineNumber","_renderWholeLineDecorations","_renderNormalDecorations","lenI","isWholeLine","decorationOutput","showIfCollapsed","linesVisibleRanges","lineVisibleRanges","singleVisibleRange","lenK","dynamicViewOverlay_1","DecorationToRender","DedupOverlay","prevClassName","prevEndLineIndex","GlyphMarginOverlay","_glyphMargin","glyphMargin","_glyphMarginLeft","glyphMarginLeft","_glyphMarginWidth","glyphMarginWidth","_getDecorations","glyphMarginClassName","common","LinesDecorationsOverlay","_decorationsLeft","decorationsLeft","_decorationsWidth","decorationsWidth","linesDecorationsClassName","glyphMargin_1","lineOutput","Margin","_canUseLayerHinting","_glyphMarginBackgroundDomNode","CLASS_NAME","adjustedScrollTop","MarginViewLineDecorationsOverlay","marginClassName","ViewOverlayWidgets","_verticalScrollbarWidth","verticalScrollbarWidth","_minimapWidth","minimapWidth","_horizontalScrollbarHeight","horizontalScrollbarHeight","_editorHeight","_editorWidth","widgetData","_renderWidget","TOP_RIGHT_CORNER","BOTTOM_RIGHT_CORNER","widgetHeight","TOP_CENTER","ViewZones","marginDomNode","_zones","_recomputeWhitespacesProps","hadAChange","zone","_computeWhitespaceProps","afterViewLineNumber","_safeCallOnComputedHeight","_getZoneOrdinal","afterColumn","_heightInPixels","zoneAfterModelPosition","validAfterLineNumber","getModelLineMaxColumn","zoneBeforeModelPosition","viewPosition","addZone","myZone","whitespaceId","addWhitespace","removeZone","layoutZone","shouldSuppressMouseDownOnViewZone","onComputedHeight","_safeCallOnDomNodeTop","onDomNodeTop","visibleWhitespaces","visibleZones","hasVisibleZone","newTop","newDisplay","Viewport","MinimapLinesRenderingData","ViewLineData","minColumn","maxColumn","ViewLineRenderingData","mightContainNonBasicASCII","inlineDecorations","InlineDecoration","ViewModelDecoration","ViewEventsCollector","_eventsLen","_events","finalize","ViewLayout","_configuration","_linesLayout","linesLayout_1","_updateHeight","getScrollable","onHeightMaybeChanged","_getHorizontalScrollbarHeight","scrollbar","_getTotalHeight","scrollBeyondLastLine","viewModel_1","_computeScrollWidth","maxLineWidth","isViewportWrapping","LINES_HORIZONTAL_EXTRA_PX","onMaxLineWidthChanged","newScrollWidth","saveState","firstLineNumberInViewport","scrollTopWithoutViewZones","restoreState","restoreScrollTop","getLineNumberAtVerticalOffset","visibleBox","getLinesViewportDataAtScrollTop","ViewModelDecorations","_coordinatesConverter","_decorationsCache","_clearCachedModelDecorationsResolver","_cachedModelDecorationsResolver","_cachedModelDecorationsResolverViewRange","onModelDecorationsChanged","changedDecorations","changedDecoration","myDecoration","removedDecorations","removedDecoration","_getOrCreateViewModelDecoration","modelDecoration","modelRange","convertModelRangeToViewRange","getAllOverviewRulerDecorations","modelDecorations","getAllDecorations","overviewRuler","viewModelDecoration","getDecorationsViewportData","viewRange","cacheIsValid","_getDecorationsViewportData","viewportRange","viewportModelRange","convertViewRangeToModelRange","getDecorationsInRange","decorationsInViewport","decorationsInViewportLen","decorationOptions","inlineDecoration","intersectedStartLineNumber","intersectedEndLineNumber","beforeContentClassName","afterContentClassName","MoveCaretCommand","isMovingLeft","_selection","_isMovingLeft","newLineContent","_cutStartIndex","_cutEndIndex","_moved","BlockCommentCommand","_usedEndToken","_haystackHasNeedleAtOffset","needleLength","_createOperationsForBlockComment","startToken","endToken","startTokenIndex","endTokenIndex","_createRemoveBlockCommentOperations","_createAddBlockCommentOperations","languageConfigurationRegistry_1","startTokenEditOperation","endTokenEditOperation","LineCommentCommand","_tabSize","_deltaColumn","_gatherPreflightCommentStrings","commentStr","ignore","commentStrOffset","commentStrLength","_analyzeLines","lineData","lineContentStartOffset","commentStrEndOffset","shouldRemoveComments","onlyWhitespaceLines","blockCommentCommand_1","supported","_gatherPreflightData","_executeLineComments","_createRemoveLineCommentsOperations","_normalizeInsertionPoint","_createAddLineCommentsOperations","cursorPosition","_attemptRemoveBlockComment","startTokenAllowedBeforeColumn","getLineFirstNonWhitespaceColumn","_executeBlockComment","_moveEndPositionDown","nextVisibleColumn","currentVisibleColumn","isTab","columnSize","minVisibleColumn","DragAndDropCommand","targetPosition","copy","targetSelection","FindReplaceState","_searchString","_replaceString","_isRevealed","_isReplaceRevealed","_isRegex","_wholeWord","_matchCase","_searchScope","_matchesPosition","_matchesCount","_currentMatch","addChangeListener","_CHANGED_EVENT","changeMatchInfo","matchesPosition","matchesCount","currentMatch","changeEvent","moveCursor","updateHistory","replaceString","isRevealed","isReplaceRevealed","searchScope","somethingChanged","ReplaceAllCommand","editorSelection","replaceStrings","_editorSelection","_ranges","_replaceStrings","o1","o2","resultOps","previousOp","_trackedEditorSelectionId","ReplacePattern","staticValue","_staticValue","_pieces","fromStaticValue","ReplacePiece","buildReplaceString","piece","_substitute","ReplacePieceBuilder","_lastCharIndex","_result","_resultLen","_currentStaticPiece","emitUnchanged","toCharIndex","_emitStatic","emitStatic","emitMatchIndex","parseReplaceString","nextNextChCode","ID","getIndentRanges","limitByIndent","maxEntries","indentOccurrences","maxIndent","EditOperationsCommand","_edits","_newEol","cmd","setEOL","pushUndoStop","executeCommand","trimEdit","selectionIsSet","fixLineTerminators","_trimEdit","validateRange","editText","editForceMoveMarkers","currentText","newStartPosition","modifyPosition","newEndPosition","hasModifier","modifier","createOptions","multiCursorModifier","ClickLinkOptions","ClickLinkMouseEvent","hasTriggerModifier","triggerModifier","hasSideBySideModifier","triggerSideBySideModifier","isNoneOrSingleMouseDown","ClickLinkKeyboardEvent","keyCodeIsTriggerKey","triggerKey","keyCodeIsSideBySideKey","triggerSideBySideKey","ClickLinkGesture","_onMouseMoveOrRelevantKeyDown","onMouseMoveOrRelevantKeyDown","_onExecute","onExecute","_onCancel","onCancel","_editor","getConfiguration","lastMouseMoveEvent","hasTriggerKeyOnMouseDown","onDidChangeConfiguration","onMouseMove","onEditorMouseMove","onEditorMouseDown","onEditorMouseUp","onEditorKeyDown","onEditorKeyUp","onMouseDrag","resetHandler","onDidChangeCursorSelection","onDidChangeModelContent","onDidScrollChange","ComputeHoverOperationState","HoverOperation","computer","success","_computer","_firstWaitScheduler","_triggerAsyncComputation","_getHoverTimeMillis","_secondWaitScheduler","_triggerSyncComputation","_loadingMessageScheduler","_showLoadingMessage","_asyncComputationPromise","_asyncComputationPromiseDone","_progressCallback","getComputer","getHoverTimeMillis","HOVER_TIME","computeAsync","asyncResult","_withAsyncResult","computeSync","onResult","_onComplete","getResult","_onProgress","getResultWithLoadingMessage","ContentHoverWidget","_containerDomNode","updateFont","onDidLayoutChange","updateMaxHeight","addContentWidget","_showAtPosition","showAt","layoutContentWidget","_stoleFocus","editorBrowser","removeContentWidget","codeTags","codeClasses","getElementsByClassName","applyFontInfo","updateContents","getLayoutInfo","GlyphHoverWidget","_showAtLineNumber","addOverlayWidget","editorLayout","topForLineNumber","getTopForLineNumber","editorScrollTop","removeOverlayWidget","InPlaceReplaceCommand","originalSelection","_editRange","_originalSelection","getSpaceCnt","spacesCnt","generateIndent","tabsCnt","CopyLinesCommand","isCopyingDown","_isCopyingDown","_startLineNumberDelta","_endLineNumberDelta","sourceLines","sourceText","_selectionDirection","DeleteLinesCommand","restoreCursorToColumn","createFromSelection","getSortData","descending","linesToSort","sorted","sortLines","SortLinesCommand","canRun","LightBulbWidget","stickiness","NeverGrowsWhenTypingAtEdges","glyphMarginHoverMessage","_onClick","_decorationIds","_futureFixes","_mouseDownSubscription","GUTTER_GLYPH_MARGIN","_currentLine","fixes","deltaDecorations","__assign","QuickFixContextMenu","contextMenuService","commandService","_onDidExecuteCodeAction","onDidExecuteCodeAction","_contextMenuService","_commandService","at","command","actions_1","showContextMenu","_toCoords","getActions","_visible","revealPosition","cursorCoords","getScrolledVisiblePosition","editorCoords","find","NodeList","Block","TokenTreeBracket","bracketType","RawToken","ModelRawTokenScanner","_lineText","_advance","_next","currentLineTokens","TokenScanner","_rawTokenScanner","_nextBuff","_cachedLanguageBrackets","_cachedLanguageId","modeBrackets","foundBracket","foundBracketStartOffset","foundBracketEndOffset","bracketData","bracketIsOpen","TokenTreeBuilder","_line","_any","_accept","condt","accepted","_currentToken","_peek","_block","nodelist","walk","marker_3","TokenType","Scanner","isDigitCharacter","isVariableCharacter","tokenText","Int","VariableName","Format","Dollar","Colon","CurlyOpen","CurlyClose","Backslash","Marker","marker_1","marker_2","Text","Placeholder","compareByIndex","isFinalTabstop","resolvedValue","isDefined","TextmateSnippet","_placeholders","placeholders","fullLen","enclosingPlaceholders","placeholder","resolveVariables","resolver","others","newChildren","SnippetParser","enforceFinalTabstop","insertFinalTabstop","placeholderDefaultValues","thisMarker","_parseAny","_parseText","_prevToken","_parseEscaped","_parseTM","idOrName","name_1","EditorSnippetVariableResolver","dir","VariableNames","TM_SELECTED_TEXT","TM_CURRENT_LINE","TM_CURRENT_WORD","TM_LINE_INDEX","TM_LINE_NUMBER","TM_FILENAME","TM_DIRECTORY","TM_FILEPATH","LineContext","CompletionModel","lineContext","snippetConfig","_snippetCompareFn","_compareCompletionItems","_items","_column","_lineContext","_compareCompletionItemsSnippetsUp","_compareCompletionItemsSnippetsDown","leadingLineContent","characterCountDelta","_filteredItems","_ensureCachedState","_isIncomplete","resolveIncompleteInfo","incomplete","_stats","_createCachedState","suggestionCount","snippetCount","textCount","suggestion","filterText","filters_1","_colorize","_actualColorize","_fakeColorize","viewLineRenderer_1","length_2","tokenizeResult","Colorizer","colorizeElement","themeService","modeService","mimeType","setTheme","nodeValue","colorize","_tokenizationSupportChangedPromise","stopListening","getModeId","getOrCreateMode","colorizeLine","colorizeModelLine","inflatedTokens","isFuzzyActionArr","what","fixCase","MonarchBracket","isFuzzyAction","isIAction","throwError","substituteMatches","re","stateMatches","full","dollar","ofs","findRules","tokenizer","stateExists","stateNames","isArrayOf","elemType","bool","onerr","compileRegExp","monarchCommon","selectScrutinee","createGuard","tkey","scrut","oppat","pat","tester","words","inWords","patx","patexp","scrutinee","compileAction","newAction","tokenSubst","goBack","switchTo","nextEmbedded","usesEmbedded","cases","defaultToken","Rule","matchOnlyAtLineStart","setRegex","sregex","setAction","act","compile","json","addRules","newrules","include","newrule","lexerMin","rule1","matchOnlyAtStart","noThrow","maxStack","tokenPostfix","bracketIdx","desc","findBracket","matched","MonarchStackElementFactory","maxCacheDepth","_maxCacheDepth","MonarchStackElement","stackElementId","getStackElementId","popall","EmbeddedModeData","MonarchLineStateFactory","embeddedModeData","MonarchLineState","MonarchClassicTokensCollector","_lastTokenType","_lastTokenLanguage","enterMode","nestedModeTokenize","embeddedModeLine","offsetDelta","nestedModeId","embeddedModeState","nestedModeTokenizationSupport","modes","nestedResult","MonarchModernTokensCollector","_modeService","_theme","_prependTokens","_currentLanguageId","_lastTokenMetadata","_merge","bLen","cLen","MonarchTokenizer","standaloneThemeService","_standaloneThemeService","_modeId","_lexer","_embeddedModes","emitting","_tokenizationRegistryListener","isOneOfMyEmbeddedModes","rootState","lineState","tokensCollector","endLineState","_tokenize","getTheme","tokenTheme","collector","_nestedTokenize","_myTokenize","_findLeavingNestedModeOffset","popOffset","hasEmbeddedPopRule","regexSource","nestedEndState","nestedModeLine","restOfTheLine","groupActions","groupMatches","groupMatched","groupRule","pos0","stackLen0","groupLen0","enteringEmbeddedMode","restOfLine","rule_1","totalLen","enteringEmbeddedModeId","getModeIdForLanguageName","embeddedModeData_1","_getNestedEmbeddedModeData","mimetypeOrModeId","nestedMode","_locateMode","isRegisteredMode","mode","getMode","createTokenizationSupport","nls","BaseActionItem","_callOnDispose","_action","_handleActionChangeEvent","_updateEnabled","_updateChecked","_updateClass","_updateLabel","_updateTooltip","_actionRunner","actionRunner","getAction","isEnabled","setActionContext","newContext","enableDragging","isMenu","lifecycle","Separator","order","ActionItem","icon","role","_updateRadio","ActionsOrientation","ActionBar","focusedItem","animated","isVertical","eventHandled","doTrigger","updateFocusedItem","actionsList","setAriaLabel","actionItemElement","actionItemProvider","pull","selectFirst","updateFocus","fromRight","actionItem","context_1","events_1","SelectActionItem","selectBox","selectBox_1","registerListeners","onDidSelect","getActionContext","Menu","$menu","actionBar","actionbar_1","alert","insertMessage","alertContainer","ariaContainer","statusContainer","setARIAContainer","status","NLS_CASE_SENSITIVE_CHECKBOX_LABEL","NLS_WHOLE_WORD_CHECKBOX_LABEL","NLS_REGEX_CHECKBOX_LABEL","CaseSensitiveCheckbox","appendTitle","checkbox_1","WholeWordsCheckbox","RegexCheckbox","MessageType","inputBackground","inputForeground","inputValidationInfoBorder","inputValidationInfoBackground","inputValidationWarningBorder","inputValidationWarningBackground","inputValidationErrorBorder","inputValidationErrorBackground","InputBox","contextViewProvider","_onDidHeightChange","onDidHeightChange","cachedHeight","inputBorder","validationOptions","validation","showValidationMessage","showMessage","flexibleHeight","mirror","onValueChange","Bal","updateMirror","actionbar","_hideMessage","_showMessage","setPlaceHolder","placeHolder","setContextViewProvider","setEnabled","classForType","stylesForType","alertText","WARNING","hideMessage","isInputValid","inputElement","INFO","showContextView","contextview_1","RIGHT","renderOptions","spanElement","formatContent","htmlContentRenderer_1","hideContextView","previousHeight","NLS_DEFAULT_LABEL","FindInput","_onDidOptionChange","onDidOptionChange","_onInput","onInput","_onCaseSensitiveKeyDown","onCaseSensitiveKeyDown","_lastHighlightFindOptions","wholeWords","caseSensitive","inputBox","buildDomNode","appendCaseSensitiveLabel","appendWholeWordsLabel","appendRegexLabel","clearValidation","newWidth","setInputWidth","checkBoxStyles","inputBoxStyles","getCaseSensitive","setCaseSensitive","getWholeWords","setWholeWords","getRegex","focusOnCaseSensitive","highlightFindOptions","inputBox_1","findInputCheckboxes_1","viaKeyboard","controls","clearMessage","OPTION_CHANGE","_simpleAsString","labels","_asString","firstPartMod","firstPartKey","chordPartMod","chordPartKey","ModifierLabelProvider","mac","windows","linux","modifierLabels","toLabel","UILabelProvider","AriaLabelProvider","ElectronAcceleratorLabelProvider","UserSettingsLabelProvider","KeybindingLabel","os","areSame","getParts","renderPart","keybindingLabels_1","renderKey","_warning","_warn","_info","_displayStrings","Warning","Info","fromValue","Ignore","IDS","EntryAccessor","getResource","QuickOpenEntry","labelHighlights","descriptionHighlights","getLabelOptions","getDetail","getIcon","getDescription","getKeybinding","setHidden","setHighlights","detailHighlights","getHighlights","labelHighlightsA","labelHighlightsB","nameA","nameB","resourceA","resourceB","comparers_1","fuzzyHighlight","normalizedLookFor","candidateLabelHighlights","filters","pathPrefix","pathPrefixLength_1","pathHighlights","isFile","QuickOpenEntryGroup","groupLabel","withBorder","getGroupLabel","setGroupLabel","showBorder","setShowBorder","getEntry","NoActionProvider","hasActions","hasSecondaryActions","getSecondaryActions","getActionItem","actionProvider","entryContainer","row1","row2","iconLabel_1","descriptionContainer","keybindingContainer","keybindingLabel_1","detailContainer","actionBarContainer","groupData","pickerGroupBorder","pickerGroupForeground","iconClass","QuickOpenModel","_dataSource","_renderer","_filter","_accessibilityProvider","addEntries","setEntries","getEntries","visibleOnly","ClickBehavior","KeybindingDispatcher","_arr","dispatch","DefaultController","clickBehavior","ON_MOUSE_UP","downKeyBindingDispatcher","upKeyBindingDispatcher","onUp","onDown","onLeft","onRight","onPageUp","onPageDown","onHome","onEnd","onSpace","onEscape","origin","ON_MOUSE_DOWN","onLeftClick","eventish","clearFocus","DOMFocus","onKey","bindings","clearHighlight","didCollapse","didExpand","DefaultDragAndDrop","DefaultFilter","DefaultSorter","DefaultAccessibilityProvider","CollapseAllAction","viewer","TreeContext","TreeDefaults","Tree","_onHighlightChange","Model","View","onDOMFocus","onDOMBlur","DOMBlur","QuickOpenController","treeDefaults_1","HideReason","widgetShadow","DEFAULT_INPUT_ARIA_LABEL","QuickOpenWidget","usageLogger","setCallbacks","CANCELED","gainingFocus","progressBar","progressbar_1","inputContainer","inputPlaceHolder","shouldOpenInBackground","navigateInTree","focus_1","elementSelected","quickOpen_1","OPEN_IN_BACKGROUND","OPEN","treeContainer","treeImpl_1","quickOpenViewer_1","treeElement","elementFocused","quickNavigateConfiguration","quickNavKeys","keybindings","focus_2","layoutDimensions","helpText","navigate","quickNavigate","isShift","oldFocus","newFocus","keymods","extractKeyMods","PREVIEW","preferredMode","indexOfAcceptedElement","entriesCount","publicLog","isQuickNavigate","ELEMENT_SELECTED","param","isLoosingFocus","doShowWithPrefix","doShowWithInput","autoFocus","inputSelection","onShow","setInputAndLayout","isElementVisible","autoFocusPrefixMatch","caseSensitiveMatch","caseInsensitiveMatch","lowerCasePrefix","entryToFocus","autoFocusFirstEntry","autoFocusIndex","autoFocusSecondEntry","autoFocusLastEntry","itemHeight","minItemsToShow","preferredItemsHeight","MAX_ITEMS_HEIGHT","maxItemsToShow","entryHeight","onOk","getQuickNavigateConfiguration","setPassword","isPassword","onInputChanging","inputChangingTimeoutHandle","getTree","showInputDecoration","decoration","severity_1","clearInputDecoration","focus_3","getProgressBar","getInputBox","setExtraClass","previousClass","quickOpenWidth","MAX_WIDTH","onFocusLost","FOCUS_LOST","_cursorStyleFromString","cursorStyle","TextEditorCursorStyle","Line","Underline","LineThin","BlockOutline","UnderlineThin","_boolean","_string","_stringSet","allowedValues","_clampedInt","minimum","maximum","_float","_wrappingIndentFromString","wrappingIndent","WrappingIndent","Same","_cursorBlinkingStyleFromString","cursorBlinkingStyle","TextEditorCursorBlinkingStyle","Blink","Smooth","Phase","Expand","Solid","_scrollbarVisibilityFromString","RenderMinimap","blinkingStyleToString","blinkingStyle","cursorStyleToString","InternalEditorOptions","autoClosingBrackets","useTabStops","tabFocusMode","dragAndDrop","contribInfo","_equalsLayoutInfo","_equalsViewOptions","_equalsWrappingInfo","_equalsContribOptions","glyphMarginHeight","lineNumbersLeft","lineNumbersWidth","lineNumbersHeight","decorationsHeight","renderMinimap","viewportColumn","_equalsOverviewRuler","extraEditorClassName","disableMonospaceOptimizations","_equalsNumberArrays","rulers","renderLineNumbers","renderCustomLineNumbers","renderRelativeLineNumbers","selectOnLineNumbers","revealHorizontalRightPadding","roundedSelection","overviewRulerLanes","overviewRulerBorder","cursorBlinking","mouseWheelZoom","hideCursorInOverviewRuler","renderIndentGuides","renderLineHighlight","_equalsScrollbarOptions","_equalsMinimapOptions","minimap","showSlider","renderCharacters","_equalFindOptions","seedSearchStringFromSelection","autoFindInSelection","inDiffEditor","isDominatedByLongLines","isWordWrapMinified","wrappingColumn","wordWrapBreakBeforeCharacters","wordWrapBreakAfterCharacters","wordWrapBreakObtrusiveCharacters","selectionClipboard","hover","contextmenu","_equalsQuickSuggestions","quickSuggestions","quickSuggestionsDelay","parameterHints","iconsInSuggestions","formatOnType","formatOnPaste","suggestOnTriggerCharacters","acceptSuggestionOnEnter","acceptSuggestionOnCommitCharacter","snippetSuggestions","wordBasedSuggestions","suggestFontSize","suggestLineHeight","selectionHighlight","occurrencesHighlight","codeLens","folding","showFoldingControls","matchBrackets","EditorOptionsValidator","wordWrap","configuredMulticursorModifier","_sanitizeViewInfo","_sanitizeContribInfo","lineNumbersMinChars","lineDecorationsWidth","mouseStyle","disableLayerHinting","automaticLayout","wordWrapColumn","wordWrapMinified","_sanitizeScrollbarOpts","_sanitizeMinimapOpts","_santizeFindOpts","lineNumbers","referenceInfos","InternalEditorOptionsFactory","_tweakValidatedOptions","accessibilityIsOn","accessibilityIsOff","createInternalEditorOptions","EditorLayoutProvider","outerWidth","outerHeight","showGlyphMargin","showLineNumbers","lineNumbersDigitCount","maxDigitWidth","scrollbarArrowSize","verticalScrollbarHasArrows","minimapRenderCharacters","minimapMaxColumn","bareWrappingInfo","digitCount","remainingWidth","minimapCharWidth","Large","LargeBlocks","Small","SmallBlocks","verticalArrowSize","EDITOR_FONT_DEFAULTS","EDITOR_MODEL_DEFAULTS","detectIndentation","EDITOR_DEFAULTS","safeParseFloat","safeParseInt","clamp","GOLDEN_LINE_HEIGHT_RATIO","BareFontInfo","createFromRawSettings","editorOptions_1","editorZoomLevelMultiplier","editorZoom_1","FontInfo","isMonospace","typicalFullwidthCharacterWidth","LONG_LINE_BOUNDARY","TextModel","creationOptions","textModelData","resolveCreationData","_shouldSimplifyMode","MODEL_SYNC_LIMIT","_shouldDenyMode","MODEL_TOKENIZATION_LIMIT","editorCommon","_constructLines","_setVersionId","_isDisposing","createFromString","DEFAULT_CREATION_OPTIONS","textSource_1","resolvedOpts","textSource","guessedIndentation","indentationGuesser_1","_assertNotDisposed","isTooLargeForHavingAMode","getOptions","_newOpts","newTabSize","textModelEvents","_normalizeIndentationFromWhitespace","normalizeIndentation","getOneIndent","_mightContainRTL","_mightContainNonBasicASCII","_alternativeVersionId","_EOL","rawPosition","_increaseVersionId","newVersionId","_overwriteAlternativeVersionId","newAlternativeVersionId","_BOM","_emitContentChanged2","rangeLength","isFlush","_resetValue","setValueFromTextSource","oldFullModelRange","getFullModelRange","oldModelValueLength","getValueLengthInRange","_emitModelRawContentChangedEvent","preserveBOM","fullModelRange","fullModelValue","getValueLength","rawRange","TextDefined","_getEndOfLine","smallLineCharCount","longLineCharCount","_resetIndentRanges","_indentRanges","_getIndentRanges","indentRanges_1","_toValidLineIndentGuide","indentGuide","lineIndentLevel","maxIndentGuide","getLineIndentGuide","bestIndent","newEOL","CRLF","getLineLastNonWhitespaceColumn","validateLineNumber","strict","charCodeBefore","validatePosition","startLineText","endLineText","charCodeBeforeStart","charCodeBeforeEnd","startInsideSurrogatePair","endInsideSurrogatePair","rawLines","modelLines","modelLine_1","rawSearchScope","textModelSearch_1","rawSearchStart","RevealTarget","CursorConfiguration","oneIndent","modelOptions","pageSize","autoClosingPairsOpen","autoClosingPairsClose","electricChars","_getElectricCharacters","_getAutoClosingPairs","_getSurroundingPairs","shouldRecreate","textModel_1","SingleCursorState","selectionStartLeftoverVisibleColumns","leftoverVisibleColumns","_computeSelection","hasSelection","inSelectionMode","CursorContext","viewModel","validateViewPosition","modelPosition","validateViewRange","expectedModelRange","convertViewPositionToModelPosition","getCompletelyVisibleViewRange","getCompletelyVisibleModelRange","getCompletelyVisibleViewRangeAtScrollTop","getCompletelyVisibleModelRangeAtScrollTop","getVerticalOffsetForViewLine","viewLineNumber","CursorState","modelState","viewState","fromModelState","fromViewState","fromModelSelection","modelSelection","fromModelSelections","modelSelections","ensureInEditableRange","hasEditableRange","modelEditableRange","getEditableRange","viewEditableRange","newModelState","_ensureInEditableRange","newViewState","editableRange","EditOperationResult","commands","shouldPushStackElementBefore","shouldPushStackElementAfter","CursorColumns","isInsideSurrogatePair","visibleColumnFromColumn","nextTabStop","visibleColumnFromColumn2","columnFromVisibleColumn","visibleColumn","beforeVisibleColumn","afterVisibleColumn","columnFromVisibleColumn2","prevTabStop","ShiftCommand","_useLastEditRangeForCursorEndPosition","_selectionStartColumnStaysPut","unshiftIndentCount","contentStartVisibleColumn","cursorCommon_1","shiftIndentCount","_addEditOperation","startLine","endLine","shouldIndentEmptyLines","indents","previousLineExtraSpaces","extraSpaces","indentationEndIndex","isUnshift","desiredIndentCount","lastOp","initialStartColumn","ColumnSelection","_columnSelect","fromVisibleColumn","toVisibleColumn","reversed","isRTL","isLTR","visibleStartColumn","visibleEndColumn","viewStates","toVisualColumn","columnSelect","fromViewSelection","toViewLineNumber","toViewVisualColumn","fromViewPosition","fromViewVisibleColumn","columnSelectLeft","cursor","columnSelectRight","maxVisualViewColumn","minViewLineNumber","maxViewLineNumber","lineMaxViewColumn","lineMaxVisualViewColumn","columnSelectUp","isPaged","columnSelectDown","CursorPosition","MoveOperations","moveLeft","noOfColumns","moveRight","down","allowMoveOnLastLine","moveDown","translateDown","allowMoveOnFirstLine","moveUp","translateUp","moveToBeginningOfLine","firstNonBlankColumn","moveToEndOfLine","moveToBeginningOfBuffer","moveToEndOfBuffer","lastColumn","DeleteOperations","deleteRight","deleteSelection","rightOfPosition","cursorMoveOperations_1","replaceCommand_1","_isAutoClosingPairDelete","_runAutoClosingPairDelete","deleteLeft","lastIndentationColumn","leftOfPosition","cut","TypeOperations","shiftCommand_1","outdent","newIndentation","_distributedPaste","_simplePaste","pasteOnNewLine","typeSelection","_distributePasteToCursors","pastePieces","paste","distributedPaste","_goodIndentForLine","expectedIndentAction","_replaceJumpToNextIndent","typeText","tab","goodIndent","possibleTypeText","lineMaxColumn","replacePreviousChar","_typeCommand","keepPosition","_enter","indentation_1","normalIndent","increasedIndent","actualIndentation","ir","oldEndViewColumn","oldEndColumn","firstNonWhitespace","_runAutoIndentType","currentIndentation","_isAutoClosingCloseCharType","_runAutoClosingCloseCharType","_isAutoClosingOpenCharType","characterBeforeCode","characterAfter","thisBraceIsSymmetric","isBeforeCloseBrace","otherCloseBrace","otherBraceIsSymmetric","_runAutoClosingOpenCharType","closeCharacter","_isSurroundSelectionType","selectionContainsOnlyWhitespace","_runSurroundSelectionType","surroundSelectionCommand_1","_typeInterceptorElectricChar","electricAction","findMatchingBracketUp","matchLine","matchLineIndentation","lineFirstNonBlankColumn","typeWithInterceptors","indentCommand","typeWithoutInterceptors","lineInsertBefore","lineInsertAfter","lineBreakInsert","WordType","WordNavigationType","WordOperations","_createWord","wordType","_findPreviousWordOnLine","_doFindPreviousWordOnLine","_findEndOfWord","_findNextWordOnLine","_doFindNextWordOnLine","_findStartOfWord","moveWordLeft","wordNavigationType","prevWordOnLine","moveWordRight","nextWordOnLine","_deleteWordLeftWhitespace","lastNonWhitespace","deleteWordLeft","whitespaceHeuristics","_findFirstNonWhitespaceChar","_deleteWordRightWhitespace","deleteWordRight","prevWord","isInPrevWord","isInNextWord","startColumn_1","endColumn_1","possiblePosition","CursorMoveCommands","addCursorDown","addCursorUp","_moveToLineStart","currentViewStateColumn","isFirstLineOfWrappedLine","currentViewStatelineNumber","isBeginningOfViewLine","_moveToLineStartByModel","_moveToLineStartByView","_moveToLineEnd","viewStatePosition","viewModelMaxColumn","isEndOfViewLine","modelStatePosition","modelMaxColumn","isEndLineOfWrappedLine","_moveToLineEndByModel","_moveToLineEndByView","expandLineSelection","viewSelection","_viewPosition","selectToLineNumber","selectToColumn","enteringLineNumber","selectToViewLineNumber","selectToViewColumn","endPositionOfSelectionStart","cursorWordOperations_1","cancelSelection","moveTo","unit","_moveHalfLineLeft","_moveLeft","_moveHalfLineRight","_moveRight","_moveUpByViewLines","_moveUpByModelLines","_moveDownByViewLines","_moveDownByModelLines","_moveToViewMinColumn","_moveToViewFirstNonWhitespaceColumn","_moveToViewCenterColumn","_moveToViewMaxColumn","_moveToViewLastNonWhitespaceColumn","visibleModelRange","modelLineNumber","_firstLineNumberInRange","modelColumn","_moveToModelPosition","_lastLineNumberInRange","visibleViewRange","findPositionInViewportIfOutside","viewColumn","_moveToViewPosition","halfLine","toViewColumn","toModelLineNumber","toModelColumn","CursorMove","cursorMoveArg","by","RawDirection","Left","Right","Up","Down","WrappedLineStart","WrappedLineFirstNonWhitespaceCharacter","WrappedLineColumnCenter","WrappedLineEnd","WrappedLineLastNonWhitespaceCharacter","ViewPortTop","ViewPortCenter","ViewPortBottom","ViewPortIfOutside","RawUnit","WrappedLine","Character","HalfLine","Direction","Unit","OneCursor","_removeMarker","_selStartMarker","_selEndMarker","asCursorState","readSelectionFromMarkers","_getMarker","ensureValidState","viewSelectionStart","viewSelectionStart1","viewSelectionStart2","_ensureMarker","_changeMarker","_changeMarkerStickiness","_addMarker","CursorCollection","primaryCursor","oneCursor_1","secondaryCursors","lastAddedCursorIndex","killSecondaryCursors","updateContext","getAll","getViewPositions","getSelections","getViewSelections","setSelections","setStates","getPrimaryCursor","_setSecondaryStates","secondaryStates","secondaryCursorsLength","secondaryStatesLength","createCnt","_addSecondaryCursor","_removeSecondaryCursor","getLastAddedCursorIndex","_getAll","sortedCursors","sortedCursorIndex","currentViewSelection","nextViewSelection","winnerSortedCursorIndex","looserSortedCursorIndex","looserIndex","winnerIndex","looserSelection","winnerSelection","resultingRange","looserSelectionIsLTR","winnerSelectionIsLTR","resultingSelectionIsLTR","resultingSelection","resultingState","MoveLinesCommand","isMovingDown","_isMovingDown","_autoIndent","_moveEndLineSelectionShrink","modelLineCount","buildIndentConverter","otherLineNumber","movingLineNumber","movingLineText","insertingText_1","isAutoIndent","movingLineMatchResult","matchEnterRule","oldIndentation","newSpaceCnt","IndentUtil","trimLeft","indentOfMovingLine","oldSpaceCnt","getIndentEditsOfMovingBlock","newIndentatOfMovingBlock","spaceCntOffset","indentOfFirstLine","oldIndent","oneLineAbove","enterPrefix","languageAtSelectionStart","originalIndent","newSpacesCnt","newIndent","containsLineMappingChanged","CursorStateChangedEvent","CursorModelState","cursorState","Cursor","_viewModel","_cursors","cursorCollection_1","_isHandling","_columnSelectData","hadContentChange","hadFlushEvent","textModelEvents_1","rawChangeEvent","_onModelContentChanged","cursorEvents_1","NotSet","updateCursorContext","onDidChangeLanguage","onDidChangeOptions","_emitStateChangedIfNecessary","setColumnSelectData","columnSelectData","_revealRange","revealRange","emitCursorRevealRange","scrollTo","desiredSelections","ContentFlush","selectionsFromMarkers","RecoverFromMarkers","getColumnSelectData","primaryPos","_executeEditOperation","opResult","CommandExecutor","executeCommands","_interpretCommandResult","viewSelections","viewEvents","revealTarget","viewPositions","handlerId","H","cursorChangeReason","_replacePreviousChar","_paste","_cut","_externalExecuteCommand","_externalExecuteCommands","cursorTypeOperations_1","cursorDeleteOperations_1","selectionsBefore","selectionStartMarkers","positionMarkers","_innerExecuteCommands","_arrayIsEmpty","commandsData","_getEditOperations","rawOperations","editableRangeStart","editableRangeEnd","operationRange","loserCursorsMap","_getLoserCursorMap","filteredOperations","major","hadTrackedEditOperation","_isTracked","selectionsAfter","pushEditOperations","groupedInverseEditOperations","minorBasedSorter","minor","cursorSelections","selectionStartMarker","positionMarker","losingCursors","losingCursorIndex","_getEditOperationsFromCommand","majorIdentifier","operationMinor","isAutoWhitespaceEdit","editOperationBuilder","trackPreviousOnEmpty","selectionMarkerStickToPreviousCharacter","positionMarkerStickToPreviousCharacter","friendlyMessage","currentOp","loserMajor","ModelTokensChangedEventBuilder","registerChangedTokens","rangesLength","previousRange","TextModelWithTokens","_tokenizationListener","_resetTokenizationState","emitModelTokensChangedEvent","_revalidateTokensTimeout","_clearTimers","_lastState","_shouldAutoTokenize","_tokenizationSupport","initialState","MODE_TOKENIZATION_FAILED_MSG","_invalidLineStartIndex","_beginBackgroundTokenization","_withModelTokensChangedEventBuilder","eventBuilder","_updateTokensUntilLine","_getLineTokens","setMode","oldLanguage","newLanguage","_emitModelModeChangedEvent","_invalidateLine","isInvalid","_revalidateTokensNow","_warmUpTokens","tokenizedChars","currentCharsToTokenize","currentEstimatedTimeToTokenize","sw","stopwatch_1","endStateIndex","freshState","nextInvalidLineIndex","prevToken","_bracket","bracketsSupport","_findMatchingBracketUp","matchBracket","_matchBracket","currentToken","currentModeBrackets","searchStartOffset","searchEndOffset","foundBracketText","_matchFoundBracket","foundBracket_1","prevModeBrackets","isOpen","_findMatchingBracketDown","searchStopOffset","hitText","findPrevBracket","_toFoundBracket","findNextBracket","_INSTANCE_COUNT","TextModelWithMarkers","_markerIdGenerator","_markerIdToMarker","_addMarkers","newMarkers","newMarker","sortedMarkers","currentLineNumber","currentMarkers","currentMarkersLen","newPos","newStickToPreviousCharacter","_getMarkersCount","_removeMarkers","textModelWithTokens_1","nextInstanceId","cleanClassName","_normalizeOptions","ModelDecorationOptions","createDynamic","ClassName","EditorWarningDecoration","EditorErrorDecoration","DecorationsTracker","addedDecorations","addedDecorationsLen","changedDecorationsLen","removedDecorationsLen","addNewDecoration","addRemovedDecoration","addMovedDecoration","addUpdatedDecoration","InternalDecoration","internalId","ownerId","isForValidation","setRange","multiLineDecorationsMap","rangeWasMultiLine","rangeIsMultiline","TextModelWithDecorations","_instanceId","_lastDecorationId","_currentDecorationsTracker","_currentDecorationsTrackerCnt","_currentMarkersTracker","_currentMarkersTrackerCnt","_internalDecorations","_multiLineDecorationsMap","_shouldStartMarkerSticksToPreviousCharacter","AlwaysGrowsWhenTypingAtEdges","GrowsOnlyWhenTypingBefore","_shouldEndMarkerSticksToPreviousCharacter","_getTrackedRangesCount","changeDecorations","decorationsTracker","_acquireDecorationsTracker","_changeDecorations","_releaseDecorationsTracker","changeAccessor","addDecoration","_addDecorationImpl","changeDecoration","newRange","_changeDecorationImpl","changeDecorationOptions","_changeDecorationOptionsImpl","removeDecoration","_removeDecorationImpl","oldDecorations","newDecorations","_deltaDecorationsImpl","_normalizeDeltaDecorations","removeAllDecorationsWithOwnerId","toRemove","decorationId","_removeDecorationsImpl","getDecorationOptions","getDecorationRange","getLineDecorations","filterOutValidation","getLinesDecorations","_getMultiLineDecorations","filterRange","filterOwnerId","filterStartLineNumber","filterStartColumn","filterEndLineNumber","filterEndColumn","_getDecorationsInRange","resultMap","lineMarkers","_startLineNumber","_endLineNumber","validatedRange","_acquireMarkersTracker","_releaseMarkersTracker","_handleTrackedMarkers","changedInternalDecorationIds","uniqueChangedDecorations","uniqueChangedDecorationsLen","previousInternalDecorationId","_createRangeFromMarkers","emitModelDecorationsChangedEvent","_handleTrackedDecorations","deltaDecoration","ModelDeltaDecoration","_externalDecorationId","_addDecorationsImpl","internalDecorationIds","decorationIds","newDecoration","markerIds","removeMarkersLen","_resolveOldDecorations","oldDecorationsIds","oldDecorationsIndex","oldDecorationsLength","newDecorationsIndex","newDecorationsLength","decorationsToAdd","decorationsToRemove","oldDecoration","comparison","newIds","textModelWithMarkers_1","ModelDecorationOverviewRulerOptions","darkColor","hcColor","Center","lastStaticId","staticId","hoverMessage","EditableTextModel","_commandManager","editStack_1","_isUndoing","_isRedoing","_hasEditableRange","_editableRangeId","_trimAutoWhitespaceLines","onDidChangeRawContent","onDidChangeContent","_pushEditOperations","incomingEdits","editsAreNearCursors","foundEditNearSel","selIsAbove","selIsBelow","trimLineNumber","allowTrimLine","_reduceOperations","_toSingleEditOperation","firstEditRange","lastEditRange","entireEditRange","lastEndLineNumber","lastEndColumn","operation","sortIndex","_sortOpsAscending","_sortOpsDescending","_applyEdits","canReduceOperations","rangeEnd","reverseRanges","_getInverseEditRanges","reverseOperations","newTrimAutoWhitespaceCandidates","reverseRange","currentLineContent","oldContent","_doApplyEdits","prevContent","prevOpEndLineNumber","prevOpEndColumn","prevOp","resultRange","rawContentChanges","contentChanges","lineEditsQueue","flushLineEdits","currentLineNumberStart","minTouchedLineNumber","maxTouchedLineNumber","totalLinesCountDelta","deletingLinesCnt","insertingLinesCnt","editingLinesCnt","editLineNumber","lineEdit","spliceStartLineNumber","spliceStartColumn","endLineRemains","spliceCnt","markersOnDeletedLines","deleteLineIndex","deleteLineMarkers","deletedMarkersPosition","spliceLineNumber","spliceColumn","leftoverLine","newLinesContent","newLinesLengths","_assertLineNumbersOK","foundMarkersCnt","_undo","_redo","setEditableRange","_DECORATION_OPTION","textModelWithDecorations_1","MODEL_ID","associatedResource","_associatedResource","_attachedEditorCount","onDidChangeDecorations","onBeforeAttached","onBeforeDetached","isAttachedToEditor","editableTextModel_1","createSplitLine","linePositionMapperFactory","columnsForFullWidthChar","positionMapper","createLineMapping","VisibleIdentitySplitLine","InvisibleIdentitySplitLine","SplitLine","OutputPosition","outputLineIndex","outputOffset","SplitLinesCollection","_validModelVersionId","hiddenAreasIds","_ensureValidState","resetHiddenAreas","linesContent","hiddenAreas","areaId","hiddenAreaStart","hiddenAreaEnd","hiddenAreaIdx","nextLineNumberToUpdateHiddenArea","isInHiddenArea","getViewLineCount","prefixSumComputer","getHiddenAreas","decId","_reduceRanges","currentRangeStart","currentRangeEnd","setHiddenAreas","newRanges","oldRanges","hasDifference","lineChanged","newOutputLineCount","setTabSize","setWrappingSettings","onModelFlushed","onModelLinesDeleted","outputFromLineNumber","outputToLineNumber","onModelLinesInserted","testPosition","totalOutputLineCount","insertPrefixSumValues","outputLineCount","onModelLineChanged","newText","oldOutputLineCount","lineMappingChanged","changeFrom","changeTo","insertFrom","insertTo","deleteFrom","deleteTo","acceptVersionId","_toValidViewLineNumber","viewLineCount","warmUpLookupCache","viewStartLineNumber","viewEndLineNumber","getViewLineIndentGuide","getViewLineContent","getViewLineMinColumn","getViewLineMaxColumn","getViewLineData","getViewLinesData","needed","startModelLineIndex","startRemainder","modelLineIndex","fromViewLineIndex","remainingViewLineCount","toViewLineIndex","expectedModelPosition","computedModelColumn","getModelColumnOfViewPosition","inputColumn","_modelLineNumber","_modelColumn","validPosition","inputLineNumber","lineIndexChanged","deltaLineNumber","getViewPositionOfModelPosition","fromOuputLineIndex","toOutputLineIndex","globalStartIndex","outputColumn","wrappedIndent","getWrappedLinesIndent","wrappedIndentLength","getOutputLineCount","getInputStartOffsetOfOutputLineIndex","getInputOffsetOfOutputPosition","getInputEndOffsetOfOutputLineIndex","deltaStartIndex","globalIndex","adjustedColumn","getOutputPositionOfInputOffset","WrappingCharacterClassifier","BREAK_BEFORE","BREAK_AFTER","BREAK_OBTRUSIVE","CharacterHardWrappingLineMapperFactory","breakBeforeChars","breakAfterChars","breakObtrusiveChars","breakingColumn","hardWrappingIndent","wrappedTextIndentVisibleColumn","wrappedTextIndent","lastBreakingOffset","breakingLengths","breakingLengthsIndex","niceBreakOffset","niceBreakVisibleColumn","obtrusiveBreakOffset","obtrusiveBreakVisibleColumn","charCodeIsTab","charCodeClass","prevCode","charColumnSize","breakBeforeOffset","restoreVisibleColumnFrom","nextCode","CharacterHardWrappingLineMapping","prefixSums","wrappedLinesIndent","_prefixSums","_wrappedLinesIndent","inputOffset","splitLinesCollection_1","CoordinatesConverter","convertViewSelectionToModelSelection","validViewStart","validViewEnd","convertModelSelectionToViewSelection","ViewModel","hardWrappingLineMapperFactory","characterHardWrappingLineMapper_1","viewLayout_1","_centeredViewLine","viewModelDecorations_1","eventsCollector","_onModelEvents","_onConfigurationChanged","previousCenteredModelRange","getCenteredRangeInViewport","revealPreviousCenteredModelRange","newCenteredViewRange","setMaxLineNumber","hadOtherModelChange","hadModelLineChangeThatChangedLineMapping","_e","linesDeletedEvent","linesInsertedEvent","linesChangedEvent","viewRanges","currentCenteredViewRange","startViewLineNumber","endViewLineNumber","getTabSize","setViewport","getMinimapLinesRenderingData","newLineCharacter","_getColorMap","_getHTMLToCopy","textToHtmlTokenizer_1","FindDecorations","_findScopeDecorationId","_rangeHighlightDecorationId","_highlightedDecorationId","_startPosition","_allDecorations","getFindScope","setCurrentFindMatch","getCurrentMatchesPosition","desiredRange","nextMatch","newCurrentDecorationId","matchPosition","createFindMatchDecorationOptions","_RANGE_HIGHLIGHT_DECORATION","findScope","_FIND_SCOPE_DECORATION","tmpDecorations","isCurrent","_CURRENT_FIND_MATCH_DECORATION","_FIND_MATCH_DECORATION","ToggleCaseSensitiveKeybinding","primary","ToggleWholeWordKeybinding","ToggleRegexKeybinding","ToggleSearchScopeKeybinding","ShowPreviousFindTermKeybinding","ShowNextFindTermKeybinding","FIND_IDS","StartFindAction","NextMatchFindAction","PreviousMatchFindAction","NextSelectionMatchFindAction","PreviousSelectionMatchFindAction","AddSelectionToNextFindMatchAction","AddSelectionToPreviousFindMatchAction","MoveSelectionToNextFindMatchAction","MoveSelectionToPreviousFindMatchAction","StartFindReplaceAction","CloseFindWidgetCommand","ToggleCaseSensitiveCommand","ToggleWholeWordCommand","ToggleRegexCommand","ToggleSearchScopeCommand","ReplaceOneAction","ReplaceAllAction","SelectAllMatchesAction","ShowPreviousFindTermAction","ShowNextFindTermAction","MATCHES_LIMIT","FindModelBoundToEditorModel","findDecorations_1","_updateDecorationsScheduler","research","Explicit","_ignoreModelContentChanged","_onStateChanged","_getSearchRange","searchOnlyEditableRange","newFindScope","_findMatches","_moveToNextMatch","_hasMatches","_cannotFind","revealRangeInCenterIfOutsideViewport","_setCurrentFindMatch","_moveToPrevMatch","isRecursed","prevMatch","moveToPrevMatch","_getNextMatch","forceMove","moveToNextMatch","_getReplacePattern","replacePattern_1","replacePattern","hasReplacementPatterns","_executeEditorCommand","replaceAll","_largeReplaceAll","_regularReplaceAll","modelText","replaceAllCommand_1","selectAllMatches","getCollapsibleRegionAtLine","allRegions","collapsibleRegion","dec","decRange","doesLineBelongsToCollapsibleRegion","doesCollapsibleRegionIsAfterLine","getFoldedCollapsibleRegionAfterLine","surroundingRegion","doesCollapsibleRegionContains","foldingRange","isCollapsed","doesCollapsibleRegionIsBeforeLine","getCollapsibleRegionsFor","levels","CollapsibleRegionsParentHierarchy","CollapsibleRegionsChildrenHierarchy","getRegionsTill","CollapsibleRegion","_isCollapsed","_indent","_lastRange","setCollapsed","isCollaped","getVisualDecorationOptions","_COLLAPSED_VISUAL_DECORATION","_EXPANDED_VISUAL_DECORATION","getRangeDecorationOptions","_RANGE_DECORATION","visualRng","colRng","getCollapsibleRegionsToFoldAtLine","getCollapsibleRegionsToUnfoldAtLine","regionToUnfold","region","processChildRegion","childRegion","lastChildIndex","OneSnippet","snippet","_snippet","_offset","_placeholderGroups","snippetParser_1","_placeholderGroupsIdx","_placeholderDecorations","_initDecorations","placeholderOffset","placeholderLen","_decor","inactiveFinal","inactive","activePlaceholders","activeFinal","active","_c","enclosingPlaceholder","nested","nestedPlaceholder","_d","placeholder_1","SnippetSession","overwriteAfter","_snippets","_template","_overwriteBefore","_overwriteAfter","adjustWhitespace","lineLeadingWhitespace","templateLines","templateLeadingWhitespace","adjustSelection","createEditsAndSnippets","snippets","firstBeforeText","firstAfterText","indexedSelection_1","extensionBefore","extensionAfter","snippetSelection","adjustedTemplate","snippetVariables_1","undoEdits","hasPlaceholder","_move","newSelections","oneSelection","isAtFirstPlaceholder","isAtLastPlaceholder","isSelectionWithinPlaceholders","placeholderRanges","selections_1","defaultColor","showArrow","showFrame","frameColor","arrowColor","ViewZoneDelegate","_onDomNodeTop","_onComputedHeight","OverlayWidgetDelegate","_ruleName","_IdGenerator","_color","_updateStyle","where","ZoneWidget","_positionMarkerId","_disposables","_isShowing","isAccessible","_getWidth","_onWidth","_overlayWidget","_viewZone","changeViewZones","_arrow","_fillContainer","_initSash","_applyStyles","_onViewZoneTop","_onViewZoneHeight","containerHeight","_decoratingElementsHeight","_doLayout","_resizeSash","rangeOrPos","_showImpl","viewZoneDomNode","maxHeightInLines","arrowHeight","frameThickness","width_1","frameWidth","revealLineNumber","revealLine","setCssClass","classToReplace","widthInPixel","heightInPixel","_relayout","newHeightInLines","sash_1","isResizeable","lineDelta","roundedLineDelta","createBulkEdit","textModelResolverService","fileService","getConcurrentEdits","names","all_1","recording","progressRunner","ChangeRecorder","concurrentEdits","BulkEditModel","prepare","ariaMessage","editCount","resourceCount","_fileService","onFileChanges","allChanges","EditTask","modelReference","_endCursorSelection","_modelReference","textEditorModel","addEdit","newEol","_initialSelections","_getInitialSelections","_getEndCursorSelections","firstRange","relevantEditIndex","selectionRange","getEndCursorSelection","SourceModelEditTask","initialSelections","_knownInitialSelections","sourceModel","sourceSelections","_numberOfResourcesToModify","_numberOfChanges","_textModelResolverService","_sourceModel","_sourceSelections","_sourceModelTask","_addEdit","resourcesCount","changeCount","_tasks","createModelReference","ref","applyTask","bulkEdit","bulk","OneReference","_eventBus","directory","getAriaMessage","nls_1","FilePreview","preview","beforeRange","afterRange","inside","FileReferences","_preview","_loadFailure","_resolved","ReferencesModel","_groups","_references","onDidChangeReferenceRange","_compareReferences","references_1","oneRef","nextReference","totalLength","nearestReference","nearest","prefixLen","offsetDist","auri","buri","ContextMenuHandler","contextViewService","telemetryService","messageService","menuContainerElement","hideViewOnRun","retainActionItem","$el","getMenuClassName","menu","menu_1","getActionsContext","listener1","listener2","didCancel","ContextMenuService","contextMenuHandler","contextMenuHandler_1","AbstractDescriptor","_staticArguments","appendStaticArguments","more","staticArguments","nth","SyncDescriptor","_ctor","moreStaticArguments","allArgs","createSyncDescriptor","AsyncDescriptor","_moduleName","_ctorName","moduleName","ctorName","storeServiceDependency","optional","_util","DI_TARGET","DI_DEPENDENCIES","createDecorator","serviceId","serviceIds","getServiceDependencies","IInstantiationService","serviceIdentifier","getCodeOrDiffEditor","control","getControl","codeEditor","diffEditor","ICodeEditorService","instantiation_1","ID_EDITOR_WORKER_SERVICE","IEditorWorkerService","IModeService","IModelService","ITextModelService","ITextResourceConfigurationService","STOP_SYNC_MODEL_DELTA_TIME_MS","STOP_WORKER_DELTA_TIME_MS","EditorWorkerServiceImpl","modelService","configurationService","_workerManager","WorkerManager","provideLinks","withWorker","client","WordBasedCompletionItemProvider","__param","modelService_1","resourceConfiguration_1","modeService_1","workerManager","_configurationService","provideCompletionItems","_modelService","_editorWorkerClient","_checkStopIdleWorker","onModelRemoved","_checkStopEmptyWorker","getModels","_lastWorkerUsedTime","EditorWorkerClient","EditorModelManager","keepIdleModels","_syncedModels","_syncedModelsLastUsedTime","_proxy","timer","_checkStopModelSync","esureSyncedResources","resources","resourceStr","_beginModelSync","currentTime","_stopModelSync","SynchronousWorkerClient","_instance","_proxyObj","_workerFactory","defaultWorkerFactory_1","_modelManager","_getOrCreateWorker","editorSimpleWorker_1","_getProxy","_getOrCreateModelManager","_withSyncedResources","createWebWorker","MonacoWebWorkerImpl","_foreignModuleId","_foreignModuleCreateData","_foreignProxy","_getForeignProxy","foreignMethods","foreignProxy","getProxy","withSyncedResources","editorWorkerServiceImpl_1","TokenSelectionSupport","getRangesToPosition","getRangesToPositionSync","_doGetRangesToPosition","lastRange","tokenTree_1","IStandaloneThemeService","isCommand","ICommandService","CommandsRegistry","_commands","registerCommand","commandOrDesc","handler_1","constraints_1","commandOrArray","getCommand","getCommands","NullCommandService","_serviceBrand","onWillExecuteCommand","getLinks","newLinks","Link","union","oldLinks","oldLen","newLen","oldLink","newLink","_link","_provider","resolveLink","commands_1","MenuId","EditorTitle","EditorTitleContext","EditorContext","ExplorerContext","ProblemsPanelContext","DebugVariablesContext","DebugWatchContext","DebugCallStackContext","DebugBreakpointsContext","DebugConsoleContext","SCMTitle","SCMResourceGroupContext","SCMResourceContext","CommandPalette","ViewTitle","ViewItemContext","IMenuService","MenuRegistry","_menuItems","addCommand","old","appendMenuItem","getMenuItems","_appendImplicitItems","result_1","ExecuteCommandAction","MenuItemAction","runArgs","shouldForwardArgs","SyncActionDescriptor","keybindingContext","keybindingWeight","_keybindings","_keybindingContext","_keybindingWeight","_descriptor","descriptors_1","getConfigurationValue","settingPath","IConfigurationService","ConfigurationSource","ConfigurationModel","_contents","_keys","_overrides","getContentsFor","override","identifiers","mergedModel","doMerge","overrides","sourceOverride","Configuration","_defaults","_user","_workspaceConfiguration","folders","_workspace","_globalConfiguration","_workspaceConsolidatedConfiguration","_legacyWorkspaceConsolidatedConfiguration","_foldersConsolidatedConfigurations","folder","mergeFolder","configModel","getConsolidateConfigurationModel","consolidateConfigurationModel","folderConfigurationModel","getFolderConfigurationModelForResource","overrideIdentifier","user","workspace","lookupLegacy","lastKey","keyset","keys_1","values2","keys_2","configurationModel","getConsolidatedConfigurationModelForResource","toData","parseConfigurationModel","cmp","aType","bType","ContextKeyExprType","Defined","Not","Equals","NotEquals","ContextKeyExpr","ContextKeyDefinedExpr","ContextKeyEqualsExpr","notEquals","ContextKeyNotEqualsExpr","ContextKeyNotExpr","expr","ContextKeyAndExpr","deserialize","_deserializeOne","serializedOne","_deserializeValue","serializedValue","evaluate","_normalizeArr","And","RawContextKey","bindTo","createKey","getContextKeyValue","toNegated","isEqualTo","IContextKeyService","SET_CONTEXT_COMMAND_ID","EditorContextKeys","textFocus","contextkey_1","hasNonEmptySelection","hasOnlyEmptySelection","hasMultipleSelections","hasSingleSelection","tabMovesFocus","tabDoesNotMoveFocus","isInEmbeddedEditor","hasCompletionItemProvider","hasCodeActionsProvider","hasCodeLensProvider","hasDefinitionProvider","hasImplementationProvider","hasTypeDefinitionProvider","hasHoverProvider","hasDocumentHighlightProvider","hasDocumentSymbolProvider","hasReferenceProvider","hasRenameProvider","hasDocumentFormattingProvider","hasDocumentSelectionFormattingProvider","hasSignatureHelpProvider","EditorModeContext","_langId","editorContextKeys_1","_hasCompletionItemProvider","_hasCodeActionsProvider","_hasCodeLensProvider","_hasDefinitionProvider","_hasImplementationProvider","_hasTypeDefinitionProvider","_hasHoverProvider","_hasDocumentHighlightProvider","_hasDocumentSymbolProvider","_hasReferenceProvider","_hasRenameProvider","_hasDocumentFormattingProvider","_hasDocumentSelectionFormattingProvider","_hasSignatureHelpProvider","_isInWalkThrough","_update","onDidChangeModelLanguage","network_1","startupSignal","_menuGroups","menuItems","keysFilter","_compareMenuItems","menuItems_1","groupName","_fillInKbExprKeys","onDidChangeContext","activeActions","items_1","exp","aGroup","bGroup","aPrio","bPrio","aTitle","bTitle","IContextViewService","IContextMenuService","ContextSubMenu","IEditorService","POSITIONS","ONE","TWO","THREE","Verbosity","IEnvironmentService","IFileService","FileOperation","FileOperationEvent","_resource","_operation","FileChangeType","FileChangesEvent","_changes","DELETED","getAdded","getOfType","ADDED","gotAdded","hasType","getDeleted","gotDeleted","getUpdated","gotUpdated","isParent","FileOperationError","fileOperationResult","FileOperationResult","MAX_FILE_SIZE","AutoSaveConfiguration","OFF","AFTER_DELAY","ON_FOCUS_CHANGE","ON_WINDOW_CHANGE","HotExitConfiguration","ON_EXIT","ON_EXIT_AND_WINDOW_CLOSE","CONTENT_CHANGE_EVENT_BUFFER_DELAY","SUPPORTED_ENCODINGS","utf8","labelLong","labelShort","utf8bom","encodeOnly","utf16le","utf16be","windows1252","iso88591","iso88593","iso885915","macroman","cp437","windows1256","iso88596","windows1257","iso88594","iso885914","windows1250","iso88592","cp852","windows1251","cp866","iso88595","koi8r","koi8u","iso885913","windows1253","iso88597","windows1255","iso88598","iso885910","iso885916","windows1254","iso88599","windows1258","gbk","gb18030","cp950","big5hkscs","shiftjis","eucjp","euckr","windows874","iso885911","koi8ru","koi8t","gb2312","ServiceCollection","entries_1","service","instanceOrDescriptor","InstantiationService","services","serviceCollection_1","_services","_strict","createChild","_createAndCacheServiceInstance","invokeFunction","signature","isOptional","_getOrCreateServiceInstance","createInstance","_createInstanceAsync","_createInstance","canceledError","_module","staticArgs","serviceDependencies","serviceArgs","serviceDependencies_1","dependency","firstServiceArgPos","argArray","throwCycleError","graph","graph_1","dependencies_1","instanceOrDesc","roots_1","AbstractKeybindingService","statusService","_statusService","_messageService","_currentChord","_currentChordStatusMessage","_onDidUpdateKeybindings","getDefaultKeybindingsContent","getDefaultKeybindings","_getResolver","getKeybindings","customKeybindingsCount","lookupKeybindings","commandId","resolvedKeybinding","lookupKeybinding","lookupPrimaryKeybinding","softDispatch","resolveKeyboardEvent","isChord","getDispatchParts","contextValue","currentChord","keypress","_dispatch","shouldPreventDefault","keypressLabel","resolveResult","enterChord","setStatusMessage","commandArgs","KeybindingSource","IKeybindingService","KeybindingResolver","defaultKeybindings","_defaultKeybindings","_defaultBoundCommands","_lookupMap","combine","keypressFirstPart","_addKeyPress","_isTargetedForRemoval","defaultKb","keypressChordPart","rawOverrides","conflicts","_addToLookupMap","conflict","conflictIsChord","itemIsChord","whenIsEntirelyIncluded","_removeFromLookupMap","inNormalizedForm","aRulesArr","bRulesArr","aRules","getDefaultBoundCommands","lookupMap","candidates","_findCommand","getAllUnboundCommands","boundCommands","unboundCommands","findContextAttr","KEYBINDING_CONTEXT_ATTR","Context","removeValue","ConfigAwareContextValuesContainer","_subscription","onDidUpdateConfiguration","_updateConfigurationContext","configKey","ContextKey","_key","setContext","removeContext","AbstractContextKeyService","myContextId","_myContextId","_onDidChangeContextKey","_onDidChangeContext","createScoped","ScopedContextKeyService","getContextValuesContainer","keybindingResolver_1","ContextKeyService","_lastContextId","myContext","contextId","createChildContext","parentContextId","disposeContext","configuration_1","contextKey","ResolvedKeybindingItem","isDefault","USLayoutResolvedKeybinding","_os","_firstPart","_chordPart","_keyCodeToUILabel","_getUILabelForKeybinding","_getAriaLabelForKeybinding","_keyCodeToElectronAccelerator","_getElectronAcceleratorLabelForKeybinding","getElectronAccelerator","_getUserSettingsLabelForKeybinding","getUserSettingsLabel","isWYSIWYG","_toResolvedKeybindingPart","getDispatchStr","MapMap","key1","key2","MarkerStats","infos","warnings","unknowns","_service","onMarkerChanged","resources_1","oldStats","_substract","newStats","_resourceStats","_add","MarkerService","_onMarkerChanged","_onMarkerChangedEvent","_debouncer","_byResource","_byOwner","getStatistics","resources_2","changeOne","markerData","markerData_1","_toMarker","changeAll","take","_dedupeMap","IMarkerService","CloseAction","LaterAction","CancelAction","IMessageService","IChoiceService","OpenerService","_editorService","marshalling_1","openEditor","openToSide","editor_1","IOpenerService","NullOpenerService","MarginComputer","setLineNumber","clearResult","toHoverMessage","isFromSynchronousComputation","ModesGlyphHoverWidget","openerService","opener_1","_lastLineNumber","_hoverOperation","hoverOperation_1","_withResult","startShowingAt","_messages","_renderMessages","createDocumentFragment","renderedContents","languageAlias","hoverWidgets_1","IProgressService","emptyProgress","report","Progress","_callback","ProgressLocation","IProgressService2","RegistryImpl","knows","Registry","BaseRegistry","toBeInstantiated","instances","setInstantiationService","instantiationService","instantiate","_getInstances","_setInstances","editorContribution","EditorContributionRegistry","registerEditorBrowserContribution","EditorBrowserRegistry","getEditorContributions","getEditorBrowserContributions","Extensions","EditorContributions","editorContributions","ModesRegistry","EditorModesRegistry","_onDidAddLanguages","onDidAddLanguages","_languages","registerLanguage","registerLanguages","getLanguages","PLAINTEXT_MODE_ID","PLAINTEXT_LANGUAGE_IDENTIFIER","extensions","aliases","mimetypes","ModelData","eventsHandler","_markerDecorations","_modelEventsListener","getModelId","acceptMarkerDecorations","ModelMarkerHandler","setMarkers","modelData","markerService","newModelDecorations","_createDecorationRange","_createDecorationOption","rawMarker","DEFAULT_EOL","ModelServiceImpl","_markerService","_modelCreationOptionsByLanguage","_onModelAdded","_onModelRemoved","_onModelModeChanged","_markerServiceSubscription","_handleMarkerChange","_configurationServiceSubscription","_updateModelOptions","_readModelOptions","parsedTabSize","newDefaultEOL","getCreationOptions","oldOptionsByLanguage","modelId","oldOptions","_setModelOptionsForModel","currentOptions","changedResources","_cleanUp","network","_createModelData","model_1","updateModel","createModel","modeOrPromise","modesRegistry_1","destroyModel","_onModelDisposing","oldModeId","newModeId","markers_1","DragAndDropController","DragAndDropController_1","_toUnhook","_onEditorMouseDown","_onEditorMouseUp","_onEditorMouseDrag","onMouseDrop","_onEditorMouseDrop","_dndDecorationIds","_mouseDown","_modiferPressed","_dragSelection","getContribution","TRIGGER_MODIFIER","TRIGGER_KEY_VALUE","possibleSelections","_removeDecoration","_hitContent","_hitMargin","newCursorPosition_1","dragAndDropCommand_1","_DECORATION_OPTIONS","CONTENT_TEXT","CONTENT_EMPTY","GUTTER_LINE_NUMBERS","GUTTER_LINE_DECORATIONS","editorBrowserExtensions_1","IPadShowKeyboard","IPadShowKeyboard_1","hasWidget","shouldHaveWidget","ShowKeyboardWidget","normalizeId","JSONContribution","jsonContributionRegistry","JSONContributionRegistry","schemasById","addRegistryChangedListener","registerSchema","unresolvedSchemaContent","getSchemaContributions","schemas","getDefaultValue","validateProperty","OVERRIDE_PROPERTY_PATTERN","configurationRegistry","getConfigurationProperties","ConfigurationScope","schemaId","editorConfigurationSchemaId","contributionRegistry","jsonContributionRegistry_1","ConfigurationRegistry","overrideIdentifiers","configurationContributors","configurationSchema","patternProperties","additionalProperties","errorMessage","editorConfigurationSchema","_onDidRegisterConfiguration","configurationProperties","computeOverridePropertyPattern","registerConfiguration","registerConfigurations","configurations","validateAndRegisterProperties","registerJSONConfiguration","updateSchemaForOverrideSettingsConfiguration","registerOverrideIdentifiers","updateOverridePropertyPatternKey","registerDefaultConfigurations","defaultConfigurations","configurationNode","defaultConfigurations_1","defaultConfiguration","$ref","overridable","WORKSPACE","subNodes","allOf","subNodes_1","getConfigurations","SETTINGS_OVERRRIDE_NODE_ID","overridePropertyPattern","overridePropertiesSchema","subNode","OVERRIDE_PATTERN_WITH_SUBSTITUTION","OVERRIDE_PROPERTY","editorOptions","TabFocus","_tabFocus","_onDidChangeTabFocus","onDidChangeTabFocus","getTabFocusMode","setTabFocusMode","CommonEditorConfiguration","_rawOptions","_validatedOptions","_isDominatedByLongLines","_lineNumbersDigitCount","_recomputeOptions","_computeInternalOptions","getRawOptions","partialEnv","_getEnvConfiguration","fontInfo_1","readConfiguration","setIsDominatedByLongLines","_digitCount","configurationRegistry_1","editorConfiguration","FOLDER","editor.fontFamily","editor.fontWeight","enum","editor.fontSize","editor.lineHeight","editor.letterSpacing","editor.lineNumbers","editor.rulers","editor.wordSeparators","editor.tabSize","editor.insertSpaces","editor.detectIndentation","editor.roundedSelection","editor.scrollBeyondLastLine","editor.minimap.enabled","editor.minimap.showSlider","editor.minimap.renderCharacters","editor.minimap.maxColumn","editor.find.seedSearchStringFromSelection","editor.find.autoFindInSelection","editor.wordWrap","enumDescriptions","editor.wordWrapColumn","editor.wrappingIndent","editor.mouseWheelScrollSensitivity","editor.multiCursorModifier","editor.quickSuggestions","anyOf","editor.quickSuggestionsDelay","editor.parameterHints","editor.autoClosingBrackets","editor.formatOnType","editor.formatOnPaste","editor.autoIndent","editor.suggestOnTriggerCharacters","editor.acceptSuggestionOnEnter","editor.acceptSuggestionOnCommitCharacter","editor.snippetSuggestions","editor.emptySelectionClipboard","editor.wordBasedSuggestions","editor.suggestFontSize","editor.suggestLineHeight","editor.selectionHighlight","editor.occurrencesHighlight","editor.overviewRulerLanes","editor.overviewRulerBorder","editor.cursorBlinking","editor.mouseWheelZoom","editor.cursorStyle","editor.fontLigatures","editor.hideCursorInOverviewRuler","editor.renderWhitespace","editor.renderControlCharacters","editor.renderIndentGuides","editor.renderLineHighlight","editor.codeLens","editor.folding","editor.showFoldingControls","editor.matchBrackets","editor.glyphMargin","editor.useTabStops","editor.trimAutoWhitespace","editor.stablePeek","editor.dragAndDrop","editor.accessibilitySupport","editor.links","diffEditor.renderSideBySide","diffEditor.ignoreTrimWhitespace","diffEditor.renderIndicators","LanguagesRegistry","useModesRegistry","_nextLanguageId","_mimeTypesMap","_nameMap","_lowercaseNameMap","_languageIds","_registerLanguages","_registerLanguage","mimetype","resolvedLanguage","filenames","configurationFiles","_mergeLanguage","primaryMime","filenamePatterns","filenamePattern","firstLineRegexStr","firstLineRegex","langAliases","containsAliases","bestName","getRegisteredModes","getRegisteredLanguageNames","getLanguageName","getModeIdForLanguageNameLowercase","languageNameLower","getConfigurationFiles","getMimeForMode","extractModeIds","commaSeparatedMimetypesOrCommaSeparatedIds","mimeTypeOrId","getModeIdsFromLanguageName","languageName","getModeIdsFromFilenameOrFirstLine","mimeTypes","getExtensions","getFilenames","ModeServiceImpl","_onDidCreateMode","onDidCreateMode","_instantiatedModes","_registry","languagesRegistry_1","_onReady","getModeIdByFilenameOrFirstLine","modeIds","isInstantiated","isPlainText","_getOrCreateMode","getOrCreateModeByLanguageName","_getModeIdByLanguageName","getOrCreateModeByFilenameOrFirstLine","abstractMode_1","getDefaultValues","valueTreeRoot","addToValueTree","toValuesTree","conflictReporter","settingsTreeRoot","curr","getConfigurationKeys","overrideIdentifierFromKey","DefaultConfigurationModel","CustomConfigurationModel","_parseErrors","onOverrideSettingsValue","parsed","parseErrors","processRaw","keyFromOverrideIdentifier","weight1","weight2","KeybindingsRegistryImpl","WEIGHT","editorCore","importance","editorContrib","workbenchContrib","builtinExtension","externalExtension","bindToCurrentPlatform","kb","bindToCurrentPlatform2","registerKeybindingRule","actualKb","registerDefaultKeybinding","weight","secondary","registerKeybindingRule2","registerCommandAndKeybindingRule","_mightProduceChar","_assertNoCtrlAlt","KeybindingsRegistry","EditorModes","platform_2","SimpleEditor","withTypedEditor","codeEditorCallback","diffEditorCallback","SimpleModel","SimpleEditorService","openEditorDelegate","setEditor","setOpenEditorDelegate","typedData","sideBySide","doOpenEditor","getOriginalEditor","findModel","schema","revealRangeInCenter","SimpleEditorModelResolverService","registerTextModelContentProvider","SimpleProgressService","NULL_PROGRESS_RUNNER","showWhile","SimpleMessageService","sev","Empty","hideAll","confirm","confirmation","messageText","StandaloneCommandService","_onWillExecuteCommand","_instantiationService","_dynamicCommands","StandaloneKeybindingService","_cachedResolver","_dynamicKeybindings","keyEvent","addDynamicKeybinding","updateResolver","keybinding_1","Default","_toNormalizedKeybindingItems","keybindingsRegistry_1","resolvedKeybindings","resolveKeybinding","resolvedKeybindingItem_1","usLayoutResolvedKeybinding_1","resolveUserBinding","userBinding","abstractKeybindingService_1","SimpleConfigurationService","_onDidUpdateConfiguration","reloadConfiguration","getConfigurationData","SimpleResourceConfigurationService","_onDidUpdateConfigurationEmitter","SimpleMenuService","createMenu","StandaloneTelemetryService","isOptedIn","eventName","getTelemetryInfo","getExperiments","SimpleWorkspaceContextService","_onDidChangeWorkspaceRoots","onDidChangeWorkspaceRoots","legacyWorkspace","SCHEME","getWorkspace","hasWorkspace","isInsideWorkspace","toWorkspaceRelativePath","toResource","workspaceRelativePath","IStorageService","StorageScope","NullStorageService","store","swap","getInteger","getBoolean","CSSBasedConfigurationCache","put","getKeys","getValues","readFontInfo","CSSBasedConfiguration","restoreFontInfo","storageService","strStoredFontInfo","storage_1","GLOBAL","storedFontInfo","saveFontInfo","knownFontInfo","_evictUntrustedReadingsTimeout","_writeToCache","_evictUntrustedReadings","somethingRemoved","savedFontInfo","readConfig","_actualReadConfiguration","createRequest","monospace","charWidthReader_1","typicalHalfwidthCharacter","typicalFullwidthCharacter","digit0","digit1","digit2","digit3","digit4","digit5","digit6","digit7","digit8","digit9","referenceWidth","canTrustBrowserZoomLevel","_elementSizeObserver","elementSizeObserver_1","_onReferenceDomElementSizeChanged","_onCSSBasedConfigurationChanged","applyFontInfoSlow","observeReferenceElement","_getExtraEditorClassName","extra","commonEditorConfig_1","ViewOverlays","_visibleLines","viewLayer_1","_dynamicOverlays","_isFocused","ViewOverlayLine","addDynamicOverlay","overlay","dynamicOverlay","_viewOverlaysRender","dynamicOverlays","_renderedContent","ContentViewOverlays","MarginViewOverlays","ViewCursorRenderData","ViewCursor","isSecondary","_isSecondary","_cursorStyle","_isInEditableRange","_lastRenderedContent","getIsInEditableRange","onCursorPositionChanged","_prepareRender","visibleRangeForCharacter","ITelemetryService","findFocusedEditor","codeEditorService_1","getWorkbenchActiveEditor","editorService","activeEditor","getActiveEditor","registerEditorCommand","editorCommand","CommonEditorRegistry","Command","_kbOpts","kbOpts","_description","toCommandAndKeybindingRule","defaultWeight","kbWhen","kbExpr","runCommand","EditorCommand","bindToContribution","controllerGetter","EditorControllerCommandImpl","runEditorCommand","invokeWithinContext","editorAccessor","EditorAction","menuOpts","toMenuItem","reportTelemetry","telemetry_1","getTelemetryData","editorAction","registerEditorAction","commonEditorContribution","registerEditorContribution","registerLanguageCommand","getEditorActions","getEditorCommand","commandWeight","registerDefaultLanguageCommand","editorPosition","EditorCommonContributions","editorActions","editorCommands","menuItem","EDITOR_ID","CommonCodeEditor","_onDidDispose","_onDidChangeModelContent","_onDidChangeModelLanguage","_onDidChangeModelOptions","onDidChangeModelOptions","_onDidChangeModelDecorations","onDidChangeModelDecorations","_onDidChangeConfiguration","_onDidChangeModel","_onDidChangeCursorPosition","_onDidChangeCursorSelection","_onDidLayoutChange","_onDidFocusEditorText","onDidFocusEditorText","_onDidBlurEditorText","onDidBlurEditorText","_onDidFocusEditor","onDidFocusEditor","_onDidBlurEditor","onDidBlurEditor","_onWillType","onWillType","_onDidType","onDidType","_onDidPaste","onDidPaste","_decorationTypeKeysToIds","_decorationTypeSubtypes","_createConfiguration","EditorContextKeysManager","editorModeContext_1","_attachModel","_contributions","_actions","contributionId","_postDetachModelCleanup","_detachModel","getRawConfiguration","eolPreference","detachedModel","oldModelUrl","newModelUrl","hasView","getVisibleColumnFromPosition","revealVerticalInCenter","_sendRevealRange","validatedModelRange","_revealLine","revealLineInCenter","revealLineInCenterIfOutsideViewport","revealType","_revealPosition","revealPositionInCenterIfOutsideViewport","something","isSelection","isRange","_setSelectionImpl","revealLines","_revealLines","revealLinesInCenter","revealLinesInCenterIfOutsideViewport","revealRangeAtTop","setScrollLeft","newScrollLeft","newScrollTop","saveViewState","contributionsState","restoreViewState","codeEditorState","getSupportedActions","editorCommonExtensions_1","_getCursors","_getCursorConfiguration","executeEdits","endCursorState","setDecorations","decorationTypeKey","newDecorationsSubTypes","oldDecorationsSubTypes","decorationOptions_1","decorationOption","typeKey","subType","hash_1","_registerDecorationType","_resolveDecorationOptions","_removeDecorationType","removeDecorations","listenersToRemove","viewModelImpl_1","cursor_1","_createView","positions","secondaryPositions","secondarySelections","decorationType","subTypes","_editorId","_editorFocus","_editorTextFocus","_editorTabMovesFocus","_editorReadonly","_hasMultipleSelections","_hasNonEmptySelection","_updateFromConfig","_updateFromSelection","_updateFromFocus","CORE_WEIGHT","CoreEditorCommand","runCoreEditorCommand","EditorScroll_","scrollArg","revealCursor","Page","HalfPage","RevealLine_","reveaLineArg","RawAtArgument","Top","Bottom","CoreNavigationCommands","BaseMoveToCommand","_inSelectionMode","cursorMoveCommands_1","MoveTo","MoveToSelect","ColumnSelectCommand","_getColumnSelectResult","ColumnSelect","prevColumnSelectData","validatedViewPosition","validatedPosition","cursorColumnSelection_1","mouseColumn","CursorColumnSelectLeft","CursorColumnSelectRight","ColumnSelectUpCommand","_isPaged","CursorColumnSelectUp","CursorColumnSelectPageUp","ColumnSelectDownCommand","CursorColumnSelectDown","CursorColumnSelectPageDown","CursorMoveImpl","_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","newStates","HomeCommand","CursorHome","CursorHomeSelect","CursorLineStart","class_6","_exec","EndCommand","CursorEnd","CursorEndSelect","CursorLineEnd","class_7","TopCommand","CursorTop","CursorTopSelect","BottomCommand","CursorBottom","CursorBottomSelect","EditorScrollImpl","_runEditorScroll","_computeDesiredScrollTop","desiredVisibleViewRange","desiredTopModelLineNumber","desiredTopViewPosition","noOfLines","deltaLines","EditorScroll","ScrollLineUp","class_8","ScrollPageUp","class_9","ScrollLineDown","class_10","ScrollPageDown","class_11","WordCommand","WordSelect","WordSelectDrag","LastCursorWordSelect","class_12","LineCommand","LineSelect","LineSelectDrag","LastCursorLineCommand","LastCursorLineSelect","LastCursorLineSelectDrag","ExpandLineSelection","class_13","CancelSelection","class_14","RemoveSecondaryCursors","class_15","RevealLine","class_16","revealLineArg","revealAt","SelectAll","class_17","CoreEditingCommands","LineBreakInsert","class_18","class_19","Tab","class_20","DeleteLeft","class_21","DeleteRight","class_22","Config","registerOverwritableCommand","EditorHandlerCommand","EditorOrNativeTextInputCommand","_editorHandler","editorHandler","_inputHandler","inputHandler","focusedEditor","_runEditorHandler","execCommand","HANDLER","_handlerId","ViewController","execCommandFunc","outgoingEvents","_execCoreEditorCommandFunc","_execMouseCommand","compositionStart","compositionEnd","_validateViewColumn","_hasMulticursorModifier","_hasNonMulticursorModifier","dispatchMouse","startedOnLineNumbers","lastCursorLineSelect","createCursor","lineSelectDrag","lineSelect","mouseDownCount","lastCursorLineSelectDrag","lastCursorWordSelect","wordSelectDrag","wordSelect","lastCursorMoveToSelect","moveToSelect","_usualArgs","convertViewToModelPosition","coreCommands_1","emitKeyDown","emitKeyUp","emitContextMenu","emitMouseMove","emitMouseLeave","emitMouseUp","emitMouseDown","emitMouseDrag","emitMouseDrop","MoveCaretAction","moveCaretCommand_1","MoveCaretLeftAction","MoveCaretRightAction","TransposeLettersAction","charToTheLeft","charToTheRight","replaceRange","conditionalEditorAction","CLIPBOARD_CONTEXT_MENU_GROUP","supportsCut","queryCommandSupported","supportsCopy","supportsCopyWithSyntaxHighlighting","supportsPaste","ExecCommandAction","browserCommand","ExecCommandCutAction","ExecCommandCopyAction","ExecCommandPasteAction","ExecCommandCopyWithSyntaxHighlightingAction","textAreaInput_1","getCodeLensData","symbols","provideCodeLenses","symbol","CommentLineAction","lineCommentCommand_1","ToggleCommentLineAction","AddLineCommentAction","RemoveLineCommentAction","BlockCommentAction","ContextMenuController","ContextMenuController_1","_contextViewService","_keybindingService","_menuService","_contextMenuIsBeingShownCount","OVERLAY_WIDGET","TEXTAREA","forcedPosition","menuActions","_getMenuActions","_doShowContextMenu","contextMenu","oldHoverSetting","menuPosition","_keybindingFor","customActionItem","getKeyBinding","wasCancelled","contextView_1","ShowContextMenu","thisLen","CursorUndoController","CursorUndoController_1","_isCursorUndo","_undoStack","_prevState","_readState","cursorUndo","currState","prevState","CursorUndo","multiCursorFind","CommonFindController","searchText","allowMultiline","changeFindSearchString","setSearchString","FindStartFocusAction","CONTEXT_FIND_WIDGET_VISIBLE","CONTEXT_FIND_WIDGET_NOT_VISIBLE","CONTEXT_FIND_INPUT_FOCUSSED","_findWidgetVisible","_storageService","_updateHistoryDelayer","_currentHistoryNavigator","findState_1","loadQueryState","shouldRestartFind","disposeModel","_start","forceRevealReplace","shouldFocus","shouldAnimate","saveQueryState","_delayedUpdateHistory","_updateHistory","getHistory","closeFindWidget","toggleCaseSensitive","toggleWholeWords","toggleRegex","toggleSearchScope","getSelectionSearchString","stateChanges","selectionSearchString","findModel_1","showPreviousFindTerm","previousTerm","showNextFindTerm","nextTerm","MatchFindAction","SelectionMatchFindAction","currentSelection","SelectNextFindMatchAction","allSelections","lastAddedSelection","SelectPreviousFindMatchAction","_getPreviousMatch","previousMatch","selectionsContainSameText","thisSelectedText","resultingSelections","AbstractSelectHighlightsAction","findState","SelectHighlightsAction","CompatChangeAll","SelectionHighlighterState","lastWordUnderCursor","softEquals","SelectionHighlighter","SelectionHighlighter_1","_isEnabled","updateSoon","_createState","hasFindOccurrences","firstSelectedText","allMatches","_SELECTION_HIGHLIGHT","_SELECTION_HIGHLIGHT_OVERVIEW","FindCommand","foldingArgumentsConstraint","foldingArgs","FoldingController","FoldingController_1","_showFoldingControls","globalToDispose","localToDispose","computeToken","onModelChanged","oldIsEnabled","oldShowFoldingControls","updateHideFoldIconClass","folding_1","cleanState","collapsedRegions","applyRegions","regions","updateHiddenRegions","indentFoldStrategy_1","MAX_FOLDING_REGIONS","foldingModel_1","currRange","updateHiddenAreas","computeAndApplyCollapsibleRegions","contentChangedScheduler","cursorChangedScheduler","disposeDecorations","mouseDownInfo","iconClicked","focusLine","updateSelections","unfold","selectionsHasChanged","toUnfold","fold","foldUnfoldRecursively","isFold","decToFoldUnfold","foldAll","unfoldAll","hasChanges_1","foldLevel","selectedLineNumbers","foldingRegionStack","FoldingAction","foldingController","UnfoldAction","UnFoldRecursivelyAction","FoldAction","FoldRecursivelyAction","FoldAllAction","UnfoldAllAction","FoldLevelAction","getFoldingLevel","ID_PREFIX","getSelectedLines","getDocumentRangeFormattingEdits","providers","provideDocumentRangeFormattingEdits","getDocumentFormattingEdits","provideDocumentFormattingEdits","getOnTypeFormattingEdits","autoFormatTriggerCharacters","provideOnTypeFormattingEdits","alertFormattingEdits","aria_1","FormatOnType","FormatOnType_1","workerService","callOnDispose","callOnModel","triggerChars","lastCharCode","modelOpts","format_1","formatCommand_1","editorWorkerService_1","FormatOnPaste","FormatOnPaste_1","editorState_1","AbstractFormatAction","formattingPromise","_getFormattingEdits","FormatDocumentAction","FormatSelectionAction","outputResults","allReferences","allReferences_1","getDefinitions","provide","getDefinitionsAtPosition","provideDefinition","getImplementationsAtPosition","provideImplementation","getTypeDefinitionsAtPosition","provideTypeDefinition","getHover","provideHover","hasRange","hasHtmlContent","ModesContentComputer","hover_1","hasHoverContent","_getLoadingMessage","ModesContentHoverWidget","_highlightDecorations","_isChangingDecorations","_openerService","filteredMessages","_shouldFocus","renderColumn","highlightRange","AbstractCopyLinesAction","copyLinesCommand_1","CopyLinesUpAction","CopyLinesDownAction","AbstractMoveLinesAction","moveLinesCommand_1","MoveLinesUpAction","MoveLinesDownAction","AbstractSortLinesAction","sortLinesCommand_1","SortLinesAscendingAction","SortLinesDescendingAction","TrimTrailingWhitespaceAction","TrimTrailingWhitespaceAction_1","trimTrailingWhitespaceCommand_1","DeleteLinesAction","_getLinesToRemove","deleteLinesCommand_1","AbstractRemoveLinesAction","mergedOperations","previousOperation","IndentLinesAction","OutdentLinesAction","InsertLineBeforeAction","InsertLineAfterAction","AbstractDeleteAllToBoundaryAction","rangesToDelete","_getRangesToDelete","effectiveRanges","nextRange","_getEndCursorState","DeleteAllLeftAction","endPrimaryCursor","endCursor","DeleteAllRightAction","JoinLinesAction","reducedSelections","lastSelection","lineOffset","selectionEndPositionOffset","trimmedLinesContent","firstNonWhitespaceIdx","insertSpace","lineTextWithoutIndent","resultSelection","TransposeAction","chars","AbstractCaseAction","_modifyText","UpperCaseAction","toLocaleUpperCase","LowerCaseAction","toLocaleLowerCase","InsertCursorAbove","InsertCursorBelow","InsertCursorAtEndOfEachLineSelected","getCursorsForSelection","currentLineMaxColumn","provideSignatureHelp","supports","thisResult","MultipleSignatures","getCodeActions","allResults","provideCodeActions","QuickFixOracle","_signalChange","_onMarkerChanges","_onCursorChange","_rangeAtPosition","quickFix_1","_currentRange","_markerAtPosition","_wordAtPosition","QuickFixModel","_onDidChangeFixes","_quickFixOracle","QuickFixController","QuickFixController_1","quickFixModel_1","_quickFixContextMenu","quickFixWidget_1","_lightBulbWidget","lightBulbWidget_1","_updateLightBulbTitle","_handleLightBulbSelect","onDidChangeFixes","_onQuickFixEvent","onDidUpdateKeybindings","coords","triggerFromEditorSelection","QuickFixAction","Id","QuickFixAction_1","getDocumentSymbols","provideDocumentSymbols","flatEntries","compareEntriesUsingStart","overrideContainerLabel","containerName","ignoreSelection","SmartSelectController","SmartSelectController_1","_tokenSelectionSupport","tokenSelectionSupport_1","forward","lastState","editorState","AbstractSmartSelect","_forward","GrowSelectionAction","ShrinkSelectionAction","SnippetController2","SnippetController2_1","_snippetListener","_inSnippet","InSnippetMode","_hasNextTabstop","HasNextTabstop","_hasPrevTabstop","HasPrevTabstop","_session","undoStopBefore","undoStopAfter","_modelVersionId","snippetSession_1","_updateState","CommandCtor","ctrl","provideSuggestionItems","onlyFrom","allSuggestions","acceptSuggestion","createSuggesionFilter","_snippetSuggestSupport","hasResult","fixOverwriteBeforeAfter","createSuggestionResolver","getSuggestionComparator","resolveCompletionItem","defaultComparator","sortText","snippetUpComparator","snippetDownComparator","MultipleSuggestions","MakesTextEdit","AcceptOnKey","AcceptSuggestionsOnEnter","setSnippetSuggestSupport","auto","leadingWord","shouldAutoTrigger","SuggestModel","triggerRefilter","_onDidCancel","_onDidTrigger","_onDidSuggest","triggerAutoSuggestPromise","requestPromise","completionModel","currentPosition","updateTriggerCharacters","updateQuickSuggest","updateActiveSuggestSession","onCursorChange","triggerCharacterListener","quickSuggestDelay","supportsByTriggerCharacter","triggerCharacters","retrigger","prevPosition","onNewContext","existingItems","suggest_1","cmpFn","completionModel_1","oldLineContext","isFrozen","ToggleTabFocusModeAction","ToggleTabFocusModeAction_1","MoveWordCommand","_wordNavigationType","inPosition","outPosition","_moveTo","WordLeftCommand","WordRightCommand","CursorWordStartLeft","CursorWordEndLeft","CursorWordLeft","CursorWordStartLeftSelect","CursorWordEndLeftSelect","CursorWordLeftSelect","CursorWordStartRight","CursorWordEndRight","CursorWordRight","CursorWordStartRightSelect","CursorWordEndRightSelect","CursorWordRightSelect","DeleteWordCommand","_whitespaceHeuristics","deleteRange","_delete","DeleteWordLeftCommand","DeleteWordRightCommand","DeleteWordStartLeft","DeleteWordEndLeft","DeleteWordLeft","DeleteWordStartRight","DeleteWordEndRight","DeleteWordRight","ToggleHighContrast","_originalThemeName","standaloneThemeService_1","themeName","ContextViewService","contextView","message_1","registerColor","colorRegistry","colorValue","resolveColorValue","lessProminent","backgroundColorValue","transparency","ColorContribution","colorPatternErrorMessage","ColorRegistry","colorSchema","colorsById","colorContribution","patternErrorMessage","getColors","resolveDefaultColor","colorDesc","getColorSchema","cat1","cat2","dark","light","hc","errorForeground","descriptionForeground","focusBorder","contrastBorder","activeContrastBorder","selectionBackground","textSeparatorForeground","textLinkForeground","textLinkActiveForeground","textPreformatForeground","textBlockQuoteBackground","textBlockQuoteBorder","textCodeBlockBackground","inputPlaceholderForeground","listHighlightForeground","buttonForeground","buttonBackground","buttonHoverBackground","scrollbarShadow","scrollbarSliderBackground","scrollbarSliderHoverBackground","scrollbarSliderActiveBackground","editorBackground","editorForeground","editorWidgetBackground","editorWidgetBorder","editorSelectionBackground","editorSelectionForeground","editorInactiveSelection","editorSelectionHighlight","editorFindMatch","editorFindMatchHighlight","editorFindRangeHighlight","editorHoverHighlight","editorHoverBackground","editorHoverBorder","editorActiveLinkForeground","defaultInsertColor","defaultRemoveColor","diffInserted","diffRemoved","diffInsertedOutline","diffRemovedOutline","currentBaseColor","incomingBaseColor","commonBaseColor","mergeCurrentHeaderBackground","mergeCurrentContentBackground","mergeIncomingHeaderBackground","mergeIncomingContentBackground","mergeCommonHeaderBackground","mergeCommonContentBackground","mergeBorder","overviewRulerCurrentContentForeground","overviewRulerIncomingContentForeground","overviewRulerCommonContentForeground","oneOf","colorValues","colorValues_1","attachStyler","optionsMapping","widgetOrCallback","onThemeChange","attachCheckboxStyler","inputActiveOptionBorderColor","colorRegistry_1","attachBadgeStyler","attachInputBoxStyler","attachSelectBoxStyler","attachFindInputBoxStyler","attachQuickOpenStyler","attachListStyler","attachButtonStyler","buttonBorder","attachProgressBarStyler","attachStylerCallback","colors","QuickOpenEditorWidget","quickOpenWidget","quickOpenWidget_1","inputAriaLabel","styler","styler_1","layoutOverlayWidget","IThemeService","DARK","LIGHT","HIGH_CONTRAST","getThemeTypeSelector","ThemingContribution","themingRegistry","ThemingRegistry","themingParticipants","onThemingParticipantAddedEmitter","participant","getThemingParticipants","registerThemingParticipant","cssRule","literals","CodeEditorServiceImpl","styleSheet","_styleSheet","_decorationOptionProviders","_themeService","registerDecorationType","parentTypeKey","providerArgs","DecorationSubTypeOptionsProvider","DecorationTypeOptionsProvider","refCount","removeDecorationType","ed","resolveDecorationOptions","abstractCodeEditorService_1","themeService_1","ModelDecorationCSSRuleType","_parentTypeKey","_beforeContentRules","DecorationCSSRules","_afterContentRules","codeEditorService","createCSSRules","hasContent","rangeBehavior","lightOverviewRulerColor","overviewRulerColor","darkOverviewRulerColor","overviewRulerLane","_CSS_MAP","outline","outlineColor","outlineStyle","outlineWidth","borderRadius","borderSpacing","gutterIconPath","gutterIconSize","contentText","contentIconPath","ruleType","_ruleType","_providerArgs","_usesThemeColors","_hasContent","CSSNameHelper","getClassName","_unThemedSelector","getSelector","_buildCSS","_themeListener","_removeCSS","unthemedCSS","lightCSS","darkCSS","getCSSTextForModelDecorationClassName","getCSSTextForModelDecorationInlineClassName","getCSSTextForModelDecorationGlyphMarginClassName","getCSSTextForModelDecorationContentClassName","cssTextArr","collectCSSText","collectBorderSettingsCSSText","lenBefore","properties_1","resolveValue","parentKey","EditorScrollbar","overflowGuardDomNode","configScrollbarOpts","scrollbarOptions","scrollbarDomNode","_setLayout","onBrowserDesperateReveal","lookAtScrollTop","lookAtScrollLeft","newScrollPosition","deltaLeft","createWebKitRenderedLine","renderLineInput","WebKitRenderedViewLine","createNormalRenderedLine","RenderedViewLine","canUseFastRenderedViewLine","alwaysRenderInlineSelection","DomReadingContext","_clientRectDeltaLeft","_clientRectDeltaLeftRead","ViewLineOptions","themeType","ViewLine","_isMaybeInvalid","_renderedViewLine","onOptionsChanged","onSelectionChanged","actualInlineDecorations","renderedViewLine","isRegularASCII","FastRenderedViewLine","createRenderedLine","getVisibleRangesForRange","getColumnOfNodeOffset","spanNode","_characterMapping","_charWidth","_charOffset","_createCharOffset","partLengths","currentPartIndex","currentPartOffset","_getOrCreateCharOffset","_getCharPosition","spanNodeTextContentLength","spanIndex","_isWhitespaceOnly","_containsForeignElements","_cachedWidth","_pixelOffsetCache","_getReadingTarget","_readPixelOffset","_readVisibleRangesForRange","pixelOffset","_readRawVisibleRangesForRange","cachedPixelOffset","_actualReadPixelOffset","rangeUtil_1","startPartData","startPartIndex","startCharOffsetInPart","endPartData","endPartIndex","endCharOffsetInPart","beforeEndPixelOffset","endPixelOffset","MouseTarget","_typeToString","GUTTER_VIEW_ZONE","CONTENT_VIEW_ZONE","CONTENT_WIDGET","OVERVIEW_RULER","SCROLLBAR","ElementPath","isTextArea","isChildOfViewLines","isChildOfScrollableElement","isChildOfMinimap","isChildOfContentWidgets","isChildOfOverflowingContentWidgets","isChildOfOverlayWidgets","HitTestContext","viewHelper","lastViewCursorsRenderData","_viewHelper","getZoneAtCoord","mouseVerticalOffset","viewZoneWhitespace","viewZoneMiddle","positionBefore","positionAfter","viewZoneId","getFullLineRangeAtCoord","lineNumber_1","maxLineColumn_1","findAttribute","_findAttribute","getLineWidth","visibleRangeForPosition2","getPositionFromDOMInfo","HitTestRequest","_ctx","targetPath","mouseContentHorizontalOffset","outerHTML","withTarget","isInMarginArea","isInContentArea","MouseTargetFactory","_getMouseColumn","mouseTargetIsWidget","createMouseTarget","_createMouseTarget","UNKNOWN","domHitTestExecuted","hitTestResult","_doHitTest","createMouseTargetFromHitTestPosition","hitTarget","_hitTestContentWidget","_hitTestOverlayWidget","_hitTestMinimap","_hitTestScrollbarSlider","_hitTestViewZone","_hitTestMargin","_hitTestViewCursor","_hitTestTextArea","_hitTestViewLines","_hitTestScrollbar","cursorVerticalOffset","viewZoneData","mouseTargetType","possibleLineNumber","getMouseColumn","lineWidth","columnHorizontalOffset","mouseIsBetween","prevColumnHorizontalOffset","nextColumnVisibleRange","nextColumnHorizontalOffset","_doHitTestWithCaretRangeFromPoint","lineCenteredVerticalOffset","adjustedPageY","adjustedPage","editorDom_1","_actualDoHitTestWithCaretRangeFromPoint","caretRangeFromPoint","startContainer","TEXT_NODE","parent3","parent2","parent1","viewLine_1","_doHitTestWithCaretPositionFromPoint","hitResult","caretPositionFromPoint","offsetNode","_doHitTestWithMoveToPoint","resultPosition","resultHitTarget","textRange","createTextRange","moveToPoint","rangeToContainEntireSpan","duplicate","moveToElementText","setEndPoint","createMouseMoveEventMerger","mouseTargetFactory","targetIsWidget","MouseHandler","viewController","mouseTarget_1","_mouseDownOperation","MouseDownOperation","testEventTarget","_asyncFocus","lastMouseLeaveTime","mouseEvents","_onMouseMove","MOUSE_MOVE_MINIMUM_TIME","_onMouseUp","_onMouseLeave","getTargetAtClientPoint","getLastViewCursorsRenderData","isActive","targetIsContent","targetIsGutter","targetIsLineNumbers","targetIsViewZone","shouldHandle","_viewController","_onScrollTimeout","_mouseState","MouseDownState","_currentSelection","_isActive","_lastMouseEvent","_onMouseDownThenMove","setModifiers","_findMousePosition","isDragAndDrop","_dispatchMouse","targetType","setStartedOnLineNumbers","trySetCount","_stop","_getPositionOutsideEditor","editorContent","aboveLineNumber","OUTSIDE_EDITOR","belowLineNumber","positionOutsideEditor","_altKey","_ctrlKey","_metaKey","_shiftKey","_startedOnLineNumbers","_lastMouseDownPosition","_lastMouseDownPositionEqualCount","_lastMouseDownCount","_lastSetMouseDownCountTime","setMouseDownCount","newMouseDownPosition","CLEAR_MOUSE_DOWN_COUNT_TIME","gestureChangeEventMerger","MsPointerHandler","linesContentDomNode","_installGestureHandlerTimeout","touchGesture_1","penGesture_1","_lastPointerType","_onGestureChange","_onCaptureGestureTap","rawEvent","mouseHandler_1","StandardPointerHandler","touchAction","touchGesture_2","penGesture_2","TouchHandler","PointerHandler","msPointerEnabled","TouchEvent","pointerEnabled","ViewOutgoingEvents","_onDidGainFocus","onDidGainFocus","_onDidLoseFocus","onDidLoseFocus","_onMouseDrag","_onMouseDrop","emitScrollChanged","emitViewFocusGained","emitViewFocusLost","_convertViewToModelMouseEvent","_convertViewToModelMouseTarget","ExternalMouseTarget","_convertViewToModelPosition","_convertViewToModelRange","LastRenderedData","_currentVisibleRange","getCurrentVisibleRange","setCurrentVisibleRange","currentVisibleRange","ViewLines","_linesContent","_textRangeRestingSpot","_isViewportWrapping","_revealHorizontalRightPadding","_viewLineOptions","_maxLineWidth","_asyncUpdateLineWidths","_updateLineWidths","_lastRenderedData","_lastCursorRevealRangeHorizontallyEvent","_onOptionsMaybeChanged","newViewLineOptions","rendStartLineNumber","rendEndLineNumber","_computeScrollTopToRevealRange","viewLineDomNode","_getViewLineDomNode","_getLineNumberFor","nextLineModelLineNumber","domReadingContext","visibleRangesForLine","localMaxLineWidth","widthInPx","_ensureMaxLineWidth","revealHorizontalRange","_computeScrollLeftToRevealRange","maxHorizontalOffset","iLineWidth","boxStartY","boxEndY","viewportStartY","viewportEndY","boxMiddleY","_computeMinimumScrolling","viewportStartX","viewportEndX","boxStartX","boxEndX","HORIZONTAL_EXTRA_PX","viewportStart","viewportEnd","boxStart","boxEnd","revealAtStart","revealAtEnd","viewportLength","getMinimapLineHeight","getMinimapCharWidth","MOUSE_DRAG_RESET_DISTANCE","MinimapOptions","minimapHeight","canvasInnerWidth","canvasInnerHeight","canvasOuterWidth","canvasOuterHeight","MinimapLayout","sliderTop","sliderHeight","getDesiredScrollTopFromDelta","viewportStartLineNumber","viewportEndLineNumber","viewportContainsWhitespaceGaps","previousLayout","minimapLineHeight","minimapLinesFitting","viewportLineCount","expectedViewportLineCount","maxMinimapSliderTop","MinimapLine","INVALID","RenderData","renderedLayout","imageData","_imageData","_renderedLines","linesEquals","tmp","MinimapBuffers","WIDTH","HEIGHT","_backgroundFillData","_createBackgroundFillData","_buffers","createImageData","_lastUsedBuffer","getBuffer","Minimap","_lastRenderData","_getMinimapDomNodeClassName","_shadow","_canvas","_slider","_sliderHorizontal","_tokensColorTracker","_minimapCharRenderer","runtimeMinimapCharRenderer_1","_applyLayout","_mouseDownListener","internalOffsetY","offsetY","_sliderMouseMoveMonitor","_sliderMouseDownListener","initialMousePosition_1","initialMouseOrthogonalPosition_1","initialSliderState_1","_getBuffer","renderingCtx","scrollLeftChars","horizontalSliderLeft","_lastData","lineInfo","renderedLines","putImageData","lastRenderData","lastTargetData","lastStartLineNumber","lastLines","lastLinesLength","targetData","copySourceStart","copySourceEnd","copyDestStart","copyDestEnd","dest_dy","lastLineIndex","source_dy","sourceStart","sourceEnd","destStart","destEnd","colorTracker","charWidth","maxDx","tokenColorId","tokenColor","sliderBackground","halfSliderBackground","addRule","sliderHoverBackground","halfSliderHoverBackground","sliderActiveBackground","halfSliderActiveBackground","shadow","ScrollDecorationViewPart","_scrollTop","_updateWidth","_shouldShow","_useShadows","_updateShouldShow","newShouldShow","toStyledRange","HorizontalRangeWithStyle","toStyled","LineVisibleRangesWithStyle","CornerStyle","startStyle","endStyle","isIEWithZoomingIssuesNearRoundedBorders","SelectionsOverlay","_previousFrameVisibleRangesWithStyle","_roundedSelection","_selections","_visibleRangesHaveGaps","_enrichVisibleRangesWithStyle","previousFrame","previousFrameTop","previousFrameBottom","topLineNumber","bottomLineNumber","curLineRange","curLeft","curRight","prevRight","nextLeft","nextRight","_getVisibleRangesWithStyle","visibleRangesHaveGaps","_createSelectionPiece","_actualRenderOneSelection","output2","visibleRangesHaveStyle","fullLineHeight","reducedLineHeight","firstLineNumber","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","editorSelectionColor","editorInactiveSelectionColor","editorSelectionForegroundColor","editorLineHighlight","editorLineHighlightBorder","editorRangeHighlight","editorCursor","editorWhitespaces","editorIndentGuides","editorLineNumbers","editorRuler","editorCodeLensForeground","editorBracketMatchBackground","editorBracketMatchBorder","editorOverviewRulerBorder","editorGutter","editorErrorForeground","editorErrorBorder","editorWarningForeground","editorWarningBorder","gutter","rangeHighlight","invisibles","CurrentLineHighlightOverlay","_readOnly","_renderLineHighlight","_selectionIsEmpty","_primaryCursorIsInEditableRange","_primaryCursorLineNumber","_scrollWidth","primaryCursorLineNumber","selectionIsEmpty","_shouldShowCurrentLine","lineHighlight","editorColorRegistry_1","defines","lineHighlightBorder","CurrentLineMarginHighlightOverlay","IndentGuidesOverlay","_spaceWidth","tabWidth","indentGuideWidth","editorGuideColor","LineNumbersOverlay","_readConfig","_lastCursorModelPosition","_renderLineNumbers","_renderCustomLineNumbers","_renderRelativeLineNumbers","_lineNumbersLeft","_lineNumbersWidth","primaryViewPosition","_getLineRenderLineNumber","lineHeightClassName","renderLineNumber","measureText","font","createFontString","metrics","doCreateFontString","VisibleTextAreaData","canUseZeroSizeTextarea","TextAreaHandler","_primaryCursorVisibleRange","_pixelRatio","_contentHeight","_scrollLeft","_fontInfo","_emptySelectionClipboard","_visibleTextArea","_lastCopiedValue","_lastCopiedValueIsFromEmptySelection","textAreaCover","simpleModel","textAreaInputHost","whatToCopy","_textAreaInput","visibleRangeForPositionRelativeToEditor","setAriaActiveDescendant","primaryCursorPosition","_renderInsideEditor","_renderAtTopLeft","useEditorFont","ta","tac","margin_1","lineNumbers_1","Rulers","_renderedRulers","_rulers","_ensureRulersCount","currentCount","desiredCount","rulerWidth","addCount","rulerColor","ViewCursors","_cursorBlinking","_primaryCursor","viewCursor_1","_secondaryCursors","_updateDomClassName","_startCursorBlinkAnimation","_cursorFlatBlinkInterval","_blinkingEnabled","_editorHasFocus","_updateBlinking","_onCursorPositionChanged","addCnt","newCursor","nextSibling","_getCursorBlinking","isSolid","_show","BLINK_INTERVAL","_getClassName","getLastRenderData","caret","oppositeCaret","findFocusedDiffEditor","diffEditors","DiffEntryType","DiffEntry","originalLineStart","originalLineEnd","modifiedLineStart","modifiedLineEnd","DiffReview","_diffEditor","_actionBar","_content","_diffs","_compute","_goToRow","_getNextRow","_getPrevRow","_currentDiff","currentIndex","_findDiffIndex","jumpToLineNumber","_getCurrentFocusedRow","previousElementSibling","_getFirstRow","nextElementSibling","originalModel","modifiedModel","_mergeAdjacent","originalLineCount","modifiedLineCount","diffs","diffsLength","rLength_1","originalEqualAbove","modifiedEqualAbove","minOriginal","minModified","prevLineChange","fromOriginal","fromModified","originalEqualBelow","modifiedEqualBelow","maxOriginal","maxModified","nextLineChange","toOriginal","toModified","rLength","thisDiff","currLast","thisFirst","originalOpts","modifiedOpts","originalModelOpts","modifiedModelOpts","diffIndex","minOriginalLine","maxOriginalLine","minModifiedLine","maxModifiedLine","diffEntry","modLine","_renderSection","rowClassName","lineNumbersExtraClassName","spacerClassName","originalLineNumbersWidth","modifiedLineNumbersWidth","originalLine","modifiedLine","originalLineNumber","modifiedLineNumber","spacer","DiffReviewNext","diffReviewNext","DiffReviewPrev","diffReviewPrev","ColorZone","OverviewRulerZone","forceHeight","_darkColor","_hcColor","_colorZones","compareTo","setColorZones","colorZones","getColorZones","OverviewZoneManager","getVerticalOffsetForLine","_getVerticalOffsetForLine","_colorZonesInvalid","_domWidth","_domHeight","_outerHeight","_maximumHeight","_minimumHeight","_themeType","_lastAssignedId","_color2Id","_id2Color","getId2Color","setZones","newZones","oldZones","oldLength","newZone","oldZone","setPixelRatio","getDOMWidth","getCanvasWidth","setDOMWidth","getDOMHeight","getCanvasHeight","setDOMHeight","getOuterHeight","setOuterHeight","setMaximumHeight","maximumHeight","setMinimumHeight","minimumHeight","setThemeType","resolveColorZones","colorZonesInvalid","heightRatio","allColorZones","colorZones_1","forcedHeight","y1","y2","createZone","zoneMaximumHeight","ycenter","halfHeight","OverviewRulerImpl","canvasLeftOffset","cssClassName","_canvasLeftOffset","_lanesCount","_zoneManager","overviewZoneManager_1","setLayout","getLanesCount","setLanesCount","newLanesCount","setUseBackground","getPixelWidth","getPixelHeight","setScrollHeight","zones","forceRender","id2Color","clearRect","fillStyle","fillRect","_renderThreeLanes","_renderTwoLanes","_renderOneLane","_renderVerticalPatch","leftWidth","rightWidth","leftOffset","rightOffset","centerWidth","centerOffset","laneMask","xpos","currentColorId","currentFrom","currentTo","zoneColorId","zoneFrom","zoneTo","DecorationsOverviewRuler","_overviewRuler","overviewRulerImpl_1","MIN_DECORATION_HEIGHT","MAX_DECORATION_HEIGHT","_renderBorder","_updateColors","_updateBackground","_tokensColorTrackerListener","_shouldUpdateDecorations","_zonesFromDecorations","_shouldUpdateCursorPosition","_hideCursor","_zonesFromCursors","_cursorPositions","minimapEnabled","prevLanesCount","_borderColor","cursorColor","_cursorColor","_createZonesFromDecorations","resolveRulerColor","_createZonesFromCursors","Full","allZones","ctx2","beginPath","strokeStyle","lineTo","stroke","OverviewRuler","execCoreEditorCommandFunc","_cursor","_renderAnimationFrame","viewOutgoingEvents_1","viewController_1","eventDispatcher","viewEventDispatcher_1","_renderOnce","viewContext_1","viewParts","_textAreaHandler","textAreaHandler_1","createTextAreaHandlerHelper","createViewParts","pointerHandler","pointerHandler_1","createPointerHandlerHelper","getEditorClassName","overflowGuardContainer","_scrollbar","editorScrollbar_1","viewLines_1","viewZones","viewZones_1","decorationsOverviewRuler","decorationsOverviewRuler_1","scrollDecoration","scrollDecoration_1","contentViewOverlays","viewOverlays_1","currentLineHighlight_1","decorations_1","indentGuides_1","marginViewOverlays","currentLineMarginHighlight_1","marginDecorations_1","linesDecorations_1","contentWidgets","contentWidgets_1","viewCursors","viewCursors_1","overlayWidgets","overlayWidgets_1","rulers_1","minimap_1","overviewRulerData","_flushAccumulatedAndRenderNow","_renderNow","_scheduleRender","_onRenderScheduled","_actualRender","_getViewPartsToRender","viewPart","viewPartsToRender","partialViewportData","viewLinesViewportData_1","renderingContext","getOffsetForColumn","getInternalEventBus","createOverviewRuler","overviewRuler_1","zonesHaveChanged","everything","newPreference","getSquigglySVGData","squigglyStart","squigglyEnd","CodeEditorWidget","_onDidScrollChange","_onDidChangeViewZones","onDidChangeViewZones","_codeEditorService","_focusTracker","CodeEditorWidgetFocusTracker","contributions","_getContributions","_getActions","internalAction","editorAction_1","_view","getCompletelyVisibleLinesRangeInViewport","_getVerticalOffsetForPosition","getTopForPosition","viewImpl_1","viewEventBus","removeDomNode","commonCodeEditor_1","_domFocusTracker","errorBorderColor","warningBorderColor","warningForeground","CodeEditor","codeEditorWidget_1","createDecoration","isChangeOrInsert","isChangeOrDelete","createFakeLinesDiv","VisualEditorState","_zonesMap","getForeignViewZones","allViewZones","z","clean","viewChangeAccessor","length_3","zoneId","overviewZones","DIFF_EDITOR_ID","DiffEditorWidget","editorWorkerService","_onDidUpdateDiff","_editorWorkerService","_domElement","_renderSideBySide","renderSideBySide","_ignoreTrimWhitespace","_renderIndicators","renderIndicators","_originalIsEditable","originalEditable","_updateDecorationsRunner","_updateDecorations","_containerDomElement","_overviewViewportDomElement","_overviewDomElement","modifiedEditor","_createLeftHandSide","_createRightHandSide","_beginUpdateDecorationsTimeout","_currentlyChangingViewZones","_diffComputationToken","_originalEditorState","_modifiedEditorState","_isHandlingScrollEvent","_reviewHeight","_lineChanges","scopedInstantiationService","_createLeftHandSideEditor","_createRightHandSideEditor","_reviewPane","diffReview_1","_measureDomElementToken","_measureDomElement","_enableSplitViewResizing","enableSplitViewResizing","_setStrategy","DiffEdtorWidgetSideBySide","_createDataSource","DiffEdtorWidgetInline","_strategy","applyColors","_recreateOverviewRulers","_originalOverviewRuler","originalEditor","_modifiedOverviewRuler","_layoutOverviewRulers","_originalDomNode","_modifiedDomNode","_createInnerEditor","_adjustOptionsForLeftHandSide","_layoutOverviewViewport","_onViewZonesChanged","_beginUpdateDecorationsSoon","_adjustOptionsForRightHandSide","codeEditor_1","_cleanViewZonesAndDecorations","renderSideBySideChanged","beginUpdateDecorations","_beginUpdateDecorations","setEnableSplitViewResizing","diffEditorState","forceDoLayoutCall","freeSpace","ENTIRE_DIFF_OVERVIEW_WIDTH","ONE_OVERVIEW_WIDTH","UPDATE_DIFF_DECORATIONS_DELAY","currentOriginalModel","currentModifiedModel","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","newInsertColor","newRemoveColor","_insertColor","_removeColor","originalWhitespaces","modifiedWhitespaces","_getViewZones","originalDecorations","_getOriginalEditorDecorations","modifiedDecorations","_getModifiedEditorDecorations","originalForeignVZ","modifiedForeignVZ","ForeignViewZonesIterator","_index","ViewZonesComputer","getViewZones","originalEndEquivalentLineNumber","modifiedEndEquivalentLineNumber","sortMyViewZones","addAndCombineIfPossible","lastItem","length_4","stepOriginal","stepModified","viewZoneLineNumber","_produceOriginalFromDiff","_produceModifiedFromDiff","stepOriginalIndex","stepModifiedIndex","originalDelta","modifiedDelta","shouldNotShrink","ensureDomNode","DECORATIONS","charDelete","charDeleteWholeLine","charInsert","charInsertWholeLine","lineInsert","lineInsertWithSign","lineDelete","lineDeleteWithSign","lineDeleteMargin","_disableSash","_sashRatio","_sashPosition","_sash","newDisableSash","MINIMUM_EDITOR_WIDTH","_startSashPosition","SideBySideViewZonesComputer","length_5","lengthJ","length_6","InlineViewZonesComputer","length_7","length_8","modifiedEditorConfiguration","modifiedEditorTabSize","marginHTML","renderOriginalLine","actualDecorations","myResult","addedOutline","removedOutline","EmbeddedCodeEditorWidget","parentEditor","_parentEditor","_overwriteOptions","_onParentConfigurationChanged","getParentEditor","SelectBracketAction","BracketMatchingController","jumpToBracket","BracketsData","BracketMatchingController_1","_lastBracketsData","_lastVersionId","_updateBracketsSoon","_updateBrackets","_matchBrackets","resultingPosition","_recomputeBrackets","newDecorationsLen","previousData","positionsLen","newData","newDataLen","previousIndex","previousLen","bracketMatchBackground","bracketMatchBorder","CodeLensViewZone","onHeight","_onHeight","_lastHeight","CodeLensContentWidget","symbolRange","_idPool","setSymbolRange","updateVisibility","_symbolRange","withCommands","_widgetPosition","CodeLensHelper","_removeDecorations","_addDecorations","_addDecorationsCallbacks","commit","resultingDecorations","CodeLens","viewZoneChangeAccessor","updateCallabck","codeLensData","_contentWidget","_viewZoneId","isValid","updateCodeLensSymbols","computeIfNecessary","updateCommands","getLineNumber","codeLensForeground","activeLinkForeground","CodeLensContribution","CodeLensContribution_1","_globalToDispose","_localToDispose","_lenses","_currentFindCodeLensSymbolsPromise","_modelChangeCounter","_onModelChange","prevIsEnabled","_localDispose","_currentFindOccPromise","registration","scheduler","_detectVisibleLenses","_onViewportChanged","codelens_1","counterValue","_renderCodeLensSymbols","viewAccessor","lens","codelensWidget_1","_disposeAllLenses","decChangeAccessor","lastGroup","symbols_1","centeredRange","shouldRestoreCenteredRange","codeLensIndex","groupsIndex","symbolsLineNumber","codeLensLineNumber","toResolve","lenses","resolvedSymbols","resolveCodeLens","FindOptionsWidget","keybindingService","_hideSoon","_keybindingLabelFor","_revealTemporarily","_applyTheme","actionId","inputStyles","widgetBackground","widgetShadowColor","hcBorder","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","MAX_MATCHES_COUNT_WIDTH","FIND_ALL_CONTROLS_WIDTH","FIND_INPUT_AREA_HEIGHT","FindWidgetViewZone","FindWidget","_codeEditor","_controller","_contextViewProvider","_isReplaceVisible","_buildDomNode","_updateButtons","checkEditorWidth","editorWidth","collapsedFindWidget","reducedFindWidget","narrowFindWidget","_replaceInputBox","_findInput","findInputWidth","_updateToggleSelectionFindButton","_findInputFocussed","findController_1","_toggleSelectionFind","_layoutViewZone","showRedOutline","_updateMatchesCount","_closeBtn","findInputIsNonEmpty","_prevBtn","_nextBtn","_replaceBtn","_replaceAllBtn","_toggleReplaceBtn","setExpanded","canReplace","animate","adjustEditorScrollTop","startCoords","startLeft","leftOfFindWidget","endCoords","_showViewZone","focusTheEditor","adjustScroll","scrollAdjustment","focusFindInput","focusReplaceInput","_onFindInputMouseDown","_onFindInputKeyDown","_onReplaceInputKeyDown","_buildFindPart","findInput_1","PART_WIDTH","SimpleButton","onTrigger","findPart","SimpleCheckbox","_buildReplacePart","replaceInput","REPLACE_INPUT_AREA_WIDTH","replacePart","_buildSash","originalWidth","inputBoxWidth","_checkbox","_COUNTER","htmlFor","addBackgroundColorRule","hcOutline","FindController","findWidget_1","_findOptionsWidget","findOptionsWidget_1","MessageController","MessageController_1","_messageListeners","CONTEXT_SNIPPET_MODE","_messageWidget","MessageWidget","closeMessage","bounds","fadeOut","MessageCommand","messageWidget","MarkerModel","_nextIdx","_toUnbind","_ignoreSelectionChange","_onCurrentMarkerChanged","_onMarkerSetChanged","withoutWatchingEditorPosition","_initIdx","findMarkerAtPosition","indent_1","innerText","MarkerNavigationWidget","_severity","_backgroundColor","_wireModelAndView","editorMarkerNavigationBackground","editorMarkerNavigationError","editorMarkerNavigationWarning","_parentContainer","_title","_message","onCurrentMarkerChanged","showAtMarker","onMarkerSetChanged","_onMarkersChanged","computeRequiredHeight","zoneWidget_1","MarkerNavigationAction","_isNext","MarkerController","getOrCreateModel","MarkerController_1","_callOnClose","_markersNavigationVisible","CONTEXT_MARKERS_NAVIGATION_VISIBLE","_zone","_getMarkers","closeMarkersNavigation","NextMarkerAction","PrevMarkerAction","MarkerCommand","errorDefault","warningDefault","ModesHoverController","ModesHoverController_1","_onEditorMouseMove","_hideWidgets","_onModelDecorationsChanged","modesContentHover_1","_glyphWidget","modesGlyphHover_1","stopKey","showContentHover","ShowHoverAction","editorHoverHighlightColor","hoverBackground","hoverBorder","codeBackground","InPlaceReplaceController","InPlaceReplaceController_1","requestIdPool","currentRequest","decorationRemover","modelURI","basicResult","inPlaceReplaceCommand_1","DECORATION","InPlaceReplaceUp","InPlaceReplaceDown","HOVER_MESSAGE_GENERAL_META","HOVER_MESSAGE_GENERAL_ALT","meta","metaActive","altActive","LinkOccurrence","useMetaKey","_getOptions","activate","deactivate","LinkDetector","LinkDetector_1","clickLinkGesture","clickLinkGesture_1","cleanUpActiveLinkDecoration","updateDecorations","beginCompute","onModelModeChanged","timeoutPromise","computePromise","currentOccurrences","activeLinkDecorationId","isComputing","RECOMPUTE_TIME","links_1","occurance_1","i_2","occurance","withKey","occurrence","getLinkOccurrence","openLinkOccurrence","currentOccurrence","OpenLinkAction","linkDetector","ParameterHintsModel","_onHint","onHint","triggerCharactersListeners","throttledDelayer","DELAY","onEditorConfigurationChange","parameterHints_1","signatures","hints","signatureHelpTriggerCharacters","ParameterHintsWidget","keyVisible","keyMultipleSignatures","currentSignature","activeSignature","buttons","overloads","docs","announcedLabel","multiple","hasParameters","renderParameters","activeParameter","documentation","currentOverload","labelToAnnounce","currentParameter","parameter","signatureLabelOffset","signatureLabelEnd","ParameterHintsController","ParameterHintsController_1","parameterHintsWidget_1","TriggerParameterHintsAction","ParameterHintsCommand","RenameInputField","_currentAcceptInput","_currentCancelInput","_inputField","boxShadow","acceptInput","cancelInput","disposeOnDone","rename","newName","rejects","provideRenameEdits","rejectReason","CONTEXT_RENAME_INPUT_VISIBLE","RenameController","RenameController_1","_progressService","_renameInputField","renameInputField_1","_renameInputVisible","renameOperation","_prepareRename","acceptRenameInput","cancelRenameInput","bulkEdit_1","resolverService_1","progress_1","files_1","RenameAction","RenameCommand","matchesColor","colorRegExp","canExpandCompletionItem","expandSuggestionDocsByDefault","editorSuggestWidgetBackground","editorSuggestWidgetBorder","editorSuggestWidgetForeground","editorSuggestWidgetSelectedBackground","editorSuggestWidgetHighlightForeground","triggerKeybindingLabel","colorspan","main","highlightedLabel","typeLabel","readMore","configureFont","fontSizePx","lineHeightPx","toggleDetails","SuggestionDetails","scrollDown","scrollUp","scrollBottom","pageDown","pageUp","setBorderWidth","SuggestWidget","ignoreFocusEvents","onDidSelectEmitter","onDidFocusEmitter","onDidHideEmitter","onDidShowEmitter","onDidFocus","onDidHide","onDidShow","maxWidgetWidth","listWidth","storageServiceAvailable","expandSuggestionDocs","isAuto","expandDocsSettingFromStorage","messageElement","listElement","listWidget_1","onEditorBlur","onEditorLayoutChange","onListSelection","onListFocus","onCursorSelectionChanged","suggestWidgetVisible","suggestWidgetMultipleSuggestions","suggestionSupportsAutoAccept","editorBlurTimeout","expandSideOrBelow","_getSuggestionAriaAlertLabel","_ariaAlert","newAriaAlertLabel","_lastAriaAlertLabel","detailsBorderColor","focusBorderColor","detailsFocusBorderColor","currentSuggestionDetails","oldFocusIndex","focusedItemIndex","updateListHeight","showDetails","stateChanged","LOADING_MESSAGE","NO_SUGGESTIONS_MESSAGE","showTriggered","loadingTimeout","showSuggestions","visibleCount","stats","selectNextPage","selectLast","selectPreviousPage","getFocusedItem","toggleDetailsFocus","updateExpandDocsSetting","maxWidgetHeight","adjustDocsPosition","showTimeout","hideWidget","unfocusedHeight","cursorX","cursorY","widgetCoords","widgetX","widgetY","matchHighlight","AcceptOnCharacterOracle","_activeAcceptCharacters","_onItem","_activeItem","commitCharacters","SuggestController","SuggestController_1","_telemetryService","suggestModel_1","onDidTrigger","onDidSuggest","onDidCancel","acceptSuggestionsOnEnter","updateFromConfig","suggestWidget_1","_onDidSelectItem","autoAcceptOracle","makesTextEdit","additionalTextEdits","snippetType","columnDelta","snippetController2_1","_alertCompletionItem","suggestionType","triggerSuggest","acceptSelectedSuggestion","cancelSuggestWidget","selectNextSuggestion","selectNextPageSuggestion","selectLastSuggestion","selectPrevSuggestion","selectPrevPageSuggestion","selectFirstSuggestion","toggleSuggestionDetails","toggleSuggestionFocus","TriggerSuggestAction","SuggestCommand","getOccurrencesAtPosition","orderedByScore","foundResult","provideDocumentHighlights","editorWordHighlight","editorWordHighlightStrong","WordHighlighter","workerRequestTokenId","workerRequest","workerRequestCompleted","workerRequestValue","lastCursorPositionChangeTime","renderDecorationsTimer","toUnhook","_onPositionChanged","_stopAll","_lastWordRange","currentWordRange","workerRequestIsValid","_beginRenderDecorations","myRequestId","minimumRenderTime","renderDecorations","_getDecorationOptions","Write","_WRITE_OPTIONS","_TEXT_OPTIONS","_REGULAR_OPTIONS","WordHighlighterContribution","WordHighlighterContribution_1","wordHighligher","wordHighlight","wordHighlightStrong","IPeekViewService","PeekContext","inPeekEditor","notInPeekEditor","NOT_INNER_EDITOR_CONTEXT_KEY","getOuterEditor","embeddedCodeEditorWidget_1","headerBackgroundColor","primaryHeadingColor","secondaryHeadingColor","PeekViewWidget","_onDidClose","_headElement","_primaryHeading","_secondaryHeading","_bodyElement","_fillHead","_fillBody","titleElement","_onTitleClick","_metaHeading","_actionbarWidget","setTitle","primaryHeading","secondaryHeading","setMetaTitle","headHeight","bodyHeight","_doLayoutHead","_doLayoutBody","getSelectionLabel","charactersSelected","nlsSingleSelectionRange","nlsSingleSelection","nlsMultiSelectionRange","nlsMultiSelection","nlsNoSelection","CONTEXT_ACCESSIBILITY_WIDGET_VISIBLE","AccessibilityHelpController","AccessibilityHelpController_1","AccessibilityHelpWidget","_isVisibleKey","_contentDomNode","_layout","_buildContent","accessibilityHelpUrl","_descriptionForCommand","noKbMsg","turnOnMessage","NLS_TAB_FOCUS_MODE_ON","NLS_TAB_FOCUS_MODE_ON_NO_KB","NLS_TAB_FOCUS_MODE_OFF","NLS_TAB_FOCUS_MODE_OFF_NO_KB","toggleTabFocusMode_1","ShowAccessibilityHelpAction","AccessibilityHelpCommand","renderTokenText","getSafeTokenizationSupport","InspectTokensController","InspectTokensController_1","standaloneColorService","launch","InspectTokensWidget","InspectTokens","_ID","_getTokensAtLine","token1Index","tokens1","token2Index","tokens2","tokenStartIndex","_decodeMetadata","_tokenTypeToString","_fontStyleToString","stateBeforeLine","_getStateBeforeLine","tokenizationResult1","tokenizationResult2","startState","QuickOpenController_1","onClose","clearDecorations","lastKnownEditorSelection","quickOpenEditorWidget_1","getAutoFocus","decorateLine","rangeHighlightDecorationId","BaseEditorQuickOpenAction","_inputAriaLabel","getController","searchValue","GotoLineEntry","decorator","_parseResult","_parseInput","numbers","runOpen","runPreview","toSelection","quickOpenModel_1","GotoLineAction","editorQuickOpen_1","EditorActionCommandEntry","QuickCommandAction","_editorActionsToEntries","_sort","keybind","SymbolEntry","QuickOutlineAction","quickOpen_2","toQuickOpenEntries","flattened","normalizedSearchValue","sortScoped","sortNormal","currentType","currentResult","typeCounter","typeToLabel","elementARange","elementBRange","elementAType","elementBType","createAriaDomNode","ariaDomNodeCreated","LAST_GENERATED_COMMAND_ID","StandaloneCodeEditor","simpleServices_1","_standaloneKeybindingService","whenExpression","createContextKey","addAction","keybindingsWhen","contextMenuGroupId","contextMenuOrder","uniqueId","StandaloneEditor","_ownsModel","StandaloneDiffEditor","diffEditorWidget_1","inherit","vs_dark","hc_black","isBuiltinTheme","VS_THEME_NAME","VS_DARK_THEME_NAME","HC_BLACK_THEME_NAME","getBuiltinRules","builtinTheme","themes_1","newBuiltInTheme","themeData","StandaloneTheme","defaultColors","useDefault","getDefault","_tokenTheme","tokenization_1","StandaloneThemeServiceImpl","_onThemeChange","_knownThemes","_styleElement","defineTheme","baseData","hasRule","ruleCollector","IWorkspaceContextService","LegacyWorkspace","_ctime","_name","Workspace","_roots","_rootsMap","updateRootsMap","DecorationsManager","_decorationIgnoreSet","_callOnModelChange","_onModelChanged","_onDecorationChanged","newDecorationsActualIndex","oneReference","DecorationOptions","referencesModel_1","failure","Controller","_expandCollapse","FOCUSED","OPEN_TO_SIDE","SELECTED","_fakeFocus","FileReferencesTemplate","_contextService","_environmentService","badge","countBadge_1","workspace_1","environment_1","OneReferenceTemplate","AriaProvider","_onDidChangePercentages","_ratio","newLeft","ReferenceWidget","layoutData","_disposeOnNewModel","_onDidSelectReference","peekViewWidget_1","peekViewBorder","peekViewTitleBackground","peekViewTitleForeground","peekViewTitleInfoForeground","_previewNotAvailableMessage","_tree","_previewModelReference","_getFocusedReference","containerElement","_messageContainer","_previewContainer","onDidChangePercentages","percentages","_treeContainer","allowHorizontalScroll","_revealReference","_onNewModel","_decorationsManager","peekViewResultsBackground","peekViewResultsMatchForeground","peekViewResultsFileForeground","peekViewResultsSelectionBackground","peekViewResultsSelectionForeground","peekViewEditorBackground","peekViewEditorGutterBackground","peekViewResultsMatchHighlight","peekViewEditorMatchHighlight","findMatchHighlightColor","referenceHighlightColor","resultsBackground","resultsMatchForeground","resultsFileForeground","resultsSelectedBackground","resultsSelectedForeground","editorGutterBackground","ctxReferenceSearchVisible","ReferencesController","ReferencesController_1","_peekViewService","_requestIdPool","_ignoreModelChangeEvent","_referenceSearchVisible","toggleWidget","modelPromise","widgetPosition","closeWidget","referencesWidget_1","onDidClose","onDidSelectReference","_openReference","onGoto","_gotoReference","requestId","startTime","getMetaTitle","onDone","duration","openedEditor","DefinitionActionConfig","openInPeek","filterCurrent","DefinitionAction","_getDeclarationsAtPosition","idxOfCurrent","messageController_1","_getNoResultFoundMessage","_onResult","goToDeclaration_1","_getMetaTitle","_openInPeek","revealIfVisible","referencesController_1","goToDeclarationKb","GoToDefinitionAction","GoToDefinitionAction_1","OpenDefinitionToSideAction","OpenDefinitionToSideAction_1","PeekDefinitionAction","ImplementationAction","GoToImplementationAction","GoToImplementationAction_1","PeekImplementationAction","PeekImplementationAction_1","TypeDefinitionAction","GoToTypeDefintionAction","GoToTypeDefintionAction_1","PeekTypeDefinitionAction","PeekTypeDefinitionAction_1","GotoDefinitionWithMouseEditorContribution","GotoDefinitionWithMouseEditorContribution_1","linkGesture","startFindDefinition","gotoDefinition","currentWordUnderMouse","findDefinition","startIndent","MAX_SOURCE_PREVIEW_LINES","minIndent","endIndent","previewRange","goToDeclarationCommands_1","closeActiveReferenceSearch","outerEditor","provideReferences","includeDeclaration","defaultReferenceSearchOptions","ReferenceController","ReferenceController_1","peekViewService","ReferenceAction","StaticServices","LazyStaticService","_all","_serviceCollection","_serviceId","_factory","instantiationService_1","configurationServiceImpl","resourceConfigurationService","contextService","markerService_1","modeServiceImpl_1","modelServiceImpl_1","standaloneThemeServiceImpl_1","codeEditorServiceImpl_1","progressService","DynamicStandaloneServices","ensure","contextKeyService_1","contextViewService_1","contextMenuService_1","withAllStandaloneServices","standaloneServices_1","simpleEditorService","simpleEditorModelResolverService","openerService_1","standaloneCodeEditor_1","onDidCreateEditor","onCodeEditorAdd","createDiffEditor","createDiffNavigator","diffNavigator_1","doCreateModel","firstLF","setModelLanguage","setModelMarkers","onDidCreateModel","onModelAdded","onWillDisposeModel","webWorker_1","colorizer_1","setupServices","createMonacoEditorAPI","onLanguage","setLanguageConfiguration","setTokensProvider","adapter","TokenizationSupport2Adapter","setMonarchTokensProvider","languageDef","monarchCompile_1","monarchLexer_1","registerReferenceProvider","registerRenameProvider","registerSignatureHelpProvider","registerHoverProvider","registerDocumentSymbolProvider","registerDocumentHighlightProvider","registerDefinitionProvider","registerImplementationProvider","registerTypeDefinitionProvider","registerCodeLensProvider","registerCodeActionProvider","registerDocumentFormattingEditProvider","registerDocumentRangeFormattingEditProvider","registerOnTypeFormattingEditProvider","registerLinkProvider","registerCompletionItemProvider","SuggestAdapter","convertKind","CompletionItemKind","Value","Keyword","Snippet","Reference","Folder","_toClassicTokens","previousStartIndex","scopes","actualResult","_toBinaryTokens","wordStartPos","textEdit","isIncomplete","resolvedItem","createMonacoLanguagesAPI","standaloneEditor_1","standaloneLanguages_1","ignoreDuplicateModules"],"mappings":"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A,GAAA,IAAA,KACAA,EAAAA,EAAA,GAAA,IAAA,KACAA,EAAAA,EAAA,GAAA,IAAA,KACAA,EAAAA,EAAA,GAAA,IAAA,KAEAA,EAAAA,EAAA,EAAA,IAAA,IACAA,EAAAA,EAAA,EAAA,IAAA,IACAA,EAAAA,EAAA,EAAA,IAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IACAA,EAAAA,EAAA,EAAA,KAAA,IAEAA,EAAAA,EAAA,EAAA,IAAA,IACAA,EAAAA,EAAA,EAAA,IAAA,IACAA,EAAAA,EAAA,EAAA,IAAA,IACAA,EAAAA,EAAA,EAAA,IAAA,IACAA,EAAAA,EAAA,EAAA,IAAA,IACAA,EAAAA,EAAA,EAAA,IAAA,IACAA,EAAAA,EAAA,EAAA,IAAA,IACAA,EAAAA,EAAA,EAAA,IAAA,IACAA,EAAAA,EAAA,EAAA,IAAA,IACAA,EAAAA,EAAA,EAAA,IAAA,IACAA,EAAAA,EAAA,EAAA,IAAA,IACAA,EAAAA,EAAA,EAAA,IAAA,IACAA,EAAAA,EAAA,EAAA,IAAA,IACAA,EAAAA,EAAA,EAAA,IAAA,IACAA,EAAAA,EAAA,EAAA,IAAA,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,EAChBA,EAAa,IAAG,EAChBA,EAAa,IAAG,EAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAEhBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAEhBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAEhBA,EAAa,IAAG,GAEhBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,IAAG,GAChBA,EAAa,KAAI,GACjBA,EAAa,KAAI,GACjBA,EAAa,KAAI,GACjBA,EAAa,KAAI,IACjBA,EAAa,KAAI,IACjBA,EAAa,KAAI,IACjBA,EAAa,KAAI,IACjBA,EAAa,KAAI,IACjBA,EAAa,KAAI,IACjBA,EAAa,KAAI,IACjBA,EAAa,KAAI,IACjBA,EAAa,KAAI,IAEjBA,EAAa,KAAI,GACjBA,EAAa,KAAI,GACjBA,EAAa,KAAI,GACjBA,EAAa,KAAI,GACjBA,EA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","file":"editor.main.js","sourcesContent":["}).call(this);","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/chjj/marked\n */\n\n// TODO MonacoChange: we have our own way of defining modules\n// ;(function() {\n// END MonacoChange\n\n/**\n * Block-Level Grammar\n */\n\nvar block = {\n newline: /^\\n+/,\n code: /^( {4}[^\\n]+\\n*)+/,\n fences: noop,\n hr: /^( *[-*_]){3,} *(?:\\n+|$)/,\n heading: /^ *(#{1,6}) *([^\\n]+?) *#* *(?:\\n+|$)/,\n nptable: noop,\n lheading: /^([^\\n]+)\\n *(=|-){2,} *(?:\\n+|$)/,\n blockquote: /^( *>[^\\n]+(\\n(?!def)[^\\n]+)*\\n*)+/,\n list: /^( *)(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?!\\1bull )\\n*|\\s*$)/,\n html: /^ *(?:comment *(?:\\n|\\s*$)|closed *(?:\\n{2,}|\\s*$)|closing *(?:\\n{2,}|\\s*$))/,\n def: /^ *\\[([^\\]]+)\\]: *]+)>?(?: +[\"(]([^\\n]+)[\")])? *(?:\\n+|$)/,\n table: noop,\n paragraph: /^((?:[^\\n]+\\n?(?!hr|heading|lheading|blockquote|tag|def))+)\\n*/,\n text: /^[^\\n]+/\n};\n\nblock.bullet = /(?:[*+-]|\\d+\\.)/;\nblock.item = /^( *)(bull) [^\\n]*(?:\\n(?!\\1bull )[^\\n]*)*/;\nblock.item = replace(block.item, 'gm')\n (/bull/g, block.bullet)\n ();\n\nblock.list = replace(block.list)\n (/bull/g, block.bullet)\n ('hr', '\\\\n+(?=\\\\1?(?:[-*_] *){3,}(?:\\\\n+|$))')\n ('def', '\\\\n+(?=' + block.def.source + ')')\n ();\n\nblock.blockquote = replace(block.blockquote)\n ('def', block.def)\n ();\n\nblock._tag = '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code'\n + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo'\n + '|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:/|[^\\\\w\\\\s@]*@)\\\\b';\n\nblock.html = replace(block.html)\n ('comment', //)\n ('closed', /<(tag)[\\s\\S]+?<\\/\\1>/)\n ('closing', /])*?>/)\n (/tag/g, block._tag)\n ();\n\nblock.paragraph = replace(block.paragraph)\n ('hr', block.hr)\n ('heading', block.heading)\n ('lheading', block.lheading)\n ('blockquote', block.blockquote)\n ('tag', '<' + block._tag)\n ('def', block.def)\n ();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge({}, block.normal, {\n fences: /^ *(`{3,}|~{3,})[ \\.]*(\\S+)? *\\n([\\s\\S]*?)\\s*\\1 *(?:\\n+|$)/,\n paragraph: /^/,\n heading: /^ *(#{1,6}) +([^\\n]+?) *#* *(?:\\n+|$)/\n});\n\nblock.gfm.paragraph = replace(block.paragraph)\n ('(?!', '(?!'\n + block.gfm.fences.source.replace('\\\\1', '\\\\2') + '|'\n + block.list.source.replace('\\\\1', '\\\\3') + '|')\n ();\n\n/**\n * GFM + Tables Block Grammar\n */\n\nblock.tables = merge({}, block.gfm, {\n nptable: /^ *(\\S.*\\|.*)\\n *([-:]+ *\\|[-| :]*)\\n((?:.*\\|.*(?:\\n|$))*)\\n*/,\n table: /^ *\\|(.+)\\n *\\|( *[-:]+[-| :]*)\\n((?: *\\|.*(?:\\n|$))*)\\n*/\n});\n\n/**\n * Block Lexer\n */\n\nfunction Lexer(options) {\n this.tokens = [];\n this.tokens.links = {};\n this.options = options || marked.defaults;\n this.rules = block.normal;\n\n if (this.options.gfm) {\n if (this.options.tables) {\n this.rules = block.tables;\n } else {\n this.rules = block.gfm;\n }\n }\n}\n\n/**\n * Expose Block Rules\n */\n\nLexer.rules = block;\n\n/**\n * Static Lex Method\n */\n\nLexer.lex = function(src, options) {\n var lexer = new Lexer(options);\n return lexer.lex(src);\n};\n\n/**\n * Preprocessing\n */\n\nLexer.prototype.lex = function(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n')\n .replace(/\\t/g, ' ')\n .replace(/\\u00a0/g, ' ')\n .replace(/\\u2424/g, '\\n');\n\n return this.token(src, true);\n};\n\n/**\n * Lexing\n */\n\nLexer.prototype.token = function(src, top, bq) {\n var src = src.replace(/^ +$/gm, '')\n , next\n , loose\n , cap\n , bull\n , b\n , item\n , space\n , i\n , l;\n\n while (src) {\n // newline\n if (cap = this.rules.newline.exec(src)) {\n src = src.substring(cap[0].length);\n if (cap[0].length > 1) {\n this.tokens.push({\n type: 'space'\n });\n }\n }\n\n // code\n if (cap = this.rules.code.exec(src)) {\n src = src.substring(cap[0].length);\n cap = cap[0].replace(/^ {4}/gm, '');\n this.tokens.push({\n type: 'code',\n text: !this.options.pedantic\n ? cap.replace(/\\n+$/, '')\n : cap\n });\n continue;\n }\n\n // fences (gfm)\n if (cap = this.rules.fences.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'code',\n lang: cap[2],\n text: cap[3] || ''\n });\n continue;\n }\n\n // heading\n if (cap = this.rules.heading.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'heading',\n depth: cap[1].length,\n text: cap[2]\n });\n continue;\n }\n\n // table no leading pipe (gfm)\n if (top && (cap = this.rules.nptable.exec(src))) {\n src = src.substring(cap[0].length);\n\n item = {\n type: 'table',\n header: cap[1].replace(/^ *| *\\| *$/g, '').split(/ *\\| */),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3].replace(/\\n$/, '').split('\\n')\n };\n\n for (i = 0; i < item.align.length; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n for (i = 0; i < item.cells.length; i++) {\n item.cells[i] = item.cells[i].split(/ *\\| */);\n }\n\n this.tokens.push(item);\n\n continue;\n }\n\n // lheading\n if (cap = this.rules.lheading.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'heading',\n depth: cap[2] === '=' ? 1 : 2,\n text: cap[1]\n });\n continue;\n }\n\n // hr\n if (cap = this.rules.hr.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'hr'\n });\n continue;\n }\n\n // blockquote\n if (cap = this.rules.blockquote.exec(src)) {\n src = src.substring(cap[0].length);\n\n this.tokens.push({\n type: 'blockquote_start'\n });\n\n cap = cap[0].replace(/^ *> ?/gm, '');\n\n // Pass `top` to keep the current\n // \"toplevel\" state. This is exactly\n // how markdown.pl works.\n this.token(cap, top, true);\n\n this.tokens.push({\n type: 'blockquote_end'\n });\n\n continue;\n }\n\n // list\n if (cap = this.rules.list.exec(src)) {\n src = src.substring(cap[0].length);\n bull = cap[2];\n\n this.tokens.push({\n type: 'list_start',\n ordered: bull.length > 1\n });\n\n // Get each top-level item.\n cap = cap[0].match(this.rules.item);\n\n next = false;\n l = cap.length;\n i = 0;\n\n for (; i < l; i++) {\n item = cap[i];\n\n // Remove the list item's bullet\n // so it is seen as the next token.\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+\\.) +/, '');\n\n // Outdent whatever the\n // list item contains. Hacky.\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic\n ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n : item.replace(/^ {1,4}/gm, '');\n }\n\n // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n if (this.options.smartLists && i !== l - 1) {\n b = block.bullet.exec(cap[i + 1])[0];\n if (bull !== b && !(bull.length > 1 && b.length > 1)) {\n src = cap.slice(i + 1).join('\\n') + src;\n i = l - 1;\n }\n }\n\n // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n loose = next || /\\n\\n(?!\\s*$)/.test(item);\n if (i !== l - 1) {\n next = item.charAt(item.length - 1) === '\\n';\n if (!loose) loose = next;\n }\n\n this.tokens.push({\n type: loose\n ? 'loose_item_start'\n : 'list_item_start'\n });\n\n // Recurse.\n this.token(item, false, bq);\n\n this.tokens.push({\n type: 'list_item_end'\n });\n }\n\n this.tokens.push({\n type: 'list_end'\n });\n\n continue;\n }\n\n // html\n if (cap = this.rules.html.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: this.options.sanitize\n ? 'paragraph'\n : 'html',\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: cap[0]\n });\n continue;\n }\n\n // def\n if ((!bq && top) && (cap = this.rules.def.exec(src))) {\n src = src.substring(cap[0].length);\n this.tokens.links[cap[1].toLowerCase()] = {\n href: cap[2],\n title: cap[3]\n };\n continue;\n }\n\n // table (gfm)\n if (top && (cap = this.rules.table.exec(src))) {\n src = src.substring(cap[0].length);\n\n item = {\n type: 'table',\n header: cap[1].replace(/^ *| *\\| *$/g, '').split(/ *\\| */),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3].replace(/(?: *\\| *)?\\n$/, '').split('\\n')\n };\n\n for (i = 0; i < item.align.length; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n for (i = 0; i < item.cells.length; i++) {\n item.cells[i] = item.cells[i]\n .replace(/^ *\\| *| *\\| *$/g, '')\n .split(/ *\\| */);\n }\n\n this.tokens.push(item);\n\n continue;\n }\n\n // top-level paragraph\n if (top && (cap = this.rules.paragraph.exec(src))) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'paragraph',\n text: cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1]\n });\n continue;\n }\n\n // text\n if (cap = this.rules.text.exec(src)) {\n // Top-level should never reach here.\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'text',\n text: cap[0]\n });\n continue;\n }\n\n if (src) {\n throw new\n Error('Infinite loop on byte: ' + src.charCodeAt(0));\n }\n }\n\n return this.tokens;\n};\n\n/**\n * Inline-Level Grammar\n */\n\nvar inline = {\n escape: /^\\\\([\\\\`*{}\\[\\]()#+\\-.!_>])/,\n autolink: /^<([^ >]+(@|:\\/)[^ >]+)>/,\n url: noop,\n tag: /^|^<\\/?\\w+(?:\"[^\"]*\"|'[^']*'|[^'\">])*?>/,\n link: /^!?\\[(inside)\\]\\(href\\)/,\n reflink: /^!?\\[(inside)\\]\\s*\\[([^\\]]*)\\]/,\n nolink: /^!?\\[((?:\\[[^\\]]*\\]|[^\\[\\]])*)\\]/,\n strong: /^__([\\s\\S]+?)__(?!_)|^\\*\\*([\\s\\S]+?)\\*\\*(?!\\*)/,\n em: /^\\b_((?:[^_]|__)+?)_\\b|^\\*((?:\\*\\*|[\\s\\S])+?)\\*(?!\\*)/,\n code: /^(`+)\\s*([\\s\\S]*?[^`])\\s*\\1(?!`)/,\n br: /^ {2,}\\n(?!\\s*$)/,\n del: noop,\n text: /^[\\s\\S]+?(?=[\\\\?(?:\\s+['\"]([\\s\\S]*?)['\"])?\\s*/;\n\ninline.link = replace(inline.link)\n ('inside', inline._inside)\n ('href', inline._href)\n ();\n\ninline.reflink = replace(inline.reflink)\n ('inside', inline._inside)\n ();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge({}, inline.normal, {\n strong: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n em: /^_(?=\\S)([\\s\\S]*?\\S)_(?!_)|^\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)/\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge({}, inline.normal, {\n escape: replace(inline.escape)('])', '~|])')(),\n url: /^(https?:\\/\\/[^\\s<]+[^<.,:;\"')\\]\\s])/,\n del: /^~~(?=\\S)([\\s\\S]*?\\S)~~/,\n text: replace(inline.text)\n (']|', '~]|')\n ('|', '|https?://|')\n ()\n});\n\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = merge({}, inline.gfm, {\n br: replace(inline.br)('{2,}', '*')(),\n text: replace(inline.gfm.text)('{2,}', '*')()\n});\n\n/**\n * Inline Lexer & Compiler\n */\n\nfunction InlineLexer(links, options) {\n this.options = options || marked.defaults;\n this.links = links;\n this.rules = inline.normal;\n this.renderer = this.options.renderer || new Renderer;\n this.renderer.options = this.options;\n\n if (!this.links) {\n throw new\n Error('Tokens array requires a `links` property.');\n }\n\n if (this.options.gfm) {\n if (this.options.breaks) {\n this.rules = inline.breaks;\n } else {\n this.rules = inline.gfm;\n }\n } else if (this.options.pedantic) {\n this.rules = inline.pedantic;\n }\n}\n\n/**\n * Expose Inline Rules\n */\n\nInlineLexer.rules = inline;\n\n/**\n * Static Lexing/Compiling Method\n */\n\nInlineLexer.output = function(src, links, options) {\n var inline = new InlineLexer(links, options);\n return inline.output(src);\n};\n\n/**\n * Lexing/Compiling\n */\n\nInlineLexer.prototype.output = function(src) {\n var out = ''\n , link\n , text\n , href\n , cap;\n\n while (src) {\n // escape\n if (cap = this.rules.escape.exec(src)) {\n src = src.substring(cap[0].length);\n out += cap[1];\n continue;\n }\n\n // autolink\n if (cap = this.rules.autolink.exec(src)) {\n src = src.substring(cap[0].length);\n if (cap[2] === '@') {\n text = cap[1].charAt(6) === ':'\n ? this.mangle(cap[1].substring(7))\n : this.mangle(cap[1]);\n href = this.mangle('mailto:') + text;\n } else {\n text = escape(cap[1]);\n href = text;\n }\n out += this.renderer.link(href, null, text);\n continue;\n }\n\n // url (gfm)\n if (!this.inLink && (cap = this.rules.url.exec(src))) {\n src = src.substring(cap[0].length);\n text = escape(cap[1]);\n href = text;\n out += this.renderer.link(href, null, text);\n continue;\n }\n\n // tag\n if (cap = this.rules.tag.exec(src)) {\n if (!this.inLink && /^/i.test(cap[0])) {\n this.inLink = false;\n }\n src = src.substring(cap[0].length);\n out += this.options.sanitize\n ? this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape(cap[0])\n : cap[0]\n continue;\n }\n\n // link\n if (cap = this.rules.link.exec(src)) {\n src = src.substring(cap[0].length);\n this.inLink = true;\n out += this.outputLink(cap, {\n href: cap[2],\n title: cap[3]\n });\n this.inLink = false;\n continue;\n }\n\n // reflink, nolink\n if ((cap = this.rules.reflink.exec(src))\n || (cap = this.rules.nolink.exec(src))) {\n src = src.substring(cap[0].length);\n link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = this.links[link.toLowerCase()];\n if (!link || !link.href) {\n out += cap[0].charAt(0);\n src = cap[0].substring(1) + src;\n continue;\n }\n this.inLink = true;\n out += this.outputLink(cap, link);\n this.inLink = false;\n continue;\n }\n\n // strong\n if (cap = this.rules.strong.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.strong(this.output(cap[2] || cap[1]));\n continue;\n }\n\n // em\n if (cap = this.rules.em.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.em(this.output(cap[2] || cap[1]));\n continue;\n }\n\n // code\n if (cap = this.rules.code.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.codespan(escape(cap[2], true));\n continue;\n }\n\n // br\n if (cap = this.rules.br.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.br();\n continue;\n }\n\n // del (gfm)\n if (cap = this.rules.del.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.del(this.output(cap[1]));\n continue;\n }\n\n // text\n if (cap = this.rules.text.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.text(escape(this.smartypants(cap[0])));\n continue;\n }\n\n if (src) {\n throw new\n Error('Infinite loop on byte: ' + src.charCodeAt(0));\n }\n }\n\n return out;\n};\n\n/**\n * Compile Link\n */\n\nInlineLexer.prototype.outputLink = function(cap, link) {\n var href = escape(link.href)\n , title = link.title ? escape(link.title) : null;\n\n return cap[0].charAt(0) !== '!'\n ? this.renderer.link(href, title, this.output(cap[1]))\n : this.renderer.image(href, title, escape(cap[1]));\n};\n\n/**\n * Smartypants Transformations\n */\n\nInlineLexer.prototype.smartypants = function(text) {\n if (!this.options.smartypants) return text;\n return text\n // em-dashes\n .replace(/---/g, '\\u2014')\n // en-dashes\n .replace(/--/g, '\\u2013')\n // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n // closing singles & apostrophes\n .replace(/'/g, '\\u2019')\n // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n // closing doubles\n .replace(/\"/g, '\\u201d')\n // ellipses\n .replace(/\\.{3}/g, '\\u2026');\n};\n\n/**\n * Mangle Links\n */\n\nInlineLexer.prototype.mangle = function(text) {\n if (!this.options.mangle) return text;\n var out = ''\n , l = text.length\n , i = 0\n , ch;\n\n for (; i < l; i++) {\n ch = text.charCodeAt(i);\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n};\n\n/**\n * Renderer\n */\n\nfunction Renderer(options) {\n this.options = options || {};\n}\n\nRenderer.prototype.code = function(code, lang, escaped) {\n if (this.options.highlight) {\n var out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n if (!lang) {\n return '
'\n      + (escaped ? code : escape(code, true))\n      + '\\n
';\n }\n\n return '
'\n    + (escaped ? code : escape(code, true))\n    + '\\n
\\n';\n};\n\nRenderer.prototype.blockquote = function(quote) {\n return '
\\n' + quote + '
\\n';\n};\n\nRenderer.prototype.html = function(html) {\n return html;\n};\n\nRenderer.prototype.heading = function(text, level, raw) {\n return ''\n + text\n + '\\n';\n};\n\nRenderer.prototype.hr = function() {\n return this.options.xhtml ? '
\\n' : '
\\n';\n};\n\nRenderer.prototype.list = function(body, ordered) {\n var type = ordered ? 'ol' : 'ul';\n return '<' + type + '>\\n' + body + '\\n';\n};\n\nRenderer.prototype.listitem = function(text) {\n return '
  • ' + text + '
  • \\n';\n};\n\nRenderer.prototype.paragraph = function(text) {\n return '

    ' + text + '

    \\n';\n};\n\nRenderer.prototype.table = function(header, body) {\n return '\\n'\n + '\\n'\n + header\n + '\\n'\n + '\\n'\n + body\n + '\\n'\n + '
    \\n';\n};\n\nRenderer.prototype.tablerow = function(content) {\n return '\\n' + content + '\\n';\n};\n\nRenderer.prototype.tablecell = function(content, flags) {\n var type = flags.header ? 'th' : 'td';\n var tag = flags.align\n ? '<' + type + ' style=\"text-align:' + flags.align + '\">'\n : '<' + type + '>';\n return tag + content + '\\n';\n};\n\n// span level renderer\nRenderer.prototype.strong = function(text) {\n return '' + text + '';\n};\n\nRenderer.prototype.em = function(text) {\n return '' + text + '';\n};\n\nRenderer.prototype.codespan = function(text) {\n return '' + text + '';\n};\n\nRenderer.prototype.br = function() {\n return this.options.xhtml ? '
    ' : '
    ';\n};\n\nRenderer.prototype.del = function(text) {\n return '' + text + '';\n};\n\nRenderer.prototype.link = function(href, title, text) {\n if (this.options.sanitize) {\n try {\n var prot = decodeURIComponent(unescape(href))\n .replace(/[^\\w:]/g, '')\n .toLowerCase();\n } catch (e) {\n return '';\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return '';\n }\n }\n var out = '
    ';\n return out;\n};\n\nRenderer.prototype.image = function(href, title, text) {\n var out = '\"'' : '>';\n return out;\n};\n\nRenderer.prototype.text = function(text) {\n return text;\n};\n\n/**\n * Parsing & Compiling\n */\n\nfunction Parser(options) {\n this.tokens = [];\n this.token = null;\n this.options = options || marked.defaults;\n this.options.renderer = this.options.renderer || new Renderer;\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n}\n\n/**\n * Static Parse Method\n */\n\nParser.parse = function(src, options, renderer) {\n var parser = new Parser(options, renderer);\n return parser.parse(src);\n};\n\n/**\n * Parse Loop\n */\n\nParser.prototype.parse = function(src) {\n this.inline = new InlineLexer(src.links, this.options, this.renderer);\n this.tokens = src.reverse();\n\n var out = '';\n while (this.next()) {\n out += this.tok();\n }\n\n return out;\n};\n\n/**\n * Next Token\n */\n\nParser.prototype.next = function() {\n return this.token = this.tokens.pop();\n};\n\n/**\n * Preview Next Token\n */\n\nParser.prototype.peek = function() {\n return this.tokens[this.tokens.length - 1] || 0;\n};\n\n/**\n * Parse Text Tokens\n */\n\nParser.prototype.parseText = function() {\n var body = this.token.text;\n\n while (this.peek().type === 'text') {\n body += '\\n' + this.next().text;\n }\n\n return this.inline.output(body);\n};\n\n/**\n * Parse Current Token\n */\n\nParser.prototype.tok = function() {\n switch (this.token.type) {\n case 'space': {\n return '';\n }\n case 'hr': {\n return this.renderer.hr();\n }\n case 'heading': {\n return this.renderer.heading(\n this.inline.output(this.token.text),\n this.token.depth,\n this.token.text);\n }\n case 'code': {\n return this.renderer.code(this.token.text,\n this.token.lang,\n this.token.escaped);\n }\n case 'table': {\n var header = ''\n , body = ''\n , i\n , row\n , cell\n , flags\n , j;\n\n // header\n cell = '';\n for (i = 0; i < this.token.header.length; i++) {\n flags = { header: true, align: this.token.align[i] };\n cell += this.renderer.tablecell(\n this.inline.output(this.token.header[i]),\n { header: true, align: this.token.align[i] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n for (i = 0; i < this.token.cells.length; i++) {\n row = this.token.cells[i];\n\n cell = '';\n for (j = 0; j < row.length; j++) {\n cell += this.renderer.tablecell(\n this.inline.output(row[j]),\n { header: false, align: this.token.align[j] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n return this.renderer.table(header, body);\n }\n case 'blockquote_start': {\n var body = '';\n\n while (this.next().type !== 'blockquote_end') {\n body += this.tok();\n }\n\n return this.renderer.blockquote(body);\n }\n case 'list_start': {\n var body = ''\n , ordered = this.token.ordered;\n\n while (this.next().type !== 'list_end') {\n body += this.tok();\n }\n\n return this.renderer.list(body, ordered);\n }\n case 'list_item_start': {\n var body = '';\n\n while (this.next().type !== 'list_item_end') {\n body += this.token.type === 'text'\n ? this.parseText()\n : this.tok();\n }\n\n return this.renderer.listitem(body);\n }\n case 'loose_item_start': {\n var body = '';\n\n while (this.next().type !== 'list_item_end') {\n body += this.tok();\n }\n\n return this.renderer.listitem(body);\n }\n case 'html': {\n var html = !this.token.pre && !this.options.pedantic\n ? this.inline.output(this.token.text)\n : this.token.text;\n return this.renderer.html(html);\n }\n case 'paragraph': {\n return this.renderer.paragraph(this.inline.output(this.token.text));\n }\n case 'text': {\n return this.renderer.paragraph(this.parseText());\n }\n }\n};\n\n/**\n * Helpers\n */\n\nfunction escape(html, encode) {\n return html\n .replace(!encode ? /&(?!#?\\w+;)/g : /&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\nfunction unescape(html) {\n\t// explicitly match decimal, hex, and named HTML entities\n return html.replace(/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/g, function(_, n) {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nfunction replace(regex, opt) {\n regex = regex.source;\n opt = opt || '';\n return function self(name, val) {\n if (!name) return new RegExp(regex, opt);\n val = val.source || val;\n val = val.replace(/(^|[^\\[])\\^/g, '$1');\n regex = regex.replace(name, val);\n return self;\n };\n}\n\nfunction noop() {}\nnoop.exec = noop;\n\nfunction merge(obj) {\n var i = 1\n , target\n , key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\n\n/**\n * Marked\n */\n\nfunction marked(src, opt, callback) {\n if (callback || typeof opt === 'function') {\n if (!callback) {\n callback = opt;\n opt = null;\n }\n\n opt = merge({}, marked.defaults, opt || {});\n\n var highlight = opt.highlight\n , tokens\n , pending\n , i = 0;\n\n try {\n tokens = Lexer.lex(src, opt)\n } catch (e) {\n return callback(e);\n }\n\n pending = tokens.length;\n\n var done = function(err) {\n if (err) {\n opt.highlight = highlight;\n return callback(err);\n }\n\n var out;\n\n try {\n out = Parser.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!pending) return done();\n\n for (; i < tokens.length; i++) {\n (function(token) {\n if (token.type !== 'code') {\n return --pending || done();\n }\n return highlight(token.text, token.lang, function(err, code) {\n if (err) return done(err);\n if (code == null || code === token.text) {\n return --pending || done();\n }\n token.text = code;\n token.escaped = true;\n --pending || done();\n });\n })(tokens[i]);\n }\n\n return;\n }\n try {\n if (opt) opt = merge({}, marked.defaults, opt);\n return Parser.parse(Lexer.lex(src, opt), opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/chjj/marked.';\n if ((opt || marked.defaults).silent) {\n return '

    An error occurred:

    '\n        + escape(e.message + '', true)\n        + '
    ';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge(marked.defaults, opt);\n return marked;\n};\n\nmarked.defaults = {\n gfm: true,\n tables: true,\n breaks: false,\n pedantic: false,\n sanitize: false,\n sanitizer: null,\n mangle: true,\n smartLists: false,\n silent: false,\n highlight: null,\n langPrefix: 'lang-',\n smartypants: false,\n headerPrefix: '',\n renderer: new Renderer,\n xhtml: false\n};\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser;\nmarked.parser = Parser.parse;\n\nmarked.Renderer = Renderer;\n\nmarked.Lexer = Lexer;\nmarked.lexer = Lexer.lex;\n\nmarked.InlineLexer = InlineLexer;\nmarked.inlineLexer = InlineLexer.output;\n\nmarked.parse = marked;\n\n// TODO MonacoChange: we have our own way of defining modules\ndefine(\"vs/base/common/marked/raw.marked\", [], function() {\n return marked;\n});\n//if (typeof module !== 'undefined' && typeof exports === 'object') {\n// module.exports = marked;\n//} else if (typeof define === 'function' && define.amd) {\n// define(function() { return marked; });\n//} else {\n// this.marked = marked;\n//}\n//\n//}).call(function() {\n// return this || (typeof window !== 'undefined' ? window : global);\n//}());\n// END MonacoChange","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/*---------------------------------------------------------------------------------------------\n *---------------------------------------------------------------------------------------------\n *---------------------------------------------------------------------------------------------\n *---------------------------------------------------------------------------------------------\n *---------------------------------------------------------------------------------------------\n * Please make sure to make edits in the .ts file at https://github.com/Microsoft/vscode-loader/\n *---------------------------------------------------------------------------------------------\n *---------------------------------------------------------------------------------------------\n *---------------------------------------------------------------------------------------------\n *---------------------------------------------------------------------------------------------\n *--------------------------------------------------------------------------------------------*/\n'use strict';\nvar CSSLoaderPlugin;\n(function (CSSLoaderPlugin) {\n /**\n * Known issue:\n * - In IE there is no way to know if the CSS file loaded successfully or not.\n */\n var BrowserCSSLoader = (function () {\n function BrowserCSSLoader() {\n this._pendingLoads = 0;\n }\n BrowserCSSLoader.prototype.attachListeners = function (name, linkNode, callback, errorback) {\n var unbind = function () {\n linkNode.removeEventListener('load', loadEventListener);\n linkNode.removeEventListener('error', errorEventListener);\n };\n var loadEventListener = function (e) {\n unbind();\n callback();\n };\n var errorEventListener = function (e) {\n unbind();\n errorback(e);\n };\n linkNode.addEventListener('load', loadEventListener);\n linkNode.addEventListener('error', errorEventListener);\n };\n BrowserCSSLoader.prototype._onLoad = function (name, callback) {\n this._pendingLoads--;\n callback();\n };\n BrowserCSSLoader.prototype._onLoadError = function (name, errorback, err) {\n this._pendingLoads--;\n errorback(err);\n };\n BrowserCSSLoader.prototype._insertLinkNode = function (linkNode) {\n this._pendingLoads++;\n var head = document.head || document.getElementsByTagName('head')[0];\n var other = head.getElementsByTagName('link') || document.head.getElementsByTagName('script');\n if (other.length > 0) {\n head.insertBefore(linkNode, other[other.length - 1]);\n }\n else {\n head.appendChild(linkNode);\n }\n };\n BrowserCSSLoader.prototype.createLinkTag = function (name, cssUrl, externalCallback, externalErrorback) {\n var _this = this;\n var linkNode = document.createElement('link');\n linkNode.setAttribute('rel', 'stylesheet');\n linkNode.setAttribute('type', 'text/css');\n linkNode.setAttribute('data-name', name);\n var callback = function () { return _this._onLoad(name, externalCallback); };\n var errorback = function (err) { return _this._onLoadError(name, externalErrorback, err); };\n this.attachListeners(name, linkNode, callback, errorback);\n linkNode.setAttribute('href', cssUrl);\n return linkNode;\n };\n BrowserCSSLoader.prototype._linkTagExists = function (name, cssUrl) {\n var i, len, nameAttr, hrefAttr, links = document.getElementsByTagName('link');\n for (i = 0, len = links.length; i < len; i++) {\n nameAttr = links[i].getAttribute('data-name');\n hrefAttr = links[i].getAttribute('href');\n if (nameAttr === name || hrefAttr === cssUrl) {\n return true;\n }\n }\n return false;\n };\n BrowserCSSLoader.prototype.load = function (name, cssUrl, externalCallback, externalErrorback) {\n if (this._linkTagExists(name, cssUrl)) {\n externalCallback();\n return;\n }\n var linkNode = this.createLinkTag(name, cssUrl, externalCallback, externalErrorback);\n this._insertLinkNode(linkNode);\n };\n return BrowserCSSLoader;\n }());\n // ------------------------------ Finally, the plugin\n var CSSPlugin = (function () {\n function CSSPlugin() {\n this._cssLoader = new BrowserCSSLoader();\n }\n CSSPlugin.prototype.load = function (name, req, load) {\n var cssUrl = req.toUrl(name + '.css');\n this._cssLoader.load(name, cssUrl, function (contents) {\n load({});\n }, function (err) {\n if (typeof load.error === 'function') {\n load.error('Could not find ' + cssUrl + ' or it was empty');\n }\n });\n };\n return CSSPlugin;\n }());\n CSSLoaderPlugin.CSSPlugin = CSSPlugin;\n function init() {\n define('vs/css', new CSSPlugin());\n }\n CSSLoaderPlugin.init = init;\n ;\n if (typeof doNotInitLoader === 'undefined') {\n init();\n }\n})(CSSLoaderPlugin || (CSSLoaderPlugin = {}));\n","/*---------------------------------------------------------------------------------------------\n* Copyright (c) Microsoft Corporation. All rights reserved.\n* Licensed under the MIT License. See License.txt in the project root for license information.\n*--------------------------------------------------------------------------------------------*/\n/*---------------------------------------------------------------------------------------------\n*---------------------------------------------------------------------------------------------\n*---------------------------------------------------------------------------------------------\n*---------------------------------------------------------------------------------------------\n*---------------------------------------------------------------------------------------------\n* Please make sure to make edits in the .ts file at https://github.com/Microsoft/vscode-loader/\n*---------------------------------------------------------------------------------------------\n*---------------------------------------------------------------------------------------------\n*---------------------------------------------------------------------------------------------\n*---------------------------------------------------------------------------------------------\n*--------------------------------------------------------------------------------------------*/\n'use strict';\nvar NLSLoaderPlugin;\n(function (NLSLoaderPlugin) {\n var Environment = (function () {\n function Environment(isPseudo) {\n this.isPseudo = isPseudo;\n //\n }\n Environment.detect = function () {\n var isPseudo = (typeof document !== 'undefined' && document.location && document.location.hash.indexOf('pseudo=true') >= 0);\n return new Environment(isPseudo);\n };\n return Environment;\n }());\n function _format(message, args, env) {\n var result;\n if (args.length === 0) {\n result = message;\n }\n else {\n result = message.replace(/\\{(\\d+)\\}/g, function (match, rest) {\n var index = rest[0];\n return typeof args[index] !== 'undefined' ? args[index] : match;\n });\n }\n if (env.isPseudo) {\n // FF3B and FF3D is the Unicode zenkaku representation for [ and ]\n result = '\\uFF3B' + result.replace(/[aouei]/g, '$&$&') + '\\uFF3D';\n }\n return result;\n }\n function findLanguageForModule(config, name) {\n var result = config[name];\n if (result)\n return result;\n result = config['*'];\n if (result)\n return result;\n return null;\n }\n function localize(env, data, message) {\n var args = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n args[_i - 3] = arguments[_i];\n }\n return _format(message, args, env);\n }\n function createScopedLocalize(scope, env) {\n return function (idx, defaultValue) {\n var restArgs = Array.prototype.slice.call(arguments, 2);\n return _format(scope[idx], restArgs, env);\n };\n }\n var NLSPlugin = (function () {\n function NLSPlugin(env) {\n var _this = this;\n this._env = env;\n this.localize = function (data, message) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n return localize.apply(void 0, [_this._env, data, message].concat(args));\n };\n }\n NLSPlugin.prototype.setPseudoTranslation = function (value) {\n this._env = new Environment(value);\n };\n NLSPlugin.prototype.create = function (key, data) {\n return {\n localize: createScopedLocalize(data[key], this._env)\n };\n };\n NLSPlugin.prototype.load = function (name, req, load, config) {\n var _this = this;\n config = config || {};\n if (!name || name.length === 0) {\n load({\n localize: this.localize\n });\n }\n else {\n var pluginConfig = config['vs/nls'] || {};\n var language = pluginConfig.availableLanguages ? findLanguageForModule(pluginConfig.availableLanguages, name) : null;\n var suffix = '.nls';\n if (language !== null && language !== NLSPlugin.DEFAULT_TAG) {\n suffix = suffix + '.' + language;\n }\n req([name + suffix], function (messages) {\n if (Array.isArray(messages)) {\n messages.localize = createScopedLocalize(messages, _this._env);\n }\n else {\n messages.localize = createScopedLocalize(messages[name], _this._env);\n }\n load(messages);\n });\n }\n };\n return NLSPlugin;\n }());\n NLSPlugin.DEFAULT_TAG = 'i-default';\n NLSLoaderPlugin.NLSPlugin = NLSPlugin;\n function init() {\n define('vs/nls', new NLSPlugin(Environment.detect()));\n }\n NLSLoaderPlugin.init = init;\n if (typeof doNotInitLoader === 'undefined') {\n init();\n }\n})(NLSLoaderPlugin || (NLSLoaderPlugin = {}));\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'use strict';\n\n/**\n * Represents a window in a possible chain of iframes\n */\nexport interface IWindowChainElement {\n\t/**\n\t * The window object for it\n\t */\n\twindow: Window;\n\t/**\n\t * The iframe element inside the window.parent corresponding to window\n\t */\n\tiframeElement: HTMLIFrameElement;\n}\n\nlet hasDifferentOriginAncestorFlag: boolean = false;\nlet sameOriginWindowChainCache: IWindowChainElement[] = null;\n\nfunction getParentWindowIfSameOrigin(w: Window): Window {\n\tif (!w.parent || w.parent === w) {\n\t\treturn null;\n\t}\n\n\t// Cannot really tell if we have access to the parent window unless we try to access something in it\n\ttry {\n\t\tlet location = w.location;\n\t\tlet parentLocation = w.parent.location;\n\t\tif (location.protocol !== parentLocation.protocol || location.hostname !== parentLocation.hostname || location.port !== parentLocation.port) {\n\t\t\thasDifferentOriginAncestorFlag = true;\n\t\t\treturn null;\n\t\t}\n\t} catch (e) {\n\t\thasDifferentOriginAncestorFlag = true;\n\t\treturn null;\n\t}\n\n\treturn w.parent;\n}\n\nfunction findIframeElementInParentWindow(parentWindow: Window, childWindow: Window): HTMLIFrameElement {\n\tlet parentWindowIframes = parentWindow.document.getElementsByTagName('iframe');\n\tlet iframe: HTMLIFrameElement;\n\tfor (let i = 0, len = parentWindowIframes.length; i < len; i++) {\n\t\tiframe = parentWindowIframes[i];\n\t\tif (iframe.contentWindow === childWindow) {\n\t\t\treturn iframe;\n\t\t}\n\t}\n\treturn null;\n}\n\nexport class IframeUtils {\n\n\t/**\n\t * Returns a chain of embedded windows with the same origin (which can be accessed programmatically).\n\t * 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\t * To distinguish if at one point the current execution environment is running inside a window with a different origin, see hasDifferentOriginAncestor()\n\t */\n\tpublic static getSameOriginWindowChain(): IWindowChainElement[] {\n\t\tif (!sameOriginWindowChainCache) {\n\t\t\tsameOriginWindowChainCache = [];\n\t\t\tlet w = window, parent: Window;\n\t\t\tdo {\n\t\t\t\tparent = getParentWindowIfSameOrigin(w);\n\t\t\t\tif (parent) {\n\t\t\t\t\tsameOriginWindowChainCache.push({\n\t\t\t\t\t\twindow: w,\n\t\t\t\t\t\tiframeElement: findIframeElementInParentWindow(parent, w)\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tsameOriginWindowChainCache.push({\n\t\t\t\t\t\twindow: w,\n\t\t\t\t\t\tiframeElement: null\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tw = parent;\n\t\t\t} while (w);\n\t\t}\n\t\treturn sameOriginWindowChainCache.slice(0);\n\t}\n\n\t/**\n\t * 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\t * 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\t */\n\tpublic static hasDifferentOriginAncestor(): boolean {\n\t\tif (!sameOriginWindowChainCache) {\n\t\t\tthis.getSameOriginWindowChain();\n\t\t}\n\t\treturn hasDifferentOriginAncestorFlag;\n\t}\n\n\t/**\n\t * Returns the position of `childWindow` relative to `ancestorWindow`\n\t */\n\tpublic static getPositionOfChildWindowRelativeToAncestorWindow(childWindow: Window, ancestorWindow: any) {\n\n\t\tif (!ancestorWindow || childWindow === ancestorWindow) {\n\t\t\treturn {\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0\n\t\t\t};\n\t\t}\n\n\t\tlet top = 0, left = 0;\n\n\t\tlet windowChain = this.getSameOriginWindowChain();\n\n\t\tfor (let i = 0; i < windowChain.length; i++) {\n\t\t\tlet windowChainEl = windowChain[i];\n\n\t\t\tif (windowChainEl.window === ancestorWindow) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (!windowChainEl.iframeElement) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tlet boundingRect = windowChainEl.iframeElement.getBoundingClientRect();\n\t\t\ttop += boundingRect.top;\n\t\t\tleft += boundingRect.left;\n\t\t}\n\n\t\treturn {\n\t\t\ttop: top,\n\t\t\tleft: left\n\t\t};\n\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 *--------------------------------------------------------------------------------------------*/\n\nexport interface IItem {\n\tsize: number;\n}\n\nexport interface IRange {\n\tstart: number;\n\tend: number;\n}\n\nexport interface IRangedGroup {\n\trange: IRange;\n\tsize: number;\n}\n\n/**\n * Returns the intersection between two ranges as a range itself.\n * Returns `null` if the intersection is empty.\n */\nexport function intersect(one: IRange, other: IRange): IRange {\n\tif (one.start >= other.end || other.start >= one.end) {\n\t\treturn null;\n\t}\n\n\tconst start = Math.max(one.start, other.start);\n\tconst end = Math.min(one.end, other.end);\n\n\tif (end - start <= 0) {\n\t\treturn null;\n\t}\n\n\treturn { start, end };\n}\n\nexport function isEmpty(range: IRange): boolean {\n\treturn range.end - range.start <= 0;\n}\n\nexport function relativeComplement(one: IRange, other: IRange): IRange[] {\n\tconst result: IRange[] = [];\n\tconst first = { start: one.start, end: Math.min(other.start, one.end) };\n\tconst second = { start: Math.max(other.end, one.start), end: one.end };\n\n\tif (!isEmpty(first)) {\n\t\tresult.push(first);\n\t}\n\n\tif (!isEmpty(second)) {\n\t\tresult.push(second);\n\t}\n\n\treturn result;\n}\n\nexport function each(range: IRange, fn: (index: number) => void): void {\n\tfor (let i = range.start; i < range.end; i++) {\n\t\tfn(i);\n\t}\n}\n\n/**\n * Returns the intersection between a ranged group and a range.\n * Returns `[]` if the intersection is empty.\n */\nexport function groupIntersect(range: IRange, groups: IRangedGroup[]): IRangedGroup[] {\n\tconst result: IRangedGroup[] = [];\n\n\tfor (let r of groups) {\n\t\tif (range.start >= r.range.end) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (range.end < r.range.start) {\n\t\t\tbreak;\n\t\t}\n\n\t\tconst intersection = intersect(range, r.range);\n\n\t\tif (!intersection) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tresult.push({\n\t\t\trange: intersection,\n\t\t\tsize: r.size\n\t\t});\n\t}\n\n\treturn result;\n}\n\n/**\n * Shifts a range by that `much`.\n */\nfunction shift({ start, end }: IRange, much: number): IRange {\n\treturn { start: start + much, end: end + much };\n}\n\n/**\n * Consolidates a collection of ranged groups.\n *\n * Consolidation is the process of merging consecutive ranged groups\n * that share the same `size`.\n */\nexport function consolidate(groups: IRangedGroup[]): IRangedGroup[] {\n\tconst result: IRangedGroup[] = [];\n\tlet previousGroup: IRangedGroup = null;\n\n\tfor (let group of groups) {\n\t\tconst start = group.range.start;\n\t\tconst end = group.range.end;\n\t\tconst size = group.size;\n\n\t\tif (previousGroup && size === previousGroup.size) {\n\t\t\tpreviousGroup.range.end = end;\n\t\t\tcontinue;\n\t\t}\n\n\t\tpreviousGroup = { range: { start, end }, size };\n\t\tresult.push(previousGroup);\n\t}\n\n\treturn result;\n}\n\n/**\n * Concatenates several collections of ranged groups into a single\n * collection.\n */\nfunction concat(...groups: IRangedGroup[][]): IRangedGroup[] {\n\treturn consolidate(groups.reduce((r, g) => r.concat(g), [] as IRangedGroup[]));\n}\n\nexport class RangeMap {\n\n\tprivate groups: IRangedGroup[] = [];\n\tprivate _size = 0;\n\n\tsplice(index: number, deleteCount: number, ...items: IItem[]): void {\n\t\tconst diff = items.length - deleteCount;\n\t\tconst before = groupIntersect({ start: 0, end: index }, this.groups);\n\t\tconst after = groupIntersect({ start: index + deleteCount, end: Number.POSITIVE_INFINITY }, this.groups)\n\t\t\t.map(g => ({ range: shift(g.range, diff), size: g.size }));\n\n\t\tconst middle = items.map((item, i) => ({\n\t\t\trange: { start: index + i, end: index + i + 1 },\n\t\t\tsize: item.size\n\t\t}));\n\n\t\tthis.groups = concat(before, middle, after);\n\t\tthis._size = this.groups.reduce((t, g) => t + (g.size * (g.range.end - g.range.start)), 0);\n\t}\n\n\t/**\n\t * Returns the number of items in the range map.\n\t */\n\tget count(): number {\n\t\tconst len = this.groups.length;\n\n\t\tif (!len) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn this.groups[len - 1].range.end;\n\t}\n\n\t/**\n\t * Returns the sum of the sizes of all items in the range map.\n\t */\n\tget size(): number {\n\t\treturn this._size;\n\t}\n\n\t/**\n\t * Returns the index of the item at the given position.\n\t */\n\tindexAt(position: number): number {\n\t\tif (position < 0) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tlet index = 0;\n\t\tlet size = 0;\n\n\t\tfor (let group of this.groups) {\n\t\t\tconst count = group.range.end - group.range.start;\n\t\t\tconst newSize = size + (count * group.size);\n\n\t\t\tif (position < newSize) {\n\t\t\t\treturn index + Math.floor((position - size) / group.size);\n\t\t\t}\n\n\t\t\tindex += count;\n\t\t\tsize = newSize;\n\t\t}\n\n\t\treturn index;\n\t}\n\n\t/**\n\t * Returns the index of the item right after the item at the\n\t * index of the given position.\n\t */\n\tindexAfter(position: number): number {\n\t\treturn Math.min(this.indexAt(position) + 1, this.count);\n\t}\n\n\t/**\n\t * Returns the start position of the item at the given index.\n\t */\n\tpositionAt(index: number): number {\n\t\tif (index < 0) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tlet position = 0;\n\t\tlet count = 0;\n\n\t\tfor (let group of this.groups) {\n\t\t\tconst groupCount = group.range.end - group.range.start;\n\t\t\tconst newCount = count + groupCount;\n\n\t\t\tif (index < newCount) {\n\t\t\t\treturn position + ((index - count) * group.size);\n\t\t\t}\n\n\t\t\tposition += groupCount * group.size;\n\t\t\tcount = newCount;\n\t\t}\n\n\t\treturn -1;\n\t}\n\n\tdispose() {\n\t\tthis.groups = null;\n\t}\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'use strict';\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;\n\nexport class ScrollbarState {\n\n\t/**\n\t * For the vertical scrollbar: the width.\n\t * For the horizontal scrollbar: the height.\n\t */\n\tprivate readonly _scrollbarSize: number;\n\n\t/**\n\t * For the vertical scrollbar: the height of the pair horizontal scrollbar.\n\t * For the horizontal scrollbar: the width of the pair vertical scrollbar.\n\t */\n\tprivate readonly _oppositeScrollbarSize: number;\n\n\t/**\n\t * For the vertical scrollbar: the height of the scrollbar's arrows.\n\t * For the horizontal scrollbar: the width of the scrollbar's arrows.\n\t */\n\tprivate readonly _arrowSize: number;\n\n\t// --- variables\n\t/**\n\t * For the vertical scrollbar: the viewport height.\n\t * For the horizontal scrollbar: the viewport width.\n\t */\n\tprivate _visibleSize: number;\n\n\t/**\n\t * For the vertical scrollbar: the scroll height.\n\t * For the horizontal scrollbar: the scroll width.\n\t */\n\tprivate _scrollSize: number;\n\n\t/**\n\t * For the vertical scrollbar: the scroll top.\n\t * For the horizontal scrollbar: the scroll left.\n\t */\n\tprivate _scrollPosition: number;\n\n\t// --- computed variables\n\n\t/**\n\t * `visibleSize` - `oppositeScrollbarSize`\n\t */\n\tprivate _computedAvailableSize: number;\n\t/**\n\t * (`scrollSize` > 0 && `scrollSize` > `visibleSize`)\n\t */\n\tprivate _computedIsNeeded: boolean;\n\n\tprivate _computedSliderSize: number;\n\tprivate _computedSliderRatio: number;\n\tprivate _computedSliderPosition: number;\n\n\tconstructor(arrowSize: number, scrollbarSize: number, oppositeScrollbarSize: number) {\n\t\tthis._scrollbarSize = Math.round(scrollbarSize);\n\t\tthis._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\n\t\tthis._arrowSize = Math.round(arrowSize);\n\n\t\tthis._visibleSize = 0;\n\t\tthis._scrollSize = 0;\n\t\tthis._scrollPosition = 0;\n\n\t\tthis._computedAvailableSize = 0;\n\t\tthis._computedIsNeeded = false;\n\t\tthis._computedSliderSize = 0;\n\t\tthis._computedSliderRatio = 0;\n\t\tthis._computedSliderPosition = 0;\n\n\t\tthis._refreshComputedValues();\n\t}\n\n\tpublic clone(): ScrollbarState {\n\t\tlet r = new ScrollbarState(this._arrowSize, this._scrollbarSize, this._oppositeScrollbarSize);\n\t\tr.setVisibleSize(this._visibleSize);\n\t\tr.setScrollSize(this._scrollSize);\n\t\tr.setScrollPosition(this._scrollPosition);\n\t\treturn r;\n\t}\n\n\tpublic setVisibleSize(visibleSize: number): boolean {\n\t\tlet iVisibleSize = Math.round(visibleSize);\n\t\tif (this._visibleSize !== iVisibleSize) {\n\t\t\tthis._visibleSize = iVisibleSize;\n\t\t\tthis._refreshComputedValues();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic setScrollSize(scrollSize: number): boolean {\n\t\tlet iScrollSize = Math.round(scrollSize);\n\t\tif (this._scrollSize !== iScrollSize) {\n\t\t\tthis._scrollSize = iScrollSize;\n\t\t\tthis._refreshComputedValues();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic setScrollPosition(scrollPosition: number): boolean {\n\t\tlet iScrollPosition = Math.round(scrollPosition);\n\t\tif (this._scrollPosition !== iScrollPosition) {\n\t\t\tthis._scrollPosition = iScrollPosition;\n\t\t\tthis._refreshComputedValues();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate static _computeValues(oppositeScrollbarSize: number, arrowSize: number, visibleSize: number, scrollSize: number, scrollPosition: number) {\n\t\tconst computedAvailableSize = Math.max(0, visibleSize - oppositeScrollbarSize);\n\t\tconst computedRepresentableSize = Math.max(0, computedAvailableSize - 2 * arrowSize);\n\t\tconst computedIsNeeded = (scrollSize > 0 && scrollSize > visibleSize);\n\n\t\tif (!computedIsNeeded) {\n\t\t\t// There is no need for a slider\n\t\t\treturn {\n\t\t\t\tcomputedAvailableSize: Math.round(computedAvailableSize),\n\t\t\t\tcomputedIsNeeded: computedIsNeeded,\n\t\t\t\tcomputedSliderSize: Math.round(computedRepresentableSize),\n\t\t\t\tcomputedSliderRatio: 0,\n\t\t\t\tcomputedSliderPosition: 0,\n\t\t\t};\n\t\t}\n\n\t\t// 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\t\tconst computedSliderSize = Math.round(Math.max(MINIMUM_SLIDER_SIZE, Math.floor(visibleSize * computedRepresentableSize / scrollSize)));\n\n\t\t// The slider can move from 0 to `computedRepresentableSize` - `computedSliderSize`\n\t\t// in the same way `scrollPosition` can move from 0 to `scrollSize` - `visibleSize`.\n\t\tconst computedSliderRatio = (computedRepresentableSize - computedSliderSize) / (scrollSize - visibleSize);\n\t\tconst computedSliderPosition = (scrollPosition * computedSliderRatio);\n\n\t\treturn {\n\t\t\tcomputedAvailableSize: Math.round(computedAvailableSize),\n\t\t\tcomputedIsNeeded: computedIsNeeded,\n\t\t\tcomputedSliderSize: Math.round(computedSliderSize),\n\t\t\tcomputedSliderRatio: computedSliderRatio,\n\t\t\tcomputedSliderPosition: Math.round(computedSliderPosition),\n\t\t};\n\t}\n\n\tprivate _refreshComputedValues(): void {\n\t\tconst r = ScrollbarState._computeValues(this._oppositeScrollbarSize, this._arrowSize, this._visibleSize, this._scrollSize, this._scrollPosition);\n\t\tthis._computedAvailableSize = r.computedAvailableSize;\n\t\tthis._computedIsNeeded = r.computedIsNeeded;\n\t\tthis._computedSliderSize = r.computedSliderSize;\n\t\tthis._computedSliderRatio = r.computedSliderRatio;\n\t\tthis._computedSliderPosition = r.computedSliderPosition;\n\t}\n\n\tpublic getArrowSize(): number {\n\t\treturn this._arrowSize;\n\t}\n\n\tpublic getScrollPosition(): number {\n\t\treturn this._scrollPosition;\n\t}\n\n\tpublic getRectangleLargeSize(): number {\n\t\treturn this._computedAvailableSize;\n\t}\n\n\tpublic getRectangleSmallSize(): number {\n\t\treturn this._scrollbarSize;\n\t}\n\n\tpublic isNeeded(): boolean {\n\t\treturn this._computedIsNeeded;\n\t}\n\n\tpublic getSliderSize(): number {\n\t\treturn this._computedSliderSize;\n\t}\n\n\tpublic getSliderPosition(): number {\n\t\treturn this._computedSliderPosition;\n\t}\n\n\tpublic getSliderCenter(): number {\n\t\treturn (this._computedSliderPosition + this._computedSliderSize / 2);\n\t}\n\n\t/**\n\t * Compute a desired `scrollPosition` such that `offset` ends up in the center of the slider.\n\t * `offset` is based on the same coordinate system as the `sliderPosition`.\n\t */\n\tpublic getDesiredScrollPositionFromOffset(offset: number): number {\n\t\tif (!this._computedIsNeeded) {\n\t\t\t// no need for a slider\n\t\t\treturn 0;\n\t\t}\n\n\t\tlet desiredSliderPosition = offset - this._arrowSize - this._computedSliderSize / 2;\n\t\treturn Math.round(desiredSliderPosition / this._computedSliderRatio);\n\t}\n\n\t/**\n\t * Compute a desired `scrollPosition` such that the slider moves by `delta`.\n\t */\n\tpublic getDesiredScrollPositionFromDelta(delta: number): number {\n\t\tif (!this._computedIsNeeded) {\n\t\t\t// no need for a slider\n\t\t\treturn 0;\n\t\t}\n\n\t\tlet desiredSliderPosition = this._computedSliderPosition + delta;\n\t\treturn Math.round(desiredSliderPosition / this._computedSliderRatio);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\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: T[], n: number = 0): T {\n\treturn array[array.length - (1 + n)];\n}\n\nexport function equals(one: T[], other: T[], itemEquals: (a: T, b: T) => boolean = (a, b) => a === b): boolean {\n\tif (one.length !== other.length) {\n\t\treturn false;\n\t}\n\n\tfor (let i = 0, len = one.length; i < len; i++) {\n\t\tif (!itemEquals(one[i], other[i])) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nexport function binarySearch(array: T[], key: T, comparator: (op1: T, op2: T) => number): number {\n\tlet low = 0,\n\t\thigh = array.length - 1;\n\n\twhile (low <= high) {\n\t\tlet mid = ((low + high) / 2) | 0;\n\t\tlet comp = comparator(array[mid], key);\n\t\tif (comp < 0) {\n\t\t\tlow = mid + 1;\n\t\t} else if (comp > 0) {\n\t\t\thigh = mid - 1;\n\t\t} else {\n\t\t\treturn mid;\n\t\t}\n\t}\n\treturn -(low + 1);\n}\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 findFirst(array: T[], p: (x: T) => boolean): number {\n\tlet low = 0, high = array.length;\n\tif (high === 0) {\n\t\treturn 0; // no children\n\t}\n\twhile (low < high) {\n\t\tlet mid = Math.floor((low + high) / 2);\n\t\tif (p(array[mid])) {\n\t\t\thigh = mid;\n\t\t} else {\n\t\t\tlow = mid + 1;\n\t\t}\n\t}\n\treturn low;\n}\n\n/**\n * Like `Array#sort` but always stable. Usually runs a little slower `than Array#sort`\n * so only use this when actually needing stable sort.\n */\nexport function mergeSort(data: T[], compare: (a: T, b: T) => number): T[] {\n\t_divideAndMerge(data, compare);\n\treturn data;\n}\n\nfunction _divideAndMerge(data: T[], compare: (a: T, b: T) => number): void {\n\tif (data.length <= 1) {\n\t\t// sorted\n\t\treturn;\n\t}\n\tconst p = (data.length / 2) | 0;\n\tconst left = data.slice(0, p);\n\tconst right = data.slice(p);\n\n\t_divideAndMerge(left, compare);\n\t_divideAndMerge(right, compare);\n\n\tlet leftIdx = 0;\n\tlet rightIdx = 0;\n\tlet i = 0;\n\twhile (leftIdx < left.length && rightIdx < right.length) {\n\t\tlet ret = compare(left[leftIdx], right[rightIdx]);\n\t\tif (ret <= 0) {\n\t\t\t// smaller_equal -> take left to preserve order\n\t\t\tdata[i++] = left[leftIdx++];\n\t\t} else {\n\t\t\t// greater -> take right\n\t\t\tdata[i++] = right[rightIdx++];\n\t\t}\n\t}\n\twhile (leftIdx < left.length) {\n\t\tdata[i++] = left[leftIdx++];\n\t}\n\twhile (rightIdx < right.length) {\n\t\tdata[i++] = right[rightIdx++];\n\t}\n}\n\nexport function groupBy(data: T[], compare: (a: T, b: T) => number): T[][] {\n\tconst result: T[][] = [];\n\tlet currentGroup: T[];\n\tfor (const element of data.slice(0).sort(compare)) {\n\t\tif (!currentGroup || compare(currentGroup[0], element) !== 0) {\n\t\t\tcurrentGroup = [element];\n\t\t\tresult.push(currentGroup);\n\t\t} else {\n\t\t\tcurrentGroup.push(element);\n\t\t}\n\t}\n\treturn result;\n}\n\n/**\n * Takes two *sorted* arrays and computes their delta (removed, added elements).\n * Finishes in `Math.min(before.length, after.length)` steps.\n * @param before\n * @param after\n * @param compare\n */\nexport function delta(before: T[], after: T[], compare: (a: T, b: T) => number) {\n\n\tconst removed: T[] = [];\n\tconst added: T[] = [];\n\n\tlet beforeIdx = 0;\n\tlet afterIdx = 0;\n\n\twhile (true) {\n\t\tif (beforeIdx === before.length) {\n\t\t\tadded.push(...after.slice(afterIdx));\n\t\t\tbreak;\n\t\t}\n\t\tif (afterIdx === after.length) {\n\t\t\tremoved.push(...before.slice(beforeIdx));\n\t\t\tbreak;\n\t\t}\n\n\t\tconst beforeElement = before[beforeIdx];\n\t\tconst afterElement = after[afterIdx];\n\t\tconst n = compare(beforeElement, afterElement);\n\t\tif (n === 0) {\n\t\t\t// equal\n\t\t\tbeforeIdx += 1;\n\t\t\tafterIdx += 1;\n\t\t} else if (n < 0) {\n\t\t\t// beforeElement is smaller -> before element removed\n\t\t\tremoved.push(beforeElement);\n\t\t\tbeforeIdx += 1;\n\t\t} else if (n > 0) {\n\t\t\t// beforeElement is greater -> after element added\n\t\t\tadded.push(afterElement);\n\t\t\tafterIdx += 1;\n\t\t}\n\t}\n\n\treturn { removed, added };\n}\n\n/**\n * Returns the top N elements from the array.\n *\n * Faster than sorting the entire array when the array is a lot larger than N.\n *\n * @param array The unsorted array.\n * @param compare A sort function for the elements.\n * @param n The number of elements to return.\n * @return The first n elemnts from array when sorted with compare.\n */\nexport function top(array: T[], compare: (a: T, b: T) => number, n: number): T[] {\n\tif (n === 0) {\n\t\treturn [];\n\t}\n\tconst result = array.slice(0, n).sort(compare);\n\tfor (let i = n, m = array.length; i < m; i++) {\n\t\tconst element = array[i];\n\t\tif (compare(element, result[n - 1]) < 0) {\n\t\t\tresult.pop();\n\t\t\tconst j = findFirst(result, e => compare(element, e) < 0);\n\t\t\tresult.splice(j, 0, element);\n\t\t}\n\t}\n\treturn result;\n}\n\n/**\n * @returns a new array with all undefined or null values removed. The original array is not modified at all.\n */\nexport function coalesce(array: T[]): T[] {\n\tif (!array) {\n\t\treturn array;\n\t}\n\n\treturn array.filter(e => !!e);\n}\n\n/**\n * Moves the element in the array for the provided positions.\n */\nexport function move(array: any[], from: number, to: number): void {\n\tarray.splice(to, 0, array.splice(from, 1)[0]);\n}\n\n/**\n * @returns {{false}} if the provided object is an array\n * \tand not empty.\n */\nexport function isFalsyOrEmpty(obj: any): boolean {\n\treturn !Array.isArray(obj) || (>obj).length === 0;\n}\n\n/**\n * Removes duplicates from the given array. The optional keyFn allows to specify\n * how elements are checked for equalness by returning a unique string for each.\n */\nexport function distinct(array: T[], keyFn?: (t: T) => string): T[] {\n\tif (!keyFn) {\n\t\treturn array.filter((element, position) => {\n\t\t\treturn array.indexOf(element) === position;\n\t\t});\n\t}\n\n\tconst seen: { [key: string]: boolean; } = Object.create(null);\n\treturn array.filter((elem) => {\n\t\tconst key = keyFn(elem);\n\t\tif (seen[key]) {\n\t\t\treturn false;\n\t\t}\n\n\t\tseen[key] = true;\n\n\t\treturn true;\n\t});\n}\n\nexport function uniqueFilter(keyFn: (t: T) => string): (t: T) => boolean {\n\tconst seen: { [key: string]: boolean; } = Object.create(null);\n\n\treturn element => {\n\t\tconst key = keyFn(element);\n\n\t\tif (seen[key]) {\n\t\t\treturn false;\n\t\t}\n\n\t\tseen[key] = true;\n\t\treturn true;\n\t};\n}\n\nexport function firstIndex(array: T[], fn: (item: T) => boolean): number {\n\tfor (let i = 0; i < array.length; i++) {\n\t\tconst element = array[i];\n\n\t\tif (fn(element)) {\n\t\t\treturn i;\n\t\t}\n\t}\n\n\treturn -1;\n}\n\nexport function first(array: T[], fn: (item: T) => boolean, notFoundValue: T = null): T {\n\tconst index = firstIndex(array, fn);\n\treturn index < 0 ? notFoundValue : array[index];\n}\n\nexport function commonPrefixLength(one: T[], other: T[], equals: (a: T, b: T) => boolean = (a, b) => a === b): number {\n\tlet result = 0;\n\n\tfor (let i = 0, len = Math.min(one.length, other.length); i < len && equals(one[i], other[i]); i++) {\n\t\tresult++;\n\t}\n\n\treturn result;\n}\n\nexport function flatten(arr: T[][]): T[] {\n\treturn arr.reduce((r, v) => r.concat(v), []);\n}\n\nexport function range(to: number, from = 0): number[] {\n\tconst result: number[] = [];\n\n\tfor (let i = from; i < to; i++) {\n\t\tresult.push(i);\n\t}\n\n\treturn result;\n}\n\nexport function fill(num: number, valueFn: () => T, arr: T[] = []): T[] {\n\tfor (let i = 0; i < num; i++) {\n\t\tarr[i] = valueFn();\n\t}\n\n\treturn arr;\n}\n\nexport function index(array: T[], indexer: (t: T) => string): { [key: string]: T; };\nexport function index(array: T[], indexer: (t: T) => string, merger?: (t: T, r: R) => R): { [key: string]: R; };\nexport function index(array: T[], indexer: (t: T) => string, merger: (t: T, r: R) => R = t => t as any): { [key: string]: R; } {\n\treturn array.reduce((r, t) => {\n\t\tconst key = indexer(t);\n\t\tr[key] = merger(t, r[key]);\n\t\treturn r;\n\t}, Object.create(null));\n}\n\n/**\n * Inserts an element into an array. Returns a function which, when\n * called, will remove that element from the array.\n */\nexport function insert(array: T[], element: T): () => void {\n\tarray.push(element);\n\n\treturn () => {\n\t\tconst index = array.indexOf(element);\n\t\tif (index > -1) {\n\t\t\tarray.splice(index, 1);\n\t\t}\n\t};\n}\n\n/**\n * Insert `insertArr` inside `taget` at `insertIndex`.\n * Please don't touch unless you understand https://jsperf.com/inserting-an-array-within-an-array\n */\nexport function arrayInsert(target: T[], insertIndex: number, insertArr: T[]): T[] {\n\tconst before = target.slice(0, insertIndex);\n\tconst after = target.slice(insertIndex);\n\treturn before.concat(insertArr, after);\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'use strict';\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?: any, message?: string) {\n\tif (!value || value === null) {\n\t\tthrow new Error(message ? 'Assertion failed (' + message + ')' : 'Assertion Failed');\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\n\n/**\n * An interface for a JavaScript object that\n * acts a dictionary. The keys are strings.\n */\nexport interface IStringDictionary {\n\t[name: string]: V;\n}\n\n/**\n * An interface for a JavaScript object that\n * acts a dictionary. The keys are numbers.\n */\nexport interface INumberDictionary {\n\t[idx: number]: V;\n}\n\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Returns an array which contains all values that reside\n * in the given set.\n */\nexport function values(from: IStringDictionary | INumberDictionary): T[] {\n\tconst result: T[] = [];\n\tfor (var key in from) {\n\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\tresult.push(from[key]);\n\t\t}\n\t}\n\treturn result;\n}\n\nexport function size(from: IStringDictionary | INumberDictionary): number {\n\tlet count = 0;\n\tfor (var key in from) {\n\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\tcount += 1;\n\t\t}\n\t}\n\treturn count;\n}\n\n/**\n * Iterates over each entry in the provided set. The iterator allows\n * to remove elements and will stop when the callback returns {{false}}.\n */\nexport function forEach(from: IStringDictionary | INumberDictionary, callback: (entry: { key: any; value: T; }, remove: Function) => any): void {\n\tfor (let key in from) {\n\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\tconst result = callback({ key: key, value: from[key] }, function () {\n\t\t\t\tdelete from[key];\n\t\t\t});\n\t\t\tif (result === false) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Removes an element from the dictionary. Returns {{false}} if the property\n * does not exists.\n */\nexport function remove(from: IStringDictionary | INumberDictionary, key: string): boolean {\n\tif (!hasOwnProperty.call(from, key)) {\n\t\treturn false;\n\t}\n\tdelete from[key];\n\treturn true;\n}\n\n/**\n * Groups the collection into a dictionary based on the provided\n * group function.\n */\nexport function groupBy(data: T[], groupFn: (element: T) => string): IStringDictionary {\n\tconst result: IStringDictionary = Object.create(null);\n\tfor (const element of data) {\n\t\tconst key = groupFn(element);\n\t\tlet target = result[key];\n\t\tif (!target) {\n\t\t\ttarget = result[key] = [];\n\t\t}\n\t\ttarget.push(element);\n\t}\n\treturn 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 *--------------------------------------------------------------------------------------------*/\n\nimport { CharCode } from 'vs/base/common/charCode';\n\nexport class RGBA {\n\t_rgbaBrand: void;\n\n\t/**\n\t * Red: integer in [0-255]\n\t */\n\tpublic readonly r: number;\n\t/**\n\t * Green: integer in [0-255]\n\t */\n\tpublic readonly g: number;\n\t/**\n\t * Blue: integer in [0-255]\n\t */\n\tpublic readonly b: number;\n\t/**\n\t * Alpha: integer in [0-255]\n\t */\n\tpublic readonly a: number;\n\n\tconstructor(r: number, g: number, b: number, a: number = 255) {\n\t\tthis.r = RGBA._clampInt_0_255(r);\n\t\tthis.g = RGBA._clampInt_0_255(g);\n\t\tthis.b = RGBA._clampInt_0_255(b);\n\t\tthis.a = RGBA._clampInt_0_255(a);\n\t}\n\n\tpublic static equals(a: RGBA, b: RGBA): boolean {\n\t\treturn (\n\t\t\ta.r === b.r\n\t\t\t&& a.g === b.g\n\t\t\t&& a.b === b.b\n\t\t\t&& a.a === b.a\n\t\t);\n\t}\n\n\tprivate static _clampInt_0_255(c: number): number {\n\t\tif (c < 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (c > 255) {\n\t\t\treturn 255;\n\t\t}\n\t\treturn c | 0;\n\t}\n}\n\n/**\n * http://en.wikipedia.org/wiki/HSL_color_space\n */\nexport class HSLA {\n\t_hslaBrand: void;\n\n\t/**\n\t * Hue: float in [0, 360]\n\t */\n\tpublic readonly h: number;\n\t/**\n\t * Saturation: float in [0, 1]\n\t */\n\tpublic readonly s: number;\n\t/**\n\t * Luminosity: float in [0, 1]\n\t */\n\tpublic readonly l: number;\n\t/**\n\t * Alpha: float in [0, 1]\n\t */\n\tpublic readonly a: number;\n\n\tconstructor(h: number, s: number, l: number, a: number) {\n\t\tthis.h = HSLA._clampFloat_0_360(h);\n\t\tthis.s = HSLA._clampFloat_0_1(s);\n\t\tthis.l = HSLA._clampFloat_0_1(l);\n\t\tthis.a = HSLA._clampFloat_0_1(a);\n\t}\n\n\tprivate static _clampFloat_0_360(hue: number): number {\n\t\tif (hue < 0) {\n\t\t\treturn 0.0;\n\t\t}\n\t\tif (hue > 360) {\n\t\t\treturn 360.0;\n\t\t}\n\t\treturn hue;\n\t}\n\n\tprivate static _clampFloat_0_1(n: number): number {\n\t\tif (n < 0) {\n\t\t\treturn 0.0;\n\t\t}\n\t\tif (n > 1) {\n\t\t\treturn 1.0;\n\t\t}\n\t\treturn n;\n\t}\n}\n\n/**\n * Converts an Hex color value to RGB.\n * returns r, g, and b are contained in the set [0, 255]\n * @param hex string (#RGB, #RGBA, #RRGGBB or #RRGGBBAA).\n */\nfunction hex2rgba(hex: string): RGBA {\n\tif (!hex) {\n\t\t// Invalid color\n\t\treturn null;\n\t}\n\tconst length = hex.length;\n\n\tif (length === 0) {\n\t\t// Invalid color\n\t\treturn null;\n\t}\n\n\tif (hex.charCodeAt(0) !== CharCode.Hash) {\n\t\t// Does not begin with a #\n\t\treturn null;\n\t}\n\n\tif (length === 7) {\n\t\t// #RRGGBB format\n\t\tconst r = 16 * _parseHexDigit(hex.charCodeAt(1)) + _parseHexDigit(hex.charCodeAt(2));\n\t\tconst g = 16 * _parseHexDigit(hex.charCodeAt(3)) + _parseHexDigit(hex.charCodeAt(4));\n\t\tconst b = 16 * _parseHexDigit(hex.charCodeAt(5)) + _parseHexDigit(hex.charCodeAt(6));\n\t\treturn new RGBA(r, g, b, 255);\n\t}\n\n\tif (length === 9) {\n\t\t// #RRGGBBAA format\n\t\tconst r = 16 * _parseHexDigit(hex.charCodeAt(1)) + _parseHexDigit(hex.charCodeAt(2));\n\t\tconst g = 16 * _parseHexDigit(hex.charCodeAt(3)) + _parseHexDigit(hex.charCodeAt(4));\n\t\tconst b = 16 * _parseHexDigit(hex.charCodeAt(5)) + _parseHexDigit(hex.charCodeAt(6));\n\t\tconst a = 16 * _parseHexDigit(hex.charCodeAt(7)) + _parseHexDigit(hex.charCodeAt(8));\n\t\treturn new RGBA(r, g, b, a);\n\t}\n\n\tif (length === 4) {\n\t\t// #RGB format\n\t\tconst r = _parseHexDigit(hex.charCodeAt(1));\n\t\tconst g = _parseHexDigit(hex.charCodeAt(2));\n\t\tconst b = _parseHexDigit(hex.charCodeAt(3));\n\t\treturn new RGBA(16 * r + r, 16 * g + g, 16 * b + b);\n\t}\n\n\tif (length === 5) {\n\t\t// #RGBA format\n\t\tconst r = _parseHexDigit(hex.charCodeAt(1));\n\t\tconst g = _parseHexDigit(hex.charCodeAt(2));\n\t\tconst b = _parseHexDigit(hex.charCodeAt(3));\n\t\tconst a = _parseHexDigit(hex.charCodeAt(4));\n\t\treturn new RGBA(16 * r + r, 16 * g + g, 16 * b + b, 16 * a + a);\n\t}\n\n\t// Invalid color\n\treturn null;\n}\n\nconst colorPattern = /^#[0-9A-Fa-f]{3,8}$/i;\n\nexport function isValidHexColor(hex: string): boolean {\n\treturn colorPattern.test(hex) && hex.length !== 6 && hex.length !== 8;\n}\n\nfunction _parseHexDigit(charCode: CharCode): number {\n\tswitch (charCode) {\n\t\tcase CharCode.Digit0: return 0;\n\t\tcase CharCode.Digit1: return 1;\n\t\tcase CharCode.Digit2: return 2;\n\t\tcase CharCode.Digit3: return 3;\n\t\tcase CharCode.Digit4: return 4;\n\t\tcase CharCode.Digit5: return 5;\n\t\tcase CharCode.Digit6: return 6;\n\t\tcase CharCode.Digit7: return 7;\n\t\tcase CharCode.Digit8: return 8;\n\t\tcase CharCode.Digit9: return 9;\n\t\tcase CharCode.a: return 10;\n\t\tcase CharCode.A: return 10;\n\t\tcase CharCode.b: return 11;\n\t\tcase CharCode.B: return 11;\n\t\tcase CharCode.c: return 12;\n\t\tcase CharCode.C: return 12;\n\t\tcase CharCode.d: return 13;\n\t\tcase CharCode.D: return 13;\n\t\tcase CharCode.e: return 14;\n\t\tcase CharCode.E: return 14;\n\t\tcase CharCode.f: return 15;\n\t\tcase CharCode.F: return 15;\n\t}\n\treturn 0;\n}\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 */\nfunction rgba2hsla(rgba: RGBA): HSLA {\n\tconst r = rgba.r / 255;\n\tconst g = rgba.g / 255;\n\tconst b = rgba.b / 255;\n\tconst a = rgba.a / 255;\n\n\tconst max = Math.max(r, g, b);\n\tconst min = Math.min(r, g, b);\n\tlet h = 0;\n\tlet s = 0;\n\tconst l = Math.round(((min + max) / 2) * 1000) / 1000;\n\tconst chroma = max - min;\n\n\tif (chroma > 0) {\n\t\ts = Math.min(Math.round((l <= 0.5 ? chroma / (2 * l) : chroma / (2 - (2 * l))) * 1000) / 1000, 1);\n\t\tswitch (max) {\n\t\t\tcase r: h = (g - b) / chroma + (g < b ? 6 : 0); break;\n\t\t\tcase g: h = (b - r) / chroma + 2; break;\n\t\t\tcase b: h = (r - g) / chroma + 4; break;\n\t\t}\n\t\th *= 60;\n\t\th = Math.round(h);\n\t}\n\treturn new HSLA(h, s, l, a);\n}\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 */\nfunction hsla2rgba(hsla: HSLA): RGBA {\n\tconst h = hsla.h / 360;\n\tconst s = Math.min(hsla.s, 1);\n\tconst l = Math.min(hsla.l, 1);\n\tconst a = hsla.a;\n\tlet r: number, g: number, b: number;\n\n\tif (s === 0) {\n\t\tr = g = b = l; // achromatic\n\t} else {\n\t\tconst q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n\t\tconst p = 2 * l - q;\n\t\tr = _hue2rgb(p, q, h + 1 / 3);\n\t\tg = _hue2rgb(p, q, h);\n\t\tb = _hue2rgb(p, q, h - 1 / 3);\n\t}\n\n\treturn new RGBA(Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), Math.round(a * 255));\n}\n\nfunction _hue2rgb(p: number, q: number, t: number) {\n\tif (t < 0) {\n\t\tt += 1;\n\t}\n\tif (t > 1) {\n\t\tt -= 1;\n\t}\n\tif (t < 1 / 6) {\n\t\treturn p + (q - p) * 6 * t;\n\t}\n\tif (t < 1 / 2) {\n\t\treturn q;\n\t}\n\tif (t < 2 / 3) {\n\t\treturn p + (q - p) * (2 / 3 - t) * 6;\n\t}\n\treturn p;\n}\n\nexport class Color {\n\n\tpublic static fromRGBA(rgba: RGBA): Color {\n\t\treturn new Color(rgba);\n\t}\n\n\t/**\n\t * Creates a color from a hex string (#RRGGBB or #RRGGBBAA).\n\t */\n\tpublic static fromHex(hex: string, parseErrorColor = Color.red): Color {\n\t\tlet rgba = hex2rgba(hex);\n\t\tif (rgba) {\n\t\t\treturn new Color(rgba);\n\t\t}\n\t\treturn parseErrorColor;\n\t}\n\n\tpublic static fromHSLA(hsla: HSLA): Color {\n\t\treturn new Color(hsla2rgba(hsla));\n\t}\n\n\tprivate readonly rgba: RGBA;\n\n\tprivate constructor(arg: RGBA) {\n\t\tthis.rgba = arg;\n\t}\n\n\tpublic equals(other: Color): boolean {\n\t\tif (!other) {\n\t\t\treturn false;\n\t\t}\n\t\treturn RGBA.equals(this.rgba, other.rgba);\n\t}\n\n\t/**\n\t * http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t * Returns the number in the set [0, 1]. O => Darkest Black. 1 => Lightest white.\n\t */\n\tpublic getLuminosity(): number {\n\t\tconst R = Color._luminosityFor(this.rgba.r);\n\t\tconst G = Color._luminosityFor(this.rgba.g);\n\t\tconst B = Color._luminosityFor(this.rgba.b);\n\t\tconst luminosity = 0.2126 * R + 0.7152 * G + 0.0722 * B;\n\t\treturn Math.round(luminosity * 10000) / 10000;\n\t}\n\n\tprivate static _luminosityFor(color: number): number {\n\t\tconst c = color / 255;\n\t\treturn (c <= 0.03928) ? c / 12.92 : Math.pow(((c + 0.055) / 1.055), 2.4);\n\t}\n\n\t/**\n\t * http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t * Returns the contrast ration number in the set [1, 21].\n\t */\n\tpublic getContrast(another: Color): number {\n\t\tconst lum1 = this.getLuminosity();\n\t\tconst lum2 = another.getLuminosity();\n\t\treturn lum1 > lum2 ? (lum1 + 0.05) / (lum2 + 0.05) : (lum2 + 0.05) / (lum1 + 0.05);\n\t}\n\n\t/**\n\t *\thttp://24ways.org/2010/calculating-color-contrast\n\t * Return 'true' if darker color otherwise 'false'\n\t */\n\tpublic isDarker(): boolean {\n\t\tconst yiq = (this.rgba.r * 299 + this.rgba.g * 587 + this.rgba.b * 114) / 1000;\n\t\treturn yiq < 128;\n\t}\n\n\t/**\n\t *\thttp://24ways.org/2010/calculating-color-contrast\n\t * Return 'true' if lighter color otherwise 'false'\n\t */\n\tpublic isLighter(): boolean {\n\t\tconst yiq = (this.rgba.r * 299 + this.rgba.g * 587 + this.rgba.b * 114) / 1000;\n\t\treturn yiq >= 128;\n\t}\n\n\tpublic isLighterThan(another: Color): boolean {\n\t\tconst lum1 = this.getLuminosity();\n\t\tconst lum2 = another.getLuminosity();\n\t\treturn lum1 > lum2;\n\t}\n\n\tpublic isDarkerThan(another: Color): boolean {\n\t\tconst lum1 = this.getLuminosity();\n\t\tconst lum2 = another.getLuminosity();\n\t\treturn lum1 < lum2;\n\t}\n\n\tpublic lighten(factor: number): Color {\n\t\tconst hsl = this.toHSLA();\n\t\tconst result = new HSLA(hsl.h, hsl.s, hsl.l + hsl.l * factor, hsl.a);\n\t\treturn new Color(hsla2rgba(result));\n\t}\n\n\tpublic darken(factor: number): Color {\n\t\tconst hsl = this.toHSLA();\n\t\tconst result = new HSLA(hsl.h, hsl.s, hsl.l - hsl.l * factor, hsl.a);\n\t\treturn new Color(hsla2rgba(result));\n\t}\n\n\tpublic transparent(factor: number): Color {\n\t\tconst p = this.rgba;\n\t\treturn new Color(new RGBA(p.r, p.g, p.b, Math.round(p.a * factor)));\n\t}\n\n\tpublic isTransparent(): boolean {\n\t\treturn this.rgba.a === 0;\n\t}\n\n\tpublic opposite(): Color {\n\t\treturn new Color(new RGBA(\n\t\t\t255 - this.rgba.r,\n\t\t\t255 - this.rgba.g,\n\t\t\t255 - this.rgba.b,\n\t\t\tthis.rgba.a\n\t\t));\n\t}\n\n\tpublic toString(): string {\n\t\tconst rgba = this.rgba;\n\t\tif (rgba.a === 255) {\n\t\t\treturn this.toRGBHex();\n\t\t}\n\t\treturn `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${+(rgba.a / 255).toFixed(2)})`;\n\t}\n\n\t/**\n\t * Prins the color as #RRGGBB\n\t */\n\tpublic toRGBHex(): string {\n\t\tconst rgba = this.rgba;\n\t\treturn `#${Color._toTwoDigitHex(rgba.r)}${Color._toTwoDigitHex(rgba.g)}${Color._toTwoDigitHex(rgba.b)}`;\n\t}\n\n\t/**\n\t * Prins the color as #RRGGBBAA\n\t * If 'compact' is set, colors without transparancy will be printed as #RRGGBB\n\t */\n\tpublic toRGBAHex(compact = false): string {\n\t\tconst rgba = this.rgba;\n\t\tif (compact && rgba.a === 0xFF) {\n\t\t\treturn this.toRGBHex();\n\t\t}\n\t\treturn `#${Color._toTwoDigitHex(rgba.r)}${Color._toTwoDigitHex(rgba.g)}${Color._toTwoDigitHex(rgba.b)}${Color._toTwoDigitHex(rgba.a)}`;\n\t}\n\n\tprivate static _toTwoDigitHex(n: number): string {\n\t\tlet r = n.toString(16);\n\t\tif (r.length !== 2) {\n\t\t\treturn '0' + r;\n\t\t}\n\t\treturn r;\n\t}\n\n\tpublic toHSLA(): HSLA {\n\t\treturn rgba2hsla(this.rgba);\n\t}\n\n\tpublic toRGBA(): RGBA {\n\t\treturn this.rgba;\n\t}\n\n\tpublic static getLighterColor(of: Color, relative: Color, factor?: number): Color {\n\t\tif (of.isLighterThan(relative)) {\n\t\t\treturn of;\n\t\t}\n\t\tfactor = factor ? factor : 0.5;\n\t\tconst lum1 = of.getLuminosity();\n\t\tconst lum2 = relative.getLuminosity();\n\t\tfactor = factor * (lum2 - lum1) / lum2;\n\t\treturn of.lighten(factor);\n\t}\n\n\tpublic static getDarkerColor(of: Color, relative: Color, factor?: number): Color {\n\t\tif (of.isDarkerThan(relative)) {\n\t\t\treturn of;\n\t\t}\n\t\tfactor = factor ? factor : 0.5;\n\t\tconst lum1 = of.getLuminosity();\n\t\tconst lum2 = relative.getLuminosity();\n\t\tfactor = factor * (lum1 - lum2) / lum1;\n\t\treturn of.darken(factor);\n\t}\n\n\tpublic static readonly white = new Color(new RGBA(255, 255, 255, 255));\n\tpublic static readonly black = new Color(new RGBA(0, 0, 0, 255));\n\tpublic static readonly red = new Color(new RGBA(255, 0, 0, 255));\n\tpublic static readonly blue = new Color(new RGBA(0, 0, 255, 255));\n\tpublic static readonly green = new Color(new RGBA(0, 255, 0, 255));\n\tpublic static readonly cyan = new Color(new RGBA(0, 255, 255, 255));\n\tpublic static readonly lightgrey = new Color(new RGBA(211, 211, 211, 255));\n\tpublic static readonly transparent = new Color(new RGBA(0, 0, 0, 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'use strict';\n\nexport function memoize(target: any, key: string, descriptor: any) {\n\tlet fnKey: string = null;\n\tlet fn: Function = null;\n\n\tif (typeof descriptor.value === 'function') {\n\t\tfnKey = 'value';\n\t\tfn = descriptor.value;\n\t} else if (typeof descriptor.get === 'function') {\n\t\tfnKey = 'get';\n\t\tfn = descriptor.get;\n\t}\n\n\tif (!fn) {\n\t\tthrow new Error('not supported');\n\t}\n\n\tconst memoizeKey = `$memoize$${key}`;\n\n\tdescriptor[fnKey] = function (...args: any[]) {\n\t\tif (!this.hasOwnProperty(memoizeKey)) {\n\t\t\tObject.defineProperty(this, memoizeKey, {\n\t\t\t\tconfigurable: false,\n\t\t\t\tenumerable: false,\n\t\t\t\twritable: false,\n\t\t\t\tvalue: fn.apply(this, args)\n\t\t\t});\n\t\t}\n\n\t\treturn this[memoizeKey];\n\t};\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'use strict';\n\nexport const DifferenceType = {\n\tAdd: 0,\n\tRemove: 1,\n\tChange: 2\n};\n\n/**\n * Represents information about a specific difference between two sequences.\n */\nexport class DiffChange {\n\n\t/**\n\t * The position of the first element in the original sequence which\n\t * this change affects.\n\t */\n\tpublic originalStart: number;\n\n\t/**\n\t * The number of elements from the original sequence which were\n\t * affected.\n\t */\n\tpublic originalLength: number;\n\n\t/**\n\t * The position of the first element in the modified sequence which\n\t * this change affects.\n\t */\n\tpublic modifiedStart: number;\n\n\t/**\n\t * The number of elements from the modified sequence which were\n\t * affected (added).\n\t */\n\tpublic modifiedLength: number;\n\n\t/**\n\t * Constructs a new DiffChange with the given sequence information\n\t * and content.\n\t */\n\tconstructor(originalStart: number, originalLength: number, modifiedStart: number, modifiedLength: number) {\n\t\t//Debug.Assert(originalLength > 0 || modifiedLength > 0, \"originalLength and modifiedLength cannot both be <= 0\");\n\t\tthis.originalStart = originalStart;\n\t\tthis.originalLength = originalLength;\n\t\tthis.modifiedStart = modifiedStart;\n\t\tthis.modifiedLength = modifiedLength;\n\t}\n\n\t/**\n\t * The type of difference.\n\t */\n\tpublic getChangeType() {\n\t\tif (this.originalLength === 0) {\n\t\t\treturn DifferenceType.Add;\n\t\t} else if (this.modifiedLength === 0) {\n\t\t\treturn DifferenceType.Remove;\n\t\t} else {\n\t\t\treturn DifferenceType.Change;\n\t\t}\n\t}\n\n\t/**\n\t * The end point (exclusive) of the change in the original sequence.\n\t */\n\tpublic getOriginalEnd() {\n\t\treturn this.originalStart + this.originalLength;\n\t}\n\n\t/**\n\t * The end point (exclusive) of the change in the modified sequence.\n\t */\n\tpublic getModifiedEnd() {\n\t\treturn this.modifiedStart + this.modifiedLength;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { DiffChange } from 'vs/base/common/diff/diffChange';\n\n\nfunction createStringSequence(a: string): ISequence {\n\n\treturn {\n\t\tgetLength() { return a.length; },\n\t\tgetElementHash(pos: number) { return a[pos]; }\n\t};\n}\n\nexport function stringDiff(original: string, modified: string): IDiffChange[] {\n\treturn new LcsDiff(createStringSequence(original), createStringSequence(modified)).ComputeDiff();\n}\n\n\nexport interface ISequence {\n\tgetLength(): number;\n\tgetElementHash(index: number): string;\n}\n\nexport interface IDiffChange {\n\t/**\n\t * The position of the first element in the original sequence which\n\t * this change affects.\n\t */\n\toriginalStart: number;\n\n\t/**\n\t * The number of elements from the original sequence which were\n\t * affected.\n\t */\n\toriginalLength: number;\n\n\t/**\n\t * The position of the first element in the modified sequence which\n\t * this change affects.\n\t */\n\tmodifiedStart: number;\n\n\t/**\n\t * The number of elements from the modified sequence which were\n\t * affected (added).\n\t */\n\tmodifiedLength: number;\n}\n\nexport interface IContinueProcessingPredicate {\n\t(furthestOriginalIndex: number, originalSequence: ISequence, matchLengthOfLongest: number): boolean;\n}\n\n//\n// The code below has been ported from a C# implementation in VS\n//\n\nexport class Debug {\n\n\tpublic static Assert(condition: boolean, message: string): void {\n\t\tif (!condition) {\n\t\t\tthrow new Error(message);\n\t\t}\n\t}\n}\n\nexport class MyArray {\n\t/**\n\t * Copies a range of elements from an Array starting at the specified source index and pastes\n\t * them to another Array starting at the specified destination index. The length and the indexes\n\t * are specified as 64-bit integers.\n\t * sourceArray:\n\t *\t\tThe Array that contains the data to copy.\n\t * sourceIndex:\n\t *\t\tA 64-bit integer that represents the index in the sourceArray at which copying begins.\n\t * destinationArray:\n\t *\t\tThe Array that receives the data.\n\t * destinationIndex:\n\t *\t\tA 64-bit integer that represents the index in the destinationArray at which storing begins.\n\t * length:\n\t *\t\tA 64-bit integer that represents the number of elements to copy.\n\t */\n\tpublic static Copy(sourceArray: any[], sourceIndex: number, destinationArray: any[], destinationIndex: number, length: number) {\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tdestinationArray[destinationIndex + i] = sourceArray[sourceIndex + i];\n\t\t}\n\t}\n}\n\n//*****************************************************************************\n// LcsDiff.cs\n//\n// An implementation of the difference algorithm described in\n// \"An O(ND) Difference Algorithm and its letiations\" by Eugene W. Myers\n//\n// Copyright (C) 2008 Microsoft Corporation @minifier_do_not_preserve\n//*****************************************************************************\n\n// Our total memory usage for storing history is (worst-case):\n// 2 * [(MaxDifferencesHistory + 1) * (MaxDifferencesHistory + 1) - 1] * sizeof(int)\n// 2 * [1448*1448 - 1] * 4 = 16773624 = 16MB\nlet MaxDifferencesHistory = 1447;\n//let MaxDifferencesHistory = 100;\n\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 * MarktNextChange() 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\tprivate m_changes: DiffChange[];\n\tprivate m_originalStart: number;\n\tprivate m_modifiedStart: number;\n\tprivate m_originalCount: number;\n\tprivate m_modifiedCount: number;\n\n\t/**\n\t * Constructs a new DiffChangeHelper for the given DiffSequences.\n\t */\n\tconstructor() {\n\t\tthis.m_changes = [];\n\t\tthis.m_originalStart = Number.MAX_VALUE;\n\t\tthis.m_modifiedStart = Number.MAX_VALUE;\n\t\tthis.m_originalCount = 0;\n\t\tthis.m_modifiedCount = 0;\n\t}\n\n\t/**\n\t * Marks the beginning of the next change in the set of differences.\n\t */\n\tpublic MarkNextChange(): void {\n\t\t// Only add to the list if there is something to add\n\t\tif (this.m_originalCount > 0 || this.m_modifiedCount > 0) {\n\t\t\t// Add the new change to our list\n\t\t\tthis.m_changes.push(new DiffChange(this.m_originalStart, this.m_originalCount,\n\t\t\t\tthis.m_modifiedStart, this.m_modifiedCount));\n\t\t}\n\n\t\t// Reset for the next change\n\t\tthis.m_originalCount = 0;\n\t\tthis.m_modifiedCount = 0;\n\t\tthis.m_originalStart = Number.MAX_VALUE;\n\t\tthis.m_modifiedStart = Number.MAX_VALUE;\n\t}\n\n\t/**\n\t * Adds the original element at the given position to the elements\n\t * affected by the current change. The modified index gives context\n\t * to the change position with respect to the original sequence.\n\t * @param originalIndex The index of the original element to add.\n\t * @param modifiedIndex The index of the modified element that provides corresponding position in the modified sequence.\n\t */\n\tpublic AddOriginalElement(originalIndex: number, modifiedIndex: number) {\n\t\t// The 'true' start index is the smallest of the ones we've seen\n\t\tthis.m_originalStart = Math.min(this.m_originalStart, originalIndex);\n\t\tthis.m_modifiedStart = Math.min(this.m_modifiedStart, modifiedIndex);\n\n\t\tthis.m_originalCount++;\n\t}\n\n\t/**\n\t * Adds the modified element at the given position to the elements\n\t * affected by the current change. The original index gives context\n\t * to the change position with respect to the modified sequence.\n\t * @param originalIndex The index of the original element that provides corresponding position in the original sequence.\n\t * @param modifiedIndex The index of the modified element to add.\n\t */\n\tpublic AddModifiedElement(originalIndex: number, modifiedIndex: number): void {\n\t\t// The 'true' start index is the smallest of the ones we've seen\n\t\tthis.m_originalStart = Math.min(this.m_originalStart, originalIndex);\n\t\tthis.m_modifiedStart = Math.min(this.m_modifiedStart, modifiedIndex);\n\n\t\tthis.m_modifiedCount++;\n\t}\n\n\t/**\n\t * Retrieves all of the changes marked by the class.\n\t */\n\tpublic getChanges(): DiffChange[] {\n\t\tif (this.m_originalCount > 0 || this.m_modifiedCount > 0) {\n\t\t\t// Finish up on whatever is left\n\t\t\tthis.MarkNextChange();\n\t\t}\n\n\t\treturn this.m_changes;\n\t}\n\n\t/**\n\t * Retrieves all of the changes marked by the class in the reverse order\n\t */\n\tpublic getReverseChanges(): DiffChange[] {\n\t\tif (this.m_originalCount > 0 || this.m_modifiedCount > 0) {\n\t\t\t// Finish up on whatever is left\n\t\t\tthis.MarkNextChange();\n\t\t}\n\n\t\tthis.m_changes.reverse();\n\t\treturn this.m_changes;\n\t}\n\n}\n\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * An implementation of the difference algorithm described in\n * \"An O(ND) Difference Algorithm and its letiations\" by Eugene W. Myers\n */\nexport class LcsDiff {\n\n\tprivate OriginalSequence: ISequence;\n\tprivate ModifiedSequence: ISequence;\n\tprivate ContinueProcessingPredicate: IContinueProcessingPredicate;\n\n\tprivate m_originalIds: number[];\n\tprivate m_modifiedIds: number[];\n\tprivate m_forwardHistory: number[][];\n\tprivate m_reverseHistory: number[][];\n\n\t/**\n\t * Constructs the DiffFinder\n\t */\n\tconstructor(originalSequence: ISequence, newSequence: ISequence, continueProcessingPredicate: IContinueProcessingPredicate = null) {\n\t\tthis.OriginalSequence = originalSequence;\n\t\tthis.ModifiedSequence = newSequence;\n\t\tthis.ContinueProcessingPredicate = continueProcessingPredicate;\n\t\tthis.m_originalIds = [];\n\t\tthis.m_modifiedIds = [];\n\n\t\tthis.m_forwardHistory = [];\n\t\tthis.m_reverseHistory = [];\n\n\t\tthis.ComputeUniqueIdentifiers();\n\t}\n\n\tprivate ComputeUniqueIdentifiers(): void {\n\t\tlet originalSequenceLength = this.OriginalSequence.getLength();\n\t\tlet modifiedSequenceLength = this.ModifiedSequence.getLength();\n\t\tthis.m_originalIds = new Array(originalSequenceLength);\n\t\tthis.m_modifiedIds = new Array(modifiedSequenceLength);\n\n\t\t// Create a new hash table for unique elements from the original\n\t\t// sequence.\n\t\tlet hashTable: { [key: string]: number; } = {};\n\t\tlet currentUniqueId = 1;\n\t\tlet i: number;\n\n\t\t// Fill up the hash table for unique elements\n\t\tfor (i = 0; i < originalSequenceLength; i++) {\n\t\t\tlet originalElementHash = this.OriginalSequence.getElementHash(i);\n\t\t\tif (!hasOwnProperty.call(hashTable, originalElementHash)) {\n\t\t\t\t// No entry in the hashtable so this is a new unique element.\n\t\t\t\t// Assign the element a new unique identifier and add it to the\n\t\t\t\t// hash table\n\t\t\t\tthis.m_originalIds[i] = currentUniqueId++;\n\t\t\t\thashTable[originalElementHash] = this.m_originalIds[i];\n\t\t\t} else {\n\t\t\t\tthis.m_originalIds[i] = hashTable[originalElementHash];\n\t\t\t}\n\t\t}\n\n\t\t// Now match up modified elements\n\t\tfor (i = 0; i < modifiedSequenceLength; i++) {\n\t\t\tlet modifiedElementHash = this.ModifiedSequence.getElementHash(i);\n\t\t\tif (!hasOwnProperty.call(hashTable, modifiedElementHash)) {\n\t\t\t\tthis.m_modifiedIds[i] = currentUniqueId++;\n\t\t\t\thashTable[modifiedElementHash] = this.m_modifiedIds[i];\n\t\t\t} else {\n\t\t\t\tthis.m_modifiedIds[i] = hashTable[modifiedElementHash];\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate ElementsAreEqual(originalIndex: number, newIndex: number): boolean {\n\t\treturn this.m_originalIds[originalIndex] === this.m_modifiedIds[newIndex];\n\t}\n\n\tpublic ComputeDiff(): IDiffChange[] {\n\t\treturn this._ComputeDiff(0, this.OriginalSequence.getLength() - 1, 0, this.ModifiedSequence.getLength() - 1);\n\t}\n\n\t/**\n\t * Computes the differences between the original and modified input\n\t * sequences on the bounded range.\n\t * @returns An array of the differences between the two input sequences.\n\t */\n\tprivate _ComputeDiff(originalStart: number, originalEnd: number, modifiedStart: number, modifiedEnd: number): DiffChange[] {\n\t\tlet quitEarlyArr = [false];\n\t\treturn this.ComputeDiffRecursive(originalStart, originalEnd, modifiedStart, modifiedEnd, quitEarlyArr);\n\t}\n\n\t/**\n\t * Private helper method which computes the differences on the bounded range\n\t * recursively.\n\t * @returns An array of the differences between the two input sequences.\n\t */\n\tprivate ComputeDiffRecursive(originalStart: number, originalEnd: number, modifiedStart: number, modifiedEnd: number, quitEarlyArr: boolean[]): DiffChange[] {\n\t\tquitEarlyArr[0] = false;\n\n\t\t// Find the start of the differences\n\t\twhile (originalStart <= originalEnd && modifiedStart <= modifiedEnd && this.ElementsAreEqual(originalStart, modifiedStart)) {\n\t\t\toriginalStart++;\n\t\t\tmodifiedStart++;\n\t\t}\n\n\t\t// Find the end of the differences\n\t\twhile (originalEnd >= originalStart && modifiedEnd >= modifiedStart && this.ElementsAreEqual(originalEnd, modifiedEnd)) {\n\t\t\toriginalEnd--;\n\t\t\tmodifiedEnd--;\n\t\t}\n\n\t\t// In the special case where we either have all insertions or all deletions or the sequences are identical\n\t\tif (originalStart > originalEnd || modifiedStart > modifiedEnd) {\n\t\t\tlet changes: DiffChange[];\n\n\t\t\tif (modifiedStart <= modifiedEnd) {\n\t\t\t\tDebug.Assert(originalStart === originalEnd + 1, 'originalStart should only be one more than originalEnd');\n\n\t\t\t\t// All insertions\n\t\t\t\tchanges = [\n\t\t\t\t\tnew DiffChange(originalStart, 0, modifiedStart, modifiedEnd - modifiedStart + 1)\n\t\t\t\t];\n\t\t\t} else if (originalStart <= originalEnd) {\n\t\t\t\tDebug.Assert(modifiedStart === modifiedEnd + 1, 'modifiedStart should only be one more than modifiedEnd');\n\n\t\t\t\t// All deletions\n\t\t\t\tchanges = [\n\t\t\t\t\tnew DiffChange(originalStart, originalEnd - originalStart + 1, modifiedStart, 0)\n\t\t\t\t];\n\t\t\t} else {\n\t\t\t\tDebug.Assert(originalStart === originalEnd + 1, 'originalStart should only be one more than originalEnd');\n\t\t\t\tDebug.Assert(modifiedStart === modifiedEnd + 1, 'modifiedStart should only be one more than modifiedEnd');\n\n\t\t\t\t// Identical sequences - No differences\n\t\t\t\tchanges = [];\n\t\t\t}\n\n\t\t\treturn changes;\n\t\t}\n\n\t\t// This problem can be solved using the Divide-And-Conquer technique.\n\t\tlet midOriginalArr = [0], midModifiedArr = [0];\n\t\tlet result = this.ComputeRecursionPoint(originalStart, originalEnd, modifiedStart, modifiedEnd, midOriginalArr, midModifiedArr, quitEarlyArr);\n\n\t\tlet midOriginal = midOriginalArr[0];\n\t\tlet midModified = midModifiedArr[0];\n\n\t\tif (result !== null) {\n\t\t\t// Result is not-null when there was enough memory to compute the changes while\n\t\t\t// searching for the recursion point\n\t\t\treturn result;\n\t\t} else if (!quitEarlyArr[0]) {\n\t\t\t// We can break the problem down recursively by finding the changes in the\n\t\t\t// First Half: (originalStart, modifiedStart) to (midOriginal, midModified)\n\t\t\t// Second Half: (midOriginal + 1, minModified + 1) to (originalEnd, modifiedEnd)\n\t\t\t// NOTE: ComputeDiff() is inclusive, therefore the second range starts on the next point\n\n\t\t\tlet leftChanges = this.ComputeDiffRecursive(originalStart, midOriginal, modifiedStart, midModified, quitEarlyArr);\n\t\t\tlet rightChanges: DiffChange[] = [];\n\n\t\t\tif (!quitEarlyArr[0]) {\n\t\t\t\trightChanges = this.ComputeDiffRecursive(midOriginal + 1, originalEnd, midModified + 1, modifiedEnd, quitEarlyArr);\n\t\t\t} else {\n\t\t\t\t// We did't have time to finish the first half, so we don't have time to compute this half.\n\t\t\t\t// Consider the entire rest of the sequence different.\n\t\t\t\trightChanges = [\n\t\t\t\t\tnew DiffChange(midOriginal + 1, originalEnd - (midOriginal + 1) + 1, midModified + 1, modifiedEnd - (midModified + 1) + 1)\n\t\t\t\t];\n\t\t\t}\n\n\t\t\treturn this.ConcatenateChanges(leftChanges, rightChanges);\n\t\t}\n\n\t\t// If we hit here, we quit early, and so can't return anything meaningful\n\t\treturn [\n\t\t\tnew DiffChange(originalStart, originalEnd - originalStart + 1, modifiedStart, modifiedEnd - modifiedStart + 1)\n\t\t];\n\t}\n\n\tprivate WALKTRACE(diagonalForwardBase: number, diagonalForwardStart: number, diagonalForwardEnd: number, diagonalForwardOffset: number,\n\t\tdiagonalReverseBase: number, diagonalReverseStart: number, diagonalReverseEnd: number, diagonalReverseOffset: number,\n\t\tforwardPoints: number[], reversePoints: number[],\n\t\toriginalIndex: number, originalEnd: number, midOriginalArr: number[],\n\t\tmodifiedIndex: number, modifiedEnd: number, midModifiedArr: number[],\n\t\tdeltaIsEven: boolean, quitEarlyArr: boolean[]): DiffChange[] {\n\t\tlet forwardChanges: DiffChange[] = null, reverseChanges: DiffChange[] = null;\n\n\t\t// First, walk backward through the forward diagonals history\n\t\tlet changeHelper = new DiffChangeHelper();\n\t\tlet diagonalMin = diagonalForwardStart;\n\t\tlet diagonalMax = diagonalForwardEnd;\n\t\tlet diagonalRelative = (midOriginalArr[0] - midModifiedArr[0]) - diagonalForwardOffset;\n\t\tlet lastOriginalIndex = Number.MIN_VALUE;\n\t\tlet historyIndex = this.m_forwardHistory.length - 1;\n\t\tlet diagonal: number;\n\n\t\tdo {\n\t\t\t// Get the diagonal index from the relative diagonal number\n\t\t\tdiagonal = diagonalRelative + diagonalForwardBase;\n\n\t\t\t// Figure out where we came from\n\t\t\tif (diagonal === diagonalMin || (diagonal < diagonalMax && forwardPoints[diagonal - 1] < forwardPoints[diagonal + 1])) {\n\t\t\t\t// Vertical line (the element is an insert)\n\t\t\t\toriginalIndex = forwardPoints[diagonal + 1];\n\t\t\t\tmodifiedIndex = originalIndex - diagonalRelative - diagonalForwardOffset;\n\t\t\t\tif (originalIndex < lastOriginalIndex) {\n\t\t\t\t\tchangeHelper.MarkNextChange();\n\t\t\t\t}\n\t\t\t\tlastOriginalIndex = originalIndex;\n\t\t\t\tchangeHelper.AddModifiedElement(originalIndex + 1, modifiedIndex);\n\t\t\t\tdiagonalRelative = (diagonal + 1) - diagonalForwardBase; //Setup for the next iteration\n\t\t\t} else {\n\t\t\t\t// Horizontal line (the element is a deletion)\n\t\t\t\toriginalIndex = forwardPoints[diagonal - 1] + 1;\n\t\t\t\tmodifiedIndex = originalIndex - diagonalRelative - diagonalForwardOffset;\n\t\t\t\tif (originalIndex < lastOriginalIndex) {\n\t\t\t\t\tchangeHelper.MarkNextChange();\n\t\t\t\t}\n\t\t\t\tlastOriginalIndex = originalIndex - 1;\n\t\t\t\tchangeHelper.AddOriginalElement(originalIndex, modifiedIndex + 1);\n\t\t\t\tdiagonalRelative = (diagonal - 1) - diagonalForwardBase; //Setup for the next iteration\n\t\t\t}\n\n\t\t\tif (historyIndex >= 0) {\n\t\t\t\tforwardPoints = this.m_forwardHistory[historyIndex];\n\t\t\t\tdiagonalForwardBase = forwardPoints[0]; //We stored this in the first spot\n\t\t\t\tdiagonalMin = 1;\n\t\t\t\tdiagonalMax = forwardPoints.length - 1;\n\t\t\t}\n\t\t} while (--historyIndex >= -1);\n\n\t\t// Ironically, we get the forward changes as the reverse of the\n\t\t// order we added them since we technically added them backwards\n\t\tforwardChanges = changeHelper.getReverseChanges();\n\n\t\tif (quitEarlyArr[0]) {\n\t\t\t// TODO: Calculate a partial from the reverse diagonals.\n\t\t\t// For now, just assume everything after the midOriginal/midModified point is a diff\n\n\t\t\tlet originalStartPoint = midOriginalArr[0] + 1;\n\t\t\tlet modifiedStartPoint = midModifiedArr[0] + 1;\n\n\t\t\tif (forwardChanges !== null && forwardChanges.length > 0) {\n\t\t\t\tlet lastForwardChange = forwardChanges[forwardChanges.length - 1];\n\t\t\t\toriginalStartPoint = Math.max(originalStartPoint, lastForwardChange.getOriginalEnd());\n\t\t\t\tmodifiedStartPoint = Math.max(modifiedStartPoint, lastForwardChange.getModifiedEnd());\n\t\t\t}\n\n\t\t\treverseChanges = [\n\t\t\t\tnew DiffChange(originalStartPoint, originalEnd - originalStartPoint + 1,\n\t\t\t\t\tmodifiedStartPoint, modifiedEnd - modifiedStartPoint + 1)\n\t\t\t];\n\t\t} else {\n\t\t\t// Now walk backward through the reverse diagonals history\n\t\t\tchangeHelper = new DiffChangeHelper();\n\t\t\tdiagonalMin = diagonalReverseStart;\n\t\t\tdiagonalMax = diagonalReverseEnd;\n\t\t\tdiagonalRelative = (midOriginalArr[0] - midModifiedArr[0]) - diagonalReverseOffset;\n\t\t\tlastOriginalIndex = Number.MAX_VALUE;\n\t\t\thistoryIndex = (deltaIsEven) ? this.m_reverseHistory.length - 1 : this.m_reverseHistory.length - 2;\n\n\t\t\tdo {\n\t\t\t\t// Get the diagonal index from the relative diagonal number\n\t\t\t\tdiagonal = diagonalRelative + diagonalReverseBase;\n\n\t\t\t\t// Figure out where we came from\n\t\t\t\tif (diagonal === diagonalMin || (diagonal < diagonalMax && reversePoints[diagonal - 1] >= reversePoints[diagonal + 1])) {\n\t\t\t\t\t// Horizontal line (the element is a deletion))\n\t\t\t\t\toriginalIndex = reversePoints[diagonal + 1] - 1;\n\t\t\t\t\tmodifiedIndex = originalIndex - diagonalRelative - diagonalReverseOffset;\n\t\t\t\t\tif (originalIndex > lastOriginalIndex) {\n\t\t\t\t\t\tchangeHelper.MarkNextChange();\n\t\t\t\t\t}\n\t\t\t\t\tlastOriginalIndex = originalIndex + 1;\n\t\t\t\t\tchangeHelper.AddOriginalElement(originalIndex + 1, modifiedIndex + 1);\n\t\t\t\t\tdiagonalRelative = (diagonal + 1) - diagonalReverseBase; //Setup for the next iteration\n\t\t\t\t} else {\n\t\t\t\t\t// Vertical line (the element is an insertion)\n\t\t\t\t\toriginalIndex = reversePoints[diagonal - 1];\n\t\t\t\t\tmodifiedIndex = originalIndex - diagonalRelative - diagonalReverseOffset;\n\t\t\t\t\tif (originalIndex > lastOriginalIndex) {\n\t\t\t\t\t\tchangeHelper.MarkNextChange();\n\t\t\t\t\t}\n\t\t\t\t\tlastOriginalIndex = originalIndex;\n\t\t\t\t\tchangeHelper.AddModifiedElement(originalIndex + 1, modifiedIndex + 1);\n\t\t\t\t\tdiagonalRelative = (diagonal - 1) - diagonalReverseBase; //Setup for the next iteration\n\t\t\t\t}\n\n\t\t\t\tif (historyIndex >= 0) {\n\t\t\t\t\treversePoints = this.m_reverseHistory[historyIndex];\n\t\t\t\t\tdiagonalReverseBase = reversePoints[0]; //We stored this in the first spot\n\t\t\t\t\tdiagonalMin = 1;\n\t\t\t\t\tdiagonalMax = reversePoints.length - 1;\n\t\t\t\t}\n\t\t\t} while (--historyIndex >= -1);\n\n\t\t\t// There are cases where the reverse history will find diffs that\n\t\t\t// are correct, but not intuitive, so we need shift them.\n\t\t\treverseChanges = changeHelper.getChanges();\n\t\t}\n\n\t\treturn this.ConcatenateChanges(forwardChanges, reverseChanges);\n\t}\n\n\t/**\n\t * Given the range to compute the diff on, this method finds the point:\n\t * (midOriginal, midModified)\n\t * that exists in the middle of the LCS of the two sequences and\n\t * is the point at which the LCS problem may be broken down recursively.\n\t * This method will try to keep the LCS trace in memory. If the LCS recursion\n\t * point is calculated and the full trace is available in memory, then this method\n\t * will return the change list.\n\t * @param originalStart The start bound of the original sequence range\n\t * @param originalEnd The end bound of the original sequence range\n\t * @param modifiedStart The start bound of the modified sequence range\n\t * @param modifiedEnd The end bound of the modified sequence range\n\t * @param midOriginal The middle point of the original sequence range\n\t * @param midModified The middle point of the modified sequence range\n\t * @returns The diff changes, if available, otherwise null\n\t */\n\tprivate ComputeRecursionPoint(originalStart: number, originalEnd: number, modifiedStart: number, modifiedEnd: number, midOriginalArr: number[], midModifiedArr: number[], quitEarlyArr: boolean[]) {\n\t\tlet originalIndex: number, modifiedIndex: number;\n\t\tlet diagonalForwardStart = 0, diagonalForwardEnd = 0;\n\t\tlet diagonalReverseStart = 0, diagonalReverseEnd = 0;\n\t\tlet numDifferences: number;\n\n\t\t// To traverse the edit graph and produce the proper LCS, our actual\n\t\t// start position is just outside the given boundary\n\t\toriginalStart--;\n\t\tmodifiedStart--;\n\n\t\t// We set these up to make the compiler happy, but they will\n\t\t// be replaced before we return with the actual recursion point\n\t\tmidOriginalArr[0] = 0;\n\t\tmidModifiedArr[0] = 0;\n\n\t\t// Clear out the history\n\t\tthis.m_forwardHistory = [];\n\t\tthis.m_reverseHistory = [];\n\n\t\t// Each cell in the two arrays corresponds to a diagonal in the edit graph.\n\t\t// The integer value in the cell represents the originalIndex of the furthest\n\t\t// reaching point found so far that ends in that diagonal.\n\t\t// The modifiedIndex can be computed mathematically from the originalIndex and the diagonal number.\n\t\tlet maxDifferences = (originalEnd - originalStart) + (modifiedEnd - modifiedStart);\n\t\tlet numDiagonals = maxDifferences + 1;\n\t\tlet forwardPoints: number[] = new Array(numDiagonals);\n\t\tlet reversePoints: number[] = new Array(numDiagonals);\n\t\t// diagonalForwardBase: Index into forwardPoints of the diagonal which passes through (originalStart, modifiedStart)\n\t\t// diagonalReverseBase: Index into reversePoints of the diagonal which passes through (originalEnd, modifiedEnd)\n\t\tlet diagonalForwardBase = (modifiedEnd - modifiedStart);\n\t\tlet diagonalReverseBase = (originalEnd - originalStart);\n\t\t// diagonalForwardOffset: Geometric offset which allows modifiedIndex to be computed from originalIndex and the\n\t\t// diagonal number (relative to diagonalForwardBase)\n\t\t// diagonalReverseOffset: Geometric offset which allows modifiedIndex to be computed from originalIndex and the\n\t\t// diagonal number (relative to diagonalReverseBase)\n\t\tlet diagonalForwardOffset = (originalStart - modifiedStart);\n\t\tlet diagonalReverseOffset = (originalEnd - modifiedEnd);\n\n\t\t// delta: The difference between the end diagonal and the start diagonal. This is used to relate diagonal numbers\n\t\t// relative to the start diagonal with diagonal numbers relative to the end diagonal.\n\t\t// The Even/Oddn-ness of this delta is important for determining when we should check for overlap\n\t\tlet delta = diagonalReverseBase - diagonalForwardBase;\n\t\tlet deltaIsEven = (delta % 2 === 0);\n\n\t\t// Here we set up the start and end points as the furthest points found so far\n\t\t// in both the forward and reverse directions, respectively\n\t\tforwardPoints[diagonalForwardBase] = originalStart;\n\t\treversePoints[diagonalReverseBase] = originalEnd;\n\n\t\t// Remember if we quit early, and thus need to do a best-effort result instead of a real result.\n\t\tquitEarlyArr[0] = false;\n\n\n\n\t\t// A couple of points:\n\t\t// --With this method, we iterate on the number of differences between the two sequences.\n\t\t// The more differences there actually are, the longer this will take.\n\t\t// --Also, as the number of differences increases, we have to search on diagonals further\n\t\t// away from the reference diagonal (which is diagonalForwardBase for forward, diagonalReverseBase for reverse).\n\t\t// --We extend on even diagonals (relative to the reference diagonal) only when numDifferences\n\t\t// is even and odd diagonals only when numDifferences is odd.\n\t\tlet diagonal: number, tempOriginalIndex: number;\n\t\tfor (numDifferences = 1; numDifferences <= (maxDifferences / 2) + 1; numDifferences++) {\n\t\t\tlet furthestOriginalIndex = 0;\n\t\t\tlet furthestModifiedIndex = 0;\n\n\t\t\t// Run the algorithm in the forward direction\n\t\t\tdiagonalForwardStart = this.ClipDiagonalBound(diagonalForwardBase - numDifferences, numDifferences, diagonalForwardBase, numDiagonals);\n\t\t\tdiagonalForwardEnd = this.ClipDiagonalBound(diagonalForwardBase + numDifferences, numDifferences, diagonalForwardBase, numDiagonals);\n\t\t\tfor (diagonal = diagonalForwardStart; diagonal <= diagonalForwardEnd; diagonal += 2) {\n\t\t\t\t// STEP 1: We extend the furthest reaching point in the present diagonal\n\t\t\t\t// by looking at the diagonals above and below and picking the one whose point\n\t\t\t\t// is further away from the start point (originalStart, modifiedStart)\n\t\t\t\tif (diagonal === diagonalForwardStart || (diagonal < diagonalForwardEnd && forwardPoints[diagonal - 1] < forwardPoints[diagonal + 1])) {\n\t\t\t\t\toriginalIndex = forwardPoints[diagonal + 1];\n\t\t\t\t} else {\n\t\t\t\t\toriginalIndex = forwardPoints[diagonal - 1] + 1;\n\t\t\t\t}\n\t\t\t\tmodifiedIndex = originalIndex - (diagonal - diagonalForwardBase) - diagonalForwardOffset;\n\n\t\t\t\t// Save the current originalIndex so we can test for false overlap in step 3\n\t\t\t\ttempOriginalIndex = originalIndex;\n\n\t\t\t\t// STEP 2: We can continue to extend the furthest reaching point in the present diagonal\n\t\t\t\t// so long as the elements are equal.\n\t\t\t\twhile (originalIndex < originalEnd && modifiedIndex < modifiedEnd && this.ElementsAreEqual(originalIndex + 1, modifiedIndex + 1)) {\n\t\t\t\t\toriginalIndex++;\n\t\t\t\t\tmodifiedIndex++;\n\t\t\t\t}\n\t\t\t\tforwardPoints[diagonal] = originalIndex;\n\n\t\t\t\tif (originalIndex + modifiedIndex > furthestOriginalIndex + furthestModifiedIndex) {\n\t\t\t\t\tfurthestOriginalIndex = originalIndex;\n\t\t\t\t\tfurthestModifiedIndex = modifiedIndex;\n\t\t\t\t}\n\n\t\t\t\t// STEP 3: If delta is odd (overlap first happens on forward when delta is odd)\n\t\t\t\t// and diagonal is in the range of reverse diagonals computed for numDifferences-1\n\t\t\t\t// (the previous iteration; we haven't computed reverse diagonals for numDifferences yet)\n\t\t\t\t// then check for overlap.\n\t\t\t\tif (!deltaIsEven && Math.abs(diagonal - diagonalReverseBase) <= (numDifferences - 1)) {\n\t\t\t\t\tif (originalIndex >= reversePoints[diagonal]) {\n\t\t\t\t\t\tmidOriginalArr[0] = originalIndex;\n\t\t\t\t\t\tmidModifiedArr[0] = modifiedIndex;\n\n\t\t\t\t\t\tif (tempOriginalIndex <= reversePoints[diagonal] && MaxDifferencesHistory > 0 && numDifferences <= (MaxDifferencesHistory + 1)) {\n\t\t\t\t\t\t\t// BINGO! We overlapped, and we have the full trace in memory!\n\t\t\t\t\t\t\treturn this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset,\n\t\t\t\t\t\t\t\tdiagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset,\n\t\t\t\t\t\t\t\tforwardPoints, reversePoints,\n\t\t\t\t\t\t\t\toriginalIndex, originalEnd, midOriginalArr,\n\t\t\t\t\t\t\t\tmodifiedIndex, modifiedEnd, midModifiedArr,\n\t\t\t\t\t\t\t\tdeltaIsEven, quitEarlyArr\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Either false overlap, or we didn't have enough memory for the full trace\n\t\t\t\t\t\t\t// Just return the recursion point\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check to see if we should be quitting early, before moving on to the next iteration.\n\t\t\tlet matchLengthOfLongest = ((furthestOriginalIndex - originalStart) + (furthestModifiedIndex - modifiedStart) - numDifferences) / 2;\n\n\t\t\tif (this.ContinueProcessingPredicate !== null && !this.ContinueProcessingPredicate(furthestOriginalIndex, this.OriginalSequence, matchLengthOfLongest)) {\n\t\t\t\t// We can't finish, so skip ahead to generating a result from what we have.\n\t\t\t\tquitEarlyArr[0] = true;\n\n\t\t\t\t// Use the furthest distance we got in the forward direction.\n\t\t\t\tmidOriginalArr[0] = furthestOriginalIndex;\n\t\t\t\tmidModifiedArr[0] = furthestModifiedIndex;\n\n\t\t\t\tif (matchLengthOfLongest > 0 && MaxDifferencesHistory > 0 && numDifferences <= (MaxDifferencesHistory + 1)) {\n\t\t\t\t\t// Enough of the history is in memory to walk it backwards\n\t\t\t\t\treturn this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset,\n\t\t\t\t\t\tdiagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset,\n\t\t\t\t\t\tforwardPoints, reversePoints,\n\t\t\t\t\t\toriginalIndex, originalEnd, midOriginalArr,\n\t\t\t\t\t\tmodifiedIndex, modifiedEnd, midModifiedArr,\n\t\t\t\t\t\tdeltaIsEven, quitEarlyArr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t// We didn't actually remember enough of the history.\n\n\t\t\t\t\t//Since we are quiting the diff early, we need to shift back the originalStart and modified start\n\t\t\t\t\t//back into the boundary limits since we decremented their value above beyond the boundary limit.\n\t\t\t\t\toriginalStart++;\n\t\t\t\t\tmodifiedStart++;\n\n\t\t\t\t\treturn [\n\t\t\t\t\t\tnew DiffChange(originalStart, originalEnd - originalStart + 1,\n\t\t\t\t\t\t\tmodifiedStart, modifiedEnd - modifiedStart + 1)\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Run the algorithm in the reverse direction\n\t\t\tdiagonalReverseStart = this.ClipDiagonalBound(diagonalReverseBase - numDifferences, numDifferences, diagonalReverseBase, numDiagonals);\n\t\t\tdiagonalReverseEnd = this.ClipDiagonalBound(diagonalReverseBase + numDifferences, numDifferences, diagonalReverseBase, numDiagonals);\n\t\t\tfor (diagonal = diagonalReverseStart; diagonal <= diagonalReverseEnd; diagonal += 2) {\n\t\t\t\t// STEP 1: We extend the furthest reaching point in the present diagonal\n\t\t\t\t// by looking at the diagonals above and below and picking the one whose point\n\t\t\t\t// is further away from the start point (originalEnd, modifiedEnd)\n\t\t\t\tif (diagonal === diagonalReverseStart || (diagonal < diagonalReverseEnd && reversePoints[diagonal - 1] >= reversePoints[diagonal + 1])) {\n\t\t\t\t\toriginalIndex = reversePoints[diagonal + 1] - 1;\n\t\t\t\t} else {\n\t\t\t\t\toriginalIndex = reversePoints[diagonal - 1];\n\t\t\t\t}\n\t\t\t\tmodifiedIndex = originalIndex - (diagonal - diagonalReverseBase) - diagonalReverseOffset;\n\n\t\t\t\t// Save the current originalIndex so we can test for false overlap\n\t\t\t\ttempOriginalIndex = originalIndex;\n\n\t\t\t\t// STEP 2: We can continue to extend the furthest reaching point in the present diagonal\n\t\t\t\t// as long as the elements are equal.\n\t\t\t\twhile (originalIndex > originalStart && modifiedIndex > modifiedStart && this.ElementsAreEqual(originalIndex, modifiedIndex)) {\n\t\t\t\t\toriginalIndex--;\n\t\t\t\t\tmodifiedIndex--;\n\t\t\t\t}\n\t\t\t\treversePoints[diagonal] = originalIndex;\n\n\t\t\t\t// STEP 4: If delta is even (overlap first happens on reverse when delta is even)\n\t\t\t\t// and diagonal is in the range of forward diagonals computed for numDifferences\n\t\t\t\t// then check for overlap.\n\t\t\t\tif (deltaIsEven && Math.abs(diagonal - diagonalForwardBase) <= numDifferences) {\n\t\t\t\t\tif (originalIndex <= forwardPoints[diagonal]) {\n\t\t\t\t\t\tmidOriginalArr[0] = originalIndex;\n\t\t\t\t\t\tmidModifiedArr[0] = modifiedIndex;\n\n\t\t\t\t\t\tif (tempOriginalIndex >= forwardPoints[diagonal] && MaxDifferencesHistory > 0 && numDifferences <= (MaxDifferencesHistory + 1)) {\n\t\t\t\t\t\t\t// BINGO! We overlapped, and we have the full trace in memory!\n\t\t\t\t\t\t\treturn this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset,\n\t\t\t\t\t\t\t\tdiagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset,\n\t\t\t\t\t\t\t\tforwardPoints, reversePoints,\n\t\t\t\t\t\t\t\toriginalIndex, originalEnd, midOriginalArr,\n\t\t\t\t\t\t\t\tmodifiedIndex, modifiedEnd, midModifiedArr,\n\t\t\t\t\t\t\t\tdeltaIsEven, quitEarlyArr\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Either false overlap, or we didn't have enough memory for the full trace\n\t\t\t\t\t\t\t// Just return the recursion point\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Save current vectors to history before the next iteration\n\t\t\tif (numDifferences <= MaxDifferencesHistory) {\n\t\t\t\t// We are allocating space for one extra int, which we fill with\n\t\t\t\t// the index of the diagonal base index\n\t\t\t\tlet temp: number[] = new Array(diagonalForwardEnd - diagonalForwardStart + 2);\n\t\t\t\ttemp[0] = diagonalForwardBase - diagonalForwardStart + 1;\n\t\t\t\tMyArray.Copy(forwardPoints, diagonalForwardStart, temp, 1, diagonalForwardEnd - diagonalForwardStart + 1);\n\t\t\t\tthis.m_forwardHistory.push(temp);\n\n\t\t\t\ttemp = new Array(diagonalReverseEnd - diagonalReverseStart + 2);\n\t\t\t\ttemp[0] = diagonalReverseBase - diagonalReverseStart + 1;\n\t\t\t\tMyArray.Copy(reversePoints, diagonalReverseStart, temp, 1, diagonalReverseEnd - diagonalReverseStart + 1);\n\t\t\t\tthis.m_reverseHistory.push(temp);\n\t\t\t}\n\n\t\t}\n\n\n\n\t\t// If we got here, then we have the full trace in history. We just have to convert it to a change list\n\t\t// NOTE: This part is a bit messy\n\t\treturn this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset,\n\t\t\tdiagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset,\n\t\t\tforwardPoints, reversePoints,\n\t\t\toriginalIndex, originalEnd, midOriginalArr,\n\t\t\tmodifiedIndex, modifiedEnd, midModifiedArr,\n\t\t\tdeltaIsEven, quitEarlyArr\n\t\t);\n\t}\n\n\t/**\n\t * Concatenates the two input DiffChange lists and returns the resulting\n\t * list.\n\t * @param The left changes\n\t * @param The right changes\n\t * @returns The concatenated list\n\t */\n\tprivate ConcatenateChanges(left: DiffChange[], right: DiffChange[]): DiffChange[] {\n\t\tlet mergedChangeArr: DiffChange[] = [];\n\t\tlet result: DiffChange[] = null;\n\n\t\tif (left.length === 0 || right.length === 0) {\n\t\t\treturn (right.length > 0) ? right : left;\n\t\t} else if (this.ChangesOverlap(left[left.length - 1], right[0], mergedChangeArr)) {\n\t\t\t// Since we break the problem down recursively, it is possible that we\n\t\t\t// might recurse in the middle of a change thereby splitting it into\n\t\t\t// two changes. Here in the combining stage, we detect and fuse those\n\t\t\t// changes back together\n\t\t\tresult = new Array(left.length + right.length - 1);\n\t\t\tMyArray.Copy(left, 0, result, 0, left.length - 1);\n\t\t\tresult[left.length - 1] = mergedChangeArr[0];\n\t\t\tMyArray.Copy(right, 1, result, left.length, right.length - 1);\n\n\t\t\treturn result;\n\t\t} else {\n\t\t\tresult = new Array(left.length + right.length);\n\t\t\tMyArray.Copy(left, 0, result, 0, left.length);\n\t\t\tMyArray.Copy(right, 0, result, left.length, right.length);\n\n\t\t\treturn result;\n\t\t}\n\t}\n\n\t/**\n\t * Returns true if the two changes overlap and can be merged into a single\n\t * change\n\t * @param left The left change\n\t * @param right The right change\n\t * @param mergedChange The merged change if the two overlap, null otherwise\n\t * @returns True if the two changes overlap\n\t */\n\tprivate ChangesOverlap(left: DiffChange, right: DiffChange, mergedChangeArr: DiffChange[]): boolean {\n\t\tDebug.Assert(left.originalStart <= right.originalStart, 'Left change is not less than or equal to right change');\n\t\tDebug.Assert(left.modifiedStart <= right.modifiedStart, 'Left change is not less than or equal to right change');\n\n\t\tif (left.originalStart + left.originalLength >= right.originalStart || left.modifiedStart + left.modifiedLength >= right.modifiedStart) {\n\t\t\tlet originalStart = left.originalStart;\n\t\t\tlet originalLength = left.originalLength;\n\t\t\tlet modifiedStart = left.modifiedStart;\n\t\t\tlet modifiedLength = left.modifiedLength;\n\n\t\t\tif (left.originalStart + left.originalLength >= right.originalStart) {\n\t\t\t\toriginalLength = right.originalStart + right.originalLength - left.originalStart;\n\t\t\t}\n\t\t\tif (left.modifiedStart + left.modifiedLength >= right.modifiedStart) {\n\t\t\t\tmodifiedLength = right.modifiedStart + right.modifiedLength - left.modifiedStart;\n\t\t\t}\n\n\t\t\tmergedChangeArr[0] = new DiffChange(originalStart, originalLength, modifiedStart, modifiedLength);\n\t\t\treturn true;\n\t\t} else {\n\t\t\tmergedChangeArr[0] = null;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t/**\n\t * Helper method used to clip a diagonal index to the range of valid\n\t * diagonals. This also decides whether or not the diagonal index,\n\t * if it exceeds the boundary, should be clipped to the boundary or clipped\n\t * one inside the boundary depending on the Even/Odd status of the boundary\n\t * and numDifferences.\n\t * @param diagonal The index of the diagonal to clip.\n\t * @param numDifferences The current number of differences being iterated upon.\n\t * @param diagonalBaseIndex The base reference diagonal.\n\t * @param numDiagonals The total number of diagonals.\n\t * @returns The clipped diagonal index.\n\t */\n\n\tprivate ClipDiagonalBound(diagonal: number, numDifferences: number, diagonalBaseIndex: number, numDiagonals: number): number {\n\t\tif (diagonal >= 0 && diagonal < numDiagonals) {\n\t\t\t// Nothing to clip, its in range\n\t\t\treturn diagonal;\n\t\t}\n\n\t\t// diagonalsBelow: The number of diagonals below the reference diagonal\n\t\t// diagonalsAbove: The number of diagonals above the reference diagonal\n\t\tlet diagonalsBelow = diagonalBaseIndex;\n\t\tlet diagonalsAbove = numDiagonals - diagonalBaseIndex - 1;\n\t\tlet diffEven = (numDifferences % 2 === 0);\n\n\t\tif (diagonal < 0) {\n\t\t\tlet lowerBoundEven = (diagonalsBelow % 2 === 0);\n\t\t\treturn (diffEven === lowerBoundEven) ? 0 : 1;\n\t\t} else {\n\t\t\tlet upperBoundEven = (diagonalsAbove % 2 === 0);\n\t\t\treturn (diffEven === upperBoundEven) ? numDiagonals - 1 : numDiagonals - 2;\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nexport class Event {\n\tpublic time: number;\n\tpublic originalEvent: Event;\n\tpublic source: any;\n\n\tconstructor(originalEvent?: Event) {\n\t\tthis.time = (new Date()).getTime();\n\t\tthis.originalEvent = originalEvent;\n\t\tthis.source = null;\n\t}\n}\n\nexport class PropertyChangeEvent extends Event {\n\tpublic key: string;\n\tpublic oldValue: any;\n\tpublic newValue: any;\n\n\tconstructor(key?: string, oldValue?: any, newValue?: any, originalEvent?: Event) {\n\t\tsuper(originalEvent);\n\n\t\tthis.key = key;\n\t\tthis.oldValue = oldValue;\n\t\tthis.newValue = newValue;\n\t}\n}\n\nexport class ViewerEvent extends Event {\n\tpublic element: any;\n\n\tconstructor(element: any, originalEvent?: Event) {\n\t\tsuper(originalEvent);\n\n\t\tthis.element = element;\n\t}\n}\n\nexport interface ISelectionEvent {\n\tselection: any[];\n\tpayload?: any;\n\tsource: any;\n}\n\nexport interface IFocusEvent {\n\tfocus: any;\n\tpayload?: any;\n\tsource: any;\n}\n\nexport interface IHighlightEvent {\n\thighlight: any;\n\tpayload?: any;\n\tsource: any;\n}\n\nexport const EventType = {\n\tPROPERTY_CHANGED: 'propertyChanged',\n\tSELECTION: 'selection',\n\tFOCUS: 'focus',\n\tBLUR: 'blur',\n\tHIGHLIGHT: 'highlight',\n\tEXPAND: 'expand',\n\tCOLLAPSE: 'collapse',\n\tTOGGLE: 'toggle',\n\tBEFORE_RUN: 'beforeRun',\n\tRUN: 'run',\n\tEDIT: 'edit',\n\tSAVE: 'save',\n\tCANCEL: 'cancel',\n\tCHANGE: 'change',\n\tDISPOSE: '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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nexport function not
    (fn: (a: A) => boolean): (a: A) => boolean;\nexport function not(fn: Function): Function {\n\treturn (...args) => !fn(...args);\n}\n\nexport function once(fn: T): T {\n\tconst _this = this;\n\tlet didCall = false;\n\tlet result: any;\n\n\treturn function () {\n\t\tif (didCall) {\n\t\t\treturn result;\n\t\t}\n\n\t\tdidCall = true;\n\t\tresult = fn.apply(_this, arguments);\n\n\t\treturn result;\n\t} as any as T;\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'use strict';\n\n/**\n * Return a hash value for an object.\n */\nexport function hash(obj: any, hashVal = 0): number {\n\tswitch (typeof obj) {\n\t\tcase 'object':\n\t\t\tif (obj === null) {\n\t\t\t\treturn numberHash(349, hashVal);\n\t\t\t} else if (Array.isArray(obj)) {\n\t\t\t\treturn arrayHash(obj, hashVal);\n\t\t\t}\n\t\t\treturn objectHash(obj, hashVal);\n\t\tcase 'string':\n\t\t\treturn stringHash(obj, hashVal);\n\t\tcase 'boolean':\n\t\t\treturn booleanHash(obj, hashVal);\n\t\tcase 'number':\n\t\t\treturn numberHash(obj, hashVal);\n\t\tcase 'undefined':\n\t\t\treturn numberHash(obj, 937);\n\t\tdefault:\n\t\t\treturn numberHash(obj, 617);\n\t}\n}\n\nfunction numberHash(val: number, initialHashVal: number): number {\n\treturn (((initialHashVal << 5) - initialHashVal) + val) | 0; // hashVal * 31 + ch, keep as int32\n}\n\nfunction booleanHash(b: boolean, initialHashVal: number): number {\n\treturn numberHash(b ? 433 : 863, initialHashVal);\n}\n\nfunction stringHash(s: string, hashVal: number) {\n\thashVal = numberHash(149417, hashVal);\n\tfor (let i = 0, length = s.length; i < length; i++) {\n\t\thashVal = numberHash(s.charCodeAt(i), hashVal);\n\t}\n\treturn hashVal;\n}\n\nfunction arrayHash(arr: any[], initialHashVal: number): number {\n\tinitialHashVal = numberHash(104579, initialHashVal);\n\treturn arr.reduce((hashVal, item) => hash(item, hashVal), initialHashVal);\n}\n\nfunction objectHash(obj: any, initialHashVal: number): number {\n\tinitialHashVal = numberHash(181387, initialHashVal);\n\treturn Object.keys(obj).sort().reduce((hashVal, key) => {\n\t\thashVal = stringHash(key, hashVal);\n\t\treturn hash(obj[key], hashVal);\n\t}, initialHashVal);\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'use strict';\n\n/**\n * MarkedString can be used to render human readable text. It is either a markdown string\n * or a code-block that provides a language and a code snippet. Note that\n * markdown strings will be sanitized - that means html will be escaped.\n */\nexport type MarkedString = string | { readonly language: string; readonly value: string };\n\nexport function markedStringsEquals(a: MarkedString | MarkedString[], b: MarkedString | MarkedString[]): boolean {\n\tif (!a && !b) {\n\t\treturn true;\n\t}\n\tif (!a || !b) {\n\t\treturn false;\n\t}\n\n\tif (Array.isArray(a)) {\n\t\tif (!Array.isArray(b)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn markedStringArrEquals(a, b);\n\t}\n\treturn markedStringEqual(a, b as MarkedString);\n}\n\n\nfunction markedStringArrEquals(a: MarkedString[], b: MarkedString[]): boolean {\n\tlet aLen = a.length,\n\t\tbLen = b.length;\n\n\tif (aLen !== bLen) {\n\t\treturn false;\n\t}\n\n\tfor (let i = 0; i < aLen; i++) {\n\t\tif (!markedStringEqual(a[i], b[i])) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\nfunction markedStringEqual(a: MarkedString, b: MarkedString): boolean {\n\tif (!a && !b) {\n\t\treturn true;\n\t}\n\tif (!a || !b) {\n\t\treturn false;\n\t}\n\tif (typeof a === 'string' || typeof b === 'string') {\n\t\treturn typeof a === 'string' && typeof b === 'string' && a === b;\n\t}\n\treturn (\n\t\ta.language === b.language\n\t\t&& a.value === b.value\n\t);\n}\n\nexport function textToMarkedString(text: string): MarkedString {\n\treturn text.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g, '\\\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash\n}\n\nexport function removeMarkdownEscapes(text: string): string {\n\tif (!text) {\n\t\treturn text;\n\t}\n\treturn text.replace(/\\\\([\\\\`*_{}[\\]()#+\\-.!])/g, '$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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nexport class IdGenerator {\n\n\tprivate _prefix: string;\n\tprivate _lastId: number;\n\n\tconstructor(prefix: string) {\n\t\tthis._prefix = prefix;\n\t\tthis._lastId = 0;\n\t}\n\n\tpublic nextId(): string {\n\t\treturn this._prefix + (++this._lastId);\n\t}\n}\n\nexport const defaultGenerator = new IdGenerator('id#');","/*---------------------------------------------------------------------------------------------\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'use strict';\n\nexport interface IIterator {\n\tnext(): T;\n}\n\nexport class ArrayIterator implements IIterator {\n\n\tprivate items: T[];\n\tprotected start: number;\n\tprotected end: number;\n\tprotected index: number;\n\n\tconstructor(items: T[], start: number = 0, end: number = items.length) {\n\t\tthis.items = items;\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t\tthis.index = start - 1;\n\t}\n\n\tpublic first(): T {\n\t\tthis.index = this.start;\n\t\treturn this.current();\n\t}\n\n\tpublic next(): T {\n\t\tthis.index = Math.min(this.index + 1, this.end);\n\t\treturn this.current();\n\t}\n\n\tprotected current(): T {\n\t\tif (this.index === this.start - 1 || this.index === this.end) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this.items[this.index];\n\t}\n}\n\nexport class ArrayNavigator extends ArrayIterator implements INavigator {\n\n\tconstructor(items: T[], start: number = 0, end: number = items.length) {\n\t\tsuper(items, start, end);\n\t}\n\n\tpublic current(): T {\n\t\treturn super.current();\n\t}\n\n\tpublic previous(): T {\n\t\tthis.index = Math.max(this.index - 1, this.start - 1);\n\t\treturn this.current();\n\t}\n\n\tpublic first(): T {\n\t\tthis.index = this.start;\n\t\treturn this.current();\n\t}\n\n\tpublic last(): T {\n\t\tthis.index = this.end - 1;\n\t\treturn this.current();\n\t}\n\n\tpublic parent(): T {\n\t\treturn null;\n\t}\n\n}\n\nexport class MappedIterator implements IIterator {\n\n\tconstructor(protected iterator: IIterator, protected fn: (item: T) => R) {\n\t\t// noop\n\t}\n\n\tnext() { return this.fn(this.iterator.next()); }\n}\n\nexport interface INavigator extends IIterator {\n\tcurrent(): T;\n\tprevious(): T;\n\tparent(): T;\n\tfirst(): T;\n\tlast(): T;\n\tnext(): T;\n}\n\nexport class MappedNavigator extends MappedIterator implements INavigator {\n\n\tconstructor(protected navigator: INavigator, fn: (item: T) => R) {\n\t\tsuper(navigator, fn);\n\t}\n\n\tcurrent() { return this.fn(this.navigator.current()); }\n\tprevious() { return this.fn(this.navigator.previous()); }\n\tparent() { return this.fn(this.navigator.parent()); }\n\tfirst() { return this.fn(this.navigator.first()); }\n\tlast() { return this.fn(this.navigator.last()); }\n\tnext() { return this.fn(this.navigator.next()); }\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\nimport { INavigator, ArrayNavigator } from 'vs/base/common/iterator';\n\nexport class HistoryNavigator implements INavigator {\n\n\tprivate _history: Set;\n\tprivate _limit: number;\n\tprivate _navigator: ArrayNavigator;\n\n\tconstructor(history: T[] = [], limit: number = 10) {\n\t\tthis._initialize(history);\n\t\tthis._limit = limit;\n\t\tthis._onChange();\n\t}\n\n\tpublic add(t: T) {\n\t\tthis._history.add(t);\n\t\tthis._onChange();\n\t}\n\n\tpublic addIfNotPresent(t: T) {\n\t\tif (!this._history.has(t)) {\n\t\t\tthis.add(t);\n\t\t}\n\t}\n\n\tpublic next(): T {\n\t\tif (this._navigator.next()) {\n\t\t\treturn this._navigator.current();\n\t\t}\n\t\tthis.last();\n\t\treturn null;\n\t}\n\n\tpublic previous(): T {\n\t\tif (this._navigator.previous()) {\n\t\t\treturn this._navigator.current();\n\t\t}\n\t\tthis.first();\n\t\treturn null;\n\t}\n\n\tpublic current(): T {\n\t\treturn this._navigator.current();\n\t}\n\n\tpublic parent(): T {\n\t\treturn null;\n\t}\n\n\tpublic first(): T {\n\t\treturn this._navigator.first();\n\t}\n\n\tpublic last(): T {\n\t\treturn this._navigator.last();\n\t}\n\n\tprivate _onChange() {\n\t\tthis._reduceToLimit();\n\t\tthis._navigator = new ArrayNavigator(this._elements);\n\t\tthis._navigator.last();\n\t}\n\n\tprivate _reduceToLimit() {\n\t\tlet data = this._elements;\n\t\tif (data.length > this._limit) {\n\t\t\tthis._initialize(data.slice(data.length - this._limit));\n\t\t}\n\t}\n\n\tprivate _initialize(history: T[]): void {\n\t\tthis._history = new Set();\n\t\tfor (const entry of history) {\n\t\t\tthis._history.add(entry);\n\t\t}\n\t}\n\n\tprivate get _elements(): T[] {\n\t\tconst elements: T[] = [];\n\t\tthis._history.forEach(e => elements.push(e));\n\t\treturn elements;\n\t}\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'use strict';\n\nexport enum ScanError {\n\tNone,\n\tUnexpectedEndOfComment,\n\tUnexpectedEndOfString,\n\tUnexpectedEndOfNumber,\n\tInvalidUnicode,\n\tInvalidEscapeCharacter,\n\tInvalidCharacter\n}\n\nexport enum SyntaxKind {\n\tUnknown = 0,\n\tOpenBraceToken,\n\tCloseBraceToken,\n\tOpenBracketToken,\n\tCloseBracketToken,\n\tCommaToken,\n\tColonToken,\n\tNullKeyword,\n\tTrueKeyword,\n\tFalseKeyword,\n\tStringLiteral,\n\tNumericLiteral,\n\tLineCommentTrivia,\n\tBlockCommentTrivia,\n\tLineBreakTrivia,\n\tTrivia,\n\tEOF\n}\n\n/**\n * The scanner object, representing a JSON scanner at a position in the input string.\n */\nexport interface JSONScanner {\n\t/**\n\t * Sets the scan position to a new offset. A call to 'scan' is needed to get the first token.\n\t */\n\tsetPosition(pos: number): void;\n\t/**\n\t * Read the next token. Returns the tolen code.\n\t */\n\tscan(): SyntaxKind;\n\t/**\n\t * Returns the current scan position, which is after the last read token.\n\t */\n\tgetPosition(): number;\n\t/**\n\t * Returns the last read token.\n\t */\n\tgetToken(): SyntaxKind;\n\t/**\n\t * Returns the last read token value. The value for strings is the decoded string content. For numbers its of type number, for boolean it's true or false.\n\t */\n\tgetTokenValue(): string;\n\t/**\n\t * The start offset of the last read token.\n\t */\n\tgetTokenOffset(): number;\n\t/**\n\t * The length of the last read token.\n\t */\n\tgetTokenLength(): number;\n\t/**\n\t * An error code of the last scan.\n\t */\n\tgetTokenError(): ScanError;\n}\n/**\n * Creates a JSON scanner on the given text.\n * If ignoreTrivia is set, whitespaces or comments are ignored.\n */\nexport function createScanner(text: string, ignoreTrivia: boolean = false): JSONScanner {\n\n\tlet pos = 0,\n\t\tlen = text.length,\n\t\tvalue: string = '',\n\t\ttokenOffset = 0,\n\t\ttoken: SyntaxKind = SyntaxKind.Unknown,\n\t\tscanError: ScanError = ScanError.None;\n\n\tfunction scanHexDigits(count: number, exact?: boolean): number {\n\t\tlet digits = 0;\n\t\tlet value = 0;\n\t\twhile (digits < count || !exact) {\n\t\t\tlet ch = text.charCodeAt(pos);\n\t\t\tif (ch >= CharacterCodes._0 && ch <= CharacterCodes._9) {\n\t\t\t\tvalue = value * 16 + ch - CharacterCodes._0;\n\t\t\t}\n\t\t\telse if (ch >= CharacterCodes.A && ch <= CharacterCodes.F) {\n\t\t\t\tvalue = value * 16 + ch - CharacterCodes.A + 10;\n\t\t\t}\n\t\t\telse if (ch >= CharacterCodes.a && ch <= CharacterCodes.f) {\n\t\t\t\tvalue = value * 16 + ch - CharacterCodes.a + 10;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tpos++;\n\t\t\tdigits++;\n\t\t}\n\t\tif (digits < count) {\n\t\t\tvalue = -1;\n\t\t}\n\t\treturn value;\n\t}\n\n\tfunction setPosition(newPosition: number) {\n\t\tpos = newPosition;\n\t\tvalue = '';\n\t\ttokenOffset = 0;\n\t\ttoken = SyntaxKind.Unknown;\n\t\tscanError = ScanError.None;\n\t}\n\n\tfunction scanNumber(): string {\n\t\tlet start = pos;\n\t\tif (text.charCodeAt(pos) === CharacterCodes._0) {\n\t\t\tpos++;\n\t\t} else {\n\t\t\tpos++;\n\t\t\twhile (pos < text.length && isDigit(text.charCodeAt(pos))) {\n\t\t\t\tpos++;\n\t\t\t}\n\t\t}\n\t\tif (pos < text.length && text.charCodeAt(pos) === CharacterCodes.dot) {\n\t\t\tpos++;\n\t\t\tif (pos < text.length && isDigit(text.charCodeAt(pos))) {\n\t\t\t\tpos++;\n\t\t\t\twhile (pos < text.length && isDigit(text.charCodeAt(pos))) {\n\t\t\t\t\tpos++;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tscanError = ScanError.UnexpectedEndOfNumber;\n\t\t\t\treturn text.substring(start, pos);\n\t\t\t}\n\t\t}\n\t\tlet end = pos;\n\t\tif (pos < text.length && (text.charCodeAt(pos) === CharacterCodes.E || text.charCodeAt(pos) === CharacterCodes.e)) {\n\t\t\tpos++;\n\t\t\tif (pos < text.length && text.charCodeAt(pos) === CharacterCodes.plus || text.charCodeAt(pos) === CharacterCodes.minus) {\n\t\t\t\tpos++;\n\t\t\t}\n\t\t\tif (pos < text.length && isDigit(text.charCodeAt(pos))) {\n\t\t\t\tpos++;\n\t\t\t\twhile (pos < text.length && isDigit(text.charCodeAt(pos))) {\n\t\t\t\t\tpos++;\n\t\t\t\t}\n\t\t\t\tend = pos;\n\t\t\t} else {\n\t\t\t\tscanError = ScanError.UnexpectedEndOfNumber;\n\t\t\t}\n\t\t}\n\t\treturn text.substring(start, end);\n\t}\n\n\tfunction scanString(): string {\n\n\t\tlet result = '',\n\t\t\tstart = pos;\n\n\t\twhile (true) {\n\t\t\tif (pos >= len) {\n\t\t\t\tresult += text.substring(start, pos);\n\t\t\t\tscanError = ScanError.UnexpectedEndOfString;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlet ch = text.charCodeAt(pos);\n\t\t\tif (ch === CharacterCodes.doubleQuote) {\n\t\t\t\tresult += text.substring(start, pos);\n\t\t\t\tpos++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (ch === CharacterCodes.backslash) {\n\t\t\t\tresult += text.substring(start, pos);\n\t\t\t\tpos++;\n\t\t\t\tif (pos >= len) {\n\t\t\t\t\tscanError = ScanError.UnexpectedEndOfString;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tch = text.charCodeAt(pos++);\n\t\t\t\tswitch (ch) {\n\t\t\t\t\tcase CharacterCodes.doubleQuote:\n\t\t\t\t\t\tresult += '\\\"';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase CharacterCodes.backslash:\n\t\t\t\t\t\tresult += '\\\\';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase CharacterCodes.slash:\n\t\t\t\t\t\tresult += '/';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase CharacterCodes.b:\n\t\t\t\t\t\tresult += '\\b';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase CharacterCodes.f:\n\t\t\t\t\t\tresult += '\\f';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase CharacterCodes.n:\n\t\t\t\t\t\tresult += '\\n';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase CharacterCodes.r:\n\t\t\t\t\t\tresult += '\\r';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase CharacterCodes.t:\n\t\t\t\t\t\tresult += '\\t';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase CharacterCodes.u:\n\t\t\t\t\t\tlet ch = scanHexDigits(4, true);\n\t\t\t\t\t\tif (ch >= 0) {\n\t\t\t\t\t\t\tresult += String.fromCharCode(ch);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tscanError = ScanError.InvalidUnicode;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tscanError = ScanError.InvalidEscapeCharacter;\n\t\t\t\t}\n\t\t\t\tstart = pos;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch >= 0 && ch <= 0x1f) {\n\t\t\t\tif (isLineBreak(ch)) {\n\t\t\t\t\tresult += text.substring(start, pos);\n\t\t\t\t\tscanError = ScanError.UnexpectedEndOfString;\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tscanError = ScanError.InvalidCharacter;\n\t\t\t\t\t// mark as error but continue with string\n\t\t\t\t}\n\t\t\t}\n\t\t\tpos++;\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction scanNext(): SyntaxKind {\n\n\t\tvalue = '';\n\t\tscanError = ScanError.None;\n\n\t\ttokenOffset = pos;\n\n\t\tif (pos >= len) {\n\t\t\t// at the end\n\t\t\ttokenOffset = len;\n\t\t\treturn token = SyntaxKind.EOF;\n\t\t}\n\n\t\tlet code = text.charCodeAt(pos);\n\t\t// trivia: whitespace\n\t\tif (isWhiteSpace(code)) {\n\t\t\tdo {\n\t\t\t\tpos++;\n\t\t\t\tvalue += String.fromCharCode(code);\n\t\t\t\tcode = text.charCodeAt(pos);\n\t\t\t} while (isWhiteSpace(code));\n\n\t\t\treturn token = SyntaxKind.Trivia;\n\t\t}\n\n\t\t// trivia: newlines\n\t\tif (isLineBreak(code)) {\n\t\t\tpos++;\n\t\t\tvalue += String.fromCharCode(code);\n\t\t\tif (code === CharacterCodes.carriageReturn && text.charCodeAt(pos) === CharacterCodes.lineFeed) {\n\t\t\t\tpos++;\n\t\t\t\tvalue += '\\n';\n\t\t\t}\n\t\t\treturn token = SyntaxKind.LineBreakTrivia;\n\t\t}\n\n\t\tswitch (code) {\n\t\t\t// tokens: []{}:,\n\t\t\tcase CharacterCodes.openBrace:\n\t\t\t\tpos++;\n\t\t\t\treturn token = SyntaxKind.OpenBraceToken;\n\t\t\tcase CharacterCodes.closeBrace:\n\t\t\t\tpos++;\n\t\t\t\treturn token = SyntaxKind.CloseBraceToken;\n\t\t\tcase CharacterCodes.openBracket:\n\t\t\t\tpos++;\n\t\t\t\treturn token = SyntaxKind.OpenBracketToken;\n\t\t\tcase CharacterCodes.closeBracket:\n\t\t\t\tpos++;\n\t\t\t\treturn token = SyntaxKind.CloseBracketToken;\n\t\t\tcase CharacterCodes.colon:\n\t\t\t\tpos++;\n\t\t\t\treturn token = SyntaxKind.ColonToken;\n\t\t\tcase CharacterCodes.comma:\n\t\t\t\tpos++;\n\t\t\t\treturn token = SyntaxKind.CommaToken;\n\n\t\t\t// strings\n\t\t\tcase CharacterCodes.doubleQuote:\n\t\t\t\tpos++;\n\t\t\t\tvalue = scanString();\n\t\t\t\treturn token = SyntaxKind.StringLiteral;\n\n\t\t\t// comments\n\t\t\tcase CharacterCodes.slash:\n\t\t\t\tlet start = pos - 1;\n\t\t\t\t// Single-line comment\n\t\t\t\tif (text.charCodeAt(pos + 1) === CharacterCodes.slash) {\n\t\t\t\t\tpos += 2;\n\n\t\t\t\t\twhile (pos < len) {\n\t\t\t\t\t\tif (isLineBreak(text.charCodeAt(pos))) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpos++;\n\n\t\t\t\t\t}\n\t\t\t\t\tvalue = text.substring(start, pos);\n\t\t\t\t\treturn token = SyntaxKind.LineCommentTrivia;\n\t\t\t\t}\n\n\t\t\t\t// Multi-line comment\n\t\t\t\tif (text.charCodeAt(pos + 1) === CharacterCodes.asterisk) {\n\t\t\t\t\tpos += 2;\n\n\t\t\t\t\tlet safeLength = len - 1; // For lookahead.\n\t\t\t\t\tlet commentClosed = false;\n\t\t\t\t\twhile (pos < safeLength) {\n\t\t\t\t\t\tlet ch = text.charCodeAt(pos);\n\n\t\t\t\t\t\tif (ch === CharacterCodes.asterisk && text.charCodeAt(pos + 1) === CharacterCodes.slash) {\n\t\t\t\t\t\t\tpos += 2;\n\t\t\t\t\t\t\tcommentClosed = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpos++;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!commentClosed) {\n\t\t\t\t\t\tpos++;\n\t\t\t\t\t\tscanError = ScanError.UnexpectedEndOfComment;\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = text.substring(start, pos);\n\t\t\t\t\treturn token = SyntaxKind.BlockCommentTrivia;\n\t\t\t\t}\n\t\t\t\t// just a single slash\n\t\t\t\tvalue += String.fromCharCode(code);\n\t\t\t\tpos++;\n\t\t\t\treturn token = SyntaxKind.Unknown;\n\n\t\t\t// numbers\n\t\t\tcase CharacterCodes.minus:\n\t\t\t\tvalue += String.fromCharCode(code);\n\t\t\t\tpos++;\n\t\t\t\tif (pos === len || !isDigit(text.charCodeAt(pos))) {\n\t\t\t\t\treturn token = SyntaxKind.Unknown;\n\t\t\t\t}\n\t\t\t// found a minus, followed by a number so\n\t\t\t// we fall through to proceed with scanning\n\t\t\t// numbers\n\t\t\tcase CharacterCodes._0:\n\t\t\tcase CharacterCodes._1:\n\t\t\tcase CharacterCodes._2:\n\t\t\tcase CharacterCodes._3:\n\t\t\tcase CharacterCodes._4:\n\t\t\tcase CharacterCodes._5:\n\t\t\tcase CharacterCodes._6:\n\t\t\tcase CharacterCodes._7:\n\t\t\tcase CharacterCodes._8:\n\t\t\tcase CharacterCodes._9:\n\t\t\t\tvalue += scanNumber();\n\t\t\t\treturn token = SyntaxKind.NumericLiteral;\n\t\t\t// literals and unknown symbols\n\t\t\tdefault:\n\t\t\t\t// is a literal? Read the full word.\n\t\t\t\twhile (pos < len && isUnknownContentCharacter(code)) {\n\t\t\t\t\tpos++;\n\t\t\t\t\tcode = text.charCodeAt(pos);\n\t\t\t\t}\n\t\t\t\tif (tokenOffset !== pos) {\n\t\t\t\t\tvalue = text.substring(tokenOffset, pos);\n\t\t\t\t\t// keywords: true, false, null\n\t\t\t\t\tswitch (value) {\n\t\t\t\t\t\tcase 'true': return token = SyntaxKind.TrueKeyword;\n\t\t\t\t\t\tcase 'false': return token = SyntaxKind.FalseKeyword;\n\t\t\t\t\t\tcase 'null': return token = SyntaxKind.NullKeyword;\n\t\t\t\t\t}\n\t\t\t\t\treturn token = SyntaxKind.Unknown;\n\t\t\t\t}\n\t\t\t\t// some\n\t\t\t\tvalue += String.fromCharCode(code);\n\t\t\t\tpos++;\n\t\t\t\treturn token = SyntaxKind.Unknown;\n\t\t}\n\t}\n\n\tfunction isUnknownContentCharacter(code: CharacterCodes) {\n\t\tif (isWhiteSpace(code) || isLineBreak(code)) {\n\t\t\treturn false;\n\t\t}\n\t\tswitch (code) {\n\t\t\tcase CharacterCodes.closeBrace:\n\t\t\tcase CharacterCodes.closeBracket:\n\t\t\tcase CharacterCodes.openBrace:\n\t\t\tcase CharacterCodes.openBracket:\n\t\t\tcase CharacterCodes.doubleQuote:\n\t\t\tcase CharacterCodes.colon:\n\t\t\tcase CharacterCodes.comma:\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\n\tfunction scanNextNonTrivia(): SyntaxKind {\n\t\tlet result: SyntaxKind;\n\t\tdo {\n\t\t\tresult = scanNext();\n\t\t} while (result >= SyntaxKind.LineCommentTrivia && result <= SyntaxKind.Trivia);\n\t\treturn result;\n\t}\n\n\treturn {\n\t\tsetPosition: setPosition,\n\t\tgetPosition: () => pos,\n\t\tscan: ignoreTrivia ? scanNextNonTrivia : scanNext,\n\t\tgetToken: () => token,\n\t\tgetTokenValue: () => value,\n\t\tgetTokenOffset: () => tokenOffset,\n\t\tgetTokenLength: () => pos - tokenOffset,\n\t\tgetTokenError: () => scanError\n\t};\n}\n\nfunction isWhiteSpace(ch: number): boolean {\n\treturn ch === CharacterCodes.space || ch === CharacterCodes.tab || ch === CharacterCodes.verticalTab || ch === CharacterCodes.formFeed ||\n\t\tch === CharacterCodes.nonBreakingSpace || ch === CharacterCodes.ogham || ch >= CharacterCodes.enQuad && ch <= CharacterCodes.zeroWidthSpace ||\n\t\tch === CharacterCodes.narrowNoBreakSpace || ch === CharacterCodes.mathematicalSpace || ch === CharacterCodes.ideographicSpace || ch === CharacterCodes.byteOrderMark;\n}\n\nfunction isLineBreak(ch: number): boolean {\n\treturn ch === CharacterCodes.lineFeed || ch === CharacterCodes.carriageReturn || ch === CharacterCodes.lineSeparator || ch === CharacterCodes.paragraphSeparator;\n}\n\nfunction isDigit(ch: number): boolean {\n\treturn ch >= CharacterCodes._0 && ch <= CharacterCodes._9;\n}\n\nconst enum CharacterCodes {\n\tnullCharacter = 0,\n\tmaxAsciiCharacter = 0x7F,\n\n\tlineFeed = 0x0A, // \\n\n\tcarriageReturn = 0x0D, // \\r\n\tlineSeparator = 0x2028,\n\tparagraphSeparator = 0x2029,\n\n\t// REVIEW: do we need to support this? The scanner doesn't, but our IText does. This seems\n\t// like an odd disparity? (Or maybe it's completely fine for them to be different).\n\tnextLine = 0x0085,\n\n\t// Unicode 3.0 space characters\n\tspace = 0x0020, // \" \"\n\tnonBreakingSpace = 0x00A0, //\n\tenQuad = 0x2000,\n\temQuad = 0x2001,\n\tenSpace = 0x2002,\n\temSpace = 0x2003,\n\tthreePerEmSpace = 0x2004,\n\tfourPerEmSpace = 0x2005,\n\tsixPerEmSpace = 0x2006,\n\tfigureSpace = 0x2007,\n\tpunctuationSpace = 0x2008,\n\tthinSpace = 0x2009,\n\thairSpace = 0x200A,\n\tzeroWidthSpace = 0x200B,\n\tnarrowNoBreakSpace = 0x202F,\n\tideographicSpace = 0x3000,\n\tmathematicalSpace = 0x205F,\n\togham = 0x1680,\n\n\t_ = 0x5F,\n\t$ = 0x24,\n\n\t_0 = 0x30,\n\t_1 = 0x31,\n\t_2 = 0x32,\n\t_3 = 0x33,\n\t_4 = 0x34,\n\t_5 = 0x35,\n\t_6 = 0x36,\n\t_7 = 0x37,\n\t_8 = 0x38,\n\t_9 = 0x39,\n\n\ta = 0x61,\n\tb = 0x62,\n\tc = 0x63,\n\td = 0x64,\n\te = 0x65,\n\tf = 0x66,\n\tg = 0x67,\n\th = 0x68,\n\ti = 0x69,\n\tj = 0x6A,\n\tk = 0x6B,\n\tl = 0x6C,\n\tm = 0x6D,\n\tn = 0x6E,\n\to = 0x6F,\n\tp = 0x70,\n\tq = 0x71,\n\tr = 0x72,\n\ts = 0x73,\n\tt = 0x74,\n\tu = 0x75,\n\tv = 0x76,\n\tw = 0x77,\n\tx = 0x78,\n\ty = 0x79,\n\tz = 0x7A,\n\n\tA = 0x41,\n\tB = 0x42,\n\tC = 0x43,\n\tD = 0x44,\n\tE = 0x45,\n\tF = 0x46,\n\tG = 0x47,\n\tH = 0x48,\n\tI = 0x49,\n\tJ = 0x4A,\n\tK = 0x4B,\n\tL = 0x4C,\n\tM = 0x4D,\n\tN = 0x4E,\n\tO = 0x4F,\n\tP = 0x50,\n\tQ = 0x51,\n\tR = 0x52,\n\tS = 0x53,\n\tT = 0x54,\n\tU = 0x55,\n\tV = 0x56,\n\tW = 0x57,\n\tX = 0x58,\n\tY = 0x59,\n\tZ = 0x5a,\n\n\tampersand = 0x26, // &\n\tasterisk = 0x2A, // *\n\tat = 0x40, // @\n\tbackslash = 0x5C, // \\\n\tbar = 0x7C, // |\n\tcaret = 0x5E, // ^\n\tcloseBrace = 0x7D, // }\n\tcloseBracket = 0x5D, // ]\n\tcloseParen = 0x29, // )\n\tcolon = 0x3A, // :\n\tcomma = 0x2C, // ,\n\tdot = 0x2E, // .\n\tdoubleQuote = 0x22, // \"\n\tequals = 0x3D, // =\n\texclamation = 0x21, // !\n\tgreaterThan = 0x3E, // >\n\tlessThan = 0x3C, // <\n\tminus = 0x2D, // -\n\topenBrace = 0x7B, // {\n\topenBracket = 0x5B, // [\n\topenParen = 0x28, // (\n\tpercent = 0x25, // %\n\tplus = 0x2B, // +\n\tquestion = 0x3F, // ?\n\tsemicolon = 0x3B, // ;\n\tsingleQuote = 0x27, // '\n\tslash = 0x2F, // /\n\ttilde = 0x7E, // ~\n\n\tbackspace = 0x08, // \\b\n\tformFeed = 0x0C, // \\f\n\tbyteOrderMark = 0xFEFF,\n\ttab = 0x09, // \\t\n\tverticalTab = 0x0B, // \\v\n}\n\n\n/**\n * Takes JSON with JavaScript-style comments and remove\n * them. Optionally replaces every none-newline character\n * of comments with a replaceCharacter\n */\nexport function stripComments(text: string, replaceCh?: string): string {\n\n\tlet _scanner = createScanner(text),\n\t\tparts: string[] = [],\n\t\tkind: SyntaxKind,\n\t\toffset = 0,\n\t\tpos: number;\n\n\tdo {\n\t\tpos = _scanner.getPosition();\n\t\tkind = _scanner.scan();\n\t\tswitch (kind) {\n\t\t\tcase SyntaxKind.LineCommentTrivia:\n\t\t\tcase SyntaxKind.BlockCommentTrivia:\n\t\t\tcase SyntaxKind.EOF:\n\t\t\t\tif (offset !== pos) {\n\t\t\t\t\tparts.push(text.substring(offset, pos));\n\t\t\t\t}\n\t\t\t\tif (replaceCh !== void 0) {\n\t\t\t\t\tparts.push(_scanner.getTokenValue().replace(/[^\\r\\n]/g, replaceCh));\n\t\t\t\t}\n\t\t\t\toffset = _scanner.getPosition();\n\t\t\t\tbreak;\n\t\t}\n\t} while (kind !== SyntaxKind.EOF);\n\n\treturn parts.join('');\n}\n\nexport interface ParseError {\n\terror: ParseErrorCode;\n}\n\nexport enum ParseErrorCode {\n\tInvalidSymbol,\n\tInvalidNumberFormat,\n\tPropertyNameExpected,\n\tValueExpected,\n\tColonExpected,\n\tCommaExpected,\n\tCloseBraceExpected,\n\tCloseBracketExpected,\n\tEndOfFileExpected\n}\n\nexport type NodeType = 'object' | 'array' | 'property' | 'string' | 'number' | 'boolean' | 'null';\n\nfunction getLiteralNodeType(value: any): NodeType {\n\tswitch (typeof value) {\n\t\tcase 'boolean': return 'boolean';\n\t\tcase 'number': return 'number';\n\t\tcase 'string': return 'string';\n\t\tdefault: return 'null';\n\t}\n}\n\nexport interface Node {\n\ttype: NodeType;\n\tvalue?: any;\n\toffset: number;\n\tlength: number;\n\tcolumnOffset?: number;\n\tparent?: Node;\n\tchildren?: Node[];\n}\n\nexport type Segment = string | number;\nexport type JSONPath = Segment[];\n\nexport interface Location {\n\t/**\n\t * The previous property key or literal value (string, number, boolean or null) or undefined.\n\t */\n\tpreviousNode?: Node;\n\t/**\n\t * The path describing the location in the JSON document. The path consists of a sequence strings\n\t * representing an object property or numbers for array indices.\n\t */\n\tpath: JSONPath;\n\t/**\n\t * Matches the locations path against a pattern consisting of strings (for properties) and numbers (for array indices).\n\t * '*' will match a single segment, of any property name or index.\n\t * '**' will match a sequece of segments or no segment, of any property name or index.\n\t */\n\tmatches: (patterns: JSONPath) => boolean;\n\t/**\n\t * If set, the location's offset is at a property key.\n\t */\n\tisAtPropertyKey: boolean;\n}\n\n\n/**\n * For a given offset, evaluate the location in the JSON document. Each segment in the location path is either a property name or an array index.\n */\nexport function getLocation(text: string, position: number): Location {\n\tlet segments: any[] = []; // strings or numbers\n\tlet earlyReturnException = new Object();\n\tlet previousNode: Node = void 0;\n\tconst previousNodeInst: Node = {\n\t\tvalue: void 0,\n\t\toffset: void 0,\n\t\tlength: void 0,\n\t\ttype: void 0\n\t};\n\tlet isAtPropertyKey = false;\n\tfunction setPreviousNode(value: string, offset: number, length: number, type: NodeType) {\n\t\tpreviousNodeInst.value = value;\n\t\tpreviousNodeInst.offset = offset;\n\t\tpreviousNodeInst.length = length;\n\t\tpreviousNodeInst.type = type;\n\t\tpreviousNodeInst.columnOffset = void 0;\n\t\tpreviousNode = previousNodeInst;\n\t}\n\ttry {\n\n\t\tvisit(text, {\n\t\t\tonObjectBegin: (offset: number, length: number) => {\n\t\t\t\tif (position <= offset) {\n\t\t\t\t\tthrow earlyReturnException;\n\t\t\t\t}\n\t\t\t\tpreviousNode = void 0;\n\t\t\t\tisAtPropertyKey = position > offset;\n\t\t\t\tsegments.push(''); // push a placeholder (will be replaced)\n\t\t\t},\n\t\t\tonObjectProperty: (name: string, offset: number, length: number) => {\n\t\t\t\tif (position < offset) {\n\t\t\t\t\tthrow earlyReturnException;\n\t\t\t\t}\n\t\t\t\tsetPreviousNode(name, offset, length, 'property');\n\t\t\t\tsegments[segments.length - 1] = name;\n\t\t\t\tif (position <= offset + length) {\n\t\t\t\t\tthrow earlyReturnException;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonObjectEnd: (offset: number, length: number) => {\n\t\t\t\tif (position <= offset) {\n\t\t\t\t\tthrow earlyReturnException;\n\t\t\t\t}\n\t\t\t\tpreviousNode = void 0;\n\t\t\t\tsegments.pop();\n\t\t\t},\n\t\t\tonArrayBegin: (offset: number, length: number) => {\n\t\t\t\tif (position <= offset) {\n\t\t\t\t\tthrow earlyReturnException;\n\t\t\t\t}\n\t\t\t\tpreviousNode = void 0;\n\t\t\t\tsegments.push(0);\n\t\t\t},\n\t\t\tonArrayEnd: (offset: number, length: number) => {\n\t\t\t\tif (position <= offset) {\n\t\t\t\t\tthrow earlyReturnException;\n\t\t\t\t}\n\t\t\t\tpreviousNode = void 0;\n\t\t\t\tsegments.pop();\n\t\t\t},\n\t\t\tonLiteralValue: (value: any, offset: number, length: number) => {\n\t\t\t\tif (position < offset) {\n\t\t\t\t\tthrow earlyReturnException;\n\t\t\t\t}\n\t\t\t\tsetPreviousNode(value, offset, length, getLiteralNodeType(value));\n\n\t\t\t\tif (position <= offset + length) {\n\t\t\t\t\tthrow earlyReturnException;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonSeparator: (sep: string, offset: number, length: number) => {\n\t\t\t\tif (position <= offset) {\n\t\t\t\t\tthrow earlyReturnException;\n\t\t\t\t}\n\t\t\t\tif (sep === ':' && previousNode.type === 'property') {\n\t\t\t\t\tpreviousNode.columnOffset = offset;\n\t\t\t\t\tisAtPropertyKey = false;\n\t\t\t\t\tpreviousNode = void 0;\n\t\t\t\t} else if (sep === ',') {\n\t\t\t\t\tlet last = segments[segments.length - 1];\n\t\t\t\t\tif (typeof last === 'number') {\n\t\t\t\t\t\tsegments[segments.length - 1] = last + 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tisAtPropertyKey = true;\n\t\t\t\t\t\tsegments[segments.length - 1] = '';\n\t\t\t\t\t}\n\t\t\t\t\tpreviousNode = void 0;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} catch (e) {\n\t\tif (e !== earlyReturnException) {\n\t\t\tthrow e;\n\t\t}\n\t}\n\n\treturn {\n\t\tpath: segments,\n\t\tpreviousNode,\n\t\tisAtPropertyKey,\n\t\tmatches: (pattern: string[]) => {\n\t\t\tlet k = 0;\n\t\t\tfor (let i = 0; k < pattern.length && i < segments.length; i++) {\n\t\t\t\tif (pattern[k] === segments[i] || pattern[k] === '*') {\n\t\t\t\t\tk++;\n\t\t\t\t} else if (pattern[k] !== '**') {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn k === pattern.length;\n\t\t}\n\t};\n}\n\nexport interface ParseOptions {\n\tdisallowComments?: boolean;\n\tallowTrailingComma?: boolean;\n}\n\n/**\n * Parses the given text and returns the object the JSON content represents. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n * Therefore always check the errors list to find out if the input was valid.\n */\nexport function parse(text: string, errors: ParseError[] = [], options?: ParseOptions): any {\n\tlet currentProperty: string = null;\n\tlet currentParent: any = [];\n\tlet previousParents: any[] = [];\n\n\tfunction onValue(value: any) {\n\t\tif (Array.isArray(currentParent)) {\n\t\t\t(currentParent).push(value);\n\t\t} else if (currentProperty) {\n\t\t\tcurrentParent[currentProperty] = value;\n\t\t}\n\t}\n\n\tlet visitor: JSONVisitor = {\n\t\tonObjectBegin: () => {\n\t\t\tlet object = {};\n\t\t\tonValue(object);\n\t\t\tpreviousParents.push(currentParent);\n\t\t\tcurrentParent = object;\n\t\t\tcurrentProperty = null;\n\t\t},\n\t\tonObjectProperty: (name: string) => {\n\t\t\tcurrentProperty = name;\n\t\t},\n\t\tonObjectEnd: () => {\n\t\t\tcurrentParent = previousParents.pop();\n\t\t},\n\t\tonArrayBegin: () => {\n\t\t\tlet array = [];\n\t\t\tonValue(array);\n\t\t\tpreviousParents.push(currentParent);\n\t\t\tcurrentParent = array;\n\t\t\tcurrentProperty = null;\n\t\t},\n\t\tonArrayEnd: () => {\n\t\t\tcurrentParent = previousParents.pop();\n\t\t},\n\t\tonLiteralValue: onValue,\n\t\tonError: (error: ParseErrorCode) => {\n\t\t\terrors.push({ error: error });\n\t\t}\n\t};\n\tvisit(text, visitor, options);\n\treturn currentParent[0];\n}\n\n\n/**\n * Parses the given text and returns a tree representation the JSON content. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n */\nexport function parseTree(text: string, errors: ParseError[] = [], options?: ParseOptions): Node {\n\tlet currentParent: Node = { type: 'array', offset: -1, length: -1, children: [] }; // artificial root\n\n\tfunction ensurePropertyComplete(endOffset: number) {\n\t\tif (currentParent.type === 'property') {\n\t\t\tcurrentParent.length = endOffset - currentParent.offset;\n\t\t\tcurrentParent = currentParent.parent;\n\t\t}\n\t}\n\n\tfunction onValue(valueNode: Node): Node {\n\t\tcurrentParent.children.push(valueNode);\n\t\treturn valueNode;\n\t}\n\n\tlet visitor: JSONVisitor = {\n\t\tonObjectBegin: (offset: number) => {\n\t\t\tcurrentParent = onValue({ type: 'object', offset, length: -1, parent: currentParent, children: [] });\n\t\t},\n\t\tonObjectProperty: (name: string, offset: number, length: number) => {\n\t\t\tcurrentParent = onValue({ type: 'property', offset, length: -1, parent: currentParent, children: [] });\n\t\t\tcurrentParent.children.push({ type: 'string', value: name, offset, length, parent: currentParent });\n\t\t},\n\t\tonObjectEnd: (offset: number, length: number) => {\n\t\t\tcurrentParent.length = offset + length - currentParent.offset;\n\t\t\tcurrentParent = currentParent.parent;\n\t\t\tensurePropertyComplete(offset + length);\n\t\t},\n\t\tonArrayBegin: (offset: number, length: number) => {\n\t\t\tcurrentParent = onValue({ type: 'array', offset, length: -1, parent: currentParent, children: [] });\n\t\t},\n\t\tonArrayEnd: (offset: number, length: number) => {\n\t\t\tcurrentParent.length = offset + length - currentParent.offset;\n\t\t\tcurrentParent = currentParent.parent;\n\t\t\tensurePropertyComplete(offset + length);\n\t\t},\n\t\tonLiteralValue: (value: any, offset: number, length: number) => {\n\t\t\tonValue({ type: getLiteralNodeType(value), offset, length, parent: currentParent, value });\n\t\t\tensurePropertyComplete(offset + length);\n\t\t},\n\t\tonSeparator: (sep: string, offset: number, length: number) => {\n\t\t\tif (currentParent.type === 'property') {\n\t\t\t\tif (sep === ':') {\n\t\t\t\t\tcurrentParent.columnOffset = offset;\n\t\t\t\t} else if (sep === ',') {\n\t\t\t\t\tensurePropertyComplete(offset);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonError: (error: ParseErrorCode) => {\n\t\t\terrors.push({ error: error });\n\t\t}\n\t};\n\tvisit(text, visitor, options);\n\n\tlet result = currentParent.children[0];\n\tif (result) {\n\t\tdelete result.parent;\n\t}\n\treturn result;\n}\n\nexport function findNodeAtLocation(root: Node, path: JSONPath): Node {\n\tif (!root) {\n\t\treturn void 0;\n\t}\n\tlet node = root;\n\tfor (let segment of path) {\n\t\tif (typeof segment === 'string') {\n\t\t\tif (node.type !== 'object') {\n\t\t\t\treturn void 0;\n\t\t\t}\n\t\t\tlet found = false;\n\t\t\tfor (let propertyNode of node.children) {\n\t\t\t\tif (propertyNode.children[0].value === segment) {\n\t\t\t\t\tnode = propertyNode.children[1];\n\t\t\t\t\tfound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!found) {\n\t\t\t\treturn void 0;\n\t\t\t}\n\t\t} else {\n\t\t\tlet index = segment;\n\t\t\tif (node.type !== 'array' || index < 0 || index >= node.children.length) {\n\t\t\t\treturn void 0;\n\t\t\t}\n\t\t\tnode = node.children[index];\n\t\t}\n\t}\n\treturn node;\n}\n\nexport function getNodeValue(node: Node): any {\n\tif (node.type === 'array') {\n\t\treturn node.children.map(getNodeValue);\n\t} else if (node.type === 'object') {\n\t\tlet obj = {};\n\t\tfor (let prop of node.children) {\n\t\t\tobj[prop.children[0].value] = getNodeValue(prop.children[1]);\n\t\t}\n\t\treturn obj;\n\t}\n\treturn node.value;\n}\n\n\n/**\n * Parses the given text and invokes the visitor functions for each object, array and literal reached.\n */\nexport function visit(text: string, visitor: JSONVisitor, options?: ParseOptions): any {\n\n\tlet _scanner = createScanner(text, false);\n\n\tfunction toNoArgVisit(visitFunction: (offset: number, length: number) => void): () => void {\n\t\treturn visitFunction ? () => visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength()) : () => true;\n\t}\n\tfunction toOneArgVisit(visitFunction: (arg: T, offset: number, length: number) => void): (arg: T) => void {\n\t\treturn visitFunction ? (arg: T) => visitFunction(arg, _scanner.getTokenOffset(), _scanner.getTokenLength()) : () => true;\n\t}\n\n\tlet onObjectBegin = toNoArgVisit(visitor.onObjectBegin),\n\t\tonObjectProperty = toOneArgVisit(visitor.onObjectProperty),\n\t\tonObjectEnd = toNoArgVisit(visitor.onObjectEnd),\n\t\tonArrayBegin = toNoArgVisit(visitor.onArrayBegin),\n\t\tonArrayEnd = toNoArgVisit(visitor.onArrayEnd),\n\t\tonLiteralValue = toOneArgVisit(visitor.onLiteralValue),\n\t\tonSeparator = toOneArgVisit(visitor.onSeparator),\n\t\tonError = toOneArgVisit(visitor.onError);\n\n\tlet disallowComments = options && options.disallowComments;\n\tlet allowTrailingComma = options && options.allowTrailingComma;\n\tfunction scanNext(): SyntaxKind {\n\t\twhile (true) {\n\t\t\tlet token = _scanner.scan();\n\t\t\tswitch (token) {\n\t\t\t\tcase SyntaxKind.LineCommentTrivia:\n\t\t\t\tcase SyntaxKind.BlockCommentTrivia:\n\t\t\t\t\tif (disallowComments) {\n\t\t\t\t\t\thandleError(ParseErrorCode.InvalidSymbol);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase SyntaxKind.Unknown:\n\t\t\t\t\thandleError(ParseErrorCode.InvalidSymbol);\n\t\t\t\t\tbreak;\n\t\t\t\tcase SyntaxKind.Trivia:\n\t\t\t\tcase SyntaxKind.LineBreakTrivia:\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn token;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction handleError(error: ParseErrorCode, skipUntilAfter: SyntaxKind[] = [], skipUntil: SyntaxKind[] = []): void {\n\t\tonError(error);\n\t\tif (skipUntilAfter.length + skipUntil.length > 0) {\n\t\t\tlet token = _scanner.getToken();\n\t\t\twhile (token !== SyntaxKind.EOF) {\n\t\t\t\tif (skipUntilAfter.indexOf(token) !== -1) {\n\t\t\t\t\tscanNext();\n\t\t\t\t\tbreak;\n\t\t\t\t} else if (skipUntil.indexOf(token) !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\ttoken = scanNext();\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction parseString(isValue: boolean): boolean {\n\t\tlet value = _scanner.getTokenValue();\n\t\tif (isValue) {\n\t\t\tonLiteralValue(value);\n\t\t} else {\n\t\t\tonObjectProperty(value);\n\t\t}\n\t\tscanNext();\n\t\treturn true;\n\t}\n\n\tfunction parseLiteral(): boolean {\n\t\tswitch (_scanner.getToken()) {\n\t\t\tcase SyntaxKind.NumericLiteral:\n\t\t\t\tlet value = 0;\n\t\t\t\ttry {\n\t\t\t\t\tvalue = JSON.parse(_scanner.getTokenValue());\n\t\t\t\t\tif (typeof value !== 'number') {\n\t\t\t\t\t\thandleError(ParseErrorCode.InvalidNumberFormat);\n\t\t\t\t\t\tvalue = 0;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\thandleError(ParseErrorCode.InvalidNumberFormat);\n\t\t\t\t}\n\t\t\t\tonLiteralValue(value);\n\t\t\t\tbreak;\n\t\t\tcase SyntaxKind.NullKeyword:\n\t\t\t\tonLiteralValue(null);\n\t\t\t\tbreak;\n\t\t\tcase SyntaxKind.TrueKeyword:\n\t\t\t\tonLiteralValue(true);\n\t\t\t\tbreak;\n\t\t\tcase SyntaxKind.FalseKeyword:\n\t\t\t\tonLiteralValue(false);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t\tscanNext();\n\t\treturn true;\n\t}\n\n\tfunction parseProperty(): boolean {\n\t\tif (_scanner.getToken() !== SyntaxKind.StringLiteral) {\n\t\t\thandleError(ParseErrorCode.PropertyNameExpected, [], [SyntaxKind.CloseBraceToken, SyntaxKind.CommaToken]);\n\t\t\treturn false;\n\t\t}\n\t\tparseString(false);\n\t\tif (_scanner.getToken() === SyntaxKind.ColonToken) {\n\t\t\tonSeparator(':');\n\t\t\tscanNext(); // consume colon\n\n\t\t\tif (!parseValue()) {\n\t\t\t\thandleError(ParseErrorCode.ValueExpected, [], [SyntaxKind.CloseBraceToken, SyntaxKind.CommaToken]);\n\t\t\t}\n\t\t} else {\n\t\t\thandleError(ParseErrorCode.ColonExpected, [], [SyntaxKind.CloseBraceToken, SyntaxKind.CommaToken]);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction parseObject(): boolean {\n\t\tonObjectBegin();\n\t\tscanNext(); // consume open brace\n\n\t\tlet needsComma = false;\n\t\twhile (_scanner.getToken() !== SyntaxKind.CloseBraceToken && _scanner.getToken() !== SyntaxKind.EOF) {\n\t\t\tif (_scanner.getToken() === SyntaxKind.CommaToken) {\n\t\t\t\tif (!needsComma) {\n\t\t\t\t\thandleError(ParseErrorCode.ValueExpected, [], []);\n\t\t\t\t}\n\t\t\t\tonSeparator(',');\n\t\t\t\tscanNext(); // consume comma\n\t\t\t\tif (_scanner.getToken() === SyntaxKind.CloseBraceToken && allowTrailingComma) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if (needsComma) {\n\t\t\t\thandleError(ParseErrorCode.CommaExpected, [], []);\n\t\t\t}\n\t\t\tif (!parseProperty()) {\n\t\t\t\thandleError(ParseErrorCode.ValueExpected, [], [SyntaxKind.CloseBraceToken, SyntaxKind.CommaToken]);\n\t\t\t}\n\t\t\tneedsComma = true;\n\t\t}\n\t\tonObjectEnd();\n\t\tif (_scanner.getToken() !== SyntaxKind.CloseBraceToken) {\n\t\t\thandleError(ParseErrorCode.CloseBraceExpected, [SyntaxKind.CloseBraceToken], []);\n\t\t} else {\n\t\t\tscanNext(); // consume close brace\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction parseArray(): boolean {\n\t\tonArrayBegin();\n\t\tscanNext(); // consume open bracket\n\n\t\tlet needsComma = false;\n\t\twhile (_scanner.getToken() !== SyntaxKind.CloseBracketToken && _scanner.getToken() !== SyntaxKind.EOF) {\n\t\t\tif (_scanner.getToken() === SyntaxKind.CommaToken) {\n\t\t\t\tif (!needsComma) {\n\t\t\t\t\thandleError(ParseErrorCode.ValueExpected, [], []);\n\t\t\t\t}\n\t\t\t\tonSeparator(',');\n\t\t\t\tscanNext(); // consume comma\n\t\t\t} else if (needsComma) {\n\t\t\t\thandleError(ParseErrorCode.CommaExpected, [], []);\n\t\t\t}\n\t\t\tif (!parseValue()) {\n\t\t\t\thandleError(ParseErrorCode.ValueExpected, [], [SyntaxKind.CloseBracketToken, SyntaxKind.CommaToken]);\n\t\t\t}\n\t\t\tneedsComma = true;\n\t\t}\n\t\tonArrayEnd();\n\t\tif (_scanner.getToken() !== SyntaxKind.CloseBracketToken) {\n\t\t\thandleError(ParseErrorCode.CloseBracketExpected, [SyntaxKind.CloseBracketToken], []);\n\t\t} else {\n\t\t\tscanNext(); // consume close bracket\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction parseValue(): boolean {\n\t\tswitch (_scanner.getToken()) {\n\t\t\tcase SyntaxKind.OpenBracketToken:\n\t\t\t\treturn parseArray();\n\t\t\tcase SyntaxKind.OpenBraceToken:\n\t\t\t\treturn parseObject();\n\t\t\tcase SyntaxKind.StringLiteral:\n\t\t\t\treturn parseString(true);\n\t\t\tdefault:\n\t\t\t\treturn parseLiteral();\n\t\t}\n\t}\n\n\tscanNext();\n\tif (_scanner.getToken() === SyntaxKind.EOF) {\n\t\treturn true;\n\t}\n\tif (!parseValue()) {\n\t\thandleError(ParseErrorCode.ValueExpected, [], []);\n\t\treturn false;\n\t}\n\tif (_scanner.getToken() !== SyntaxKind.EOF) {\n\t\thandleError(ParseErrorCode.EndOfFileExpected, [], []);\n\t}\n\treturn true;\n}\n\nexport interface JSONVisitor {\n\t/**\n\t * Invoked when an open brace is encountered and an object is started. The offset and length represent the location of the open brace.\n\t */\n\tonObjectBegin?: (offset: number, length: number) => void;\n\n\t/**\n\t * Invoked when a property is encountered. The offset and length represent the location of the property name.\n\t */\n\tonObjectProperty?: (property: string, offset: number, length: number) => void;\n\n\t/**\n\t * Invoked when a closing brace is encountered and an object is completed. The offset and length represent the location of the closing brace.\n\t */\n\tonObjectEnd?: (offset: number, length: number) => void;\n\n\t/**\n\t * Invoked when an open bracket is encountered. The offset and length represent the location of the open bracket.\n\t */\n\tonArrayBegin?: (offset: number, length: number) => void;\n\n\t/**\n\t * Invoked when a closing bracket is encountered. The offset and length represent the location of the closing bracket.\n\t */\n\tonArrayEnd?: (offset: number, length: number) => void;\n\n\t/**\n\t * Invoked when a literal value is encountered. The offset and length represent the location of the literal value.\n\t */\n\tonLiteralValue?: (value: any, offset: number, length: number) => void;\n\n\t/**\n\t * Invoked when a comma or colon separator is encountered. The offset and length represent the location of the separator.\n\t */\n\tonSeparator?: (charcter: string, offset: number, length: number) => void;\n\n\t/**\n\t * Invoked on an error.\n\t */\n\tonError?: (error: ParseErrorCode, offset: number, length: number) => void;\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'use strict';\n\nimport { OperatingSystem } from 'vs/base/common/platform';\n\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 const enum KeyCode {\n\t/**\n\t * Placed first to cover the 0 value of the enum.\n\t */\n\tUnknown = 0,\n\n\tBackspace = 1,\n\tTab = 2,\n\tEnter = 3,\n\tShift = 4,\n\tCtrl = 5,\n\tAlt = 6,\n\tPauseBreak = 7,\n\tCapsLock = 8,\n\tEscape = 9,\n\tSpace = 10,\n\tPageUp = 11,\n\tPageDown = 12,\n\tEnd = 13,\n\tHome = 14,\n\tLeftArrow = 15,\n\tUpArrow = 16,\n\tRightArrow = 17,\n\tDownArrow = 18,\n\tInsert = 19,\n\tDelete = 20,\n\n\tKEY_0 = 21,\n\tKEY_1 = 22,\n\tKEY_2 = 23,\n\tKEY_3 = 24,\n\tKEY_4 = 25,\n\tKEY_5 = 26,\n\tKEY_6 = 27,\n\tKEY_7 = 28,\n\tKEY_8 = 29,\n\tKEY_9 = 30,\n\n\tKEY_A = 31,\n\tKEY_B = 32,\n\tKEY_C = 33,\n\tKEY_D = 34,\n\tKEY_E = 35,\n\tKEY_F = 36,\n\tKEY_G = 37,\n\tKEY_H = 38,\n\tKEY_I = 39,\n\tKEY_J = 40,\n\tKEY_K = 41,\n\tKEY_L = 42,\n\tKEY_M = 43,\n\tKEY_N = 44,\n\tKEY_O = 45,\n\tKEY_P = 46,\n\tKEY_Q = 47,\n\tKEY_R = 48,\n\tKEY_S = 49,\n\tKEY_T = 50,\n\tKEY_U = 51,\n\tKEY_V = 52,\n\tKEY_W = 53,\n\tKEY_X = 54,\n\tKEY_Y = 55,\n\tKEY_Z = 56,\n\n\tMeta = 57,\n\tContextMenu = 58,\n\n\tF1 = 59,\n\tF2 = 60,\n\tF3 = 61,\n\tF4 = 62,\n\tF5 = 63,\n\tF6 = 64,\n\tF7 = 65,\n\tF8 = 66,\n\tF9 = 67,\n\tF10 = 68,\n\tF11 = 69,\n\tF12 = 70,\n\tF13 = 71,\n\tF14 = 72,\n\tF15 = 73,\n\tF16 = 74,\n\tF17 = 75,\n\tF18 = 76,\n\tF19 = 77,\n\n\tNumLock = 78,\n\tScrollLock = 79,\n\n\t/**\n\t * Used for miscellaneous characters; it can vary by keyboard.\n\t * For the US standard keyboard, the ';:' key\n\t */\n\tUS_SEMICOLON = 80,\n\t/**\n\t * For any country/region, the '+' key\n\t * For the US standard keyboard, the '=+' key\n\t */\n\tUS_EQUAL = 81,\n\t/**\n\t * For any country/region, the ',' key\n\t * For the US standard keyboard, the ',<' key\n\t */\n\tUS_COMMA = 82,\n\t/**\n\t * For any country/region, the '-' key\n\t * For the US standard keyboard, the '-_' key\n\t */\n\tUS_MINUS = 83,\n\t/**\n\t * For any country/region, the '.' key\n\t * For the US standard keyboard, the '.>' key\n\t */\n\tUS_DOT = 84,\n\t/**\n\t * Used for miscellaneous characters; it can vary by keyboard.\n\t * For the US standard keyboard, the '/?' key\n\t */\n\tUS_SLASH = 85,\n\t/**\n\t * Used for miscellaneous characters; it can vary by keyboard.\n\t * For the US standard keyboard, the '`~' key\n\t */\n\tUS_BACKTICK = 86,\n\t/**\n\t * Used for miscellaneous characters; it can vary by keyboard.\n\t * For the US standard keyboard, the '[{' key\n\t */\n\tUS_OPEN_SQUARE_BRACKET = 87,\n\t/**\n\t * Used for miscellaneous characters; it can vary by keyboard.\n\t * For the US standard keyboard, the '\\|' key\n\t */\n\tUS_BACKSLASH = 88,\n\t/**\n\t * Used for miscellaneous characters; it can vary by keyboard.\n\t * For the US standard keyboard, the ']}' key\n\t */\n\tUS_CLOSE_SQUARE_BRACKET = 89,\n\t/**\n\t * Used for miscellaneous characters; it can vary by keyboard.\n\t * For the US standard keyboard, the ''\"' key\n\t */\n\tUS_QUOTE = 90,\n\t/**\n\t * Used for miscellaneous characters; it can vary by keyboard.\n\t */\n\tOEM_8 = 91,\n\t/**\n\t * Either the angle bracket key or the backslash key on the RT 102-key keyboard.\n\t */\n\tOEM_102 = 92,\n\n\tNUMPAD_0 = 93, // VK_NUMPAD0, 0x60, Numeric keypad 0 key\n\tNUMPAD_1 = 94, // VK_NUMPAD1, 0x61, Numeric keypad 1 key\n\tNUMPAD_2 = 95, // VK_NUMPAD2, 0x62, Numeric keypad 2 key\n\tNUMPAD_3 = 96, // VK_NUMPAD3, 0x63, Numeric keypad 3 key\n\tNUMPAD_4 = 97, // VK_NUMPAD4, 0x64, Numeric keypad 4 key\n\tNUMPAD_5 = 98, // VK_NUMPAD5, 0x65, Numeric keypad 5 key\n\tNUMPAD_6 = 99, // VK_NUMPAD6, 0x66, Numeric keypad 6 key\n\tNUMPAD_7 = 100, // VK_NUMPAD7, 0x67, Numeric keypad 7 key\n\tNUMPAD_8 = 101, // VK_NUMPAD8, 0x68, Numeric keypad 8 key\n\tNUMPAD_9 = 102, // VK_NUMPAD9, 0x69, Numeric keypad 9 key\n\n\tNUMPAD_MULTIPLY = 103,\t// VK_MULTIPLY, 0x6A, Multiply key\n\tNUMPAD_ADD = 104,\t\t// VK_ADD, 0x6B, Add key\n\tNUMPAD_SEPARATOR = 105,\t// VK_SEPARATOR, 0x6C, Separator key\n\tNUMPAD_SUBTRACT = 106,\t// VK_SUBTRACT, 0x6D, Subtract key\n\tNUMPAD_DECIMAL = 107,\t// VK_DECIMAL, 0x6E, Decimal key\n\tNUMPAD_DIVIDE = 108,\t// VK_DIVIDE, 0x6F,\n\n\t/**\n\t * Cover all key codes when IME is processing input.\n\t */\n\tKEY_IN_COMPOSITION = 109,\n\n\tABNT_C1 = 110, // Brazilian (ABNT) Keyboard\n\tABNT_C2 = 111, // Brazilian (ABNT) Keyboard\n\n\t/**\n\t * Placed last to cover the length of the enum.\n\t * Please do not depend on this value!\n\t */\n\tMAX_VALUE\n}\n\nclass KeyCodeStrMap {\n\n\tprivate _keyCodeToStr: string[];\n\tprivate _strToKeyCode: { [str: string]: KeyCode; };\n\n\tconstructor() {\n\t\tthis._keyCodeToStr = [];\n\t\tthis._strToKeyCode = Object.create(null);\n\t}\n\n\tdefine(keyCode: KeyCode, str: string): void {\n\t\tthis._keyCodeToStr[keyCode] = str;\n\t\tthis._strToKeyCode[str.toLowerCase()] = keyCode;\n\t}\n\n\tkeyCodeToStr(keyCode: KeyCode): string {\n\t\treturn this._keyCodeToStr[keyCode];\n\t}\n\n\tstrToKeyCode(str: string): KeyCode {\n\t\treturn this._strToKeyCode[str.toLowerCase()] || KeyCode.Unknown;\n\t}\n}\n\nconst uiMap = new KeyCodeStrMap();\nconst userSettingsUSMap = new KeyCodeStrMap();\nconst userSettingsGeneralMap = new KeyCodeStrMap();\n\n(function () {\n\n\tfunction define(keyCode: KeyCode, uiLabel: string, usUserSettingsLabel: string = uiLabel, generalUserSettingsLabel: string = usUserSettingsLabel): void {\n\t\tuiMap.define(keyCode, uiLabel);\n\t\tuserSettingsUSMap.define(keyCode, usUserSettingsLabel);\n\t\tuserSettingsGeneralMap.define(keyCode, generalUserSettingsLabel);\n\t}\n\n\tdefine(KeyCode.Unknown, 'unknown');\n\n\tdefine(KeyCode.Backspace, 'Backspace');\n\tdefine(KeyCode.Tab, 'Tab');\n\tdefine(KeyCode.Enter, 'Enter');\n\tdefine(KeyCode.Shift, 'Shift');\n\tdefine(KeyCode.Ctrl, 'Ctrl');\n\tdefine(KeyCode.Alt, 'Alt');\n\tdefine(KeyCode.PauseBreak, 'PauseBreak');\n\tdefine(KeyCode.CapsLock, 'CapsLock');\n\tdefine(KeyCode.Escape, 'Escape');\n\tdefine(KeyCode.Space, 'Space');\n\tdefine(KeyCode.PageUp, 'PageUp');\n\tdefine(KeyCode.PageDown, 'PageDown');\n\tdefine(KeyCode.End, 'End');\n\tdefine(KeyCode.Home, 'Home');\n\n\tdefine(KeyCode.LeftArrow, 'LeftArrow', 'Left');\n\tdefine(KeyCode.UpArrow, 'UpArrow', 'Up');\n\tdefine(KeyCode.RightArrow, 'RightArrow', 'Right');\n\tdefine(KeyCode.DownArrow, 'DownArrow', 'Down');\n\tdefine(KeyCode.Insert, 'Insert');\n\tdefine(KeyCode.Delete, 'Delete');\n\n\tdefine(KeyCode.KEY_0, '0');\n\tdefine(KeyCode.KEY_1, '1');\n\tdefine(KeyCode.KEY_2, '2');\n\tdefine(KeyCode.KEY_3, '3');\n\tdefine(KeyCode.KEY_4, '4');\n\tdefine(KeyCode.KEY_5, '5');\n\tdefine(KeyCode.KEY_6, '6');\n\tdefine(KeyCode.KEY_7, '7');\n\tdefine(KeyCode.KEY_8, '8');\n\tdefine(KeyCode.KEY_9, '9');\n\n\tdefine(KeyCode.KEY_A, 'A');\n\tdefine(KeyCode.KEY_B, 'B');\n\tdefine(KeyCode.KEY_C, 'C');\n\tdefine(KeyCode.KEY_D, 'D');\n\tdefine(KeyCode.KEY_E, 'E');\n\tdefine(KeyCode.KEY_F, 'F');\n\tdefine(KeyCode.KEY_G, 'G');\n\tdefine(KeyCode.KEY_H, 'H');\n\tdefine(KeyCode.KEY_I, 'I');\n\tdefine(KeyCode.KEY_J, 'J');\n\tdefine(KeyCode.KEY_K, 'K');\n\tdefine(KeyCode.KEY_L, 'L');\n\tdefine(KeyCode.KEY_M, 'M');\n\tdefine(KeyCode.KEY_N, 'N');\n\tdefine(KeyCode.KEY_O, 'O');\n\tdefine(KeyCode.KEY_P, 'P');\n\tdefine(KeyCode.KEY_Q, 'Q');\n\tdefine(KeyCode.KEY_R, 'R');\n\tdefine(KeyCode.KEY_S, 'S');\n\tdefine(KeyCode.KEY_T, 'T');\n\tdefine(KeyCode.KEY_U, 'U');\n\tdefine(KeyCode.KEY_V, 'V');\n\tdefine(KeyCode.KEY_W, 'W');\n\tdefine(KeyCode.KEY_X, 'X');\n\tdefine(KeyCode.KEY_Y, 'Y');\n\tdefine(KeyCode.KEY_Z, 'Z');\n\n\tdefine(KeyCode.Meta, 'Meta');\n\tdefine(KeyCode.ContextMenu, 'ContextMenu');\n\n\tdefine(KeyCode.F1, 'F1');\n\tdefine(KeyCode.F2, 'F2');\n\tdefine(KeyCode.F3, 'F3');\n\tdefine(KeyCode.F4, 'F4');\n\tdefine(KeyCode.F5, 'F5');\n\tdefine(KeyCode.F6, 'F6');\n\tdefine(KeyCode.F7, 'F7');\n\tdefine(KeyCode.F8, 'F8');\n\tdefine(KeyCode.F9, 'F9');\n\tdefine(KeyCode.F10, 'F10');\n\tdefine(KeyCode.F11, 'F11');\n\tdefine(KeyCode.F12, 'F12');\n\tdefine(KeyCode.F13, 'F13');\n\tdefine(KeyCode.F14, 'F14');\n\tdefine(KeyCode.F15, 'F15');\n\tdefine(KeyCode.F16, 'F16');\n\tdefine(KeyCode.F17, 'F17');\n\tdefine(KeyCode.F18, 'F18');\n\tdefine(KeyCode.F19, 'F19');\n\n\tdefine(KeyCode.NumLock, 'NumLock');\n\tdefine(KeyCode.ScrollLock, 'ScrollLock');\n\n\tdefine(KeyCode.US_SEMICOLON, ';', ';', 'OEM_1');\n\tdefine(KeyCode.US_EQUAL, '=', '=', 'OEM_PLUS');\n\tdefine(KeyCode.US_COMMA, ',', ',', 'OEM_COMMA');\n\tdefine(KeyCode.US_MINUS, '-', '-', 'OEM_MINUS');\n\tdefine(KeyCode.US_DOT, '.', '.', 'OEM_PERIOD');\n\tdefine(KeyCode.US_SLASH, '/', '/', 'OEM_2');\n\tdefine(KeyCode.US_BACKTICK, '`', '`', 'OEM_3');\n\tdefine(KeyCode.ABNT_C1, 'ABNT_C1');\n\tdefine(KeyCode.ABNT_C2, 'ABNT_C2');\n\tdefine(KeyCode.US_OPEN_SQUARE_BRACKET, '[', '[', 'OEM_4');\n\tdefine(KeyCode.US_BACKSLASH, '\\\\', '\\\\', 'OEM_5');\n\tdefine(KeyCode.US_CLOSE_SQUARE_BRACKET, ']', ']', 'OEM_6');\n\tdefine(KeyCode.US_QUOTE, '\\'', '\\'', 'OEM_7');\n\tdefine(KeyCode.OEM_8, 'OEM_8');\n\tdefine(KeyCode.OEM_102, 'OEM_102');\n\n\tdefine(KeyCode.NUMPAD_0, 'NumPad0');\n\tdefine(KeyCode.NUMPAD_1, 'NumPad1');\n\tdefine(KeyCode.NUMPAD_2, 'NumPad2');\n\tdefine(KeyCode.NUMPAD_3, 'NumPad3');\n\tdefine(KeyCode.NUMPAD_4, 'NumPad4');\n\tdefine(KeyCode.NUMPAD_5, 'NumPad5');\n\tdefine(KeyCode.NUMPAD_6, 'NumPad6');\n\tdefine(KeyCode.NUMPAD_7, 'NumPad7');\n\tdefine(KeyCode.NUMPAD_8, 'NumPad8');\n\tdefine(KeyCode.NUMPAD_9, 'NumPad9');\n\n\tdefine(KeyCode.NUMPAD_MULTIPLY, 'NumPad_Multiply');\n\tdefine(KeyCode.NUMPAD_ADD, 'NumPad_Add');\n\tdefine(KeyCode.NUMPAD_SEPARATOR, 'NumPad_Separator');\n\tdefine(KeyCode.NUMPAD_SUBTRACT, 'NumPad_Subtract');\n\tdefine(KeyCode.NUMPAD_DECIMAL, 'NumPad_Decimal');\n\tdefine(KeyCode.NUMPAD_DIVIDE, 'NumPad_Divide');\n\n})();\n\nexport namespace KeyCodeUtils {\n\texport function toString(keyCode: KeyCode): string {\n\t\treturn uiMap.keyCodeToStr(keyCode);\n\t}\n\texport function fromString(key: string): KeyCode {\n\t\treturn uiMap.strToKeyCode(key);\n\t}\n\n\texport function toUserSettingsUS(keyCode: KeyCode): string {\n\t\treturn userSettingsUSMap.keyCodeToStr(keyCode);\n\t}\n\texport function toUserSettingsGeneral(keyCode: KeyCode): string {\n\t\treturn userSettingsGeneralMap.keyCodeToStr(keyCode);\n\t}\n\texport function fromUserSettings(key: string): KeyCode {\n\t\treturn userSettingsUSMap.strToKeyCode(key) || userSettingsGeneralMap.strToKeyCode(key);\n\t}\n}\n\n/**\n * Binary encoding strategy:\n * ```\n * 1111 11\n * 5432 1098 7654 3210\n * ---- CSAW KKKK KKKK\n * C = bit 11 = ctrlCmd flag\n * S = bit 10 = shift flag\n * A = bit 9 = alt flag\n * W = bit 8 = winCtrl flag\n * K = bits 0-7 = key code\n * ```\n */\nconst enum BinaryKeybindingsMask {\n\tCtrlCmd = (1 << 11) >>> 0,\n\tShift = (1 << 10) >>> 0,\n\tAlt = (1 << 9) >>> 0,\n\tWinCtrl = (1 << 8) >>> 0,\n\tKeyCode = 0x000000ff\n}\n\nexport const enum KeyMod {\n\tCtrlCmd = (1 << 11) >>> 0,\n\tShift = (1 << 10) >>> 0,\n\tAlt = (1 << 9) >>> 0,\n\tWinCtrl = (1 << 8) >>> 0,\n}\n\nexport function KeyChord(firstPart: number, secondPart: number): number {\n\tlet chordPart = ((secondPart & 0x0000ffff) << 16) >>> 0;\n\treturn (firstPart | chordPart) >>> 0;\n}\n\nexport function createKeybinding(keybinding: number, OS: OperatingSystem): Keybinding {\n\tif (keybinding === 0) {\n\t\treturn null;\n\t}\n\tconst firstPart = (keybinding & 0x0000ffff) >>> 0;\n\tconst chordPart = (keybinding & 0xffff0000) >>> 16;\n\tif (chordPart !== 0) {\n\t\treturn new ChordKeybinding(\n\t\t\tcreateSimpleKeybinding(firstPart, OS),\n\t\t\tcreateSimpleKeybinding(chordPart, OS),\n\t\t);\n\t}\n\treturn createSimpleKeybinding(firstPart, OS);\n}\n\nexport function createSimpleKeybinding(keybinding: number, OS: OperatingSystem): SimpleKeybinding {\n\n\tconst ctrlCmd = (keybinding & BinaryKeybindingsMask.CtrlCmd ? true : false);\n\tconst winCtrl = (keybinding & BinaryKeybindingsMask.WinCtrl ? true : false);\n\n\tconst ctrlKey = (OS === OperatingSystem.Macintosh ? winCtrl : ctrlCmd);\n\tconst shiftKey = (keybinding & BinaryKeybindingsMask.Shift ? true : false);\n\tconst altKey = (keybinding & BinaryKeybindingsMask.Alt ? true : false);\n\tconst metaKey = (OS === OperatingSystem.Macintosh ? ctrlCmd : winCtrl);\n\tconst keyCode = (keybinding & BinaryKeybindingsMask.KeyCode);\n\n\treturn new SimpleKeybinding(ctrlKey, shiftKey, altKey, metaKey, keyCode);\n}\n\nexport const enum KeybindingType {\n\tSimple = 1,\n\tChord = 2\n}\n\nexport class SimpleKeybinding {\n\tpublic readonly type = KeybindingType.Simple;\n\n\tpublic readonly ctrlKey: boolean;\n\tpublic readonly shiftKey: boolean;\n\tpublic readonly altKey: boolean;\n\tpublic readonly metaKey: boolean;\n\tpublic readonly keyCode: KeyCode;\n\n\tconstructor(ctrlKey: boolean, shiftKey: boolean, altKey: boolean, metaKey: boolean, keyCode: KeyCode) {\n\t\tthis.ctrlKey = ctrlKey;\n\t\tthis.shiftKey = shiftKey;\n\t\tthis.altKey = altKey;\n\t\tthis.metaKey = metaKey;\n\t\tthis.keyCode = keyCode;\n\t}\n\n\tpublic equals(other: Keybinding): boolean {\n\t\tif (other.type !== KeybindingType.Simple) {\n\t\t\treturn false;\n\t\t}\n\t\treturn (\n\t\t\tthis.ctrlKey === other.ctrlKey\n\t\t\t&& this.shiftKey === other.shiftKey\n\t\t\t&& this.altKey === other.altKey\n\t\t\t&& this.metaKey === other.metaKey\n\t\t\t&& this.keyCode === other.keyCode\n\t\t);\n\t}\n\n\tpublic isModifierKey(): boolean {\n\t\treturn (\n\t\t\tthis.keyCode === KeyCode.Unknown\n\t\t\t|| this.keyCode === KeyCode.Ctrl\n\t\t\t|| this.keyCode === KeyCode.Meta\n\t\t\t|| this.keyCode === KeyCode.Alt\n\t\t\t|| this.keyCode === KeyCode.Shift\n\t\t);\n\t}\n\n\t/**\n\t * Does this keybinding refer to the key code of a modifier and it also has the modifier flag?\n\t */\n\tpublic isDuplicateModifierCase(): boolean {\n\t\treturn (\n\t\t\t(this.ctrlKey && this.keyCode === KeyCode.Ctrl)\n\t\t\t|| (this.shiftKey && this.keyCode === KeyCode.Shift)\n\t\t\t|| (this.altKey && this.keyCode === KeyCode.Alt)\n\t\t\t|| (this.metaKey && this.keyCode === KeyCode.Meta)\n\t\t);\n\t}\n}\n\nexport class ChordKeybinding {\n\tpublic readonly type = KeybindingType.Chord;\n\n\tpublic readonly firstPart: SimpleKeybinding;\n\tpublic readonly chordPart: SimpleKeybinding;\n\n\tconstructor(firstPart: SimpleKeybinding, chordPart: SimpleKeybinding) {\n\t\tthis.firstPart = firstPart;\n\t\tthis.chordPart = chordPart;\n\t}\n}\n\nexport type Keybinding = SimpleKeybinding | ChordKeybinding;\n\nexport class ResolvedKeybindingPart {\n\treadonly ctrlKey: boolean;\n\treadonly shiftKey: boolean;\n\treadonly altKey: boolean;\n\treadonly metaKey: boolean;\n\n\treadonly keyLabel: string;\n\treadonly keyAriaLabel: string;\n\n\tconstructor(ctrlKey: boolean, shiftKey: boolean, altKey: boolean, metaKey: boolean, kbLabel: string, kbAriaLabel: string) {\n\t\tthis.ctrlKey = ctrlKey;\n\t\tthis.shiftKey = shiftKey;\n\t\tthis.altKey = altKey;\n\t\tthis.metaKey = metaKey;\n\t\tthis.keyLabel = kbLabel;\n\t\tthis.keyAriaLabel = kbAriaLabel;\n\t}\n}\n\n/**\n * A resolved keybinding. Can be a simple keybinding or a chord keybinding.\n */\nexport abstract class ResolvedKeybinding {\n\t/**\n\t * This prints the binding in a format suitable for displaying in the UI.\n\t */\n\tpublic abstract getLabel(): string;\n\t/**\n\t * This prints the binding in a format suitable for ARIA.\n\t */\n\tpublic abstract getAriaLabel(): string;\n\t/**\n\t * This prints the binding in a format suitable for electron's accelerators.\n\t * See https://github.com/electron/electron/blob/master/docs/api/accelerator.md\n\t */\n\tpublic abstract getElectronAccelerator(): string;\n\t/**\n\t * This prints the binding in a format suitable for user settings.\n\t */\n\tpublic abstract getUserSettingsLabel(): string;\n\t/**\n\t * Is the user settings label reflecting the label?\n\t */\n\tpublic abstract isWYSIWYG(): boolean;\n\n\t/**\n\t * Is the binding a chord?\n\t */\n\tpublic abstract isChord(): boolean;\n\n\t/**\n\t * Returns the firstPart, chordPart that should be used for dispatching.\n\t */\n\tpublic abstract getDispatchParts(): [string, string];\n\t/**\n\t * Returns the firstPart, chordPart of the keybinding.\n\t * For simple keybindings, the second element will be null.\n\t */\n\tpublic abstract getParts(): [ResolvedKeybindingPart, ResolvedKeybindingPart];\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'use strict';\n\nimport { once } from 'vs/base/common/functional';\n\nexport const empty: IDisposable = Object.freeze({\n\tdispose() { }\n});\n\nexport interface IDisposable {\n\tdispose(): void;\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(...disposables: T[]): T[];\nexport function dispose(disposables: T[]): T[];\nexport function dispose(first: T | T[], ...rest: T[]): T | T[] {\n\n\tif (Array.isArray(first)) {\n\t\tfirst.forEach(d => d && d.dispose());\n\t\treturn [];\n\t} else if (rest.length === 0) {\n\t\tif (first) {\n\t\t\tfirst.dispose();\n\t\t\treturn first;\n\t\t}\n\t\treturn undefined;\n\t} else {\n\t\tdispose(first);\n\t\tdispose(rest);\n\t\treturn [];\n\t}\n}\n\nexport function combinedDisposable(disposables: IDisposable[]): IDisposable {\n\treturn { dispose: () => dispose(disposables) };\n}\n\nexport function toDisposable(...fns: (() => void)[]): IDisposable {\n\treturn {\n\t\tdispose() {\n\t\t\tfor (const fn of fns) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t}\n\t};\n}\n\nexport abstract class Disposable implements IDisposable {\n\n\tprivate _toDispose: IDisposable[];\n\n\tconstructor() {\n\t\tthis._toDispose = [];\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._toDispose = dispose(this._toDispose);\n\t}\n\n\tprotected _register(t: T): T {\n\t\tthis._toDispose.push(t);\n\t\treturn t;\n\t}\n}\n\nexport class OneDisposable implements IDisposable {\n\n\tprivate _value: IDisposable;\n\n\tset value(value: IDisposable) {\n\t\tif (this._value) {\n\t\t\tthis._value.dispose();\n\t\t}\n\t\tthis._value = value;\n\t}\n\n\tdispose() {\n\t\tthis.value = null;\n\t}\n}\n\nexport interface IReference extends IDisposable {\n\treadonly object: T;\n}\n\nexport abstract class ReferenceCollection {\n\n\tprivate references: { [key: string]: { readonly object: T; counter: number; } } = Object.create(null);\n\n\tconstructor() { }\n\n\tacquire(key: string): IReference {\n\t\tlet reference = this.references[key];\n\n\t\tif (!reference) {\n\t\t\treference = this.references[key] = { counter: 0, object: this.createReferencedObject(key) };\n\t\t}\n\n\t\tconst { object } = reference;\n\t\tconst dispose = once(() => {\n\t\t\tif (--reference.counter === 0) {\n\t\t\t\tthis.destroyReferencedObject(reference.object);\n\t\t\t\tdelete this.references[key];\n\t\t\t}\n\t\t});\n\n\t\treference.counter++;\n\n\t\treturn { object, dispose };\n\t}\n\n\tprotected abstract createReferencedObject(key: string): T;\n\tprotected abstract destroyReferencedObject(object: T): void;\n}\n\nexport class ImmortalReference implements IReference {\n\tconstructor(public object: T) { }\n\tdispose(): void { /* noop */ }\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\ndefine(__m[501/*vs/base/common/marked/marked*/], __M([538/*vs/base/common/marked/raw.marked*/]), function (marked) {\n\treturn {\n\t\tmarked: marked\n\t};\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'use strict';\n\nexport namespace Schemas {\n\n\t/**\n\t * A schema that is used for models that exist in memory\n\t * only and that have no correspondence on a server or such.\n\t */\n\texport const inMemory: string = 'inmemory';\n\n\t/**\n\t * A schema that is used for setting files\n\t */\n\texport const vscode: string = 'vscode';\n\n\t/**\n\t * A schema that is used for internal private files\n\t */\n\texport const internal: string = 'private';\n\n\t/**\n\t * A walk-through document.\n\t */\n\texport const walkThrough: string = 'walkThrough';\n\n\t/**\n\t * An embedded code snippet.\n\t */\n\texport const walkThroughSnippet: string = 'walkThroughSnippet';\n\n\texport const http: string = 'http';\n\n\texport const https: string = 'https';\n\n\texport const file: string = 'file';\n\n\texport const untitled: string = 'untitled';\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'use strict';\n\n// --- THIS FILE IS TEMPORARY UNTIL ENV.TS IS CLEANED UP. IT CAN SAFELY BE USED IN ALL TARGET EXECUTION ENVIRONMENTS (node & dom) ---\n\nlet _isWindows = false;\nlet _isMacintosh = false;\nlet _isLinux = false;\nlet _isRootUser = false;\nlet _isNative = false;\nlet _isWeb = false;\nlet _locale: string = undefined;\nlet _language: string = undefined;\n\ninterface NLSConfig {\n\tlocale: string;\n\tavailableLanguages: { [key: string]: string; };\n}\n\nexport interface IProcessEnvironment {\n\t[key: string]: string;\n}\n\ninterface INodeProcess {\n\tplatform: string;\n\tenv: IProcessEnvironment;\n\tgetuid(): number;\n}\ndeclare let process: INodeProcess;\ndeclare let global: any;\n\ninterface INavigator {\n\tuserAgent: string;\n\tlanguage: string;\n}\ndeclare let navigator: INavigator;\ndeclare let self: any;\n\nexport const LANGUAGE_DEFAULT = 'en';\n\n// OS detection\nif (typeof process === 'object') {\n\t_isWindows = (process.platform === 'win32');\n\t_isMacintosh = (process.platform === 'darwin');\n\t_isLinux = (process.platform === 'linux');\n\t_isRootUser = !_isWindows && (process.getuid() === 0);\n\tlet rawNlsConfig = process.env['VSCODE_NLS_CONFIG'];\n\tif (rawNlsConfig) {\n\t\ttry {\n\t\t\tlet nlsConfig: NLSConfig = JSON.parse(rawNlsConfig);\n\t\t\tlet resolved = nlsConfig.availableLanguages['*'];\n\t\t\t_locale = nlsConfig.locale;\n\t\t\t// VSCode's default language is 'en'\n\t\t\t_language = resolved ? resolved : LANGUAGE_DEFAULT;\n\t\t} catch (e) {\n\t\t}\n\t}\n\t_isNative = true;\n} else if (typeof navigator === 'object') {\n\tlet userAgent = navigator.userAgent;\n\t_isWindows = userAgent.indexOf('Windows') >= 0;\n\t_isMacintosh = userAgent.indexOf('Macintosh') >= 0;\n\t_isLinux = userAgent.indexOf('Linux') >= 0;\n\t_isWeb = true;\n\t_locale = navigator.language;\n\t_language = _locale;\n}\n\nexport enum Platform {\n\tWeb,\n\tMac,\n\tLinux,\n\tWindows\n}\n\nlet _platform: Platform = Platform.Web;\nif (_isNative) {\n\tif (_isMacintosh) {\n\t\t_platform = Platform.Mac;\n\t} else if (_isWindows) {\n\t\t_platform = Platform.Windows;\n\t} else if (_isLinux) {\n\t\t_platform = Platform.Linux;\n\t}\n}\n\nexport const isWindows = _isWindows;\nexport const isMacintosh = _isMacintosh;\nexport const isLinux = _isLinux;\nexport const isRootUser = _isRootUser;\nexport const isNative = _isNative;\nexport const isWeb = _isWeb;\nexport const platform = _platform;\n\n/**\n * The language used for the user interface. The format of\n * the string is all lower case (e.g. zh-tw for Traditional\n * Chinese)\n */\nexport const language = _language;\n\n/**\n * The OS locale or the locale specified by --locale. The format of\n * the string is all lower case (e.g. zh-tw for Traditional\n * Chinese). The UI is not necessarily shown in the provided locale.\n */\nexport const locale = _locale;\n\nexport interface TimeoutToken {\n}\n\nexport interface IntervalToken {\n}\n\ninterface IGlobals {\n\tWorker?: any;\n\tsetTimeout(callback: (...args: any[]) => void, delay: number, ...args: any[]): TimeoutToken;\n\tclearTimeout(token: TimeoutToken): void;\n\n\tsetInterval(callback: (...args: any[]) => void, delay: number, ...args: any[]): IntervalToken;\n\tclearInterval(token: IntervalToken): void;\n}\n\nconst _globals = (typeof self === 'object' ? self : global);\nexport const globals: any = _globals;\n\nexport function hasWebWorkerSupport(): boolean {\n\treturn typeof _globals.Worker !== 'undefined';\n}\nexport const setTimeout = _globals.setTimeout.bind(_globals);\nexport const clearTimeout = _globals.clearTimeout.bind(_globals);\n\nexport const setInterval = _globals.setInterval.bind(_globals);\nexport const clearInterval = _globals.clearInterval.bind(_globals);\n\nexport const enum OperatingSystem {\n\tWindows = 1,\n\tMacintosh = 2,\n\tLinux = 3\n}\nexport const OS = (_isMacintosh ? OperatingSystem.Macintosh : (_isWindows ? OperatingSystem.Windows : OperatingSystem.Linux));\n\nexport const enum AccessibilitySupport {\n\t/**\n\t * This should be the browser case where it is not known if a screen reader is attached or no.\n\t */\n\tUnknown = 0,\n\n\tDisabled = 1,\n\n\tEnabled = 2\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'use strict';\n\n// Based on material from:\n/*!\nBEGIN THIRD PARTY\n*/\n/*!\n* string_score.js: String Scoring Algorithm 0.1.22\n*\n* http://joshaven.com/string_score\n* https://github.com/joshaven/string_score\n*\n* Copyright (C) 2009-2014 Joshaven Potter \n* Special thanks to all of the contributors listed here https://github.com/joshaven/string_score\n* MIT License: http://opensource.org/licenses/MIT\n*\n* Date: Tue Mar 1 2011\n* Updated: Tue Mar 10 2015\n*/\n\n/**\n * Compute a score for the given string and the given query.\n *\n * Rules:\n * Character score: 1\n * Same case bonus: 1\n * Upper case bonus: 1\n * Consecutive match bonus: 5\n * Start of word/path bonus: 7\n * Start of string bonus: 8\n */\nconst wordPathBoundary = ['-', '_', ' ', '/', '\\\\', '.'];\nexport function score(target: string, query: string, cache?: { [id: string]: number }): number {\n\tif (!target || !query) {\n\t\treturn 0; // return early if target or query are undefined\n\t}\n\n\tconst hash = target + query;\n\tconst cached = cache && cache[hash];\n\tif (typeof cached === 'number') {\n\t\treturn cached;\n\t}\n\n\tconst queryLen = query.length;\n\tconst targetLower = target.toLowerCase();\n\tconst queryLower = query.toLowerCase();\n\n\tlet index = 0;\n\tlet startAt = 0;\n\tlet score = 0;\n\twhile (index < queryLen) {\n\t\tlet indexOf = targetLower.indexOf(queryLower[index], startAt);\n\t\tif (indexOf < 0) {\n\t\t\tscore = 0; // This makes sure that the query is contained in the target\n\t\t\tbreak;\n\t\t}\n\n\t\t// Character match bonus\n\t\tscore += 1;\n\n\t\t// Consecutive match bonus\n\t\tif (startAt === indexOf) {\n\t\t\tscore += 5;\n\t\t}\n\n\t\t// Same case bonus\n\t\tif (target[indexOf] === query[indexOf]) {\n\t\t\tscore += 1;\n\t\t}\n\n\t\t// Start of word bonus\n\t\tif (indexOf === 0) {\n\t\t\tscore += 8;\n\t\t}\n\n\t\t// After separator bonus\n\t\telse if (wordPathBoundary.some(w => w === target[indexOf - 1])) {\n\t\t\tscore += 7;\n\t\t}\n\n\t\t// Inside word upper case bonus\n\t\telse if (isUpper(target.charCodeAt(indexOf))) {\n\t\t\tscore += 1;\n\t\t}\n\n\t\tstartAt = indexOf + 1;\n\t\tindex++;\n\t}\n\n\tif (cache) {\n\t\tcache[hash] = score;\n\t}\n\n\treturn score;\n}\n\nfunction isUpper(code: number): boolean {\n\treturn 65 <= code && code <= 90;\n}\n\n/**\n * A fast method to check if a given string would produce a score > 0 for the given query.\n */\nexport function matches(target: string, queryLower: string): boolean {\n\tif (!target || !queryLower) {\n\t\treturn false; // return early if target or query are undefined\n\t}\n\n\tconst queryLen = queryLower.length;\n\tconst targetLower = target.toLowerCase();\n\n\tlet index = 0;\n\tlet lastIndexOf = -1;\n\twhile (index < queryLen) {\n\t\tlet indexOf = targetLower.indexOf(queryLower[index], lastIndexOf + 1);\n\t\tif (indexOf < 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlastIndexOf = indexOf;\n\n\t\tindex++;\n\t}\n\n\treturn true;\n}\n/*!\nEND THIRD PARTY\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'use strict';\n\nimport { globals } from 'vs/base/common/platform';\n\nconst hasPerformanceNow = (globals.performance && typeof globals.performance.now === 'function');\n\nexport class StopWatch {\n\n\tprivate _highResolution: boolean;\n\tprivate _startTime: number;\n\tprivate _stopTime: number;\n\n\tpublic static create(highResolution: boolean = true): StopWatch {\n\t\treturn new StopWatch(highResolution);\n\t}\n\n\tconstructor(highResolution: boolean) {\n\t\tthis._highResolution = hasPerformanceNow && highResolution;\n\t\tthis._startTime = this._now();\n\t\tthis._stopTime = -1;\n\t}\n\n\tpublic stop(): void {\n\t\tthis._stopTime = this._now();\n\t}\n\n\tpublic elapsed(): number {\n\t\tif (this._stopTime !== -1) {\n\t\t\treturn this._stopTime - this._startTime;\n\t\t}\n\t\treturn this._now() - this._startTime;\n\t}\n\n\tprivate _now(): number {\n\t\treturn this._highResolution ? globals.performance.now() : new Date().getTime();\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { TPromise } from 'vs/base/common/winjs.base';\n\nconst _typeof = {\n\tnumber: 'number',\n\tstring: 'string',\n\tundefined: 'undefined',\n\tobject: 'object',\n\tfunction: 'function'\n};\n\n/**\n * @returns whether the provided parameter is a JavaScript Array or not.\n */\nexport function isArray(array: any): array is any[] {\n\tif (Array.isArray) {\n\t\treturn Array.isArray(array);\n\t}\n\n\tif (array && typeof (array.length) === _typeof.number && array.constructor === Array) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\n/**\n * @returns whether the provided parameter is a JavaScript String or not.\n */\nexport function isString(str: any): str is string {\n\tif (typeof (str) === _typeof.string || str instanceof String) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\n/**\n * @returns whether the provided parameter is a JavaScript Array and each element in the array is a string.\n */\nexport function isStringArray(value: any): value is string[] {\n\treturn isArray(value) && (value).every(elem => isString(elem));\n}\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: any): boolean {\n\t// The method can't do a type cast since there are type (like strings) which\n\t// are subclasses of any put not positvely matched by the function. Hence type\n\t// narrowing results in wrong results.\n\treturn typeof obj === _typeof.object\n\t\t&& obj !== null\n\t\t&& !Array.isArray(obj)\n\t\t&& !(obj instanceof RegExp)\n\t\t&& !(obj instanceof Date);\n}\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: any): obj is number {\n\tif ((typeof (obj) === _typeof.number || obj instanceof Number) && !isNaN(obj)) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\n/**\n * @returns whether the provided parameter is a JavaScript Boolean or not.\n */\nexport function isBoolean(obj: any): obj is boolean {\n\treturn obj === true || obj === false;\n}\n\n/**\n * @returns whether the provided parameter is undefined.\n */\nexport function isUndefined(obj: any): boolean {\n\treturn typeof (obj) === _typeof.undefined;\n}\n\n/**\n * @returns whether the provided parameter is undefined or null.\n */\nexport function isUndefinedOrNull(obj: any): boolean {\n\treturn isUndefined(obj) || obj === null;\n}\n\n\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * @returns whether the provided parameter is an empty JavaScript Object or not.\n */\nexport function isEmptyObject(obj: any): obj is any {\n\tif (!isObject(obj)) {\n\t\treturn false;\n\t}\n\n\tfor (let key in obj) {\n\t\tif (hasOwnProperty.call(obj, key)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n/**\n * @returns whether the provided parameter is a JavaScript Function or not.\n */\nexport function isFunction(obj: any): obj is Function {\n\treturn typeof obj === _typeof.function;\n}\n\n/**\n * @returns whether the provided parameters is are JavaScript Function or not.\n */\nexport function areFunctions(...objects: any[]): boolean {\n\treturn objects && objects.length > 0 && objects.every(isFunction);\n}\n\nexport type TypeConstraint = string | Function;\n\nexport function validateConstraints(args: any[], constraints: TypeConstraint[]): void {\n\tconst len = Math.min(args.length, constraints.length);\n\tfor (let i = 0; i < len; i++) {\n\t\tvalidateConstraint(args[i], constraints[i]);\n\t}\n}\n\nexport function validateConstraint(arg: any, constraint: TypeConstraint): void {\n\n\tif (isString(constraint)) {\n\t\tif (typeof arg !== constraint) {\n\t\t\tthrow new Error(`argument does not match constraint: typeof ${constraint}`);\n\t\t}\n\t} else if (isFunction(constraint)) {\n\t\tif (arg instanceof constraint) {\n\t\t\treturn;\n\t\t}\n\t\tif (arg && arg.constructor === constraint) {\n\t\t\treturn;\n\t\t}\n\t\tif (constraint.length === 1 && constraint.call(undefined, arg) === true) {\n\t\t\treturn;\n\t\t}\n\t\tthrow new Error(`argument does not match one of these constraints: arg instanceof constraint, arg.constructor === constraint, nor constraint(arg) === true`);\n\t}\n}\n\n/**\n * Creates a new object of the provided class and will call the constructor with\n * any additional argument supplied.\n */\nexport function create(ctor: Function, ...args: any[]): any {\n\tlet obj = Object.create(ctor.prototype);\n\tctor.apply(obj, args);\n\n\treturn obj;\n}\n\nexport interface IFunction0 {\n\t(): T;\n}\nexport interface IFunction1 {\n\t(a1: A1): T;\n}\nexport interface IFunction2 {\n\t(a1: A1, a2: A2): T;\n}\nexport interface IFunction3 {\n\t(a1: A1, a2: A2, a3: A3): T;\n}\nexport interface IFunction4 {\n\t(a1: A1, a2: A2, a3: A3, a4: A4): T;\n}\nexport interface IFunction5 {\n\t(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): T;\n}\nexport interface IFunction6 {\n\t(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6): T;\n}\nexport interface IFunction7 {\n\t(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7): T;\n}\nexport interface IFunction8 {\n\t(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7, a8: A8): T;\n}\n\nexport interface IAction0 extends IFunction0 { }\nexport interface IAction1 extends IFunction1 { }\nexport interface IAction2 extends IFunction2 { }\nexport interface IAction3 extends IFunction3 { }\nexport interface IAction4 extends IFunction4 { }\nexport interface IAction5 extends IFunction5 { }\nexport interface IAction6 extends IFunction6 { }\nexport interface IAction7 extends IFunction7 { }\nexport interface IAction8 extends IFunction8 { }\n\nexport interface IAsyncFunction0 extends IFunction0> { }\nexport interface IAsyncFunction1 extends IFunction1> { }\nexport interface IAsyncFunction2 extends IFunction2> { }\nexport interface IAsyncFunction3 extends IFunction3> { }\nexport interface IAsyncFunction4 extends IFunction4> { }\nexport interface IAsyncFunction5 extends IFunction5> { }\nexport interface IAsyncFunction6 extends IFunction6> { }\nexport interface IAsyncFunction7 extends IFunction7> { }\nexport interface IAsyncFunction8 extends IFunction8> { }\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'use strict';\n\nimport { isEmptyObject } from 'vs/base/common/types';\nimport { forEach } from 'vs/base/common/collections';\n\nexport interface Node {\n\tdata: T;\n\tincoming: { [key: string]: Node };\n\toutgoing: { [key: string]: Node };\n}\n\nfunction newNode(data: T): Node {\n\treturn {\n\t\tdata: data,\n\t\tincoming: Object.create(null),\n\t\toutgoing: Object.create(null)\n\t};\n}\n\nexport class Graph {\n\n\tprivate _nodes: { [key: string]: Node } = Object.create(null);\n\n\tconstructor(private _hashFn: (element: T) => string) {\n\t\t// empty\n\t}\n\n\troots(): Node[] {\n\t\tvar ret: Node[] = [];\n\t\tforEach(this._nodes, entry => {\n\t\t\tif (isEmptyObject(entry.value.outgoing)) {\n\t\t\t\tret.push(entry.value);\n\t\t\t}\n\t\t});\n\t\treturn ret;\n\t}\n\n\ttraverse(start: T, inwards: boolean, callback: (data: T) => void): void {\n\t\tvar startNode = this.lookup(start);\n\t\tif (!startNode) {\n\t\t\treturn;\n\t\t}\n\t\tthis._traverse(startNode, inwards, Object.create(null), callback);\n\t}\n\n\tprivate _traverse(node: Node, inwards: boolean, seen: { [key: string]: boolean }, callback: (data: T) => void): void {\n\t\tvar key = this._hashFn(node.data);\n\t\tif (seen[key]) {\n\t\t\treturn;\n\t\t}\n\t\tseen[key] = true;\n\t\tcallback(node.data);\n\t\tvar nodes = inwards ? node.outgoing : node.incoming;\n\t\tforEach(nodes, (entry) => this._traverse(entry.value, inwards, seen, callback));\n\t}\n\n\tinsertEdge(from: T, to: T): void {\n\t\tvar fromNode = this.lookupOrInsertNode(from),\n\t\t\ttoNode = this.lookupOrInsertNode(to);\n\n\t\tfromNode.outgoing[this._hashFn(to)] = toNode;\n\t\ttoNode.incoming[this._hashFn(from)] = fromNode;\n\t}\n\n\tremoveNode(data: T): void {\n\t\tvar key = this._hashFn(data);\n\t\tdelete this._nodes[key];\n\t\tforEach(this._nodes, (entry) => {\n\t\t\tdelete entry.value.outgoing[key];\n\t\t\tdelete entry.value.incoming[key];\n\t\t});\n\t}\n\n\tlookupOrInsertNode(data: T): Node {\n\t\tconst key = this._hashFn(data);\n\t\tlet node = this._nodes[key];\n\n\t\tif (!node) {\n\t\t\tnode = newNode(data);\n\t\t\tthis._nodes[key] = node;\n\t\t}\n\n\t\treturn node;\n\t}\n\n\tlookup(data: T): Node {\n\t\treturn this._nodes[this._hashFn(data)];\n\t}\n\n\tget length(): number {\n\t\treturn Object.keys(this._nodes).length;\n\t}\n\n\ttoString(): string {\n\t\tlet data: string[] = [];\n\t\tforEach(this._nodes, entry => {\n\t\t\tdata.push(`${entry.key}, (incoming)[${Object.keys(entry.value.incoming).join(', ')}], (outgoing)[${Object.keys(entry.value.outgoing).join(',')}]`);\n\t\t});\n\t\treturn data.join('\\n');\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as Types from 'vs/base/common/types';\n\nexport function clone(obj: T): T {\n\tif (!obj || typeof obj !== 'object') {\n\t\treturn obj;\n\t}\n\tif (obj instanceof RegExp) {\n\t\t// See https://github.com/Microsoft/TypeScript/issues/10990\n\t\treturn obj as any;\n\t}\n\tvar result = (Array.isArray(obj)) ? [] : {};\n\tObject.keys(obj).forEach((key) => {\n\t\tif (obj[key] && typeof obj[key] === 'object') {\n\t\t\tresult[key] = clone(obj[key]);\n\t\t} else {\n\t\t\tresult[key] = obj[key];\n\t\t}\n\t});\n\treturn result;\n}\n\nexport function deepClone(obj: T): T {\n\tif (!obj || typeof obj !== 'object') {\n\t\treturn obj;\n\t}\n\tvar result = (Array.isArray(obj)) ? [] : {};\n\tObject.getOwnPropertyNames(obj).forEach((key) => {\n\t\tif (obj[key] && typeof obj[key] === 'object') {\n\t\t\tresult[key] = deepClone(obj[key]);\n\t\t} else {\n\t\t\tresult[key] = obj[key];\n\t\t}\n\t});\n\treturn result;\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nexport function cloneAndChange(obj: any, changer: (orig: any) => any): any {\n\treturn _cloneAndChange(obj, changer, []);\n}\n\nfunction _cloneAndChange(obj: any, changer: (orig: any) => any, encounteredObjects: any[]): any {\n\tif (Types.isUndefinedOrNull(obj)) {\n\t\treturn obj;\n\t}\n\n\tvar changed = changer(obj);\n\tif (typeof changed !== 'undefined') {\n\t\treturn changed;\n\t}\n\n\tif (Types.isArray(obj)) {\n\t\tvar r1: any[] = [];\n\t\tfor (var i1 = 0; i1 < obj.length; i1++) {\n\t\t\tr1.push(_cloneAndChange(obj[i1], changer, encounteredObjects));\n\t\t}\n\t\treturn r1;\n\t}\n\n\tif (Types.isObject(obj)) {\n\t\tif (encounteredObjects.indexOf(obj) >= 0) {\n\t\t\tthrow new Error('Cannot clone recursive data-structure');\n\t\t}\n\t\tencounteredObjects.push(obj);\n\t\tvar r2 = {};\n\t\tfor (var i2 in obj) {\n\t\t\tif (hasOwnProperty.call(obj, i2)) {\n\t\t\t\tr2[i2] = _cloneAndChange(obj[i2], changer, encounteredObjects);\n\t\t\t}\n\t\t}\n\t\tencounteredObjects.pop();\n\t\treturn r2;\n\t}\n\n\treturn obj;\n}\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: any, source: any, overwrite: boolean = true): any {\n\tif (!Types.isObject(destination)) {\n\t\treturn source;\n\t}\n\n\tif (Types.isObject(source)) {\n\t\tObject.keys(source).forEach((key) => {\n\t\t\tif (key in destination) {\n\t\t\t\tif (overwrite) {\n\t\t\t\t\tif (Types.isObject(destination[key]) && Types.isObject(source[key])) {\n\t\t\t\t\t\tmixin(destination[key], source[key], overwrite);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdestination[key] = source[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdestination[key] = source[key];\n\t\t\t}\n\t\t});\n\t}\n\treturn destination;\n}\n\nexport function assign(destination: any, ...sources: any[]): any {\n\tsources.forEach(source => Object.keys(source).forEach((key) => destination[key] = source[key]));\n\treturn destination;\n}\n\nexport function toObject(arr: T[], keyMap: (t: T) => string): { [key: string]: T } {\n\treturn arr.reduce((o, d) => assign(o, { [keyMap(d)]: d }), Object.create(null));\n}\n\nexport function equals(one: any, other: any): boolean {\n\tif (one === other) {\n\t\treturn true;\n\t}\n\tif (one === null || one === undefined || other === null || other === undefined) {\n\t\treturn false;\n\t}\n\tif (typeof one !== typeof other) {\n\t\treturn false;\n\t}\n\tif (typeof one !== 'object') {\n\t\treturn false;\n\t}\n\tif ((Array.isArray(one)) !== (Array.isArray(other))) {\n\t\treturn false;\n\t}\n\n\tvar i: number,\n\t\tkey: string;\n\n\tif (Array.isArray(one)) {\n\t\tif (one.length !== other.length) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (i = 0; i < one.length; i++) {\n\t\t\tif (!equals(one[i], other[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tvar oneKeys: string[] = [];\n\n\t\tfor (key in one) {\n\t\t\toneKeys.push(key);\n\t\t}\n\t\toneKeys.sort();\n\t\tvar otherKeys: string[] = [];\n\t\tfor (key in other) {\n\t\t\totherKeys.push(key);\n\t\t}\n\t\totherKeys.sort();\n\t\tif (!equals(oneKeys, otherKeys)) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (i = 0; i < oneKeys.length; i++) {\n\t\t\tif (!equals(one[oneKeys[i]], other[oneKeys[i]])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn true;\n}\n\nexport function ensureProperty(obj: any, property: string, defaultValue: any) {\n\tif (typeof obj[property] === 'undefined') {\n\t\tobj[property] = defaultValue;\n\t}\n}\n\nexport function arrayToHash(array: any[]) {\n\tvar result: any = {};\n\tfor (var i = 0; i < array.length; ++i) {\n\t\tresult[array[i]] = true;\n\t}\n\treturn result;\n}\n\n/**\n * Given an array of strings, returns a function which, given a string\n * returns true or false whether the string is in that array.\n */\nexport function createKeywordMatcher(arr: string[], caseInsensitive: boolean = false): (str: string) => boolean {\n\tif (caseInsensitive) {\n\t\tarr = arr.map(function (x) { return x.toLowerCase(); });\n\t}\n\tvar hash = arrayToHash(arr);\n\tif (caseInsensitive) {\n\t\treturn function (word) {\n\t\t\treturn hash[word.toLowerCase()] !== undefined && hash.hasOwnProperty(word.toLowerCase());\n\t\t};\n\t} else {\n\t\treturn function (word) {\n\t\t\treturn hash[word] !== undefined && hash.hasOwnProperty(word);\n\t\t};\n\t}\n}\n\n/**\n * Started from TypeScript's __extends function to make a type a subclass of a specific class.\n * Modified to work with properties already defined on the derivedClass, since we can't get TS\n * to call this method before the constructor definition.\n */\nexport function derive(baseClass: any, derivedClass: any): void {\n\n\tfor (var prop in baseClass) {\n\t\tif (baseClass.hasOwnProperty(prop)) {\n\t\t\tderivedClass[prop] = baseClass[prop];\n\t\t}\n\t}\n\n\tderivedClass = derivedClass || function () { };\n\tvar basePrototype = baseClass.prototype;\n\tvar derivedPrototype = derivedClass.prototype;\n\tderivedClass.prototype = Object.create(basePrototype);\n\n\tfor (var prop in derivedPrototype) {\n\t\tif (derivedPrototype.hasOwnProperty(prop)) {\n\t\t\t// handle getters and setters properly\n\t\t\tObject.defineProperty(derivedClass.prototype, prop, Object.getOwnPropertyDescriptor(derivedPrototype, prop));\n\t\t}\n\t}\n\n\t// Cast to any due to Bug 16188:PropertyDescriptor set and get function should be optional.\n\tObject.defineProperty(derivedClass.prototype, 'constructor', { value: derivedClass, writable: true, configurable: true, enumerable: true });\n}\n\n/**\n * Calls JSON.Stringify with a replacer to break apart any circular references.\n * This prevents JSON.stringify from throwing the exception\n * \"Uncaught TypeError: Converting circular structure to JSON\"\n */\nexport function safeStringify(obj: any): string {\n\tvar seen: any[] = [];\n\treturn JSON.stringify(obj, (key, value) => {\n\n\t\tif (Types.isObject(value) || Array.isArray(value)) {\n\t\t\tif (seen.indexOf(value) !== -1) {\n\t\t\t\treturn '[Circular]';\n\t\t\t} else {\n\t\t\t\tseen.push(value);\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t});\n}\n\nexport function getOrDefault(obj: T, fn: (obj: T) => R, defaultValue: R = null): R {\n\tconst result = fn(obj);\n\treturn typeof result === 'undefined' ? defaultValue : result;\n}\n\n/**\n * Returns an object that has keys for each value that is different in the base object. Keys\n * that do not exist in the target but in the base object are not considered.\n *\n * Note: This is not a deep-diffing method, so the values are strictly taken into the resulting\n * object if they differ.\n *\n * @param base the object to diff against\n * @param obj the object to use for diffing\n */\nexport type obj = { [key: string]: any; };\nexport function distinct(base: obj, target: obj): obj {\n\tconst result = Object.create(null);\n\n\tif (!base || !target) {\n\t\treturn result;\n\t}\n\n\tconst targetKeys = Object.keys(target);\n\ttargetKeys.forEach(k => {\n\t\tconst baseValue = base[k];\n\t\tconst targetValue = target[k];\n\n\t\tif (!equals(baseValue, targetValue)) {\n\t\t\tresult[k] = targetValue;\n\t\t}\n\t});\n\n\treturn result;\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'use strict';\n\nimport * as platform from 'vs/base/common/platform';\n\n\nfunction _encode(ch: string): string {\n\treturn '%' + ch.charCodeAt(0).toString(16).toUpperCase();\n}\n\n// see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent\nfunction encodeURIComponent2(str: string): string {\n\treturn encodeURIComponent(str).replace(/[!'()*]/g, _encode);\n}\n\nfunction encodeNoop(str: string): string {\n\treturn str.replace(/[#?]/, _encode);\n}\n\n\n/**\n * Uniform Resource Identifier (URI) http://tools.ietf.org/html/rfc3986.\n * This class is a simple parser which creates the basic component paths\n * (http://tools.ietf.org/html/rfc3986#section-3) with minimal validation\n * and encoding.\n *\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 *\n */\nexport default class URI {\n\n\tstatic isUri(thing: any): thing is URI {\n\t\tif (thing instanceof URI) {\n\t\t\treturn true;\n\t\t}\n\t\tif (!thing) {\n\t\t\treturn false;\n\t\t}\n\t\treturn typeof (thing).authority === 'string'\n\t\t\t&& typeof (thing).fragment === 'string'\n\t\t\t&& typeof (thing).path === 'string'\n\t\t\t&& typeof (thing).query === 'string'\n\t\t\t&& typeof (thing).scheme === 'string';\n\t}\n\n\tprivate static _empty = '';\n\tprivate static _slash = '/';\n\tprivate static _regexp = /^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/;\n\tprivate static _driveLetterPath = /^\\/[a-zA-z]:/;\n\tprivate static _upperCaseDrive = /^(\\/)?([A-Z]:)/;\n\n\tprivate _scheme: string;\n\tprivate _authority: string;\n\tprivate _path: string;\n\tprivate _query: string;\n\tprivate _fragment: string;\n\tprivate _formatted: string;\n\tprivate _fsPath: string;\n\n\tprotected constructor() {\n\t\tthis._scheme = URI._empty;\n\t\tthis._authority = URI._empty;\n\t\tthis._path = URI._empty;\n\t\tthis._query = URI._empty;\n\t\tthis._fragment = URI._empty;\n\n\t\tthis._formatted = null;\n\t\tthis._fsPath = null;\n\t}\n\n\t/**\n\t * scheme is the 'http' part of 'http://www.msft.com/some/path?query#fragment'.\n\t * The part before the first colon.\n\t */\n\tget scheme() {\n\t\treturn this._scheme;\n\t}\n\n\t/**\n\t * authority is the 'www.msft.com' part of 'http://www.msft.com/some/path?query#fragment'.\n\t * The part between the first double slashes and the next slash.\n\t */\n\tget authority() {\n\t\treturn this._authority;\n\t}\n\n\t/**\n\t * path is the '/some/path' part of 'http://www.msft.com/some/path?query#fragment'.\n\t */\n\tget path() {\n\t\treturn this._path;\n\t}\n\n\t/**\n\t * query is the 'query' part of 'http://www.msft.com/some/path?query#fragment'.\n\t */\n\tget query() {\n\t\treturn this._query;\n\t}\n\n\t/**\n\t * fragment is the 'fragment' part of 'http://www.msft.com/some/path?query#fragment'.\n\t */\n\tget fragment() {\n\t\treturn this._fragment;\n\t}\n\n\t// ---- filesystem path -----------------------\n\n\t/**\n\t * Returns a string representing the corresponding file system path of this URI.\n\t * Will handle UNC paths and normalize windows drive letters to lower-case. Also\n\t * uses the platform specific path separator. Will *not* validate the path for\n\t * invalid characters and semantics. Will *not* look at the scheme of this URI.\n\t */\n\tget fsPath() {\n\t\tif (!this._fsPath) {\n\t\t\tvar value: string;\n\t\t\tif (this._authority && this._path && this.scheme === 'file') {\n\t\t\t\t// unc path: file://shares/c$/far/boo\n\t\t\t\tvalue = `//${this._authority}${this._path}`;\n\t\t\t} else if (URI._driveLetterPath.test(this._path)) {\n\t\t\t\t// windows drive letter: file:///c:/far/boo\n\t\t\t\tvalue = this._path[1].toLowerCase() + this._path.substr(2);\n\t\t\t} else {\n\t\t\t\t// other path\n\t\t\t\tvalue = this._path;\n\t\t\t}\n\t\t\tif (platform.isWindows) {\n\t\t\t\tvalue = value.replace(/\\//g, '\\\\');\n\t\t\t}\n\t\t\tthis._fsPath = value;\n\t\t}\n\t\treturn this._fsPath;\n\t}\n\n\t// ---- modify to new -------------------------\n\n\tpublic with(change: { scheme?: string; authority?: string; path?: string; query?: string; fragment?: string }): URI {\n\n\t\tif (!change) {\n\t\t\treturn this;\n\t\t}\n\n\t\tlet { scheme, authority, path, query, fragment } = change;\n\t\tif (scheme === void 0) {\n\t\t\tscheme = this.scheme;\n\t\t} else if (scheme === null) {\n\t\t\tscheme = '';\n\t\t}\n\t\tif (authority === void 0) {\n\t\t\tauthority = this.authority;\n\t\t} else if (authority === null) {\n\t\t\tauthority = '';\n\t\t}\n\t\tif (path === void 0) {\n\t\t\tpath = this.path;\n\t\t} else if (path === null) {\n\t\t\tpath = '';\n\t\t}\n\t\tif (query === void 0) {\n\t\t\tquery = this.query;\n\t\t} else if (query === null) {\n\t\t\tquery = '';\n\t\t}\n\t\tif (fragment === void 0) {\n\t\t\tfragment = this.fragment;\n\t\t} else if (fragment === null) {\n\t\t\tfragment = '';\n\t\t}\n\n\t\tif (scheme === this.scheme\n\t\t\t&& authority === this.authority\n\t\t\t&& path === this.path\n\t\t\t&& query === this.query\n\t\t\t&& fragment === this.fragment) {\n\n\t\t\treturn this;\n\t\t}\n\n\t\tconst ret = new URI();\n\t\tret._scheme = scheme;\n\t\tret._authority = authority;\n\t\tret._path = path;\n\t\tret._query = query;\n\t\tret._fragment = fragment;\n\t\tURI._validate(ret);\n\t\treturn ret;\n\t}\n\n\t// ---- parse & validate ------------------------\n\n\tpublic static parse(value: string): URI {\n\t\tconst ret = new URI();\n\t\tconst data = URI._parseComponents(value);\n\t\tret._scheme = data.scheme;\n\t\tret._authority = decodeURIComponent(data.authority);\n\t\tret._path = decodeURIComponent(data.path);\n\t\tret._query = decodeURIComponent(data.query);\n\t\tret._fragment = decodeURIComponent(data.fragment);\n\t\tURI._validate(ret);\n\t\treturn ret;\n\t}\n\n\tpublic static file(path: string): URI {\n\n\t\tconst ret = new URI();\n\t\tret._scheme = 'file';\n\n\t\t// normalize to fwd-slashes on windows,\n\t\t// on other systems bwd-slaches are valid\n\t\t// filename character, eg /f\\oo/ba\\r.txt\n\t\tif (platform.isWindows) {\n\t\t\tpath = path.replace(/\\\\/g, URI._slash);\n\t\t}\n\n\t\t// check for authority as used in UNC shares\n\t\t// or use the path as given\n\t\tif (path[0] === URI._slash && path[0] === path[1]) {\n\t\t\tlet idx = path.indexOf(URI._slash, 2);\n\t\t\tif (idx === -1) {\n\t\t\t\tret._authority = path.substring(2);\n\t\t\t} else {\n\t\t\t\tret._authority = path.substring(2, idx);\n\t\t\t\tret._path = path.substring(idx);\n\t\t\t}\n\t\t} else {\n\t\t\tret._path = path;\n\t\t}\n\n\t\t// Ensure that path starts with a slash\n\t\t// or that it is at least a slash\n\t\tif (ret._path[0] !== URI._slash) {\n\t\t\tret._path = URI._slash + ret._path;\n\t\t}\n\n\t\tURI._validate(ret);\n\n\t\treturn ret;\n\t}\n\n\tprivate static _parseComponents(value: string): UriComponents {\n\n\t\tconst ret: UriComponents = {\n\t\t\tscheme: URI._empty,\n\t\t\tauthority: URI._empty,\n\t\t\tpath: URI._empty,\n\t\t\tquery: URI._empty,\n\t\t\tfragment: URI._empty,\n\t\t};\n\n\t\tconst match = URI._regexp.exec(value);\n\t\tif (match) {\n\t\t\tret.scheme = match[2] || ret.scheme;\n\t\t\tret.authority = match[4] || ret.authority;\n\t\t\tret.path = match[5] || ret.path;\n\t\t\tret.query = match[7] || ret.query;\n\t\t\tret.fragment = match[9] || ret.fragment;\n\t\t}\n\t\treturn ret;\n\t}\n\n\tpublic static from(components: { scheme?: string; authority?: string; path?: string; query?: string; fragment?: string }): URI {\n\t\treturn new URI().with(components);\n\t}\n\n\tprivate static _schemePattern = /^\\w[\\w\\d+.-]*$/;\n\tprivate static _singleSlashStart = /^\\//;\n\tprivate static _doubleSlashStart = /^\\/\\//;\n\n\tprivate static _validate(ret: URI): void {\n\t\t// scheme, https://tools.ietf.org/html/rfc3986#section-3.1\n\t\t// ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\n\t\tif (ret.scheme && !URI._schemePattern.test(ret.scheme)) {\n\t\t\tthrow new Error('[UriError]: Scheme contains illegal characters.');\n\t\t}\n\n\t\t// path, http://tools.ietf.org/html/rfc3986#section-3.3\n\t\t// If a URI contains an authority component, then the path component\n\t\t// must either be empty or begin with a slash (\"/\") character. If a URI\n\t\t// does not contain an authority component, then the path cannot begin\n\t\t// with two slash characters (\"//\").\n\t\tif (ret.path) {\n\t\t\tif (ret.authority) {\n\t\t\t\tif (!URI._singleSlashStart.test(ret.path)) {\n\t\t\t\t\tthrow 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\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (URI._doubleSlashStart.test(ret.path)) {\n\t\t\t\t\tthrow new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\"//\")');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// ---- printing/externalize ---------------------------\n\n\t/**\n\t *\n\t * @param skipEncoding Do not encode the result, default is `false`\n\t */\n\tpublic toString(skipEncoding: boolean = false): string {\n\t\tif (!skipEncoding) {\n\t\t\tif (!this._formatted) {\n\t\t\t\tthis._formatted = URI._asFormatted(this, false);\n\t\t\t}\n\t\t\treturn this._formatted;\n\t\t} else {\n\t\t\t// we don't cache that\n\t\t\treturn URI._asFormatted(this, true);\n\t\t}\n\t}\n\n\tprivate static _asFormatted(uri: URI, skipEncoding: boolean): string {\n\n\t\tconst encoder = !skipEncoding\n\t\t\t? encodeURIComponent2\n\t\t\t: encodeNoop;\n\n\t\tconst parts: string[] = [];\n\n\t\tlet { scheme, authority, path, query, fragment } = uri;\n\t\tif (scheme) {\n\t\t\tparts.push(scheme, ':');\n\t\t}\n\t\tif (authority || scheme === 'file') {\n\t\t\tparts.push('//');\n\t\t}\n\t\tif (authority) {\n\t\t\tauthority = authority.toLowerCase();\n\t\t\tlet idx = authority.indexOf(':');\n\t\t\tif (idx === -1) {\n\t\t\t\tparts.push(encoder(authority));\n\t\t\t} else {\n\t\t\t\tparts.push(encoder(authority.substr(0, idx)), authority.substr(idx));\n\t\t\t}\n\t\t}\n\t\tif (path) {\n\t\t\t// lower-case windows drive letters in /C:/fff or C:/fff\n\t\t\tconst m = URI._upperCaseDrive.exec(path);\n\t\t\tif (m) {\n\t\t\t\tif (m[1]) {\n\t\t\t\t\tpath = '/' + m[2].toLowerCase() + path.substr(3); // \"/c:\".length === 3\n\t\t\t\t} else {\n\t\t\t\t\tpath = m[2].toLowerCase() + path.substr(2); // // \"c:\".length === 2\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// encode every segement but not slashes\n\t\t\t// make sure that # and ? are always encoded\n\t\t\t// when occurring in paths - otherwise the result\n\t\t\t// cannot be parsed back again\n\t\t\tlet lastIdx = 0;\n\t\t\twhile (true) {\n\t\t\t\tlet idx = path.indexOf(URI._slash, lastIdx);\n\t\t\t\tif (idx === -1) {\n\t\t\t\t\tparts.push(encoder(path.substring(lastIdx)));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tparts.push(encoder(path.substring(lastIdx, idx)), URI._slash);\n\t\t\t\tlastIdx = idx + 1;\n\t\t\t};\n\t\t}\n\t\tif (query) {\n\t\t\tparts.push('?', encoder(query));\n\t\t}\n\t\tif (fragment) {\n\t\t\tparts.push('#', encoder(fragment));\n\t\t}\n\n\t\treturn parts.join(URI._empty);\n\t}\n\n\tpublic toJSON(): any {\n\t\tconst res = {\n\t\t\tfsPath: this.fsPath,\n\t\t\texternal: this.toString(),\n\t\t\t$mid: 1\n\t\t};\n\n\t\tif (this.path) {\n\t\t\tres.path = this.path;\n\t\t}\n\n\t\tif (this.scheme) {\n\t\t\tres.scheme = this.scheme;\n\t\t}\n\n\t\tif (this.authority) {\n\t\t\tres.authority = this.authority;\n\t\t}\n\n\t\tif (this.query) {\n\t\t\tres.query = this.query;\n\t\t}\n\n\t\tif (this.fragment) {\n\t\t\tres.fragment = this.fragment;\n\t\t}\n\n\t\treturn res;\n\t}\n\n\tstatic revive(data: any): URI {\n\t\tlet result = new URI();\n\t\tresult._scheme = (data).scheme || URI._empty;\n\t\tresult._authority = (data).authority || URI._empty;\n\t\tresult._path = (data).path || URI._empty;\n\t\tresult._query = (data).query || URI._empty;\n\t\tresult._fragment = (data).fragment || URI._empty;\n\t\tresult._fsPath = (data).fsPath;\n\t\tresult._formatted = (data).external;\n\t\tURI._validate(result);\n\t\treturn result;\n\t}\n}\n\ninterface UriComponents {\n\tscheme: string;\n\tauthority: string;\n\tpath: string;\n\tquery: string;\n\tfragment: string;\n}\n\ninterface UriState extends UriComponents {\n\t$mid: number;\n\tfsPath: string;\n\texternal: string;\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'use strict';\n\nimport URI from 'vs/base/common/uri';\n\nexport interface Key {\n\ttoString(): string;\n}\n\nexport interface Entry {\n\tkey: K;\n\tvalue: T;\n}\n\nexport function values(map: Map): V[] {\n\tconst result: V[] = [];\n\tmap.forEach(value => result.push(value));\n\n\treturn result;\n}\n\nexport function keys(map: Map): K[] {\n\tconst result: K[] = [];\n\tmap.forEach((value, key) => result.push(key));\n\n\treturn result;\n}\n\nexport function getOrSet(map: Map, key: K, value: V): V {\n\tlet result = map.get(key);\n\tif (result === void 0) {\n\t\tresult = value;\n\t\tmap.set(key, result);\n\t}\n\n\treturn result;\n}\n\nexport interface ISerializedBoundedLinkedMap {\n\tentries: { key: string; value: T }[];\n}\n\ninterface LinkedEntry extends Entry {\n\tnext?: LinkedEntry;\n\tprev?: LinkedEntry;\n}\n\n/**\n * A simple Map that optionally allows to set a limit of entries to store. Once the limit is hit,\n * the cache will remove the entry that was last recently added. Or, if a ratio is provided below 1,\n * all elements will be removed until the ratio is full filled (e.g. 0.75 to remove 25% of old elements).\n */\nexport class BoundedMap {\n\tprivate map: Map>;\n\n\tprivate head: LinkedEntry;\n\tprivate tail: LinkedEntry;\n\tprivate ratio: number;\n\n\tconstructor(private limit = Number.MAX_VALUE, ratio = 1, value?: ISerializedBoundedLinkedMap) {\n\t\tthis.map = new Map>();\n\t\tthis.ratio = limit * ratio;\n\n\t\tif (value) {\n\t\t\tvalue.entries.forEach(entry => {\n\t\t\t\tthis.set(entry.key, entry.value);\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic setLimit(limit: number): void {\n\t\tif (limit < 0) {\n\t\t\treturn; // invalid limit\n\t\t}\n\n\t\tthis.limit = limit;\n\t\twhile (this.map.size > this.limit) {\n\t\t\tthis.trim();\n\t\t}\n\t}\n\n\tpublic serialize(): ISerializedBoundedLinkedMap {\n\t\tconst serialized: ISerializedBoundedLinkedMap = { entries: [] };\n\n\t\tthis.map.forEach(entry => {\n\t\t\tserialized.entries.push({ key: entry.key, value: entry.value });\n\t\t});\n\n\t\treturn serialized;\n\t}\n\n\tpublic get size(): number {\n\t\treturn this.map.size;\n\t}\n\n\tpublic set(key: string, value: T): boolean {\n\t\tif (this.map.has(key)) {\n\t\t\treturn false; // already present!\n\t\t}\n\n\t\tconst entry: LinkedEntry = { key, value };\n\t\tthis.push(entry);\n\n\t\tif (this.size > this.limit) {\n\t\t\tthis.trim();\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic get(key: string): T {\n\t\tconst entry = this.map.get(key);\n\n\t\treturn entry ? entry.value : null;\n\t}\n\n\tpublic getOrSet(k: string, t: T): T {\n\t\tconst res = this.get(k);\n\t\tif (res) {\n\t\t\treturn res;\n\t\t}\n\n\t\tthis.set(k, t);\n\n\t\treturn t;\n\t}\n\n\tpublic delete(key: string): T {\n\t\tconst entry = this.map.get(key);\n\n\t\tif (entry) {\n\t\t\tthis.map.delete(key);\n\n\t\t\tif (entry.next) {\n\t\t\t\tentry.next.prev = entry.prev; // [A]<-[x]<-[C] = [A]<-[C]\n\t\t\t} else {\n\t\t\t\tthis.head = entry.prev; // [A]-[x] = [A]\n\t\t\t}\n\n\t\t\tif (entry.prev) {\n\t\t\t\tentry.prev.next = entry.next; // [A]->[x]->[C] = [A]->[C]\n\t\t\t} else {\n\t\t\t\tthis.tail = entry.next; // [x]-[A] = [A]\n\t\t\t}\n\n\t\t\treturn entry.value;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tpublic has(key: string): boolean {\n\t\treturn this.map.has(key);\n\t}\n\n\tpublic clear(): void {\n\t\tthis.map.clear();\n\t\tthis.head = null;\n\t\tthis.tail = null;\n\t}\n\n\tprivate push(entry: LinkedEntry): void {\n\t\tif (this.head) {\n\t\t\t// [A]-[B] = [A]-[B]->[X]\n\t\t\tentry.prev = this.head;\n\t\t\tthis.head.next = entry;\n\t\t}\n\n\t\tif (!this.tail) {\n\t\t\tthis.tail = entry;\n\t\t}\n\n\t\tthis.head = entry;\n\n\t\tthis.map.set(entry.key, entry);\n\t}\n\n\tprivate trim(): void {\n\t\tif (this.tail) {\n\n\t\t\t// Remove all elements until ratio is reached\n\t\t\tif (this.ratio < this.limit) {\n\t\t\t\tlet index = 0;\n\t\t\t\tlet current = this.tail;\n\t\t\t\twhile (current.next) {\n\n\t\t\t\t\t// Remove the entry\n\t\t\t\t\tthis.map.delete(current.key);\n\n\t\t\t\t\t// if we reached the element that overflows our ratio condition\n\t\t\t\t\t// make its next element the new tail of the Map and adjust the size\n\t\t\t\t\tif (index === this.ratio) {\n\t\t\t\t\t\tthis.tail = current.next;\n\t\t\t\t\t\tthis.tail.prev = null;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Move on\n\t\t\t\t\tcurrent = current.next;\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Just remove the tail element\n\t\t\telse {\n\t\t\t\tthis.map.delete(this.tail.key);\n\n\t\t\t\t// [x]-[B] = [B]\n\t\t\t\tthis.tail = this.tail.next;\n\t\t\t\tif (this.tail) {\n\t\t\t\t\tthis.tail.prev = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n// --- trie'ish datastructure\n\nclass Node {\n\telement?: E;\n\treadonly children = new Map>();\n}\n\n/**\n * A trie map that allows for fast look up when keys are substrings\n * to the actual search keys (dir/subdir-problem).\n */\nexport class TrieMap {\n\n\tstatic PathSplitter = (s: string) => s.split(/[\\\\/]/).filter(s => !!s);\n\n\tprivate _splitter: (s: string) => string[];\n\tprivate _root = new Node();\n\n\tconstructor(splitter: (s: string) => string[]) {\n\t\tthis._splitter = splitter;\n\t}\n\n\tinsert(path: string, element: E): void {\n\t\tconst parts = this._splitter(path);\n\t\tlet i = 0;\n\n\t\t// find insertion node\n\t\tlet node = this._root;\n\t\tfor (; i < parts.length; i++) {\n\t\t\tlet child = node.children.get(parts[i]);\n\t\t\tif (child) {\n\t\t\t\tnode = child;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\t// create new nodes\n\t\tlet newNode: Node;\n\t\tfor (; i < parts.length; i++) {\n\t\t\tnewNode = new Node();\n\t\t\tnode.children.set(parts[i], newNode);\n\t\t\tnode = newNode;\n\t\t}\n\n\t\tnode.element = element;\n\t}\n\n\tlookUp(path: string): E {\n\t\tconst parts = this._splitter(path);\n\n\t\tlet { children } = this._root;\n\t\tlet node: Node;\n\t\tfor (const part of parts) {\n\t\t\tnode = children.get(part);\n\t\t\tif (!node) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tchildren = node.children;\n\t\t}\n\n\t\treturn node.element;\n\t}\n\n\tfindSubstr(path: string): E {\n\t\tconst parts = this._splitter(path);\n\n\t\tlet lastNode: Node;\n\t\tlet { children } = this._root;\n\t\tfor (const part of parts) {\n\t\t\tconst node = children.get(part);\n\t\t\tif (!node) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (node.element) {\n\t\t\t\tlastNode = node;\n\t\t\t}\n\t\t\tchildren = node.children;\n\t\t}\n\n\t\t// return the last matching node\n\t\t// that had an element\n\t\tif (lastNode) {\n\t\t\treturn lastNode.element;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tfindSuperstr(path: string): TrieMap {\n\t\tconst parts = this._splitter(path);\n\n\t\tlet { children } = this._root;\n\t\tlet node: Node;\n\t\tfor (const part of parts) {\n\t\t\tnode = children.get(part);\n\t\t\tif (!node) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tchildren = node.children;\n\t\t}\n\n\t\tconst result = new TrieMap(this._splitter);\n\t\tresult._root = node;\n\t\treturn result;\n\t}\n}\n\nexport class ResourceMap {\n\n\tprotected map: Map;\n\n\tconstructor(private ignoreCase?: boolean) {\n\t\tthis.map = new Map();\n\t}\n\n\tpublic set(resource: URI, value: T): void {\n\t\tthis.map.set(this.toKey(resource), value);\n\t}\n\n\tpublic get(resource: URI): T {\n\t\treturn this.map.get(this.toKey(resource));\n\t}\n\n\tpublic has(resource: URI): boolean {\n\t\treturn this.map.has(this.toKey(resource));\n\t}\n\n\tpublic get size(): number {\n\t\treturn this.map.size;\n\t}\n\n\tpublic clear(): void {\n\t\tthis.map.clear();\n\t}\n\n\tpublic delete(resource: URI): boolean {\n\t\treturn this.map.delete(this.toKey(resource));\n\t}\n\n\tpublic forEach(clb: (value: T) => void): void {\n\t\tthis.map.forEach(clb);\n\t}\n\n\tpublic values(): T[] {\n\t\treturn values(this.map);\n\t}\n\n\tprivate toKey(resource: URI): string {\n\t\tlet key = resource.toString();\n\t\tif (this.ignoreCase) {\n\t\t\tkey = key.toLowerCase();\n\t\t}\n\n\t\treturn key;\n\t}\n}\n\nexport class StrictResourceMap extends ResourceMap {\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\tpublic keys(): URI[] {\n\t\treturn keys(this.map).map(key => URI.parse(key));\n\t}\n\n}\n\n// We should fold BoundedMap and LinkedMap. See https://github.com/Microsoft/vscode/issues/28496\n\ninterface Item {\n\tprevious: Item | undefined;\n\tnext: Item | undefined;\n\tkey: K;\n\tvalue: V;\n}\n\nexport namespace Touch {\n\texport const None: 0 = 0;\n\texport const First: 1 = 1;\n\texport const Last: 2 = 2;\n}\n\nexport type Touch = 0 | 1 | 2;\n\nexport class LinkedMap {\n\n\tprivate _map: Map>;\n\tprivate _head: Item | undefined;\n\tprivate _tail: Item | undefined;\n\tprivate _size: number;\n\n\tconstructor() {\n\t\tthis._map = new Map>();\n\t\tthis._head = undefined;\n\t\tthis._tail = undefined;\n\t\tthis._size = 0;\n\t}\n\n\tpublic clear(): void {\n\t\tthis._map.clear();\n\t\tthis._head = undefined;\n\t\tthis._tail = undefined;\n\t\tthis._size = 0;\n\t}\n\n\tpublic isEmpty(): boolean {\n\t\treturn !this._head && !this._tail;\n\t}\n\n\tpublic get size(): number {\n\t\treturn this._size;\n\t}\n\n\tpublic has(key: K): boolean {\n\t\treturn this._map.has(key);\n\t}\n\n\tpublic get(key: K): V | undefined {\n\t\tconst item = this._map.get(key);\n\t\tif (!item) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn item.value;\n\t}\n\n\tpublic set(key: K, value: V, touch: Touch = Touch.None): void {\n\t\tlet item = this._map.get(key);\n\t\tif (item) {\n\t\t\titem.value = value;\n\t\t\tif (touch !== Touch.None) {\n\t\t\t\tthis.touch(item, touch);\n\t\t\t}\n\t\t} else {\n\t\t\titem = { key, value, next: undefined, previous: undefined };\n\t\t\tswitch (touch) {\n\t\t\t\tcase Touch.None:\n\t\t\t\t\tthis.addItemLast(item);\n\t\t\t\t\tbreak;\n\t\t\t\tcase Touch.First:\n\t\t\t\t\tthis.addItemFirst(item);\n\t\t\t\t\tbreak;\n\t\t\t\tcase Touch.Last:\n\t\t\t\t\tthis.addItemLast(item);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthis.addItemLast(item);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis._map.set(key, item);\n\t\t\tthis._size++;\n\t\t}\n\t}\n\n\tpublic delete(key: K): boolean {\n\t\treturn !!this.remove(key);\n\t}\n\n\tpublic remove(key: K): V | undefined {\n\t\tconst item = this._map.get(key);\n\t\tif (!item) {\n\t\t\treturn undefined;\n\t\t}\n\t\tthis._map.delete(key);\n\t\tthis.removeItem(item);\n\t\tthis._size--;\n\t\treturn item.value;\n\t}\n\n\tpublic shift(): V | undefined {\n\t\tif (!this._head && !this._tail) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (!this._head || !this._tail) {\n\t\t\tthrow new Error('Invalid list');\n\t\t}\n\t\tconst item = this._head;\n\t\tthis._map.delete(item.key);\n\t\tthis.removeItem(item);\n\t\tthis._size--;\n\t\treturn item.value;\n\t}\n\n\tpublic forEach(callbackfn: (value: V, key: K, map: LinkedMap) => void, thisArg?: any): void {\n\t\tlet current = this._head;\n\t\twhile (current) {\n\t\t\tif (thisArg) {\n\t\t\t\tcallbackfn.bind(thisArg)(current.value, current.key, this);\n\t\t\t} else {\n\t\t\t\tcallbackfn(current.value, current.key, this);\n\t\t\t}\n\t\t\tcurrent = current.next;\n\t\t}\n\t}\n\n\tpublic forEachReverse(callbackfn: (value: V, key: K, map: LinkedMap) => void, thisArg?: any): void {\n\t\tlet current = this._tail;\n\t\twhile (current) {\n\t\t\tif (thisArg) {\n\t\t\t\tcallbackfn.bind(thisArg)(current.value, current.key, this);\n\t\t\t} else {\n\t\t\t\tcallbackfn(current.value, current.key, this);\n\t\t\t}\n\t\t\tcurrent = current.previous;\n\t\t}\n\t}\n\n\tpublic values(): V[] {\n\t\tlet result: V[] = [];\n\t\tlet current = this._head;\n\t\twhile (current) {\n\t\t\tresult.push(current.value);\n\t\t\tcurrent = current.next;\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic keys(): K[] {\n\t\tlet result: K[] = [];\n\t\tlet current = this._head;\n\t\twhile (current) {\n\t\t\tresult.push(current.key);\n\t\t\tcurrent = current.next;\n\t\t}\n\t\treturn result;\n\t}\n\n\t/* VS Code / Monaco editor runs on es5 which has no Symbol.iterator\n\tpublic keys(): IterableIterator {\n\t\tlet current = this._head;\n\t\tlet iterator: IterableIterator = {\n\t\t\t[Symbol.iterator]() {\n\t\t\t\treturn iterator;\n\t\t\t},\n\t\t\tnext():IteratorResult {\n\t\t\t\tif (current) {\n\t\t\t\t\tlet result = { value: current.key, done: false };\n\t\t\t\t\tcurrent = current.next;\n\t\t\t\t\treturn result;\n\t\t\t\t} else {\n\t\t\t\t\treturn { value: undefined, done: true };\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn iterator;\n\t}\n\n\tpublic values(): IterableIterator {\n\t\tlet current = this._head;\n\t\tlet iterator: IterableIterator = {\n\t\t\t[Symbol.iterator]() {\n\t\t\t\treturn iterator;\n\t\t\t},\n\t\t\tnext():IteratorResult {\n\t\t\t\tif (current) {\n\t\t\t\t\tlet result = { value: current.value, done: false };\n\t\t\t\t\tcurrent = current.next;\n\t\t\t\t\treturn result;\n\t\t\t\t} else {\n\t\t\t\t\treturn { value: undefined, done: true };\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn iterator;\n\t}\n\t*/\n\n\tprivate addItemFirst(item: Item): void {\n\t\t// First time Insert\n\t\tif (!this._head && !this._tail) {\n\t\t\tthis._tail = item;\n\t\t} else if (!this._head) {\n\t\t\tthrow new Error('Invalid list');\n\t\t} else {\n\t\t\titem.next = this._head;\n\t\t\tthis._head.previous = item;\n\t\t}\n\t\tthis._head = item;\n\t}\n\n\tprivate addItemLast(item: Item): void {\n\t\t// First time Insert\n\t\tif (!this._head && !this._tail) {\n\t\t\tthis._head = item;\n\t\t} else if (!this._tail) {\n\t\t\tthrow new Error('Invalid list');\n\t\t} else {\n\t\t\titem.previous = this._tail;\n\t\t\tthis._tail.next = item;\n\t\t}\n\t\tthis._tail = item;\n\t}\n\n\tprivate removeItem(item: Item): void {\n\t\tif (item === this._head && item === this._tail) {\n\t\t\tthis._head = undefined;\n\t\t\tthis._tail = undefined;\n\t\t}\n\t\telse if (item === this._head) {\n\t\t\tthis._head = item.next;\n\t\t}\n\t\telse if (item === this._tail) {\n\t\t\tthis._tail = item.previous;\n\t\t}\n\t\telse {\n\t\t\tconst next = item.next;\n\t\t\tconst previous = item.previous;\n\t\t\tif (!next || !previous) {\n\t\t\t\tthrow new Error('Invalid list');\n\t\t\t}\n\t\t\tnext.previous = previous;\n\t\t\tprevious.next = next;\n\t\t}\n\t}\n\n\tprivate touch(item: Item, touch: Touch): void {\n\t\tif (!this._head || !this._tail) {\n\t\t\tthrow new Error('Invalid list');\n\t\t}\n\t\tif ((touch !== Touch.First && touch !== Touch.Last)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (touch === Touch.First) {\n\t\t\tif (item === this._head) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst next = item.next;\n\t\t\tconst previous = item.previous;\n\n\t\t\t// Unlink the item\n\t\t\tif (item === this._tail) {\n\t\t\t\t// previous must be defined since item was not head but is tail\n\t\t\t\t// So there are more than on item in the map\n\t\t\t\tprevious!.next = undefined;\n\t\t\t\tthis._tail = previous;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Both next and previous are not undefined since item was neither head nor tail.\n\t\t\t\tnext!.previous = previous;\n\t\t\t\tprevious!.next = next;\n\t\t\t}\n\n\t\t\t// Insert the node at head\n\t\t\titem.previous = undefined;\n\t\t\titem.next = this._head;\n\t\t\tthis._head.previous = item;\n\t\t\tthis._head = item;\n\t\t} else if (touch === Touch.Last) {\n\t\t\tif (item === this._tail) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst next = item.next;\n\t\t\tconst previous = item.previous;\n\n\t\t\t// Unlink the item.\n\t\t\tif (item === this._head) {\n\t\t\t\t// next must be defined since item was not tail but is head\n\t\t\t\t// So there are more than on item in the map\n\t\t\t\tnext!.previous = undefined;\n\t\t\t\tthis._head = next;\n\t\t\t} else {\n\t\t\t\t// Both next and previous are not undefined since item was neither head nor tail.\n\t\t\t\tnext!.previous = previous;\n\t\t\t\tprevious!.next = next;\n\t\t\t}\n\t\t\titem.next = undefined;\n\t\t\titem.previous = this._tail;\n\t\t\tthis._tail.next = item;\n\t\t\tthis._tail = item;\n\t\t}\n\t}\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'use strict';\n\nimport URI from 'vs/base/common/uri';\n\nexport function stringify(obj: any): string {\n\treturn JSON.stringify(obj, replacer);\n}\n\nexport function parse(text: string): any {\n\treturn JSON.parse(text, reviver);\n}\n\ninterface MarshalledObject {\n\t$mid: number;\n}\n\nfunction replacer(key: string, value: any): any {\n\t// URI is done via toJSON-member\n\tif (value instanceof RegExp) {\n\t\treturn {\n\t\t\t$mid: 2,\n\t\t\tsource: (value).source,\n\t\t\tflags: ((value).global ? 'g' : '') + ((value).ignoreCase ? 'i' : '') + ((value).multiline ? 'm' : ''),\n\t\t};\n\t}\n\treturn value;\n}\n\nfunction reviver(key: string, value: any): any {\n\tlet marshallingConst: number;\n\tif (value !== void 0 && value !== null) {\n\t\tmarshallingConst = (value).$mid;\n\t}\n\n\tswitch (marshallingConst) {\n\t\tcase 1: return URI.revive(value);\n\t\tcase 2: return new RegExp(value.source, value.flags);\n\t\tdefault: return value;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { BoundedMap } from 'vs/base/common/map';\nimport { CharCode } from 'vs/base/common/charCode';\n\n/**\n * The empty string.\n */\nexport const empty = '';\n\nexport function isFalsyOrWhitespace(str: string): boolean {\n\tif (!str || typeof str !== 'string') {\n\t\treturn true;\n\t}\n\treturn str.trim().length === 0;\n}\n\n/**\n * @returns the provided number with the given number of preceding zeros.\n */\nexport function pad(n: number, l: number, char: string = '0'): string {\n\tlet str = '' + n;\n\tlet r = [str];\n\n\tfor (let i = str.length; i < l; i++) {\n\t\tr.push(char);\n\t}\n\n\treturn r.reverse().join('');\n}\n\nconst _formatRegexp = /{(\\d+)}/g;\n\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: string, ...args: any[]): string {\n\tif (args.length === 0) {\n\t\treturn value;\n\t}\n\treturn value.replace(_formatRegexp, function (match, group) {\n\t\tlet idx = parseInt(group, 10);\n\t\treturn isNaN(idx) || idx < 0 || idx >= args.length ?\n\t\t\tmatch :\n\t\t\targs[idx];\n\t});\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: string): string {\n\treturn html.replace(/[<|>|&]/g, function (match) {\n\t\tswitch (match) {\n\t\t\tcase '<': return '<';\n\t\t\tcase '>': return '>';\n\t\t\tcase '&': return '&';\n\t\t\tdefault: return match;\n\t\t}\n\t});\n}\n\n/**\n * Escapes regular expression characters in a given string\n */\nexport function escapeRegExpCharacters(value: string): string {\n\treturn value.replace(/[\\-\\\\\\{\\}\\*\\+\\?\\|\\^\\$\\.\\[\\]\\(\\)\\#]/g, '\\\\$&');\n}\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: string, needle: string = ' '): string {\n\tlet trimmed = ltrim(haystack, needle);\n\treturn rtrim(trimmed, needle);\n}\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?: string, needle?: string): string {\n\tif (!haystack || !needle) {\n\t\treturn haystack;\n\t}\n\n\tlet needleLen = needle.length;\n\tif (needleLen === 0 || haystack.length === 0) {\n\t\treturn haystack;\n\t}\n\n\tlet offset = 0,\n\t\tidx = -1;\n\n\twhile ((idx = haystack.indexOf(needle, offset)) === offset) {\n\t\toffset = offset + needleLen;\n\t}\n\treturn haystack.substring(offset);\n}\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?: string, needle?: string): string {\n\tif (!haystack || !needle) {\n\t\treturn haystack;\n\t}\n\n\tlet needleLen = needle.length,\n\t\thaystackLen = haystack.length;\n\n\tif (needleLen === 0 || haystackLen === 0) {\n\t\treturn haystack;\n\t}\n\n\tlet offset = haystackLen,\n\t\tidx = -1;\n\n\twhile (true) {\n\t\tidx = haystack.lastIndexOf(needle, offset - 1);\n\t\tif (idx === -1 || idx + needleLen !== offset) {\n\t\t\tbreak;\n\t\t}\n\t\tif (idx === 0) {\n\t\t\treturn '';\n\t\t}\n\t\toffset = idx;\n\t}\n\n\treturn haystack.substring(0, offset);\n}\n\nexport function convertSimple2RegExpPattern(pattern: string): string {\n\treturn pattern.replace(/[\\-\\\\\\{\\}\\+\\?\\|\\^\\$\\.\\,\\[\\]\\(\\)\\#\\s]/g, '\\\\$&').replace(/[\\*]/g, '.*');\n}\n\nexport function stripWildcards(pattern: string): string {\n\treturn pattern.replace(/\\*/g, '');\n}\n\n/**\n * Determines if haystack starts with needle.\n */\nexport function startsWith(haystack: string, needle: string): boolean {\n\tif (haystack.length < needle.length) {\n\t\treturn false;\n\t}\n\n\tfor (let i = 0; i < needle.length; i++) {\n\t\tif (haystack[i] !== needle[i]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n/**\n * Determines if haystack ends with needle.\n */\nexport function endsWith(haystack: string, needle: string): boolean {\n\tlet diff = haystack.length - needle.length;\n\tif (diff > 0) {\n\t\treturn haystack.indexOf(needle, diff) === diff;\n\t} else if (diff === 0) {\n\t\treturn haystack === needle;\n\t} else {\n\t\treturn false;\n\t}\n}\n\nexport function indexOfIgnoreCase(haystack: string, needle: string, position: number = 0): number {\n\tlet index = haystack.indexOf(needle, position);\n\tif (index < 0) {\n\t\tif (position > 0) {\n\t\t\thaystack = haystack.substr(position);\n\t\t}\n\t\tneedle = escapeRegExpCharacters(needle);\n\t\tindex = haystack.search(new RegExp(needle, 'i'));\n\t}\n\treturn index;\n}\n\nexport interface RegExpOptions {\n\tmatchCase?: boolean;\n\twholeWord?: boolean;\n\tmultiline?: boolean;\n\tglobal?: boolean;\n}\n\nexport function createRegExp(searchString: string, isRegex: boolean, options: RegExpOptions = {}): RegExp {\n\tif (!searchString) {\n\t\tthrow new Error('Cannot create regex from empty string');\n\t}\n\tif (!isRegex) {\n\t\tsearchString = escapeRegExpCharacters(searchString);\n\t}\n\tif (options.wholeWord) {\n\t\tif (!/\\B/.test(searchString.charAt(0))) {\n\t\t\tsearchString = '\\\\b' + searchString;\n\t\t}\n\t\tif (!/\\B/.test(searchString.charAt(searchString.length - 1))) {\n\t\t\tsearchString = searchString + '\\\\b';\n\t\t}\n\t}\n\tlet modifiers = '';\n\tif (options.global) {\n\t\tmodifiers += 'g';\n\t}\n\tif (!options.matchCase) {\n\t\tmodifiers += 'i';\n\t}\n\tif (options.multiline) {\n\t\tmodifiers += 'm';\n\t}\n\n\treturn new RegExp(searchString, modifiers);\n}\n\nexport function regExpLeadsToEndlessLoop(regexp: RegExp): boolean {\n\t// Exit early if it's one of these special cases which are meant to match\n\t// against an empty string\n\tif (regexp.source === '^' || regexp.source === '^$' || regexp.source === '$') {\n\t\treturn false;\n\t}\n\n\t// We check against an empty string. If the regular expression doesn't advance\n\t// (e.g. ends in an endless loop) it will match an empty string.\n\tlet match = regexp.exec('');\n\treturn (match && regexp.lastIndex === 0);\n}\n\n/**\n * The normalize() method returns the Unicode Normalization Form of a given string. The form will be\n * the Normalization Form Canonical Composition.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize}\n */\nexport let canNormalize = typeof (('').normalize) === 'function';\nconst nonAsciiCharactersPattern = /[^\\u0000-\\u0080]/;\nconst normalizedCache = new BoundedMap(10000); // bounded to 10000 elements\nexport function normalizeNFC(str: string): string {\n\tif (!canNormalize || !str) {\n\t\treturn str;\n\t}\n\n\tconst cached = normalizedCache.get(str);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\tlet res: string;\n\tif (nonAsciiCharactersPattern.test(str)) {\n\t\tres = (str).normalize('NFC');\n\t} else {\n\t\tres = str;\n\t}\n\n\t// Use the cache for fast lookup\n\tnormalizedCache.set(str, res);\n\n\treturn res;\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: string): number {\n\tfor (let i = 0, len = str.length; i < len; i++) {\n\t\tlet chCode = str.charCodeAt(i);\n\t\tif (chCode !== CharCode.Space && chCode !== CharCode.Tab) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n}\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: string, start: number = 0, end: number = str.length): string {\n\tfor (let i = start; i < end; i++) {\n\t\tlet chCode = str.charCodeAt(i);\n\t\tif (chCode !== CharCode.Space && chCode !== CharCode.Tab) {\n\t\t\treturn str.substring(start, i);\n\t\t}\n\t}\n\treturn str.substring(start, end);\n}\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: string, startIndex: number = str.length - 1): number {\n\tfor (let i = startIndex; i >= 0; i--) {\n\t\tlet chCode = str.charCodeAt(i);\n\t\tif (chCode !== CharCode.Space && chCode !== CharCode.Tab) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n}\n\nexport function compare(a: string, b: string): number {\n\tif (a < b) {\n\t\treturn -1;\n\t} else if (a > b) {\n\t\treturn 1;\n\t} else {\n\t\treturn 0;\n\t}\n}\n\nexport function compareIgnoreCase(a: string, b: string): number {\n\tconst len = Math.min(a.length, b.length);\n\tfor (let i = 0; i < len; i++) {\n\t\tlet codeA = a.charCodeAt(i);\n\t\tlet codeB = b.charCodeAt(i);\n\n\t\tif (codeA === codeB) {\n\t\t\t// equal\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (isUpperAsciiLetter(codeA)) {\n\t\t\tcodeA += 32;\n\t\t}\n\n\t\tif (isUpperAsciiLetter(codeB)) {\n\t\t\tcodeB += 32;\n\t\t}\n\n\t\tconst diff = codeA - codeB;\n\n\t\tif (diff === 0) {\n\t\t\t// equal -> ignoreCase\n\t\t\tcontinue;\n\n\t\t} else if (isLowerAsciiLetter(codeA) && isLowerAsciiLetter(codeB)) {\n\t\t\t//\n\t\t\treturn diff;\n\n\t\t} else {\n\t\t\treturn compare(a.toLowerCase(), b.toLowerCase());\n\t\t}\n\t}\n\n\tif (a.length < b.length) {\n\t\treturn -1;\n\t} else if (a.length > b.length) {\n\t\treturn 1;\n\t} else {\n\t\treturn 0;\n\t}\n}\n\nfunction isLowerAsciiLetter(code: number): boolean {\n\treturn code >= CharCode.a && code <= CharCode.z;\n}\n\nfunction isUpperAsciiLetter(code: number): boolean {\n\treturn code >= CharCode.A && code <= CharCode.Z;\n}\n\nfunction isAsciiLetter(code: number): boolean {\n\treturn isLowerAsciiLetter(code) || isUpperAsciiLetter(code);\n}\n\nexport function equalsIgnoreCase(a: string, b: string): boolean {\n\tconst len1 = a ? a.length : 0;\n\tconst len2 = b ? b.length : 0;\n\n\tif (len1 !== len2) {\n\t\treturn false;\n\t}\n\n\treturn doEqualsIgnoreCase(a, b);\n}\n\nfunction doEqualsIgnoreCase(a: string, b: string, stopAt = a.length): boolean {\n\tif (typeof a !== 'string' || typeof b !== 'string') {\n\t\treturn false;\n\t}\n\n\tfor (let i = 0; i < stopAt; i++) {\n\t\tconst codeA = a.charCodeAt(i);\n\t\tconst codeB = b.charCodeAt(i);\n\n\t\tif (codeA === codeB) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// a-z A-Z\n\t\tif (isAsciiLetter(codeA) && isAsciiLetter(codeB)) {\n\t\t\tlet diff = Math.abs(codeA - codeB);\n\t\t\tif (diff !== 0 && diff !== 32) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t// Any other charcode\n\t\telse {\n\t\t\tif (String.fromCharCode(codeA).toLowerCase() !== String.fromCharCode(codeB).toLowerCase()) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true;\n}\n\nexport function beginsWithIgnoreCase(str: string, candidate: string): boolean {\n\tconst candidateLength = candidate.length;\n\tif (candidate.length > str.length) {\n\t\treturn false;\n\t}\n\n\treturn doEqualsIgnoreCase(str, candidate, candidateLength);\n}\n\n/**\n * @returns the length of the common prefix of the two strings.\n */\nexport function commonPrefixLength(a: string, b: string): number {\n\n\tlet i: number,\n\t\tlen = Math.min(a.length, b.length);\n\n\tfor (i = 0; i < len; i++) {\n\t\tif (a.charCodeAt(i) !== b.charCodeAt(i)) {\n\t\t\treturn i;\n\t\t}\n\t}\n\n\treturn len;\n}\n\n/**\n * @returns the length of the common suffix of the two strings.\n */\nexport function commonSuffixLength(a: string, b: string): number {\n\n\tlet i: number,\n\t\tlen = Math.min(a.length, b.length);\n\n\tlet aLastIndex = a.length - 1;\n\tlet bLastIndex = b.length - 1;\n\n\tfor (i = 0; i < len; i++) {\n\t\tif (a.charCodeAt(aLastIndex - i) !== b.charCodeAt(bLastIndex - i)) {\n\t\t\treturn i;\n\t\t}\n\t}\n\n\treturn len;\n}\n\nfunction substrEquals(a: string, aStart: number, aEnd: number, b: string, bStart: number, bEnd: number): boolean {\n\twhile (aStart < aEnd && bStart < bEnd) {\n\t\tif (a[aStart] !== b[bStart]) {\n\t\t\treturn false;\n\t\t}\n\t\taStart += 1;\n\t\tbStart += 1;\n\t}\n\treturn true;\n}\n\n/**\n * Return the overlap between the suffix of `a` and the prefix of `b`.\n * For instance `overlap(\"foobar\", \"arr, I'm a pirate\") === 2`.\n */\nexport function overlap(a: string, b: string): number {\n\tlet aEnd = a.length;\n\tlet bEnd = b.length;\n\tlet aStart = aEnd - bEnd;\n\n\tif (aStart === 0) {\n\t\treturn a === b ? aEnd : 0;\n\t} else if (aStart < 0) {\n\t\tbEnd += aStart;\n\t\taStart = 0;\n\t}\n\n\twhile (aStart < aEnd && bEnd > 0) {\n\t\tif (substrEquals(a, aStart, aEnd, b, 0, bEnd)) {\n\t\t\treturn bEnd;\n\t\t}\n\t\tbEnd -= 1;\n\t\taStart += 1;\n\t}\n\treturn 0;\n}\n\n// --- unicode\n// http://en.wikipedia.org/wiki/Surrogate_pair\n// Returns the code point starting at a specified index in a string\n// Code points U+0000 to U+D7FF and U+E000 to U+FFFF are represented on a single character\n// Code points U+10000 to U+10FFFF are represented on two consecutive characters\n//export function getUnicodePoint(str:string, index:number, len:number):number {\n//\tlet chrCode = str.charCodeAt(index);\n//\tif (0xD800 <= chrCode && chrCode <= 0xDBFF && index + 1 < len) {\n//\t\tlet nextChrCode = str.charCodeAt(index + 1);\n//\t\tif (0xDC00 <= nextChrCode && nextChrCode <= 0xDFFF) {\n//\t\t\treturn (chrCode - 0xD800) << 10 + (nextChrCode - 0xDC00) + 0x10000;\n//\t\t}\n//\t}\n//\treturn chrCode;\n//}\nexport function isHighSurrogate(charCode: number): boolean {\n\treturn (0xD800 <= charCode && charCode <= 0xDBFF);\n}\n\nexport function isLowSurrogate(charCode: number): boolean {\n\treturn (0xDC00 <= charCode && charCode <= 0xDFFF);\n}\n\n/**\n * Generated using https://github.com/alexandrudima/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/**\n * Returns true if `str` contains any Unicode character that is classified as \"R\" or \"AL\".\n */\nexport function containsRTL(str: string): boolean {\n\treturn CONTAINS_RTL.test(str);\n}\n\n/**\n * Generated using https://github.com/alexandrudima/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-\\uDEF8]|\\uD83E[\\uDD00-\\uDDE6])/;\n\nexport function containsEmoji(str: string): boolean {\n\treturn CONTAINS_EMOJI.test(str);\n}\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: string): boolean {\n\treturn IS_BASIC_ASCII.test(str);\n}\n\nexport function containsFullWidthCharacter(str: string): boolean {\n\tfor (let i = 0, len = str.length; i < len; i++) {\n\t\tif (isFullWidthCharacter(str.charCodeAt(i))) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nexport function isFullWidthCharacter(charCode: number): boolean {\n\t// Do a cheap trick to better support wrapping of wide characters, treat them as 2 columns\n\t// http://jrgraphix.net/research/unicode_blocks.php\n\t// 2E80 — 2EFF CJK Radicals Supplement\n\t// 2F00 — 2FDF Kangxi Radicals\n\t// 2FF0 — 2FFF Ideographic Description Characters\n\t// 3000 — 303F CJK Symbols and Punctuation\n\t// 3040 — 309F Hiragana\n\t// 30A0 — 30FF Katakana\n\t// 3100 — 312F Bopomofo\n\t// 3130 — 318F Hangul Compatibility Jamo\n\t// 3190 — 319F Kanbun\n\t// 31A0 — 31BF Bopomofo Extended\n\t// 31F0 — 31FF Katakana Phonetic Extensions\n\t// 3200 — 32FF Enclosed CJK Letters and Months\n\t// 3300 — 33FF CJK Compatibility\n\t// 3400 — 4DBF CJK Unified Ideographs Extension A\n\t// 4DC0 — 4DFF Yijing Hexagram Symbols\n\t// 4E00 — 9FFF CJK Unified Ideographs\n\t// A000 — A48F Yi Syllables\n\t// A490 — A4CF Yi Radicals\n\t// AC00 — D7AF Hangul Syllables\n\t// [IGNORE] D800 — DB7F High Surrogates\n\t// [IGNORE] DB80 — DBFF High Private Use Surrogates\n\t// [IGNORE] DC00 — DFFF Low Surrogates\n\t// [IGNORE] E000 — F8FF Private Use Area\n\t// F900 — FAFF CJK Compatibility Ideographs\n\t// [IGNORE] FB00 — FB4F Alphabetic Presentation Forms\n\t// [IGNORE] FB50 — FDFF Arabic Presentation Forms-A\n\t// [IGNORE] FE00 — FE0F Variation Selectors\n\t// [IGNORE] FE20 — FE2F Combining Half Marks\n\t// [IGNORE] FE30 — FE4F CJK Compatibility Forms\n\t// [IGNORE] FE50 — FE6F Small Form Variants\n\t// [IGNORE] FE70 — FEFF Arabic Presentation Forms-B\n\t// FF00 — FFEF Halfwidth and Fullwidth Forms\n\t// [https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms]\n\t// of which FF01 - FF5E fullwidth ASCII of 21 to 7E\n\t// [IGNORE] and FF65 - FFDC halfwidth of Katakana and Hangul\n\t// [IGNORE] FFF0 — FFFF Specials\n\tcharCode = +charCode; // @perf\n\treturn (\n\t\t(charCode >= 0x2E80 && charCode <= 0xD7AF)\n\t\t|| (charCode >= 0xF900 && charCode <= 0xFAFF)\n\t\t|| (charCode >= 0xFF01 && charCode <= 0xFF5E)\n\t);\n}\n\n/**\n * Computes the difference score for two strings. More similar strings have a higher score.\n * We use largest common subsequence dynamic programming approach but penalize in the end for length differences.\n * Strings that have a large length difference will get a bad default score 0.\n * Complexity - both time and space O(first.length * second.length)\n * Dynamic programming LCS computation http://en.wikipedia.org/wiki/Longest_common_subsequence_problem\n *\n * @param first a string\n * @param second a string\n */\nexport function difference(first: string, second: string, maxLenDelta: number = 4): number {\n\tlet lengthDifference = Math.abs(first.length - second.length);\n\t// We only compute score if length of the currentWord and length of entry.name are similar.\n\tif (lengthDifference > maxLenDelta) {\n\t\treturn 0;\n\t}\n\t// Initialize LCS (largest common subsequence) matrix.\n\tlet LCS: number[][] = [];\n\tlet zeroArray: number[] = [];\n\tlet i: number, j: number;\n\tfor (i = 0; i < second.length + 1; ++i) {\n\t\tzeroArray.push(0);\n\t}\n\tfor (i = 0; i < first.length + 1; ++i) {\n\t\tLCS.push(zeroArray);\n\t}\n\tfor (i = 1; i < first.length + 1; ++i) {\n\t\tfor (j = 1; j < second.length + 1; ++j) {\n\t\t\tif (first[i - 1] === second[j - 1]) {\n\t\t\t\tLCS[i][j] = LCS[i - 1][j - 1] + 1;\n\t\t\t} else {\n\t\t\t\tLCS[i][j] = Math.max(LCS[i - 1][j], LCS[i][j - 1]);\n\t\t\t}\n\t\t}\n\t}\n\treturn LCS[first.length][second.length] - Math.sqrt(lengthDifference);\n}\n\n/**\n * Returns an array in which every entry is the offset of a\n * line. There is always one entry which is zero.\n */\nexport function computeLineStarts(text: string): number[] {\n\tlet regexp = /\\r\\n|\\r|\\n/g,\n\t\tret: number[] = [0],\n\t\tmatch: RegExpExecArray;\n\twhile ((match = regexp.exec(text))) {\n\t\tret.push(regexp.lastIndex);\n\t}\n\treturn ret;\n}\n\n/**\n * Given a string and a max length returns a shorted version. Shorting\n * happens at favorable positions - such as whitespace or punctuation characters.\n */\nexport function lcut(text: string, n: number): string {\n\n\tif (text.length < n) {\n\t\treturn text;\n\t}\n\n\tlet segments = text.split(/\\b/),\n\t\tcount = 0;\n\n\tfor (let i = segments.length - 1; i >= 0; i--) {\n\t\tcount += segments[i].length;\n\n\t\tif (count > n) {\n\t\t\tsegments.splice(0, i);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn segments.join(empty).replace(/^\\s/, empty);\n}\n\n// Escape codes\n// http://en.wikipedia.org/wiki/ANSI_escape_code\nconst EL = /\\x1B\\x5B[12]?K/g; // Erase in line\nconst COLOR_START = /\\x1b\\[\\d+m/g; // Color\nconst COLOR_END = /\\x1b\\[0?m/g; // Color\n\nexport function removeAnsiEscapeCodes(str: string): string {\n\tif (str) {\n\t\tstr = str.replace(EL, '');\n\t\tstr = str.replace(COLOR_START, '');\n\t\tstr = str.replace(COLOR_END, '');\n\t}\n\n\treturn str;\n}\n\n// -- UTF-8 BOM\n\nexport const UTF8_BOM_CHARACTER = String.fromCharCode(CharCode.UTF8_BOM);\n\nexport function startsWithUTF8BOM(str: string): boolean {\n\treturn (str && str.length > 0 && str.charCodeAt(0) === CharCode.UTF8_BOM);\n}\n\n/**\n * Appends two strings. If the appended result is longer than maxLength,\n * trims the start of the result and replaces it with '...'.\n */\nexport function appendWithLimit(first: string, second: string, maxLength: number): string {\n\tconst newLength = first.length + second.length;\n\tif (newLength > maxLength) {\n\t\tfirst = '...' + first.substr(newLength - maxLength);\n\t}\n\tif (second.length > maxLength) {\n\t\tfirst += second.substr(second.length - maxLength);\n\t} else {\n\t\tfirst += second;\n\t}\n\n\treturn first;\n}\n\n\nexport function safeBtoa(str: string): string {\n\treturn btoa(encodeURIComponent(str)); // we use encodeURIComponent because btoa fails for non Latin 1 values\n}\n\nexport function repeat(s: string, count: number): string {\n\tlet result = '';\n\tfor (let i = 0; i < count; i++) {\n\t\tresult += s;\n\t}\n\treturn 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 octiconLabel = require('vs/base/browser/ui/octiconLabel/octiconLabel');\nimport { escape } from 'vs/base/common/strings';\n\nfunction expand(text: string): string {\n\treturn text;\n}\n\nclass MockOcticonLabel {\n\n\tprivate _container: HTMLElement;\n\n\tconstructor(container: HTMLElement) {\n\t\tthis._container = container;\n\t}\n\n\tset text(text: string) {\n\t\tlet innerHTML = text || '';\n\t\tinnerHTML = escape(innerHTML);\n\t\tinnerHTML = expand(innerHTML);\n\t\tthis._container.innerHTML = innerHTML;\n\t}\n\n}\n\nvar mock: typeof octiconLabel = {\n\texpand: expand,\n\tOcticonLabel: MockOcticonLabel\n};\nexport = mock;","/*---------------------------------------------------------------------------------------------\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'use strict';\n\nimport strings = require('vs/base/common/strings');\nimport { BoundedMap } from 'vs/base/common/map';\nimport { CharCode } from 'vs/base/common/charCode';\n\nexport interface IFilter {\n\t// Returns null if word doesn't match.\n\t(word: string, wordToMatchAgainst: string): IMatch[];\n}\n\nexport interface IMatch {\n\tstart: number;\n\tend: number;\n}\n\n// Combined filters\n\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: IFilter[]): IFilter {\n\treturn function (word: string, wordToMatchAgainst: string): IMatch[] {\n\t\tfor (let i = 0, len = filter.length; i < len; i++) {\n\t\t\tlet match = filter[i](word, wordToMatchAgainst);\n\t\t\tif (match) {\n\t\t\t\treturn match;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n}\n\n/**\n * @returns A filter which combines the provided set\n * of filters with an and. The combines matches are\n * returned if *all* filters match.\n */\nexport function and(...filter: IFilter[]): IFilter {\n\treturn function (word: string, wordToMatchAgainst: string): IMatch[] {\n\t\tlet result: IMatch[] = [];\n\t\tfor (let i = 0, len = filter.length; i < len; i++) {\n\t\t\tlet match = filter[i](word, wordToMatchAgainst);\n\t\t\tif (!match) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tresult = result.concat(match);\n\t\t}\n\t\treturn result;\n\t};\n}\n\n// Prefix\n\nexport const matchesStrictPrefix: IFilter = _matchesPrefix.bind(undefined, false);\nexport const matchesPrefix: IFilter = _matchesPrefix.bind(undefined, true);\n\nfunction _matchesPrefix(ignoreCase: boolean, word: string, wordToMatchAgainst: string): IMatch[] {\n\tif (!wordToMatchAgainst || wordToMatchAgainst.length < word.length) {\n\t\treturn null;\n\t}\n\n\tlet matches: boolean;\n\tif (ignoreCase) {\n\t\tmatches = strings.beginsWithIgnoreCase(wordToMatchAgainst, word);\n\t} else {\n\t\tmatches = wordToMatchAgainst.indexOf(word) === 0;\n\t}\n\n\tif (!matches) {\n\t\treturn null;\n\t}\n\n\treturn word.length > 0 ? [{ start: 0, end: word.length }] : [];\n}\n\n// Contiguous Substring\n\nexport function matchesContiguousSubString(word: string, wordToMatchAgainst: string): IMatch[] {\n\tlet index = wordToMatchAgainst.toLowerCase().indexOf(word.toLowerCase());\n\tif (index === -1) {\n\t\treturn null;\n\t}\n\n\treturn [{ start: index, end: index + word.length }];\n}\n\n// Substring\n\nexport function matchesSubString(word: string, wordToMatchAgainst: string): IMatch[] {\n\treturn _matchesSubString(word.toLowerCase(), wordToMatchAgainst.toLowerCase(), 0, 0);\n}\n\nfunction _matchesSubString(word: string, wordToMatchAgainst: string, i: number, j: number): IMatch[] {\n\tif (i === word.length) {\n\t\treturn [];\n\t} else if (j === wordToMatchAgainst.length) {\n\t\treturn null;\n\t} else {\n\t\tif (word[i] === wordToMatchAgainst[j]) {\n\t\t\tlet result: IMatch[] = null;\n\t\t\tif (result = _matchesSubString(word, wordToMatchAgainst, i + 1, j + 1)) {\n\t\t\t\treturn join({ start: j, end: j + 1 }, result);\n\t\t\t}\n\t\t}\n\n\t\treturn _matchesSubString(word, wordToMatchAgainst, i, j + 1);\n\t}\n}\n\n// CamelCase\n\nfunction isLower(code: number): boolean {\n\treturn CharCode.a <= code && code <= CharCode.z;\n}\n\nfunction isUpper(code: number): boolean {\n\treturn CharCode.A <= code && code <= CharCode.Z;\n}\n\nfunction isNumber(code: number): boolean {\n\treturn CharCode.Digit0 <= code && code <= CharCode.Digit9;\n}\n\nfunction isWhitespace(code: number): boolean {\n\treturn (\n\t\tcode === CharCode.Space\n\t\t|| code === CharCode.Tab\n\t\t|| code === CharCode.LineFeed\n\t\t|| code === CharCode.CarriageReturn\n\t);\n}\n\nfunction isAlphanumeric(code: number): boolean {\n\treturn isLower(code) || isUpper(code) || isNumber(code);\n}\n\nfunction join(head: IMatch, tail: IMatch[]): IMatch[] {\n\tif (tail.length === 0) {\n\t\ttail = [head];\n\t} else if (head.end === tail[0].start) {\n\t\ttail[0].start = head.start;\n\t} else {\n\t\ttail.unshift(head);\n\t}\n\treturn tail;\n}\n\nfunction nextAnchor(camelCaseWord: string, start: number): number {\n\tfor (let i = start; i < camelCaseWord.length; i++) {\n\t\tlet c = camelCaseWord.charCodeAt(i);\n\t\tif (isUpper(c) || isNumber(c) || (i > 0 && !isAlphanumeric(camelCaseWord.charCodeAt(i - 1)))) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn camelCaseWord.length;\n}\n\nfunction _matchesCamelCase(word: string, camelCaseWord: string, i: number, j: number): IMatch[] {\n\tif (i === word.length) {\n\t\treturn [];\n\t} else if (j === camelCaseWord.length) {\n\t\treturn null;\n\t} else if (word[i] !== camelCaseWord[j].toLowerCase()) {\n\t\treturn null;\n\t} else {\n\t\tlet result: IMatch[] = null;\n\t\tlet nextUpperIndex = j + 1;\n\t\tresult = _matchesCamelCase(word, camelCaseWord, i + 1, j + 1);\n\t\twhile (!result && (nextUpperIndex = nextAnchor(camelCaseWord, nextUpperIndex)) < camelCaseWord.length) {\n\t\t\tresult = _matchesCamelCase(word, camelCaseWord, i + 1, nextUpperIndex);\n\t\t\tnextUpperIndex++;\n\t\t}\n\t\treturn result === null ? null : join({ start: j, end: j + 1 }, result);\n\t}\n}\n\ninterface ICamelCaseAnalysis {\n\tupperPercent: number;\n\tlowerPercent: number;\n\talphaPercent: number;\n\tnumericPercent: number;\n}\n\n// Heuristic to avoid computing camel case matcher for words that don't\n// look like camelCaseWords.\nfunction analyzeCamelCaseWord(word: string): ICamelCaseAnalysis {\n\tlet upper = 0, lower = 0, alpha = 0, numeric = 0, code = 0;\n\n\tfor (let i = 0; i < word.length; i++) {\n\t\tcode = word.charCodeAt(i);\n\n\t\tif (isUpper(code)) { upper++; }\n\t\tif (isLower(code)) { lower++; }\n\t\tif (isAlphanumeric(code)) { alpha++; }\n\t\tif (isNumber(code)) { numeric++; }\n\t}\n\n\tlet upperPercent = upper / word.length;\n\tlet lowerPercent = lower / word.length;\n\tlet alphaPercent = alpha / word.length;\n\tlet numericPercent = numeric / word.length;\n\n\treturn { upperPercent, lowerPercent, alphaPercent, numericPercent };\n}\n\nfunction isUpperCaseWord(analysis: ICamelCaseAnalysis): boolean {\n\tconst { upperPercent, lowerPercent } = analysis;\n\treturn lowerPercent === 0 && upperPercent > 0.6;\n}\n\nfunction isCamelCaseWord(analysis: ICamelCaseAnalysis): boolean {\n\tconst { upperPercent, lowerPercent, alphaPercent, numericPercent } = analysis;\n\treturn lowerPercent > 0.2 && upperPercent < 0.8 && alphaPercent > 0.6 && numericPercent < 0.2;\n}\n\n// Heuristic to avoid computing camel case matcher for words that don't\n// look like camel case patterns.\nfunction isCamelCasePattern(word: string): boolean {\n\tlet upper = 0, lower = 0, code = 0, whitespace = 0;\n\n\tfor (let i = 0; i < word.length; i++) {\n\t\tcode = word.charCodeAt(i);\n\n\t\tif (isUpper(code)) { upper++; }\n\t\tif (isLower(code)) { lower++; }\n\t\tif (isWhitespace(code)) { whitespace++; }\n\t}\n\n\tif ((upper === 0 || lower === 0) && whitespace === 0) {\n\t\treturn word.length <= 30;\n\t} else {\n\t\treturn upper <= 5;\n\t}\n}\n\nexport function matchesCamelCase(word: string, camelCaseWord: string): IMatch[] {\n\tif (!camelCaseWord || camelCaseWord.length === 0) {\n\t\treturn null;\n\t}\n\n\tif (!isCamelCasePattern(word)) {\n\t\treturn null;\n\t}\n\n\tif (camelCaseWord.length > 60) {\n\t\treturn null;\n\t}\n\n\tconst analysis = analyzeCamelCaseWord(camelCaseWord);\n\n\tif (!isCamelCaseWord(analysis)) {\n\t\tif (!isUpperCaseWord(analysis)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tcamelCaseWord = camelCaseWord.toLowerCase();\n\t}\n\n\tlet result: IMatch[] = null;\n\tlet i = 0;\n\n\twhile (i < camelCaseWord.length && (result = _matchesCamelCase(word.toLowerCase(), camelCaseWord, 0, i)) === null) {\n\t\ti = nextAnchor(camelCaseWord, i + 1);\n\t}\n\n\treturn result;\n}\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)\n\nexport function matchesWords(word: string, target: string, contiguous: boolean = false): IMatch[] {\n\tif (!target || target.length === 0) {\n\t\treturn null;\n\t}\n\n\tlet result: IMatch[] = null;\n\tlet i = 0;\n\n\twhile (i < target.length && (result = _matchesWords(word.toLowerCase(), target, 0, i, contiguous)) === null) {\n\t\ti = nextWord(target, i + 1);\n\t}\n\n\treturn result;\n}\n\nfunction _matchesWords(word: string, target: string, i: number, j: number, contiguous: boolean): IMatch[] {\n\tif (i === word.length) {\n\t\treturn [];\n\t} else if (j === target.length) {\n\t\treturn null;\n\t} else if (word[i] !== target[j].toLowerCase()) {\n\t\treturn null;\n\t} else {\n\t\tlet result: IMatch[] = null;\n\t\tlet nextWordIndex = j + 1;\n\t\tresult = _matchesWords(word, target, i + 1, j + 1, contiguous);\n\t\tif (!contiguous) {\n\t\t\twhile (!result && (nextWordIndex = nextWord(target, nextWordIndex)) < target.length) {\n\t\t\t\tresult = _matchesWords(word, target, i + 1, nextWordIndex, contiguous);\n\t\t\t\tnextWordIndex++;\n\t\t\t}\n\t\t}\n\t\treturn result === null ? null : join({ start: j, end: j + 1 }, result);\n\t}\n}\n\nfunction nextWord(word: string, start: number): number {\n\tfor (let i = start; i < word.length; i++) {\n\t\tlet c = word.charCodeAt(i);\n\t\tif (isWhitespace(c) || (i > 0 && isWhitespace(word.charCodeAt(i - 1)))) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn word.length;\n}\n\n// Fuzzy\n\nexport enum SubstringMatching {\n\tContiguous,\n\tSeparate\n}\n\nexport const fuzzyContiguousFilter = or(matchesPrefix, matchesCamelCase, matchesContiguousSubString);\nconst fuzzySeparateFilter = or(matchesPrefix, matchesCamelCase, matchesSubString);\nconst fuzzyRegExpCache = new BoundedMap(10000); // bounded to 10000 elements\n\nexport function matchesFuzzy(word: string, wordToMatchAgainst: string, enableSeparateSubstringMatching = false): IMatch[] {\n\tif (typeof word !== 'string' || typeof wordToMatchAgainst !== 'string') {\n\t\treturn null; // return early for invalid input\n\t}\n\n\t// Form RegExp for wildcard matches\n\tlet regexp = fuzzyRegExpCache.get(word);\n\tif (!regexp) {\n\t\tregexp = new RegExp(strings.convertSimple2RegExpPattern(word), 'i');\n\t\tfuzzyRegExpCache.set(word, regexp);\n\t}\n\n\t// RegExp Filter\n\tlet match: RegExpExecArray = regexp.exec(wordToMatchAgainst);\n\tif (match) {\n\t\treturn [{ start: match.index, end: match.index + match[0].length }];\n\t}\n\n\t// Default Filter\n\treturn enableSeparateSubstringMatching ? fuzzySeparateFilter(word, wordToMatchAgainst) : fuzzyContiguousFilter(word, wordToMatchAgainst);\n}\n\nexport function createMatches(position: number[]): IMatch[] {\n\tlet ret: IMatch[] = [];\n\tif (!position) {\n\t\treturn ret;\n\t}\n\tlet last: IMatch;\n\tfor (const pos of position) {\n\t\tif (last && last.end === pos) {\n\t\t\tlast.end += 1;\n\t\t} else {\n\t\t\tlast = { start: pos, end: pos + 1 };\n\t\t\tret.push(last);\n\t\t}\n\t}\n\treturn ret;\n}\n\nfunction initTable() {\n\tconst table: number[][] = [];\n\tconst row: number[] = [0];\n\tfor (let i = 1; i <= 100; i++) {\n\t\trow.push(-i);\n\t}\n\tfor (let i = 0; i < 100; i++) {\n\t\tlet thisRow = row.slice(0);\n\t\tthisRow[0] = -i;\n\t\ttable.push(thisRow);\n\t}\n\treturn table;\n}\n\nconst _table = initTable();\nconst _scores = initTable();\nconst _arrows = initTable();\nconst _debug = false;\n\nfunction printTable(table: number[][], pattern: string, patternLen: number, word: string, wordLen: number): string {\n\tfunction pad(s: string, n: number, pad = ' ') {\n\t\twhile (s.length < n) {\n\t\t\ts = pad + s;\n\t\t}\n\t\treturn s;\n\t}\n\tlet ret = ` | |${word.split('').map(c => pad(c, 3)).join('|')}\\n`;\n\n\tfor (let i = 0; i <= patternLen; i++) {\n\t\tif (i === 0) {\n\t\t\tret += ' |';\n\t\t} else {\n\t\t\tret += `${pattern[i - 1]}|`;\n\t\t}\n\t\tret += table[i].slice(0, wordLen + 1).map(n => pad(n.toString(), 3)).join('|') + '\\n';\n\t}\n\treturn ret;\n}\n\nconst _seps: { [ch: string]: boolean } = Object.create(null);\n_seps['_'] = true;\n_seps['-'] = true;\n_seps['.'] = true;\n_seps[' '] = true;\n_seps['/'] = true;\n_seps['\\\\'] = true;\n_seps['\\''] = true;\n_seps['\"'] = true;\n_seps[':'] = true;\n\nconst _ws: { [ch: string]: boolean } = Object.create(null);\n_ws[' '] = true;\n_ws['\\t'] = true;\n\nconst enum Arrow { Top = 0b1, Diag = 0b10, Left = 0b100 }\n\nexport function fuzzyScore(pattern: string, word: string, patternMaxWhitespaceIgnore?: number): [number, number[]] {\n\n\tconst patternLen = pattern.length > 100 ? 100 : pattern.length;\n\tconst wordLen = word.length > 100 ? 100 : word.length;\n\n\t// Check for leading whitespace in the pattern and\n\t// start matching just after that position. This is\n\t// like `pattern = pattern.rtrim()` but doesn't create\n\t// a new string\n\tlet patternStartPos = 0;\n\tif (patternMaxWhitespaceIgnore === undefined) {\n\t\tpatternMaxWhitespaceIgnore = patternLen;\n\t}\n\twhile (patternStartPos < patternMaxWhitespaceIgnore) {\n\t\tif (_ws[pattern[patternStartPos]]) {\n\t\t\tpatternStartPos += 1;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (patternStartPos === patternLen) {\n\t\treturn [-100, []];\n\t}\n\n\tif (patternLen > wordLen) {\n\t\treturn undefined;\n\t}\n\n\tconst lowPattern = pattern.toLowerCase();\n\tconst lowWord = word.toLowerCase();\n\n\tlet patternPos = patternStartPos;\n\tlet wordPos = 0;\n\n\t// Run a simple check if the characters of pattern occur\n\t// (in order) at all in word. If that isn't the case we\n\t// stop because no match will be possible\n\twhile (patternPos < patternLen && wordPos < wordLen) {\n\t\tif (lowPattern[patternPos] === lowWord[wordPos]) {\n\t\t\tpatternPos += 1;\n\t\t}\n\t\twordPos += 1;\n\t}\n\tif (patternPos !== patternLen) {\n\t\treturn undefined;\n\t}\n\n\t// There will be a mach, fill in tables\n\tfor (patternPos = patternStartPos + 1; patternPos <= patternLen; patternPos++) {\n\n\t\tlet lastLowWordChar = '';\n\n\t\tfor (wordPos = 1; wordPos <= wordLen; wordPos++) {\n\n\t\t\tlet score = -1;\n\t\t\tlet lowWordChar = lowWord[wordPos - 1];\n\t\t\tif (lowPattern[patternPos - 1] === lowWordChar) {\n\t\t\t\tif (wordPos === (patternPos - patternStartPos)) {\n\t\t\t\t\t// common prefix: `foobar <-> foobaz`\n\t\t\t\t\tif (pattern[patternPos - 1] === word[wordPos - 1]) {\n\t\t\t\t\t\tscore = 7;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tscore = 5;\n\t\t\t\t\t}\n\t\t\t\t} else if (lowWordChar !== word[wordPos - 1]) {\n\t\t\t\t\t// hitting upper-case: `foo <-> forOthers`\n\t\t\t\t\tif (pattern[patternPos - 1] === word[wordPos - 1]) {\n\t\t\t\t\t\tscore = 7;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tscore = 5;\n\t\t\t\t\t}\n\t\t\t\t} else if (_seps[lastLowWordChar]) {\n\t\t\t\t\t// post separator: `foo <-> bar_foo`\n\t\t\t\t\tscore = 5;\n\n\t\t\t\t} else {\n\t\t\t\t\tscore = 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_scores[patternPos][wordPos] = score;\n\n\t\t\tlet diag = _table[patternPos - 1][wordPos - 1] + (score > 1 ? 1 : score);\n\t\t\tlet top = _table[patternPos - 1][wordPos] + -1;\n\t\t\tlet left = _table[patternPos][wordPos - 1] + -1;\n\n\t\t\tif (left >= top) {\n\t\t\t\t// left or diag\n\t\t\t\tif (left > diag) {\n\t\t\t\t\t_table[patternPos][wordPos] = left;\n\t\t\t\t\t_arrows[patternPos][wordPos] = Arrow.Left;\n\t\t\t\t} else if (left === diag) {\n\t\t\t\t\t_table[patternPos][wordPos] = left;\n\t\t\t\t\t_arrows[patternPos][wordPos] = Arrow.Left | Arrow.Diag;\n\t\t\t\t} else {\n\t\t\t\t\t_table[patternPos][wordPos] = diag;\n\t\t\t\t\t_arrows[patternPos][wordPos] = Arrow.Diag;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// top or diag\n\t\t\t\tif (top > diag) {\n\t\t\t\t\t_table[patternPos][wordPos] = top;\n\t\t\t\t\t_arrows[patternPos][wordPos] = Arrow.Top;\n\t\t\t\t} else if (top === diag) {\n\t\t\t\t\t_table[patternPos][wordPos] = top;\n\t\t\t\t\t_arrows[patternPos][wordPos] = Arrow.Top | Arrow.Diag;\n\t\t\t\t} else {\n\t\t\t\t\t_table[patternPos][wordPos] = diag;\n\t\t\t\t\t_arrows[patternPos][wordPos] = Arrow.Diag;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlastLowWordChar = lowWordChar;\n\t\t}\n\t}\n\n\tif (_debug) {\n\t\tconsole.log(printTable(_table, pattern, patternLen, word, wordLen));\n\t\tconsole.log(printTable(_arrows, pattern, patternLen, word, wordLen));\n\t\tconsole.log(printTable(_scores, pattern, patternLen, word, wordLen));\n\t}\n\n\t// _bucket is an array of [PrefixArray] we use to keep\n\t// track of scores and matches. After calling `_findAllMatches`\n\t// the best match (if available) is the first item in the array\n\t_bucket.length = 0;\n\t_topScore = -100;\n\t_patternStartPos = patternStartPos;\n\t_findAllMatches(patternLen, wordLen, 0, new LazyArray(), false);\n\n\tif (_bucket.length === 0) {\n\t\treturn undefined;\n\t}\n\n\treturn [_topScore, _bucket[0].toArray()];\n}\n\nlet _bucket: LazyArray[] = [];\nlet _topScore: number = 0;\nlet _patternStartPos: number = 0;\n\nfunction _findAllMatches(patternPos: number, wordPos: number, total: number, matches: LazyArray, lastMatched: boolean): void {\n\n\tif (_bucket.length >= 10 || total < -25) {\n\t\t// stop when having already 10 results, or\n\t\t// when a potential alignment as already 5 gaps\n\t\treturn;\n\t}\n\n\tlet simpleMatchCount = 0;\n\n\twhile (patternPos > _patternStartPos && wordPos > 0) {\n\n\t\tlet score = _scores[patternPos][wordPos];\n\t\tlet arrow = _arrows[patternPos][wordPos];\n\n\t\tif (arrow === Arrow.Left) {\n\t\t\t// left\n\t\t\twordPos -= 1;\n\t\t\tif (lastMatched) {\n\t\t\t\ttotal -= 5; // new gap penalty\n\t\t\t} else if (!matches.isEmpty()) {\n\t\t\t\ttotal -= 1; // gap penalty after first match\n\t\t\t}\n\t\t\tlastMatched = false;\n\t\t\tsimpleMatchCount = 0;\n\n\t\t} else if (arrow & Arrow.Diag) {\n\n\t\t\tif (arrow & Arrow.Left) {\n\t\t\t\t// left\n\t\t\t\t_findAllMatches(\n\t\t\t\t\tpatternPos,\n\t\t\t\t\twordPos - 1,\n\t\t\t\t\t!matches.isEmpty() ? total - 1 : total, // gap penalty after first match\n\t\t\t\t\tmatches.slice(),\n\t\t\t\t\tlastMatched\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// diag\n\t\t\ttotal += score;\n\t\t\tpatternPos -= 1;\n\t\t\twordPos -= 1;\n\t\t\tmatches.unshift(wordPos);\n\t\t\tlastMatched = true;\n\n\t\t\t// count simple matches and boost a row of\n\t\t\t// simple matches when they yield in a\n\t\t\t// strong match.\n\t\t\tif (score === 1) {\n\t\t\t\tsimpleMatchCount += 1;\n\n\t\t\t\tif (patternPos === _patternStartPos) {\n\t\t\t\t\t// when the first match is a weak\n\t\t\t\t\t// match we discard it\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\t// boost\n\t\t\t\ttotal += 1 + (simpleMatchCount * (score - 1));\n\t\t\t\tsimpleMatchCount = 0;\n\t\t\t}\n\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\ttotal -= wordPos >= 3 ? 9 : wordPos * 3; // late start penalty\n\n\t// dynamically keep track of the current top score\n\t// and insert the current best score at head, the rest at tail\n\tif (total > _topScore) {\n\t\t_topScore = total;\n\t\t_bucket.unshift(matches);\n\t} else {\n\t\t_bucket.push(matches);\n\t}\n}\n\nclass LazyArray {\n\n\tprivate _parent: LazyArray;\n\tprivate _parentLen: number;\n\tprivate _data: number[];\n\n\tisEmpty(): boolean {\n\t\treturn !this._data && (!this._parent || this._parent.isEmpty());\n\t}\n\n\tunshift(n: number) {\n\t\tif (!this._data) {\n\t\t\tthis._data = [n];\n\t\t} else {\n\t\t\tthis._data.unshift(n);\n\t\t}\n\t}\n\n\tslice(): LazyArray {\n\t\tconst ret = new LazyArray();\n\t\tret._parent = this;\n\t\tret._parentLen = this._data ? this._data.length : 0;\n\t\treturn ret;\n\t}\n\n\ttoArray(): number[] {\n\t\tif (!this._data) {\n\t\t\treturn this._parent.toArray();\n\t\t}\n\t\tconst bucket: number[][] = [];\n\t\tlet element = this;\n\t\twhile (element) {\n\t\t\tif (element._parent && element._parent._data) {\n\t\t\t\tbucket.push(element._parent._data.slice(element._parent._data.length - element._parentLen));\n\t\t\t}\n\t\t\telement = element._parent;\n\t\t}\n\t\treturn Array.prototype.concat.apply(this._data, bucket);\n\t}\n}\n\nexport function nextTypoPermutation(pattern: string, patternPos: number) {\n\n\tif (patternPos + 1 >= pattern.length) {\n\t\treturn undefined;\n\t}\n\n\treturn pattern.slice(0, patternPos)\n\t\t+ pattern[patternPos + 1]\n\t\t+ pattern[patternPos]\n\t\t+ pattern.slice(patternPos + 2);\n}\n\nexport function fuzzyScoreGraceful(pattern: string, word: string): [number, number[]] {\n\tlet ret = fuzzyScore(pattern, word);\n\tfor (let patternPos = 1; patternPos < pattern.length - 1 && !ret; patternPos++) {\n\t\tlet pattern2 = nextTypoPermutation(pattern, patternPos);\n\t\tret = fuzzyScore(pattern2, word);\n\t}\n\treturn ret;\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'use strict';\n\nimport { isLinux, isWindows } from 'vs/base/common/platform';\nimport { fill } from 'vs/base/common/arrays';\nimport { rtrim, beginsWithIgnoreCase, equalsIgnoreCase } from 'vs/base/common/strings';\nimport { CharCode } from 'vs/base/common/charCode';\n\n/**\n * The forward slash path separator.\n */\nexport const sep = '/';\n\n/**\n * The native path separator depending on the OS.\n */\nexport const nativeSep = isWindows ? '\\\\' : '/';\n\nexport function relative(from: string, to: string): string {\n\t// ignore trailing slashes\n\tconst originalNormalizedFrom = rtrim(normalize(from), sep);\n\tconst originalNormalizedTo = rtrim(normalize(to), sep);\n\n\t// we're assuming here that any non=linux OS is case insensitive\n\t// so we must compare each part in its lowercase form\n\tconst normalizedFrom = isLinux ? originalNormalizedFrom : originalNormalizedFrom.toLowerCase();\n\tconst normalizedTo = isLinux ? originalNormalizedTo : originalNormalizedTo.toLowerCase();\n\n\tconst fromParts = normalizedFrom.split(sep);\n\tconst toParts = normalizedTo.split(sep);\n\n\tlet i = 0, max = Math.min(fromParts.length, toParts.length);\n\n\tfor (; i < max; i++) {\n\t\tif (fromParts[i] !== toParts[i]) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tconst result = [\n\t\t...fill(fromParts.length - i, () => '..'),\n\t\t...originalNormalizedTo.split(sep).slice(i)\n\t];\n\n\treturn result.join(sep);\n}\n\n/**\n * @returns the directory name of a path.\n */\nexport function dirname(path: string): string {\n\tconst idx = ~path.lastIndexOf('/') || ~path.lastIndexOf('\\\\');\n\tif (idx === 0) {\n\t\treturn '.';\n\t} else if (~idx === 0) {\n\t\treturn path[0];\n\t} else {\n\t\tlet res = path.substring(0, ~idx);\n\t\tif (isWindows && res[res.length - 1] === ':') {\n\t\t\tres += nativeSep; // make sure drive letters end with backslash\n\t\t}\n\t\treturn res;\n\t}\n}\n\n/**\n * @returns the base name of a path.\n */\nexport function basename(path: string): string {\n\tconst idx = ~path.lastIndexOf('/') || ~path.lastIndexOf('\\\\');\n\tif (idx === 0) {\n\t\treturn path;\n\t} else if (~idx === path.length - 1) {\n\t\treturn basename(path.substring(0, path.length - 1));\n\t} else {\n\t\treturn path.substr(~idx + 1);\n\t}\n}\n\n/**\n * @returns {{.far}} from boo.far or the empty string.\n */\nexport function extname(path: string): string {\n\tpath = basename(path);\n\tconst idx = ~path.lastIndexOf('.');\n\treturn idx ? path.substring(~idx) : '';\n}\n\nconst _posixBadPath = /(\\/\\.\\.?\\/)|(\\/\\.\\.?)$|^(\\.\\.?\\/)|(\\/\\/+)|(\\\\)/;\nconst _winBadPath = /(\\\\\\.\\.?\\\\)|(\\\\\\.\\.?)$|^(\\.\\.?\\\\)|(\\\\\\\\+)|(\\/)/;\n\nfunction _isNormal(path: string, win: boolean): boolean {\n\treturn win\n\t\t? !_winBadPath.test(path)\n\t\t: !_posixBadPath.test(path);\n}\n\nexport function normalize(path: string, toOSPath?: boolean): string {\n\n\tif (path === null || path === void 0) {\n\t\treturn path;\n\t}\n\n\tconst len = path.length;\n\tif (len === 0) {\n\t\treturn '.';\n\t}\n\n\tconst wantsBackslash = isWindows && toOSPath;\n\tif (_isNormal(path, wantsBackslash)) {\n\t\treturn path;\n\t}\n\n\tconst sep = wantsBackslash ? '\\\\' : '/';\n\tconst root = getRoot(path, sep);\n\n\t// skip the root-portion of the path\n\tlet start = root.length;\n\tlet skip = false;\n\tlet res = '';\n\n\tfor (let end = root.length; end <= len; end++) {\n\n\t\t// either at the end or at a path-separator character\n\t\tif (end === len || path.charCodeAt(end) === CharCode.Slash || path.charCodeAt(end) === CharCode.Backslash) {\n\n\t\t\tif (streql(path, start, end, '..')) {\n\t\t\t\t// skip current and remove parent (if there is already something)\n\t\t\t\tlet prev_start = res.lastIndexOf(sep);\n\t\t\t\tlet prev_part = res.slice(prev_start + 1);\n\t\t\t\tif ((root || prev_part.length > 0) && prev_part !== '..') {\n\t\t\t\t\tres = prev_start === -1 ? '' : res.slice(0, prev_start);\n\t\t\t\t\tskip = true;\n\t\t\t\t}\n\t\t\t} else if (streql(path, start, end, '.') && (root || res || end < len - 1)) {\n\t\t\t\t// skip current (if there is already something or if there is more to come)\n\t\t\t\tskip = true;\n\t\t\t}\n\n\t\t\tif (!skip) {\n\t\t\t\tlet part = path.slice(start, end);\n\t\t\t\tif (res !== '' && res[res.length - 1] !== sep) {\n\t\t\t\t\tres += sep;\n\t\t\t\t}\n\t\t\t\tres += part;\n\t\t\t}\n\t\t\tstart = end + 1;\n\t\t\tskip = false;\n\t\t}\n\t}\n\n\treturn root + res;\n}\n\nfunction streql(value: string, start: number, end: number, other: string): boolean {\n\treturn start + other.length === end && value.indexOf(other, start) === start;\n}\n\n/**\n * Computes the _root_ this path, like `getRoot('c:\\files') === c:\\`,\n * `getRoot('files:///files/path') === files:///`,\n * or `getRoot('\\\\server\\shares\\path') === \\\\server\\shares\\`\n */\nexport function getRoot(path: string, sep: string = '/'): string {\n\n\tif (!path) {\n\t\treturn '';\n\t}\n\n\tlet len = path.length;\n\tlet code = path.charCodeAt(0);\n\tif (code === CharCode.Slash || code === CharCode.Backslash) {\n\n\t\tcode = path.charCodeAt(1);\n\t\tif (code === CharCode.Slash || code === CharCode.Backslash) {\n\t\t\t// UNC candidate \\\\localhost\\shares\\ddd\n\t\t\t// ^^^^^^^^^^^^^^^^^^^\n\t\t\tcode = path.charCodeAt(2);\n\t\t\tif (code !== CharCode.Slash && code !== CharCode.Backslash) {\n\t\t\t\tlet pos = 3;\n\t\t\t\tlet start = pos;\n\t\t\t\tfor (; pos < len; pos++) {\n\t\t\t\t\tcode = path.charCodeAt(pos);\n\t\t\t\t\tif (code === CharCode.Slash || code === CharCode.Backslash) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcode = path.charCodeAt(pos + 1);\n\t\t\t\tif (start !== pos && code !== CharCode.Slash && code !== CharCode.Backslash) {\n\t\t\t\t\tpos += 1;\n\t\t\t\t\tfor (; pos < len; pos++) {\n\t\t\t\t\t\tcode = path.charCodeAt(pos);\n\t\t\t\t\t\tif (code === CharCode.Slash || code === CharCode.Backslash) {\n\t\t\t\t\t\t\treturn path.slice(0, pos + 1) // consume this separator\n\t\t\t\t\t\t\t\t.replace(/[\\\\/]/g, sep);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// /user/far\n\t\t// ^\n\t\treturn sep;\n\n\t} else if ((code >= CharCode.A && code <= CharCode.Z) || (code >= CharCode.a && code <= CharCode.z)) {\n\t\t// check for windows drive letter c:\\ or c:\n\n\t\tif (path.charCodeAt(1) === CharCode.Colon) {\n\t\t\tcode = path.charCodeAt(2);\n\t\t\tif (code === CharCode.Slash || code === CharCode.Backslash) {\n\t\t\t\t// C:\\fff\n\t\t\t\t// ^^^\n\t\t\t\treturn path.slice(0, 2) + sep;\n\t\t\t} else {\n\t\t\t\t// C:\n\t\t\t\t// ^^\n\t\t\t\treturn path.slice(0, 2);\n\t\t\t}\n\t\t}\n\t}\n\n\t// check for URI\n\t// scheme://authority/path\n\t// ^^^^^^^^^^^^^^^^^^^\n\tlet pos = path.indexOf('://');\n\tif (pos !== -1) {\n\t\tpos += 3; // 3 -> \"://\".length\n\t\tfor (; pos < len; pos++) {\n\t\t\tcode = path.charCodeAt(pos);\n\t\t\tif (code === CharCode.Slash || code === CharCode.Backslash) {\n\t\t\t\treturn path.slice(0, pos + 1); // consume this separator\n\t\t\t}\n\t\t}\n\t}\n\n\treturn '';\n}\n\nexport const join: (...parts: string[]) => string = function () {\n\t// Not using a function with var-args because of how TS compiles\n\t// them to JS - it would result in 2*n runtime cost instead\n\t// of 1*n, where n is parts.length.\n\n\tlet value = '';\n\tfor (let i = 0; i < arguments.length; i++) {\n\t\tlet part = arguments[i];\n\t\tif (i > 0) {\n\t\t\t// add the separater between two parts unless\n\t\t\t// there already is one\n\t\t\tlet last = value.charCodeAt(value.length - 1);\n\t\t\tif (last !== CharCode.Slash && last !== CharCode.Backslash) {\n\t\t\t\tlet next = part.charCodeAt(0);\n\t\t\t\tif (next !== CharCode.Slash && next !== CharCode.Backslash) {\n\n\t\t\t\t\tvalue += sep;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tvalue += part;\n\t}\n\n\treturn normalize(value);\n};\n\n\n/**\n * Check if the path follows this pattern: `\\\\hostname\\sharename`.\n *\n * @see https://msdn.microsoft.com/en-us/library/gg465305.aspx\n * @return A boolean indication if the path is a UNC path, on none-windows\n * always false.\n */\nexport function isUNC(path: string): boolean {\n\tif (!isWindows) {\n\t\t// UNC is a windows concept\n\t\treturn false;\n\t}\n\n\tif (!path || path.length < 5) {\n\t\t// at least \\\\a\\b\n\t\treturn false;\n\t}\n\n\tlet code = path.charCodeAt(0);\n\tif (code !== CharCode.Backslash) {\n\t\treturn false;\n\t}\n\tcode = path.charCodeAt(1);\n\tif (code !== CharCode.Backslash) {\n\t\treturn false;\n\t}\n\tlet pos = 2;\n\tlet start = pos;\n\tfor (; pos < path.length; pos++) {\n\t\tcode = path.charCodeAt(pos);\n\t\tif (code === CharCode.Backslash) {\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (start === pos) {\n\t\treturn false;\n\t}\n\tcode = path.charCodeAt(pos + 1);\n\tif (isNaN(code) || code === CharCode.Backslash) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n// Reference: https://en.wikipedia.org/wiki/Filename\nconst INVALID_FILE_CHARS = isWindows ? /[\\\\/:\\*\\?\"<>\\|]/g : /[\\\\/]/g;\nconst WINDOWS_FORBIDDEN_NAMES = /^(con|prn|aux|clock\\$|nul|lpt[0-9]|com[0-9])$/i;\nexport function isValidBasename(name: string): boolean {\n\tif (!name || name.length === 0 || /^\\s+$/.test(name)) {\n\t\treturn false; // require a name that is not just whitespace\n\t}\n\n\tINVALID_FILE_CHARS.lastIndex = 0; // the holy grail of software development\n\tif (INVALID_FILE_CHARS.test(name)) {\n\t\treturn false; // check for certain invalid file characters\n\t}\n\n\tif (isWindows && WINDOWS_FORBIDDEN_NAMES.test(name)) {\n\t\treturn false; // check for certain invalid file names\n\t}\n\n\tif (name === '.' || name === '..') {\n\t\treturn false; // check for reserved values\n\t}\n\n\tif (isWindows && name[name.length - 1] === '.') {\n\t\treturn false; // Windows: file cannot end with a \".\"\n\t}\n\n\tif (isWindows && name.length !== name.trim().length) {\n\t\treturn false; // Windows: file cannot end with a whitespace\n\t}\n\n\treturn true;\n}\n\nexport function isEqual(pathA: string, pathB: string, ignoreCase?: boolean): boolean {\n\tconst identityEquals = (pathA === pathB);\n\tif (!ignoreCase || identityEquals) {\n\t\treturn identityEquals;\n\t}\n\n\tif (!pathA || !pathB) {\n\t\treturn false;\n\t}\n\n\treturn equalsIgnoreCase(pathA, pathB);\n}\n\nexport function isEqualOrParent(path: string, candidate: string, ignoreCase?: boolean): boolean {\n\tif (path === candidate) {\n\t\treturn true;\n\t}\n\n\tif (!path || !candidate) {\n\t\treturn false;\n\t}\n\n\tif (candidate.length > path.length) {\n\t\treturn false;\n\t}\n\n\tif (ignoreCase) {\n\t\tconst beginsWith = beginsWithIgnoreCase(path, candidate);\n\t\tif (!beginsWith) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (candidate.length === path.length) {\n\t\t\treturn true; // same path, different casing\n\t\t}\n\n\t\tlet sepOffset = candidate.length;\n\t\tif (candidate.charAt(candidate.length - 1) === nativeSep) {\n\t\t\tsepOffset--; // adjust the expected sep offset in case our candidate already ends in separator character\n\t\t}\n\n\t\treturn path.charAt(sepOffset) === nativeSep;\n\t}\n\n\tif (candidate.charAt(candidate.length - 1) !== nativeSep) {\n\t\tcandidate += nativeSep;\n\t}\n\n\treturn path.indexOf(candidate) === 0;\n}\n\n/**\n * Adapted from Node's path.isAbsolute functions\n */\nexport function isAbsolute(path: string): boolean {\n\treturn isWindows ?\n\t\tisAbsolute_win32(path) :\n\t\tisAbsolute_posix(path);\n}\n\nexport function isAbsolute_win32(path: string): boolean {\n\tif (!path) {\n\t\treturn false;\n\t}\n\n\tconst char0 = path.charCodeAt(0);\n\tif (char0 === CharCode.Slash || char0 === CharCode.Backslash) {\n\t\treturn true;\n\t} else if ((char0 >= CharCode.A && char0 <= CharCode.Z) || (char0 >= CharCode.a && char0 <= CharCode.z)) {\n\t\tif (path.length > 2 && path.charCodeAt(1) === CharCode.Colon) {\n\t\t\tconst char2 = path.charCodeAt(2);\n\t\t\tif (char2 === CharCode.Slash || char2 === CharCode.Backslash) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false;\n}\n\nexport function isAbsolute_posix(path: string): boolean {\n\treturn path && path.charCodeAt(0) === CharCode.Slash;\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'use strict';\n\nimport scorer = require('vs/base/common/scorer');\nimport strings = require('vs/base/common/strings');\nimport * as paths from 'vs/base/common/paths';\n\nlet intlFileNameCollator: Intl.Collator;\nlet intlFileNameCollatorIsNumeric: boolean;\n\nexport function setFileNameComparer(collator: Intl.Collator): void {\n\tintlFileNameCollator = collator;\n\tintlFileNameCollatorIsNumeric = collator.resolvedOptions().numeric;\n}\n\nexport function compareFileNames(one: string, other: string): number {\n\tif (intlFileNameCollator) {\n\t\tconst a = one || '';\n\t\tconst b = other || '';\n\t\tconst result = intlFileNameCollator.compare(a, b);\n\n\t\t// Using the numeric option in the collator will\n\t\t// make compare(`foo1`, `foo01`) === 0. We must disambiguate.\n\t\tif (intlFileNameCollatorIsNumeric && result === 0 && a !== b) {\n\t\t\treturn a < b ? -1 : 1;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\treturn noIntlCompareFileNames(one, other);\n}\n\nconst FileNameMatch = /^([^.]*)(\\.(.*))?$/;\n\nexport function noIntlCompareFileNames(one: string, other: string): number {\n\tlet oneMatch = FileNameMatch.exec(one.toLowerCase());\n\tlet otherMatch = FileNameMatch.exec(other.toLowerCase());\n\n\tlet oneName = oneMatch[1] || '';\n\tlet oneExtension = oneMatch[3] || '';\n\n\tlet otherName = otherMatch[1] || '';\n\tlet otherExtension = otherMatch[3] || '';\n\n\tif (oneName !== otherName) {\n\t\treturn oneName < otherName ? -1 : 1;\n\t}\n\n\tif (oneExtension === otherExtension) {\n\t\treturn 0;\n\t}\n\n\treturn oneExtension < otherExtension ? -1 : 1;\n}\n\nexport function comparePaths(one: string, other: string): number {\n\tconst oneParts = one.split(paths.nativeSep);\n\tconst otherParts = other.split(paths.nativeSep);\n\n\tconst lastOne = oneParts.length - 1;\n\tconst lastOther = otherParts.length - 1;\n\tlet endOne: boolean, endOther: boolean, onePart: string, otherPart: string;\n\n\tfor (let i = 0; ; i++) {\n\t\tendOne = lastOne === i;\n\t\tendOther = lastOther === i;\n\n\t\tif (endOne && endOther) {\n\t\t\treturn compareFileNames(oneParts[i], otherParts[i]);\n\t\t} else if (endOne) {\n\t\t\treturn -1;\n\t\t} else if (endOther) {\n\t\t\treturn 1;\n\t\t} else if ((onePart = oneParts[i].toLowerCase()) !== (otherPart = otherParts[i].toLowerCase())) {\n\t\t\treturn onePart < otherPart ? -1 : 1;\n\t\t}\n\t}\n}\n\nexport function compareAnything(one: string, other: string, lookFor: string): number {\n\tlet elementAName = one.toLowerCase();\n\tlet elementBName = other.toLowerCase();\n\n\t// Sort prefix matches over non prefix matches\n\tconst prefixCompare = compareByPrefix(one, other, lookFor);\n\tif (prefixCompare) {\n\t\treturn prefixCompare;\n\t}\n\n\t// Sort suffix matches over non suffix matches\n\tlet elementASuffixMatch = strings.endsWith(elementAName, lookFor);\n\tlet elementBSuffixMatch = strings.endsWith(elementBName, lookFor);\n\tif (elementASuffixMatch !== elementBSuffixMatch) {\n\t\treturn elementASuffixMatch ? -1 : 1;\n\t}\n\n\t// Understand file names\n\tlet r = compareFileNames(elementAName, elementBName);\n\tif (r !== 0) {\n\t\treturn r;\n\t}\n\n\t// Compare by name\n\treturn elementAName.localeCompare(elementBName);\n}\n\nexport function compareByPrefix(one: string, other: string, lookFor: string): number {\n\tlet elementAName = one.toLowerCase();\n\tlet elementBName = other.toLowerCase();\n\n\t// Sort prefix matches over non prefix matches\n\tlet elementAPrefixMatch = strings.startsWith(elementAName, lookFor);\n\tlet elementBPrefixMatch = strings.startsWith(elementBName, lookFor);\n\tif (elementAPrefixMatch !== elementBPrefixMatch) {\n\t\treturn elementAPrefixMatch ? -1 : 1;\n\t}\n\n\t// Same prefix: Sort shorter matches to the top to have those on top that match more precisely\n\telse if (elementAPrefixMatch && elementBPrefixMatch) {\n\t\tif (elementAName.length < elementBName.length) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif (elementAName.length > elementBName.length) {\n\t\t\treturn 1;\n\t\t}\n\t}\n\n\treturn 0;\n}\n\nexport interface IScorableResourceAccessor {\n\tgetLabel(t: T): string;\n\tgetResourcePath(t: T): string;\n}\n\nexport function compareByScore(elementA: T, elementB: T, accessor: IScorableResourceAccessor, lookFor: string, lookForNormalizedLower: string, scorerCache?: { [key: string]: number }): number {\n\tconst labelA = accessor.getLabel(elementA);\n\tconst labelB = accessor.getLabel(elementB);\n\n\t// treat prefix matches highest in any case\n\tconst prefixCompare = compareByPrefix(labelA, labelB, lookFor);\n\tif (prefixCompare) {\n\t\treturn prefixCompare;\n\t}\n\n\t// Give higher importance to label score\n\tconst labelAScore = scorer.score(labelA, lookFor, scorerCache);\n\tconst labelBScore = scorer.score(labelB, lookFor, scorerCache);\n\n\tif (labelAScore !== labelBScore) {\n\t\treturn labelAScore > labelBScore ? -1 : 1;\n\t}\n\n\t// Score on full resource path comes next (if available)\n\tlet resourcePathA = accessor.getResourcePath(elementA);\n\tlet resourcePathB = accessor.getResourcePath(elementB);\n\tif (resourcePathA && resourcePathB) {\n\t\tconst resourceAScore = scorer.score(resourcePathA, lookFor, scorerCache);\n\t\tconst resourceBScore = scorer.score(resourcePathB, lookFor, scorerCache);\n\n\t\tif (resourceAScore !== resourceBScore) {\n\t\t\treturn resourceAScore > resourceBScore ? -1 : 1;\n\t\t}\n\t}\n\n\t// At this place, the scores are identical so we check for string lengths and favor shorter ones\n\tif (labelA.length !== labelB.length) {\n\t\treturn labelA.length < labelB.length ? -1 : 1;\n\t}\n\n\tif (resourcePathA && resourcePathB && resourcePathA.length !== resourcePathB.length) {\n\t\treturn resourcePathA.length < resourcePathB.length ? -1 : 1;\n\t}\n\n\t// Finally compare by label or resource path\n\tif (labelA === labelB && resourcePathA && resourcePathB) {\n\t\treturn compareAnything(resourcePathA, resourcePathB, lookForNormalizedLower);\n\t}\n\n\treturn compareAnything(labelA, labelB, lookForNormalizedLower);\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'use strict';\n\nimport URI from 'vs/base/common/uri';\nimport platform = require('vs/base/common/platform');\nimport { nativeSep, normalize, isEqualOrParent, isEqual, basename, join } from 'vs/base/common/paths';\nimport { endsWith, ltrim } from 'vs/base/common/strings';\n\nexport interface ILabelProvider {\n\n\t/**\n\t * Given an element returns a label for it to display in the UI.\n\t */\n\tgetLabel(element: any): string;\n}\n\nexport interface IRootProvider {\n\tgetRoot(resource: URI): URI;\n\tgetWorkspace2(): {\n\t\troots: URI[];\n\t};\n}\n\nexport interface IUserHomeProvider {\n\tuserHome: string;\n}\n\nexport function getPathLabel(resource: URI | string, rootProvider?: IRootProvider, userHomeProvider?: IUserHomeProvider): string {\n\tif (!resource) {\n\t\treturn null;\n\t}\n\n\tif (typeof resource === 'string') {\n\t\tresource = URI.file(resource);\n\t}\n\n\t// return early if we can resolve a relative path label from the root\n\tconst baseResource = rootProvider ? rootProvider.getRoot(resource) : null;\n\tif (baseResource) {\n\t\tconst hasMultipleRoots = rootProvider.getWorkspace2().roots.length > 1;\n\n\t\tlet pathLabel: string;\n\t\tif (isEqual(baseResource.fsPath, resource.fsPath, !platform.isLinux /* ignorecase */)) {\n\t\t\tpathLabel = ''; // no label if pathes are identical\n\t\t} else {\n\t\t\tpathLabel = normalize(ltrim(resource.fsPath.substr(baseResource.fsPath.length), nativeSep), true);\n\t\t}\n\n\t\tif (hasMultipleRoots) {\n\t\t\tconst rootName = basename(baseResource.fsPath);\n\t\t\tpathLabel = pathLabel ? join(rootName, pathLabel) : rootName; // always show root basename if there are multiple\n\t\t}\n\n\t\treturn pathLabel;\n\t}\n\n\t// convert c:\\something => C:\\something\n\tif (platform.isWindows && resource.fsPath && resource.fsPath[1] === ':') {\n\t\treturn normalize(resource.fsPath.charAt(0).toUpperCase() + resource.fsPath.slice(1), true);\n\t}\n\n\t// normalize and tildify (macOS, Linux only)\n\tlet res = normalize(resource.fsPath, true);\n\tif (!platform.isWindows && userHomeProvider) {\n\t\tres = tildify(res, userHomeProvider.userHome);\n\t}\n\n\treturn res;\n}\n\nexport function tildify(path: string, userHome: string): string {\n\tif (path && (platform.isMacintosh || platform.isLinux) && isEqualOrParent(path, userHome, !platform.isLinux /* ignorecase */)) {\n\t\tpath = `~${path.substr(userHome.length)}`;\n\t}\n\n\treturn path;\n}\n\n/**\n * Shortens the paths but keeps them easy to distinguish.\n * Replaces not important parts with ellipsis.\n * Every shorten path matches only one original path and vice versa.\n *\n * Algorithm for shortening paths is as follows:\n * 1. For every path in list, find unique substring of that path.\n * 2. Unique substring along with ellipsis is shortened path of that path.\n * 3. To find unique substring of path, consider every segment of length from 1 to path.length of path from end of string\n * and if present segment is not substring to any other paths then present segment is unique path,\n * else check if it is not present as suffix of any other path and present segment is suffix of path itself,\n * if it is true take present segment as unique path.\n * 4. Apply ellipsis to unique segment according to whether segment is present at start/in-between/end of path.\n *\n * Example 1\n * 1. consider 2 paths i.e. ['a\\\\b\\\\c\\\\d', 'a\\\\f\\\\b\\\\c\\\\d']\n * 2. find unique path of first path,\n * \ta. 'd' is present in path2 and is suffix of path2, hence not unique of present path.\n * \tb. 'c' is present in path2 and 'c' is not suffix of present path, similarly for 'b' and 'a' also.\n * \tc. 'd\\\\c' is suffix of path2.\n * d. 'b\\\\c' is not suffix of present path.\n * e. 'a\\\\b' is not present in path2, hence unique path is 'a\\\\b...'.\n * 3. for path2, 'f' is not present in path1 hence unique is '...\\\\f\\\\...'.\n *\n * Example 2\n * 1. consider 2 paths i.e. ['a\\\\b', 'a\\\\b\\\\c'].\n * \ta. Even if 'b' is present in path2, as 'b' is suffix of path1 and is not suffix of path2, unique path will be '...\\\\b'.\n * 2. for path2, 'c' is not present in path1 hence unique path is '..\\\\c'.\n */\nconst ellipsis = '\\u2026';\nconst unc = '\\\\\\\\';\nexport function shorten(paths: string[]): string[] {\n\tconst shortenedPaths: string[] = new Array(paths.length);\n\n\t// for every path\n\tlet match = false;\n\tfor (let pathIndex = 0; pathIndex < paths.length; pathIndex++) {\n\t\tlet path = paths[pathIndex];\n\n\t\tif (path === '') {\n\t\t\tshortenedPaths[pathIndex] = `.${nativeSep}`;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!path) {\n\t\t\tshortenedPaths[pathIndex] = path;\n\t\t\tcontinue;\n\t\t}\n\n\t\tmatch = true;\n\n\t\t// trim for now and concatenate unc path (e.g. \\\\network) or root path (/etc) later\n\t\tlet prefix = '';\n\t\tif (path.indexOf(unc) === 0) {\n\t\t\tprefix = path.substr(0, path.indexOf(unc) + unc.length);\n\t\t\tpath = path.substr(path.indexOf(unc) + unc.length);\n\t\t} else if (path.indexOf(nativeSep) === 0) {\n\t\t\tprefix = path.substr(0, path.indexOf(nativeSep) + nativeSep.length);\n\t\t\tpath = path.substr(path.indexOf(nativeSep) + nativeSep.length);\n\t\t}\n\n\t\t// pick the first shortest subpath found\n\t\tconst segments: string[] = path.split(nativeSep);\n\t\tfor (let subpathLength = 1; match && subpathLength <= segments.length; subpathLength++) {\n\t\t\tfor (let start = segments.length - subpathLength; match && start >= 0; start--) {\n\t\t\t\tmatch = false;\n\t\t\t\tlet subpath = segments.slice(start, start + subpathLength).join(nativeSep);\n\n\t\t\t\t// that is unique to any other path\n\t\t\t\tfor (let otherPathIndex = 0; !match && otherPathIndex < paths.length; otherPathIndex++) {\n\n\t\t\t\t\t// suffix subpath treated specially as we consider no match 'x' and 'x/...'\n\t\t\t\t\tif (otherPathIndex !== pathIndex && paths[otherPathIndex] && paths[otherPathIndex].indexOf(subpath) > -1) {\n\t\t\t\t\t\tconst isSubpathEnding: boolean = (start + subpathLength === segments.length);\n\n\t\t\t\t\t\t// Adding separator as prefix for subpath, such that 'endsWith(src, trgt)' considers subpath as directory name instead of plain string.\n\t\t\t\t\t\t// prefix is not added when either subpath is root directory or path[otherPathIndex] does not have multiple directories.\n\t\t\t\t\t\tconst subpathWithSep: string = (start > 0 && paths[otherPathIndex].indexOf(nativeSep) > -1) ? nativeSep + subpath : subpath;\n\t\t\t\t\t\tconst isOtherPathEnding: boolean = endsWith(paths[otherPathIndex], subpathWithSep);\n\n\t\t\t\t\t\tmatch = !isSubpathEnding || isOtherPathEnding;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// found unique subpath\n\t\t\t\tif (!match) {\n\t\t\t\t\tlet result = '';\n\n\t\t\t\t\t// preserve disk drive or root prefix\n\t\t\t\t\tif (endsWith(segments[0], ':') || prefix !== '') {\n\t\t\t\t\t\tif (start === 1) {\n\t\t\t\t\t\t\t// extend subpath to include disk drive prefix\n\t\t\t\t\t\t\tstart = 0;\n\t\t\t\t\t\t\tsubpathLength++;\n\t\t\t\t\t\t\tsubpath = segments[0] + nativeSep + subpath;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (start > 0) {\n\t\t\t\t\t\t\tresult = segments[0] + nativeSep;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult = prefix + result;\n\t\t\t\t\t}\n\n\t\t\t\t\t// add ellipsis at the beginning if neeeded\n\t\t\t\t\tif (start > 0) {\n\t\t\t\t\t\tresult = result + ellipsis + nativeSep;\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = result + subpath;\n\n\t\t\t\t\t// add ellipsis at the end if needed\n\t\t\t\t\tif (start + subpathLength < segments.length) {\n\t\t\t\t\t\tresult = result + nativeSep + ellipsis;\n\t\t\t\t\t}\n\n\t\t\t\t\tshortenedPaths[pathIndex] = result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (match) {\n\t\t\tshortenedPaths[pathIndex] = path; // use full path if no unique subpaths found\n\t\t}\n\t}\n\n\treturn shortenedPaths;\n}\n\nexport interface ISeparator {\n\tlabel: string;\n}\n\nenum Type {\n\tTEXT,\n\tVARIABLE,\n\tSEPARATOR\n}\n\ninterface ISegment {\n\tvalue: string;\n\ttype: Type;\n}\n\n/**\n * Helper to insert values for specific template variables into the string. E.g. \"this $(is) a $(template)\" can be\n * passed to this function together with an object that maps \"is\" and \"template\" to strings to have them replaced.\n * @param value string to which templating is applied\n * @param values the values of the templates to use\n */\nexport function template(template: string, values: { [key: string]: string | ISeparator } = Object.create(null)): string {\n\tconst segments: ISegment[] = [];\n\n\tlet inVariable = false;\n\tlet char: string;\n\tlet curVal = '';\n\tfor (let i = 0; i < template.length; i++) {\n\t\tchar = template[i];\n\n\t\t// Beginning of variable\n\t\tif (char === '$' || (inVariable && char === '{')) {\n\t\t\tif (curVal) {\n\t\t\t\tsegments.push({ value: curVal, type: Type.TEXT });\n\t\t\t}\n\n\t\t\tcurVal = '';\n\t\t\tinVariable = true;\n\t\t}\n\n\t\t// End of variable\n\t\telse if (char === '}' && inVariable) {\n\t\t\tconst resolved = values[curVal];\n\n\t\t\t// Variable\n\t\t\tif (typeof resolved === 'string') {\n\t\t\t\tif (resolved.length) {\n\t\t\t\t\tsegments.push({ value: resolved, type: Type.VARIABLE });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Separator\n\t\t\telse if (resolved) {\n\t\t\t\tconst prevSegment = segments[segments.length - 1];\n\t\t\t\tif (!prevSegment || prevSegment.type !== Type.SEPARATOR) {\n\t\t\t\t\tsegments.push({ value: resolved.label, type: Type.SEPARATOR }); // prevent duplicate separators\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcurVal = '';\n\t\t\tinVariable = false;\n\t\t}\n\n\t\t// Text or Variable Name\n\t\telse {\n\t\t\tcurVal += char;\n\t\t}\n\t}\n\n\t// Tail\n\tif (curVal && !inVariable) {\n\t\tsegments.push({ value: curVal, type: Type.TEXT });\n\t}\n\n\treturn segments.filter((segment, index) => {\n\n\t\t// Only keep separator if we have values to the left and right\n\t\tif (segment.type === Type.SEPARATOR) {\n\t\t\tconst left = segments[index - 1];\n\t\t\tconst right = segments[index + 1];\n\n\t\t\treturn [left, right].every(segment => segment && segment.type === Type.VARIABLE && segment.value.length > 0);\n\t\t}\n\n\t\t// accept any TEXT and VARIABLE\n\t\treturn true;\n\t}).map(segment => segment.value).join('');\n}","/**\n * Extracted from https://github.com/winjs/winjs\n * Version: 4.4.0(ec3258a9f3a36805a187848984e3bb938044178d)\n * Copyright (c) Microsoft Corporation.\n * All Rights Reserved.\n * Licensed under the MIT License.\n */\n(function() {\n\nvar _modules = {};\n_modules[\"WinJS/Core/_WinJS\"] = {};\n\nvar _winjs = function(moduleId, deps, factory) {\n var exports = {};\n var exportsPassedIn = false;\n\n var depsValues = deps.map(function(dep) {\n if (dep === 'exports') {\n exportsPassedIn = true;\n return exports;\n }\n return _modules[dep];\n });\n\n var result = factory.apply({}, depsValues);\n\n _modules[moduleId] = exportsPassedIn ? exports : result;\n};\n\n\n_winjs(\"WinJS/Core/_Global\", [], function () {\n \"use strict\";\n\n // Appease jshint\n /* global window, self, global */\n\n var globalObject =\n typeof window !== 'undefined' ? window :\n typeof self !== 'undefined' ? self :\n typeof global !== 'undefined' ? global :\n {};\n return globalObject;\n});\n\n_winjs(\"WinJS/Core/_BaseCoreUtils\", [\"WinJS/Core/_Global\"], function baseCoreUtilsInit(_Global) {\n \"use strict\";\n\n var hasWinRT = !!_Global.Windows;\n\n function markSupportedForProcessing(func) {\n /// \n /// \n /// Marks a function as being compatible with declarative processing, such as WinJS.UI.processAll\n /// or WinJS.Binding.processAll.\n /// \n /// \n /// The function to be marked as compatible with declarative processing.\n /// \n /// \n /// The input function.\n /// \n /// \n func.supportedForProcessing = true;\n return func;\n }\n\n return {\n hasWinRT: hasWinRT,\n markSupportedForProcessing: markSupportedForProcessing,\n _setImmediate: _Global.setImmediate ? _Global.setImmediate.bind(_Global) : function (handler) {\n _Global.setTimeout(handler, 0);\n }\n };\n});\n_winjs(\"WinJS/Core/_WriteProfilerMark\", [\"WinJS/Core/_Global\"], function profilerInit(_Global) {\n \"use strict\";\n\n return _Global.msWriteProfilerMark || function () { };\n});\n_winjs(\"WinJS/Core/_Base\", [\"WinJS/Core/_WinJS\",\"WinJS/Core/_Global\",\"WinJS/Core/_BaseCoreUtils\",\"WinJS/Core/_WriteProfilerMark\"], function baseInit(_WinJS, _Global, _BaseCoreUtils, _WriteProfilerMark) {\n \"use strict\";\n\n function initializeProperties(target, members, prefix) {\n var keys = Object.keys(members);\n var isArray = Array.isArray(target);\n var properties;\n var i, len;\n for (i = 0, len = keys.length; i < len; i++) {\n var key = keys[i];\n var enumerable = key.charCodeAt(0) !== /*_*/95;\n var member = members[key];\n if (member && typeof member === 'object') {\n if (member.value !== undefined || typeof member.get === 'function' || typeof member.set === 'function') {\n if (member.enumerable === undefined) {\n member.enumerable = enumerable;\n }\n if (prefix && member.setName && typeof member.setName === 'function') {\n member.setName(prefix + \".\" + key);\n }\n properties = properties || {};\n properties[key] = member;\n continue;\n }\n }\n if (!enumerable) {\n properties = properties || {};\n properties[key] = { value: member, enumerable: enumerable, configurable: true, writable: true };\n continue;\n }\n if (isArray) {\n target.forEach(function (target) {\n target[key] = member;\n });\n } else {\n target[key] = member;\n }\n }\n if (properties) {\n if (isArray) {\n target.forEach(function (target) {\n Object.defineProperties(target, properties);\n });\n } else {\n Object.defineProperties(target, properties);\n }\n }\n }\n\n (function () {\n\n var _rootNamespace = _WinJS;\n if (!_rootNamespace.Namespace) {\n _rootNamespace.Namespace = Object.create(Object.prototype);\n }\n\n function createNamespace(parentNamespace, name) {\n var currentNamespace = parentNamespace || {};\n if (name) {\n var namespaceFragments = name.split(\".\");\n if (currentNamespace === _Global && namespaceFragments[0] === \"WinJS\") {\n currentNamespace = _WinJS;\n namespaceFragments.splice(0, 1);\n }\n for (var i = 0, len = namespaceFragments.length; i < len; i++) {\n var namespaceName = namespaceFragments[i];\n if (!currentNamespace[namespaceName]) {\n Object.defineProperty(currentNamespace, namespaceName,\n { value: {}, writable: false, enumerable: true, configurable: true }\n );\n }\n currentNamespace = currentNamespace[namespaceName];\n }\n }\n return currentNamespace;\n }\n\n function defineWithParent(parentNamespace, name, members) {\n /// \n /// \n /// Defines a new namespace with the specified name under the specified parent namespace.\n /// \n /// \n /// The parent namespace.\n /// \n /// \n /// The name of the new namespace.\n /// \n /// \n /// The members of the new namespace.\n /// \n /// \n /// The newly-defined namespace.\n /// \n /// \n var currentNamespace = createNamespace(parentNamespace, name);\n\n if (members) {\n initializeProperties(currentNamespace, members, name || \"\");\n }\n\n return currentNamespace;\n }\n\n function define(name, members) {\n /// \n /// \n /// Defines a new namespace with the specified name.\n /// \n /// \n /// The name of the namespace. This could be a dot-separated name for nested namespaces.\n /// \n /// \n /// The members of the new namespace.\n /// \n /// \n /// The newly-defined namespace.\n /// \n /// \n return defineWithParent(_Global, name, members);\n }\n\n var LazyStates = {\n uninitialized: 1,\n working: 2,\n initialized: 3,\n };\n\n function lazy(f) {\n var name;\n var state = LazyStates.uninitialized;\n var result;\n return {\n setName: function (value) {\n name = value;\n },\n get: function () {\n switch (state) {\n case LazyStates.initialized:\n return result;\n\n case LazyStates.uninitialized:\n state = LazyStates.working;\n try {\n _WriteProfilerMark(\"WinJS.Namespace._lazy:\" + name + \",StartTM\");\n result = f();\n } finally {\n _WriteProfilerMark(\"WinJS.Namespace._lazy:\" + name + \",StopTM\");\n state = LazyStates.uninitialized;\n }\n f = null;\n state = LazyStates.initialized;\n return result;\n\n case LazyStates.working:\n throw \"Illegal: reentrancy on initialization\";\n\n default:\n throw \"Illegal\";\n }\n },\n set: function (value) {\n switch (state) {\n case LazyStates.working:\n throw \"Illegal: reentrancy on initialization\";\n\n default:\n state = LazyStates.initialized;\n result = value;\n break;\n }\n },\n enumerable: true,\n configurable: true,\n };\n }\n\n // helper for defining AMD module members\n function moduleDefine(exports, name, members) {\n var target = [exports];\n var publicNS = null;\n if (name) {\n publicNS = createNamespace(_Global, name);\n target.push(publicNS);\n }\n initializeProperties(target, members, name || \"\");\n return publicNS;\n }\n\n // Establish members of the \"WinJS.Namespace\" namespace\n Object.defineProperties(_rootNamespace.Namespace, {\n\n defineWithParent: { value: defineWithParent, writable: true, enumerable: true, configurable: true },\n\n define: { value: define, writable: true, enumerable: true, configurable: true },\n\n _lazy: { value: lazy, writable: true, enumerable: true, configurable: true },\n\n _moduleDefine: { value: moduleDefine, writable: true, enumerable: true, configurable: true }\n\n });\n\n })();\n\n (function () {\n\n function define(constructor, instanceMembers, staticMembers) {\n /// \n /// \n /// Defines a class using the given constructor and the specified instance members.\n /// \n /// \n /// A constructor function that is used to instantiate this class.\n /// \n /// \n /// The set of instance fields, properties, and methods made available on the class.\n /// \n /// \n /// The set of static fields, properties, and methods made available on the class.\n /// \n /// \n /// The newly-defined class.\n /// \n /// \n constructor = constructor || function () { };\n _BaseCoreUtils.markSupportedForProcessing(constructor);\n if (instanceMembers) {\n initializeProperties(constructor.prototype, instanceMembers);\n }\n if (staticMembers) {\n initializeProperties(constructor, staticMembers);\n }\n return constructor;\n }\n\n function derive(baseClass, constructor, instanceMembers, staticMembers) {\n /// \n /// \n /// Creates a sub-class based on the supplied baseClass parameter, using prototypal inheritance.\n /// \n /// \n /// The class to inherit from.\n /// \n /// \n /// A constructor function that is used to instantiate this class.\n /// \n /// \n /// The set of instance fields, properties, and methods to be made available on the class.\n /// \n /// \n /// The set of static fields, properties, and methods to be made available on the class.\n /// \n /// \n /// The newly-defined class.\n /// \n /// \n if (baseClass) {\n constructor = constructor || function () { };\n var basePrototype = baseClass.prototype;\n constructor.prototype = Object.create(basePrototype);\n _BaseCoreUtils.markSupportedForProcessing(constructor);\n Object.defineProperty(constructor.prototype, \"constructor\", { value: constructor, writable: true, configurable: true, enumerable: true });\n if (instanceMembers) {\n initializeProperties(constructor.prototype, instanceMembers);\n }\n if (staticMembers) {\n initializeProperties(constructor, staticMembers);\n }\n return constructor;\n } else {\n return define(constructor, instanceMembers, staticMembers);\n }\n }\n\n function mix(constructor) {\n /// \n /// \n /// Defines a class using the given constructor and the union of the set of instance members\n /// specified by all the mixin objects. The mixin parameter list is of variable length.\n /// \n /// \n /// A constructor function that is used to instantiate this class.\n /// \n /// \n /// The newly-defined class.\n /// \n /// \n constructor = constructor || function () { };\n var i, len;\n for (i = 1, len = arguments.length; i < len; i++) {\n initializeProperties(constructor.prototype, arguments[i]);\n }\n return constructor;\n }\n\n // Establish members of \"WinJS.Class\" namespace\n _WinJS.Namespace.define(\"WinJS.Class\", {\n define: define,\n derive: derive,\n mix: mix\n });\n\n })();\n\n return {\n Namespace: _WinJS.Namespace,\n Class: _WinJS.Class\n };\n\n});\n_winjs(\"WinJS/Core/_ErrorFromName\", [\"WinJS/Core/_Base\"], function errorsInit(_Base) {\n \"use strict\";\n\n var ErrorFromName = _Base.Class.derive(Error, function (name, message) {\n /// \n /// \n /// Creates an Error object with the specified name and message properties.\n /// \n /// The name of this error. The name is meant to be consumed programmatically and should not be localized.\n /// The message for this error. The message is meant to be consumed by humans and should be localized.\n /// Error instance with .name and .message properties populated\n /// \n this.name = name;\n this.message = message || name;\n }, {\n /* empty */\n }, {\n supportedForProcessing: false,\n });\n\n _Base.Namespace.define(\"WinJS\", {\n // ErrorFromName establishes a simple pattern for returning error codes.\n //\n ErrorFromName: ErrorFromName\n });\n\n return ErrorFromName;\n\n});\n\n\n_winjs(\"WinJS/Core/_Events\", [\"exports\",\"WinJS/Core/_Base\"], function eventsInit(exports, _Base) {\n \"use strict\";\n\n\n function createEventProperty(name) {\n var eventPropStateName = \"_on\" + name + \"state\";\n\n return {\n get: function () {\n var state = this[eventPropStateName];\n return state && state.userHandler;\n },\n set: function (handler) {\n var state = this[eventPropStateName];\n if (handler) {\n if (!state) {\n state = { wrapper: function (evt) { return state.userHandler(evt); }, userHandler: handler };\n Object.defineProperty(this, eventPropStateName, { value: state, enumerable: false, writable:true, configurable: true });\n this.addEventListener(name, state.wrapper, false);\n }\n state.userHandler = handler;\n } else if (state) {\n this.removeEventListener(name, state.wrapper, false);\n this[eventPropStateName] = null;\n }\n },\n enumerable: true\n };\n }\n\n function createEventProperties() {\n /// \n /// \n /// Creates an object that has one property for each name passed to the function.\n /// \n /// \n /// A variable list of property names.\n /// \n /// \n /// The object with the specified properties. The names of the properties are prefixed with 'on'.\n /// \n /// \n var props = {};\n for (var i = 0, len = arguments.length; i < len; i++) {\n var name = arguments[i];\n props[\"on\" + name] = createEventProperty(name);\n }\n return props;\n }\n\n var EventMixinEvent = _Base.Class.define(\n function EventMixinEvent_ctor(type, detail, target) {\n this.detail = detail;\n this.target = target;\n this.timeStamp = Date.now();\n this.type = type;\n },\n {\n bubbles: { value: false, writable: false },\n cancelable: { value: false, writable: false },\n currentTarget: {\n get: function () { return this.target; }\n },\n defaultPrevented: {\n get: function () { return this._preventDefaultCalled; }\n },\n trusted: { value: false, writable: false },\n eventPhase: { value: 0, writable: false },\n target: null,\n timeStamp: null,\n type: null,\n\n preventDefault: function () {\n this._preventDefaultCalled = true;\n },\n stopImmediatePropagation: function () {\n this._stopImmediatePropagationCalled = true;\n },\n stopPropagation: function () {\n }\n }, {\n supportedForProcessing: false,\n }\n );\n\n var eventMixin = {\n _listeners: null,\n\n addEventListener: function (type, listener, useCapture) {\n /// \n /// \n /// Adds an event listener to the control.\n /// \n /// \n /// The type (name) of the event.\n /// \n /// \n /// The listener to invoke when the event is raised.\n /// \n /// \n /// if true initiates capture, otherwise false.\n /// \n /// \n useCapture = useCapture || false;\n this._listeners = this._listeners || {};\n var eventListeners = (this._listeners[type] = this._listeners[type] || []);\n for (var i = 0, len = eventListeners.length; i < len; i++) {\n var l = eventListeners[i];\n if (l.useCapture === useCapture && l.listener === listener) {\n return;\n }\n }\n eventListeners.push({ listener: listener, useCapture: useCapture });\n },\n dispatchEvent: function (type, details) {\n /// \n /// \n /// Raises an event of the specified type and with the specified additional properties.\n /// \n /// \n /// The type (name) of the event.\n /// \n /// \n /// The set of additional properties to be attached to the event object when the event is raised.\n /// \n /// \n /// true if preventDefault was called on the event.\n /// \n /// \n var listeners = this._listeners && this._listeners[type];\n if (listeners) {\n var eventValue = new EventMixinEvent(type, details, this);\n // Need to copy the array to protect against people unregistering while we are dispatching\n listeners = listeners.slice(0, listeners.length);\n for (var i = 0, len = listeners.length; i < len && !eventValue._stopImmediatePropagationCalled; i++) {\n listeners[i].listener(eventValue);\n }\n return eventValue.defaultPrevented || false;\n }\n return false;\n },\n removeEventListener: function (type, listener, useCapture) {\n /// \n /// \n /// Removes an event listener from the control.\n /// \n /// \n /// The type (name) of the event.\n /// \n /// \n /// The listener to remove.\n /// \n /// \n /// Specifies whether to initiate capture.\n /// \n /// \n useCapture = useCapture || false;\n var listeners = this._listeners && this._listeners[type];\n if (listeners) {\n for (var i = 0, len = listeners.length; i < len; i++) {\n var l = listeners[i];\n if (l.listener === listener && l.useCapture === useCapture) {\n listeners.splice(i, 1);\n if (listeners.length === 0) {\n delete this._listeners[type];\n }\n // Only want to remove one element for each call to removeEventListener\n break;\n }\n }\n }\n }\n };\n\n _Base.Namespace._moduleDefine(exports, \"WinJS.Utilities\", {\n _createEventProperty: createEventProperty,\n createEventProperties: createEventProperties,\n eventMixin: eventMixin\n });\n\n});\n\n\n_winjs(\"WinJS/Core/_Trace\", [\"WinJS/Core/_Global\"], function traceInit(_Global) {\n \"use strict\";\n\n function nop(v) {\n return v;\n }\n\n return {\n _traceAsyncOperationStarting: (_Global.Debug && _Global.Debug.msTraceAsyncOperationStarting && _Global.Debug.msTraceAsyncOperationStarting.bind(_Global.Debug)) || nop,\n _traceAsyncOperationCompleted: (_Global.Debug && _Global.Debug.msTraceAsyncOperationCompleted && _Global.Debug.msTraceAsyncOperationCompleted.bind(_Global.Debug)) || nop,\n _traceAsyncCallbackStarting: (_Global.Debug && _Global.Debug.msTraceAsyncCallbackStarting && _Global.Debug.msTraceAsyncCallbackStarting.bind(_Global.Debug)) || nop,\n _traceAsyncCallbackCompleted: (_Global.Debug && _Global.Debug.msTraceAsyncCallbackCompleted && _Global.Debug.msTraceAsyncCallbackCompleted.bind(_Global.Debug)) || nop\n };\n});\n_winjs(\"WinJS/Promise/_StateMachine\", [\"WinJS/Core/_Global\",\"WinJS/Core/_BaseCoreUtils\",\"WinJS/Core/_Base\",\"WinJS/Core/_ErrorFromName\",\"WinJS/Core/_Events\",\"WinJS/Core/_Trace\"], function promiseStateMachineInit(_Global, _BaseCoreUtils, _Base, _ErrorFromName, _Events, _Trace) {\n \"use strict\";\n\n _Global.Debug && (_Global.Debug.setNonUserCodeExceptions = true);\n\n var ListenerType = _Base.Class.mix(_Base.Class.define(null, { /*empty*/ }, { supportedForProcessing: false }), _Events.eventMixin);\n var promiseEventListeners = new ListenerType();\n // make sure there is a listeners collection so that we can do a more trivial check below\n promiseEventListeners._listeners = {};\n var errorET = \"error\";\n var canceledName = \"Canceled\";\n var tagWithStack = false;\n var tag = {\n promise: 0x01,\n thenPromise: 0x02,\n errorPromise: 0x04,\n exceptionPromise: 0x08,\n completePromise: 0x10,\n };\n tag.all = tag.promise | tag.thenPromise | tag.errorPromise | tag.exceptionPromise | tag.completePromise;\n\n //\n // Global error counter, for each error which enters the system we increment this once and then\n // the error number travels with the error as it traverses the tree of potential handlers.\n //\n // When someone has registered to be told about errors (WinJS.Promise.callonerror) promises\n // which are in error will get tagged with a ._errorId field. This tagged field is the\n // contract by which nested promises with errors will be identified as chaining for the\n // purposes of the callonerror semantics. If a nested promise in error is encountered without\n // a ._errorId it will be assumed to be foreign and treated as an interop boundary and\n // a new error id will be minted.\n //\n var error_number = 1;\n\n //\n // The state machine has a interesting hiccup in it with regards to notification, in order\n // to flatten out notification and avoid recursion for synchronous completion we have an\n // explicit set of *_notify states which are responsible for notifying their entire tree\n // of children. They can do this because they know that immediate children are always\n // ThenPromise instances and we can therefore reach into their state to access the\n // _listeners collection.\n //\n // So, what happens is that a Promise will be fulfilled through the _completed or _error\n // messages at which point it will enter a *_notify state and be responsible for to move\n // its children into an (as appropriate) success or error state and also notify that child's\n // listeners of the state transition, until leaf notes are reached.\n //\n\n var state_created, // -> working\n state_working, // -> error | error_notify | success | success_notify | canceled | waiting\n state_waiting, // -> error | error_notify | success | success_notify | waiting_canceled\n state_waiting_canceled, // -> error | error_notify | success | success_notify | canceling\n state_canceled, // -> error | error_notify | success | success_notify | canceling\n state_canceling, // -> error_notify\n state_success_notify, // -> success\n state_success, // -> .\n state_error_notify, // -> error\n state_error; // -> .\n\n // Noop function, used in the various states to indicate that they don't support a given\n // message. Named with the somewhat cute name '_' because it reads really well in the states.\n\n function _() { }\n\n // Initial state\n //\n state_created = {\n name: \"created\",\n enter: function (promise) {\n promise._setState(state_working);\n },\n cancel: _,\n done: _,\n then: _,\n _completed: _,\n _error: _,\n _notify: _,\n _progress: _,\n _setCompleteValue: _,\n _setErrorValue: _\n };\n\n // Ready state, waiting for a message (completed/error/progress), able to be canceled\n //\n state_working = {\n name: \"working\",\n enter: _,\n cancel: function (promise) {\n promise._setState(state_canceled);\n },\n done: done,\n then: then,\n _completed: completed,\n _error: error,\n _notify: _,\n _progress: progress,\n _setCompleteValue: setCompleteValue,\n _setErrorValue: setErrorValue\n };\n\n // Waiting state, if a promise is completed with a value which is itself a promise\n // (has a then() method) it signs up to be informed when that child promise is\n // fulfilled at which point it will be fulfilled with that value.\n //\n state_waiting = {\n name: \"waiting\",\n enter: function (promise) {\n var waitedUpon = promise._value;\n // We can special case our own intermediate promises which are not in a\n // terminal state by just pushing this promise as a listener without\n // having to create new indirection functions\n if (waitedUpon instanceof ThenPromise &&\n waitedUpon._state !== state_error &&\n waitedUpon._state !== state_success) {\n pushListener(waitedUpon, { promise: promise });\n } else {\n var error = function (value) {\n if (waitedUpon._errorId) {\n promise._chainedError(value, waitedUpon);\n } else {\n // Because this is an interop boundary we want to indicate that this\n // error has been handled by the promise infrastructure before we\n // begin a new handling chain.\n //\n callonerror(promise, value, detailsForHandledError, waitedUpon, error);\n promise._error(value);\n }\n };\n error.handlesOnError = true;\n waitedUpon.then(\n promise._completed.bind(promise),\n error,\n promise._progress.bind(promise)\n );\n }\n },\n cancel: function (promise) {\n promise._setState(state_waiting_canceled);\n },\n done: done,\n then: then,\n _completed: completed,\n _error: error,\n _notify: _,\n _progress: progress,\n _setCompleteValue: setCompleteValue,\n _setErrorValue: setErrorValue\n };\n\n // Waiting canceled state, when a promise has been in a waiting state and receives a\n // request to cancel its pending work it will forward that request to the child promise\n // and then waits to be informed of the result. This promise moves itself into the\n // canceling state but understands that the child promise may instead push it to a\n // different state.\n //\n state_waiting_canceled = {\n name: \"waiting_canceled\",\n enter: function (promise) {\n // Initiate a transition to canceling. Triggering a cancel on the promise\n // that we are waiting upon may result in a different state transition\n // before the state machine pump runs again.\n promise._setState(state_canceling);\n var waitedUpon = promise._value;\n if (waitedUpon.cancel) {\n waitedUpon.cancel();\n }\n },\n cancel: _,\n done: done,\n then: then,\n _completed: completed,\n _error: error,\n _notify: _,\n _progress: progress,\n _setCompleteValue: setCompleteValue,\n _setErrorValue: setErrorValue\n };\n\n // Canceled state, moves to the canceling state and then tells the promise to do\n // whatever it might need to do on cancelation.\n //\n state_canceled = {\n name: \"canceled\",\n enter: function (promise) {\n // Initiate a transition to canceling. The _cancelAction may change the state\n // before the state machine pump runs again.\n promise._setState(state_canceling);\n promise._cancelAction();\n },\n cancel: _,\n done: done,\n then: then,\n _completed: completed,\n _error: error,\n _notify: _,\n _progress: progress,\n _setCompleteValue: setCompleteValue,\n _setErrorValue: setErrorValue\n };\n\n // Canceling state, commits to the promise moving to an error state with an error\n // object whose 'name' and 'message' properties contain the string \"Canceled\"\n //\n state_canceling = {\n name: \"canceling\",\n enter: function (promise) {\n var error = new Error(canceledName);\n error.name = error.message;\n promise._value = error;\n promise._setState(state_error_notify);\n },\n cancel: _,\n done: _,\n then: _,\n _completed: _,\n _error: _,\n _notify: _,\n _progress: _,\n _setCompleteValue: _,\n _setErrorValue: _\n };\n\n // Success notify state, moves a promise to the success state and notifies all children\n //\n state_success_notify = {\n name: \"complete_notify\",\n enter: function (promise) {\n promise.done = CompletePromise.prototype.done;\n promise.then = CompletePromise.prototype.then;\n if (promise._listeners) {\n var queue = [promise];\n var p;\n while (queue.length) {\n p = queue.shift();\n p._state._notify(p, queue);\n }\n }\n promise._setState(state_success);\n },\n cancel: _,\n done: null, /*error to get here */\n then: null, /*error to get here */\n _completed: _,\n _error: _,\n _notify: notifySuccess,\n _progress: _,\n _setCompleteValue: _,\n _setErrorValue: _\n };\n\n // Success state, moves a promise to the success state and does NOT notify any children.\n // Some upstream promise is owning the notification pass.\n //\n state_success = {\n name: \"success\",\n enter: function (promise) {\n promise.done = CompletePromise.prototype.done;\n promise.then = CompletePromise.prototype.then;\n promise._cleanupAction();\n },\n cancel: _,\n done: null, /*error to get here */\n then: null, /*error to get here */\n _completed: _,\n _error: _,\n _notify: notifySuccess,\n _progress: _,\n _setCompleteValue: _,\n _setErrorValue: _\n };\n\n // Error notify state, moves a promise to the error state and notifies all children\n //\n state_error_notify = {\n name: \"error_notify\",\n enter: function (promise) {\n promise.done = ErrorPromise.prototype.done;\n promise.then = ErrorPromise.prototype.then;\n if (promise._listeners) {\n var queue = [promise];\n var p;\n while (queue.length) {\n p = queue.shift();\n p._state._notify(p, queue);\n }\n }\n promise._setState(state_error);\n },\n cancel: _,\n done: null, /*error to get here*/\n then: null, /*error to get here*/\n _completed: _,\n _error: _,\n _notify: notifyError,\n _progress: _,\n _setCompleteValue: _,\n _setErrorValue: _\n };\n\n // Error state, moves a promise to the error state and does NOT notify any children.\n // Some upstream promise is owning the notification pass.\n //\n state_error = {\n name: \"error\",\n enter: function (promise) {\n promise.done = ErrorPromise.prototype.done;\n promise.then = ErrorPromise.prototype.then;\n promise._cleanupAction();\n },\n cancel: _,\n done: null, /*error to get here*/\n then: null, /*error to get here*/\n _completed: _,\n _error: _,\n _notify: notifyError,\n _progress: _,\n _setCompleteValue: _,\n _setErrorValue: _\n };\n\n //\n // The statemachine implementation follows a very particular pattern, the states are specified\n // as static stateless bags of functions which are then indirected through the state machine\n // instance (a Promise). As such all of the functions on each state have the promise instance\n // passed to them explicitly as a parameter and the Promise instance members do a little\n // dance where they indirect through the state and insert themselves in the argument list.\n //\n // We could instead call directly through the promise states however then every caller\n // would have to remember to do things like pumping the state machine to catch state transitions.\n //\n\n var PromiseStateMachine = _Base.Class.define(null, {\n _listeners: null,\n _nextState: null,\n _state: null,\n _value: null,\n\n cancel: function () {\n /// \n /// \n /// Attempts to cancel the fulfillment of a promised value. If the promise hasn't\n /// already been fulfilled and cancellation is supported, the promise enters\n /// the error state with a value of Error(\"Canceled\").\n /// \n /// \n this._state.cancel(this);\n this._run();\n },\n done: function Promise_done(onComplete, onError, onProgress) {\n /// \n /// \n /// Allows you to specify the work to be done on the fulfillment of the promised value,\n /// the error handling to be performed if the promise fails to fulfill\n /// a value, and the handling of progress notifications along the way.\n ///\n /// After the handlers have finished executing, this function throws any error that would have been returned\n /// from then() as a promise in the error state.\n /// \n /// \n /// The function to be called if the promise is fulfilled successfully with a value.\n /// The fulfilled value is passed as the single argument. If the value is null,\n /// the fulfilled value is returned. The value returned\n /// from the function becomes the fulfilled value of the promise returned by\n /// then(). If an exception is thrown while executing the function, the promise returned\n /// by then() moves into the error state.\n /// \n /// \n /// The function to be called if the promise is fulfilled with an error. The error\n /// is passed as the single argument. If it is null, the error is forwarded.\n /// The value returned from the function is the fulfilled value of the promise returned by then().\n /// \n /// \n /// the function to be called if the promise reports progress. Data about the progress\n /// is passed as the single argument. Promises are not required to support\n /// progress.\n /// \n /// \n this._state.done(this, onComplete, onError, onProgress);\n },\n then: function Promise_then(onComplete, onError, onProgress) {\n /// \n /// \n /// Allows you to specify the work to be done on the fulfillment of the promised value,\n /// the error handling to be performed if the promise fails to fulfill\n /// a value, and the handling of progress notifications along the way.\n /// \n /// \n /// The function to be called if the promise is fulfilled successfully with a value.\n /// The value is passed as the single argument. If the value is null, the value is returned.\n /// The value returned from the function becomes the fulfilled value of the promise returned by\n /// then(). If an exception is thrown while this function is being executed, the promise returned\n /// by then() moves into the error state.\n /// \n /// \n /// The function to be called if the promise is fulfilled with an error. The error\n /// is passed as the single argument. If it is null, the error is forwarded.\n /// The value returned from the function becomes the fulfilled value of the promise returned by then().\n /// \n /// \n /// The function to be called if the promise reports progress. Data about the progress\n /// is passed as the single argument. Promises are not required to support\n /// progress.\n /// \n /// \n /// The promise whose value is the result of executing the complete or\n /// error function.\n /// \n /// \n return this._state.then(this, onComplete, onError, onProgress);\n },\n\n _chainedError: function (value, context) {\n var result = this._state._error(this, value, detailsForChainedError, context);\n this._run();\n return result;\n },\n _completed: function (value) {\n var result = this._state._completed(this, value);\n this._run();\n return result;\n },\n _error: function (value) {\n var result = this._state._error(this, value, detailsForError);\n this._run();\n return result;\n },\n _progress: function (value) {\n this._state._progress(this, value);\n },\n _setState: function (state) {\n this._nextState = state;\n },\n _setCompleteValue: function (value) {\n this._state._setCompleteValue(this, value);\n this._run();\n },\n _setChainedErrorValue: function (value, context) {\n var result = this._state._setErrorValue(this, value, detailsForChainedError, context);\n this._run();\n return result;\n },\n _setExceptionValue: function (value) {\n var result = this._state._setErrorValue(this, value, detailsForException);\n this._run();\n return result;\n },\n _run: function () {\n while (this._nextState) {\n this._state = this._nextState;\n this._nextState = null;\n this._state.enter(this);\n }\n }\n }, {\n supportedForProcessing: false\n });\n\n //\n // Implementations of shared state machine code.\n //\n\n function completed(promise, value) {\n var targetState;\n if (value && typeof value === \"object\" && typeof value.then === \"function\") {\n targetState = state_waiting;\n } else {\n targetState = state_success_notify;\n }\n promise._value = value;\n promise._setState(targetState);\n }\n function createErrorDetails(exception, error, promise, id, parent, handler) {\n return {\n exception: exception,\n error: error,\n promise: promise,\n handler: handler,\n id: id,\n parent: parent\n };\n }\n function detailsForHandledError(promise, errorValue, context, handler) {\n var exception = context._isException;\n var errorId = context._errorId;\n return createErrorDetails(\n exception ? errorValue : null,\n exception ? null : errorValue,\n promise,\n errorId,\n context,\n handler\n );\n }\n function detailsForChainedError(promise, errorValue, context) {\n var exception = context._isException;\n var errorId = context._errorId;\n setErrorInfo(promise, errorId, exception);\n return createErrorDetails(\n exception ? errorValue : null,\n exception ? null : errorValue,\n promise,\n errorId,\n context\n );\n }\n function detailsForError(promise, errorValue) {\n var errorId = ++error_number;\n setErrorInfo(promise, errorId);\n return createErrorDetails(\n null,\n errorValue,\n promise,\n errorId\n );\n }\n function detailsForException(promise, exceptionValue) {\n var errorId = ++error_number;\n setErrorInfo(promise, errorId, true);\n return createErrorDetails(\n exceptionValue,\n null,\n promise,\n errorId\n );\n }\n function done(promise, onComplete, onError, onProgress) {\n var asyncOpID = _Trace._traceAsyncOperationStarting(\"WinJS.Promise.done\");\n pushListener(promise, { c: onComplete, e: onError, p: onProgress, asyncOpID: asyncOpID });\n }\n function error(promise, value, onerrorDetails, context) {\n promise._value = value;\n callonerror(promise, value, onerrorDetails, context);\n promise._setState(state_error_notify);\n }\n function notifySuccess(promise, queue) {\n var value = promise._value;\n var listeners = promise._listeners;\n if (!listeners) {\n return;\n }\n promise._listeners = null;\n var i, len;\n for (i = 0, len = Array.isArray(listeners) ? listeners.length : 1; i < len; i++) {\n var listener = len === 1 ? listeners : listeners[i];\n var onComplete = listener.c;\n var target = listener.promise;\n\n _Trace._traceAsyncOperationCompleted(listener.asyncOpID, _Global.Debug && _Global.Debug.MS_ASYNC_OP_STATUS_SUCCESS);\n\n if (target) {\n _Trace._traceAsyncCallbackStarting(listener.asyncOpID);\n try {\n target._setCompleteValue(onComplete ? onComplete(value) : value);\n } catch (ex) {\n target._setExceptionValue(ex);\n } finally {\n _Trace._traceAsyncCallbackCompleted();\n }\n if (target._state !== state_waiting && target._listeners) {\n queue.push(target);\n }\n } else {\n CompletePromise.prototype.done.call(promise, onComplete);\n }\n }\n }\n function notifyError(promise, queue) {\n var value = promise._value;\n var listeners = promise._listeners;\n if (!listeners) {\n return;\n }\n promise._listeners = null;\n var i, len;\n for (i = 0, len = Array.isArray(listeners) ? listeners.length : 1; i < len; i++) {\n var listener = len === 1 ? listeners : listeners[i];\n var onError = listener.e;\n var target = listener.promise;\n\n var errorID = _Global.Debug && (value && value.name === canceledName ? _Global.Debug.MS_ASYNC_OP_STATUS_CANCELED : _Global.Debug.MS_ASYNC_OP_STATUS_ERROR);\n _Trace._traceAsyncOperationCompleted(listener.asyncOpID, errorID);\n\n if (target) {\n var asyncCallbackStarted = false;\n try {\n if (onError) {\n _Trace._traceAsyncCallbackStarting(listener.asyncOpID);\n asyncCallbackStarted = true;\n if (!onError.handlesOnError) {\n callonerror(target, value, detailsForHandledError, promise, onError);\n }\n target._setCompleteValue(onError(value));\n } else {\n target._setChainedErrorValue(value, promise);\n }\n } catch (ex) {\n target._setExceptionValue(ex);\n } finally {\n if (asyncCallbackStarted) {\n _Trace._traceAsyncCallbackCompleted();\n }\n }\n if (target._state !== state_waiting && target._listeners) {\n queue.push(target);\n }\n } else {\n ErrorPromise.prototype.done.call(promise, null, onError);\n }\n }\n }\n function callonerror(promise, value, onerrorDetailsGenerator, context, handler) {\n if (promiseEventListeners._listeners[errorET]) {\n if (value instanceof Error && value.message === canceledName) {\n return;\n }\n promiseEventListeners.dispatchEvent(errorET, onerrorDetailsGenerator(promise, value, context, handler));\n }\n }\n function progress(promise, value) {\n var listeners = promise._listeners;\n if (listeners) {\n var i, len;\n for (i = 0, len = Array.isArray(listeners) ? listeners.length : 1; i < len; i++) {\n var listener = len === 1 ? listeners : listeners[i];\n var onProgress = listener.p;\n if (onProgress) {\n try { onProgress(value); } catch (ex) { }\n }\n if (!(listener.c || listener.e) && listener.promise) {\n listener.promise._progress(value);\n }\n }\n }\n }\n function pushListener(promise, listener) {\n var listeners = promise._listeners;\n if (listeners) {\n // We may have either a single listener (which will never be wrapped in an array)\n // or 2+ listeners (which will be wrapped). Since we are now adding one more listener\n // we may have to wrap the single listener before adding the second.\n listeners = Array.isArray(listeners) ? listeners : [listeners];\n listeners.push(listener);\n } else {\n listeners = listener;\n }\n promise._listeners = listeners;\n }\n // The difference beween setCompleteValue()/setErrorValue() and complete()/error() is that setXXXValue() moves\n // a promise directly to the success/error state without starting another notification pass (because one\n // is already ongoing).\n function setErrorInfo(promise, errorId, isException) {\n promise._isException = isException || false;\n promise._errorId = errorId;\n }\n function setErrorValue(promise, value, onerrorDetails, context) {\n promise._value = value;\n callonerror(promise, value, onerrorDetails, context);\n promise._setState(state_error);\n }\n function setCompleteValue(promise, value) {\n var targetState;\n if (value && typeof value === \"object\" && typeof value.then === \"function\") {\n targetState = state_waiting;\n } else {\n targetState = state_success;\n }\n promise._value = value;\n promise._setState(targetState);\n }\n function then(promise, onComplete, onError, onProgress) {\n var result = new ThenPromise(promise);\n var asyncOpID = _Trace._traceAsyncOperationStarting(\"WinJS.Promise.then\");\n pushListener(promise, { promise: result, c: onComplete, e: onError, p: onProgress, asyncOpID: asyncOpID });\n return result;\n }\n\n //\n // Internal implementation detail promise, ThenPromise is created when a promise needs\n // to be returned from a then() method.\n //\n var ThenPromise = _Base.Class.derive(PromiseStateMachine,\n function (creator) {\n\n if (tagWithStack && (tagWithStack === true || (tagWithStack & tag.thenPromise))) {\n this._stack = Promise._getStack();\n }\n\n this._creator = creator;\n this._setState(state_created);\n this._run();\n }, {\n _creator: null,\n\n _cancelAction: function () { if (this._creator) { this._creator.cancel(); } },\n _cleanupAction: function () { this._creator = null; }\n }, {\n supportedForProcessing: false\n }\n );\n\n //\n // Slim promise implementations for already completed promises, these are created\n // under the hood on synchronous completion paths as well as by WinJS.Promise.wrap\n // and WinJS.Promise.wrapError.\n //\n\n var ErrorPromise = _Base.Class.define(\n function ErrorPromise_ctor(value) {\n\n if (tagWithStack && (tagWithStack === true || (tagWithStack & tag.errorPromise))) {\n this._stack = Promise._getStack();\n }\n\n this._value = value;\n callonerror(this, value, detailsForError);\n }, {\n cancel: function () {\n /// \n /// \n /// Attempts to cancel the fulfillment of a promised value. If the promise hasn't\n /// already been fulfilled and cancellation is supported, the promise enters\n /// the error state with a value of Error(\"Canceled\").\n /// \n /// \n },\n done: function ErrorPromise_done(unused, onError) {\n /// \n /// \n /// Allows you to specify the work to be done on the fulfillment of the promised value,\n /// the error handling to be performed if the promise fails to fulfill\n /// a value, and the handling of progress notifications along the way.\n ///\n /// After the handlers have finished executing, this function throws any error that would have been returned\n /// from then() as a promise in the error state.\n /// \n /// \n /// The function to be called if the promise is fulfilled successfully with a value.\n /// The fulfilled value is passed as the single argument. If the value is null,\n /// the fulfilled value is returned. The value returned\n /// from the function becomes the fulfilled value of the promise returned by\n /// then(). If an exception is thrown while executing the function, the promise returned\n /// by then() moves into the error state.\n /// \n /// \n /// The function to be called if the promise is fulfilled with an error. The error\n /// is passed as the single argument. If it is null, the error is forwarded.\n /// The value returned from the function is the fulfilled value of the promise returned by then().\n /// \n /// \n /// the function to be called if the promise reports progress. Data about the progress\n /// is passed as the single argument. Promises are not required to support\n /// progress.\n /// \n /// \n var value = this._value;\n if (onError) {\n try {\n if (!onError.handlesOnError) {\n callonerror(null, value, detailsForHandledError, this, onError);\n }\n var result = onError(value);\n if (result && typeof result === \"object\" && typeof result.done === \"function\") {\n // If a promise is returned we need to wait on it.\n result.done();\n }\n return;\n } catch (ex) {\n value = ex;\n }\n }\n if (value instanceof Error && value.message === canceledName) {\n // suppress cancel\n return;\n }\n // force the exception to be thrown asyncronously to avoid any try/catch blocks\n //\n Promise._doneHandler(value);\n },\n then: function ErrorPromise_then(unused, onError) {\n /// \n /// \n /// Allows you to specify the work to be done on the fulfillment of the promised value,\n /// the error handling to be performed if the promise fails to fulfill\n /// a value, and the handling of progress notifications along the way.\n /// \n /// \n /// The function to be called if the promise is fulfilled successfully with a value.\n /// The value is passed as the single argument. If the value is null, the value is returned.\n /// The value returned from the function becomes the fulfilled value of the promise returned by\n /// then(). If an exception is thrown while this function is being executed, the promise returned\n /// by then() moves into the error state.\n /// \n /// \n /// The function to be called if the promise is fulfilled with an error. The error\n /// is passed as the single argument. If it is null, the error is forwarded.\n /// The value returned from the function becomes the fulfilled value of the promise returned by then().\n /// \n /// \n /// The function to be called if the promise reports progress. Data about the progress\n /// is passed as the single argument. Promises are not required to support\n /// progress.\n /// \n /// \n /// The promise whose value is the result of executing the complete or\n /// error function.\n /// \n /// \n\n // If the promise is already in a error state and no error handler is provided\n // we optimize by simply returning the promise instead of creating a new one.\n //\n if (!onError) { return this; }\n var result;\n var value = this._value;\n try {\n if (!onError.handlesOnError) {\n callonerror(null, value, detailsForHandledError, this, onError);\n }\n result = new CompletePromise(onError(value));\n } catch (ex) {\n // If the value throw from the error handler is the same as the value\n // provided to the error handler then there is no need for a new promise.\n //\n if (ex === value) {\n result = this;\n } else {\n result = new ExceptionPromise(ex);\n }\n }\n return result;\n }\n }, {\n supportedForProcessing: false\n }\n );\n\n var ExceptionPromise = _Base.Class.derive(ErrorPromise,\n function ExceptionPromise_ctor(value) {\n\n if (tagWithStack && (tagWithStack === true || (tagWithStack & tag.exceptionPromise))) {\n this._stack = Promise._getStack();\n }\n\n this._value = value;\n callonerror(this, value, detailsForException);\n }, {\n /* empty */\n }, {\n supportedForProcessing: false\n }\n );\n\n var CompletePromise = _Base.Class.define(\n function CompletePromise_ctor(value) {\n\n if (tagWithStack && (tagWithStack === true || (tagWithStack & tag.completePromise))) {\n this._stack = Promise._getStack();\n }\n\n if (value && typeof value === \"object\" && typeof value.then === \"function\") {\n var result = new ThenPromise(null);\n result._setCompleteValue(value);\n return result;\n }\n this._value = value;\n }, {\n cancel: function () {\n /// \n /// \n /// Attempts to cancel the fulfillment of a promised value. If the promise hasn't\n /// already been fulfilled and cancellation is supported, the promise enters\n /// the error state with a value of Error(\"Canceled\").\n /// \n /// \n },\n done: function CompletePromise_done(onComplete) {\n /// \n /// \n /// Allows you to specify the work to be done on the fulfillment of the promised value,\n /// the error handling to be performed if the promise fails to fulfill\n /// a value, and the handling of progress notifications along the way.\n ///\n /// After the handlers have finished executing, this function throws any error that would have been returned\n /// from then() as a promise in the error state.\n /// \n /// \n /// The function to be called if the promise is fulfilled successfully with a value.\n /// The fulfilled value is passed as the single argument. If the value is null,\n /// the fulfilled value is returned. The value returned\n /// from the function becomes the fulfilled value of the promise returned by\n /// then(). If an exception is thrown while executing the function, the promise returned\n /// by then() moves into the error state.\n /// \n /// \n /// The function to be called if the promise is fulfilled with an error. The error\n /// is passed as the single argument. If it is null, the error is forwarded.\n /// The value returned from the function is the fulfilled value of the promise returned by then().\n /// \n /// \n /// the function to be called if the promise reports progress. Data about the progress\n /// is passed as the single argument. Promises are not required to support\n /// progress.\n /// \n /// \n if (!onComplete) { return; }\n try {\n var result = onComplete(this._value);\n if (result && typeof result === \"object\" && typeof result.done === \"function\") {\n result.done();\n }\n } catch (ex) {\n // force the exception to be thrown asynchronously to avoid any try/catch blocks\n Promise._doneHandler(ex);\n }\n },\n then: function CompletePromise_then(onComplete) {\n /// \n /// \n /// Allows you to specify the work to be done on the fulfillment of the promised value,\n /// the error handling to be performed if the promise fails to fulfill\n /// a value, and the handling of progress notifications along the way.\n /// \n /// \n /// The function to be called if the promise is fulfilled successfully with a value.\n /// The value is passed as the single argument. If the value is null, the value is returned.\n /// The value returned from the function becomes the fulfilled value of the promise returned by\n /// then(). If an exception is thrown while this function is being executed, the promise returned\n /// by then() moves into the error state.\n /// \n /// \n /// The function to be called if the promise is fulfilled with an error. The error\n /// is passed as the single argument. If it is null, the error is forwarded.\n /// The value returned from the function becomes the fulfilled value of the promise returned by then().\n /// \n /// \n /// The function to be called if the promise reports progress. Data about the progress\n /// is passed as the single argument. Promises are not required to support\n /// progress.\n /// \n /// \n /// The promise whose value is the result of executing the complete or\n /// error function.\n /// \n /// \n try {\n // If the value returned from the completion handler is the same as the value\n // provided to the completion handler then there is no need for a new promise.\n //\n var newValue = onComplete ? onComplete(this._value) : this._value;\n return newValue === this._value ? this : new CompletePromise(newValue);\n } catch (ex) {\n return new ExceptionPromise(ex);\n }\n }\n }, {\n supportedForProcessing: false\n }\n );\n\n //\n // Promise is the user-creatable WinJS.Promise object.\n //\n\n function timeout(timeoutMS) {\n var id;\n return new Promise(\n function (c) {\n if (timeoutMS) {\n id = _Global.setTimeout(c, timeoutMS);\n } else {\n _BaseCoreUtils._setImmediate(c);\n }\n },\n function () {\n if (id) {\n _Global.clearTimeout(id);\n }\n }\n );\n }\n\n function timeoutWithPromise(timeout, promise) {\n var cancelPromise = function () { promise.cancel(); };\n var cancelTimeout = function () { timeout.cancel(); };\n timeout.then(cancelPromise);\n promise.then(cancelTimeout, cancelTimeout);\n return promise;\n }\n\n var staticCanceledPromise;\n\n var Promise = _Base.Class.derive(PromiseStateMachine,\n function Promise_ctor(init, oncancel) {\n /// \n /// \n /// A promise provides a mechanism to schedule work to be done on a value that\n /// has not yet been computed. It is a convenient abstraction for managing\n /// interactions with asynchronous APIs.\n /// \n /// \n /// The function that is called during construction of the promise. The function\n /// is given three arguments (complete, error, progress). Inside this function\n /// you should add event listeners for the notifications supported by this value.\n /// \n /// \n /// The function to call if a consumer of this promise wants\n /// to cancel its undone work. Promises are not required to\n /// support cancellation.\n /// \n /// \n\n if (tagWithStack && (tagWithStack === true || (tagWithStack & tag.promise))) {\n this._stack = Promise._getStack();\n }\n\n this._oncancel = oncancel;\n this._setState(state_created);\n this._run();\n\n try {\n var complete = this._completed.bind(this);\n var error = this._error.bind(this);\n var progress = this._progress.bind(this);\n init(complete, error, progress);\n } catch (ex) {\n this._setExceptionValue(ex);\n }\n }, {\n _oncancel: null,\n\n _cancelAction: function () {\n // BEGIN monaco change\n try {\n if (this._oncancel) {\n this._oncancel();\n } else {\n throw new Error('Promise did not implement oncancel');\n }\n } catch (ex) {\n // Access fields to get them created\n var msg = ex.message;\n var stack = ex.stack;\n promiseEventListeners.dispatchEvent('error', ex);\n }\n // END monaco change\n },\n _cleanupAction: function () { this._oncancel = null; }\n }, {\n\n addEventListener: function Promise_addEventListener(eventType, listener, capture) {\n /// \n /// \n /// Adds an event listener to the control.\n /// \n /// \n /// The type (name) of the event.\n /// \n /// \n /// The listener to invoke when the event is raised.\n /// \n /// \n /// Specifies whether or not to initiate capture.\n /// \n /// \n promiseEventListeners.addEventListener(eventType, listener, capture);\n },\n any: function Promise_any(values) {\n /// \n /// \n /// Returns a promise that is fulfilled when one of the input promises\n /// has been fulfilled.\n /// \n /// \n /// An array that contains promise objects or objects whose property\n /// values include promise objects.\n /// \n /// \n /// A promise that on fulfillment yields the value of the input (complete or error).\n /// \n /// \n return new Promise(\n function (complete, error) {\n var keys = Object.keys(values);\n if (keys.length === 0) {\n complete();\n }\n var canceled = 0;\n keys.forEach(function (key) {\n Promise.as(values[key]).then(\n function () { complete({ key: key, value: values[key] }); },\n function (e) {\n if (e instanceof Error && e.name === canceledName) {\n if ((++canceled) === keys.length) {\n complete(Promise.cancel);\n }\n return;\n }\n error({ key: key, value: values[key] });\n }\n );\n });\n },\n function () {\n var keys = Object.keys(values);\n keys.forEach(function (key) {\n var promise = Promise.as(values[key]);\n if (typeof promise.cancel === \"function\") {\n promise.cancel();\n }\n });\n }\n );\n },\n as: function Promise_as(value) {\n /// \n /// \n /// Returns a promise. If the object is already a promise it is returned;\n /// otherwise the object is wrapped in a promise.\n /// \n /// \n /// The value to be treated as a promise.\n /// \n /// \n /// A promise.\n /// \n /// \n if (value && typeof value === \"object\" && typeof value.then === \"function\") {\n return value;\n }\n return new CompletePromise(value);\n },\n /// \n /// Canceled promise value, can be returned from a promise completion handler\n /// to indicate cancelation of the promise chain.\n /// \n cancel: {\n get: function () {\n return (staticCanceledPromise = staticCanceledPromise || new ErrorPromise(new _ErrorFromName(canceledName)));\n }\n },\n dispatchEvent: function Promise_dispatchEvent(eventType, details) {\n /// \n /// \n /// Raises an event of the specified type and properties.\n /// \n /// \n /// The type (name) of the event.\n /// \n /// \n /// The set of additional properties to be attached to the event object.\n /// \n /// \n /// Specifies whether preventDefault was called on the event.\n /// \n /// \n return promiseEventListeners.dispatchEvent(eventType, details);\n },\n is: function Promise_is(value) {\n /// \n /// \n /// Determines whether a value fulfills the promise contract.\n /// \n /// \n /// A value that may be a promise.\n /// \n /// \n /// true if the specified value is a promise, otherwise false.\n /// \n /// \n return value && typeof value === \"object\" && typeof value.then === \"function\";\n },\n join: function Promise_join(values) {\n /// \n /// \n /// Creates a promise that is fulfilled when all the values are fulfilled.\n /// \n /// \n /// An object whose fields contain values, some of which may be promises.\n /// \n /// \n /// A promise whose value is an object with the same field names as those of the object in the values parameter, where\n /// each field value is the fulfilled value of a promise.\n /// \n /// \n return new Promise(\n function (complete, error, progress) {\n var keys = Object.keys(values);\n var errors = Array.isArray(values) ? [] : {};\n var results = Array.isArray(values) ? [] : {};\n var undefineds = 0;\n var pending = keys.length;\n var argDone = function (key) {\n if ((--pending) === 0) {\n var errorCount = Object.keys(errors).length;\n if (errorCount === 0) {\n complete(results);\n } else {\n var canceledCount = 0;\n keys.forEach(function (key) {\n var e = errors[key];\n if (e instanceof Error && e.name === canceledName) {\n canceledCount++;\n }\n });\n if (canceledCount === errorCount) {\n complete(Promise.cancel);\n } else {\n error(errors);\n }\n }\n } else {\n progress({ Key: key, Done: true });\n }\n };\n keys.forEach(function (key) {\n var value = values[key];\n if (value === undefined) {\n undefineds++;\n } else {\n Promise.then(value,\n function (value) { results[key] = value; argDone(key); },\n function (value) { errors[key] = value; argDone(key); }\n );\n }\n });\n pending -= undefineds;\n if (pending === 0) {\n complete(results);\n return;\n }\n },\n function () {\n Object.keys(values).forEach(function (key) {\n var promise = Promise.as(values[key]);\n if (typeof promise.cancel === \"function\") {\n promise.cancel();\n }\n });\n }\n );\n },\n removeEventListener: function Promise_removeEventListener(eventType, listener, capture) {\n /// \n /// \n /// Removes an event listener from the control.\n /// \n /// \n /// The type (name) of the event.\n /// \n /// \n /// The listener to remove.\n /// \n /// \n /// Specifies whether or not to initiate capture.\n /// \n /// \n promiseEventListeners.removeEventListener(eventType, listener, capture);\n },\n supportedForProcessing: false,\n then: function Promise_then(value, onComplete, onError, onProgress) {\n /// \n /// \n /// A static version of the promise instance method then().\n /// \n /// \n /// the value to be treated as a promise.\n /// \n /// \n /// The function to be called if the promise is fulfilled with a value.\n /// If it is null, the promise simply\n /// returns the value. The value is passed as the single argument.\n /// \n /// \n /// The function to be called if the promise is fulfilled with an error. The error\n /// is passed as the single argument.\n /// \n /// \n /// The function to be called if the promise reports progress. Data about the progress\n /// is passed as the single argument. Promises are not required to support\n /// progress.\n /// \n /// \n /// A promise whose value is the result of executing the provided complete function.\n /// \n /// \n return Promise.as(value).then(onComplete, onError, onProgress);\n },\n thenEach: function Promise_thenEach(values, onComplete, onError, onProgress) {\n /// \n /// \n /// Performs an operation on all the input promises and returns a promise\n /// that has the shape of the input and contains the result of the operation\n /// that has been performed on each input.\n /// \n /// \n /// A set of values (which could be either an array or an object) of which some or all are promises.\n /// \n /// \n /// The function to be called if the promise is fulfilled with a value.\n /// If the value is null, the promise returns the value.\n /// The value is passed as the single argument.\n /// \n /// \n /// The function to be called if the promise is fulfilled with an error. The error\n /// is passed as the single argument.\n /// \n /// \n /// The function to be called if the promise reports progress. Data about the progress\n /// is passed as the single argument. Promises are not required to support\n /// progress.\n /// \n /// \n /// A promise that is the result of calling Promise.join on the values parameter.\n /// \n /// \n var result = Array.isArray(values) ? [] : {};\n Object.keys(values).forEach(function (key) {\n result[key] = Promise.as(values[key]).then(onComplete, onError, onProgress);\n });\n return Promise.join(result);\n },\n timeout: function Promise_timeout(time, promise) {\n /// \n /// \n /// Creates a promise that is fulfilled after a timeout.\n /// \n /// \n /// The timeout period in milliseconds. If this value is zero or not specified\n /// setImmediate is called, otherwise setTimeout is called.\n /// \n /// \n /// A promise that will be canceled if it doesn't complete before the\n /// timeout has expired.\n /// \n /// \n /// A promise that is completed asynchronously after the specified timeout.\n /// \n /// \n var to = timeout(time);\n return promise ? timeoutWithPromise(to, promise) : to;\n },\n wrap: function Promise_wrap(value) {\n /// \n /// \n /// Wraps a non-promise value in a promise. You can use this function if you need\n /// to pass a value to a function that requires a promise.\n /// \n /// \n /// Some non-promise value to be wrapped in a promise.\n /// \n /// \n /// A promise that is successfully fulfilled with the specified value\n /// \n /// \n return new CompletePromise(value);\n },\n wrapError: function Promise_wrapError(error) {\n /// \n /// \n /// Wraps a non-promise error value in a promise. You can use this function if you need\n /// to pass an error to a function that requires a promise.\n /// \n /// \n /// A non-promise error value to be wrapped in a promise.\n /// \n /// \n /// A promise that is in an error state with the specified value.\n /// \n /// \n return new ErrorPromise(error);\n },\n\n _veryExpensiveTagWithStack: {\n get: function () { return tagWithStack; },\n set: function (value) { tagWithStack = value; }\n },\n _veryExpensiveTagWithStack_tag: tag,\n _getStack: function () {\n if (_Global.Debug && _Global.Debug.debuggerEnabled) {\n try { throw new Error(); } catch (e) { return e.stack; }\n }\n },\n\n _cancelBlocker: function Promise__cancelBlocker(input, oncancel) {\n //\n // Returns a promise which on cancelation will still result in downstream cancelation while\n // protecting the promise 'input' from being canceled which has the effect of allowing\n // 'input' to be shared amoung various consumers.\n //\n if (!Promise.is(input)) {\n return Promise.wrap(input);\n }\n var complete;\n var error;\n var output = new Promise(\n function (c, e) {\n complete = c;\n error = e;\n },\n function () {\n complete = null;\n error = null;\n oncancel && oncancel();\n }\n );\n input.then(\n function (v) { complete && complete(v); },\n function (e) { error && error(e); }\n );\n return output;\n },\n\n }\n );\n Object.defineProperties(Promise, _Events.createEventProperties(errorET));\n\n Promise._doneHandler = function (value) {\n _BaseCoreUtils._setImmediate(function Promise_done_rethrow() {\n throw value;\n });\n };\n\n return {\n PromiseStateMachine: PromiseStateMachine,\n Promise: Promise,\n state_created: state_created\n };\n});\n\n_winjs(\"WinJS/Promise\", [\"WinJS/Core/_Base\",\"WinJS/Promise/_StateMachine\"], function promiseInit( _Base, _StateMachine) {\n \"use strict\";\n\n _Base.Namespace.define(\"WinJS\", {\n Promise: _StateMachine.Promise\n });\n\n return _StateMachine.Promise;\n});\n\nvar exported = _modules[\"WinJS/Core/_WinJS\"];\n\nif (typeof exports === 'undefined' && typeof define === 'function' && define.amd) {\n define(\"vs/base/common/winjs.base.raw\", exported);\n} else {\n module.exports = exported;\n}\n\nif (typeof process !== 'undefined' && typeof process.nextTick === 'function') {\n _modules[\"WinJS/Core/_BaseCoreUtils\"]._setImmediate = function(handler) {\n return process.nextTick(handler);\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 *--------------------------------------------------------------------------------------------*/\n\ndefine(__m[8/*vs/base/common/winjs.base*/], __M([539/*vs/base/common/winjs.base.raw*/]), function (winjs) {\n\t'use strict';\n\treturn {\n\t\tPromise: winjs.Promise,\n\t\tTPromise: winjs.Promise,\n\t\tPPromise: winjs.Promise\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport platform = require('vs/base/common/platform');\nimport types = require('vs/base/common/types');\nimport { IAction } from 'vs/base/common/actions';\nimport Severity from 'vs/base/common/severity';\nimport { TPromise, IPromiseError, IPromiseErrorDetail } from 'vs/base/common/winjs.base';\n\n// ------ BEGIN Hook up error listeners to winjs promises\n\nlet outstandingPromiseErrors: { [id: string]: IPromiseErrorDetail; } = {};\nfunction promiseErrorHandler(e: IPromiseError): void {\n\n\t//\n\t// e.detail looks like: { exception, error, promise, handler, id, parent }\n\t//\n\tvar details = e.detail;\n\tvar id = details.id;\n\n\t// If the error has a parent promise then this is not the origination of the\n\t// error so we check if it has a handler, and if so we mark that the error\n\t// was handled by removing it from outstandingPromiseErrors\n\t//\n\tif (details.parent) {\n\t\tif (details.handler && outstandingPromiseErrors) {\n\t\t\tdelete outstandingPromiseErrors[id];\n\t\t}\n\t\treturn;\n\t}\n\n\t// Indicate that this error was originated and needs to be handled\n\toutstandingPromiseErrors[id] = details;\n\n\t// The first time the queue fills up this iteration, schedule a timeout to\n\t// check if any errors are still unhandled.\n\tif (Object.keys(outstandingPromiseErrors).length === 1) {\n\t\tsetTimeout(function () {\n\t\t\tvar errors = outstandingPromiseErrors;\n\t\t\toutstandingPromiseErrors = {};\n\t\t\tObject.keys(errors).forEach(function (errorId) {\n\t\t\t\tvar error = errors[errorId];\n\t\t\t\tif (error.exception) {\n\t\t\t\t\tonUnexpectedError(error.exception);\n\t\t\t\t} else if (error.error) {\n\t\t\t\t\tonUnexpectedError(error.error);\n\t\t\t\t}\n\t\t\t\tconsole.log('WARNING: Promise with no error callback:' + error.id);\n\t\t\t\tconsole.log(error);\n\t\t\t\tif (error.exception) {\n\t\t\t\t\tconsole.log(error.exception.stack);\n\t\t\t\t}\n\t\t\t});\n\t\t}, 0);\n\t}\n}\nTPromise.addEventListener('error', promiseErrorHandler);\n\n// ------ END Hook up error listeners to winjs promises\n\nexport interface ErrorListenerCallback {\n\t(error: any): void;\n}\n\nexport interface ErrorListenerUnbind {\n\t(): void;\n}\n\n// Avoid circular dependency on EventEmitter by implementing a subset of the interface.\nexport class ErrorHandler {\n\tprivate unexpectedErrorHandler: (e: any) => void;\n\tprivate listeners: ErrorListenerCallback[];\n\n\tconstructor() {\n\n\t\tthis.listeners = [];\n\n\t\tthis.unexpectedErrorHandler = function (e: any) {\n\t\t\tplatform.setTimeout(() => {\n\t\t\t\tif (e.stack) {\n\t\t\t\t\tthrow new Error(e.message + '\\n\\n' + e.stack);\n\t\t\t\t}\n\n\t\t\t\tthrow e;\n\t\t\t}, 0);\n\t\t};\n\t}\n\n\tpublic addListener(listener: ErrorListenerCallback): ErrorListenerUnbind {\n\t\tthis.listeners.push(listener);\n\n\t\treturn () => {\n\t\t\tthis._removeListener(listener);\n\t\t};\n\t}\n\n\tprivate emit(e: any): void {\n\t\tthis.listeners.forEach((listener) => {\n\t\t\tlistener(e);\n\t\t});\n\t}\n\n\tprivate _removeListener(listener: ErrorListenerCallback): void {\n\t\tthis.listeners.splice(this.listeners.indexOf(listener), 1);\n\t}\n\n\tpublic setUnexpectedErrorHandler(newUnexpectedErrorHandler: (e: any) => void): void {\n\t\tthis.unexpectedErrorHandler = newUnexpectedErrorHandler;\n\t}\n\n\tpublic getUnexpectedErrorHandler(): (e: any) => void {\n\t\treturn this.unexpectedErrorHandler;\n\t}\n\n\tpublic onUnexpectedError(e: any): void {\n\t\tthis.unexpectedErrorHandler(e);\n\t\tthis.emit(e);\n\t}\n\n\t// For external errors, we don't want the listeners to be called\n\tpublic onUnexpectedExternalError(e: any): void {\n\t\tthis.unexpectedErrorHandler(e);\n\t}\n}\n\nexport let errorHandler = new ErrorHandler();\n\nexport function setUnexpectedErrorHandler(newUnexpectedErrorHandler: (e: any) => void): void {\n\terrorHandler.setUnexpectedErrorHandler(newUnexpectedErrorHandler);\n}\n\nexport function onUnexpectedError(e: any): void {\n\n\t// ignore errors from cancelled promises\n\tif (!isPromiseCanceledError(e)) {\n\t\terrorHandler.onUnexpectedError(e);\n\t}\n}\n\nexport function onUnexpectedExternalError(e: any): void {\n\n\t// ignore errors from cancelled promises\n\tif (!isPromiseCanceledError(e)) {\n\t\terrorHandler.onUnexpectedExternalError(e);\n\t}\n}\n\nexport function onUnexpectedPromiseError(promise: TPromise): TPromise {\n\treturn promise.then(null, onUnexpectedError);\n}\n\nexport function transformErrorForSerialization(error: any): any {\n\tif (error instanceof Error) {\n\t\tlet { name, message } = error;\n\t\tlet stack: string = (error).stacktrace || (error).stack;\n\t\treturn {\n\t\t\t$isError: true,\n\t\t\tname,\n\t\t\tmessage,\n\t\t\tstack\n\t\t};\n\t}\n\n\t// return as is\n\treturn error;\n}\n\nconst canceledName = 'Canceled';\n\n/**\n * Checks if the given error is a promise in canceled state\n */\nexport function isPromiseCanceledError(error: any): boolean {\n\treturn error instanceof Error && error.name === canceledName && error.message === canceledName;\n}\n\n/**\n * Returns an error that signals cancellation.\n */\nexport function canceled(): Error {\n\tlet error = new Error(canceledName);\n\terror.name = error.message;\n\treturn error;\n}\n\n/**\n * Returns an error that signals something is not implemented.\n */\nexport function notImplemented(): Error {\n\treturn new Error('Not Implemented');\n}\n\nexport function illegalArgument(name?: string): Error {\n\tif (name) {\n\t\treturn new Error(`Illegal argument: ${name}`);\n\t} else {\n\t\treturn new Error('Illegal argument');\n\t}\n}\n\nexport function illegalState(name?: string): Error {\n\tif (name) {\n\t\treturn new Error(`Illegal state: ${name}`);\n\t} else {\n\t\treturn new Error('Illegal state');\n\t}\n}\n\nexport function readonly(name?: string): Error {\n\treturn name\n\t\t? new Error(`readonly property '${name} cannot be changed'`)\n\t\t: new Error('readonly property cannot be changed');\n}\n\nexport interface IErrorOptions {\n\tseverity?: Severity;\n\tactions?: IAction[];\n}\n\nexport function create(message: string, options: IErrorOptions = {}): Error {\n\tlet result = new Error(message);\n\n\tif (types.isNumber(options.severity)) {\n\t\t(result).severity = options.severity;\n\t}\n\n\tif (options.actions) {\n\t\t(result).actions = options.actions;\n\t}\n\n\treturn result;\n}\n\nexport function getErrorMessage(err: any): string {\n\tif (!err) {\n\t\treturn 'Error';\n\t}\n\n\tif (err.message) {\n\t\treturn err.message;\n\t}\n\n\tif (err.stack) {\n\t\treturn err.stack.split('\\n')[0];\n\t}\n\n\treturn String(err);\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'use strict';\n\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { onUnexpectedError } from 'vs/base/common/errors';\n\nexport default class CallbackList {\n\n\tprivate _callbacks: Function[];\n\tprivate _contexts: any[];\n\n\tpublic add(callback: Function, context: any = null, bucket?: IDisposable[]): void {\n\t\tif (!this._callbacks) {\n\t\t\tthis._callbacks = [];\n\t\t\tthis._contexts = [];\n\t\t}\n\t\tthis._callbacks.push(callback);\n\t\tthis._contexts.push(context);\n\n\t\tif (Array.isArray(bucket)) {\n\t\t\tbucket.push({ dispose: () => this.remove(callback, context) });\n\t\t}\n\t}\n\n\tpublic remove(callback: Function, context: any = null): void {\n\t\tif (!this._callbacks) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet foundCallbackWithDifferentContext = false;\n\t\tfor (var i = 0, len = this._callbacks.length; i < len; i++) {\n\t\t\tif (this._callbacks[i] === callback) {\n\t\t\t\tif (this._contexts[i] === context) {\n\t\t\t\t\t// callback & context match => remove it\n\t\t\t\t\tthis._callbacks.splice(i, 1);\n\t\t\t\t\tthis._contexts.splice(i, 1);\n\t\t\t\t\treturn;\n\t\t\t\t} else {\n\t\t\t\t\tfoundCallbackWithDifferentContext = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (foundCallbackWithDifferentContext) {\n\t\t\tthrow new Error('When adding a listener with a context, you should remove it with the same context');\n\t\t}\n\t}\n\n\tpublic invoke(...args: any[]): any[] {\n\t\tif (!this._callbacks) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst ret: any[] = [],\n\t\t\tcallbacks = this._callbacks.slice(0),\n\t\t\tcontexts = this._contexts.slice(0);\n\n\t\tfor (var i = 0, len = callbacks.length; i < len; i++) {\n\t\t\ttry {\n\t\t\t\tret.push(callbacks[i].apply(contexts[i], args));\n\t\t\t} catch (e) {\n\t\t\t\tonUnexpectedError(e);\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t}\n\n\tpublic isEmpty(): boolean {\n\t\treturn !this._callbacks || this._callbacks.length === 0;\n\t}\n\n\tpublic entries(): [Function, any][] {\n\t\tif (!this._callbacks) {\n\t\t\treturn [];\n\t\t}\n\t\treturn this._callbacks.map((fn, index) => <[Function, any]>[fn, this._contexts[index]]);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._callbacks = undefined;\n\t\tthis._contexts = undefined;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { IDisposable, toDisposable, combinedDisposable } from 'vs/base/common/lifecycle';\nimport CallbackList from 'vs/base/common/callbackList';\nimport { EventEmitter } from 'vs/base/common/eventEmitter';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { once as onceFn } from 'vs/base/common/functional';\n\n/**\n * To an event a function with one or zero parameters\n * can be subscribed. The event is the subscriber function itself.\n */\ninterface Event {\n\t(listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[]): IDisposable;\n}\n\nnamespace Event {\n\tconst _disposable = { dispose() { } };\n\texport const None: Event = function () { return _disposable; };\n}\n\nexport default Event;\n\nexport interface EmitterOptions {\n\tonFirstListenerAdd?: Function;\n\tonFirstListenerDidAdd?: Function;\n\tonListenerDidAdd?: Function;\n\tonLastListenerRemove?: Function;\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\tclass Document {\n\n\t\tprivate _onDidChange = new Emitter<(value:string)=>any>();\n\n\t\tpublic onDidChange = this._onDidChange.event;\n\n\t\t// getter-style\n\t\t// get onDidChange(): Event<(value:string)=>any> {\n\t\t// \treturn this._onDidChange.event;\n\t\t// }\n\n\t\tprivate _doIt() {\n\t\t\t//...\n\t\t\tthis._onDidChange.fire(value);\n\t\t}\n\t}\n */\nexport class Emitter {\n\n\tprivate static _noop = function () { };\n\n\tprivate _event: Event;\n\tprivate _callbacks: CallbackList;\n\tprivate _disposed: boolean;\n\n\tconstructor(private _options?: EmitterOptions) {\n\n\t}\n\n\t/**\n\t * For the public to allow to subscribe\n\t * to events from this Emitter\n\t */\n\tget event(): Event {\n\t\tif (!this._event) {\n\t\t\tthis._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[]) => {\n\t\t\t\tif (!this._callbacks) {\n\t\t\t\t\tthis._callbacks = new CallbackList();\n\t\t\t\t}\n\n\t\t\t\tconst firstListener = this._callbacks.isEmpty();\n\n\t\t\t\tif (firstListener && this._options && this._options.onFirstListenerAdd) {\n\t\t\t\t\tthis._options.onFirstListenerAdd(this);\n\t\t\t\t}\n\n\t\t\t\tthis._callbacks.add(listener, thisArgs);\n\n\t\t\t\tif (firstListener && this._options && this._options.onFirstListenerDidAdd) {\n\t\t\t\t\tthis._options.onFirstListenerDidAdd(this);\n\t\t\t\t}\n\n\t\t\t\tif (this._options && this._options.onListenerDidAdd) {\n\t\t\t\t\tthis._options.onListenerDidAdd(this, listener, thisArgs);\n\t\t\t\t}\n\n\t\t\t\tlet result: IDisposable;\n\t\t\t\tresult = {\n\t\t\t\t\tdispose: () => {\n\t\t\t\t\t\tresult.dispose = Emitter._noop;\n\t\t\t\t\t\tif (!this._disposed) {\n\t\t\t\t\t\t\tthis._callbacks.remove(listener, thisArgs);\n\t\t\t\t\t\t\tif (this._options && this._options.onLastListenerRemove && this._callbacks.isEmpty()) {\n\t\t\t\t\t\t\t\tthis._options.onLastListenerRemove(this);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tif (Array.isArray(disposables)) {\n\t\t\t\t\tdisposables.push(result);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t};\n\t\t}\n\t\treturn this._event;\n\t}\n\n\t/**\n\t * To be kept private to fire an event to\n\t * subscribers\n\t */\n\tfire(event?: T): any {\n\t\tif (this._callbacks) {\n\t\t\tthis._callbacks.invoke.call(this._callbacks, event);\n\t\t}\n\t}\n\n\tdispose() {\n\t\tif (this._callbacks) {\n\t\t\tthis._callbacks.dispose();\n\t\t\tthis._callbacks = undefined;\n\t\t\tthis._disposed = true;\n\t\t}\n\t}\n}\n\nexport class EventMultiplexer implements IDisposable {\n\n\tprivate emitter: Emitter;\n\tprivate hasListeners = false;\n\tprivate events: { event: Event; listener: IDisposable; }[] = [];\n\n\tconstructor() {\n\t\tthis.emitter = new Emitter({\n\t\t\tonFirstListenerAdd: () => this.onFirstListenerAdd(),\n\t\t\tonLastListenerRemove: () => this.onLastListenerRemove()\n\t\t});\n\t}\n\n\tget event(): Event {\n\t\treturn this.emitter.event;\n\t}\n\n\tadd(event: Event): IDisposable {\n\t\tconst e = { event: event, listener: null };\n\t\tthis.events.push(e);\n\n\t\tif (this.hasListeners) {\n\t\t\tthis.hook(e);\n\t\t}\n\n\t\tconst dispose = () => {\n\t\t\tif (this.hasListeners) {\n\t\t\t\tthis.unhook(e);\n\t\t\t}\n\n\t\t\tconst idx = this.events.indexOf(e);\n\t\t\tthis.events.splice(idx, 1);\n\t\t};\n\n\t\treturn toDisposable(onceFn(dispose));\n\t}\n\n\tprivate onFirstListenerAdd(): void {\n\t\tthis.hasListeners = true;\n\t\tthis.events.forEach(e => this.hook(e));\n\t}\n\n\tprivate onLastListenerRemove(): void {\n\t\tthis.hasListeners = false;\n\t\tthis.events.forEach(e => this.unhook(e));\n\t}\n\n\tprivate hook(e: { event: Event; listener: IDisposable; }): void {\n\t\te.listener = e.event(r => this.emitter.fire(r));\n\t}\n\n\tprivate unhook(e: { event: Event; listener: IDisposable; }): void {\n\t\te.listener.dispose();\n\t\te.listener = null;\n\t}\n\n\tdispose(): void {\n\t\tthis.emitter.dispose();\n\t}\n}\n\n/**\n * Creates an Event which is backed-up by the event emitter. This allows\n * to use the existing eventing pattern and is likely using less memory.\n * Sample:\n *\n * \tclass Document {\n *\n *\t\tprivate _eventbus = new EventEmitter();\n *\n *\t\tpublic onDidChange = fromEventEmitter(this._eventbus, 'changed');\n *\n *\t\t// getter-style\n *\t\t// get onDidChange(): Event<(value:string)=>any> {\n *\t\t// \tcache fromEventEmitter result and return\n *\t\t// }\n *\n *\t\tprivate _doIt() {\n *\t\t\t// ...\n *\t\t\tthis._eventbus.emit('changed', value)\n *\t\t}\n *\t}\n */\nexport function fromEventEmitter(emitter: EventEmitter, eventType: string): Event {\n\treturn function (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[]): IDisposable {\n\t\tconst result = emitter.addListener(eventType, function () {\n\t\t\tlistener.apply(thisArgs, arguments);\n\t\t});\n\t\tif (Array.isArray(disposables)) {\n\t\t\tdisposables.push(result);\n\t\t}\n\t\treturn result;\n\t};\n}\n\nexport function fromCallback(fn: (handler: (e: T) => void) => IDisposable): Event {\n\tlet listener: IDisposable;\n\n\tconst emitter = new Emitter({\n\t\tonFirstListenerAdd: () => listener = fn(e => emitter.fire(e)),\n\t\tonLastListenerRemove: () => listener.dispose()\n\t});\n\n\treturn emitter.event;\n}\n\nexport function fromPromise(promise: TPromise): Event {\n\tconst emitter = new Emitter();\n\tlet shouldEmit = false;\n\n\tpromise\n\t\t.then(null, () => null)\n\t\t.then(() => {\n\t\t\tif (!shouldEmit) {\n\t\t\t\tsetTimeout(() => emitter.fire(), 0);\n\t\t\t} else {\n\t\t\t\temitter.fire();\n\t\t\t}\n\t\t});\n\n\tshouldEmit = true;\n\treturn emitter.event;\n}\n\nexport function toPromise(event: Event): TPromise {\n\treturn new TPromise(complete => {\n\t\tconst sub = event(e => {\n\t\t\tsub.dispose();\n\t\t\tcomplete(e);\n\t\t});\n\t});\n}\n\nexport function delayed(promise: TPromise>): Event {\n\tlet toCancel: TPromise = null;\n\tlet listener: IDisposable = null;\n\n\tconst emitter = new Emitter({\n\t\tonFirstListenerAdd() {\n\t\t\ttoCancel = promise.then(\n\t\t\t\tevent => listener = event(e => emitter.fire(e)),\n\t\t\t\t() => null\n\t\t\t);\n\t\t},\n\t\tonLastListenerRemove() {\n\t\t\tif (toCancel) {\n\t\t\t\ttoCancel.cancel();\n\t\t\t\ttoCancel = null;\n\t\t\t}\n\n\t\t\tif (listener) {\n\t\t\t\tlistener.dispose();\n\t\t\t\tlistener = null;\n\t\t\t}\n\t\t}\n\t});\n\n\treturn emitter.event;\n}\n\nexport function once(event: Event): Event {\n\treturn (listener, thisArgs = null, disposables?) => {\n\t\tconst result = event(e => {\n\t\t\tresult.dispose();\n\t\t\treturn listener.call(thisArgs, e);\n\t\t}, null, disposables);\n\n\t\treturn result;\n\t};\n}\n\nexport function any(...events: Event[]): Event {\n\treturn (listener, thisArgs = null, disposables?) => combinedDisposable(events.map(event => event(e => listener.call(thisArgs, e), null, disposables)));\n}\n\nexport function debounceEvent(event: Event, merger: (last: T, event: T) => T, delay?: number, leading?: boolean): Event;\nexport function debounceEvent(event: Event, merger: (last: O, event: I) => O, delay?: number, leading?: boolean): Event;\nexport function debounceEvent(event: Event, merger: (last: O, event: I) => O, delay: number = 100, leading = false): Event {\n\n\tlet subscription: IDisposable;\n\tlet output: O;\n\tlet handle: number;\n\n\tconst emitter = new Emitter({\n\t\tonFirstListenerAdd() {\n\t\t\tsubscription = event(cur => {\n\t\t\t\toutput = merger(output, cur);\n\t\t\t\tif (!handle && leading) {\n\t\t\t\t\temitter.fire(output);\n\t\t\t\t}\n\n\t\t\t\tclearTimeout(handle);\n\t\t\t\thandle = setTimeout(() => {\n\t\t\t\t\tlet _output = output;\n\t\t\t\t\toutput = undefined;\n\t\t\t\t\temitter.fire(_output);\n\t\t\t\t\thandle = null;\n\t\t\t\t}, delay);\n\t\t\t});\n\t\t},\n\t\tonLastListenerRemove() {\n\t\t\tsubscription.dispose();\n\t\t}\n\t});\n\n\treturn emitter.event;\n}\n\n/**\n * The EventDelayer 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\n\tprivate buffers: Function[][] = [];\n\n\twrapEvent(event: Event): Event {\n\t\treturn (listener, thisArgs?, disposables?) => {\n\t\t\treturn event(i => {\n\t\t\t\tconst buffer = this.buffers[this.buffers.length - 1];\n\n\t\t\t\tif (buffer) {\n\t\t\t\t\tbuffer.push(() => listener.call(thisArgs, i));\n\t\t\t\t} else {\n\t\t\t\t\tlistener.call(thisArgs, i);\n\t\t\t\t}\n\t\t\t}, void 0, disposables);\n\t\t};\n\t}\n\n\tbufferEvents(fn: () => void): void {\n\t\tconst buffer: Function[] = [];\n\t\tthis.buffers.push(buffer);\n\t\tfn();\n\t\tthis.buffers.pop();\n\t\tbuffer.forEach(flush => flush());\n\t}\n}\n\nexport interface IChainableEvent {\n\tevent: Event;\n\tmap(fn: (i: T) => O): IChainableEvent;\n\tfilter(fn: (e: T) => boolean): IChainableEvent;\n\ton(listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[]): IDisposable;\n}\n\nexport function mapEvent(event: Event, map: (i: I) => O): Event {\n\treturn (listener, thisArgs = null, disposables?) => event(i => listener.call(thisArgs, map(i)), null, disposables);\n}\n\nexport function filterEvent(event: Event, filter: (e: T) => boolean): Event {\n\treturn (listener, thisArgs = null, disposables?) => event(e => filter(e) && listener.call(thisArgs, e), null, disposables);\n}\n\nclass ChainableEvent implements IChainableEvent {\n\n\tget event(): Event { return this._event; }\n\n\tconstructor(private _event: Event) { }\n\n\tmap(fn: (i: T) => O): IChainableEvent {\n\t\treturn new ChainableEvent(mapEvent(this._event, fn));\n\t}\n\n\tfilter(fn: (e: T) => boolean): IChainableEvent {\n\t\treturn new ChainableEvent(filterEvent(this._event, fn));\n\t}\n\n\ton(listener, thisArgs, disposables: IDisposable[]) {\n\t\treturn this._event(listener, thisArgs, disposables);\n\t}\n}\n\nexport function chain(event: Event): IChainableEvent {\n\treturn new ChainableEvent(event);\n}\n\nexport function stopwatch(event: Event): Event {\n\tconst start = new Date().getTime();\n\treturn mapEvent(once(event), _ => new Date().getTime() - start);\n}\n\n/**\n * Buffers the provided event until a first listener comes\n * along, at which point fire all the events at once and\n * pipe the event from then on.\n *\n * ```typescript\n * const emitter = new Emitter();\n * const event = emitter.event;\n * const bufferedEvent = buffer(event);\n *\n * emitter.fire(1);\n * emitter.fire(2);\n * emitter.fire(3);\n * // nothing...\n *\n * const listener = bufferedEvent(num => console.log(num));\n * // 1, 2, 3\n *\n * emitter.fire(4);\n * // 4\n * ```\n */\nexport function buffer(event: Event, nextTick = false, buffer: T[] = []): Event {\n\tbuffer = buffer.slice();\n\n\tlet listener = event(e => {\n\t\tif (buffer) {\n\t\t\tbuffer.push(e);\n\t\t} else {\n\t\t\temitter.fire(e);\n\t\t}\n\t});\n\n\tconst flush = () => {\n\t\tbuffer.forEach(e => emitter.fire(e));\n\t\tbuffer = null;\n\t};\n\n\tconst emitter = new Emitter({\n\t\tonFirstListenerAdd() {\n\t\t\tif (!listener) {\n\t\t\t\tlistener = event(e => emitter.fire(e));\n\t\t\t}\n\t\t},\n\n\t\tonFirstListenerDidAdd() {\n\t\t\tif (buffer) {\n\t\t\t\tif (nextTick) {\n\t\t\t\t\tsetTimeout(flush);\n\t\t\t\t} else {\n\t\t\t\t\tflush();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tonLastListenerRemove() {\n\t\t\tlistener.dispose();\n\t\t\tlistener = null;\n\t\t}\n\t});\n\n\treturn emitter.event;\n}\n\n/**\n * Similar to `buffer` but it buffers indefinitely and repeats\n * the buffered events to every new listener.\n */\nexport function echo(event: Event, nextTick = false, buffer: T[] = []): Event {\n\tbuffer = buffer.slice();\n\n\tevent(e => {\n\t\tbuffer.push(e);\n\t\temitter.fire(e);\n\t});\n\n\tconst flush = (listener, thisArgs?) => buffer.forEach(e => listener.call(thisArgs, e));\n\n\tconst emitter = new Emitter({\n\t\tonListenerDidAdd(emitter, listener, thisArgs?) {\n\t\t\tif (nextTick) {\n\t\t\t\tsetTimeout(() => flush(listener, thisArgs));\n\t\t\t} else {\n\t\t\t\tflush(listener, thisArgs);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn emitter.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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as Platform from 'vs/base/common/platform';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { IDisposable } from 'vs/base/common/lifecycle';\n\nclass WindowManager {\n\n\tpublic static INSTANCE = new WindowManager();\n\n\t// --- Zoom Level\n\tprivate _zoomLevel: number = 0;\n\tprivate _lastZoomLevelChangeTime: number = 0;\n\tprivate _onDidChangeZoomLevel: Emitter = new Emitter();\n\n\tpublic onDidChangeZoomLevel: Event = this._onDidChangeZoomLevel.event;\n\tpublic getZoomLevel(): number {\n\t\treturn this._zoomLevel;\n\t}\n\tpublic getTimeSinceLastZoomLevelChanged(): number {\n\t\treturn Date.now() - this._lastZoomLevelChangeTime;\n\t}\n\tpublic setZoomLevel(zoomLevel: number, isTrusted: boolean): void {\n\t\tif (this._zoomLevel === zoomLevel) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._zoomLevel = zoomLevel;\n\t\t// See https://github.com/Microsoft/vscode/issues/26151\n\t\tthis._lastZoomLevelChangeTime = isTrusted ? 0 : Date.now();\n\t\tthis._onDidChangeZoomLevel.fire(this._zoomLevel);\n\t}\n\n\n\t// --- Zoom Factor\n\tprivate _zoomFactor: number = 0;\n\n\tpublic getZoomFactor(): number {\n\t\treturn this._zoomFactor;\n\t}\n\tpublic setZoomFactor(zoomFactor: number): void {\n\t\tthis._zoomFactor = zoomFactor;\n\t}\n\n\n\t// --- Pixel Ratio\n\tpublic getPixelRatio(): number {\n\t\tlet ctx = document.createElement('canvas').getContext('2d');\n\t\tlet dpr = window.devicePixelRatio || 1;\n\t\tlet bsr = (ctx).webkitBackingStorePixelRatio ||\n\t\t\t(ctx).mozBackingStorePixelRatio ||\n\t\t\t(ctx).msBackingStorePixelRatio ||\n\t\t\t(ctx).oBackingStorePixelRatio ||\n\t\t\t(ctx).backingStorePixelRatio || 1;\n\t\treturn dpr / bsr;\n\t}\n\n\t// --- Fullscreen\n\tprivate _fullscreen: boolean;\n\tprivate _onDidChangeFullscreen: Emitter = new Emitter();\n\n\tpublic onDidChangeFullscreen: Event = this._onDidChangeFullscreen.event;\n\tpublic setFullscreen(fullscreen: boolean): void {\n\t\tif (this._fullscreen === fullscreen) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._fullscreen = fullscreen;\n\t\tthis._onDidChangeFullscreen.fire();\n\t}\n\tpublic isFullscreen(): boolean {\n\t\treturn this._fullscreen;\n\t}\n\n\t// --- Accessibility\n\tprivate _accessibilitySupport = Platform.AccessibilitySupport.Unknown;\n\tprivate _onDidChangeAccessibilitySupport: Emitter = new Emitter();\n\n\tpublic onDidChangeAccessibilitySupport: Event = this._onDidChangeAccessibilitySupport.event;\n\tpublic setAccessibilitySupport(accessibilitySupport: Platform.AccessibilitySupport): void {\n\t\tif (this._accessibilitySupport === accessibilitySupport) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._accessibilitySupport = accessibilitySupport;\n\t\tthis._onDidChangeAccessibilitySupport.fire();\n\t}\n\tpublic getAccessibilitySupport(): Platform.AccessibilitySupport {\n\t\treturn this._accessibilitySupport;\n\t}\n\n\n}\n\n/** A zoom index, e.g. 1, 2, 3 */\nexport function setZoomLevel(zoomLevel: number, isTrusted: boolean): void {\n\tWindowManager.INSTANCE.setZoomLevel(zoomLevel, isTrusted);\n}\nexport function getZoomLevel(): number {\n\treturn WindowManager.INSTANCE.getZoomLevel();\n}\n/** Returns the time (in ms) since the zoom level was changed */\nexport function getTimeSinceLastZoomLevelChanged(): number {\n\treturn WindowManager.INSTANCE.getTimeSinceLastZoomLevelChanged();\n}\nexport function onDidChangeZoomLevel(callback: (zoomLevel: number) => void): IDisposable {\n\treturn WindowManager.INSTANCE.onDidChangeZoomLevel(callback);\n}\n\n/** The zoom scale for an index, e.g. 1, 1.2, 1.4 */\nexport function getZoomFactor(): number {\n\treturn WindowManager.INSTANCE.getZoomFactor();\n}\nexport function setZoomFactor(zoomFactor: number): void {\n\tWindowManager.INSTANCE.setZoomFactor(zoomFactor);\n}\n\nexport function getPixelRatio(): number {\n\treturn WindowManager.INSTANCE.getPixelRatio();\n}\n\nexport function setFullscreen(fullscreen: boolean): void {\n\tWindowManager.INSTANCE.setFullscreen(fullscreen);\n}\nexport function isFullscreen(): boolean {\n\treturn WindowManager.INSTANCE.isFullscreen();\n}\nexport function onDidChangeFullscreen(callback: () => void): IDisposable {\n\treturn WindowManager.INSTANCE.onDidChangeFullscreen(callback);\n}\n\nexport function setAccessibilitySupport(accessibilitySupport: Platform.AccessibilitySupport): void {\n\tWindowManager.INSTANCE.setAccessibilitySupport(accessibilitySupport);\n}\nexport function getAccessibilitySupport(): Platform.AccessibilitySupport {\n\treturn WindowManager.INSTANCE.getAccessibilitySupport();\n}\nexport function onDidChangeAccessibilitySupport(callback: () => void): IDisposable {\n\treturn WindowManager.INSTANCE.onDidChangeAccessibilitySupport(callback);\n}\n\nconst userAgent = navigator.userAgent;\n\nexport const isIE = (userAgent.indexOf('Trident') >= 0);\nexport const isEdge = (userAgent.indexOf('Edge/') >= 0);\nexport const isEdgeOrIE = isIE || isEdge;\n\nexport const isOpera = (userAgent.indexOf('Opera') >= 0);\nexport const isFirefox = (userAgent.indexOf('Firefox') >= 0);\nexport const isWebKit = (userAgent.indexOf('AppleWebKit') >= 0);\nexport const isChrome = (userAgent.indexOf('Chrome') >= 0);\nexport const isSafari = (userAgent.indexOf('Chrome') === -1) && (userAgent.indexOf('Safari') >= 0);\nexport const isIPad = (userAgent.indexOf('iPad') >= 0);\n\nexport const isChromev56 = (\n\tuserAgent.indexOf('Chrome/56.') >= 0\n\t// Edge likes to impersonate Chrome sometimes\n\t&& userAgent.indexOf('Edge/') === -1\n);\n\nexport const supportsTranslate3d = !isFirefox;\n\nexport function canUseTranslate3d(): boolean {\n\tif (!supportsTranslate3d) {\n\t\treturn false;\n\t}\n\n\tif (getZoomLevel() !== 0) {\n\t\treturn false;\n\t}\n\n\t// see https://github.com/Microsoft/vscode/issues/24483\n\tif (isChromev56) {\n\t\tconst pixelRatio = getPixelRatio();\n\t\tif (Math.floor(pixelRatio) !== pixelRatio) {\n\t\t\t// Not an integer\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn 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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport _Event, { Emitter, mapEvent } from 'vs/base/common/event';\n\nexport type EventHandler = HTMLElement | HTMLDocument | Window;\n\nexport interface IDomEvent {\n\t(element: EventHandler, type: 'MSContentZoom', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'MSGestureChange', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'MSGestureDoubleTap', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'MSGestureEnd', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'MSGestureHold', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'MSGestureStart', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'MSGestureTap', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'MSGotPointerCapture', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'MSInertiaStart', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'MSLostPointerCapture', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'MSManipulationStateChanged', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'MSPointerCancel', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'MSPointerDown', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'MSPointerEnter', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'MSPointerLeave', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'MSPointerMove', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'MSPointerOut', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'MSPointerOver', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'MSPointerUp', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'abort', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'activate', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'beforeactivate', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'beforecopy', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'beforecut', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'beforedeactivate', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'beforepaste', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'blur', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'canplay', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'canplaythrough', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'change', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'click', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'contextmenu', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'copy', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'cuechange', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'cut', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'dblclick', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'deactivate', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'drag', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'dragend', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'dragenter', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'dragleave', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'dragover', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'dragstart', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'drop', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'durationchange', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'emptied', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'ended', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'error', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'focus', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'gotpointercapture', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'input', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'keydown', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'keypress', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'keyup', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'load', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'loadeddata', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'loadedmetadata', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'loadstart', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'lostpointercapture', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'mousedown', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'mouseenter', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'mouseleave', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'mousemove', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'mouseout', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'mouseover', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'mouseup', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'mousewheel', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'paste', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'pause', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'play', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'playing', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'pointercancel', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'pointerdown', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'pointerenter', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'pointerleave', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'pointermove', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'pointerout', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'pointerover', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'pointerup', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'progress', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'ratechange', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'reset', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'scroll', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'seeked', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'seeking', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'select', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'selectstart', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'stalled', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'submit', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'suspend', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'timeupdate', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'touchcancel', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'touchend', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'touchmove', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'touchstart', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'volumechange', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'waiting', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'webkitfullscreenchange', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'webkitfullscreenerror', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: 'wheel', useCapture?: boolean): _Event;\n\t(element: EventHandler, type: string, useCapture?: boolean): _Event;\n}\n\nexport const domEvent: IDomEvent = (element: EventHandler, type: string, useCapture?: boolean) => {\n\tconst fn = e => emitter.fire(e);\n\tconst emitter = new Emitter({\n\t\tonFirstListenerAdd: () => {\n\t\t\telement.addEventListener(type, fn, useCapture);\n\t\t},\n\t\tonLastListenerRemove: () => {\n\t\t\telement.removeEventListener(type, fn, useCapture);\n\t\t}\n\t});\n\n\treturn emitter.event;\n};\n\nexport function stop(event: _Event): _Event {\n\treturn mapEvent(event, e => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\treturn e;\n\t});\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'use strict';\n\nimport { KeyCode, KeyCodeUtils, KeyMod, SimpleKeybinding } from 'vs/base/common/keyCodes';\nimport * as platform from 'vs/base/common/platform';\nimport * as browser from 'vs/base/browser/browser';\n\nlet KEY_CODE_MAP: { [keyCode: number]: KeyCode } = {};\n(function () {\n\tKEY_CODE_MAP[3] = KeyCode.PauseBreak; // VK_CANCEL 0x03 Control-break processing\n\tKEY_CODE_MAP[8] = KeyCode.Backspace;\n\tKEY_CODE_MAP[9] = KeyCode.Tab;\n\tKEY_CODE_MAP[13] = KeyCode.Enter;\n\tKEY_CODE_MAP[16] = KeyCode.Shift;\n\tKEY_CODE_MAP[17] = KeyCode.Ctrl;\n\tKEY_CODE_MAP[18] = KeyCode.Alt;\n\tKEY_CODE_MAP[19] = KeyCode.PauseBreak;\n\tKEY_CODE_MAP[20] = KeyCode.CapsLock;\n\tKEY_CODE_MAP[27] = KeyCode.Escape;\n\tKEY_CODE_MAP[32] = KeyCode.Space;\n\tKEY_CODE_MAP[33] = KeyCode.PageUp;\n\tKEY_CODE_MAP[34] = KeyCode.PageDown;\n\tKEY_CODE_MAP[35] = KeyCode.End;\n\tKEY_CODE_MAP[36] = KeyCode.Home;\n\tKEY_CODE_MAP[37] = KeyCode.LeftArrow;\n\tKEY_CODE_MAP[38] = KeyCode.UpArrow;\n\tKEY_CODE_MAP[39] = KeyCode.RightArrow;\n\tKEY_CODE_MAP[40] = KeyCode.DownArrow;\n\tKEY_CODE_MAP[45] = KeyCode.Insert;\n\tKEY_CODE_MAP[46] = KeyCode.Delete;\n\n\tKEY_CODE_MAP[48] = KeyCode.KEY_0;\n\tKEY_CODE_MAP[49] = KeyCode.KEY_1;\n\tKEY_CODE_MAP[50] = KeyCode.KEY_2;\n\tKEY_CODE_MAP[51] = KeyCode.KEY_3;\n\tKEY_CODE_MAP[52] = KeyCode.KEY_4;\n\tKEY_CODE_MAP[53] = KeyCode.KEY_5;\n\tKEY_CODE_MAP[54] = KeyCode.KEY_6;\n\tKEY_CODE_MAP[55] = KeyCode.KEY_7;\n\tKEY_CODE_MAP[56] = KeyCode.KEY_8;\n\tKEY_CODE_MAP[57] = KeyCode.KEY_9;\n\n\tKEY_CODE_MAP[65] = KeyCode.KEY_A;\n\tKEY_CODE_MAP[66] = KeyCode.KEY_B;\n\tKEY_CODE_MAP[67] = KeyCode.KEY_C;\n\tKEY_CODE_MAP[68] = KeyCode.KEY_D;\n\tKEY_CODE_MAP[69] = KeyCode.KEY_E;\n\tKEY_CODE_MAP[70] = KeyCode.KEY_F;\n\tKEY_CODE_MAP[71] = KeyCode.KEY_G;\n\tKEY_CODE_MAP[72] = KeyCode.KEY_H;\n\tKEY_CODE_MAP[73] = KeyCode.KEY_I;\n\tKEY_CODE_MAP[74] = KeyCode.KEY_J;\n\tKEY_CODE_MAP[75] = KeyCode.KEY_K;\n\tKEY_CODE_MAP[76] = KeyCode.KEY_L;\n\tKEY_CODE_MAP[77] = KeyCode.KEY_M;\n\tKEY_CODE_MAP[78] = KeyCode.KEY_N;\n\tKEY_CODE_MAP[79] = KeyCode.KEY_O;\n\tKEY_CODE_MAP[80] = KeyCode.KEY_P;\n\tKEY_CODE_MAP[81] = KeyCode.KEY_Q;\n\tKEY_CODE_MAP[82] = KeyCode.KEY_R;\n\tKEY_CODE_MAP[83] = KeyCode.KEY_S;\n\tKEY_CODE_MAP[84] = KeyCode.KEY_T;\n\tKEY_CODE_MAP[85] = KeyCode.KEY_U;\n\tKEY_CODE_MAP[86] = KeyCode.KEY_V;\n\tKEY_CODE_MAP[87] = KeyCode.KEY_W;\n\tKEY_CODE_MAP[88] = KeyCode.KEY_X;\n\tKEY_CODE_MAP[89] = KeyCode.KEY_Y;\n\tKEY_CODE_MAP[90] = KeyCode.KEY_Z;\n\n\tKEY_CODE_MAP[93] = KeyCode.ContextMenu;\n\n\tKEY_CODE_MAP[96] = KeyCode.NUMPAD_0;\n\tKEY_CODE_MAP[97] = KeyCode.NUMPAD_1;\n\tKEY_CODE_MAP[98] = KeyCode.NUMPAD_2;\n\tKEY_CODE_MAP[99] = KeyCode.NUMPAD_3;\n\tKEY_CODE_MAP[100] = KeyCode.NUMPAD_4;\n\tKEY_CODE_MAP[101] = KeyCode.NUMPAD_5;\n\tKEY_CODE_MAP[102] = KeyCode.NUMPAD_6;\n\tKEY_CODE_MAP[103] = KeyCode.NUMPAD_7;\n\tKEY_CODE_MAP[104] = KeyCode.NUMPAD_8;\n\tKEY_CODE_MAP[105] = KeyCode.NUMPAD_9;\n\tKEY_CODE_MAP[106] = KeyCode.NUMPAD_MULTIPLY;\n\tKEY_CODE_MAP[107] = KeyCode.NUMPAD_ADD;\n\tKEY_CODE_MAP[108] = KeyCode.NUMPAD_SEPARATOR;\n\tKEY_CODE_MAP[109] = KeyCode.NUMPAD_SUBTRACT;\n\tKEY_CODE_MAP[110] = KeyCode.NUMPAD_DECIMAL;\n\tKEY_CODE_MAP[111] = KeyCode.NUMPAD_DIVIDE;\n\n\tKEY_CODE_MAP[112] = KeyCode.F1;\n\tKEY_CODE_MAP[113] = KeyCode.F2;\n\tKEY_CODE_MAP[114] = KeyCode.F3;\n\tKEY_CODE_MAP[115] = KeyCode.F4;\n\tKEY_CODE_MAP[116] = KeyCode.F5;\n\tKEY_CODE_MAP[117] = KeyCode.F6;\n\tKEY_CODE_MAP[118] = KeyCode.F7;\n\tKEY_CODE_MAP[119] = KeyCode.F8;\n\tKEY_CODE_MAP[120] = KeyCode.F9;\n\tKEY_CODE_MAP[121] = KeyCode.F10;\n\tKEY_CODE_MAP[122] = KeyCode.F11;\n\tKEY_CODE_MAP[123] = KeyCode.F12;\n\tKEY_CODE_MAP[124] = KeyCode.F13;\n\tKEY_CODE_MAP[125] = KeyCode.F14;\n\tKEY_CODE_MAP[126] = KeyCode.F15;\n\tKEY_CODE_MAP[127] = KeyCode.F16;\n\tKEY_CODE_MAP[128] = KeyCode.F17;\n\tKEY_CODE_MAP[129] = KeyCode.F18;\n\tKEY_CODE_MAP[130] = KeyCode.F19;\n\n\tKEY_CODE_MAP[144] = KeyCode.NumLock;\n\tKEY_CODE_MAP[145] = KeyCode.ScrollLock;\n\n\tKEY_CODE_MAP[186] = KeyCode.US_SEMICOLON;\n\tKEY_CODE_MAP[187] = KeyCode.US_EQUAL;\n\tKEY_CODE_MAP[188] = KeyCode.US_COMMA;\n\tKEY_CODE_MAP[189] = KeyCode.US_MINUS;\n\tKEY_CODE_MAP[190] = KeyCode.US_DOT;\n\tKEY_CODE_MAP[191] = KeyCode.US_SLASH;\n\tKEY_CODE_MAP[192] = KeyCode.US_BACKTICK;\n\tKEY_CODE_MAP[193] = KeyCode.ABNT_C1;\n\tKEY_CODE_MAP[194] = KeyCode.ABNT_C2;\n\tKEY_CODE_MAP[219] = KeyCode.US_OPEN_SQUARE_BRACKET;\n\tKEY_CODE_MAP[220] = KeyCode.US_BACKSLASH;\n\tKEY_CODE_MAP[221] = KeyCode.US_CLOSE_SQUARE_BRACKET;\n\tKEY_CODE_MAP[222] = KeyCode.US_QUOTE;\n\tKEY_CODE_MAP[223] = KeyCode.OEM_8;\n\n\tKEY_CODE_MAP[226] = KeyCode.OEM_102;\n\n\t/**\n\t * https://lists.w3.org/Archives/Public/www-dom/2010JulSep/att-0182/keyCode-spec.html\n\t * If an Input Method Editor is processing key input and the event is keydown, return 229.\n\t */\n\tKEY_CODE_MAP[229] = KeyCode.KEY_IN_COMPOSITION;\n\n\tif (browser.isIE) {\n\t\tKEY_CODE_MAP[91] = KeyCode.Meta;\n\t} else if (browser.isFirefox) {\n\t\tKEY_CODE_MAP[59] = KeyCode.US_SEMICOLON;\n\t\tKEY_CODE_MAP[107] = KeyCode.US_EQUAL;\n\t\tKEY_CODE_MAP[109] = KeyCode.US_MINUS;\n\t\tif (platform.isMacintosh) {\n\t\t\tKEY_CODE_MAP[224] = KeyCode.Meta;\n\t\t}\n\t} else if (browser.isWebKit) {\n\t\tKEY_CODE_MAP[91] = KeyCode.Meta;\n\t\tif (platform.isMacintosh) {\n\t\t\t// the two meta keys in the Mac have different key codes (91 and 93)\n\t\t\tKEY_CODE_MAP[93] = KeyCode.Meta;\n\t\t} else {\n\t\t\tKEY_CODE_MAP[92] = KeyCode.Meta;\n\t\t}\n\t}\n})();\n\nfunction extractKeyCode(e: KeyboardEvent): KeyCode {\n\tif (e.charCode) {\n\t\t// \"keypress\" events mostly\n\t\tlet char = String.fromCharCode(e.charCode).toUpperCase();\n\t\treturn KeyCodeUtils.fromString(char);\n\t}\n\treturn KEY_CODE_MAP[e.keyCode] || KeyCode.Unknown;\n};\n\nexport interface IKeyboardEvent {\n\treadonly browserEvent: KeyboardEvent;\n\treadonly target: HTMLElement;\n\n\treadonly ctrlKey: boolean;\n\treadonly shiftKey: boolean;\n\treadonly altKey: boolean;\n\treadonly metaKey: boolean;\n\treadonly keyCode: KeyCode;\n\treadonly code: string;\n\n\t/**\n\t * @internal\n\t */\n\ttoKeybinding(): SimpleKeybinding;\n\tequals(keybinding: number): boolean;\n\n\tpreventDefault(): void;\n\tstopPropagation(): void;\n}\n\nconst ctrlKeyMod = (platform.isMacintosh ? KeyMod.WinCtrl : KeyMod.CtrlCmd);\nconst altKeyMod = KeyMod.Alt;\nconst shiftKeyMod = KeyMod.Shift;\nconst metaKeyMod = (platform.isMacintosh ? KeyMod.CtrlCmd : KeyMod.WinCtrl);\n\nexport class StandardKeyboardEvent implements IKeyboardEvent {\n\n\tpublic readonly browserEvent: KeyboardEvent;\n\tpublic readonly target: HTMLElement;\n\n\tpublic readonly ctrlKey: boolean;\n\tpublic readonly shiftKey: boolean;\n\tpublic readonly altKey: boolean;\n\tpublic readonly metaKey: boolean;\n\tpublic readonly keyCode: KeyCode;\n\tpublic readonly code: string;\n\n\tprivate _asKeybinding: number;\n\tprivate _asRuntimeKeybinding: SimpleKeybinding;\n\n\tconstructor(source: KeyboardEvent) {\n\t\tlet e = source;\n\n\t\tthis.browserEvent = e;\n\t\tthis.target = e.target;\n\n\t\tthis.ctrlKey = e.ctrlKey;\n\t\tthis.shiftKey = e.shiftKey;\n\t\tthis.altKey = e.altKey;\n\t\tthis.metaKey = e.metaKey;\n\t\tthis.keyCode = extractKeyCode(e);\n\t\tthis.code = e.code;\n\n\t\t// console.info(e.type + \": keyCode: \" + e.keyCode + \", which: \" + e.which + \", charCode: \" + e.charCode + \", detail: \" + e.detail + \" ====> \" + this.keyCode + ' -- ' + KeyCode[this.keyCode]);\n\n\t\tthis.ctrlKey = this.ctrlKey || this.keyCode === KeyCode.Ctrl;\n\t\tthis.altKey = this.altKey || this.keyCode === KeyCode.Alt;\n\t\tthis.shiftKey = this.shiftKey || this.keyCode === KeyCode.Shift;\n\t\tthis.metaKey = this.metaKey || this.keyCode === KeyCode.Meta;\n\n\t\tthis._asKeybinding = this._computeKeybinding();\n\t\tthis._asRuntimeKeybinding = this._computeRuntimeKeybinding();\n\n\t\t// console.log(`code: ${e.code}, keyCode: ${e.keyCode}, key: ${e.key}`);\n\t}\n\n\tpublic preventDefault(): void {\n\t\tif (this.browserEvent && this.browserEvent.preventDefault) {\n\t\t\tthis.browserEvent.preventDefault();\n\t\t}\n\t}\n\n\tpublic stopPropagation(): void {\n\t\tif (this.browserEvent && this.browserEvent.stopPropagation) {\n\t\t\tthis.browserEvent.stopPropagation();\n\t\t}\n\t}\n\n\tpublic toKeybinding(): SimpleKeybinding {\n\t\treturn this._asRuntimeKeybinding;\n\t}\n\n\tpublic equals(other: number): boolean {\n\t\treturn this._asKeybinding === other;\n\t}\n\n\tprivate _computeKeybinding(): number {\n\t\tlet key = KeyCode.Unknown;\n\t\tif (this.keyCode !== KeyCode.Ctrl && this.keyCode !== KeyCode.Shift && this.keyCode !== KeyCode.Alt && this.keyCode !== KeyCode.Meta) {\n\t\t\tkey = this.keyCode;\n\t\t}\n\n\t\tlet result = 0;\n\t\tif (this.ctrlKey) {\n\t\t\tresult |= ctrlKeyMod;\n\t\t}\n\t\tif (this.altKey) {\n\t\t\tresult |= altKeyMod;\n\t\t}\n\t\tif (this.shiftKey) {\n\t\t\tresult |= shiftKeyMod;\n\t\t}\n\t\tif (this.metaKey) {\n\t\t\tresult |= metaKeyMod;\n\t\t}\n\t\tresult |= key;\n\n\t\treturn result;\n\t}\n\n\tprivate _computeRuntimeKeybinding(): SimpleKeybinding {\n\t\tlet key = KeyCode.Unknown;\n\t\tif (this.keyCode !== KeyCode.Ctrl && this.keyCode !== KeyCode.Shift && this.keyCode !== KeyCode.Alt && this.keyCode !== KeyCode.Meta) {\n\t\t\tkey = this.keyCode;\n\t\t}\n\t\treturn new SimpleKeybinding(this.ctrlKey, this.shiftKey, this.altKey, this.metaKey, key);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as platform from 'vs/base/common/platform';\nimport * as browser from 'vs/base/browser/browser';\nimport { IframeUtils } from 'vs/base/browser/iframe';\n\nexport interface IMouseEvent {\n\treadonly browserEvent: MouseEvent;\n\treadonly leftButton: boolean;\n\treadonly middleButton: boolean;\n\treadonly rightButton: boolean;\n\treadonly target: HTMLElement;\n\treadonly detail: number;\n\treadonly posx: number;\n\treadonly posy: number;\n\treadonly ctrlKey: boolean;\n\treadonly shiftKey: boolean;\n\treadonly altKey: boolean;\n\treadonly metaKey: boolean;\n\treadonly timestamp: number;\n\n\tpreventDefault(): void;\n\tstopPropagation(): void;\n}\n\nexport class StandardMouseEvent implements IMouseEvent {\n\n\tpublic readonly browserEvent: MouseEvent;\n\n\tpublic readonly leftButton: boolean;\n\tpublic readonly middleButton: boolean;\n\tpublic readonly rightButton: boolean;\n\tpublic readonly target: HTMLElement;\n\tpublic detail: number;\n\tpublic readonly posx: number;\n\tpublic readonly posy: number;\n\tpublic readonly ctrlKey: boolean;\n\tpublic readonly shiftKey: boolean;\n\tpublic readonly altKey: boolean;\n\tpublic readonly metaKey: boolean;\n\tpublic readonly timestamp: number;\n\n\tconstructor(e: MouseEvent) {\n\t\tthis.timestamp = Date.now();\n\t\tthis.browserEvent = e;\n\t\tthis.leftButton = e.button === 0;\n\t\tthis.middleButton = e.button === 1;\n\t\tthis.rightButton = e.button === 2;\n\n\t\tthis.target = e.target;\n\n\t\tthis.detail = e.detail || 1;\n\t\tif (e.type === 'dblclick') {\n\t\t\tthis.detail = 2;\n\t\t}\n\t\tthis.ctrlKey = e.ctrlKey;\n\t\tthis.shiftKey = e.shiftKey;\n\t\tthis.altKey = e.altKey;\n\t\tthis.metaKey = e.metaKey;\n\n\t\tif (typeof e.pageX === 'number') {\n\t\t\tthis.posx = e.pageX;\n\t\t\tthis.posy = e.pageY;\n\t\t} else {\n\t\t\t// Probably hit by MSGestureEvent\n\t\t\tthis.posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n\t\t\tthis.posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n\t\t}\n\n\t\t// Find the position of the iframe this code is executing in relative to the iframe where the event was captured.\n\t\tlet iframeOffsets = IframeUtils.getPositionOfChildWindowRelativeToAncestorWindow(self, e.view);\n\t\tthis.posx -= iframeOffsets.left;\n\t\tthis.posy -= iframeOffsets.top;\n\t}\n\n\tpublic preventDefault(): void {\n\t\tif (this.browserEvent.preventDefault) {\n\t\t\tthis.browserEvent.preventDefault();\n\t\t}\n\t}\n\n\tpublic stopPropagation(): void {\n\t\tif (this.browserEvent.stopPropagation) {\n\t\t\tthis.browserEvent.stopPropagation();\n\t\t}\n\t}\n}\n\nexport interface IDataTransfer {\n\tdropEffect: string;\n\teffectAllowed: string;\n\ttypes: any[];\n\tfiles: any[];\n\n\tsetData(type: string, data: string): void;\n\tsetDragImage(image: any, x: number, y: number): void;\n\n\tgetData(type: string): string;\n\tclearData(types?: string[]): void;\n}\n\nexport class DragMouseEvent extends StandardMouseEvent {\n\n\tpublic readonly dataTransfer: IDataTransfer;\n\n\tconstructor(e: MouseEvent) {\n\t\tsuper(e);\n\t\tthis.dataTransfer = (e).dataTransfer;\n\t}\n\n}\n\nexport class DropMouseEvent extends DragMouseEvent {\n\n\tconstructor(e: MouseEvent) {\n\t\tsuper(e);\n\t}\n\n}\n\ninterface IWebKitMouseWheelEvent {\n\twheelDeltaY: number;\n\twheelDeltaX: number;\n}\n\ninterface IGeckoMouseWheelEvent {\n\tHORIZONTAL_AXIS: number;\n\tVERTICAL_AXIS: number;\n\taxis: number;\n\tdetail: number;\n}\n\nexport class StandardMouseWheelEvent {\n\n\tpublic readonly browserEvent: MouseWheelEvent;\n\tpublic readonly deltaY: number;\n\tpublic readonly deltaX: number;\n\tpublic readonly target: Node;\n\n\tconstructor(e: MouseWheelEvent, deltaX: number = 0, deltaY: number = 0) {\n\n\t\tthis.browserEvent = e || null;\n\t\tthis.target = e ? (e.target || (e).targetNode || e.srcElement) : null;\n\n\t\tthis.deltaY = deltaY;\n\t\tthis.deltaX = deltaX;\n\n\t\tif (e) {\n\t\t\tlet e1 = e;\n\t\t\tlet e2 = e;\n\n\t\t\t// vertical delta scroll\n\t\t\tif (typeof e1.wheelDeltaY !== 'undefined') {\n\t\t\t\tthis.deltaY = e1.wheelDeltaY / 120;\n\t\t\t} else if (typeof e2.VERTICAL_AXIS !== 'undefined' && e2.axis === e2.VERTICAL_AXIS) {\n\t\t\t\tthis.deltaY = -e2.detail / 3;\n\t\t\t}\n\n\t\t\t// horizontal delta scroll\n\t\t\tif (typeof e1.wheelDeltaX !== 'undefined') {\n\t\t\t\tif (browser.isSafari && platform.isWindows) {\n\t\t\t\t\tthis.deltaX = - (e1.wheelDeltaX / 120);\n\t\t\t\t} else {\n\t\t\t\t\tthis.deltaX = e1.wheelDeltaX / 120;\n\t\t\t\t}\n\t\t\t} else if (typeof e2.HORIZONTAL_AXIS !== 'undefined' && e2.axis === e2.HORIZONTAL_AXIS) {\n\t\t\t\tthis.deltaX = -e.detail / 3;\n\t\t\t}\n\n\t\t\t// Assume a vertical scroll if nothing else worked\n\t\t\tif (this.deltaY === 0 && this.deltaX === 0 && e.wheelDelta) {\n\t\t\t\tthis.deltaY = e.wheelDelta / 120;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic preventDefault(): void {\n\t\tif (this.browserEvent) {\n\t\t\tif (this.browserEvent.preventDefault) {\n\t\t\t\tthis.browserEvent.preventDefault();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic stopPropagation(): void {\n\t\tif (this.browserEvent) {\n\t\t\tif (this.browserEvent.stopPropagation) {\n\t\t\t\tthis.browserEvent.stopPropagation();\n\t\t\t}\n\t\t}\n\t}\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'use strict';\n\nimport Event, { Emitter } from 'vs/base/common/event';\n\nexport interface CancellationToken {\n\treadonly isCancellationRequested: boolean;\n\t/**\n\t * An event emitted when cancellation is requested\n\t * @event\n\t */\n\treadonly onCancellationRequested: Event;\n}\n\nconst shortcutEvent: Event = Object.freeze(function (callback, context?) {\n\tlet handle = setTimeout(callback.bind(context), 0);\n\treturn { dispose() { clearTimeout(handle); } };\n});\n\nexport namespace CancellationToken {\n\n\texport const None: CancellationToken = Object.freeze({\n\t\tisCancellationRequested: false,\n\t\tonCancellationRequested: Event.None\n\t});\n\n\texport const Cancelled: CancellationToken = Object.freeze({\n\t\tisCancellationRequested: true,\n\t\tonCancellationRequested: shortcutEvent\n\t});\n}\n\nclass MutableToken implements CancellationToken {\n\n\tprivate _isCancelled: boolean = false;\n\tprivate _emitter: Emitter;\n\n\tpublic cancel() {\n\t\tif (!this._isCancelled) {\n\t\t\tthis._isCancelled = true;\n\t\t\tif (this._emitter) {\n\t\t\t\tthis._emitter.fire(undefined);\n\t\t\t\tthis._emitter = undefined;\n\t\t\t}\n\t\t}\n\t}\n\n\tget isCancellationRequested(): boolean {\n\t\treturn this._isCancelled;\n\t}\n\n\tget onCancellationRequested(): Event {\n\t\tif (this._isCancelled) {\n\t\t\treturn shortcutEvent;\n\t\t}\n\t\tif (!this._emitter) {\n\t\t\tthis._emitter = new Emitter();\n\t\t}\n\t\treturn this._emitter.event;\n\t}\n}\n\nexport class CancellationTokenSource {\n\n\tprivate _token: CancellationToken;\n\n\tget token(): CancellationToken {\n\t\tif (!this._token) {\n\t\t\t// be lazy and create the token only when\n\t\t\t// actually needed\n\t\t\tthis._token = new MutableToken();\n\t\t}\n\t\treturn this._token;\n\t}\n\n\tcancel(): void {\n\t\tif (!this._token) {\n\t\t\t// save an object by returning the default\n\t\t\t// cancelled token when cancellation happens\n\t\t\t// before someone asks for the token\n\t\t\tthis._token = CancellationToken.Cancelled;\n\t\t} else {\n\t\t\t(this._token).cancel();\n\t\t}\n\t}\n\n\tdispose(): void {\n\t\tthis.cancel();\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport * as errors from 'vs/base/common/errors';\nimport * as platform from 'vs/base/common/platform';\nimport { Promise, TPromise, ValueCallback, ErrorCallback, ProgressCallback } from 'vs/base/common/winjs.base';\nimport { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation';\nimport { Disposable, IDisposable } from 'vs/base/common/lifecycle';\nimport Event, { Emitter } from 'vs/base/common/event';\n\nfunction isThenable(obj: any): obj is Thenable {\n\treturn obj && typeof (>obj).then === 'function';\n}\n\nexport function toThenable(arg: T | Thenable): Thenable {\n\tif (isThenable(arg)) {\n\t\treturn arg;\n\t} else {\n\t\treturn TPromise.as(arg);\n\t}\n}\n\nexport function asWinJsPromise(callback: (token: CancellationToken) => T | TPromise | Thenable): TPromise {\n\tlet source = new CancellationTokenSource();\n\treturn new TPromise((resolve, reject, progress) => {\n\t\tlet item = callback(source.token);\n\t\tif (item instanceof TPromise) {\n\t\t\titem.then(resolve, reject, progress);\n\t\t} else if (isThenable(item)) {\n\t\t\titem.then(resolve, reject);\n\t\t} else {\n\t\t\tresolve(item);\n\t\t}\n\t}, () => {\n\t\tsource.cancel();\n\t});\n}\n\n/**\n * Hook a cancellation token to a WinJS Promise\n */\nexport function wireCancellationToken(token: CancellationToken, promise: TPromise, resolveAsUndefinedWhenCancelled?: boolean): Thenable {\n\tconst subscription = token.onCancellationRequested(() => promise.cancel());\n\tif (resolveAsUndefinedWhenCancelled) {\n\t\tpromise = promise.then(undefined, err => {\n\t\t\tif (!errors.isPromiseCanceledError(err)) {\n\t\t\t\treturn TPromise.wrapError(err);\n\t\t\t}\n\t\t\treturn undefined;\n\t\t});\n\t}\n\treturn always(promise, () => subscription.dispose());\n}\n\nexport interface ITask {\n\t(): T;\n}\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\n\tprivate activePromise: Promise;\n\tprivate queuedPromise: Promise;\n\tprivate queuedPromiseFactory: ITask;\n\n\tconstructor() {\n\t\tthis.activePromise = null;\n\t\tthis.queuedPromise = null;\n\t\tthis.queuedPromiseFactory = null;\n\t}\n\n\tqueue(promiseFactory: ITask>): TPromise {\n\t\tif (this.activePromise) {\n\t\t\tthis.queuedPromiseFactory = promiseFactory;\n\n\t\t\tif (!this.queuedPromise) {\n\t\t\t\tconst onComplete = () => {\n\t\t\t\t\tthis.queuedPromise = null;\n\n\t\t\t\t\tconst result = this.queue(this.queuedPromiseFactory);\n\t\t\t\t\tthis.queuedPromiseFactory = null;\n\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\n\t\t\t\tthis.queuedPromise = new Promise((c, e, p) => {\n\t\t\t\t\tthis.activePromise.then(onComplete, onComplete, p).done(c);\n\t\t\t\t}, () => {\n\t\t\t\t\tthis.activePromise.cancel();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn new Promise((c, e, p) => {\n\t\t\t\tthis.queuedPromise.then(c, e, p);\n\t\t\t}, () => {\n\t\t\t\t// no-op\n\t\t\t});\n\t\t}\n\n\t\tthis.activePromise = promiseFactory();\n\n\t\treturn new Promise((c, e, p) => {\n\t\t\tthis.activePromise.done((result: any) => {\n\t\t\t\tthis.activePromise = null;\n\t\t\t\tc(result);\n\t\t\t}, (err: any) => {\n\t\t\t\tthis.activePromise = null;\n\t\t\t\te(err);\n\t\t\t}, p);\n\t\t}, () => {\n\t\t\tthis.activePromise.cancel();\n\t\t});\n\t}\n}\n\n// TODO@Joao: can the previous throttler be replaced with this?\nexport class SimpleThrottler {\n\n\tprivate current = TPromise.as(null);\n\n\tqueue(promiseTask: ITask>): TPromise {\n\t\treturn this.current = this.current.then(() => promiseTask());\n\t}\n}\n\n/**\n * A helper to delay 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 the 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\n\tprivate timeout: number;\n\tprivate completionPromise: Promise;\n\tprivate onSuccess: ValueCallback;\n\tprivate task: ITask;\n\n\tconstructor(public defaultDelay: number) {\n\t\tthis.timeout = null;\n\t\tthis.completionPromise = null;\n\t\tthis.onSuccess = null;\n\t\tthis.task = null;\n\t}\n\n\ttrigger(task: ITask, delay: number = this.defaultDelay): TPromise {\n\t\tthis.task = task;\n\t\tthis.cancelTimeout();\n\n\t\tif (!this.completionPromise) {\n\t\t\tthis.completionPromise = new Promise((c) => {\n\t\t\t\tthis.onSuccess = c;\n\t\t\t}, () => {\n\t\t\t\t// no-op\n\t\t\t}).then(() => {\n\t\t\t\tthis.completionPromise = null;\n\t\t\t\tthis.onSuccess = null;\n\t\t\t\tconst task = this.task;\n\t\t\t\tthis.task = null;\n\n\t\t\t\treturn task();\n\t\t\t});\n\t\t}\n\n\t\tthis.timeout = setTimeout(() => {\n\t\t\tthis.timeout = null;\n\t\t\tthis.onSuccess(null);\n\t\t}, delay);\n\n\t\treturn this.completionPromise;\n\t}\n\n\tisTriggered(): boolean {\n\t\treturn this.timeout !== null;\n\t}\n\n\tcancel(): void {\n\t\tthis.cancelTimeout();\n\n\t\tif (this.completionPromise) {\n\t\t\tthis.completionPromise.cancel();\n\t\t\tthis.completionPromise = null;\n\t\t}\n\t}\n\n\tprivate cancelTimeout(): void {\n\t\tif (this.timeout !== null) {\n\t\t\tclearTimeout(this.timeout);\n\t\t\tthis.timeout = null;\n\t\t}\n\t}\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 * Simply combine the two mail man strategies from the Throttler and Delayer\n * helpers, for an analogy.\n */\nexport class ThrottledDelayer extends Delayer> {\n\n\tprivate throttler: Throttler;\n\n\tconstructor(defaultDelay: number) {\n\t\tsuper(defaultDelay);\n\n\t\tthis.throttler = new Throttler();\n\t}\n\n\ttrigger(promiseFactory: ITask>, delay?: number): Promise {\n\t\treturn super.trigger(() => this.throttler.queue(promiseFactory), delay);\n\t}\n}\n\n/**\n * Similar to the ThrottledDelayer, except it also guarantees that the promise\n * factory doesn't get called more often than every `minimumPeriod` milliseconds.\n */\nexport class PeriodThrottledDelayer extends ThrottledDelayer {\n\n\tprivate minimumPeriod: number;\n\tprivate periodThrottler: Throttler;\n\n\tconstructor(defaultDelay: number, minimumPeriod: number = 0) {\n\t\tsuper(defaultDelay);\n\n\t\tthis.minimumPeriod = minimumPeriod;\n\t\tthis.periodThrottler = new Throttler();\n\t}\n\n\ttrigger(promiseFactory: ITask>, delay?: number): Promise {\n\t\treturn super.trigger(() => {\n\t\t\treturn this.periodThrottler.queue(() => {\n\t\t\t\treturn Promise.join([\n\t\t\t\t\tTPromise.timeout(this.minimumPeriod),\n\t\t\t\t\tpromiseFactory()\n\t\t\t\t]).then(r => r[1]);\n\t\t\t});\n\t\t}, delay);\n\t}\n}\n\nexport class PromiseSource {\n\n\tprivate _value: TPromise;\n\tprivate _completeCallback: Function;\n\tprivate _errorCallback: Function;\n\n\tconstructor() {\n\t\tthis._value = new TPromise((c, e) => {\n\t\t\tthis._completeCallback = c;\n\t\t\tthis._errorCallback = e;\n\t\t});\n\t}\n\n\tget value(): TPromise {\n\t\treturn this._value;\n\t}\n\n\tcomplete(value?: T): void {\n\t\tthis._completeCallback(value);\n\t}\n\n\terror(err?: any): void {\n\t\tthis._errorCallback(err);\n\t}\n}\n\nexport class ShallowCancelThenPromise extends TPromise {\n\n\tconstructor(outer: TPromise) {\n\n\t\tlet completeCallback: ValueCallback,\n\t\t\terrorCallback: ErrorCallback,\n\t\t\tprogressCallback: ProgressCallback;\n\n\t\tsuper((c, e, p) => {\n\t\t\tcompleteCallback = c;\n\t\t\terrorCallback = e;\n\t\t\tprogressCallback = p;\n\t\t}, () => {\n\t\t\t// cancel this promise but not the\n\t\t\t// outer promise\n\t\t\terrorCallback(errors.canceled());\n\t\t});\n\n\t\touter.then(completeCallback, errorCallback, progressCallback);\n\t}\n}\n\n/**\n * Returns a new promise that joins the provided promise. Upon completion of\n * the provided promise the provided function will always be called. This\n * method is comparable to a try-finally code block.\n * @param promise a promise\n * @param f a function that will be call in the success and error case.\n */\nexport function always(promise: TPromise, f: Function): TPromise {\n\treturn new TPromise((c, e, p) => {\n\t\tpromise.done((result) => {\n\t\t\ttry {\n\t\t\t\tf(result);\n\t\t\t} catch (e1) {\n\t\t\t\terrors.onUnexpectedError(e1);\n\t\t\t}\n\t\t\tc(result);\n\t\t}, (err) => {\n\t\t\ttry {\n\t\t\t\tf(err);\n\t\t\t} catch (e1) {\n\t\t\t\terrors.onUnexpectedError(e1);\n\t\t\t}\n\t\t\te(err);\n\t\t}, (progress) => {\n\t\t\tp(progress);\n\t\t});\n\t}, () => {\n\t\tpromise.cancel();\n\t});\n}\n\n/**\n * Runs the provided list of promise factories in sequential order. The returned\n * promise will complete to an array of results from each promise.\n */\nexport function sequence(promiseFactories: ITask>[]): TPromise {\n\tconst results: T[] = [];\n\n\t// reverse since we start with last element using pop()\n\tpromiseFactories = promiseFactories.reverse();\n\n\tfunction next(): Promise {\n\t\tif (promiseFactories.length) {\n\t\t\treturn promiseFactories.pop()();\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfunction thenHandler(result: any): Promise {\n\t\tif (result !== undefined && result !== null) {\n\t\t\tresults.push(result);\n\t\t}\n\n\t\tconst n = next();\n\t\tif (n) {\n\t\t\treturn n.then(thenHandler);\n\t\t}\n\n\t\treturn TPromise.as(results);\n\t}\n\n\treturn TPromise.as(null).then(thenHandler);\n}\n\nexport function first(promiseFactories: ITask>[], shouldStop: (t: T) => boolean = t => !!t): TPromise {\n\tpromiseFactories = [...promiseFactories.reverse()];\n\n\tconst loop: () => TPromise = () => {\n\t\tif (promiseFactories.length === 0) {\n\t\t\treturn TPromise.as(null);\n\t\t}\n\n\t\tconst factory = promiseFactories.pop();\n\t\tconst promise = factory();\n\n\t\treturn promise.then(result => {\n\t\t\tif (shouldStop(result)) {\n\t\t\t\treturn TPromise.as(result);\n\t\t\t}\n\n\t\t\treturn loop();\n\t\t});\n\t};\n\n\treturn loop();\n}\n\ninterface ILimitedTaskFactory {\n\tfactory: ITask;\n\tc: ValueCallback;\n\te: ErrorCallback;\n\tp: ProgressCallback;\n}\n\n/**\n * A helper to queue N promises and run them all with a max degree of parallelism. The helper\n * ensures that at any time no more than M promises are running at the same time.\n */\nexport class Limiter {\n\tprivate runningPromises: number;\n\tprivate maxDegreeOfParalellism: number;\n\tprivate outstandingPromises: ILimitedTaskFactory[];\n\tprivate _onFinished: Emitter;\n\n\tconstructor(maxDegreeOfParalellism: number) {\n\t\tthis.maxDegreeOfParalellism = maxDegreeOfParalellism;\n\t\tthis.outstandingPromises = [];\n\t\tthis.runningPromises = 0;\n\t\tthis._onFinished = new Emitter();\n\t}\n\n\tpublic get onFinished(): Event {\n\t\treturn this._onFinished.event;\n\t}\n\n\tqueue(promiseFactory: ITask): Promise;\n\tqueue(promiseFactory: ITask>): TPromise {\n\t\treturn new TPromise((c, e, p) => {\n\t\t\tthis.outstandingPromises.push({\n\t\t\t\tfactory: promiseFactory,\n\t\t\t\tc: c,\n\t\t\t\te: e,\n\t\t\t\tp: p\n\t\t\t});\n\n\t\t\tthis.consume();\n\t\t});\n\t}\n\n\tprivate consume(): void {\n\t\twhile (this.outstandingPromises.length && this.runningPromises < this.maxDegreeOfParalellism) {\n\t\t\tconst iLimitedTask = this.outstandingPromises.shift();\n\t\t\tthis.runningPromises++;\n\n\t\t\tconst promise = iLimitedTask.factory();\n\t\t\tpromise.done(iLimitedTask.c, iLimitedTask.e, iLimitedTask.p);\n\t\t\tpromise.done(() => this.consumed(), () => this.consumed());\n\t\t}\n\t}\n\n\tprivate consumed(): void {\n\t\tthis.runningPromises--;\n\n\t\tif (this.outstandingPromises.length > 0) {\n\t\t\tthis.consume();\n\t\t} else {\n\t\t\tthis._onFinished.fire();\n\t\t}\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._onFinished.dispose();\n\t}\n}\n\n/**\n * A queue is handles one promise at a time and guarantees that at any time only one promise is executing.\n */\nexport class Queue extends Limiter {\n\n\tconstructor() {\n\t\tsuper(1);\n\t}\n}\n\nexport function setDisposableTimeout(handler: Function, timeout: number, ...args: any[]): IDisposable {\n\tconst handle = setTimeout(handler, timeout, ...args);\n\treturn { dispose() { clearTimeout(handle); } };\n}\n\nexport class TimeoutTimer extends Disposable {\n\tprivate _token: platform.TimeoutToken;\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis._token = -1;\n\t}\n\n\tdispose(): void {\n\t\tthis.cancel();\n\t\tsuper.dispose();\n\t}\n\n\tcancel(): void {\n\t\tif (this._token !== -1) {\n\t\t\tplatform.clearTimeout(this._token);\n\t\t\tthis._token = -1;\n\t\t}\n\t}\n\n\tcancelAndSet(runner: () => void, timeout: number): void {\n\t\tthis.cancel();\n\t\tthis._token = platform.setTimeout(() => {\n\t\t\tthis._token = -1;\n\t\t\trunner();\n\t\t}, timeout);\n\t}\n\n\tsetIfNotSet(runner: () => void, timeout: number): void {\n\t\tif (this._token !== -1) {\n\t\t\t// timer is already set\n\t\t\treturn;\n\t\t}\n\t\tthis._token = platform.setTimeout(() => {\n\t\t\tthis._token = -1;\n\t\t\trunner();\n\t\t}, timeout);\n\t}\n}\n\nexport class IntervalTimer extends Disposable {\n\n\tprivate _token: platform.IntervalToken;\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis._token = -1;\n\t}\n\n\tdispose(): void {\n\t\tthis.cancel();\n\t\tsuper.dispose();\n\t}\n\n\tcancel(): void {\n\t\tif (this._token !== -1) {\n\t\t\tplatform.clearInterval(this._token);\n\t\t\tthis._token = -1;\n\t\t}\n\t}\n\n\tcancelAndSet(runner: () => void, interval: number): void {\n\t\tthis.cancel();\n\t\tthis._token = platform.setInterval(() => {\n\t\t\trunner();\n\t\t}, interval);\n\t}\n}\n\nexport class RunOnceScheduler {\n\n\tprivate timeoutToken: platform.TimeoutToken;\n\tprivate runner: () => void;\n\tprivate timeout: number;\n\tprivate timeoutHandler: () => void;\n\n\tconstructor(runner: () => void, timeout: number) {\n\t\tthis.timeoutToken = -1;\n\t\tthis.runner = runner;\n\t\tthis.timeout = timeout;\n\t\tthis.timeoutHandler = this.onTimeout.bind(this);\n\t}\n\n\t/**\n\t * Dispose RunOnceScheduler\n\t */\n\tdispose(): void {\n\t\tthis.cancel();\n\t\tthis.runner = null;\n\t}\n\n\t/**\n\t * Cancel current scheduled runner (if any).\n\t */\n\tcancel(): void {\n\t\tif (this.isScheduled()) {\n\t\t\tplatform.clearTimeout(this.timeoutToken);\n\t\t\tthis.timeoutToken = -1;\n\t\t}\n\t}\n\n\t/**\n\t * Replace runner. If there is a runner already scheduled, the new runner will be called.\n\t */\n\tsetRunner(runner: () => void): void {\n\t\tthis.runner = runner;\n\t}\n\n\t/**\n\t * Cancel previous runner (if any) & schedule a new runner.\n\t */\n\tschedule(delay = this.timeout): void {\n\t\tthis.cancel();\n\t\tthis.timeoutToken = platform.setTimeout(this.timeoutHandler, delay);\n\t}\n\n\t/**\n\t * Returns true if scheduled.\n\t */\n\tisScheduled(): boolean {\n\t\treturn this.timeoutToken !== -1;\n\t}\n\n\tprivate onTimeout() {\n\t\tthis.timeoutToken = -1;\n\t\tif (this.runner) {\n\t\t\tthis.runner();\n\t\t}\n\t}\n}\n\nexport function nfcall(fn: Function, ...args: any[]): Promise;\nexport function nfcall(fn: Function, ...args: any[]): TPromise;\nexport function nfcall(fn: Function, ...args: any[]): any {\n\treturn new Promise((c, e) => fn(...args, (err, result) => err ? e(err) : c(result)), () => null);\n}\n\nexport function ninvoke(thisArg: any, fn: Function, ...args: any[]): Promise;\nexport function ninvoke(thisArg: any, fn: Function, ...args: any[]): TPromise;\nexport function ninvoke(thisArg: any, fn: Function, ...args: any[]): any {\n\treturn new Promise((c, e) => fn.call(thisArg, ...args, (err, result) => err ? e(err) : c(result)), () => null);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport Errors = require('vs/base/common/errors');\nimport { IDisposable } from 'vs/base/common/lifecycle';\n\nexport class EmitterEvent {\n\n\tpublic readonly type: string;\n\tpublic readonly data: any;\n\n\tconstructor(eventType: string = null, data: any = null) {\n\t\tthis.type = eventType;\n\t\tthis.data = data;\n\t}\n}\n\nexport interface ListenerCallback {\n\t(value: any): void;\n}\n\nexport interface BulkListenerCallback {\n\t(value: EmitterEvent[]): void;\n}\n\nexport interface IBaseEventEmitter {\n\taddBulkListener(listener: BulkListenerCallback): IDisposable;\n}\n\nexport interface IEventEmitter extends IBaseEventEmitter, IDisposable {\n\taddListener(eventType: string, listener: ListenerCallback): IDisposable;\n\taddOneTimeListener(eventType: string, listener: ListenerCallback): IDisposable;\n\taddEmitter(eventEmitter: IEventEmitter): IDisposable;\n}\n\nexport interface IListenersMap {\n\t[key: string]: ListenerCallback[];\n}\n\nexport class EventEmitter implements IEventEmitter {\n\n\tprotected _listeners: IListenersMap;\n\tprotected _bulkListeners: ListenerCallback[];\n\tprivate _collectedEvents: EmitterEvent[];\n\tprivate _deferredCnt: number;\n\tprivate _allowedEventTypes: { [eventType: string]: boolean; };\n\n\tconstructor(allowedEventTypes: string[] = null) {\n\t\tthis._listeners = {};\n\t\tthis._bulkListeners = [];\n\t\tthis._collectedEvents = [];\n\t\tthis._deferredCnt = 0;\n\t\tif (allowedEventTypes) {\n\t\t\tthis._allowedEventTypes = {};\n\t\t\tfor (let i = 0; i < allowedEventTypes.length; i++) {\n\t\t\t\tthis._allowedEventTypes[allowedEventTypes[i]] = true;\n\t\t\t}\n\t\t} else {\n\t\t\tthis._allowedEventTypes = null;\n\t\t}\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._listeners = {};\n\t\tthis._bulkListeners = [];\n\t\tthis._collectedEvents = [];\n\t\tthis._deferredCnt = 0;\n\t\tthis._allowedEventTypes = null;\n\t}\n\n\tpublic addListener(eventType: string, listener: ListenerCallback): IDisposable {\n\t\tif (eventType === '*') {\n\t\t\tthrow new Error('Use addBulkListener(listener) to register your listener!');\n\t\t}\n\n\t\tif (this._allowedEventTypes && !this._allowedEventTypes.hasOwnProperty(eventType)) {\n\t\t\tthrow new Error('This object will never emit this event type!');\n\t\t}\n\n\t\tif (this._listeners.hasOwnProperty(eventType)) {\n\t\t\tthis._listeners[eventType].push(listener);\n\t\t} else {\n\t\t\tthis._listeners[eventType] = [listener];\n\t\t}\n\n\t\tlet bound = this;\n\t\treturn {\n\t\t\tdispose: () => {\n\t\t\t\tif (!bound) {\n\t\t\t\t\t// Already called\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tbound._removeListener(eventType, listener);\n\n\t\t\t\t// Prevent leakers from holding on to the event emitter\n\t\t\t\tbound = null;\n\t\t\t\tlistener = null;\n\t\t\t}\n\t\t};\n\t}\n\n\tpublic addOneTimeListener(eventType: string, listener: ListenerCallback): IDisposable {\n\t\tconst disposable = this.addListener(eventType, value => {\n\t\t\tdisposable.dispose();\n\t\t\tlistener(value);\n\t\t});\n\n\t\treturn disposable;\n\t}\n\n\tpublic addBulkListener(listener: BulkListenerCallback): IDisposable {\n\n\t\tthis._bulkListeners.push(listener);\n\n\t\treturn {\n\t\t\tdispose: () => {\n\t\t\t\tthis._removeBulkListener(listener);\n\t\t\t}\n\t\t};\n\t}\n\n\tpublic addEmitter(eventEmitter: IBaseEventEmitter): IDisposable {\n\t\treturn eventEmitter.addBulkListener((events: EmitterEvent[]): void => {\n\t\t\tif (this._deferredCnt === 0) {\n\t\t\t\tthis._emitEvents(events);\n\t\t\t} else {\n\t\t\t\t// Collect for later\n\t\t\t\tthis._collectedEvents.push.apply(this._collectedEvents, events);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _removeListener(eventType: string, listener: ListenerCallback): void {\n\t\tif (this._listeners.hasOwnProperty(eventType)) {\n\t\t\tlet listeners = this._listeners[eventType];\n\t\t\tfor (let i = 0, len = listeners.length; i < len; i++) {\n\t\t\t\tif (listeners[i] === listener) {\n\t\t\t\t\tlisteners.splice(i, 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _removeBulkListener(listener: BulkListenerCallback): void {\n\t\tfor (let i = 0, len = this._bulkListeners.length; i < len; i++) {\n\t\t\tif (this._bulkListeners[i] === listener) {\n\t\t\t\tthis._bulkListeners.splice(i, 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected _emitToSpecificTypeListeners(eventType: string, data: any): void {\n\t\tif (this._listeners.hasOwnProperty(eventType)) {\n\t\t\tconst listeners = this._listeners[eventType].slice(0);\n\t\t\tfor (let i = 0, len = listeners.length; i < len; i++) {\n\t\t\t\tsafeInvoke1Arg(listeners[i], data);\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected _emitToBulkListeners(events: EmitterEvent[]): void {\n\t\tconst bulkListeners = this._bulkListeners.slice(0);\n\t\tfor (let i = 0, len = bulkListeners.length; i < len; i++) {\n\t\t\tsafeInvoke1Arg(bulkListeners[i], events);\n\t\t}\n\t}\n\n\tprotected _emitEvents(events: EmitterEvent[]): void {\n\t\tif (this._bulkListeners.length > 0) {\n\t\t\tthis._emitToBulkListeners(events);\n\t\t}\n\t\tfor (let i = 0, len = events.length; i < len; i++) {\n\t\t\tconst e = events[i];\n\n\t\t\tthis._emitToSpecificTypeListeners(e.type, e.data);\n\t\t}\n\t}\n\n\tpublic emit(eventType: string, data: any = {}): void {\n\t\tif (this._allowedEventTypes && !this._allowedEventTypes.hasOwnProperty(eventType)) {\n\t\t\tthrow new Error('Cannot emit this event type because it wasn\\'t listed!');\n\t\t}\n\t\t// Early return if no listeners would get this\n\t\tif (!this._listeners.hasOwnProperty(eventType) && this._bulkListeners.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst emitterEvent = new EmitterEvent(eventType, data);\n\n\t\tif (this._deferredCnt === 0) {\n\t\t\tthis._emitEvents([emitterEvent]);\n\t\t} else {\n\t\t\t// Collect for later\n\t\t\tthis._collectedEvents.push(emitterEvent);\n\t\t}\n\t}\n\n\tpublic beginDeferredEmit(): void {\n\t\tthis._deferredCnt = this._deferredCnt + 1;\n\t}\n\n\tpublic endDeferredEmit(): void {\n\t\tthis._deferredCnt = this._deferredCnt - 1;\n\n\t\tif (this._deferredCnt === 0) {\n\t\t\tthis._emitCollected();\n\t\t}\n\t}\n\n\tpublic deferredEmit(callback: () => T): T {\n\t\tthis.beginDeferredEmit();\n\n\t\tlet result: T = safeInvokeNoArg(callback);\n\n\t\tthis.endDeferredEmit();\n\n\t\treturn result;\n\t}\n\n\tprivate _emitCollected(): void {\n\t\tif (this._collectedEvents.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\t// Flush collected events\n\t\tconst events = this._collectedEvents;\n\t\tthis._collectedEvents = [];\n\t\tthis._emitEvents(events);\n\t}\n}\n\nclass EmitQueueElement {\n\tpublic target: Function;\n\tpublic arg: any;\n\n\tconstructor(target: Function, arg: any) {\n\t\tthis.target = target;\n\t\tthis.arg = arg;\n\t}\n}\n\n/**\n * Same as EventEmitter, but guarantees events are delivered in order to each listener\n */\nexport class OrderGuaranteeEventEmitter extends EventEmitter {\n\n\tprivate _emitQueue: EmitQueueElement[];\n\n\tconstructor() {\n\t\tsuper(null);\n\t\tthis._emitQueue = [];\n\t}\n\n\tprotected _emitToSpecificTypeListeners(eventType: string, data: any): void {\n\t\tif (this._listeners.hasOwnProperty(eventType)) {\n\t\t\tlet listeners = this._listeners[eventType];\n\t\t\tfor (let i = 0, len = listeners.length; i < len; i++) {\n\t\t\t\tthis._emitQueue.push(new EmitQueueElement(listeners[i], data));\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected _emitToBulkListeners(events: EmitterEvent[]): void {\n\t\tlet bulkListeners = this._bulkListeners;\n\t\tfor (let i = 0, len = bulkListeners.length; i < len; i++) {\n\t\t\tthis._emitQueue.push(new EmitQueueElement(bulkListeners[i], events));\n\t\t}\n\t}\n\n\tprotected _emitEvents(events: EmitterEvent[]): void {\n\t\tsuper._emitEvents(events);\n\n\t\twhile (this._emitQueue.length > 0) {\n\t\t\tlet queueElement = this._emitQueue.shift();\n\t\t\tsafeInvoke1Arg(queueElement.target, queueElement.arg);\n\t\t}\n\t}\n}\n\nfunction safeInvokeNoArg(func: Function): T {\n\ttry {\n\t\treturn func();\n\t} catch (e) {\n\t\tErrors.onUnexpectedError(e);\n\t}\n\treturn undefined;\n}\n\nfunction safeInvoke1Arg(func: Function, arg1: any): any {\n\ttry {\n\t\treturn func(arg1);\n\t} catch (e) {\n\t\tErrors.onUnexpectedError(e);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { TimeoutTimer } from 'vs/base/common/async';\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { EventEmitter } from 'vs/base/common/eventEmitter';\nimport { Disposable, IDisposable } from 'vs/base/common/lifecycle';\nimport { isObject } from 'vs/base/common/types';\nimport * as browser from 'vs/base/browser/browser';\nimport { IKeyboardEvent, StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport { IMouseEvent, StandardMouseEvent } from 'vs/base/browser/mouseEvent';\nimport { CharCode } from 'vs/base/common/charCode';\n\nexport function clearNode(node: HTMLElement) {\n\twhile (node.firstChild) {\n\t\tnode.removeChild(node.firstChild);\n\t}\n}\n\n/**\n * Calls JSON.Stringify with a replacer to break apart any circular references.\n * This prevents JSON.stringify from throwing the exception\n * \"Uncaught TypeError: Converting circular structure to JSON\"\n */\nexport function safeStringifyDOMAware(obj: any): string {\n\tlet seen: any[] = [];\n\treturn JSON.stringify(obj, (key, value) => {\n\n\t\t// HTML elements are never going to serialize nicely\n\t\tif (value instanceof Element) {\n\t\t\treturn '[Element]';\n\t\t}\n\n\t\tif (isObject(value) || Array.isArray(value)) {\n\t\t\tif (seen.indexOf(value) !== -1) {\n\t\t\t\treturn '[Circular]';\n\t\t\t} else {\n\t\t\t\tseen.push(value);\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t});\n}\n\nexport function isInDOM(node: Node): boolean {\n\twhile (node) {\n\t\tif (node === document.body) {\n\t\t\treturn true;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\treturn false;\n}\n\nconst _manualClassList = new class {\n\n\tprivate _lastStart: number;\n\tprivate _lastEnd: number;\n\n\tprivate _findClassName(node: HTMLElement, className: string): void {\n\n\t\tlet classes = node.className;\n\t\tif (!classes) {\n\t\t\tthis._lastStart = -1;\n\t\t\treturn;\n\t\t}\n\n\t\tclassName = className.trim();\n\n\t\tlet classesLen = classes.length,\n\t\t\tclassLen = className.length;\n\n\t\tif (classLen === 0) {\n\t\t\tthis._lastStart = -1;\n\t\t\treturn;\n\t\t}\n\n\t\tif (classesLen < classLen) {\n\t\t\tthis._lastStart = -1;\n\t\t\treturn;\n\t\t}\n\n\t\tif (classes === className) {\n\t\t\tthis._lastStart = 0;\n\t\t\tthis._lastEnd = classesLen;\n\t\t\treturn;\n\t\t}\n\n\t\tlet idx = -1,\n\t\t\tidxEnd: number;\n\n\t\twhile ((idx = classes.indexOf(className, idx + 1)) >= 0) {\n\n\t\t\tidxEnd = idx + classLen;\n\n\t\t\t// a class that is followed by another class\n\t\t\tif ((idx === 0 || classes.charCodeAt(idx - 1) === CharCode.Space) && classes.charCodeAt(idxEnd) === CharCode.Space) {\n\t\t\t\tthis._lastStart = idx;\n\t\t\t\tthis._lastEnd = idxEnd + 1;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// last class\n\t\t\tif (idx > 0 && classes.charCodeAt(idx - 1) === CharCode.Space && idxEnd === classesLen) {\n\t\t\t\tthis._lastStart = idx - 1;\n\t\t\t\tthis._lastEnd = idxEnd;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// equal - duplicate of cmp above\n\t\t\tif (idx === 0 && idxEnd === classesLen) {\n\t\t\t\tthis._lastStart = 0;\n\t\t\t\tthis._lastEnd = idxEnd;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tthis._lastStart = -1;\n\t}\n\n\thasClass(node: HTMLElement, className: string): boolean {\n\t\tthis._findClassName(node, className);\n\t\treturn this._lastStart !== -1;\n\t}\n\n\taddClass(node: HTMLElement, className: string): void {\n\t\tif (!node.className) { // doesn't have it for sure\n\t\t\tnode.className = className;\n\t\t} else {\n\t\t\tthis._findClassName(node, className); // see if it's already there\n\t\t\tif (this._lastStart === -1) {\n\t\t\t\tnode.className = node.className + ' ' + className;\n\t\t\t}\n\t\t}\n\t}\n\n\tremoveClass(node: HTMLElement, className: string): void {\n\t\tthis._findClassName(node, className);\n\t\tif (this._lastStart === -1) {\n\t\t\treturn; // Prevent styles invalidation if not necessary\n\t\t} else {\n\t\t\tnode.className = node.className.substring(0, this._lastStart) + node.className.substring(this._lastEnd);\n\t\t}\n\t}\n\n\ttoggleClass(node: HTMLElement, className: string, shouldHaveIt?: boolean): void {\n\t\tthis._findClassName(node, className);\n\t\tif (this._lastStart !== -1 && (shouldHaveIt === void 0 || !shouldHaveIt)) {\n\t\t\tthis.removeClass(node, className);\n\t\t}\n\t\tif (this._lastStart === -1 && (shouldHaveIt === void 0 || shouldHaveIt)) {\n\t\t\tthis.addClass(node, className);\n\t\t}\n\t}\n};\n\nconst _nativeClassList = new class {\n\thasClass(node: HTMLElement, className: string): boolean {\n\t\treturn className && node.classList && node.classList.contains(className);\n\t}\n\n\taddClass(node: HTMLElement, className: string): void {\n\t\tif (className && node.classList) {\n\t\t\tnode.classList.add(className);\n\t\t}\n\t}\n\n\tremoveClass(node: HTMLElement, className: string): void {\n\t\tif (className && node.classList) {\n\t\t\tnode.classList.remove(className);\n\t\t}\n\t}\n\n\ttoggleClass(node: HTMLElement, className: string, shouldHaveIt?: boolean): void {\n\t\tif (node.classList) {\n\t\t\tnode.classList.toggle(className, shouldHaveIt);\n\t\t}\n\t}\n};\n\n// In IE11 there is only partial support for `classList` which makes us keep our\n// custom implementation. Otherwise use the native implementation, see: http://caniuse.com/#search=classlist\nconst _classList = browser.isIE ? _manualClassList : _nativeClassList;\nexport const hasClass: (node: HTMLElement, className: string) => boolean = _classList.hasClass.bind(_classList);\nexport const addClass: (node: HTMLElement, className: string) => void = _classList.addClass.bind(_classList);\nexport const removeClass: (node: HTMLElement, className: string) => void = _classList.removeClass.bind(_classList);\nexport const toggleClass: (node: HTMLElement, className: string, shouldHaveIt?: boolean) => void = _classList.toggleClass.bind(_classList);\n\nclass DomListener implements IDisposable {\n\n\tprivate _handler: (e: any) => void;\n\tprivate _node: Element | Window | Document;\n\tprivate readonly _type: string;\n\tprivate readonly _useCapture: boolean;\n\n\tconstructor(node: Element | Window | Document, type: string, handler: (e: any) => void, useCapture: boolean) {\n\t\tthis._node = node;\n\t\tthis._type = type;\n\t\tthis._handler = handler;\n\t\tthis._useCapture = (useCapture || false);\n\t\tthis._node.addEventListener(this._type, this._handler, this._useCapture);\n\t}\n\n\tpublic dispose(): void {\n\t\tif (!this._handler) {\n\t\t\t// Already disposed\n\t\t\treturn;\n\t\t}\n\n\t\tthis._node.removeEventListener(this._type, this._handler, this._useCapture);\n\n\t\t// Prevent leakers from holding on to the dom or handler func\n\t\tthis._node = null;\n\t\tthis._handler = null;\n\t}\n}\n\nexport function addDisposableListener(node: Element | Window | Document, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable {\n\treturn new DomListener(node, type, handler, useCapture);\n}\n\nexport interface IAddStandardDisposableListenerSignature {\n\t(node: HTMLElement, type: 'click', handler: (event: IMouseEvent) => void, useCapture?: boolean): IDisposable;\n\t(node: HTMLElement, type: 'mousedown', handler: (event: IMouseEvent) => void, useCapture?: boolean): IDisposable;\n\t(node: HTMLElement, type: 'keydown', handler: (event: IKeyboardEvent) => void, useCapture?: boolean): IDisposable;\n\t(node: HTMLElement, type: 'keypress', handler: (event: IKeyboardEvent) => void, useCapture?: boolean): IDisposable;\n\t(node: HTMLElement, type: 'keyup', handler: (event: IKeyboardEvent) => void, useCapture?: boolean): IDisposable;\n\t(node: HTMLElement, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable;\n}\nfunction _wrapAsStandardMouseEvent(handler: (e: IMouseEvent) => void): (e: MouseEvent) => void {\n\treturn function (e: MouseEvent) {\n\t\treturn handler(new StandardMouseEvent(e));\n\t};\n}\nfunction _wrapAsStandardKeyboardEvent(handler: (e: IKeyboardEvent) => void): (e: KeyboardEvent) => void {\n\treturn function (e: KeyboardEvent) {\n\t\treturn handler(new StandardKeyboardEvent(e));\n\t};\n}\nexport let addStandardDisposableListener: IAddStandardDisposableListenerSignature = function addStandardDisposableListener(node: HTMLElement, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable {\n\tlet wrapHandler = handler;\n\n\tif (type === 'click' || type === 'mousedown') {\n\t\twrapHandler = _wrapAsStandardMouseEvent(handler);\n\t} else if (type === 'keydown' || type === 'keypress' || type === 'keyup') {\n\t\twrapHandler = _wrapAsStandardKeyboardEvent(handler);\n\t}\n\n\treturn addDisposableListener(node, type, wrapHandler, useCapture);\n};\n\nexport function addDisposableNonBubblingMouseOutListener(node: Element, handler: (event: MouseEvent) => void): IDisposable {\n\treturn addDisposableListener(node, 'mouseout', (e: MouseEvent) => {\n\t\t// Mouse out bubbles, so this is an attempt to ignore faux mouse outs coming from children elements\n\t\tlet toElement = (e.relatedTarget || e.toElement);\n\t\twhile (toElement && toElement !== node) {\n\t\t\ttoElement = toElement.parentNode;\n\t\t}\n\t\tif (toElement === node) {\n\t\t\treturn;\n\t\t}\n\n\t\thandler(e);\n\t});\n}\n\nconst _animationFrame = (function () {\n\tlet emulatedRequestAnimationFrame = (callback: (time: number) => void): number => {\n\t\treturn setTimeout(() => callback(new Date().getTime()), 0);\n\t};\n\tlet nativeRequestAnimationFrame: (callback: (time: number) => void) => number =\n\t\tself.requestAnimationFrame\n\t\t|| (self).msRequestAnimationFrame\n\t\t|| (self).webkitRequestAnimationFrame\n\t\t|| (self).mozRequestAnimationFrame\n\t\t|| (self).oRequestAnimationFrame;\n\n\n\n\tlet emulatedCancelAnimationFrame = (id: number) => { };\n\tlet nativeCancelAnimationFrame: (id: number) => void =\n\t\tself.cancelAnimationFrame || (self).cancelRequestAnimationFrame\n\t\t|| (self).msCancelAnimationFrame || (self).msCancelRequestAnimationFrame\n\t\t|| (self).webkitCancelAnimationFrame || (self).webkitCancelRequestAnimationFrame\n\t\t|| (self).mozCancelAnimationFrame || (self).mozCancelRequestAnimationFrame\n\t\t|| (self).oCancelAnimationFrame || (self).oCancelRequestAnimationFrame;\n\n\tlet isNative = !!nativeRequestAnimationFrame;\n\tlet request = nativeRequestAnimationFrame || emulatedRequestAnimationFrame;\n\tlet cancel = nativeCancelAnimationFrame || emulatedCancelAnimationFrame;\n\n\treturn {\n\t\tisNative: isNative,\n\t\trequest: (callback: (time: number) => void): number => {\n\t\t\treturn request(callback);\n\t\t},\n\t\tcancel: (id: number) => {\n\t\t\treturn cancel(id);\n\t\t}\n\t};\n})();\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: (runner: () => void, priority?: number) => IDisposable;\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: (runner: () => void, priority?: number) => IDisposable;\n\nclass AnimationFrameQueueItem implements IDisposable {\n\n\tprivate _runner: () => void;\n\tpublic priority: number;\n\tprivate _canceled: boolean;\n\n\tconstructor(runner: () => void, priority: number) {\n\t\tthis._runner = runner;\n\t\tthis.priority = priority;\n\t\tthis._canceled = false;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._canceled = true;\n\t}\n\n\tpublic execute(): void {\n\t\tif (this._canceled) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tthis._runner();\n\t\t} catch (e) {\n\t\t\tonUnexpectedError(e);\n\t\t}\n\t}\n\n\t// Sort by priority (largest to lowest)\n\tpublic static sort(a: AnimationFrameQueueItem, b: AnimationFrameQueueItem): number {\n\t\treturn b.priority - a.priority;\n\t}\n}\n\n(function () {\n\t/**\n\t * The runners scheduled at the next animation frame\n\t */\n\tlet NEXT_QUEUE: AnimationFrameQueueItem[] = [];\n\t/**\n\t * The runners scheduled at the current animation frame\n\t */\n\tlet CURRENT_QUEUE: AnimationFrameQueueItem[] = null;\n\t/**\n\t * A flag to keep track if the native requestAnimationFrame was already called\n\t */\n\tlet animFrameRequested = false;\n\t/**\n\t * A flag to indicate if currently handling a native requestAnimationFrame callback\n\t */\n\tlet inAnimationFrameRunner = false;\n\n\tlet animationFrameRunner = () => {\n\t\tanimFrameRequested = false;\n\n\t\tCURRENT_QUEUE = NEXT_QUEUE;\n\t\tNEXT_QUEUE = [];\n\n\t\tinAnimationFrameRunner = true;\n\t\twhile (CURRENT_QUEUE.length > 0) {\n\t\t\tCURRENT_QUEUE.sort(AnimationFrameQueueItem.sort);\n\t\t\tlet top = CURRENT_QUEUE.shift();\n\t\t\ttop.execute();\n\t\t}\n\t\tinAnimationFrameRunner = false;\n\t};\n\n\tscheduleAtNextAnimationFrame = (runner: () => void, priority: number = 0) => {\n\t\tlet item = new AnimationFrameQueueItem(runner, priority);\n\t\tNEXT_QUEUE.push(item);\n\n\t\tif (!animFrameRequested) {\n\t\t\tanimFrameRequested = true;\n\t\t\t_animationFrame.request(animationFrameRunner);\n\t\t}\n\n\t\treturn item;\n\t};\n\n\trunAtThisOrScheduleAtNextAnimationFrame = (runner: () => void, priority?: number) => {\n\t\tif (inAnimationFrameRunner) {\n\t\t\tlet item = new AnimationFrameQueueItem(runner, priority);\n\t\t\tCURRENT_QUEUE.push(item);\n\t\t\treturn item;\n\t\t} else {\n\t\t\treturn scheduleAtNextAnimationFrame(runner, priority);\n\t\t}\n\t};\n})();\n\n/**\n * Add a throttled listener. `handler` is fired at most every 16ms or with the next animation frame (if browser supports it).\n */\nexport interface IEventMerger {\n\t(lastEvent: R, currentEvent: Event): R;\n}\n\nconst MINIMUM_TIME_MS = 16;\nconst DEFAULT_EVENT_MERGER: IEventMerger = function (lastEvent: Event, currentEvent: Event) {\n\treturn currentEvent;\n};\n\nclass TimeoutThrottledDomListener extends Disposable {\n\n\tconstructor(node: any, type: string, handler: (event: R) => void, eventMerger: IEventMerger = DEFAULT_EVENT_MERGER, minimumTimeMs: number = MINIMUM_TIME_MS) {\n\t\tsuper();\n\n\t\tlet lastEvent: R = null;\n\t\tlet lastHandlerTime = 0;\n\t\tlet timeout = this._register(new TimeoutTimer());\n\n\t\tlet invokeHandler = () => {\n\t\t\tlastHandlerTime = (new Date()).getTime();\n\t\t\thandler(lastEvent);\n\t\t\tlastEvent = null;\n\t\t};\n\n\t\tthis._register(addDisposableListener(node, type, (e) => {\n\n\t\t\tlastEvent = eventMerger(lastEvent, e);\n\t\t\tlet elapsedTime = (new Date()).getTime() - lastHandlerTime;\n\n\t\t\tif (elapsedTime >= minimumTimeMs) {\n\t\t\t\ttimeout.cancel();\n\t\t\t\tinvokeHandler();\n\t\t\t} else {\n\t\t\t\ttimeout.setIfNotSet(invokeHandler, minimumTimeMs - elapsedTime);\n\t\t\t}\n\t\t}));\n\t}\n}\n\nexport function addDisposableThrottledListener(node: any, type: string, handler: (event: R) => void, eventMerger?: IEventMerger, minimumTimeMs?: number): IDisposable {\n\treturn new TimeoutThrottledDomListener(node, type, handler, eventMerger, minimumTimeMs);\n}\n\nexport function getComputedStyle(el: HTMLElement): CSSStyleDeclaration {\n\treturn document.defaultView.getComputedStyle(el, null);\n}\n\n// Adapted from WinJS\n// Converts a CSS positioning string for the specified element to pixels.\nconst convertToPixels: (element: HTMLElement, value: string) => number = (function () {\n\treturn function (element: HTMLElement, value: string): number {\n\t\treturn parseFloat(value) || 0;\n\t};\n})();\n\nfunction getDimension(element: HTMLElement, cssPropertyName: string, jsPropertyName: string): number {\n\tlet computedStyle: CSSStyleDeclaration = getComputedStyle(element);\n\tlet value = '0';\n\tif (computedStyle) {\n\t\tif (computedStyle.getPropertyValue) {\n\t\t\tvalue = computedStyle.getPropertyValue(cssPropertyName);\n\t\t} else {\n\t\t\t// IE8\n\t\t\tvalue = (computedStyle).getAttribute(jsPropertyName);\n\t\t}\n\t}\n\treturn convertToPixels(element, value);\n}\n\nconst sizeUtils = {\n\n\tgetBorderLeftWidth: function (element: HTMLElement): number {\n\t\treturn getDimension(element, 'border-left-width', 'borderLeftWidth');\n\t},\n\tgetBorderTopWidth: function (element: HTMLElement): number {\n\t\treturn getDimension(element, 'border-top-width', 'borderTopWidth');\n\t},\n\tgetBorderRightWidth: function (element: HTMLElement): number {\n\t\treturn getDimension(element, 'border-right-width', 'borderRightWidth');\n\t},\n\tgetBorderBottomWidth: function (element: HTMLElement): number {\n\t\treturn getDimension(element, 'border-bottom-width', 'borderBottomWidth');\n\t},\n\n\tgetPaddingLeft: function (element: HTMLElement): number {\n\t\treturn getDimension(element, 'padding-left', 'paddingLeft');\n\t},\n\tgetPaddingTop: function (element: HTMLElement): number {\n\t\treturn getDimension(element, 'padding-top', 'paddingTop');\n\t},\n\tgetPaddingRight: function (element: HTMLElement): number {\n\t\treturn getDimension(element, 'padding-right', 'paddingRight');\n\t},\n\tgetPaddingBottom: function (element: HTMLElement): number {\n\t\treturn getDimension(element, 'padding-bottom', 'paddingBottom');\n\t},\n\n\tgetMarginLeft: function (element: HTMLElement): number {\n\t\treturn getDimension(element, 'margin-left', 'marginLeft');\n\t},\n\tgetMarginTop: function (element: HTMLElement): number {\n\t\treturn getDimension(element, 'margin-top', 'marginTop');\n\t},\n\tgetMarginRight: function (element: HTMLElement): number {\n\t\treturn getDimension(element, 'margin-right', 'marginRight');\n\t},\n\tgetMarginBottom: function (element: HTMLElement): number {\n\t\treturn getDimension(element, 'margin-bottom', 'marginBottom');\n\t},\n\t__commaSentinel: false\n};\n\n// ----------------------------------------------------------------------------------------\n// Position & Dimension\n\nexport function getTopLeftOffset(element: HTMLElement): { left: number; top: number; } {\n\t// Adapted from WinJS.Utilities.getPosition\n\t// and added borders to the mix\n\n\tlet offsetParent = element.offsetParent, top = element.offsetTop, left = element.offsetLeft;\n\n\twhile ((element = element.parentNode) !== null && element !== document.body && element !== document.documentElement) {\n\t\ttop -= element.scrollTop;\n\t\tlet c = getComputedStyle(element);\n\t\tif (c) {\n\t\t\tleft -= c.direction !== 'rtl' ? element.scrollLeft : -element.scrollLeft;\n\t\t}\n\n\t\tif (element === offsetParent) {\n\t\t\tleft += sizeUtils.getBorderLeftWidth(element);\n\t\t\ttop += sizeUtils.getBorderTopWidth(element);\n\t\t\ttop += element.offsetTop;\n\t\t\tleft += element.offsetLeft;\n\t\t\toffsetParent = element.offsetParent;\n\t\t}\n\t}\n\n\treturn {\n\t\tleft: left,\n\t\ttop: top\n\t};\n}\n\nexport interface IDomNodePagePosition {\n\tleft: number;\n\ttop: number;\n\twidth: number;\n\theight: number;\n}\n\n/**\n * Returns the position of a dom node relative to the entire page.\n */\nexport function getDomNodePagePosition(domNode: HTMLElement): IDomNodePagePosition {\n\tlet bb = domNode.getBoundingClientRect();\n\treturn {\n\t\tleft: bb.left + StandardWindow.scrollX,\n\t\ttop: bb.top + StandardWindow.scrollY,\n\t\twidth: bb.width,\n\t\theight: bb.height\n\t};\n}\n\nexport interface IStandardWindow {\n\tscrollX: number;\n\tscrollY: number;\n}\n\nexport const StandardWindow: IStandardWindow = new class {\n\tget scrollX(): number {\n\t\tif (typeof window.scrollX === 'number') {\n\t\t\t// modern browsers\n\t\t\treturn window.scrollX;\n\t\t} else {\n\t\t\treturn document.body.scrollLeft + document.documentElement.scrollLeft;\n\t\t}\n\t}\n\n\tget scrollY(): number {\n\t\tif (typeof window.scrollY === 'number') {\n\t\t\t// modern browsers\n\t\t\treturn window.scrollY;\n\t\t} else {\n\t\t\treturn document.body.scrollTop + document.documentElement.scrollTop;\n\t\t}\n\t}\n};\n\n// Adapted from WinJS\n// Gets the width of the content of the specified element. The content width does not include borders or padding.\nexport function getContentWidth(element: HTMLElement): number {\n\tlet border = sizeUtils.getBorderLeftWidth(element) + sizeUtils.getBorderRightWidth(element);\n\tlet padding = sizeUtils.getPaddingLeft(element) + sizeUtils.getPaddingRight(element);\n\treturn element.offsetWidth - border - padding;\n}\n\n// Adapted from WinJS\n// Gets the width of the element, including margins.\nexport function getTotalWidth(element: HTMLElement): number {\n\tlet margin = sizeUtils.getMarginLeft(element) + sizeUtils.getMarginRight(element);\n\treturn element.offsetWidth + margin;\n}\n\nexport function getTotalScrollWidth(element: HTMLElement): number {\n\tlet margin = sizeUtils.getMarginLeft(element) + sizeUtils.getMarginRight(element);\n\treturn element.scrollWidth + margin;\n}\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: HTMLElement): number {\n\tlet border = sizeUtils.getBorderTopWidth(element) + sizeUtils.getBorderBottomWidth(element);\n\tlet padding = sizeUtils.getPaddingTop(element) + sizeUtils.getPaddingBottom(element);\n\treturn element.offsetHeight - border - padding;\n}\n\n// Adapted from WinJS\n// Gets the height of the element, including its margins.\nexport function getTotalHeight(element: HTMLElement): number {\n\tlet margin = sizeUtils.getMarginTop(element) + sizeUtils.getMarginBottom(element);\n\treturn element.offsetHeight + margin;\n}\n\n// Gets the left coordinate of the specified element relative to the specified parent.\nfunction getRelativeLeft(element: HTMLElement, parent: HTMLElement): number {\n\tif (element === null) {\n\t\treturn 0;\n\t}\n\n\tlet elementPosition = getTopLeftOffset(element);\n\tlet parentPosition = getTopLeftOffset(parent);\n\treturn elementPosition.left - parentPosition.left;\n}\n\nexport function getLargestChildWidth(parent: HTMLElement, children: HTMLElement[]): number {\n\tlet childWidths = children.map((child) => {\n\t\treturn Math.max(getTotalScrollWidth(child), getTotalWidth(child)) + getRelativeLeft(child, parent) || 0;\n\t});\n\tlet maxWidth = Math.max(...childWidths);\n\treturn maxWidth;\n}\n\n// ----------------------------------------------------------------------------------------\n\nexport function isAncestor(testChild: Node, testAncestor: Node): boolean {\n\twhile (testChild) {\n\t\tif (testChild === testAncestor) {\n\t\t\treturn true;\n\t\t}\n\t\ttestChild = testChild.parentNode;\n\t}\n\n\treturn false;\n}\n\nexport function findParentWithClass(node: HTMLElement, clazz: string, stopAtClazz?: string): HTMLElement {\n\twhile (node) {\n\t\tif (hasClass(node, clazz)) {\n\t\t\treturn node;\n\t\t}\n\n\t\tif (stopAtClazz && hasClass(node, stopAtClazz)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tnode = node.parentNode;\n\t}\n\n\treturn null;\n}\n\nexport function createStyleSheet(container: HTMLElement = document.getElementsByTagName('head')[0]): HTMLStyleElement {\n\tlet style = document.createElement('style');\n\tstyle.type = 'text/css';\n\tstyle.media = 'screen';\n\tcontainer.appendChild(style);\n\treturn style;\n}\n\nconst sharedStyle = createStyleSheet();\n\nfunction getDynamicStyleSheetRules(style: any) {\n\tif (style && style.sheet && style.sheet.rules) {\n\t\t// Chrome, IE\n\t\treturn style.sheet.rules;\n\t}\n\tif (style && style.sheet && style.sheet.cssRules) {\n\t\t// FF\n\t\treturn style.sheet.cssRules;\n\t}\n\treturn [];\n}\n\nexport function createCSSRule(selector: string, cssText: string, style: HTMLStyleElement = sharedStyle): void {\n\tif (!style || !cssText) {\n\t\treturn;\n\t}\n\n\t(style.sheet).insertRule(selector + '{' + cssText + '}', 0);\n}\n\nexport function getCSSRule(selector: string, style: HTMLStyleElement = sharedStyle): any {\n\tif (!style) {\n\t\treturn null;\n\t}\n\n\tlet rules = getDynamicStyleSheetRules(style);\n\tfor (let i = 0; i < rules.length; i++) {\n\t\tlet rule = rules[i];\n\t\tlet normalizedSelectorText = rule.selectorText.replace(/::/gi, ':');\n\t\tif (normalizedSelectorText === selector) {\n\t\t\treturn rule;\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport function removeCSSRulesContainingSelector(ruleName: string, style = sharedStyle): void {\n\tif (!style) {\n\t\treturn;\n\t}\n\n\tlet rules = getDynamicStyleSheetRules(style);\n\tlet toDelete: number[] = [];\n\tfor (let i = 0; i < rules.length; i++) {\n\t\tlet rule = rules[i];\n\t\tif (rule.selectorText.indexOf(ruleName) !== -1) {\n\t\t\ttoDelete.push(i);\n\t\t}\n\t}\n\n\tfor (let i = toDelete.length - 1; i >= 0; i--) {\n\t\tstyle.sheet.deleteRule(toDelete[i]);\n\t}\n}\n\nexport function isHTMLElement(o: any): o is HTMLElement {\n\tif (typeof HTMLElement === 'object') {\n\t\treturn o instanceof HTMLElement;\n\t}\n\treturn o && typeof o === 'object' && o.nodeType === 1 && typeof o.nodeName === 'string';\n}\n\nexport const EventType = {\n\t// Mouse\n\tCLICK: 'click',\n\tAUXCLICK: 'auxclick', // >= Chrome 56\n\tDBLCLICK: 'dblclick',\n\tMOUSE_UP: 'mouseup',\n\tMOUSE_DOWN: 'mousedown',\n\tMOUSE_OVER: 'mouseover',\n\tMOUSE_MOVE: 'mousemove',\n\tMOUSE_OUT: 'mouseout',\n\tCONTEXT_MENU: 'contextmenu',\n\tWHEEL: 'wheel',\n\t// Keyboard\n\tKEY_DOWN: 'keydown',\n\tKEY_PRESS: 'keypress',\n\tKEY_UP: 'keyup',\n\t// HTML Document\n\tLOAD: 'load',\n\tUNLOAD: 'unload',\n\tABORT: 'abort',\n\tERROR: 'error',\n\tRESIZE: 'resize',\n\tSCROLL: 'scroll',\n\t// Form\n\tSELECT: 'select',\n\tCHANGE: 'change',\n\tSUBMIT: 'submit',\n\tRESET: 'reset',\n\tFOCUS: 'focus',\n\tBLUR: 'blur',\n\tINPUT: 'input',\n\t// Local Storage\n\tSTORAGE: 'storage',\n\t// Drag\n\tDRAG_START: 'dragstart',\n\tDRAG: 'drag',\n\tDRAG_ENTER: 'dragenter',\n\tDRAG_LEAVE: 'dragleave',\n\tDRAG_OVER: 'dragover',\n\tDROP: 'drop',\n\tDRAG_END: 'dragend',\n\t// Animation\n\tANIMATION_START: browser.isWebKit ? 'webkitAnimationStart' : 'animationstart',\n\tANIMATION_END: browser.isWebKit ? 'webkitAnimationEnd' : 'animationend',\n\tANIMATION_ITERATION: browser.isWebKit ? 'webkitAnimationIteration' : 'animationiteration'\n};\n\nexport interface EventLike {\n\tpreventDefault(): void;\n\tstopPropagation(): void;\n}\n\nexport const EventHelper = {\n\tstop: function (e: EventLike, cancelBubble?: boolean) {\n\t\tif (e.preventDefault) {\n\t\t\te.preventDefault();\n\t\t} else {\n\t\t\t// IE8\n\t\t\t(e).returnValue = false;\n\t\t}\n\n\t\tif (cancelBubble) {\n\t\t\tif (e.stopPropagation) {\n\t\t\t\te.stopPropagation();\n\t\t\t} else {\n\t\t\t\t// IE8\n\t\t\t\t(e).cancelBubble = true;\n\t\t\t}\n\t\t}\n\t}\n};\n\nexport interface IFocusTracker {\n\taddBlurListener(fn: () => void): IDisposable;\n\taddFocusListener(fn: () => void): IDisposable;\n\tdispose(): void;\n}\n\nexport function saveParentsScrollTop(node: Element): number[] {\n\tlet r: number[] = [];\n\tfor (let i = 0; node && node.nodeType === node.ELEMENT_NODE; i++) {\n\t\tr[i] = node.scrollTop;\n\t\tnode = node.parentNode;\n\t}\n\treturn r;\n}\n\nexport function restoreParentsScrollTop(node: Element, state: number[]): void {\n\tfor (let i = 0; node && node.nodeType === node.ELEMENT_NODE; i++) {\n\t\tif (node.scrollTop !== state[i]) {\n\t\t\tnode.scrollTop = state[i];\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n}\n\nclass FocusTracker extends Disposable implements IFocusTracker {\n\n\tprivate _eventEmitter: EventEmitter;\n\n\tconstructor(element: HTMLElement | Window) {\n\t\tsuper();\n\n\t\tlet hasFocus = false;\n\t\tlet loosingFocus = false;\n\n\t\tthis._eventEmitter = this._register(new EventEmitter());\n\n\t\tlet onFocus = (event: Event) => {\n\t\t\tloosingFocus = false;\n\t\t\tif (!hasFocus) {\n\t\t\t\thasFocus = true;\n\t\t\t\tthis._eventEmitter.emit('focus', {});\n\t\t\t}\n\t\t};\n\n\t\tlet onBlur = (event: Event) => {\n\t\t\tif (hasFocus) {\n\t\t\t\tloosingFocus = true;\n\t\t\t\twindow.setTimeout(() => {\n\t\t\t\t\tif (loosingFocus) {\n\t\t\t\t\t\tloosingFocus = false;\n\t\t\t\t\t\thasFocus = false;\n\t\t\t\t\t\tthis._eventEmitter.emit('blur', {});\n\t\t\t\t\t}\n\t\t\t\t}, 0);\n\t\t\t}\n\t\t};\n\n\t\tthis._register(addDisposableListener(element, EventType.FOCUS, onFocus, true));\n\t\tthis._register(addDisposableListener(element, EventType.BLUR, onBlur, true));\n\t}\n\n\tpublic addFocusListener(fn: () => void): IDisposable {\n\t\treturn this._eventEmitter.addListener('focus', fn);\n\t}\n\n\tpublic addBlurListener(fn: () => void): IDisposable {\n\t\treturn this._eventEmitter.addListener('blur', fn);\n\t}\n}\n\nexport function trackFocus(element: HTMLElement | Window): IFocusTracker {\n\treturn new FocusTracker(element);\n}\n\nexport function append(parent: HTMLElement, ...children: T[]): T {\n\tchildren.forEach(child => parent.appendChild(child));\n\treturn children[children.length - 1];\n}\n\nexport function prepend(parent: HTMLElement, child: T): T {\n\tparent.insertBefore(child, parent.firstChild);\n\treturn child;\n}\n\nconst SELECTOR_REGEX = /([\\w\\-]+)?(#([\\w\\-]+))?((.([\\w\\-]+))*)/;\n\n// Similar to builder, but much more lightweight\nexport function $(description: string, attrs?: { [key: string]: any; }, ...children: (Node | string)[]): T {\n\tlet match = SELECTOR_REGEX.exec(description);\n\n\tif (!match) {\n\t\tthrow new Error('Bad use of emmet');\n\t}\n\n\tlet result = document.createElement(match[1] || 'div');\n\n\tif (match[3]) {\n\t\tresult.id = match[3];\n\t}\n\tif (match[4]) {\n\t\tresult.className = match[4].replace(/\\./g, ' ').trim();\n\t}\n\n\tObject.keys(attrs || {}).forEach(name => {\n\t\tif (/^on\\w+$/.test(name)) {\n\t\t\tresult[name] = attrs[name];\n\t\t} else if (name === 'selected') {\n\t\t\tconst value = attrs[name];\n\t\t\tif (value) {\n\t\t\t\tresult.setAttribute(name, 'true');\n\t\t\t}\n\n\t\t} else {\n\t\t\tresult.setAttribute(name, attrs[name]);\n\t\t}\n\t});\n\n\tchildren\n\t\t.filter(child => !!child)\n\t\t.forEach(child => {\n\t\t\tif (child instanceof Node) {\n\t\t\t\tresult.appendChild(child);\n\t\t\t} else {\n\t\t\t\tresult.appendChild(document.createTextNode(child as string));\n\t\t\t}\n\t\t});\n\n\treturn result as T;\n}\n\nexport function join(nodes: Node[], separator: Node | string): Node[] {\n\tconst result: Node[] = [];\n\n\tnodes.forEach((node, index) => {\n\t\tif (index > 0) {\n\t\t\tif (separator instanceof Node) {\n\t\t\t\tresult.push(separator.cloneNode());\n\t\t\t} else {\n\t\t\t\tresult.push(document.createTextNode(separator));\n\t\t\t}\n\t\t}\n\n\t\tresult.push(node);\n\t});\n\n\treturn result;\n}\n\nexport function show(...elements: HTMLElement[]): void {\n\tfor (let element of elements) {\n\t\telement.style.display = '';\n\t}\n}\n\nexport function hide(...elements: HTMLElement[]): void {\n\tfor (let element of elements) {\n\t\telement.style.display = 'none';\n\t}\n}\n\nfunction findParentWithAttribute(node: Node, attribute: string): HTMLElement {\n\twhile (node) {\n\t\tif (node instanceof HTMLElement && node.hasAttribute(attribute)) {\n\t\t\treturn node;\n\t\t}\n\n\t\tnode = node.parentNode;\n\t}\n\n\treturn null;\n}\n\nexport function removeTabIndexAndUpdateFocus(node: HTMLElement): void {\n\tif (!node || !node.hasAttribute('tabIndex')) {\n\t\treturn;\n\t}\n\n\t// If we are the currently focused element and tabIndex is removed,\n\t// standard DOM behavior is to move focus to the element. We\n\t// typically never want that, rather put focus to the closest element\n\t// in the hierarchy of the parent DOM nodes.\n\tif (document.activeElement === node) {\n\t\tlet parentFocusable = findParentWithAttribute(node.parentElement, 'tabIndex');\n\t\tif (parentFocusable) {\n\t\t\tparentFocusable.focus();\n\t\t}\n\t}\n\n\tnode.removeAttribute('tabindex');\n}\n\nexport function getElementsByTagName(tag: string): HTMLElement[] {\n\treturn Array.prototype.slice.call(document.getElementsByTagName(tag), 0);\n}\n\nexport function finalHandler(fn: (event: T) => any): (event: T) => any {\n\treturn e => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tfn(e);\n\t};\n}\n\nexport function domContentLoaded(): TPromise {\n\treturn new TPromise((c, e) => {\n\t\tconst readyState = document.readyState;\n\t\tif (readyState === 'complete' || (document && document.body !== null)) {\n\t\t\twindow.setImmediate(c);\n\t\t} else {\n\t\t\twindow.addEventListener('DOMContentLoaded', c, false);\n\t\t}\n\t});\n}\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: number): number {\n\tconst screenPx = window.devicePixelRatio * cssPx;\n\treturn Math.max(1, Math.floor(screenPx)) / window.devicePixelRatio;\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'use strict';\n\nimport * as dom from 'vs/base/browser/dom';\n\nexport class FastDomNode {\n\n\tpublic readonly domNode: T;\n\tprivate _maxWidth: number;\n\tprivate _width: number;\n\tprivate _height: number;\n\tprivate _top: number;\n\tprivate _left: number;\n\tprivate _bottom: number;\n\tprivate _right: number;\n\tprivate _fontFamily: string;\n\tprivate _fontWeight: string;\n\tprivate _fontSize: number;\n\tprivate _lineHeight: number;\n\tprivate _letterSpacing: number;\n\tprivate _className: string;\n\tprivate _display: string;\n\tprivate _position: string;\n\tprivate _visibility: string;\n\tprivate _layerHint: boolean;\n\n\tconstructor(domNode: T) {\n\t\tthis.domNode = domNode;\n\t\tthis._maxWidth = -1;\n\t\tthis._width = -1;\n\t\tthis._height = -1;\n\t\tthis._top = -1;\n\t\tthis._left = -1;\n\t\tthis._bottom = -1;\n\t\tthis._right = -1;\n\t\tthis._fontFamily = '';\n\t\tthis._fontWeight = '';\n\t\tthis._fontSize = -1;\n\t\tthis._lineHeight = -1;\n\t\tthis._letterSpacing = -100;\n\t\tthis._className = '';\n\t\tthis._display = '';\n\t\tthis._position = '';\n\t\tthis._visibility = '';\n\t\tthis._layerHint = false;\n\t}\n\n\tpublic setMaxWidth(maxWidth: number): void {\n\t\tif (this._maxWidth === maxWidth) {\n\t\t\treturn;\n\t\t}\n\t\tthis._maxWidth = maxWidth;\n\t\tthis.domNode.style.maxWidth = this._maxWidth + 'px';\n\t}\n\n\tpublic setWidth(width: number): void {\n\t\tif (this._width === width) {\n\t\t\treturn;\n\t\t}\n\t\tthis._width = width;\n\t\tthis.domNode.style.width = this._width + 'px';\n\t}\n\n\tpublic unsetWidth(): void {\n\t\tif (this._width === -1) {\n\t\t\treturn;\n\t\t}\n\t\tthis._width = -1;\n\t\tthis.domNode.style.width = '';\n\t}\n\n\tpublic setHeight(height: number): void {\n\t\tif (this._height === height) {\n\t\t\treturn;\n\t\t}\n\t\tthis._height = height;\n\t\tthis.domNode.style.height = this._height + 'px';\n\t}\n\n\tpublic unsetHeight(): void {\n\t\tif (this._height === -1) {\n\t\t\treturn;\n\t\t}\n\t\tthis._height = -1;\n\t\tthis.domNode.style.height = '';\n\t}\n\n\tpublic setTop(top: number): void {\n\t\tif (this._top === top) {\n\t\t\treturn;\n\t\t}\n\t\tthis._top = top;\n\t\tthis.domNode.style.top = this._top + 'px';\n\t}\n\n\tpublic unsetTop(): void {\n\t\tif (this._top === -1) {\n\t\t\treturn;\n\t\t}\n\t\tthis._top = -1;\n\t\tthis.domNode.style.top = '';\n\t}\n\n\tpublic setLeft(left: number): void {\n\t\tif (this._left === left) {\n\t\t\treturn;\n\t\t}\n\t\tthis._left = left;\n\t\tthis.domNode.style.left = this._left + 'px';\n\t}\n\n\tpublic setBottom(bottom: number): void {\n\t\tif (this._bottom === bottom) {\n\t\t\treturn;\n\t\t}\n\t\tthis._bottom = bottom;\n\t\tthis.domNode.style.bottom = this._bottom + 'px';\n\t}\n\n\tpublic setRight(right: number): void {\n\t\tif (this._right === right) {\n\t\t\treturn;\n\t\t}\n\t\tthis._right = right;\n\t\tthis.domNode.style.right = this._right + 'px';\n\t}\n\n\tpublic setFontFamily(fontFamily: string): void {\n\t\tif (this._fontFamily === fontFamily) {\n\t\t\treturn;\n\t\t}\n\t\tthis._fontFamily = fontFamily;\n\t\tthis.domNode.style.fontFamily = this._fontFamily;\n\t}\n\n\tpublic setFontWeight(fontWeight: string): void {\n\t\tif (this._fontWeight === fontWeight) {\n\t\t\treturn;\n\t\t}\n\t\tthis._fontWeight = fontWeight;\n\t\tthis.domNode.style.fontWeight = this._fontWeight;\n\t}\n\n\tpublic setFontSize(fontSize: number): void {\n\t\tif (this._fontSize === fontSize) {\n\t\t\treturn;\n\t\t}\n\t\tthis._fontSize = fontSize;\n\t\tthis.domNode.style.fontSize = this._fontSize + 'px';\n\t}\n\n\tpublic setLineHeight(lineHeight: number): void {\n\t\tif (this._lineHeight === lineHeight) {\n\t\t\treturn;\n\t\t}\n\t\tthis._lineHeight = lineHeight;\n\t\tthis.domNode.style.lineHeight = this._lineHeight + 'px';\n\t}\n\n\tpublic setLetterSpacing(letterSpacing: number): void {\n\t\tif (this._letterSpacing === letterSpacing) {\n\t\t\treturn;\n\t\t}\n\t\tthis._letterSpacing = letterSpacing;\n\t\tthis.domNode.style.letterSpacing = this._letterSpacing + 'px';\n\t}\n\n\tpublic setClassName(className: string): void {\n\t\tif (this._className === className) {\n\t\t\treturn;\n\t\t}\n\t\tthis._className = className;\n\t\tthis.domNode.className = this._className;\n\t}\n\n\tpublic toggleClassName(className: string, shouldHaveIt?: boolean): void {\n\t\tdom.toggleClass(this.domNode, className, shouldHaveIt);\n\t\tthis._className = this.domNode.className;\n\t}\n\n\tpublic addClassName(className: string): void {\n\t\tdom.addClass(this.domNode, className);\n\t\tthis._className = this.domNode.className;\n\t}\n\n\tpublic removeClassName(className: string): void {\n\t\tdom.removeClass(this.domNode, className);\n\t\tthis._className = this.domNode.className;\n\t}\n\n\tpublic setDisplay(display: string): void {\n\t\tif (this._display === display) {\n\t\t\treturn;\n\t\t}\n\t\tthis._display = display;\n\t\tthis.domNode.style.display = this._display;\n\t}\n\n\tpublic setPosition(position: string): void {\n\t\tif (this._position === position) {\n\t\t\treturn;\n\t\t}\n\t\tthis._position = position;\n\t\tthis.domNode.style.position = this._position;\n\t}\n\n\tpublic setVisibility(visibility: string): void {\n\t\tif (this._visibility === visibility) {\n\t\t\treturn;\n\t\t}\n\t\tthis._visibility = visibility;\n\t\tthis.domNode.style.visibility = this._visibility;\n\t}\n\n\tpublic setLayerHinting(layerHint: boolean): void {\n\t\tif (this._layerHint === layerHint) {\n\t\t\treturn;\n\t\t}\n\t\tthis._layerHint = layerHint;\n\t\t(this.domNode.style).willChange = this._layerHint ? 'transform' : 'auto';\n\t}\n\n\tpublic setAttribute(name: string, value: string): void {\n\t\tthis.domNode.setAttribute(name, value);\n\t}\n\n\tpublic getAttribute(name: string): string {\n\t\treturn this.domNode.getAttribute(name);\n\t}\n\n\tpublic removeAttribute(name: string): void {\n\t\tthis.domNode.removeAttribute(name);\n\t}\n\n\tpublic hasAttribute(name: string): boolean {\n\t\treturn this.domNode.hasAttribute(name);\n\t}\n\n\tpublic appendChild(child: FastDomNode): void {\n\t\tthis.domNode.appendChild(child.domNode);\n\t}\n\n\tpublic removeChild(child: FastDomNode): void {\n\t\tthis.domNode.removeChild(child.domNode);\n\t}\n}\n\nexport function createFastDomNode(domNode: T): FastDomNode {\n\treturn 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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Disposable, IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport * as dom from 'vs/base/browser/dom';\nimport { IframeUtils } from 'vs/base/browser/iframe';\nimport { StandardMouseEvent } from 'vs/base/browser/mouseEvent';\n\nexport interface IStandardMouseMoveEventData {\n\tleftButton: boolean;\n\tposx: number;\n\tposy: number;\n}\n\nexport interface IEventMerger {\n\t(lastEvent: R, currentEvent: MouseEvent): R;\n}\n\nexport interface IMouseMoveCallback {\n\t(mouseMoveData: R): void;\n}\n\nexport interface IOnStopCallback {\n\t(): void;\n}\n\nexport function standardMouseMoveMerger(lastEvent: IStandardMouseMoveEventData, currentEvent: MouseEvent): IStandardMouseMoveEventData {\n\tlet ev = new StandardMouseEvent(currentEvent);\n\tev.preventDefault();\n\treturn {\n\t\tleftButton: ev.leftButton,\n\t\tposx: ev.posx,\n\t\tposy: ev.posy\n\t};\n}\n\nexport class GlobalMouseMoveMonitor extends Disposable {\n\n\tprivate hooks: IDisposable[];\n\tprivate mouseMoveEventMerger: IEventMerger;\n\tprivate mouseMoveCallback: IMouseMoveCallback;\n\tprivate onStopCallback: IOnStopCallback;\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.hooks = [];\n\t\tthis.mouseMoveEventMerger = null;\n\t\tthis.mouseMoveCallback = null;\n\t\tthis.onStopCallback = null;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.stopMonitoring(false);\n\t\tsuper.dispose();\n\t}\n\n\tpublic stopMonitoring(invokeStopCallback: boolean): void {\n\t\tif (!this.isMonitoring()) {\n\t\t\t// Not monitoring\n\t\t\treturn;\n\t\t}\n\n\t\t// Unhook\n\t\tthis.hooks = dispose(this.hooks);\n\t\tthis.mouseMoveEventMerger = null;\n\t\tthis.mouseMoveCallback = null;\n\t\tlet onStopCallback = this.onStopCallback;\n\t\tthis.onStopCallback = null;\n\n\t\tif (invokeStopCallback) {\n\t\t\tonStopCallback();\n\t\t}\n\t}\n\n\tpublic isMonitoring() {\n\t\treturn this.hooks.length > 0;\n\t}\n\n\tpublic startMonitoring(\n\t\tmouseMoveEventMerger: IEventMerger,\n\t\tmouseMoveCallback: IMouseMoveCallback,\n\t\tonStopCallback: IOnStopCallback\n\t): void {\n\t\tif (this.isMonitoring()) {\n\t\t\t// I am already hooked\n\t\t\treturn;\n\t\t}\n\t\tthis.mouseMoveEventMerger = mouseMoveEventMerger;\n\t\tthis.mouseMoveCallback = mouseMoveCallback;\n\t\tthis.onStopCallback = onStopCallback;\n\n\t\tlet windowChain = IframeUtils.getSameOriginWindowChain();\n\t\tfor (let i = 0; i < windowChain.length; i++) {\n\t\t\tthis.hooks.push(dom.addDisposableThrottledListener(windowChain[i].window.document, 'mousemove',\n\t\t\t\t(data: R) => this.mouseMoveCallback(data),\n\t\t\t\t(lastEvent: R, currentEvent: MouseEvent) => this.mouseMoveEventMerger(lastEvent, currentEvent)\n\t\t\t));\n\t\t\tthis.hooks.push(dom.addDisposableListener(windowChain[i].window.document, 'mouseup', (e: MouseEvent) => this.stopMonitoring(true)));\n\t\t}\n\n\t\tif (IframeUtils.hasDifferentOriginAncestor()) {\n\t\t\tlet lastSameOriginAncestor = windowChain[windowChain.length - 1];\n\t\t\t// We might miss a mouse up if it happens outside the iframe\n\t\t\t// This one is for Chrome\n\t\t\tthis.hooks.push(dom.addDisposableListener(lastSameOriginAncestor.window.document, 'mouseout', (browserEvent: MouseEvent) => {\n\t\t\t\tlet e = new StandardMouseEvent(browserEvent);\n\t\t\t\tif (e.target.tagName.toLowerCase() === 'html') {\n\t\t\t\t\tthis.stopMonitoring(true);\n\t\t\t\t}\n\t\t\t}));\n\t\t\t// This one is for FF\n\t\t\tthis.hooks.push(dom.addDisposableListener(lastSameOriginAncestor.window.document, 'mouseover', (browserEvent: MouseEvent) => {\n\t\t\t\tlet e = new StandardMouseEvent(browserEvent);\n\t\t\t\tif (e.target.tagName.toLowerCase() === 'html') {\n\t\t\t\t\tthis.stopMonitoring(true);\n\t\t\t\t}\n\t\t\t}));\n\t\t\t// This one is for IE\n\t\t\tthis.hooks.push(dom.addDisposableListener(lastSameOriginAncestor.window.document.body, 'mouseleave', (browserEvent: MouseEvent) => {\n\t\t\t\tthis.stopMonitoring(true);\n\t\t\t}));\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport DOM = require('vs/base/browser/dom');\nimport { defaultGenerator } from 'vs/base/common/idGenerator';\nimport { escape } from 'vs/base/common/strings';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { MarkedString, removeMarkdownEscapes } from 'vs/base/common/htmlContent';\nimport { marked } from 'vs/base/common/marked/marked';\nimport { IMouseEvent } from 'vs/base/browser/mouseEvent';\n\nexport interface RenderOptions {\n\tclassName?: string;\n\tinline?: boolean;\n\tactionCallback?: (content: string, event?: IMouseEvent) => void;\n\tcodeBlockRenderer?: (modeId: string, value: string) => string | TPromise;\n}\n\nfunction createElement(options: RenderOptions): HTMLElement {\n\tconst tagName = options.inline ? 'span' : 'div';\n\tconst element = document.createElement(tagName);\n\tif (options.className) {\n\t\telement.className = options.className;\n\t}\n\treturn element;\n}\n\n\nexport function renderMarkedString(markedString: MarkedString, options: RenderOptions = {}): Node {\n\t// this is sort of legacy given that we have full\n\t// support for markdown. Turn this into markdown\n\t// and continue\n\tlet markdown: string;\n\tif (typeof markedString === 'string') {\n\t\tmarkdown = markedString;\n\t} else {\n\t\tmarkdown = '```' + markedString.language + '\\n' + markedString.value + '\\n```';\n\t}\n\treturn renderMarkdown(markdown, options);\n}\n\nexport function renderText(text: string, options: RenderOptions = {}): Node {\n\tconst element = createElement(options);\n\telement.textContent = text;\n\treturn element;\n}\n\nexport function renderFormattedText(formattedText: string, options: RenderOptions = {}): Node {\n\tconst element = createElement(options);\n\t_renderFormattedText(element, parseFormattedText(formattedText), options.actionCallback);\n\treturn element;\n}\n\n/**\n * Create html nodes for the given content element.\n *\n * @param content a html element description\n * @param actionCallback a callback function for any action links in the string. Argument is the zero-based index of the clicked action.\n */\nexport function renderMarkdown(markdown: string, options: RenderOptions = {}): Node {\n\tconst element = createElement(options);\n\n\tconst { codeBlockRenderer, actionCallback } = options;\n\n\t// signal to code-block render that the\n\t// element has been created\n\tlet signalInnerHTML: Function;\n\tconst withInnerHTML = new TPromise(c => signalInnerHTML = c);\n\n\tconst renderer = new marked.Renderer();\n\trenderer.image = (href: string, title: string, text: string) => {\n\t\tlet dimensions: string[] = [];\n\t\tif (href) {\n\t\t\tconst splitted = href.split('|').map(s => s.trim());\n\t\t\thref = splitted[0];\n\t\t\tconst parameters = splitted[1];\n\t\t\tif (parameters) {\n\t\t\t\tconst heightFromParams = /height=(\\d+)/.exec(parameters);\n\t\t\t\tconst widthFromParams = /width=(\\d+)/.exec(parameters);\n\t\t\t\tconst height = (heightFromParams && heightFromParams[1]);\n\t\t\t\tconst width = (widthFromParams && widthFromParams[1]);\n\t\t\t\tconst widthIsFinite = isFinite(parseInt(width));\n\t\t\t\tconst heightIsFinite = isFinite(parseInt(height));\n\t\t\t\tif (widthIsFinite) {\n\t\t\t\t\tdimensions.push(`width=\"${width}\"`);\n\t\t\t\t}\n\t\t\t\tif (heightIsFinite) {\n\t\t\t\t\tdimensions.push(`height=\"${height}\"`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tlet attributes: string[] = [];\n\t\tif (href) {\n\t\t\tattributes.push(`src=\"${href}\"`);\n\t\t}\n\t\tif (text) {\n\t\t\tattributes.push(`alt=\"${text}\"`);\n\t\t}\n\t\tif (title) {\n\t\t\tattributes.push(`title=\"${title}\"`);\n\t\t}\n\t\tif (dimensions.length) {\n\t\t\tattributes = attributes.concat(dimensions);\n\t\t}\n\t\treturn '';\n\t};\n\trenderer.link = (href, title, text): string => {\n\t\t// Remove markdown escapes. Workaround for https://github.com/chjj/marked/issues/829\n\t\tif (href === text) { // raw link case\n\t\t\ttext = removeMarkdownEscapes(text);\n\t\t}\n\t\ttitle = removeMarkdownEscapes(title);\n\t\thref = removeMarkdownEscapes(href);\n\t\tif (!href || href.match(/^data:|javascript:/i)) {\n\t\t\treturn text;\n\t\t}\n\t\treturn `${text}`;\n\t};\n\trenderer.paragraph = (text): string => {\n\t\treturn `

    ${text}

    `;\n\t};\n\n\tif (options.codeBlockRenderer) {\n\t\trenderer.code = (code, lang) => {\n\t\t\tlet value = options.codeBlockRenderer(lang, code);\n\t\t\tif (typeof value === 'string') {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (TPromise.is(value)) {\n\t\t\t\t// when code-block rendering is async we return sync\n\t\t\t\t// but update the node with the real result later.\n\t\t\t\tconst id = defaultGenerator.nextId();\n\t\t\t\tTPromise.join([value, withInnerHTML]).done(values => {\n\t\t\t\t\tlet strValue = values[0] as string;\n\t\t\t\t\tlet span = element.querySelector(`span[data-code=\"${id}\"]`);\n\t\t\t\t\tif (span) {\n\t\t\t\t\t\tspan.innerHTML = strValue;\n\t\t\t\t\t}\n\t\t\t\t}, err => {\n\t\t\t\t\t// ignore\n\t\t\t\t});\n\t\t\t\treturn `${escape(code)}`;\n\t\t\t}\n\n\t\t\treturn code;\n\t\t};\n\t}\n\n\tif (options.actionCallback) {\n\t\tDOM.addStandardDisposableListener(element, 'click', event => {\n\t\t\tif (event.target.tagName === 'A') {\n\t\t\t\tconst href = event.target.dataset['href'];\n\t\t\t\tif (href) {\n\t\t\t\t\toptions.actionCallback(href, event);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\telement.innerHTML = marked(markdown, {\n\t\tsanitize: true,\n\t\trenderer\n\t});\n\tsignalInnerHTML();\n\n\treturn element;\n}\n\n// --- formatted string parsing\n\nclass StringStream {\n\tprivate source: string;\n\tprivate index: number;\n\n\tconstructor(source: string) {\n\t\tthis.source = source;\n\t\tthis.index = 0;\n\t}\n\n\tpublic eos(): boolean {\n\t\treturn this.index >= this.source.length;\n\t}\n\n\tpublic next(): string {\n\t\tvar next = this.peek();\n\t\tthis.advance();\n\t\treturn next;\n\t}\n\n\tpublic peek(): string {\n\t\treturn this.source[this.index];\n\t}\n\n\tpublic advance(): void {\n\t\tthis.index++;\n\t}\n}\n\nconst enum FormatType {\n\tInvalid,\n\tRoot,\n\tText,\n\tBold,\n\tItalics,\n\tAction,\n\tActionClose,\n\tNewLine\n}\n\ninterface IFormatParseTree {\n\ttype: FormatType;\n\tcontent?: string;\n\tindex?: number;\n\tchildren?: IFormatParseTree[];\n}\n\nfunction _renderFormattedText(element: Node, treeNode: IFormatParseTree, actionCallback?: (content: string, event?: IMouseEvent) => void) {\n\tvar child: Node;\n\n\tif (treeNode.type === FormatType.Text) {\n\t\tchild = document.createTextNode(treeNode.content);\n\t}\n\telse if (treeNode.type === FormatType.Bold) {\n\t\tchild = document.createElement('b');\n\t}\n\telse if (treeNode.type === FormatType.Italics) {\n\t\tchild = document.createElement('i');\n\t}\n\telse if (treeNode.type === FormatType.Action) {\n\t\tvar a = document.createElement('a');\n\t\ta.href = '#';\n\t\tDOM.addStandardDisposableListener(a, 'click', (event) => {\n\t\t\tactionCallback(String(treeNode.index), event);\n\t\t});\n\n\t\tchild = a;\n\t}\n\telse if (treeNode.type === FormatType.NewLine) {\n\t\tchild = document.createElement('br');\n\t}\n\telse if (treeNode.type === FormatType.Root) {\n\t\tchild = element;\n\t}\n\n\tif (element !== child) {\n\t\telement.appendChild(child);\n\t}\n\n\tif (Array.isArray(treeNode.children)) {\n\t\ttreeNode.children.forEach((nodeChild) => {\n\t\t\t_renderFormattedText(child, nodeChild, actionCallback);\n\t\t});\n\t}\n}\n\nfunction parseFormattedText(content: string): IFormatParseTree {\n\n\tvar root: IFormatParseTree = {\n\t\ttype: FormatType.Root,\n\t\tchildren: []\n\t};\n\n\tvar actionItemIndex = 0;\n\tvar current = root;\n\tvar stack: IFormatParseTree[] = [];\n\tvar stream = new StringStream(content);\n\n\twhile (!stream.eos()) {\n\t\tvar next = stream.next();\n\n\t\tvar isEscapedFormatType = (next === '\\\\' && formatTagType(stream.peek()) !== FormatType.Invalid);\n\t\tif (isEscapedFormatType) {\n\t\t\tnext = stream.next(); // unread the backslash if it escapes a format tag type\n\t\t}\n\n\t\tif (!isEscapedFormatType && isFormatTag(next) && next === stream.peek()) {\n\t\t\tstream.advance();\n\n\t\t\tif (current.type === FormatType.Text) {\n\t\t\t\tcurrent = stack.pop();\n\t\t\t}\n\n\t\t\tvar type = formatTagType(next);\n\t\t\tif (current.type === type || (current.type === FormatType.Action && type === FormatType.ActionClose)) {\n\t\t\t\tcurrent = stack.pop();\n\t\t\t} else {\n\t\t\t\tvar newCurrent: IFormatParseTree = {\n\t\t\t\t\ttype: type,\n\t\t\t\t\tchildren: []\n\t\t\t\t};\n\n\t\t\t\tif (type === FormatType.Action) {\n\t\t\t\t\tnewCurrent.index = actionItemIndex;\n\t\t\t\t\tactionItemIndex++;\n\t\t\t\t}\n\n\t\t\t\tcurrent.children.push(newCurrent);\n\t\t\t\tstack.push(current);\n\t\t\t\tcurrent = newCurrent;\n\t\t\t}\n\t\t} else if (next === '\\n') {\n\t\t\tif (current.type === FormatType.Text) {\n\t\t\t\tcurrent = stack.pop();\n\t\t\t}\n\n\t\t\tcurrent.children.push({\n\t\t\t\ttype: FormatType.NewLine\n\t\t\t});\n\n\t\t} else {\n\t\t\tif (current.type !== FormatType.Text) {\n\t\t\t\tvar textCurrent: IFormatParseTree = {\n\t\t\t\t\ttype: FormatType.Text,\n\t\t\t\t\tcontent: next\n\t\t\t\t};\n\t\t\t\tcurrent.children.push(textCurrent);\n\t\t\t\tstack.push(current);\n\t\t\t\tcurrent = textCurrent;\n\n\t\t\t} else {\n\t\t\t\tcurrent.content += next;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (current.type === FormatType.Text) {\n\t\tcurrent = stack.pop();\n\t}\n\n\tif (stack.length) {\n\t\t// incorrectly formatted string literal\n\t}\n\n\treturn root;\n}\n\nfunction isFormatTag(char: string): boolean {\n\treturn formatTagType(char) !== FormatType.Invalid;\n}\n\nfunction formatTagType(char: string): FormatType {\n\tswitch (char) {\n\t\tcase '*':\n\t\t\treturn FormatType.Bold;\n\t\tcase '_':\n\t\t\treturn FormatType.Italics;\n\t\tcase '[':\n\t\t\treturn FormatType.Action;\n\t\tcase ']':\n\t\t\treturn FormatType.ActionClose;\n\t\tdefault:\n\t\t\treturn FormatType.Invalid;\n\t}\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'use strict';\n\nimport arrays = require('vs/base/common/arrays');\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport DomUtils = require('vs/base/browser/dom');\n\nexport namespace EventType {\n\texport const Tap = '-monaco-gesturetap';\n\texport const Change = '-monaco-gesturechange';\n\texport const Start = '-monaco-gesturestart';\n\texport const End = '-monaco-gesturesend';\n\texport const Contextmenu = '-monaco-gesturecontextmenu';\n}\n\ninterface TouchData {\n\tid: number;\n\tinitialTarget: EventTarget;\n\tinitialTimeStamp: number;\n\tinitialPageX: number;\n\tinitialPageY: number;\n\trollingTimestamps: number[];\n\trollingPageX: number[];\n\trollingPageY: number[];\n}\n\nexport interface GestureEvent extends MouseEvent {\n\tinitialTarget: EventTarget;\n\ttranslationX: number;\n\ttranslationY: number;\n\tpageX: number;\n\tpageY: number;\n}\n\ninterface Touch {\n\tidentifier: number;\n\tscreenX: number;\n\tscreenY: number;\n\tclientX: number;\n\tclientY: number;\n\tpageX: number;\n\tpageY: number;\n\tradiusX: number;\n\tradiusY: number;\n\trotationAngle: number;\n\tforce: number;\n\ttarget: Element;\n}\n\ninterface TouchList {\n\t[i: number]: Touch;\n\tlength: number;\n\titem(index: number): Touch;\n\tidentifiedTouch(id: number): Touch;\n}\n\ninterface TouchEvent extends Event {\n\ttouches: TouchList;\n\ttargetTouches: TouchList;\n\tchangedTouches: TouchList;\n}\n\nexport class Gesture implements IDisposable {\n\n\tprivate static HOLD_DELAY = 700;\n\tprivate static SCROLL_FRICTION = -0.005;\n\n\tprivate targetElement: HTMLElement;\n\tprivate callOnTarget: IDisposable[];\n\tprivate handle: IDisposable;\n\n\tprivate activeTouches: { [id: number]: TouchData; };\n\n\tconstructor(target: HTMLElement) {\n\t\tthis.callOnTarget = [];\n\t\tthis.activeTouches = {};\n\t\tthis.target = target;\n\t\tthis.handle = null;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.target = null;\n\t\tif (this.handle) {\n\t\t\tthis.handle.dispose();\n\t\t\tthis.handle = null;\n\t\t}\n\t}\n\n\tpublic set target(element: HTMLElement) {\n\t\tthis.callOnTarget = dispose(this.callOnTarget);\n\n\t\tthis.activeTouches = {};\n\n\t\tthis.targetElement = element;\n\n\t\tif (!this.targetElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.callOnTarget.push(DomUtils.addDisposableListener(this.targetElement, 'touchstart', (e) => this.onTouchStart(e)));\n\t\tthis.callOnTarget.push(DomUtils.addDisposableListener(this.targetElement, 'touchend', (e) => this.onTouchEnd(e)));\n\t\tthis.callOnTarget.push(DomUtils.addDisposableListener(this.targetElement, 'touchmove', (e) => this.onTouchMove(e)));\n\t}\n\n\tprivate static newGestureEvent(type: string): GestureEvent {\n\t\tlet event = (document.createEvent('CustomEvent'));\n\t\tevent.initEvent(type, false, true);\n\t\treturn event;\n\t}\n\n\tprivate onTouchStart(e: TouchEvent): void {\n\t\tlet timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based.\n\t\te.preventDefault();\n\n\t\tif (this.handle) {\n\t\t\tthis.handle.dispose();\n\t\t\tthis.handle = null;\n\t\t}\n\n\t\tfor (let i = 0, len = e.targetTouches.length; i < len; i++) {\n\t\t\tlet touch = e.targetTouches.item(i);\n\n\t\t\tthis.activeTouches[touch.identifier] = {\n\t\t\t\tid: touch.identifier,\n\t\t\t\tinitialTarget: touch.target,\n\t\t\t\tinitialTimeStamp: timestamp,\n\t\t\t\tinitialPageX: touch.pageX,\n\t\t\t\tinitialPageY: touch.pageY,\n\t\t\t\trollingTimestamps: [timestamp],\n\t\t\t\trollingPageX: [touch.pageX],\n\t\t\t\trollingPageY: [touch.pageY]\n\t\t\t};\n\n\t\t\tlet evt = Gesture.newGestureEvent(EventType.Start);\n\t\t\tevt.pageX = touch.pageX;\n\t\t\tevt.pageY = touch.pageY;\n\t\t\tthis.targetElement.dispatchEvent(evt);\n\t\t}\n\t}\n\n\tprivate onTouchEnd(e: TouchEvent): void {\n\t\tlet timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based.\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tlet activeTouchCount = Object.keys(this.activeTouches).length;\n\n\t\tfor (let i = 0, len = e.changedTouches.length; i < len; i++) {\n\n\t\t\tlet touch = e.changedTouches.item(i);\n\n\t\t\tif (!this.activeTouches.hasOwnProperty(String(touch.identifier))) {\n\t\t\t\tconsole.warn('move of an UNKNOWN touch', touch);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet data = this.activeTouches[touch.identifier],\n\t\t\t\tholdTime = Date.now() - data.initialTimeStamp;\n\n\t\t\tif (holdTime < Gesture.HOLD_DELAY\n\t\t\t\t&& Math.abs(data.initialPageX - arrays.tail(data.rollingPageX)) < 30\n\t\t\t\t&& Math.abs(data.initialPageY - arrays.tail(data.rollingPageY)) < 30) {\n\n\t\t\t\tlet evt = Gesture.newGestureEvent(EventType.Tap);\n\t\t\t\tevt.initialTarget = data.initialTarget;\n\t\t\t\tevt.pageX = arrays.tail(data.rollingPageX);\n\t\t\t\tevt.pageY = arrays.tail(data.rollingPageY);\n\t\t\t\tthis.targetElement.dispatchEvent(evt);\n\n\t\t\t} else if (holdTime >= Gesture.HOLD_DELAY\n\t\t\t\t&& Math.abs(data.initialPageX - arrays.tail(data.rollingPageX)) < 30\n\t\t\t\t&& Math.abs(data.initialPageY - arrays.tail(data.rollingPageY)) < 30) {\n\n\t\t\t\tlet evt = Gesture.newGestureEvent(EventType.Contextmenu);\n\t\t\t\tevt.initialTarget = data.initialTarget;\n\t\t\t\tevt.pageX = arrays.tail(data.rollingPageX);\n\t\t\t\tevt.pageY = arrays.tail(data.rollingPageY);\n\t\t\t\tthis.targetElement.dispatchEvent(evt);\n\n\t\t\t} else if (activeTouchCount === 1) {\n\t\t\t\tlet finalX = arrays.tail(data.rollingPageX);\n\t\t\t\tlet finalY = arrays.tail(data.rollingPageY);\n\n\t\t\t\tlet deltaT = arrays.tail(data.rollingTimestamps) - data.rollingTimestamps[0];\n\t\t\t\tlet deltaX = finalX - data.rollingPageX[0];\n\t\t\t\tlet deltaY = finalY - data.rollingPageY[0];\n\n\t\t\t\tthis.inertia(timestamp,\t\t// time now\n\t\t\t\t\tMath.abs(deltaX) / deltaT,\t// speed\n\t\t\t\t\tdeltaX > 0 ? 1 : -1,\t\t// x direction\n\t\t\t\t\tfinalX,\t\t\t\t\t\t// x now\n\t\t\t\t\tMath.abs(deltaY) / deltaT, // y speed\n\t\t\t\t\tdeltaY > 0 ? 1 : -1,\t\t// y direction\n\t\t\t\t\tfinalY\t\t\t\t\t\t// y now\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// forget about this touch\n\t\t\tdelete this.activeTouches[touch.identifier];\n\t\t}\n\t}\n\n\tprivate inertia(t1: number, vX: number, dirX: number, x: number, vY: number, dirY: number, y: number): void {\n\t\tthis.handle = DomUtils.scheduleAtNextAnimationFrame(() => {\n\t\t\tlet now = Date.now();\n\n\t\t\t// velocity: old speed + accel_over_time\n\t\t\tlet deltaT = now - t1,\n\t\t\t\tdelta_pos_x = 0, delta_pos_y = 0,\n\t\t\t\tstopped = true;\n\n\t\t\tvX += Gesture.SCROLL_FRICTION * deltaT;\n\t\t\tvY += Gesture.SCROLL_FRICTION * deltaT;\n\n\t\t\tif (vX > 0) {\n\t\t\t\tstopped = false;\n\t\t\t\tdelta_pos_x = dirX * vX * deltaT;\n\t\t\t}\n\n\t\t\tif (vY > 0) {\n\t\t\t\tstopped = false;\n\t\t\t\tdelta_pos_y = dirY * vY * deltaT;\n\t\t\t}\n\n\t\t\t// dispatch translation event\n\t\t\tlet evt = Gesture.newGestureEvent(EventType.Change);\n\t\t\tevt.translationX = delta_pos_x;\n\t\t\tevt.translationY = delta_pos_y;\n\t\t\tthis.targetElement.dispatchEvent(evt);\n\n\t\t\tif (!stopped) {\n\t\t\t\tthis.inertia(now, vX, dirX, x + delta_pos_x, vY, dirY, y + delta_pos_y);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate onTouchMove(e: TouchEvent): void {\n\t\tlet timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based.\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tfor (let i = 0, len = e.changedTouches.length; i < len; i++) {\n\n\t\t\tlet touch = e.changedTouches.item(i);\n\n\t\t\tif (!this.activeTouches.hasOwnProperty(String(touch.identifier))) {\n\t\t\t\tconsole.warn('end of an UNKNOWN touch', touch);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet data = this.activeTouches[touch.identifier];\n\n\t\t\tlet evt = Gesture.newGestureEvent(EventType.Change);\n\t\t\tevt.translationX = touch.pageX - arrays.tail(data.rollingPageX);\n\t\t\tevt.translationY = touch.pageY - arrays.tail(data.rollingPageY);\n\t\t\tevt.pageX = touch.pageX;\n\t\t\tevt.pageY = touch.pageY;\n\t\t\tthis.targetElement.dispatchEvent(evt);\n\n\t\t\t// only keep a few data points, to average the final speed\n\t\t\tif (data.rollingPageX.length > 3) {\n\t\t\t\tdata.rollingPageX.shift();\n\t\t\t\tdata.rollingPageY.shift();\n\t\t\t\tdata.rollingTimestamps.shift();\n\t\t\t}\n\n\t\t\tdata.rollingPageX.push(touch.pageX);\n\t\t\tdata.rollingPageY.push(touch.pageY);\n\t\t\tdata.rollingTimestamps.push(timestamp);\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { escape } from 'vs/base/common/strings';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport * as dom from 'vs/base/browser/dom';\nimport * as objects from 'vs/base/common/objects';\nimport { expand as expandOcticons } from 'vs/base/browser/ui/octiconLabel/octiconLabel';\n\nexport interface IHighlight {\n\tstart: number;\n\tend: number;\n}\n\nexport class HighlightedLabel implements IDisposable {\n\n\tprivate domNode: HTMLElement;\n\tprivate text: string;\n\tprivate highlights: IHighlight[];\n\tprivate didEverRender: boolean;\n\n\tconstructor(container: HTMLElement) {\n\t\tthis.domNode = document.createElement('span');\n\t\tthis.domNode.className = 'monaco-highlighted-label';\n\t\tthis.didEverRender = false;\n\t\tcontainer.appendChild(this.domNode);\n\t}\n\n\tget element(): HTMLElement {\n\t\treturn this.domNode;\n\t}\n\n\tset(text: string, highlights: IHighlight[] = []) {\n\t\tif (!text) {\n\t\t\ttext = '';\n\t\t}\n\t\tif (this.didEverRender && this.text === text && objects.equals(this.highlights, highlights)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!Array.isArray(highlights)) {\n\t\t\thighlights = [];\n\t\t}\n\n\t\tthis.text = text;\n\t\tthis.highlights = highlights;\n\t\tthis.render();\n\t}\n\n\tprivate render() {\n\t\tdom.clearNode(this.domNode);\n\n\t\tlet htmlContent: string[] = [],\n\t\t\thighlight: IHighlight,\n\t\t\tpos = 0;\n\n\t\tfor (let i = 0; i < this.highlights.length; i++) {\n\t\t\thighlight = this.highlights[i];\n\t\t\tif (highlight.end === highlight.start) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (pos < highlight.start) {\n\t\t\t\thtmlContent.push('');\n\t\t\t\thtmlContent.push(expandOcticons(escape(this.text.substring(pos, highlight.start))));\n\t\t\t\thtmlContent.push('');\n\t\t\t\tpos = highlight.end;\n\t\t\t}\n\t\t\thtmlContent.push('');\n\t\t\thtmlContent.push(expandOcticons(escape(this.text.substring(highlight.start, highlight.end))));\n\t\t\thtmlContent.push('');\n\t\t\tpos = highlight.end;\n\t\t}\n\n\t\tif (pos < this.text.length) {\n\t\t\thtmlContent.push('');\n\t\t\thtmlContent.push(expandOcticons(escape(this.text.substring(pos))));\n\t\t\thtmlContent.push('');\n\t\t}\n\n\t\tthis.domNode.innerHTML = htmlContent.join('');\n\t\tthis.didEverRender = true;\n\t}\n\n\tdispose() {\n\t\tthis.text = null;\n\t\tthis.highlights = null;\n\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 *--------------------------------------------------------------------------------------------*/\n\nimport { IRenderer } from './list';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { $, removeClass } from 'vs/base/browser/dom';\n\nexport interface IRow {\n\tdomNode: HTMLElement;\n\ttemplateId: string;\n\ttemplateData: any;\n}\n\nfunction removeFromParent(element: HTMLElement): void {\n\ttry {\n\t\telement.parentElement.removeChild(element);\n\t} catch (e) {\n\t\t// this will throw if this happens due to a blur event, nasty business\n\t}\n}\n\nexport class RowCache implements IDisposable {\n\n\tprivate cache: { [templateId: string]: IRow[]; };\n\n\tconstructor(private renderers: { [templateId: string]: IRenderer; }) {\n\t\tthis.cache = Object.create(null);\n\t}\n\n\t/**\n\t * Returns a row either by creating a new one or reusing\n\t * a previously released row which shares the same templateId.\n\t */\n\talloc(templateId: string): IRow {\n\t\tlet result = this.getTemplateCache(templateId).pop();\n\n\t\tif (!result) {\n\t\t\tconst domNode = $('.monaco-list-row');\n\t\t\tconst renderer = this.renderers[templateId];\n\t\t\tconst templateData = renderer.renderTemplate(domNode);\n\t\t\tresult = { domNode, templateId, templateData };\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Releases the row for eventual reuse.\n\t */\n\trelease(row: IRow): void {\n\t\tif (!row) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.releaseRow(row);\n\t}\n\n\tprivate releaseRow(row: IRow): void {\n\t\tconst { domNode, templateId } = row;\n\t\tremoveClass(domNode, 'scrolling');\n\t\tremoveFromParent(domNode);\n\n\t\tconst cache = this.getTemplateCache(templateId);\n\t\tcache.push(row);\n\t}\n\n\tprivate getTemplateCache(templateId: string): IRow[] {\n\t\treturn this.cache[templateId] || (this.cache[templateId] = []);\n\t}\n\n\tprivate garbageCollect(): void {\n\t\tif (this.cache) {\n\t\t\tObject.keys(this.cache).forEach(templateId => {\n\t\t\t\tthis.cache[templateId].forEach(cachedRow => {\n\t\t\t\t\tconst renderer = this.renderers[templateId];\n\t\t\t\t\trenderer.disposeTemplate(cachedRow.templateData);\n\t\t\t\t\tcachedRow.domNode = null;\n\t\t\t\t\tcachedRow.templateData = null;\n\t\t\t\t});\n\n\t\t\t\tdelete this.cache[templateId];\n\t\t\t});\n\t\t}\n\t}\n\n\tdispose(): void {\n\t\tthis.garbageCollect();\n\t\tthis.cache = null;\n\t\tthis.renderers = null;\n\t}\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'use strict';\n\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { StandardMouseEvent, IMouseEvent } from 'vs/base/browser/mouseEvent';\nimport { StandardKeyboardEvent, IKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport * as DomUtils from 'vs/base/browser/dom';\n\nexport abstract class Widget extends Disposable {\n\n\tprotected onclick(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n\t\tthis._register(DomUtils.addDisposableListener(domNode, DomUtils.EventType.CLICK, (e: MouseEvent) => listener(new StandardMouseEvent(e))));\n\t}\n\n\tprotected onmousedown(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n\t\tthis._register(DomUtils.addDisposableListener(domNode, DomUtils.EventType.MOUSE_DOWN, (e: MouseEvent) => listener(new StandardMouseEvent(e))));\n\t}\n\n\tprotected onmouseover(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n\t\tthis._register(DomUtils.addDisposableListener(domNode, DomUtils.EventType.MOUSE_OVER, (e: MouseEvent) => listener(new StandardMouseEvent(e))));\n\t}\n\n\tprotected onnonbubblingmouseout(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n\t\tthis._register(DomUtils.addDisposableNonBubblingMouseOutListener(domNode, (e: MouseEvent) => listener(new StandardMouseEvent(e))));\n\t}\n\n\tprotected onkeydown(domNode: HTMLElement, listener: (e: IKeyboardEvent) => void): void {\n\t\tthis._register(DomUtils.addDisposableListener(domNode, DomUtils.EventType.KEY_DOWN, (e: KeyboardEvent) => listener(new StandardKeyboardEvent(e))));\n\t}\n\n\tprotected onkeyup(domNode: HTMLElement, listener: (e: IKeyboardEvent) => void): void {\n\t\tthis._register(DomUtils.addDisposableListener(domNode, DomUtils.EventType.KEY_UP, (e: KeyboardEvent) => listener(new StandardKeyboardEvent(e))));\n\t}\n\n\tprotected oninput(domNode: HTMLElement, listener: (e: Event) => void): void {\n\t\tthis._register(DomUtils.addDisposableListener(domNode, DomUtils.EventType.INPUT, listener));\n\t}\n\n\tprotected onblur(domNode: HTMLElement, listener: (e: Event) => void): void {\n\t\tthis._register(DomUtils.addDisposableListener(domNode, DomUtils.EventType.BLUR, listener));\n\t}\n\n\tprotected onfocus(domNode: HTMLElement, listener: (e: Event) => void): void {\n\t\tthis._register(DomUtils.addDisposableListener(domNode, DomUtils.EventType.FOCUS, listener));\n\t}\n\n\tprotected onchange(domNode: HTMLElement, listener: (e: Event) => void): void {\n\t\tthis._register(DomUtils.addDisposableListener(domNode, DomUtils.EventType.CHANGE, listener));\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { IMouseEvent } from 'vs/base/browser/mouseEvent';\nimport { GlobalMouseMoveMonitor, IStandardMouseMoveEventData, standardMouseMoveMerger } from 'vs/base/browser/globalMouseMoveMonitor';\nimport { Widget } from 'vs/base/browser/ui/widget';\nimport { TimeoutTimer, IntervalTimer } from 'vs/base/common/async';\n\n/**\n * The arrow image size.\n */\nexport const ARROW_IMG_SIZE = 11;\n\nexport interface ScrollbarArrowOptions {\n\tonActivate: () => void;\n\tclassName: string;\n\n\tbgWidth: number;\n\tbgHeight: number;\n\n\ttop?: number;\n\tleft?: number;\n\tbottom?: number;\n\tright?: number;\n}\n\nexport class ScrollbarArrow extends Widget {\n\n\tprivate _onActivate: () => void;\n\tpublic bgDomNode: HTMLElement;\n\tpublic domNode: HTMLElement;\n\tprivate _mousedownRepeatTimer: IntervalTimer;\n\tprivate _mousedownScheduleRepeatTimer: TimeoutTimer;\n\tprivate _mouseMoveMonitor: GlobalMouseMoveMonitor;\n\n\tconstructor(opts: ScrollbarArrowOptions) {\n\t\tsuper();\n\t\tthis._onActivate = opts.onActivate;\n\n\t\tthis.bgDomNode = document.createElement('div');\n\t\tthis.bgDomNode.className = 'arrow-background';\n\t\tthis.bgDomNode.style.position = 'absolute';\n\t\tthis.bgDomNode.style.width = opts.bgWidth + 'px';\n\t\tthis.bgDomNode.style.height = opts.bgHeight + 'px';\n\t\tif (typeof opts.top !== 'undefined') {\n\t\t\tthis.bgDomNode.style.top = '0px';\n\t\t}\n\t\tif (typeof opts.left !== 'undefined') {\n\t\t\tthis.bgDomNode.style.left = '0px';\n\t\t}\n\t\tif (typeof opts.bottom !== 'undefined') {\n\t\t\tthis.bgDomNode.style.bottom = '0px';\n\t\t}\n\t\tif (typeof opts.right !== 'undefined') {\n\t\t\tthis.bgDomNode.style.right = '0px';\n\t\t}\n\n\t\tthis.domNode = document.createElement('div');\n\t\tthis.domNode.className = opts.className;\n\t\tthis.domNode.style.position = 'absolute';\n\t\tthis.domNode.style.width = ARROW_IMG_SIZE + 'px';\n\t\tthis.domNode.style.height = ARROW_IMG_SIZE + 'px';\n\t\tif (typeof opts.top !== 'undefined') {\n\t\t\tthis.domNode.style.top = opts.top + 'px';\n\t\t}\n\t\tif (typeof opts.left !== 'undefined') {\n\t\t\tthis.domNode.style.left = opts.left + 'px';\n\t\t}\n\t\tif (typeof opts.bottom !== 'undefined') {\n\t\t\tthis.domNode.style.bottom = opts.bottom + 'px';\n\t\t}\n\t\tif (typeof opts.right !== 'undefined') {\n\t\t\tthis.domNode.style.right = opts.right + 'px';\n\t\t}\n\n\t\tthis._mouseMoveMonitor = this._register(new GlobalMouseMoveMonitor());\n\t\tthis.onmousedown(this.bgDomNode, (e) => this._arrowMouseDown(e));\n\t\tthis.onmousedown(this.domNode, (e) => this._arrowMouseDown(e));\n\n\t\tthis._mousedownRepeatTimer = this._register(new IntervalTimer());\n\t\tthis._mousedownScheduleRepeatTimer = this._register(new TimeoutTimer());\n\t}\n\n\tprivate _arrowMouseDown(e: IMouseEvent): void {\n\t\tlet scheduleRepeater = () => {\n\t\t\tthis._mousedownRepeatTimer.cancelAndSet(() => this._onActivate(), 1000 / 24);\n\t\t};\n\n\t\tthis._onActivate();\n\t\tthis._mousedownRepeatTimer.cancel();\n\t\tthis._mousedownScheduleRepeatTimer.cancelAndSet(scheduleRepeater, 200);\n\n\t\tthis._mouseMoveMonitor.startMonitoring(\n\t\t\tstandardMouseMoveMerger,\n\t\t\t(mouseMoveData: IStandardMouseMoveEventData) => {\n\t\t\t\t/* Intentional empty */\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tthis._mousedownRepeatTimer.cancel();\n\t\t\t\tthis._mousedownScheduleRepeatTimer.cancel();\n\t\t\t}\n\t\t);\n\n\t\te.preventDefault();\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IEventEmitter, EventEmitter } from 'vs/base/common/eventEmitter';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport * as Events from 'vs/base/common/events';\nimport Event, { Emitter } from 'vs/base/common/event';\n\nexport interface ITelemetryData {\n\tfrom?: string;\n\ttarget?: string;\n\t[key: string]: any;\n}\n\nexport interface IAction extends IDisposable {\n\tid: string;\n\tlabel: string;\n\ttooltip: string;\n\tclass: string;\n\tenabled: boolean;\n\tchecked: boolean;\n\tradio: boolean;\n\trun(event?: any): TPromise;\n}\n\nexport interface IActionRunner extends IEventEmitter {\n\trun(action: IAction, context?: any): TPromise;\n}\n\nexport interface IActionItem extends IEventEmitter {\n\tactionRunner: IActionRunner;\n\tsetActionContext(context: any): void;\n\trender(element: any /* HTMLElement */): void;\n\tisEnabled(): boolean;\n\tfocus(): void;\n\tblur(): void;\n\tdispose(): void;\n}\n\n/**\n * Checks if the provided object is compatible\n * with the IAction interface.\n * @param thing an object\n */\nexport function isAction(thing: any): thing is IAction {\n\tif (!thing) {\n\t\treturn false;\n\t} else if (thing instanceof Action) {\n\t\treturn true;\n\t} else if (typeof thing.id !== 'string') {\n\t\treturn false;\n\t} else if (typeof thing.label !== 'string') {\n\t\treturn false;\n\t} else if (typeof thing.class !== 'string') {\n\t\treturn false;\n\t} else if (typeof thing.enabled !== 'boolean') {\n\t\treturn false;\n\t} else if (typeof thing.checked !== 'boolean') {\n\t\treturn false;\n\t} else if (typeof thing.run !== 'function') {\n\t\treturn false;\n\t} else {\n\t\treturn true;\n\t}\n}\n\nexport interface IActionChangeEvent {\n\tlabel?: string;\n\ttooltip?: string;\n\tclass?: string;\n\tenabled?: boolean;\n\tchecked?: boolean;\n\tradio?: boolean;\n}\n\nexport class Action implements IAction {\n\n\tprotected _onDidChange = new Emitter();\n\tprotected _id: string;\n\tprotected _label: string;\n\tprotected _tooltip: string;\n\tprotected _cssClass: string;\n\tprotected _enabled: boolean;\n\tprotected _checked: boolean;\n\tprotected _radio: boolean;\n\tprotected _order: number;\n\tprotected _actionCallback: (event?: any) => TPromise;\n\n\tconstructor(id: string, label: string = '', cssClass: string = '', enabled: boolean = true, actionCallback?: (event?: any) => TPromise) {\n\t\tthis._id = id;\n\t\tthis._label = label;\n\t\tthis._cssClass = cssClass;\n\t\tthis._enabled = enabled;\n\t\tthis._actionCallback = actionCallback;\n\t}\n\n\tpublic dispose() {\n\t\tthis._onDidChange.dispose();\n\t}\n\n\tpublic get onDidChange(): Event {\n\t\treturn this._onDidChange.event;\n\t}\n\n\tpublic get id(): string {\n\t\treturn this._id;\n\t}\n\n\tpublic get label(): string {\n\t\treturn this._label;\n\t}\n\n\tpublic set label(value: string) {\n\t\tthis._setLabel(value);\n\t}\n\n\tprotected _setLabel(value: string): void {\n\t\tif (this._label !== value) {\n\t\t\tthis._label = value;\n\t\t\tthis._onDidChange.fire({ label: value });\n\t\t}\n\t}\n\n\tpublic get tooltip(): string {\n\t\treturn this._tooltip;\n\t}\n\n\tpublic set tooltip(value: string) {\n\t\tthis._setTooltip(value);\n\t}\n\n\tprotected _setTooltip(value: string): void {\n\t\tif (this._tooltip !== value) {\n\t\t\tthis._tooltip = value;\n\t\t\tthis._onDidChange.fire({ tooltip: value });\n\t\t}\n\t}\n\n\tpublic get class(): string {\n\t\treturn this._cssClass;\n\t}\n\n\tpublic set class(value: string) {\n\t\tthis._setClass(value);\n\t}\n\n\tprotected _setClass(value: string): void {\n\t\tif (this._cssClass !== value) {\n\t\t\tthis._cssClass = value;\n\t\t\tthis._onDidChange.fire({ class: value });\n\t\t}\n\t}\n\n\tpublic get enabled(): boolean {\n\t\treturn this._enabled;\n\t}\n\n\tpublic set enabled(value: boolean) {\n\t\tthis._setEnabled(value);\n\t}\n\n\tprotected _setEnabled(value: boolean): void {\n\t\tif (this._enabled !== value) {\n\t\t\tthis._enabled = value;\n\t\t\tthis._onDidChange.fire({ enabled: value });\n\t\t}\n\t}\n\n\tpublic get checked(): boolean {\n\t\treturn this._checked;\n\t}\n\n\tpublic set checked(value: boolean) {\n\t\tthis._setChecked(value);\n\t}\n\n\tpublic get radio(): boolean {\n\t\treturn this._radio;\n\t}\n\n\tpublic set radio(value: boolean) {\n\t\tthis._setRadio(value);\n\t}\n\n\tprotected _setChecked(value: boolean): void {\n\t\tif (this._checked !== value) {\n\t\t\tthis._checked = value;\n\t\t\tthis._onDidChange.fire({ checked: value });\n\t\t}\n\t}\n\n\tprotected _setRadio(value: boolean): void {\n\t\tif (this._radio !== value) {\n\t\t\tthis._radio = value;\n\t\t\tthis._onDidChange.fire({ radio: value });\n\t\t}\n\t}\n\n\tpublic get order(): number {\n\t\treturn this._order;\n\t}\n\n\tpublic set order(value: number) {\n\t\tthis._order = value;\n\t}\n\n\tpublic run(event?: any, data?: ITelemetryData): TPromise {\n\t\tif (this._actionCallback !== void 0) {\n\t\t\treturn this._actionCallback(event);\n\t\t}\n\t\treturn TPromise.as(true);\n\t}\n}\n\nexport interface IRunEvent {\n\taction: IAction;\n\tresult?: any;\n\terror?: any;\n}\n\nexport class ActionRunner extends EventEmitter implements IActionRunner {\n\n\tpublic run(action: IAction, context?: any): TPromise {\n\t\tif (!action.enabled) {\n\t\t\treturn TPromise.as(null);\n\t\t}\n\n\t\tthis.emit(Events.EventType.BEFORE_RUN, { action: action });\n\n\t\treturn this.runAction(action, context).then((result: any) => {\n\t\t\tthis.emit(Events.EventType.RUN, { action: action, result: result });\n\t\t}, (error: any) => {\n\t\t\tthis.emit(Events.EventType.RUN, { action: action, error: error });\n\t\t});\n\t}\n\n\tprotected runAction(action: IAction, context?: any): TPromise {\n\t\treturn TPromise.as(context ? action.run(context) : action.run());\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport arrays = require('vs/base/common/arrays');\nimport strings = require('vs/base/common/strings');\nimport paths = require('vs/base/common/paths');\nimport { BoundedMap } from 'vs/base/common/map';\nimport { CharCode } from 'vs/base/common/charCode';\nimport { TPromise } from 'vs/base/common/winjs.base';\n\nexport interface IExpression {\n\t[pattern: string]: boolean | SiblingClause | any;\n}\n\nexport interface SiblingClause {\n\twhen: string;\n}\n\nconst PATH_REGEX = '[/\\\\\\\\]';\t\t// any slash or backslash\nconst NO_PATH_REGEX = '[^/\\\\\\\\]';\t// any non-slash and non-backslash\nconst ALL_FORWARD_SLASHES = /\\//g;\n\nfunction starsToRegExp(starCount: number): string {\n\tswitch (starCount) {\n\t\tcase 0:\n\t\t\treturn '';\n\t\tcase 1:\n\t\t\treturn `${NO_PATH_REGEX}*?`; // 1 star matches any number of characters except path separator (/ and \\) - non greedy (?)\n\t\tdefault:\n\t\t\t// Matches: (Path Sep OR Path Val followed by Path Sep OR Path Sep followed by Path Val) 0-many times\n\t\t\t// Group is non capturing because we don't need to capture at all (?:...)\n\t\t\t// Overall we use non-greedy matching because it could be that we match too much\n\t\t\treturn `(?:${PATH_REGEX}|${NO_PATH_REGEX}+${PATH_REGEX}|${PATH_REGEX}${NO_PATH_REGEX}+)*?`;\n\t}\n}\n\nexport function splitGlobAware(pattern: string, splitChar: string): string[] {\n\tif (!pattern) {\n\t\treturn [];\n\t}\n\n\tlet segments: string[] = [];\n\n\tlet inBraces = false;\n\tlet inBrackets = false;\n\n\tlet char: string;\n\tlet curVal = '';\n\tfor (let i = 0; i < pattern.length; i++) {\n\t\tchar = pattern[i];\n\n\t\tswitch (char) {\n\t\t\tcase splitChar:\n\t\t\t\tif (!inBraces && !inBrackets) {\n\t\t\t\t\tsegments.push(curVal);\n\t\t\t\t\tcurVal = '';\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase '{':\n\t\t\t\tinBraces = true;\n\t\t\t\tbreak;\n\t\t\tcase '}':\n\t\t\t\tinBraces = false;\n\t\t\t\tbreak;\n\t\t\tcase '[':\n\t\t\t\tinBrackets = true;\n\t\t\t\tbreak;\n\t\t\tcase ']':\n\t\t\t\tinBrackets = false;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tcurVal += char;\n\t}\n\n\t// Tail\n\tif (curVal) {\n\t\tsegments.push(curVal);\n\t}\n\n\treturn segments;\n}\n\nfunction parseRegExp(pattern: string): string {\n\tif (!pattern) {\n\t\treturn '';\n\t}\n\n\tlet regEx = '';\n\n\t// Split up into segments for each slash found\n\tlet segments = splitGlobAware(pattern, '/');\n\n\t// Special case where we only have globstars\n\tif (segments.every(s => s === '**')) {\n\t\tregEx = '.*';\n\t}\n\n\t// Build regex over segments\n\telse {\n\t\tlet previousSegmentWasGlobStar = false;\n\t\tsegments.forEach((segment, index) => {\n\n\t\t\t// Globstar is special\n\t\t\tif (segment === '**') {\n\n\t\t\t\t// if we have more than one globstar after another, just ignore it\n\t\t\t\tif (!previousSegmentWasGlobStar) {\n\t\t\t\t\tregEx += starsToRegExp(2);\n\t\t\t\t\tpreviousSegmentWasGlobStar = true;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// States\n\t\t\tlet inBraces = false;\n\t\t\tlet braceVal = '';\n\n\t\t\tlet inBrackets = false;\n\t\t\tlet bracketVal = '';\n\n\t\t\tlet char: string;\n\t\t\tfor (let i = 0; i < segment.length; i++) {\n\t\t\t\tchar = segment[i];\n\n\t\t\t\t// Support brace expansion\n\t\t\t\tif (char !== '}' && inBraces) {\n\t\t\t\t\tbraceVal += char;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Support brackets\n\t\t\t\tif (char !== ']' && inBrackets) {\n\t\t\t\t\tlet res: string;\n\t\t\t\t\tswitch (char) {\n\t\t\t\t\t\tcase '-':\t\t// allow the range operator\n\t\t\t\t\t\t\tres = char;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase '^':\t\t// allow the negate operator\n\t\t\t\t\t\t\tres = char;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tres = strings.escapeRegExpCharacters(char);\n\t\t\t\t\t}\n\n\t\t\t\t\tbracketVal += res;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tswitch (char) {\n\t\t\t\t\tcase '{':\n\t\t\t\t\t\tinBraces = true;\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tcase '[':\n\t\t\t\t\t\tinBrackets = true;\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tcase '}':\n\t\t\t\t\t\tlet choices = splitGlobAware(braceVal, ',');\n\n\t\t\t\t\t\t// Converts {foo,bar} => [foo|bar]\n\t\t\t\t\t\tlet braceRegExp = `(?:${choices.map(c => parseRegExp(c)).join('|')})`;\n\n\t\t\t\t\t\tregEx += braceRegExp;\n\n\t\t\t\t\t\tinBraces = false;\n\t\t\t\t\t\tbraceVal = '';\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase ']':\n\t\t\t\t\t\tregEx += ('[' + bracketVal + ']');\n\n\t\t\t\t\t\tinBrackets = false;\n\t\t\t\t\t\tbracketVal = '';\n\n\t\t\t\t\t\tbreak;\n\n\n\t\t\t\t\tcase '?':\n\t\t\t\t\t\tregEx += NO_PATH_REGEX; // 1 ? matches any single character except path separator (/ and \\)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tcase '*':\n\t\t\t\t\t\tregEx += starsToRegExp(1);\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tregEx += strings.escapeRegExpCharacters(char);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Tail: Add the slash we had split on if there is more to come and the next one is not a globstar\n\t\t\tif (index < segments.length - 1 && segments[index + 1] !== '**') {\n\t\t\t\tregEx += PATH_REGEX;\n\t\t\t}\n\n\t\t\t// reset state\n\t\t\tpreviousSegmentWasGlobStar = false;\n\t\t});\n\t}\n\n\treturn regEx;\n}\n\n// regexes to check for trival glob patterns that just check for String#endsWith\nconst T1 = /^\\*\\*\\/\\*\\.[\\w\\.-]+$/; \t\t\t\t\t\t \t\t\t// **/*.something\nconst T2 = /^\\*\\*\\/([\\w\\.-]+)\\/?$/; \t\t\t\t\t\t\t \t\t\t// **/something\nconst T3 = /^{\\*\\*\\/[\\*\\.]?[\\w\\.-]+\\/?(,\\*\\*\\/[\\*\\.]?[\\w\\.-]+\\/?)*}$/; \t// {**/*.something,**/*.else} or {**/package.json,**/project.json}\nconst T3_2 = /^{\\*\\*\\/[\\*\\.]?[\\w\\.-]+(\\/(\\*\\*)?)?(,\\*\\*\\/[\\*\\.]?[\\w\\.-]+(\\/(\\*\\*)?)?)*}$/; \t// Like T3, with optional trailing /**\nconst T4 = /^\\*\\*((\\/[\\w\\.-]+)+)\\/?$/; \t\t\t\t\t\t \t\t\t// **/something/else\nconst T5 = /^([\\w\\.-]+(\\/[\\w\\.-]+)*)\\/?$/; \t\t\t\t\t\t \t\t// something/else\n\nexport type ParsedPattern = (path: string, basename?: string) => boolean;\n\n// The ParsedExpression returns a Promise iff siblingsFn returns a Promise.\nexport type ParsedExpression = (path: string, basename?: string, siblingsFn?: () => string[] | TPromise) => string | TPromise /* the matching pattern */;\n\nexport interface IGlobOptions {\n\t/**\n\t * Simplify patterns for use as exclusion filters during tree traversal to skip entire subtrees. Cannot be used outside of a tree traversal.\n\t */\n\ttrimForExclusions?: boolean;\n}\n\ninterface ParsedStringPattern {\n\t(path: string, basename: string): string | TPromise /* the matching pattern */;\n\tbasenames?: string[];\n\tpatterns?: string[];\n\tallBasenames?: string[];\n\tallPaths?: string[];\n}\ntype SiblingsPattern = { siblings: string[], name: string };\ninterface ParsedExpressionPattern {\n\t(path: string, basename: string, siblingsPatternFn: () => SiblingsPattern | TPromise): string | TPromise /* the matching pattern */;\n\trequiresSiblings?: boolean;\n\tallBasenames?: string[];\n\tallPaths?: string[];\n}\n\nconst CACHE = new BoundedMap(10000); // bounded to 10000 elements\n\nconst FALSE = function () {\n\treturn false;\n};\n\nconst NULL = function (): string {\n\treturn null;\n};\n\nfunction parsePattern(pattern: string, options: IGlobOptions): ParsedStringPattern {\n\tif (!pattern) {\n\t\treturn NULL;\n\t}\n\n\t// Whitespace trimming\n\tpattern = pattern.trim();\n\n\t// Check cache\n\tconst patternKey = `${pattern}_${!!options.trimForExclusions}`;\n\tlet parsedPattern = CACHE.get(patternKey);\n\tif (parsedPattern) {\n\t\treturn parsedPattern;\n\t}\n\n\t// Check for Trivias\n\tlet match: RegExpExecArray;\n\tif (T1.test(pattern)) { // common pattern: **/*.txt just need endsWith check\n\t\tconst base = pattern.substr(4); // '**/*'.length === 4\n\t\tparsedPattern = function (path, basename) {\n\t\t\treturn path && strings.endsWith(path, base) ? pattern : null;\n\t\t};\n\t} else if (match = T2.exec(trimForExclusions(pattern, options))) { // common pattern: **/some.txt just need basename check\n\t\tparsedPattern = trivia2(match[1], pattern);\n\t} else if ((options.trimForExclusions ? T3_2 : T3).test(pattern)) { // repetition of common patterns (see above) {**/*.txt,**/*.png}\n\t\tparsedPattern = trivia3(pattern, options);\n\t} else if (match = T4.exec(trimForExclusions(pattern, options))) { // common pattern: **/something/else just need endsWith check\n\t\tparsedPattern = trivia4and5(match[1].substr(1), pattern, true);\n\t} else if (match = T5.exec(trimForExclusions(pattern, options))) { // common pattern: something/else just need equals check\n\t\tparsedPattern = trivia4and5(match[1], pattern, false);\n\t}\n\n\t// Otherwise convert to pattern\n\telse {\n\t\tparsedPattern = toRegExp(pattern);\n\t}\n\n\t// Cache\n\tCACHE.set(patternKey, parsedPattern);\n\n\treturn parsedPattern;\n}\n\nfunction trimForExclusions(pattern: string, options: IGlobOptions): string {\n\treturn options.trimForExclusions && strings.endsWith(pattern, '/**') ? pattern.substr(0, pattern.length - 2) : pattern; // dropping **, tailing / is dropped later\n}\n\n// common pattern: **/some.txt just need basename check\nfunction trivia2(base: string, originalPattern: string): ParsedStringPattern {\n\tconst slashBase = `/${base}`;\n\tconst backslashBase = `\\\\${base}`;\n\tconst parsedPattern: ParsedStringPattern = function (path, basename) {\n\t\tif (!path) {\n\t\t\treturn null;\n\t\t}\n\t\tif (basename) {\n\t\t\treturn basename === base ? originalPattern : null;\n\t\t}\n\t\treturn path === base || strings.endsWith(path, slashBase) || strings.endsWith(path, backslashBase) ? originalPattern : null;\n\t};\n\tconst basenames = [base];\n\tparsedPattern.basenames = basenames;\n\tparsedPattern.patterns = [originalPattern];\n\tparsedPattern.allBasenames = basenames;\n\treturn parsedPattern;\n}\n\n// repetition of common patterns (see above) {**/*.txt,**/*.png}\nfunction trivia3(pattern: string, options: IGlobOptions): ParsedStringPattern {\n\tconst parsedPatterns = aggregateBasenameMatches(pattern.slice(1, -1).split(',')\n\t\t.map(pattern => parsePattern(pattern, options))\n\t\t.filter(pattern => pattern !== NULL), pattern);\n\tconst n = parsedPatterns.length;\n\tif (!n) {\n\t\treturn NULL;\n\t}\n\tif (n === 1) {\n\t\treturn parsedPatterns[0];\n\t}\n\tconst parsedPattern: ParsedStringPattern = function (path: string, basename: string) {\n\t\tfor (let i = 0, n = parsedPatterns.length; i < n; i++) {\n\t\t\tif ((parsedPatterns[i])(path, basename)) {\n\t\t\t\treturn pattern;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\tconst withBasenames = arrays.first(parsedPatterns, pattern => !!(pattern).allBasenames);\n\tif (withBasenames) {\n\t\tparsedPattern.allBasenames = (withBasenames).allBasenames;\n\t}\n\tconst allPaths = parsedPatterns.reduce((all, current) => current.allPaths ? all.concat(current.allPaths) : all, []);\n\tif (allPaths.length) {\n\t\tparsedPattern.allPaths = allPaths;\n\t}\n\treturn parsedPattern;\n}\n\n// common patterns: **/something/else just need endsWith check, something/else just needs and equals check\nfunction trivia4and5(path: string, pattern: string, matchPathEnds: boolean): ParsedStringPattern {\n\tconst nativePath = paths.nativeSep !== paths.sep ? path.replace(ALL_FORWARD_SLASHES, paths.nativeSep) : path;\n\tconst nativePathEnd = paths.nativeSep + nativePath;\n\tconst parsedPattern: ParsedStringPattern = matchPathEnds ? function (path, basename) {\n\t\treturn path && (path === nativePath || strings.endsWith(path, nativePathEnd)) ? pattern : null;\n\t} : function (path, basename) {\n\t\treturn path && path === nativePath ? pattern : null;\n\t};\n\tparsedPattern.allPaths = [(matchPathEnds ? '*/' : './') + path];\n\treturn parsedPattern;\n}\n\nfunction toRegExp(pattern: string): ParsedStringPattern {\n\ttry {\n\t\tconst regExp = new RegExp(`^${parseRegExp(pattern)}$`);\n\t\treturn function (path: string, basename: string) {\n\t\t\tregExp.lastIndex = 0; // reset RegExp to its initial state to reuse it!\n\t\t\treturn path && regExp.test(path) ? pattern : null;\n\t\t};\n\t} catch (error) {\n\t\treturn NULL;\n\t}\n}\n\n/**\n * Simplified glob matching. Supports a subset of glob patterns:\n * - * matches anything inside a path segment\n * - ? matches 1 character inside a path segment\n * - ** matches anything including an empty path segment\n * - simple brace expansion ({js,ts} => js or ts)\n * - character ranges (using [...])\n */\nexport function match(pattern: string, path: string): boolean;\nexport function match(expression: IExpression, path: string, siblingsFn?: () => string[]): string /* the matching pattern */;\nexport function match(arg1: string | IExpression, path: string, siblingsFn?: () => string[]): any {\n\tif (!arg1 || !path) {\n\t\treturn false;\n\t}\n\n\treturn parse(arg1)(path, undefined, siblingsFn);\n}\n\n/**\n * Simplified glob matching. Supports a subset of glob patterns:\n * - * matches anything inside a path segment\n * - ? matches 1 character inside a path segment\n * - ** matches anything including an empty path segment\n * - simple brace expansion ({js,ts} => js or ts)\n * - character ranges (using [...])\n */\nexport function parse(pattern: string, options?: IGlobOptions): ParsedPattern;\nexport function parse(expression: IExpression, options?: IGlobOptions): ParsedExpression;\nexport function parse(arg1: string | IExpression, options: IGlobOptions = {}): any {\n\tif (!arg1) {\n\t\treturn FALSE;\n\t}\n\n\t// Glob with String\n\tif (typeof arg1 === 'string') {\n\t\tconst parsedPattern = parsePattern(arg1, options);\n\t\tif (parsedPattern === NULL) {\n\t\t\treturn FALSE;\n\t\t}\n\t\tconst resultPattern = function (path: string, basename: string) {\n\t\t\treturn !!parsedPattern(path, basename);\n\t\t};\n\t\tif (parsedPattern.allBasenames) {\n\t\t\t(resultPattern).allBasenames = parsedPattern.allBasenames;\n\t\t}\n\t\tif (parsedPattern.allPaths) {\n\t\t\t(resultPattern).allPaths = parsedPattern.allPaths;\n\t\t}\n\t\treturn resultPattern;\n\t}\n\n\t// Glob with Expression\n\treturn parsedExpression(arg1, options);\n}\n\n/**\n * Same as `parse`, but the ParsedExpression is guaranteed to return a Promise\n */\nexport function parseToAsync(expression: IExpression, options?: IGlobOptions): ParsedExpression {\n\tconst parsedExpression = parse(expression, options);\n\treturn (path: string, basename?: string, siblingsFn?: () => TPromise): TPromise => {\n\t\tconst result = parsedExpression(path, basename, siblingsFn);\n\t\treturn result instanceof TPromise ? result : TPromise.as(result);\n\t};\n}\n\nexport function getBasenameTerms(patternOrExpression: ParsedPattern | ParsedExpression): string[] {\n\treturn (patternOrExpression).allBasenames || [];\n}\n\nexport function getPathTerms(patternOrExpression: ParsedPattern | ParsedExpression): string[] {\n\treturn (patternOrExpression).allPaths || [];\n}\n\nfunction parsedExpression(expression: IExpression, options: IGlobOptions): ParsedExpression {\n\tconst parsedPatterns = aggregateBasenameMatches(Object.getOwnPropertyNames(expression)\n\t\t.map(pattern => parseExpressionPattern(pattern, expression[pattern], options))\n\t\t.filter(pattern => pattern !== NULL));\n\n\tconst n = parsedPatterns.length;\n\tif (!n) {\n\t\treturn NULL;\n\t}\n\n\tif (!parsedPatterns.some(parsedPattern => (parsedPattern).requiresSiblings)) {\n\t\tif (n === 1) {\n\t\t\treturn parsedPatterns[0];\n\t\t}\n\n\t\tconst resultExpression: ParsedStringPattern = function (path: string, basename: string, siblingsFn?: () => string[]) {\n\t\t\tfor (let i = 0, n = parsedPatterns.length; i < n; i++) {\n\t\t\t\t// Pattern matches path\n\t\t\t\tconst result = (parsedPatterns[i])(path, basename);\n\t\t\t\tif (result) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\n\t\tconst withBasenames = arrays.first(parsedPatterns, pattern => !!(pattern).allBasenames);\n\t\tif (withBasenames) {\n\t\t\tresultExpression.allBasenames = (withBasenames).allBasenames;\n\t\t}\n\n\t\tconst allPaths = parsedPatterns.reduce((all, current) => current.allPaths ? all.concat(current.allPaths) : all, []);\n\t\tif (allPaths.length) {\n\t\t\tresultExpression.allPaths = allPaths;\n\t\t}\n\n\t\treturn resultExpression;\n\t}\n\n\tconst resultExpression: ParsedStringPattern = function (path: string, basename: string, siblingsFn?: () => string[] | TPromise) {\n\t\tlet siblingsPattern: SiblingsPattern | TPromise;\n\t\tlet siblingsResolved = !siblingsFn;\n\n\t\tfunction siblingsToSiblingsPattern(siblings: string[]) {\n\t\t\tif (siblings && siblings.length) {\n\t\t\t\tif (!basename) {\n\t\t\t\t\tbasename = paths.basename(path);\n\t\t\t\t}\n\t\t\t\tconst name = basename.substr(0, basename.length - paths.extname(path).length);\n\t\t\t\treturn { siblings, name };\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t}\n\n\t\tfunction siblingsPatternFn() {\n\t\t\t// Resolve siblings only once\n\t\t\tif (!siblingsResolved) {\n\t\t\t\tsiblingsResolved = true;\n\t\t\t\tconst siblings = siblingsFn();\n\t\t\t\tsiblingsPattern = TPromise.is(siblings) ?\n\t\t\t\t\tsiblings.then(siblingsToSiblingsPattern) :\n\t\t\t\t\tsiblingsToSiblingsPattern(siblings);\n\t\t\t}\n\n\t\t\treturn siblingsPattern;\n\t\t}\n\n\t\tfor (let i = 0, n = parsedPatterns.length; i < n; i++) {\n\t\t\t// Pattern matches path\n\t\t\tconst result = (parsedPatterns[i])(path, basename, siblingsPatternFn);\n\t\t\tif (result) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tconst withBasenames = arrays.first(parsedPatterns, pattern => !!(pattern).allBasenames);\n\tif (withBasenames) {\n\t\tresultExpression.allBasenames = (withBasenames).allBasenames;\n\t}\n\n\tconst allPaths = parsedPatterns.reduce((all, current) => current.allPaths ? all.concat(current.allPaths) : all, []);\n\tif (allPaths.length) {\n\t\tresultExpression.allPaths = allPaths;\n\t}\n\n\treturn resultExpression;\n}\n\nfunction parseExpressionPattern(pattern: string, value: any, options: IGlobOptions): (ParsedStringPattern | ParsedExpressionPattern) {\n\tif (value === false) {\n\t\treturn NULL; // pattern is disabled\n\t}\n\n\tconst parsedPattern = parsePattern(pattern, options);\n\tif (parsedPattern === NULL) {\n\t\treturn NULL;\n\t}\n\n\t// Expression Pattern is \n\tif (typeof value === 'boolean') {\n\t\treturn parsedPattern;\n\t}\n\n\t// Expression Pattern is \n\tif (value) {\n\t\tconst when = (value).when;\n\t\tif (typeof when === 'string') {\n\t\t\tconst siblingsPatternToMatchingPattern = (siblingsPattern: SiblingsPattern): string => {\n\t\t\t\tlet clausePattern = when.replace('$(basename)', siblingsPattern.name);\n\t\t\t\tif (siblingsPattern.siblings.indexOf(clausePattern) !== -1) {\n\t\t\t\t\treturn pattern;\n\t\t\t\t} else {\n\t\t\t\t\treturn null; // pattern does not match in the end because the when clause is not satisfied\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst result: ParsedExpressionPattern = (path: string, basename: string, siblingsPatternFn: () => SiblingsPattern | TPromise) => {\n\t\t\t\tif (!parsedPattern(path, basename)) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tconst siblingsPattern = siblingsPatternFn();\n\t\t\t\tif (!siblingsPattern) {\n\t\t\t\t\treturn null; // pattern is malformed or we don't have siblings\n\t\t\t\t}\n\n\t\t\t\treturn TPromise.is(siblingsPattern) ?\n\t\t\t\t\tsiblingsPattern.then(siblingsPatternToMatchingPattern) :\n\t\t\t\t\tsiblingsPatternToMatchingPattern(siblingsPattern);\n\t\t\t};\n\t\t\tresult.requiresSiblings = true;\n\t\t\treturn result;\n\t\t}\n\t}\n\n\t// Expression is Anything\n\treturn parsedPattern;\n}\n\nfunction aggregateBasenameMatches(parsedPatterns: (ParsedStringPattern | ParsedExpressionPattern)[], result?: string): (ParsedStringPattern | ParsedExpressionPattern)[] {\n\tconst basenamePatterns = parsedPatterns.filter(parsedPattern => !!(parsedPattern).basenames);\n\tif (basenamePatterns.length < 2) {\n\t\treturn parsedPatterns;\n\t}\n\n\tconst basenames = basenamePatterns.reduce((all, current) => all.concat((current).basenames), []);\n\tlet patterns: string[];\n\tif (result) {\n\t\tpatterns = [];\n\t\tfor (let i = 0, n = basenames.length; i < n; i++) {\n\t\t\tpatterns.push(result);\n\t\t}\n\t} else {\n\t\tpatterns = basenamePatterns.reduce((all, current) => all.concat((current).patterns), []);\n\t}\n\tconst aggregate: ParsedStringPattern = function (path, basename) {\n\t\tif (!path) {\n\t\t\treturn null;\n\t\t}\n\t\tif (!basename) {\n\t\t\tlet i: number;\n\t\t\tfor (i = path.length; i > 0; i--) {\n\t\t\t\tconst ch = path.charCodeAt(i - 1);\n\t\t\t\tif (ch === CharCode.Slash || ch === CharCode.Backslash) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbasename = path.substr(i);\n\t\t}\n\t\tconst index = basenames.indexOf(basename);\n\t\treturn index !== -1 ? patterns[index] : null;\n\t};\n\taggregate.basenames = basenames;\n\taggregate.patterns = patterns;\n\taggregate.allBasenames = basenames;\n\n\tconst aggregatedPatterns = parsedPatterns.filter(parsedPattern => !(parsedPattern).basenames);\n\taggregatedPatterns.push(aggregate);\n\treturn aggregatedPatterns;\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'use strict';\n\nimport paths = require('vs/base/common/paths');\nimport types = require('vs/base/common/types');\nimport strings = require('vs/base/common/strings');\nimport { match } from 'vs/base/common/glob';\n\nexport let MIME_TEXT = 'text/plain';\nexport let MIME_BINARY = 'application/octet-stream';\nexport let MIME_UNKNOWN = 'application/unknown';\n\nexport interface ITextMimeAssociation {\n\tid: string;\n\tmime: string;\n\tfilename?: string;\n\textension?: string;\n\tfilepattern?: string;\n\tfirstline?: RegExp;\n\tuserConfigured?: boolean;\n}\n\ninterface ITextMimeAssociationItem extends ITextMimeAssociation {\n\tfilenameLowercase?: string;\n\textensionLowercase?: string;\n\tfilepatternLowercase?: string;\n\tfilepatternOnPath?: boolean;\n}\n\nlet registeredAssociations: ITextMimeAssociationItem[] = [];\nlet nonUserRegisteredAssociations: ITextMimeAssociationItem[] = [];\nlet userRegisteredAssociations: ITextMimeAssociationItem[] = [];\n\n/**\n * Associate a text mime to the registry.\n */\nexport function registerTextMime(association: ITextMimeAssociation): void {\n\n\t// Register\n\tconst associationItem = toTextMimeAssociationItem(association);\n\tregisteredAssociations.push(associationItem);\n\tif (!associationItem.userConfigured) {\n\t\tnonUserRegisteredAssociations.push(associationItem);\n\t} else {\n\t\tuserRegisteredAssociations.push(associationItem);\n\t}\n\n\t// Check for conflicts unless this is a user configured association\n\tif (!associationItem.userConfigured) {\n\t\tregisteredAssociations.forEach(a => {\n\t\t\tif (a.mime === associationItem.mime || a.userConfigured) {\n\t\t\t\treturn; // same mime or userConfigured is ok\n\t\t\t}\n\n\t\t\tif (associationItem.extension && a.extension === associationItem.extension) {\n\t\t\t\tconsole.warn(`Overwriting extension <<${associationItem.extension}>> to now point to mime <<${associationItem.mime}>>`);\n\t\t\t}\n\n\t\t\tif (associationItem.filename && a.filename === associationItem.filename) {\n\t\t\t\tconsole.warn(`Overwriting filename <<${associationItem.filename}>> to now point to mime <<${associationItem.mime}>>`);\n\t\t\t}\n\n\t\t\tif (associationItem.filepattern && a.filepattern === associationItem.filepattern) {\n\t\t\t\tconsole.warn(`Overwriting filepattern <<${associationItem.filepattern}>> to now point to mime <<${associationItem.mime}>>`);\n\t\t\t}\n\n\t\t\tif (associationItem.firstline && a.firstline === associationItem.firstline) {\n\t\t\t\tconsole.warn(`Overwriting firstline <<${associationItem.firstline}>> to now point to mime <<${associationItem.mime}>>`);\n\t\t\t}\n\t\t});\n\t}\n}\n\nfunction toTextMimeAssociationItem(association: ITextMimeAssociation): ITextMimeAssociationItem {\n\treturn {\n\t\tid: association.id,\n\t\tmime: association.mime,\n\t\tfilename: association.filename,\n\t\textension: association.extension,\n\t\tfilepattern: association.filepattern,\n\t\tfirstline: association.firstline,\n\t\tuserConfigured: association.userConfigured,\n\t\tfilenameLowercase: association.filename ? association.filename.toLowerCase() : void 0,\n\t\textensionLowercase: association.extension ? association.extension.toLowerCase() : void 0,\n\t\tfilepatternLowercase: association.filepattern ? association.filepattern.toLowerCase() : void 0,\n\t\tfilepatternOnPath: association.filepattern ? association.filepattern.indexOf(paths.sep) >= 0 : false\n\t};\n}\n\n/**\n * Clear text mimes from the registry.\n */\nexport function clearTextMimes(onlyUserConfigured?: boolean): void {\n\tif (!onlyUserConfigured) {\n\t\tregisteredAssociations = [];\n\t\tnonUserRegisteredAssociations = [];\n\t\tuserRegisteredAssociations = [];\n\t} else {\n\t\tregisteredAssociations = registeredAssociations.filter(a => !a.userConfigured);\n\t\tuserRegisteredAssociations = [];\n\t}\n}\n\n/**\n * Given a file, return the best matching mime type for it\n */\nexport function guessMimeTypes(path: string, firstLine?: string): string[] {\n\tif (!path) {\n\t\treturn [MIME_UNKNOWN];\n\t}\n\n\tpath = path.toLowerCase();\n\tlet filename = paths.basename(path);\n\n\t// 1.) User configured mappings have highest priority\n\tlet configuredMime = guessMimeTypeByPath(path, filename, userRegisteredAssociations);\n\tif (configuredMime) {\n\t\treturn [configuredMime, MIME_TEXT];\n\t}\n\n\t// 2.) Registered mappings have middle priority\n\tlet registeredMime = guessMimeTypeByPath(path, filename, nonUserRegisteredAssociations);\n\tif (registeredMime) {\n\t\treturn [registeredMime, MIME_TEXT];\n\t}\n\n\t// 3.) Firstline has lowest priority\n\tif (firstLine) {\n\t\tlet firstlineMime = guessMimeTypeByFirstline(firstLine);\n\t\tif (firstlineMime) {\n\t\t\treturn [firstlineMime, MIME_TEXT];\n\t\t}\n\t}\n\n\treturn [MIME_UNKNOWN];\n}\n\nfunction guessMimeTypeByPath(path: string, filename: string, associations: ITextMimeAssociationItem[]): string {\n\tlet filenameMatch: ITextMimeAssociationItem;\n\tlet patternMatch: ITextMimeAssociationItem;\n\tlet extensionMatch: ITextMimeAssociationItem;\n\n\t// We want to prioritize associations based on the order they are registered so that the last registered\n\t// association wins over all other. This is for https://github.com/Microsoft/vscode/issues/20074\n\tfor (let i = associations.length - 1; i >= 0; i--) {\n\t\tlet association = associations[i];\n\n\t\t// First exact name match\n\t\tif (filename === association.filenameLowercase) {\n\t\t\tfilenameMatch = association;\n\t\t\tbreak; // take it!\n\t\t}\n\n\t\t// Longest pattern match\n\t\tif (association.filepattern) {\n\t\t\tif (!patternMatch || association.filepattern.length > patternMatch.filepattern.length) {\n\t\t\t\tlet target = association.filepatternOnPath ? path : filename; // match on full path if pattern contains path separator\n\t\t\t\tif (match(association.filepatternLowercase, target)) {\n\t\t\t\t\tpatternMatch = association;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Longest extension match\n\t\tif (association.extension) {\n\t\t\tif (!extensionMatch || association.extension.length > extensionMatch.extension.length) {\n\t\t\t\tif (strings.endsWith(filename, association.extensionLowercase)) {\n\t\t\t\t\textensionMatch = association;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 1.) Exact name match has second highest prio\n\tif (filenameMatch) {\n\t\treturn filenameMatch.mime;\n\t}\n\n\t// 2.) Match on pattern\n\tif (patternMatch) {\n\t\treturn patternMatch.mime;\n\t}\n\n\t// 3.) Match on extension comes next\n\tif (extensionMatch) {\n\t\treturn extensionMatch.mime;\n\t}\n\n\treturn null;\n}\n\nfunction guessMimeTypeByFirstline(firstLine: string): string {\n\tif (strings.startsWithUTF8BOM(firstLine)) {\n\t\tfirstLine = firstLine.substr(1);\n\t}\n\n\tif (firstLine.length > 0) {\n\t\tfor (let i = 0; i < registeredAssociations.length; ++i) {\n\t\t\tlet association = registeredAssociations[i];\n\t\t\tif (!association.firstline) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet matches = firstLine.match(association.firstline);\n\t\t\tif (matches && matches.length > 0) {\n\t\t\t\treturn association.mime;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport function isBinaryMime(mimes: string): boolean;\nexport function isBinaryMime(mimes: string[]): boolean;\nexport function isBinaryMime(mimes: any): boolean {\n\tif (!mimes) {\n\t\treturn false;\n\t}\n\n\tlet mimeVals: string[];\n\tif (types.isArray(mimes)) {\n\t\tmimeVals = (mimes);\n\t} else {\n\t\tmimeVals = (mimes).split(',').map((mime) => mime.trim());\n\t}\n\n\treturn mimeVals.indexOf(MIME_BINARY) >= 0;\n}\n\nexport function isUnspecific(mime: string[] | string): boolean {\n\tif (!mime) {\n\t\treturn true;\n\t}\n\n\tif (typeof mime === 'string') {\n\t\treturn mime === MIME_BINARY || mime === MIME_TEXT || mime === MIME_UNKNOWN;\n\t}\n\n\treturn mime.length === 1 && isUnspecific(mime[0]);\n}\n\nexport function suggestFilename(langId: string, prefix: string): string {\n\tfor (let i = 0; i < registeredAssociations.length; i++) {\n\t\tlet association = registeredAssociations[i];\n\t\tif (association.userConfigured) {\n\t\t\tcontinue; // only support registered ones\n\t\t}\n\n\t\tif (association.id === langId && association.extension) {\n\t\t\treturn prefix + association.extension;\n\t\t}\n\t}\n\n\treturn prefix; // without any known extension, just return the prefix\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'use strict';\n\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport Event, { Emitter } from 'vs/base/common/event';\n\nexport enum ScrollbarVisibility {\n\tAuto = 1,\n\tHidden = 2,\n\tVisible = 3\n}\n\nexport interface ScrollEvent {\n\twidth: number;\n\tscrollWidth: number;\n\tscrollLeft: number;\n\n\theight: number;\n\tscrollHeight: number;\n\tscrollTop: number;\n\n\twidthChanged: boolean;\n\tscrollWidthChanged: boolean;\n\tscrollLeftChanged: boolean;\n\n\theightChanged: boolean;\n\tscrollHeightChanged: boolean;\n\tscrollTopChanged: boolean;\n}\n\nexport class ScrollState {\n\t_scrollStateBrand: void;\n\n\tpublic readonly width: number;\n\tpublic readonly scrollWidth: number;\n\tpublic readonly scrollLeft: number;\n\tpublic readonly height: number;\n\tpublic readonly scrollHeight: number;\n\tpublic readonly scrollTop: number;\n\n\tconstructor(\n\t\twidth: number,\n\t\tscrollWidth: number,\n\t\tscrollLeft: number,\n\t\theight: number,\n\t\tscrollHeight: number,\n\t\tscrollTop: number\n\t) {\n\t\twidth = width | 0;\n\t\tscrollWidth = scrollWidth | 0;\n\t\tscrollLeft = scrollLeft | 0;\n\t\theight = height | 0;\n\t\tscrollHeight = scrollHeight | 0;\n\t\tscrollTop = scrollTop | 0;\n\n\t\tif (width < 0) {\n\t\t\twidth = 0;\n\t\t}\n\t\tif (scrollLeft + width > scrollWidth) {\n\t\t\tscrollLeft = scrollWidth - width;\n\t\t}\n\t\tif (scrollLeft < 0) {\n\t\t\tscrollLeft = 0;\n\t\t}\n\n\t\tif (height < 0) {\n\t\t\theight = 0;\n\t\t}\n\t\tif (scrollTop + height > scrollHeight) {\n\t\t\tscrollTop = scrollHeight - height;\n\t\t}\n\t\tif (scrollTop < 0) {\n\t\t\tscrollTop = 0;\n\t\t}\n\n\t\tthis.width = width;\n\t\tthis.scrollWidth = scrollWidth;\n\t\tthis.scrollLeft = scrollLeft;\n\t\tthis.height = height;\n\t\tthis.scrollHeight = scrollHeight;\n\t\tthis.scrollTop = scrollTop;\n\t}\n\n\tpublic equals(other: ScrollState): boolean {\n\t\treturn (\n\t\t\tthis.width === other.width\n\t\t\t&& this.scrollWidth === other.scrollWidth\n\t\t\t&& this.scrollLeft === other.scrollLeft\n\t\t\t&& this.height === other.height\n\t\t\t&& this.scrollHeight === other.scrollHeight\n\t\t\t&& this.scrollTop === other.scrollTop\n\t\t);\n\t}\n\n\tpublic createScrollEvent(previous: ScrollState): ScrollEvent {\n\t\tlet widthChanged = (this.width !== previous.width);\n\t\tlet scrollWidthChanged = (this.scrollWidth !== previous.scrollWidth);\n\t\tlet scrollLeftChanged = (this.scrollLeft !== previous.scrollLeft);\n\n\t\tlet heightChanged = (this.height !== previous.height);\n\t\tlet scrollHeightChanged = (this.scrollHeight !== previous.scrollHeight);\n\t\tlet scrollTopChanged = (this.scrollTop !== previous.scrollTop);\n\n\t\treturn {\n\t\t\twidth: this.width,\n\t\t\tscrollWidth: this.scrollWidth,\n\t\t\tscrollLeft: this.scrollLeft,\n\n\t\t\theight: this.height,\n\t\t\tscrollHeight: this.scrollHeight,\n\t\t\tscrollTop: this.scrollTop,\n\n\t\t\twidthChanged: widthChanged,\n\t\t\tscrollWidthChanged: scrollWidthChanged,\n\t\t\tscrollLeftChanged: scrollLeftChanged,\n\n\t\t\theightChanged: heightChanged,\n\t\t\tscrollHeightChanged: scrollHeightChanged,\n\t\t\tscrollTopChanged: scrollTopChanged,\n\t\t};\n\t}\n\n}\n\nexport interface INewScrollState {\n\twidth?: number;\n\tscrollWidth?: number;\n\tscrollLeft?: number;\n\n\theight?: number;\n\tscrollHeight?: number;\n\tscrollTop?: number;\n}\n\nexport class Scrollable extends Disposable {\n\n\t_scrollableBrand: void;\n\n\tprivate _state: ScrollState;\n\n\tprivate _onScroll = this._register(new Emitter());\n\tpublic onScroll: Event = this._onScroll.event;\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._state = new ScrollState(0, 0, 0, 0, 0, 0);\n\t}\n\n\tpublic getState(): ScrollState {\n\t\treturn this._state;\n\t}\n\n\tpublic validateScrollTop(desiredScrollTop: number): number {\n\t\tdesiredScrollTop = Math.round(desiredScrollTop);\n\t\tdesiredScrollTop = Math.max(desiredScrollTop, 0);\n\t\tdesiredScrollTop = Math.min(desiredScrollTop, this._state.scrollHeight - this._state.height);\n\t\treturn desiredScrollTop;\n\t}\n\n\tpublic validateScrollLeft(desiredScrollLeft: number): number {\n\t\tdesiredScrollLeft = Math.round(desiredScrollLeft);\n\t\tdesiredScrollLeft = Math.max(desiredScrollLeft, 0);\n\t\tdesiredScrollLeft = Math.min(desiredScrollLeft, this._state.scrollWidth - this._state.width);\n\t\treturn desiredScrollLeft;\n\t}\n\n\tpublic updateState(update: INewScrollState): void {\n\t\tconst oldState = this._state;\n\t\tconst newState = new ScrollState(\n\t\t\t(typeof update.width !== 'undefined' ? update.width : oldState.width),\n\t\t\t(typeof update.scrollWidth !== 'undefined' ? update.scrollWidth : oldState.scrollWidth),\n\t\t\t(typeof update.scrollLeft !== 'undefined' ? update.scrollLeft : oldState.scrollLeft),\n\t\t\t(typeof update.height !== 'undefined' ? update.height : oldState.height),\n\t\t\t(typeof update.scrollHeight !== 'undefined' ? update.scrollHeight : oldState.scrollHeight),\n\t\t\t(typeof update.scrollTop !== 'undefined' ? update.scrollTop : oldState.scrollTop)\n\t\t);\n\n\t\tif (oldState.equals(newState)) {\n\t\t\t// no change\n\t\t\treturn;\n\t\t}\n\n\t\tthis._state = newState;\n\t\tthis._onScroll.fire(this._state.createScrollEvent(oldState));\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { TimeoutTimer } from 'vs/base/common/async';\nimport { FastDomNode } from 'vs/base/browser/fastDomNode';\nimport { ScrollbarVisibility } from 'vs/base/common/scrollable';\n\nexport class ScrollbarVisibilityController extends Disposable {\n\tprivate _visibility: ScrollbarVisibility;\n\tprivate _visibleClassName: string;\n\tprivate _invisibleClassName: string;\n\tprivate _domNode: FastDomNode;\n\tprivate _shouldBeVisible: boolean;\n\tprivate _isNeeded: boolean;\n\tprivate _isVisible: boolean;\n\tprivate _revealTimer: TimeoutTimer;\n\n\tconstructor(visibility: ScrollbarVisibility, visibleClassName: string, invisibleClassName: string) {\n\t\tsuper();\n\t\tthis._visibility = visibility;\n\t\tthis._visibleClassName = visibleClassName;\n\t\tthis._invisibleClassName = invisibleClassName;\n\t\tthis._domNode = null;\n\t\tthis._isVisible = false;\n\t\tthis._isNeeded = false;\n\t\tthis._shouldBeVisible = false;\n\t\tthis._revealTimer = this._register(new TimeoutTimer());\n\t}\n\n\t// ----------------- Hide / Reveal\n\n\tprivate applyVisibilitySetting(shouldBeVisible: boolean): boolean {\n\t\tif (this._visibility === ScrollbarVisibility.Hidden) {\n\t\t\treturn false;\n\t\t}\n\t\tif (this._visibility === ScrollbarVisibility.Visible) {\n\t\t\treturn true;\n\t\t}\n\t\treturn shouldBeVisible;\n\t}\n\n\tpublic setShouldBeVisible(rawShouldBeVisible: boolean): void {\n\t\tlet shouldBeVisible = this.applyVisibilitySetting(rawShouldBeVisible);\n\n\t\tif (this._shouldBeVisible !== shouldBeVisible) {\n\t\t\tthis._shouldBeVisible = shouldBeVisible;\n\t\t\tthis.ensureVisibility();\n\t\t}\n\t}\n\n\tpublic setIsNeeded(isNeeded: boolean): void {\n\t\tif (this._isNeeded !== isNeeded) {\n\t\t\tthis._isNeeded = isNeeded;\n\t\t\tthis.ensureVisibility();\n\t\t}\n\t}\n\n\tpublic setDomNode(domNode: FastDomNode): void {\n\t\tthis._domNode = domNode;\n\t\tthis._domNode.setClassName(this._invisibleClassName);\n\n\t\t// Now that the flags & the dom node are in a consistent state, ensure the Hidden/Visible configuration\n\t\tthis.setShouldBeVisible(false);\n\t}\n\n\tpublic ensureVisibility(): void {\n\n\t\tif (!this._isNeeded) {\n\t\t\t// Nothing to be rendered\n\t\t\tthis._hide(false);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._shouldBeVisible) {\n\t\t\tthis._reveal();\n\t\t} else {\n\t\t\tthis._hide(true);\n\t\t}\n\t}\n\n\tprivate _reveal(): void {\n\t\tif (this._isVisible) {\n\t\t\treturn;\n\t\t}\n\t\tthis._isVisible = true;\n\n\t\t// The CSS animation doesn't play otherwise\n\t\tthis._revealTimer.setIfNotSet(() => {\n\t\t\tthis._domNode.setClassName(this._visibleClassName);\n\t\t}, 0);\n\t}\n\n\tprivate _hide(withFadeAway: boolean): void {\n\t\tthis._revealTimer.cancel();\n\t\tif (!this._isVisible) {\n\t\t\treturn;\n\t\t}\n\t\tthis._isVisible = false;\n\t\tthis._domNode.setClassName(this._invisibleClassName + (withFadeAway ? ' fade' : ''));\n\t}\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'use strict';\n\nimport * as Platform from 'vs/base/common/platform';\nimport * as DomUtils from 'vs/base/browser/dom';\nimport { IMouseEvent, StandardMouseWheelEvent } from 'vs/base/browser/mouseEvent';\nimport { GlobalMouseMoveMonitor, IStandardMouseMoveEventData, standardMouseMoveMerger } from 'vs/base/browser/globalMouseMoveMonitor';\nimport { Widget } from 'vs/base/browser/ui/widget';\nimport { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';\nimport { ScrollbarState } from 'vs/base/browser/ui/scrollbar/scrollbarState';\nimport { ScrollbarArrow, ScrollbarArrowOptions } from 'vs/base/browser/ui/scrollbar/scrollbarArrow';\nimport { ScrollbarVisibilityController } from 'vs/base/browser/ui/scrollbar/scrollbarVisibilityController';\nimport { Scrollable, ScrollbarVisibility } from 'vs/base/common/scrollable';\n\n/**\n * The orthogonal distance to the slider at which dragging \"resets\". This implements \"snapping\"\n */\nconst MOUSE_DRAG_RESET_DISTANCE = 140;\n\nexport interface ISimplifiedMouseEvent {\n\tposx: number;\n\tposy: number;\n}\n\nexport interface ScrollbarHost {\n\tonMouseWheel(mouseWheelEvent: StandardMouseWheelEvent): void;\n\tonDragStart(): void;\n\tonDragEnd(): void;\n}\n\nexport interface AbstractScrollbarOptions {\n\tlazyRender: boolean;\n\thost: ScrollbarHost;\n\tscrollbarState: ScrollbarState;\n\tvisibility: ScrollbarVisibility;\n\textraScrollbarClassName: string;\n\tscrollable: Scrollable;\n}\n\nexport abstract class AbstractScrollbar extends Widget {\n\n\tprotected _host: ScrollbarHost;\n\tprotected _scrollable: Scrollable;\n\tprivate _lazyRender: boolean;\n\tprotected _scrollbarState: ScrollbarState;\n\tprivate _visibilityController: ScrollbarVisibilityController;\n\tprivate _mouseMoveMonitor: GlobalMouseMoveMonitor;\n\n\tpublic domNode: FastDomNode;\n\tpublic slider: FastDomNode;\n\n\tprotected _shouldRender: boolean;\n\n\tconstructor(opts: AbstractScrollbarOptions) {\n\t\tsuper();\n\t\tthis._lazyRender = opts.lazyRender;\n\t\tthis._host = opts.host;\n\t\tthis._scrollable = opts.scrollable;\n\t\tthis._scrollbarState = opts.scrollbarState;\n\t\tthis._visibilityController = this._register(new ScrollbarVisibilityController(opts.visibility, 'visible scrollbar ' + opts.extraScrollbarClassName, 'invisible scrollbar ' + opts.extraScrollbarClassName));\n\t\tthis._mouseMoveMonitor = this._register(new GlobalMouseMoveMonitor());\n\t\tthis._shouldRender = true;\n\t\tthis.domNode = createFastDomNode(document.createElement('div'));\n\t\tthis.domNode.setAttribute('role', 'presentation');\n\t\tthis.domNode.setAttribute('aria-hidden', 'true');\n\n\t\tthis._visibilityController.setDomNode(this.domNode);\n\t\tthis.domNode.setPosition('absolute');\n\n\t\tthis.onmousedown(this.domNode.domNode, (e) => this._domNodeMouseDown(e));\n\t}\n\n\t// ----------------- creation\n\n\t/**\n\t * Creates the dom node for an arrow & adds it to the container\n\t */\n\tprotected _createArrow(opts: ScrollbarArrowOptions): void {\n\t\tlet arrow = this._register(new ScrollbarArrow(opts));\n\t\tthis.domNode.domNode.appendChild(arrow.bgDomNode);\n\t\tthis.domNode.domNode.appendChild(arrow.domNode);\n\t}\n\n\t/**\n\t * Creates the slider dom node, adds it to the container & hooks up the events\n\t */\n\tprotected _createSlider(top: number, left: number, width: number, height: number): void {\n\t\tthis.slider = createFastDomNode(document.createElement('div'));\n\t\tthis.slider.setClassName('slider');\n\t\tthis.slider.setPosition('absolute');\n\t\tthis.slider.setTop(top);\n\t\tthis.slider.setLeft(left);\n\t\tthis.slider.setWidth(width);\n\t\tthis.slider.setHeight(height);\n\t\tthis.slider.setLayerHinting(true);\n\n\t\tthis.domNode.domNode.appendChild(this.slider.domNode);\n\n\t\tthis.onmousedown(this.slider.domNode, (e) => {\n\t\t\tif (e.leftButton) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis._sliderMouseDown(e, () => { /*nothing to do*/ });\n\t\t\t}\n\t\t});\n\t}\n\n\t// ----------------- Update state\n\n\tprotected _onElementSize(visibleSize: number): boolean {\n\t\tif (this._scrollbarState.setVisibleSize(visibleSize)) {\n\t\t\tthis._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n\t\t\tthis._shouldRender = true;\n\t\t\tif (!this._lazyRender) {\n\t\t\t\tthis.render();\n\t\t\t}\n\t\t}\n\t\treturn this._shouldRender;\n\t}\n\n\tprotected _onElementScrollSize(elementScrollSize: number): boolean {\n\t\tif (this._scrollbarState.setScrollSize(elementScrollSize)) {\n\t\t\tthis._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n\t\t\tthis._shouldRender = true;\n\t\t\tif (!this._lazyRender) {\n\t\t\t\tthis.render();\n\t\t\t}\n\t\t}\n\t\treturn this._shouldRender;\n\t}\n\n\tprotected _onElementScrollPosition(elementScrollPosition: number): boolean {\n\t\tif (this._scrollbarState.setScrollPosition(elementScrollPosition)) {\n\t\t\tthis._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n\t\t\tthis._shouldRender = true;\n\t\t\tif (!this._lazyRender) {\n\t\t\t\tthis.render();\n\t\t\t}\n\t\t}\n\t\treturn this._shouldRender;\n\t}\n\n\t// ----------------- rendering\n\n\tpublic beginReveal(): void {\n\t\tthis._visibilityController.setShouldBeVisible(true);\n\t}\n\n\tpublic beginHide(): void {\n\t\tthis._visibilityController.setShouldBeVisible(false);\n\t}\n\n\tpublic render(): void {\n\t\tif (!this._shouldRender) {\n\t\t\treturn;\n\t\t}\n\t\tthis._shouldRender = false;\n\n\t\tthis._renderDomNode(this._scrollbarState.getRectangleLargeSize(), this._scrollbarState.getRectangleSmallSize());\n\t\tthis._updateSlider(this._scrollbarState.getSliderSize(), this._scrollbarState.getArrowSize() + this._scrollbarState.getSliderPosition());\n\t}\n\t// ----------------- DOM events\n\n\tprivate _domNodeMouseDown(e: IMouseEvent): void {\n\t\tif (e.target !== this.domNode.domNode) {\n\t\t\treturn;\n\t\t}\n\t\tthis._onMouseDown(e);\n\t}\n\n\tpublic delegateMouseDown(e: IMouseEvent): void {\n\t\tlet domTop = this.domNode.domNode.getClientRects()[0].top;\n\t\tlet sliderStart = domTop + this._scrollbarState.getSliderPosition();\n\t\tlet sliderStop = domTop + this._scrollbarState.getSliderPosition() + this._scrollbarState.getSliderSize();\n\t\tlet mousePos = this._sliderMousePosition(e);\n\t\tif (sliderStart <= mousePos && mousePos <= sliderStop) {\n\t\t\t// Act as if it was a mouse down on the slider\n\t\t\tif (e.leftButton) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis._sliderMouseDown(e, () => { /*nothing to do*/ });\n\t\t\t}\n\t\t} else {\n\t\t\t// Act as if it was a mouse down on the scrollbar\n\t\t\tthis._onMouseDown(e);\n\t\t}\n\t}\n\n\tpublic delegateSliderMouseDown(e: ISimplifiedMouseEvent, onDragFinished: () => void): void {\n\t\tthis._sliderMouseDown(e, onDragFinished);\n\t}\n\n\tprivate _onMouseDown(e: IMouseEvent): void {\n\t\tlet domNodePosition = DomUtils.getDomNodePagePosition(this.domNode.domNode);\n\t\tthis.setDesiredScrollPosition(this._scrollbarState.getDesiredScrollPositionFromOffset(this._mouseDownRelativePosition(e, domNodePosition)));\n\t\tif (e.leftButton) {\n\t\t\te.preventDefault();\n\t\t\tthis._sliderMouseDown(e, () => { /*nothing to do*/ });\n\t\t}\n\t}\n\n\tprivate _sliderMouseDown(e: ISimplifiedMouseEvent, onDragFinished: () => void): void {\n\t\tconst initialMousePosition = this._sliderMousePosition(e);\n\t\tconst initialMouseOrthogonalPosition = this._sliderOrthogonalMousePosition(e);\n\t\tconst initialScrollbarState = this._scrollbarState.clone();\n\t\tthis.slider.toggleClassName('active', true);\n\n\t\tthis._mouseMoveMonitor.startMonitoring(\n\t\t\tstandardMouseMoveMerger,\n\t\t\t(mouseMoveData: IStandardMouseMoveEventData) => {\n\t\t\t\tconst mouseOrthogonalPosition = this._sliderOrthogonalMousePosition(mouseMoveData);\n\t\t\t\tconst mouseOrthogonalDelta = Math.abs(mouseOrthogonalPosition - initialMouseOrthogonalPosition);\n\n\t\t\t\tif (Platform.isWindows && mouseOrthogonalDelta > MOUSE_DRAG_RESET_DISTANCE) {\n\t\t\t\t\t// The mouse has wondered away from the scrollbar => reset dragging\n\t\t\t\t\tthis.setDesiredScrollPosition(initialScrollbarState.getScrollPosition());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst mousePosition = this._sliderMousePosition(mouseMoveData);\n\t\t\t\tconst mouseDelta = mousePosition - initialMousePosition;\n\t\t\t\tthis.setDesiredScrollPosition(initialScrollbarState.getDesiredScrollPositionFromDelta(mouseDelta));\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tthis.slider.toggleClassName('active', false);\n\t\t\t\tthis._host.onDragEnd();\n\t\t\t\tonDragFinished();\n\t\t\t}\n\t\t);\n\n\t\tthis._host.onDragStart();\n\t}\n\n\tpublic setDesiredScrollPosition(desiredScrollPosition: number): boolean {\n\t\tdesiredScrollPosition = this.validateScrollPosition(desiredScrollPosition);\n\n\t\tlet oldScrollPosition = this._getScrollPosition();\n\t\tthis._setScrollPosition(desiredScrollPosition);\n\t\tlet newScrollPosition = this._getScrollPosition();\n\n\t\tif (oldScrollPosition !== newScrollPosition) {\n\t\t\tthis._onElementScrollPosition(this._getScrollPosition());\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t// ----------------- Overwrite these\n\n\tprotected abstract _renderDomNode(largeSize: number, smallSize: number): void;\n\tprotected abstract _updateSlider(sliderSize: number, sliderPosition: number): void;\n\n\tprotected abstract _mouseDownRelativePosition(e: ISimplifiedMouseEvent, domNodePosition: DomUtils.IDomNodePagePosition): number;\n\tprotected abstract _sliderMousePosition(e: ISimplifiedMouseEvent): number;\n\tprotected abstract _sliderOrthogonalMousePosition(e: ISimplifiedMouseEvent): number;\n\n\tprotected abstract _getScrollPosition(): number;\n\tprotected abstract _setScrollPosition(elementScrollPosition: number): void;\n\tpublic abstract validateScrollPosition(desiredScrollPosition: number): number;\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'use strict';\n\nimport { AbstractScrollbar, ScrollbarHost, ISimplifiedMouseEvent } from 'vs/base/browser/ui/scrollbar/abstractScrollbar';\nimport { StandardMouseWheelEvent } from 'vs/base/browser/mouseEvent';\nimport { IDomNodePagePosition } from 'vs/base/browser/dom';\nimport { ScrollableElementResolvedOptions } from 'vs/base/browser/ui/scrollbar/scrollableElementOptions';\nimport { Scrollable, ScrollEvent, ScrollbarVisibility } from 'vs/base/common/scrollable';\nimport { ScrollbarState } from 'vs/base/browser/ui/scrollbar/scrollbarState';\nimport { ARROW_IMG_SIZE } from 'vs/base/browser/ui/scrollbar/scrollbarArrow';\n\nexport class HorizontalScrollbar extends AbstractScrollbar {\n\n\tconstructor(scrollable: Scrollable, options: ScrollableElementResolvedOptions, host: ScrollbarHost) {\n\t\tsuper({\n\t\t\tlazyRender: options.lazyRender,\n\t\t\thost: host,\n\t\t\tscrollbarState: new ScrollbarState(\n\t\t\t\t(options.horizontalHasArrows ? options.arrowSize : 0),\n\t\t\t\t(options.horizontal === ScrollbarVisibility.Hidden ? 0 : options.horizontalScrollbarSize),\n\t\t\t\t(options.vertical === ScrollbarVisibility.Hidden ? 0 : options.verticalScrollbarSize)\n\t\t\t),\n\t\t\tvisibility: options.horizontal,\n\t\t\textraScrollbarClassName: 'horizontal',\n\t\t\tscrollable: scrollable\n\t\t});\n\n\t\tif (options.horizontalHasArrows) {\n\t\t\tlet arrowDelta = (options.arrowSize - ARROW_IMG_SIZE) / 2;\n\t\t\tlet scrollbarDelta = (options.horizontalScrollbarSize - ARROW_IMG_SIZE) / 2;\n\n\t\t\tthis._createArrow({\n\t\t\t\tclassName: 'left-arrow',\n\t\t\t\ttop: scrollbarDelta,\n\t\t\t\tleft: arrowDelta,\n\t\t\t\tbottom: void 0,\n\t\t\t\tright: void 0,\n\t\t\t\tbgWidth: options.arrowSize,\n\t\t\t\tbgHeight: options.horizontalScrollbarSize,\n\t\t\t\tonActivate: () => this._host.onMouseWheel(new StandardMouseWheelEvent(null, 1, 0)),\n\t\t\t});\n\n\t\t\tthis._createArrow({\n\t\t\t\tclassName: 'right-arrow',\n\t\t\t\ttop: scrollbarDelta,\n\t\t\t\tleft: void 0,\n\t\t\t\tbottom: void 0,\n\t\t\t\tright: arrowDelta,\n\t\t\t\tbgWidth: options.arrowSize,\n\t\t\t\tbgHeight: options.horizontalScrollbarSize,\n\t\t\t\tonActivate: () => this._host.onMouseWheel(new StandardMouseWheelEvent(null, -1, 0)),\n\t\t\t});\n\t\t}\n\n\t\tthis._createSlider(Math.floor((options.horizontalScrollbarSize - options.horizontalSliderSize) / 2), 0, null, options.horizontalSliderSize);\n\t}\n\n\tprotected _updateSlider(sliderSize: number, sliderPosition: number): void {\n\t\tthis.slider.setWidth(sliderSize);\n\t\tthis.slider.setLeft(sliderPosition);\n\t}\n\n\tprotected _renderDomNode(largeSize: number, smallSize: number): void {\n\t\tthis.domNode.setWidth(largeSize);\n\t\tthis.domNode.setHeight(smallSize);\n\t\tthis.domNode.setLeft(0);\n\t\tthis.domNode.setBottom(0);\n\t}\n\n\tpublic onDidScroll(e: ScrollEvent): boolean {\n\t\tthis._shouldRender = this._onElementScrollSize(e.scrollWidth) || this._shouldRender;\n\t\tthis._shouldRender = this._onElementScrollPosition(e.scrollLeft) || this._shouldRender;\n\t\tthis._shouldRender = this._onElementSize(e.width) || this._shouldRender;\n\t\treturn this._shouldRender;\n\t}\n\n\tprotected _mouseDownRelativePosition(e: ISimplifiedMouseEvent, domNodePosition: IDomNodePagePosition): number {\n\t\treturn e.posx - domNodePosition.left;\n\t}\n\n\tprotected _sliderMousePosition(e: ISimplifiedMouseEvent): number {\n\t\treturn e.posx;\n\t}\n\n\tprotected _sliderOrthogonalMousePosition(e: ISimplifiedMouseEvent): number {\n\t\treturn e.posy;\n\t}\n\n\tprotected _getScrollPosition(): number {\n\t\tconst scrollState = this._scrollable.getState();\n\t\treturn scrollState.scrollLeft;\n\t}\n\n\tprotected _setScrollPosition(scrollPosition: number) {\n\t\tthis._scrollable.updateState({\n\t\t\tscrollLeft: scrollPosition\n\t\t});\n\t}\n\n\tpublic validateScrollPosition(desiredScrollPosition: number): number {\n\t\treturn this._scrollable.validateScrollLeft(desiredScrollPosition);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { AbstractScrollbar, ScrollbarHost, ISimplifiedMouseEvent } from 'vs/base/browser/ui/scrollbar/abstractScrollbar';\nimport { StandardMouseWheelEvent } from 'vs/base/browser/mouseEvent';\nimport { IDomNodePagePosition } from 'vs/base/browser/dom';\nimport { ScrollableElementResolvedOptions } from 'vs/base/browser/ui/scrollbar/scrollableElementOptions';\nimport { Scrollable, ScrollEvent, ScrollbarVisibility } from 'vs/base/common/scrollable';\nimport { ScrollbarState } from 'vs/base/browser/ui/scrollbar/scrollbarState';\nimport { ARROW_IMG_SIZE } from 'vs/base/browser/ui/scrollbar/scrollbarArrow';\n\nexport class VerticalScrollbar extends AbstractScrollbar {\n\n\tconstructor(scrollable: Scrollable, options: ScrollableElementResolvedOptions, host: ScrollbarHost) {\n\t\tsuper({\n\t\t\tlazyRender: options.lazyRender,\n\t\t\thost: host,\n\t\t\tscrollbarState: new ScrollbarState(\n\t\t\t\t(options.verticalHasArrows ? options.arrowSize : 0),\n\t\t\t\t(options.vertical === ScrollbarVisibility.Hidden ? 0 : options.verticalScrollbarSize),\n\t\t\t\t// give priority to vertical scroll bar over horizontal and let it scroll all the way to the bottom\n\t\t\t\t0\n\t\t\t),\n\t\t\tvisibility: options.vertical,\n\t\t\textraScrollbarClassName: 'vertical',\n\t\t\tscrollable: scrollable\n\t\t});\n\n\t\tif (options.verticalHasArrows) {\n\t\t\tlet arrowDelta = (options.arrowSize - ARROW_IMG_SIZE) / 2;\n\t\t\tlet scrollbarDelta = (options.verticalScrollbarSize - ARROW_IMG_SIZE) / 2;\n\n\t\t\tthis._createArrow({\n\t\t\t\tclassName: 'up-arrow',\n\t\t\t\ttop: arrowDelta,\n\t\t\t\tleft: scrollbarDelta,\n\t\t\t\tbottom: void 0,\n\t\t\t\tright: void 0,\n\t\t\t\tbgWidth: options.verticalScrollbarSize,\n\t\t\t\tbgHeight: options.arrowSize,\n\t\t\t\tonActivate: () => this._host.onMouseWheel(new StandardMouseWheelEvent(null, 0, 1)),\n\t\t\t});\n\n\t\t\tthis._createArrow({\n\t\t\t\tclassName: 'down-arrow',\n\t\t\t\ttop: void 0,\n\t\t\t\tleft: scrollbarDelta,\n\t\t\t\tbottom: arrowDelta,\n\t\t\t\tright: void 0,\n\t\t\t\tbgWidth: options.verticalScrollbarSize,\n\t\t\t\tbgHeight: options.arrowSize,\n\t\t\t\tonActivate: () => this._host.onMouseWheel(new StandardMouseWheelEvent(null, 0, -1)),\n\t\t\t});\n\t\t}\n\n\t\tthis._createSlider(0, Math.floor((options.verticalScrollbarSize - options.verticalSliderSize) / 2), options.verticalSliderSize, null);\n\t}\n\n\tprotected _updateSlider(sliderSize: number, sliderPosition: number): void {\n\t\tthis.slider.setHeight(sliderSize);\n\t\tthis.slider.setTop(sliderPosition);\n\t}\n\n\tprotected _renderDomNode(largeSize: number, smallSize: number): void {\n\t\tthis.domNode.setWidth(smallSize);\n\t\tthis.domNode.setHeight(largeSize);\n\t\tthis.domNode.setRight(0);\n\t\tthis.domNode.setTop(0);\n\t}\n\n\tpublic onDidScroll(e: ScrollEvent): boolean {\n\t\tthis._shouldRender = this._onElementScrollSize(e.scrollHeight) || this._shouldRender;\n\t\tthis._shouldRender = this._onElementScrollPosition(e.scrollTop) || this._shouldRender;\n\t\tthis._shouldRender = this._onElementSize(e.height) || this._shouldRender;\n\t\treturn this._shouldRender;\n\t}\n\n\tprotected _mouseDownRelativePosition(e: ISimplifiedMouseEvent, domNodePosition: IDomNodePagePosition): number {\n\t\treturn e.posy - domNodePosition.top;\n\t}\n\n\tprotected _sliderMousePosition(e: ISimplifiedMouseEvent): number {\n\t\treturn e.posy;\n\t}\n\n\tprotected _sliderOrthogonalMousePosition(e: ISimplifiedMouseEvent): number {\n\t\treturn e.posx;\n\t}\n\n\tprotected _getScrollPosition(): number {\n\t\tconst scrollState = this._scrollable.getState();\n\t\treturn scrollState.scrollTop;\n\t}\n\n\tprotected _setScrollPosition(scrollPosition: number): void {\n\t\tthis._scrollable.updateState({\n\t\t\tscrollTop: scrollPosition\n\t\t});\n\t}\n\n\tpublic validateScrollPosition(desiredScrollPosition: number): number {\n\t\treturn this._scrollable.validateScrollTop(desiredScrollPosition);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { transformErrorForSerialization } from 'vs/base/common/errors';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { ErrorCallback, TPromise, ValueCallback } from 'vs/base/common/winjs.base';\nimport { ShallowCancelThenPromise } from 'vs/base/common/async';\nimport { isWeb } from 'vs/base/common/platform';\n\nconst INITIALIZE = '$initialize';\n\nexport interface IWorker {\n\tgetId(): number;\n\tpostMessage(message: string): void;\n\tdispose(): void;\n}\n\nexport interface IWorkerCallback {\n\t(message: string): void;\n}\n\nexport interface IWorkerFactory {\n\tcreate(moduleId: string, callback: IWorkerCallback, onErrorCallback: (err: any) => void): IWorker;\n}\n\nlet webWorkerWarningLogged = false;\nexport function logOnceWebWorkerWarning(err: any): void {\n\tif (!isWeb) {\n\t\t// running tests\n\t\treturn;\n\t}\n\tif (!webWorkerWarningLogged) {\n\t\twebWorkerWarningLogged = true;\n\t\tconsole.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\t}\n\tconsole.warn(err.message);\n}\n\ninterface IMessage {\n\tvsWorker: number;\n\treq?: string;\n\tseq?: string;\n}\n\ninterface IRequestMessage extends IMessage {\n\treq: string;\n\tmethod: string;\n\targs: any[];\n}\n\ninterface IReplyMessage extends IMessage {\n\tseq: string;\n\terr: any;\n\tres: any;\n}\n\ninterface IMessageReply {\n\tc: ValueCallback;\n\te: ErrorCallback;\n}\n\ninterface IMessageHandler {\n\tsendMessage(msg: string): void;\n\thandleMessage(method: string, args: any[]): TPromise;\n}\n\nclass SimpleWorkerProtocol {\n\n\tprivate _workerId: number;\n\tprivate _lastSentReq: number;\n\tprivate _pendingReplies: { [req: string]: IMessageReply; };\n\tprivate _handler: IMessageHandler;\n\n\tconstructor(handler: IMessageHandler) {\n\t\tthis._workerId = -1;\n\t\tthis._handler = handler;\n\t\tthis._lastSentReq = 0;\n\t\tthis._pendingReplies = Object.create(null);\n\t}\n\n\tpublic setWorkerId(workerId: number): void {\n\t\tthis._workerId = workerId;\n\t}\n\n\tpublic sendMessage(method: string, args: any[]): TPromise {\n\t\tlet req = String(++this._lastSentReq);\n\t\tlet reply: IMessageReply = {\n\t\t\tc: null,\n\t\t\te: null\n\t\t};\n\t\tlet result = new TPromise((c, e, p) => {\n\t\t\treply.c = c;\n\t\t\treply.e = e;\n\t\t}, () => {\n\t\t\t// Cancel not supported\n\t\t});\n\t\tthis._pendingReplies[req] = reply;\n\n\t\tthis._send({\n\t\t\tvsWorker: this._workerId,\n\t\t\treq: req,\n\t\t\tmethod: method,\n\t\t\targs: args\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tpublic handleMessage(serializedMessage: string): void {\n\t\tlet message: IMessage;\n\t\ttry {\n\t\t\tmessage = JSON.parse(serializedMessage);\n\t\t} catch (e) {\n\t\t\t// nothing\n\t\t}\n\t\tif (!message.vsWorker) {\n\t\t\treturn;\n\t\t}\n\t\tif (this._workerId !== -1 && message.vsWorker !== this._workerId) {\n\t\t\treturn;\n\t\t}\n\t\tthis._handleMessage(message);\n\t}\n\n\tprivate _handleMessage(msg: IMessage): void {\n\t\tif (msg.seq) {\n\t\t\tlet replyMessage = msg;\n\t\t\tif (!this._pendingReplies[replyMessage.seq]) {\n\t\t\t\tconsole.warn('Got reply to unknown seq');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet reply = this._pendingReplies[replyMessage.seq];\n\t\t\tdelete this._pendingReplies[replyMessage.seq];\n\n\t\t\tif (replyMessage.err) {\n\t\t\t\tlet err = replyMessage.err;\n\t\t\t\tif (replyMessage.err.$isError) {\n\t\t\t\t\terr = new Error();\n\t\t\t\t\terr.name = replyMessage.err.name;\n\t\t\t\t\terr.message = replyMessage.err.message;\n\t\t\t\t\terr.stack = replyMessage.err.stack;\n\t\t\t\t}\n\t\t\t\treply.e(err);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treply.c(replyMessage.res);\n\t\t\treturn;\n\t\t}\n\n\t\tlet requestMessage = msg;\n\t\tlet req = requestMessage.req;\n\t\tlet result = this._handler.handleMessage(requestMessage.method, requestMessage.args);\n\t\tresult.then((r) => {\n\t\t\tthis._send({\n\t\t\t\tvsWorker: this._workerId,\n\t\t\t\tseq: req,\n\t\t\t\tres: r,\n\t\t\t\terr: undefined\n\t\t\t});\n\t\t}, (e) => {\n\t\t\tthis._send({\n\t\t\t\tvsWorker: this._workerId,\n\t\t\t\tseq: req,\n\t\t\t\tres: undefined,\n\t\t\t\terr: transformErrorForSerialization(e)\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate _send(msg: IRequestMessage | IReplyMessage): void {\n\t\tlet strMsg = JSON.stringify(msg);\n\t\t// console.log('SENDING: ' + strMsg);\n\t\tthis._handler.sendMessage(strMsg);\n\t}\n}\n\n/**\n * Main thread side\n */\nexport class SimpleWorkerClient extends Disposable {\n\n\tprivate _worker: IWorker;\n\tprivate _onModuleLoaded: TPromise;\n\tprivate _protocol: SimpleWorkerProtocol;\n\tprivate _lazyProxy: TPromise;\n\tprivate _lastRequestTimestamp = -1;\n\n\tconstructor(workerFactory: IWorkerFactory, moduleId: string) {\n\t\tsuper();\n\n\t\tlet lazyProxyFulfill: (v: T) => void = null;\n\t\tlet lazyProxyReject: (err: any) => void = null;\n\n\t\tthis._worker = this._register(workerFactory.create(\n\t\t\t'vs/base/common/worker/simpleWorker',\n\t\t\t(msg: string) => {\n\t\t\t\tthis._protocol.handleMessage(msg);\n\t\t\t},\n\t\t\t(err: any) => {\n\t\t\t\t// in Firefox, web workers fail lazily :(\n\t\t\t\t// we will reject the proxy\n\t\t\t\tlazyProxyReject(err);\n\t\t\t}\n\t\t));\n\n\t\tthis._protocol = new SimpleWorkerProtocol({\n\t\t\tsendMessage: (msg: string): void => {\n\t\t\t\tthis._worker.postMessage(msg);\n\t\t\t},\n\t\t\thandleMessage: (method: string, args: any[]): TPromise => {\n\t\t\t\t// Intentionally not supporting worker -> main requests\n\t\t\t\treturn TPromise.as(null);\n\t\t\t}\n\t\t});\n\t\tthis._protocol.setWorkerId(this._worker.getId());\n\n\t\t// Gather loader configuration\n\t\tlet loaderConfiguration: any = null;\n\t\tlet globalRequire = (self).require;\n\t\tif (typeof globalRequire.getConfig === 'function') {\n\t\t\t// Get the configuration from the Monaco AMD Loader\n\t\t\tloaderConfiguration = globalRequire.getConfig();\n\t\t} else if (typeof (self).requirejs !== 'undefined') {\n\t\t\t// Get the configuration from requirejs\n\t\t\tloaderConfiguration = (self).requirejs.s.contexts._.config;\n\t\t}\n\n\t\tthis._lazyProxy = new TPromise((c, e, p) => {\n\t\t\tlazyProxyFulfill = c;\n\t\t\tlazyProxyReject = e;\n\t\t}, () => { /* no cancel */ });\n\n\t\t// Send initialize message\n\t\tthis._onModuleLoaded = this._protocol.sendMessage(INITIALIZE, [\n\t\t\tthis._worker.getId(),\n\t\t\tmoduleId,\n\t\t\tloaderConfiguration\n\t\t]);\n\t\tthis._onModuleLoaded.then((availableMethods: string[]) => {\n\t\t\tlet proxy = {};\n\t\t\tfor (let i = 0; i < availableMethods.length; i++) {\n\t\t\t\tproxy[availableMethods[i]] = createProxyMethod(availableMethods[i], proxyMethodRequest);\n\t\t\t}\n\t\t\tlazyProxyFulfill(proxy);\n\t\t}, (e) => {\n\t\t\tlazyProxyReject(e);\n\t\t\tthis._onError('Worker failed to load ' + moduleId, e);\n\t\t});\n\n\t\t// Create proxy to loaded code\n\t\tlet proxyMethodRequest = (method: string, args: any[]): TPromise => {\n\t\t\treturn this._request(method, args);\n\t\t};\n\n\t\tlet createProxyMethod = (method: string, proxyMethodRequest: (method: string, args: any[]) => TPromise): Function => {\n\t\t\treturn function () {\n\t\t\t\tlet args = Array.prototype.slice.call(arguments, 0);\n\t\t\t\treturn proxyMethodRequest(method, args);\n\t\t\t};\n\t\t};\n\t}\n\n\tpublic getProxyObject(): TPromise {\n\t\t// Do not allow chaining promises to cancel the proxy creation\n\t\treturn new ShallowCancelThenPromise(this._lazyProxy);\n\t}\n\n\tpublic getLastRequestTimestamp(): number {\n\t\treturn this._lastRequestTimestamp;\n\t}\n\n\tprivate _request(method: string, args: any[]): TPromise {\n\t\treturn new TPromise((c, e, p) => {\n\t\t\tthis._onModuleLoaded.then(() => {\n\t\t\t\tthis._lastRequestTimestamp = Date.now();\n\t\t\t\tthis._protocol.sendMessage(method, args).then(c, e);\n\t\t\t}, e);\n\t\t}, () => {\n\t\t\t// Cancel intentionally not supported\n\t\t});\n\t}\n\n\tprivate _onError(message: string, error?: any): void {\n\t\tconsole.error(message);\n\t\tconsole.info(error);\n\t}\n}\n\nexport interface IRequestHandler {\n\t_requestHandlerTrait: any;\n}\n\n/**\n * Worker side\n */\nexport class SimpleWorkerServer {\n\n\tprivate _protocol: SimpleWorkerProtocol;\n\tprivate _requestHandler: IRequestHandler;\n\n\tconstructor(postSerializedMessage: (msg: string) => void) {\n\t\tthis._protocol = new SimpleWorkerProtocol({\n\t\t\tsendMessage: (msg: string): void => {\n\t\t\t\tpostSerializedMessage(msg);\n\t\t\t},\n\t\t\thandleMessage: (method: string, args: any[]): TPromise => this._handleMessage(method, args)\n\t\t});\n\t}\n\n\tpublic onmessage(msg: string): void {\n\t\tthis._protocol.handleMessage(msg);\n\t}\n\n\tprivate _handleMessage(method: string, args: any[]): TPromise {\n\t\tif (method === INITIALIZE) {\n\t\t\treturn this.initialize(args[0], args[1], args[2]);\n\t\t}\n\n\t\tif (!this._requestHandler || typeof this._requestHandler[method] !== 'function') {\n\t\t\treturn TPromise.wrapError(new Error('Missing requestHandler or method: ' + method));\n\t\t}\n\n\t\ttry {\n\t\t\treturn TPromise.as(this._requestHandler[method].apply(this._requestHandler, args));\n\t\t} catch (e) {\n\t\t\treturn TPromise.wrapError(e);\n\t\t}\n\t}\n\n\tprivate initialize(workerId: number, moduleId: string, loaderConfig: any): TPromise {\n\t\tthis._protocol.setWorkerId(workerId);\n\n\t\tif (loaderConfig) {\n\t\t\t// Remove 'baseUrl', handling it is beyond scope for now\n\t\t\tif (typeof loaderConfig.baseUrl !== 'undefined') {\n\t\t\t\tdelete loaderConfig['baseUrl'];\n\t\t\t}\n\t\t\tif (typeof loaderConfig.paths !== 'undefined') {\n\t\t\t\tif (typeof loaderConfig.paths.vs !== 'undefined') {\n\t\t\t\t\tdelete loaderConfig.paths['vs'];\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet nlsConfig = loaderConfig['vs/nls'];\n\t\t\t// We need to have pseudo translation\n\t\t\tif (nlsConfig && nlsConfig.pseudo) {\n\t\t\t\trequire(['vs/nls'], function (nlsPlugin) {\n\t\t\t\t\tnlsPlugin.setPseudoTranslation(nlsConfig.pseudo);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Since this is in a web worker, enable catching errors\n\t\t\tloaderConfig.catchError = true;\n\t\t\t(self).require.config(loaderConfig);\n\t\t}\n\n\t\tlet cc: ValueCallback;\n\t\tlet ee: ErrorCallback;\n\t\tlet r = new TPromise((c, e, p) => {\n\t\t\tcc = c;\n\t\t\tee = e;\n\t\t});\n\n\t\t// Use the global require to be sure to get the global config\n\t\t(self).require([moduleId], (...result: any[]) => {\n\t\t\tlet handlerModule = result[0];\n\t\t\tthis._requestHandler = handlerModule.create();\n\n\t\t\tlet methods: string[] = [];\n\t\t\tfor (let prop in this._requestHandler) {\n\t\t\t\tif (typeof this._requestHandler[prop] === 'function') {\n\t\t\t\t\tmethods.push(prop);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcc(methods);\n\t\t}, ee);\n\n\t\treturn r;\n\t}\n}\n\n/**\n * Called on the worker side\n */\nexport function create(postMessage: (msg: string) => void): SimpleWorkerServer {\n\treturn new SimpleWorkerServer(postMessage);\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\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { isFunction } from 'vs/base/common/types';\nimport { ITree, IRenderer, IFilter, IDataSource, IAccessibilityProvider } from 'vs/base/parts/tree/browser/tree';\nimport { IModel } from 'vs/base/parts/quickopen/common/quickOpen';\nimport { IQuickOpenStyles } from 'vs/base/parts/quickopen/browser/quickOpenWidget';\n\nexport interface IModelProvider {\n\tgetModel(): IModel;\n}\n\nexport class DataSource implements IDataSource {\n\n\tprivate modelProvider: IModelProvider;\n\n\tconstructor(model: IModel);\n\tconstructor(modelProvider: IModelProvider);\n\tconstructor(arg: any) {\n\t\tthis.modelProvider = isFunction(arg.getModel) ? arg : { getModel: () => arg };\n\t}\n\n\tpublic getId(tree: ITree, element: any): string {\n\t\tif (!element) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst model = this.modelProvider.getModel();\n\t\treturn model === element ? '__root__' : model.dataSource.getId(element);\n\t}\n\n\tpublic hasChildren(tree: ITree, element: any): boolean {\n\t\tconst model = this.modelProvider.getModel();\n\t\treturn model && model === element && model.entries.length > 0;\n\t}\n\n\tpublic getChildren(tree: ITree, element: any): TPromise {\n\t\tconst model = this.modelProvider.getModel();\n\t\treturn TPromise.as(model === element ? model.entries : []);\n\t}\n\n\tpublic getParent(tree: ITree, element: any): TPromise {\n\t\treturn TPromise.as(null);\n\t}\n}\n\nexport class AccessibilityProvider implements IAccessibilityProvider {\n\tconstructor(private modelProvider: IModelProvider) { }\n\n\tpublic getAriaLabel(tree: ITree, element: any): string {\n\t\tconst model = this.modelProvider.getModel();\n\n\t\treturn model.accessibilityProvider && model.accessibilityProvider.getAriaLabel(element);\n\t}\n\n\tpublic getPosInSet(tree: ITree, element: any): string {\n\t\tconst model = this.modelProvider.getModel();\n\t\treturn String(model.entries.indexOf(element) + 1);\n\t}\n\n\tpublic getSetSize(): string {\n\t\tconst model = this.modelProvider.getModel();\n\t\treturn String(model.entries.length);\n\t}\n}\n\nexport class Filter implements IFilter {\n\n\tconstructor(private modelProvider: IModelProvider) { }\n\n\tpublic isVisible(tree: ITree, element: any): boolean {\n\t\tconst model = this.modelProvider.getModel();\n\n\t\tif (!model.filter) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn model.filter.isVisible(element);\n\t}\n}\n\nexport class Renderer implements IRenderer {\n\tprivate styles: IQuickOpenStyles;\n\n\tconstructor(private modelProvider: IModelProvider, styles: IQuickOpenStyles) {\n\t\tthis.styles = styles;\n\t}\n\n\tpublic updateStyles(styles: IQuickOpenStyles): void {\n\t\tthis.styles = styles;\n\t}\n\n\tpublic getHeight(tree: ITree, element: any): number {\n\t\tconst model = this.modelProvider.getModel();\n\t\treturn model.renderer.getHeight(element);\n\t}\n\n\tpublic getTemplateId(tree: ITree, element: any): string {\n\t\tconst model = this.modelProvider.getModel();\n\t\treturn model.renderer.getTemplateId(element);\n\t}\n\n\tpublic renderTemplate(tree: ITree, templateId: string, container: HTMLElement): any {\n\t\tconst model = this.modelProvider.getModel();\n\t\treturn model.renderer.renderTemplate(templateId, container, this.styles);\n\t}\n\n\tpublic renderElement(tree: ITree, element: any, templateId: string, templateData: any): void {\n\t\tconst model = this.modelProvider.getModel();\n\t\tmodel.renderer.renderElement(element, templateId, templateData, this.styles);\n\t}\n\n\tpublic disposeTemplate(tree: ITree, templateId: string, templateData: any): void {\n\t\tconst model = this.modelProvider.getModel();\n\t\tmodel.renderer.disposeTemplate(templateId, templateData);\n\t}\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'use strict';\n\nimport { ResolvedKeybinding } from 'vs/base/common/keyCodes';\n\nexport interface IQuickNavigateConfiguration {\n\tkeybindings: ResolvedKeybinding[];\n}\n\nexport interface IAutoFocus {\n\n\t/**\n\t * The index of the element to focus in the result list.\n\t */\n\tautoFocusIndex?: number;\n\n\t/**\n\t * If set to true, will automatically select the first entry from the result list.\n\t */\n\tautoFocusFirstEntry?: boolean;\n\n\t/**\n\t * If set to true, will automatically select the second entry from the result list.\n\t */\n\tautoFocusSecondEntry?: boolean;\n\n\t/**\n\t * If set to true, will automatically select the last entry from the result list.\n\t */\n\tautoFocusLastEntry?: boolean;\n\n\t/**\n\t * If set to true, will automatically select any entry whose label starts with the search\n\t * value. Since some entries to the top might match the query but not on the prefix, this\n\t * allows to select the most accurate match (matching the prefix) while still showing other\n\t * elements.\n\t */\n\tautoFocusPrefixMatch?: string;\n}\n\nexport enum Mode {\n\tPREVIEW,\n\tOPEN,\n\tOPEN_IN_BACKGROUND\n}\n\nexport interface IEntryRunContext {\n\tevent: any;\n\tkeymods: number[];\n\tquickNavigateConfiguration: IQuickNavigateConfiguration;\n}\n\nexport interface IDataSource {\n\tgetId(entry: T): string;\n\tgetLabel(entry: T): string;\n}\n\n/**\n * See vs/base/parts/tree/browser/tree.ts - IRenderer\n */\nexport interface IRenderer {\n\tgetHeight(entry: T): number;\n\tgetTemplateId(entry: T): string;\n\trenderTemplate(templateId: string, container: HTMLElement, styles: any): any;\n\trenderElement(entry: T, templateId: string, templateData: any, styles: any): void;\n\tdisposeTemplate(templateId: string, templateData: any): void;\n}\n\nexport interface IFilter {\n\tisVisible(entry: T): boolean;\n}\n\nexport interface IAccessiblityProvider {\n\tgetAriaLabel(entry: T): string;\n}\n\nexport interface IRunner {\n\trun(entry: T, mode: Mode, context: IEntryRunContext): boolean;\n}\n\nexport interface IModel {\n\tentries: T[];\n\tdataSource: IDataSource;\n\trenderer: IRenderer;\n\trunner: IRunner;\n\tfilter?: IFilter;\n\taccessibilityProvider?: IAccessiblityProvider;\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'use strict';\n\nimport WinJS = require('vs/base/common/winjs.base');\nimport Touch = require('vs/base/browser/touch');\nimport Events = require('vs/base/common/eventEmitter');\nimport Mouse = require('vs/base/browser/mouseEvent');\nimport Keyboard = require('vs/base/browser/keyboardEvent');\nimport { INavigator } from 'vs/base/common/iterator';\nimport { ScrollbarVisibility } from 'vs/base/common/scrollable';\nimport Event from 'vs/base/common/event';\nimport { IAction, IActionItem } from 'vs/base/common/actions';\nimport { Color } from 'vs/base/common/color';\n\nexport interface ITree extends Events.IEventEmitter {\n\n\temit(eventType: string, data?: any): void;\n\n\tonDOMFocus: Event;\n\tonDOMBlur: Event;\n\tonHighlightChange: Event;\n\tonDispose: Event;\n\n\t/**\n\t * Returns the tree's DOM element.\n\t */\n\tgetHTMLElement(): HTMLElement;\n\n\t/**\n\t * Lays out the tree.\n\t * Provide a specific height to save an (expensive) height computation.\n\t */\n\tlayout(height?: number): void;\n\n\t/**\n\t * Notifies the tree that is has become visible.\n\t */\n\tonVisible(): void;\n\n\t/**\n\t * Notifies the tree that is has become hidden.\n\t */\n\tonHidden(): void;\n\n\t/**\n\t * Sets the input of the tree.\n\t */\n\tsetInput(element: any): WinJS.Promise;\n\n\t/**\n\t * Returns the tree's input.\n\t */\n\tgetInput(): any;\n\n\t/**\n\t * Sets DOM focus on the tree.\n\t */\n\tDOMFocus(): void;\n\n\t/**\n\t * Returns whether the tree has DOM focus.\n\t */\n\tisDOMFocused(): boolean;\n\n\t/**\n\t * Removes DOM focus from the tree.\n\t */\n\tDOMBlur(): void;\n\n\t/**\n\t * Refreshes an element.\n\t * Provide no arguments and it will refresh the input element.\n\t */\n\trefresh(element?: any, recursive?: boolean): WinJS.Promise;\n\n\t/**\n\t * Expands an element.\n\t * The returned promise returns a boolean for whether the element was expanded or not.\n\t */\n\texpand(element: any): WinJS.Promise;\n\n\t/**\n\t * Expands several elements.\n\t * The returned promise returns a boolean array for whether the elements were expanded or not.\n\t */\n\texpandAll(elements?: any[]): WinJS.Promise;\n\n\t/**\n\t * Collapses an element.\n\t * The returned promise returns a boolean for whether the element was collapsed or not.\n\t */\n\tcollapse(element: any, recursive?: boolean): WinJS.Promise;\n\n\t/**\n\t * Collapses several elements.\n\t * Provide no arguments and it will recursively collapse all elements in the tree\n\t * The returned promise returns a boolean for whether the elements were collapsed or not.\n\t */\n\tcollapseAll(elements?: any[], recursive?: boolean): WinJS.Promise;\n\n\t/**\n\t * Toggles an element's expansion state.\n\t */\n\ttoggleExpansion(element: any): WinJS.Promise;\n\n\t/**\n\t * Toggles several element's expansion state.\n\t */\n\ttoggleExpansionAll(elements: any[]): WinJS.Promise;\n\n\t/**\n\t * Returns whether an element is expanded or not.\n\t */\n\tisExpanded(element: any): boolean;\n\n\t/**\n\t * Returns a list of the currently expanded elements.\n\t */\n\tgetExpandedElements(): any[];\n\n\t/**\n\t * Reveals an element in the tree. The relativeTop is a value between 0 and 1. The closer to 0 the more the\n\t * element will scroll up to the top.\n\t */\n\treveal(element: any, relativeTop?: number): WinJS.Promise;\n\n\t/**\n\t * Returns the relative top position of any given element, if visible.\n\t * If not visible, returns a negative number or a number > 1.\n\t * Useful when calling `reveal(element, relativeTop)`.\n\t */\n\tgetRelativeTop(element: any): number;\n\n\t/**\n\t * Returns a number between 0 and 1 representing how much the tree is scroll down. 0 means all the way\n\t * to the top; 1 means all the way down.\n\t */\n\tgetScrollPosition(): number;\n\n\t/**\n\t * Sets the scroll position with a number between 0 and 1 representing how much the tree is scroll down. 0 means all the way\n\t * to the top; 1 means all the way down.\n\t */\n\tsetScrollPosition(pos: number): void;\n\n\t/**\n\t * Returns the total height of the tree's content.\n\t */\n\tgetContentHeight(): number;\n\n\t/**\n\t * Sets the tree's highlight to be the given element.\n\t * Provide no arguments and it clears the tree's highlight.\n\t */\n\tsetHighlight(element?: any, eventPayload?: any): void;\n\n\t/**\n\t * Returns the currently highlighted element.\n\t */\n\tgetHighlight(includeHidden?: boolean): any;\n\n\t/**\n\t * Returns whether an element is highlighted or not.\n\t */\n\tisHighlighted(element: any): boolean;\n\n\t/**\n\t * Clears the highlight.\n\t */\n\tclearHighlight(eventPayload?: any): void;\n\n\t/**\n\t * Selects an element.\n\t */\n\tselect(element: any, eventPayload?: any): void;\n\n\t/**\n\t * Selects a range of elements.\n\t */\n\tselectRange(fromElement: any, toElement: any, eventPayload?: any): void;\n\n\t/**\n\t * Deselects a range of elements.\n\t */\n\tdeselectRange(fromElement: any, toElement: any, eventPayload?: any): void;\n\n\t/**\n\t * Selects several elements.\n\t */\n\tselectAll(elements: any[], eventPayload?: any): void;\n\n\t/**\n\t * Deselects an element.\n\t */\n\tdeselect(element: any, eventPayload?: any): void;\n\n\t/**\n\t * Deselects several elements.\n\t */\n\tdeselectAll(elements: any[], eventPayload?: any): void;\n\n\t/**\n\t * Replaces the current selection with the given elements.\n\t */\n\tsetSelection(elements: any[], eventPayload?: any): void;\n\n\t/**\n\t * Toggles the element's selection.\n\t */\n\ttoggleSelection(element: any, eventPayload?: any): void;\n\n\t/**\n\t * Returns the currently selected elements.\n\t */\n\tgetSelection(includeHidden?: boolean): any[];\n\n\t/**\n\t * Returns whether an element is selected or not.\n\t */\n\tisSelected(element: any): boolean;\n\n\t/**\n\t * Selects the next `count`-nth element, in visible order.\n\t */\n\tselectNext(count?: number, clearSelection?: boolean, eventPayload?: any): void;\n\n\t/**\n\t * Selects the previous `count`-nth element, in visible order.\n\t */\n\tselectPrevious(count?: number, clearSelection?: boolean, eventPayload?: any): void;\n\n\t/**\n\t * Selects the currently selected element's parent.\n\t */\n\tselectParent(clearSelection?: boolean, eventPayload?: any): void;\n\n\t/**\n\t * Clears the selection.\n\t */\n\tclearSelection(eventPayload?: any): void;\n\n\t/**\n\t * Sets the focused element.\n\t */\n\tsetFocus(element?: any, eventPayload?: any): void;\n\n\t/**\n\t * Returns whether an element is focused or not.\n\t */\n\tisFocused(element: any): boolean;\n\n\t/**\n\t * Returns focused element.\n\t */\n\tgetFocus(includeHidden?: boolean): any;\n\n\t/**\n\t * Focuses the next `count`-nth element, in visible order.\n\t */\n\tfocusNext(count?: number, eventPayload?: any): void;\n\n\t/**\n\t * Focuses the previous `count`-nth element, in visible order.\n\t */\n\tfocusPrevious(count?: number, eventPayload?: any): void;\n\n\t/**\n\t * Focuses the currently focused element's parent.\n\t */\n\tfocusParent(eventPayload?: any): void;\n\n\t/**\n\t * Focuses the first child of the currently focused element.\n\t */\n\tfocusFirstChild(eventPayload?: any): void;\n\n\t/**\n\t * Focuses the second element, in visible order. Will focus the first\n\t * child from the provided element's parent if any.\n\t */\n\tfocusFirst(eventPayload?: any, from?: any): void;\n\n\t/**\n\t * Focuses the nth element, in visible order.\n\t */\n\tfocusNth(index: number, eventPayload?: any): void;\n\n\t/**\n\t * Focuses the last element, in visible order. Will focus the last\n\t * child from the provided element's parent if any.\n\t */\n\tfocusLast(eventPayload?: any, from?: any): void;\n\n\t/**\n\t * Focuses the element at the end of the next page, in visible order.\n\t */\n\tfocusNextPage(eventPayload?: any): void;\n\n\t/**\n\t * Focuses the element at the beginning of the previous page, in visible order.\n\t */\n\tfocusPreviousPage(eventPayload?: any): void;\n\n\t/**\n\t * Clears the focus.\n\t */\n\tclearFocus(eventPayload?: any): void;\n\n\t/**\n\t * Adds the trait to elements.\n\t */\n\taddTraits(trait: string, elements: any[]): void;\n\n\t/**\n\t * Removes the trait from elements.\n\t */\n\tremoveTraits(trait: string, elements: any[]): void;\n\n\t/**\n\t * Toggles the element's trait.\n\t */\n\ttoggleTrait(trait: string, element: any): void;\n\n\t/**\n\t * Returns whether the element has the trait or not.\n\t */\n\thasTrait(trait: string, element: any): boolean;\n\n\t/**\n\t * Returns a navigator which allows to discover the visible and\n\t * expanded elements in the tree.\n\t */\n\tgetNavigator(fromElement?: any, subTreeOnly?: boolean): INavigator;\n\n\t/**\n\t * Apply styles to the tree.\n\t */\n\tstyle(styles: ITreeStyles): void;\n\n\t/**\n\t * Disposes the tree\n\t */\n\tdispose(): void;\n}\n\nexport interface IDataSource {\n\n\t/**\n\t * Returns the unique identifier of the given element.\n\t * No more than one element may use a given identifier.\n\t */\n\tgetId(tree: ITree, element: any): string;\n\n\t/**\n\t * Returns a boolean value indicating whether the element has children.\n\t */\n\thasChildren(tree: ITree, element: any): boolean;\n\n\t/**\n\t * Returns the element's children as an array in a promise.\n\t */\n\tgetChildren(tree: ITree, element: any): WinJS.Promise;\n\n\t/**\n\t * Returns the element's parent in a promise.\n\t */\n\tgetParent(tree: ITree, element: any): WinJS.Promise;\n\n\t/**\n\t * Returns whether an element should be expanded when first added to the tree.\n\t */\n\tshouldAutoexpand?(tree: ITree, element: any): boolean;\n}\n\nexport interface IRenderer {\n\n\t/**\n\t * Returns the element's height in the tree, in pixels.\n\t */\n\tgetHeight(tree: ITree, element: any): number;\n\n\t/**\n\t * Returns a template ID for a given element. This will be used as an identifier\n\t * for the next 3 methods.\n\t */\n\tgetTemplateId(tree: ITree, element: any): string;\n\n\t/**\n\t * Renders the template in a DOM element. This method should render all the DOM\n\t * structure for an hypothetical element leaving its contents blank. It should\n\t * return an object bag which will be passed along to `renderElement` and used\n\t * to fill in those blanks.\n\t *\n\t * You should do all DOM creating and object allocation in this method. It\n\t * will be called only a few times.\n\t */\n\trenderTemplate(tree: ITree, templateId: string, container: HTMLElement): any;\n\n\t/**\n\t * Renders an element, given an object bag returned by `renderTemplate`.\n\t * This method should do as little as possible and ideally it should only fill\n\t * in the blanks left by `renderTemplate`.\n\t *\n\t * Try to make this method do as little possible, since it will be called very\n\t * often.\n\t */\n\trenderElement(tree: ITree, element: any, templateId: string, templateData: any): void;\n\n\t/**\n\t * Disposes a template that was once rendered.\n\t */\n\tdisposeTemplate(tree: ITree, templateId: string, templateData: any): void;\n}\n\nexport interface IAccessibilityProvider {\n\n\t/**\n\t * Given an element in the tree, return the ARIA label that should be associated with the\n\t * item. This helps screen readers to provide a meaningful label for the currently focused\n\t * tree element.\n\t *\n\t * Returning null will not disable ARIA for the element. Instead it is up to the screen reader\n\t * to compute a meaningful label based on the contents of the element in the DOM\n\t *\n\t * See also: https://www.w3.org/TR/wai-aria/states_and_properties#aria-label\n\t */\n\tgetAriaLabel(tree: ITree, element: any): string;\n\n\t/**\n\t * Given an element in the tree return its aria-posinset. Should be between 1 and aria-setsize\n\t * https://www.w3.org/TR/wai-aria/states_and_properties#aria-posinset\n\t */\n\tgetPosInSet?(tree: ITree, element: any): string;\n\n\t/**\n\t * Return the aria-setsize of the tree.\n\t * https://www.w3.org/TR/wai-aria/states_and_properties#aria-setsize\n\t */\n\tgetSetSize?(): string;\n}\n\nexport /* abstract */ class ContextMenuEvent {\n\n\tprivate _posx: number;\n\tprivate _posy: number;\n\tprivate _target: HTMLElement;\n\n\tconstructor(posx: number, posy: number, target: HTMLElement) {\n\t\tthis._posx = posx;\n\t\tthis._posy = posy;\n\t\tthis._target = target;\n\t}\n\n\tpublic preventDefault(): void {\n\t\t// no-op\n\t}\n\n\tpublic stopPropagation(): void {\n\t\t// no-op\n\t}\n\n\tpublic get posx(): number {\n\t\treturn this._posx;\n\t}\n\n\tpublic get posy(): number {\n\t\treturn this._posy;\n\t}\n\n\tpublic get target(): HTMLElement {\n\t\treturn this._target;\n\t}\n}\n\nexport class MouseContextMenuEvent extends ContextMenuEvent {\n\n\tprivate originalEvent: Mouse.IMouseEvent;\n\n\tconstructor(originalEvent: Mouse.IMouseEvent) {\n\t\tsuper(originalEvent.posx, originalEvent.posy, originalEvent.target);\n\t\tthis.originalEvent = originalEvent;\n\t}\n\n\tpublic preventDefault(): void {\n\t\tthis.originalEvent.preventDefault();\n\t}\n\n\tpublic stopPropagation(): void {\n\t\tthis.originalEvent.stopPropagation();\n\t}\n}\n\nexport class KeyboardContextMenuEvent extends ContextMenuEvent {\n\n\tprivate originalEvent: Keyboard.IKeyboardEvent;\n\n\tconstructor(posx: number, posy: number, originalEvent: Keyboard.IKeyboardEvent) {\n\t\tsuper(posx, posy, originalEvent.target);\n\t\tthis.originalEvent = originalEvent;\n\t}\n\n\tpublic preventDefault(): void {\n\t\tthis.originalEvent.preventDefault();\n\t}\n\n\tpublic stopPropagation(): void {\n\t\tthis.originalEvent.stopPropagation();\n\t}\n}\n\nexport interface IController {\n\n\t/**\n\t * Called when an element is clicked.\n\t */\n\tonClick(tree: ITree, element: any, event: Mouse.IMouseEvent): boolean;\n\n\t/**\n\t * Called when an element is requested for a context menu.\n\t */\n\tonContextMenu(tree: ITree, element: any, event: ContextMenuEvent): boolean;\n\n\t/**\n\t * Called when an element is tapped.\n\t */\n\tonTap(tree: ITree, element: any, event: Touch.GestureEvent): boolean;\n\n\t/**\n\t * Called when a key is pressed down while selecting elements.\n\t */\n\tonKeyDown(tree: ITree, event: Keyboard.IKeyboardEvent): boolean;\n\n\t/**\n\t * Called when a key is released while selecting elements.\n\t */\n\tonKeyUp(tree: ITree, event: Keyboard.IKeyboardEvent): boolean;\n\n\t/**\n\t * Called when a mouse button is pressed down on an element.\n\t */\n\tonMouseDown?(tree: ITree, element: any, event: Mouse.IMouseEvent): boolean;\n\n\t/**\n\t * Called when a mouse button goes up on an element.\n\t */\n\tonMouseUp?(tree: ITree, element: any, event: Mouse.IMouseEvent): boolean;\n}\n\nexport enum DragOverEffect {\n\tCOPY,\n\tMOVE\n}\n\nexport enum DragOverBubble {\n\tBUBBLE_DOWN,\n\tBUBBLE_UP\n}\n\nexport interface IDragOverReaction {\n\taccept: boolean;\n\teffect?: DragOverEffect;\n\tbubble?: DragOverBubble;\n\tautoExpand?: boolean;\n}\n\nexport const DRAG_OVER_REJECT: IDragOverReaction = { accept: false };\nexport const DRAG_OVER_ACCEPT: IDragOverReaction = { accept: true };\nexport const DRAG_OVER_ACCEPT_BUBBLE_UP: IDragOverReaction = { accept: true, bubble: DragOverBubble.BUBBLE_UP };\nexport const DRAG_OVER_ACCEPT_BUBBLE_DOWN = (autoExpand = false) => ({ accept: true, bubble: DragOverBubble.BUBBLE_DOWN, autoExpand });\nexport const DRAG_OVER_ACCEPT_BUBBLE_UP_COPY: IDragOverReaction = { accept: true, bubble: DragOverBubble.BUBBLE_UP, effect: DragOverEffect.COPY };\nexport const DRAG_OVER_ACCEPT_BUBBLE_DOWN_COPY = (autoExpand = false) => ({ accept: true, bubble: DragOverBubble.BUBBLE_DOWN, effect: DragOverEffect.COPY, autoExpand });\n\nexport interface IDragAndDropData {\n\tupdate(event: Mouse.DragMouseEvent): void;\n\tgetData(): any;\n}\n\nexport interface IDragAndDrop {\n\n\t/**\n\t * Returns a uri if the given element should be allowed to drag.\n\t * Returns null, otherwise.\n\t */\n\tgetDragURI(tree: ITree, element: any): string;\n\n\t/**\n\t * Returns a label to display when dragging the element.\n\t */\n\tgetDragLabel?(tree: ITree, elements: any[]): string;\n\n\t/**\n\t * Sent when the drag operation is starting.\n\t */\n\tonDragStart(tree: ITree, data: IDragAndDropData, originalEvent: Mouse.DragMouseEvent): void;\n\n\t/**\n\t * Returns a DragOverReaction indicating whether sources can be\n\t * dropped into target or some parent of the target.\n\t */\n\tonDragOver(tree: ITree, data: IDragAndDropData, targetElement: any, originalEvent: Mouse.DragMouseEvent): IDragOverReaction;\n\n\t/**\n\t * Handles the action of dropping sources into target.\n\t */\n\tdrop(tree: ITree, data: IDragAndDropData, targetElement: any, originalEvent: Mouse.DragMouseEvent): void;\n}\n\nexport interface IFilter {\n\n\t/**\n\t * Returns whether the given element should be visible.\n\t */\n\tisVisible(tree: ITree, element: any): boolean;\n}\n\nexport interface IElementCallback {\n\t(tree: ITree, element: any): void;\n}\n\nexport type ICallback = () => void;\n\nexport interface ISorter {\n\n\t/**\n\t * Compare two elements in the viewer to define the sorting order.\n\t */\n\tcompare(tree: ITree, element: any, otherElement: any): number;\n}\n\n// Events\n\nexport interface ISelectionEvent {\n\tselection: any[];\n\tpayload?: any;\n}\n\nexport interface IFocusEvent {\n\tfocus: any;\n\tpayload?: any;\n}\n\nexport interface IHighlightEvent {\n\thighlight: any;\n\tpayload?: any;\n}\n\n// Options\n\nexport interface ITreeConfiguration {\n\tdataSource: IDataSource;\n\trenderer?: IRenderer;\n\tcontroller?: IController;\n\tdnd?: IDragAndDrop;\n\tfilter?: IFilter;\n\tsorter?: ISorter;\n\taccessibilityProvider?: IAccessibilityProvider;\n}\n\nexport interface ITreeOptions extends ITreeStyles {\n\ttwistiePixels?: number;\n\tshowTwistie?: boolean;\n\tindentPixels?: number;\n\tverticalScrollMode?: ScrollbarVisibility;\n\talwaysFocused?: boolean;\n\tautoExpandSingleChildren?: boolean;\n\tuseShadows?: boolean;\n\tpaddingOnRow?: boolean;\n\tariaLabel?: string;\n\tkeyboardSupport?: boolean;\n}\n\nexport interface ITreeStyles {\n\tlistFocusBackground?: Color;\n\tlistFocusForeground?: Color;\n\tlistActiveSelectionBackground?: Color;\n\tlistActiveSelectionForeground?: Color;\n\tlistFocusAndSelectionBackground?: Color;\n\tlistFocusAndSelectionForeground?: Color;\n\tlistInactiveSelectionBackground?: Color;\n\tlistInactiveSelectionForeground?: Color;\n\tlistHoverBackground?: Color;\n\tlistHoverForeground?: Color;\n\tlistDropBackground?: Color;\n\tlistFocusOutline?: Color;\n}\n\nexport interface ITreeContext extends ITreeConfiguration {\n\ttree: ITree;\n\toptions: ITreeOptions;\n}\n\nexport interface IActionProvider {\n\n\t/**\n\t * Returns whether or not the element has actions. These show up in place right to the element in the tree.\n\t */\n\thasActions(tree: ITree, element: any): boolean;\n\n\t/**\n\t * Returns a promise of an array with the actions of the element that should show up in place right to the element in the tree.\n\t */\n\tgetActions(tree: ITree, element: any): WinJS.TPromise;\n\n\t/**\n\t * Returns whether or not the element has secondary actions. These show up once the user has expanded the element's action bar.\n\t */\n\thasSecondaryActions(tree: ITree, element: any): boolean;\n\n\t/**\n\t * Returns a promise of an array with the secondary actions of the element that should show up once the user has expanded the element's action bar.\n\t */\n\tgetSecondaryActions(tree: ITree, element: any): WinJS.TPromise;\n\n\t/**\n\t * Returns an action item to render an action.\n\t */\n\tgetActionItem(tree: ITree, element: any, action: IAction): IActionItem;\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'use strict';\n\nimport _ = require('vs/base/parts/tree/browser/tree');\nimport Mouse = require('vs/base/browser/mouseEvent');\n\nexport class ElementsDragAndDropData implements _.IDragAndDropData {\n\n\tprivate elements: any[];\n\n\tconstructor(elements: any[]) {\n\t\tthis.elements = elements;\n\t}\n\n\tpublic update(event: Mouse.DragMouseEvent): void {\n\t\t// no-op\n\t}\n\n\tpublic getData(): any {\n\t\treturn this.elements;\n\t}\n}\n\nexport class ExternalElementsDragAndDropData implements _.IDragAndDropData {\n\n\tprivate elements: any[];\n\n\tconstructor(elements: any[]) {\n\t\tthis.elements = elements;\n\t}\n\n\tpublic update(event: Mouse.DragMouseEvent): void {\n\t\t// no-op\n\t}\n\n\tpublic getData(): any {\n\t\treturn this.elements;\n\t}\n}\n\nexport class DesktopDragAndDropData implements _.IDragAndDropData {\n\n\tprivate types: any[];\n\tprivate files: any[];\n\n\tconstructor() {\n\t\tthis.types = [];\n\t\tthis.files = [];\n\t}\n\n\tpublic update(event: Mouse.DragMouseEvent): void {\n\t\tif (event.dataTransfer.types) {\n\t\t\tthis.types = [];\n\t\t\tArray.prototype.push.apply(this.types, event.dataTransfer.types);\n\t\t}\n\n\t\tif (event.dataTransfer.files) {\n\t\t\tthis.files = [];\n\t\t\tArray.prototype.push.apply(this.files, event.dataTransfer.files);\n\n\t\t\tthis.files = this.files.filter(f => f.size || f.type);\n\t\t}\n\t}\n\n\tpublic getData(): any {\n\t\treturn {\n\t\t\ttypes: this.types,\n\t\t\tfiles: this.files\n\t\t};\n\t}\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'use strict';\n\nimport Assert = require('vs/base/common/assert');\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { IDisposable, combinedDisposable } from 'vs/base/common/lifecycle';\nimport arrays = require('vs/base/common/arrays');\nimport { INavigator } from 'vs/base/common/iterator';\nimport Events = require('vs/base/common/eventEmitter');\nimport WinJS = require('vs/base/common/winjs.base');\nimport _ = require('./tree');\n\ninterface IMap { [id: string]: T; }\ninterface IItemMap extends IMap { }\ninterface ITraitMap extends IMap { }\n\nexport class LockData extends Events.EventEmitter {\n\n\tprivate _item: Item;\n\n\tconstructor(item: Item) {\n\t\tsuper();\n\n\t\tthis._item = item;\n\t}\n\n\tpublic get item(): Item {\n\t\treturn this._item;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.emit('unlock');\n\t\tsuper.dispose();\n\t}\n}\n\nexport class Lock {\n\n\t/* When refreshing tree items, the tree's structured can be altered, by\n\t\tinserting and removing sub-items. This lock helps to manage several\n\t\tpossibly-structure-changing calls.\n\n\t\tAPI-wise, there are two possibly-structure-changing: refresh(...),\n\t\texpand(...) and collapse(...). All these calls must call Lock#run(...).\n\n\t\tAny call to Lock#run(...) needs to provide the affecting item and a\n\t\tcallback to execute when unlocked. It must also return a promise\n\t\twhich fulfills once the operation ends. Once it is called, there\n\t\tare three possibilities:\n\n\t\t- Nothing is currently running. The affecting item is remembered, and\n\t\tthe callback is executed.\n\n\t\t- Or, there are on-going operations. There are two outcomes:\n\n\t\t\t- The affecting item intersects with any other affecting items\n\t\t\tof on-going run calls. In such a case, the given callback should\n\t\t\tbe executed only when the on-going one completes.\n\n\t\t\t- Or, it doesn't. In such a case, both operations can be run in\n\t\t\tparallel.\n\n\t\tNote: two items A and B intersect if A is a descendant of B, or\n\t\tvice-versa.\n\t*/\n\n\tprivate locks: { [id: string]: LockData; };\n\n\tconstructor() {\n\t\tthis.locks = Object.create({});\n\t}\n\n\tpublic isLocked(item: Item): boolean {\n\t\treturn !!this.locks[item.id];\n\t}\n\n\tpublic run(item: Item, fn: () => WinJS.Promise): WinJS.Promise {\n\t\tvar lock = this.getLock(item);\n\n\t\tif (lock) {\n\t\t\tvar unbindListener: IDisposable;\n\n\t\t\treturn new WinJS.Promise((c, e) => {\n\t\t\t\tunbindListener = lock.addOneTimeListener('unlock', () => {\n\t\t\t\t\treturn this.run(item, fn).then(c, e);\n\t\t\t\t});\n\t\t\t}, () => { unbindListener.dispose(); });\n\t\t}\n\n\t\tvar result: WinJS.Promise;\n\n\t\treturn new WinJS.Promise((c, e) => {\n\n\t\t\tif (item.isDisposed()) {\n\t\t\t\treturn e(new Error('Item is disposed.'));\n\t\t\t}\n\n\t\t\tvar lock = this.locks[item.id] = new LockData(item);\n\n\t\t\tresult = fn().then((r) => {\n\t\t\t\tdelete this.locks[item.id];\n\t\t\t\tlock.dispose();\n\n\t\t\t\treturn r;\n\t\t\t}).then(c, e);\n\n\t\t\treturn result;\n\t\t}, () => result.cancel());\n\t}\n\n\tprivate getLock(item: Item): LockData {\n\t\tvar key: string;\n\n\t\tfor (key in this.locks) {\n\t\t\tvar lock = this.locks[key];\n\n\t\t\tif (item.intersects(lock.item)) {\n\t\t\t\treturn lock;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n}\n\nexport class ItemRegistry extends Events.EventEmitter {\n\n\tprivate _isDisposed = false;\n\tprivate items: IMap<{ item: Item; disposable: IDisposable; }>;\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.items = {};\n\t}\n\n\tpublic register(item: Item): void {\n\t\tAssert.ok(!this.isRegistered(item.id), 'item already registered: ' + item.id);\n\t\tthis.items[item.id] = { item, disposable: this.addEmitter(item) };\n\t}\n\n\tpublic deregister(item: Item): void {\n\t\tAssert.ok(this.isRegistered(item.id), 'item not registered: ' + item.id);\n\t\tthis.items[item.id].disposable.dispose();\n\t\tdelete this.items[item.id];\n\t}\n\n\tpublic isRegistered(id: string): boolean {\n\t\treturn this.items.hasOwnProperty(id);\n\t}\n\n\tpublic getItem(id: string): Item {\n\t\tconst result = this.items[id];\n\t\treturn result ? result.item : null;\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t\tthis.items = null;\n\t\tthis._isDisposed = true;\n\t}\n\n\tpublic isDisposed(): boolean {\n\t\treturn this._isDisposed;\n\t}\n}\n\nexport interface IBaseItemEvent {\n\titem: Item;\n}\n\nexport interface IItemRefreshEvent extends IBaseItemEvent { }\nexport interface IItemExpandEvent extends IBaseItemEvent { }\nexport interface IItemCollapseEvent extends IBaseItemEvent { }\nexport interface IItemDisposeEvent extends IBaseItemEvent { }\n\nexport interface IItemTraitEvent extends IBaseItemEvent {\n\ttrait: string;\n}\n\nexport interface IItemRevealEvent extends IBaseItemEvent {\n\trelativeTop: number;\n}\n\nexport interface IItemChildrenRefreshEvent extends IBaseItemEvent {\n\tisNested: boolean;\n}\n\nexport class Item extends Events.EventEmitter {\n\n\tprivate registry: ItemRegistry;\n\tprivate context: _.ITreeContext;\n\tprivate element: any;\n\tprivate lock: Lock;\n\n\tpublic id: string;\n\n\tprivate needsChildrenRefresh: boolean;\n\tprivate doesHaveChildren: boolean;\n\n\tpublic parent: Item;\n\tpublic previous: Item;\n\tpublic next: Item;\n\tpublic firstChild: Item;\n\tpublic lastChild: Item;\n\n\tprivate userContent: HTMLElement;\n\n\tprivate height: number;\n\tprivate depth: number;\n\n\tprivate visible: boolean;\n\tprivate expanded: boolean;\n\n\tprivate traits: { [trait: string]: boolean; };\n\n\tprivate _isDisposed: boolean;\n\n\tconstructor(id: string, registry: ItemRegistry, context: _.ITreeContext, lock: Lock, element: any) {\n\t\tsuper();\n\n\t\tthis.registry = registry;\n\t\tthis.context = context;\n\t\tthis.lock = lock;\n\t\tthis.element = element;\n\n\t\tthis.id = id;\n\t\tthis.registry.register(this);\n\n\t\tthis.doesHaveChildren = this.context.dataSource.hasChildren(this.context.tree, this.element);\n\t\tthis.needsChildrenRefresh = true;\n\n\t\tthis.parent = null;\n\t\tthis.previous = null;\n\t\tthis.next = null;\n\t\tthis.firstChild = null;\n\t\tthis.lastChild = null;\n\n\t\tthis.userContent = null;\n\t\tthis.traits = {};\n\t\tthis.depth = 0;\n\t\tthis.expanded = this.context.dataSource.shouldAutoexpand && this.context.dataSource.shouldAutoexpand(this.context.tree, element);\n\n\t\tthis.emit('item:create', { item: this });\n\n\t\tthis.visible = this._isVisible();\n\t\tthis.height = this._getHeight();\n\n\t\tthis._isDisposed = false;\n\t}\n\n\tpublic getElement(): any {\n\t\treturn this.element;\n\t}\n\n\tpublic hasChildren(): boolean {\n\t\treturn this.doesHaveChildren;\n\t}\n\n\tpublic getDepth(): number {\n\t\treturn this.depth;\n\t}\n\n\tpublic isVisible(): boolean {\n\t\treturn this.visible;\n\t}\n\n\tpublic setVisible(value: boolean): void {\n\t\tthis.visible = value;\n\t}\n\n\tpublic isExpanded(): boolean {\n\t\treturn this.expanded;\n\t}\n\n\t/* protected */ public _setExpanded(value: boolean): void {\n\t\tthis.expanded = value;\n\t}\n\n\tpublic reveal(relativeTop: number = null): void {\n\t\tvar eventData: IItemRevealEvent = { item: this, relativeTop: relativeTop };\n\t\tthis.emit('item:reveal', eventData);\n\t}\n\n\tpublic expand(): WinJS.Promise {\n\t\tif (this.isExpanded() || !this.doesHaveChildren || this.lock.isLocked(this)) {\n\t\t\treturn WinJS.TPromise.as(false);\n\t\t}\n\n\t\tvar result = this.lock.run(this, () => {\n\t\t\tvar eventData: IItemExpandEvent = { item: this };\n\t\t\tvar result: WinJS.Promise;\n\t\t\tthis.emit('item:expanding', eventData);\n\n\t\t\tif (this.needsChildrenRefresh) {\n\t\t\t\tresult = this.refreshChildren(false, true, true);\n\t\t\t} else {\n\t\t\t\tresult = WinJS.TPromise.as(null);\n\t\t\t}\n\n\t\t\treturn result.then(() => {\n\t\t\t\tthis._setExpanded(true);\n\t\t\t\tthis.emit('item:expanded', eventData);\n\t\t\t\treturn true;\n\t\t\t});\n\t\t});\n\n\t\treturn result.then((r) => {\n\t\t\tif (this.isDisposed()) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Auto expand single child folders\n\t\t\tif (this.context.options.autoExpandSingleChildren && r && this.firstChild !== null && this.firstChild === this.lastChild && this.firstChild.isVisible()) {\n\t\t\t\treturn this.firstChild.expand().then(() => { return true; });\n\t\t\t}\n\n\t\t\treturn r;\n\t\t});\n\t}\n\n\tpublic collapse(recursive: boolean = false): WinJS.Promise {\n\t\tif (recursive) {\n\t\t\tvar collapseChildrenPromise = WinJS.TPromise.as(null);\n\t\t\tthis.forEachChild((child) => {\n\t\t\t\tcollapseChildrenPromise = collapseChildrenPromise.then(() => child.collapse(true));\n\t\t\t});\n\t\t\treturn collapseChildrenPromise.then(() => {\n\t\t\t\treturn this.collapse(false);\n\t\t\t});\n\t\t} else {\n\t\t\tif (!this.isExpanded() || this.lock.isLocked(this)) {\n\t\t\t\treturn WinJS.TPromise.as(false);\n\t\t\t}\n\n\t\t\treturn this.lock.run(this, () => {\n\t\t\t\tvar eventData: IItemCollapseEvent = { item: this };\n\t\t\t\tthis.emit('item:collapsing', eventData);\n\t\t\t\tthis._setExpanded(false);\n\t\t\t\tthis.emit('item:collapsed', eventData);\n\n\t\t\t\treturn WinJS.TPromise.as(true);\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic addTrait(trait: string): void {\n\t\tvar eventData: IItemTraitEvent = { item: this, trait: trait };\n\t\tthis.traits[trait] = true;\n\t\tthis.emit('item:addTrait', eventData);\n\t}\n\n\tpublic removeTrait(trait: string): void {\n\t\tvar eventData: IItemTraitEvent = { item: this, trait: trait };\n\t\tdelete this.traits[trait];\n\t\tthis.emit('item:removeTrait', eventData);\n\t}\n\n\tpublic hasTrait(trait: string): boolean {\n\t\treturn this.traits[trait] || false;\n\t}\n\n\tpublic getAllTraits(): string[] {\n\t\tvar result: string[] = [];\n\t\tvar trait: string;\n\t\tfor (trait in this.traits) {\n\t\t\tif (this.traits.hasOwnProperty(trait) && this.traits[trait]) {\n\t\t\t\tresult.push(trait);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic getHeight(): number {\n\t\treturn this.height;\n\t}\n\n\tprivate refreshChildren(recursive: boolean, safe: boolean = false, force: boolean = false): WinJS.Promise {\n\t\tif (!force && !this.isExpanded()) {\n\t\t\tthis.needsChildrenRefresh = true;\n\t\t\treturn WinJS.TPromise.as(this);\n\t\t}\n\n\t\tthis.needsChildrenRefresh = false;\n\n\t\tvar doRefresh = () => {\n\t\t\tvar eventData: IItemChildrenRefreshEvent = { item: this, isNested: safe };\n\t\t\tthis.emit('item:childrenRefreshing', eventData);\n\n\t\t\tvar childrenPromise: WinJS.Promise;\n\t\t\tif (this.doesHaveChildren) {\n\t\t\t\tchildrenPromise = this.context.dataSource.getChildren(this.context.tree, this.element);\n\t\t\t} else {\n\t\t\t\tchildrenPromise = WinJS.TPromise.as([]);\n\t\t\t}\n\n\t\t\tconst result = childrenPromise.then((elements: any[]) => {\n\t\t\t\tif (this.isDisposed() || this.registry.isDisposed()) {\n\t\t\t\t\treturn WinJS.TPromise.as(null);\n\t\t\t\t}\n\n\t\t\t\telements = !elements ? [] : elements.slice(0);\n\t\t\t\telements = this.sort(elements);\n\n\t\t\t\tvar staleItems: IItemMap = {};\n\t\t\t\twhile (this.firstChild !== null) {\n\t\t\t\t\tstaleItems[this.firstChild.id] = this.firstChild;\n\t\t\t\t\tthis.removeChild(this.firstChild);\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, len = elements.length; i < len; i++) {\n\t\t\t\t\tvar element = elements[i];\n\t\t\t\t\tvar id = this.context.dataSource.getId(this.context.tree, element);\n\t\t\t\t\tvar item = staleItems[id] || new Item(id, this.registry, this.context, this.lock, element);\n\t\t\t\t\titem.element = element;\n\t\t\t\t\tif (recursive) {\n\t\t\t\t\t\titem.needsChildrenRefresh = recursive;\n\t\t\t\t\t}\n\t\t\t\t\tdelete staleItems[id];\n\t\t\t\t\tthis.addChild(item);\n\t\t\t\t}\n\n\t\t\t\tfor (var staleItemId in staleItems) {\n\t\t\t\t\tif (staleItems.hasOwnProperty(staleItemId)) {\n\t\t\t\t\t\tstaleItems[staleItemId].dispose();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (recursive) {\n\t\t\t\t\treturn WinJS.Promise.join(this.mapEachChild((child) => {\n\t\t\t\t\t\treturn child.doRefresh(recursive, true);\n\t\t\t\t\t}));\n\t\t\t\t} else {\n\t\t\t\t\treturn WinJS.TPromise.as(null);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn result\n\t\t\t\t.then(null, onUnexpectedError)\n\t\t\t\t.then(() => this.emit('item:childrenRefreshed', eventData));\n\t\t};\n\n\t\treturn safe ? doRefresh() : this.lock.run(this, doRefresh);\n\t}\n\n\tprivate doRefresh(recursive: boolean, safe: boolean = false): WinJS.Promise {\n\t\tvar eventData: IItemRefreshEvent = { item: this };\n\n\t\tthis.doesHaveChildren = this.context.dataSource.hasChildren(this.context.tree, this.element);\n\t\tthis.height = this._getHeight();\n\t\tthis.setVisible(this._isVisible());\n\n\t\tthis.emit('item:refresh', eventData);\n\n\t\treturn this.refreshChildren(recursive, safe);\n\t}\n\n\tpublic refresh(recursive: boolean): WinJS.Promise {\n\t\treturn this.doRefresh(recursive);\n\t}\n\n\tpublic getNavigator(): INavigator {\n\t\treturn new TreeNavigator(this);\n\t}\n\n\tpublic intersects(other: Item): boolean {\n\t\treturn this.isAncestorOf(other) || other.isAncestorOf(this);\n\t}\n\n\tpublic getHierarchy(): Item[] {\n\t\tvar result: Item[] = [];\n\t\tvar node: Item = this;\n\n\t\tdo {\n\t\t\tresult.push(node);\n\t\t\tnode = node.parent;\n\t\t} while (node);\n\n\t\tresult.reverse();\n\t\treturn result;\n\t}\n\n\tprivate isAncestorOf(item: Item): boolean {\n\t\twhile (item) {\n\t\t\tif (item.id === this.id) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\titem = item.parent;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate addChild(item: Item, afterItem: Item = this.lastChild): void {\n\t\tvar isEmpty = this.firstChild === null;\n\t\tvar atHead = afterItem === null;\n\t\tvar atTail = afterItem === this.lastChild;\n\n\t\tif (isEmpty) {\n\t\t\tthis.firstChild = this.lastChild = item;\n\t\t\titem.next = item.previous = null;\n\t\t} else if (atHead) {\n\t\t\tthis.firstChild.previous = item;\n\t\t\titem.next = this.firstChild;\n\t\t\titem.previous = null;\n\t\t\tthis.firstChild = item;\n\t\t} else if (atTail) {\n\t\t\tthis.lastChild.next = item;\n\t\t\titem.next = null;\n\t\t\titem.previous = this.lastChild;\n\t\t\tthis.lastChild = item;\n\t\t} else {\n\t\t\titem.previous = afterItem;\n\t\t\titem.next = afterItem.next;\n\t\t\tafterItem.next.previous = item;\n\t\t\tafterItem.next = item;\n\t\t}\n\n\t\titem.parent = this;\n\t\titem.depth = this.depth + 1;\n\t}\n\n\tprivate removeChild(item: Item): void {\n\t\tvar isFirstChild = this.firstChild === item;\n\t\tvar isLastChild = this.lastChild === item;\n\n\t\tif (isFirstChild && isLastChild) {\n\t\t\tthis.firstChild = this.lastChild = null;\n\t\t} else if (isFirstChild) {\n\t\t\titem.next.previous = null;\n\t\t\tthis.firstChild = item.next;\n\t\t} else if (isLastChild) {\n\t\t\titem.previous.next = null;\n\t\t\tthis.lastChild = item.previous;\n\t\t} else {\n\t\t\titem.next.previous = item.previous;\n\t\t\titem.previous.next = item.next;\n\t\t}\n\n\t\titem.parent = null;\n\t\titem.depth = null;\n\t}\n\n\tprivate forEachChild(fn: (child: Item) => void): void {\n\t\tvar child = this.firstChild, next: Item;\n\t\twhile (child) {\n\t\t\tnext = child.next;\n\t\t\tfn(child);\n\t\t\tchild = next;\n\t\t}\n\t}\n\n\tprivate mapEachChild(fn: (child: Item) => T): T[] {\n\t\tvar result = [];\n\t\tthis.forEachChild((child) => {\n\t\t\tresult.push(fn(child));\n\t\t});\n\t\treturn result;\n\t}\n\n\tprivate sort(elements: any[]): any[] {\n\t\tif (this.context.sorter) {\n\t\t\treturn elements.sort((element, otherElement) => {\n\t\t\t\treturn this.context.sorter.compare(this.context.tree, element, otherElement);\n\t\t\t});\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\t/* protected */ public _getHeight(): number {\n\t\treturn this.context.renderer.getHeight(this.context.tree, this.element);\n\t}\n\n\t/* protected */ public _isVisible(): boolean {\n\t\treturn this.context.filter.isVisible(this.context.tree, this.element);\n\t}\n\n\tpublic isDisposed(): boolean {\n\t\treturn this._isDisposed;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.forEachChild((child) => child.dispose());\n\n\t\tthis.parent = null;\n\t\tthis.previous = null;\n\t\tthis.next = null;\n\t\tthis.firstChild = null;\n\t\tthis.lastChild = null;\n\n\t\tvar eventData: IItemDisposeEvent = { item: this };\n\t\tthis.emit('item:dispose', eventData);\n\n\t\tthis.registry.deregister(this);\n\t\tsuper.dispose();\n\n\t\tthis._isDisposed = true;\n\t}\n}\n\nclass RootItem extends Item {\n\n\tconstructor(id: string, registry: ItemRegistry, context: _.ITreeContext, lock: Lock, element: any) {\n\t\tsuper(id, registry, context, lock, element);\n\t}\n\n\tpublic isVisible(): boolean {\n\t\treturn false;\n\t}\n\n\tpublic setVisible(value: boolean): void {\n\t\t// no-op\n\t}\n\n\tpublic isExpanded(): boolean {\n\t\treturn true;\n\t}\n\n\t/* protected */ public _setExpanded(value: boolean): void {\n\t\t// no-op\n\t}\n\n\tpublic render(): void {\n\t\t// no-op\n\t}\n\n\t/* protected */ public _getHeight(): number {\n\t\treturn 0;\n\t}\n\n\t/* protected */ public _isVisible(): boolean {\n\t\treturn false;\n\t}\n}\n\nexport class TreeNavigator implements INavigator {\n\n\tprivate start: Item;\n\tprivate item: Item;\n\n\tstatic lastDescendantOf(item: Item): Item {\n\t\tif (!item) {\n\t\t\treturn null;\n\t\t} else {\n\t\t\tif (!(item instanceof RootItem) && (!item.isVisible() || !item.isExpanded() || item.lastChild === null)) {\n\t\t\t\treturn item;\n\t\t\t} else {\n\t\t\t\treturn TreeNavigator.lastDescendantOf(item.lastChild);\n\t\t\t}\n\t\t}\n\t}\n\n\tconstructor(item: Item, subTreeOnly: boolean = true) {\n\t\tthis.item = item;\n\t\tthis.start = subTreeOnly ? item : null;\n\t}\n\n\tpublic current(): Item {\n\t\treturn this.item || null;\n\t}\n\n\tpublic next(): Item {\n\t\tif (this.item) {\n\t\t\tdo {\n\t\t\t\tif ((this.item instanceof RootItem || (this.item.isVisible() && this.item.isExpanded())) && this.item.firstChild) {\n\t\t\t\t\tthis.item = this.item.firstChild;\n\t\t\t\t} else if (this.item === this.start) {\n\t\t\t\t\tthis.item = null;\n\t\t\t\t} else {\n\t\t\t\t\t// select next brother, next uncle, next great-uncle, etc...\n\t\t\t\t\twhile (this.item && this.item !== this.start && !this.item.next) {\n\t\t\t\t\t\tthis.item = this.item.parent;\n\t\t\t\t\t}\n\t\t\t\t\tif (this.item === this.start) {\n\t\t\t\t\t\tthis.item = null;\n\t\t\t\t\t}\n\t\t\t\t\tthis.item = !this.item ? null : this.item.next;\n\t\t\t\t}\n\t\t\t} while (this.item && !this.item.isVisible());\n\t\t}\n\t\treturn this.item || null;\n\t}\n\n\tpublic previous(): Item {\n\t\tif (this.item) {\n\t\t\tdo {\n\t\t\t\tvar previous = TreeNavigator.lastDescendantOf(this.item.previous);\n\t\t\t\tif (previous) {\n\t\t\t\t\tthis.item = previous;\n\t\t\t\t} else if (this.item.parent && this.item.parent !== this.start && this.item.parent.isVisible()) {\n\t\t\t\t\tthis.item = this.item.parent;\n\t\t\t\t} else {\n\t\t\t\t\tthis.item = null;\n\t\t\t\t}\n\t\t\t} while (this.item && !this.item.isVisible());\n\t\t}\n\t\treturn this.item || null;\n\t}\n\n\tpublic parent(): Item {\n\t\tif (this.item) {\n\t\t\tvar parent = this.item.parent;\n\t\t\tif (parent && parent !== this.start && parent.isVisible()) {\n\t\t\t\tthis.item = parent;\n\t\t\t} else {\n\t\t\t\tthis.item = null;\n\t\t\t}\n\t\t}\n\t\treturn this.item || null;\n\t}\n\n\tpublic first(): Item {\n\t\tthis.item = this.start;\n\t\tthis.next();\n\t\treturn this.item || null;\n\t}\n\n\tpublic last(): Item {\n\t\treturn TreeNavigator.lastDescendantOf(this.start);\n\t}\n}\n\nfunction getRange(one: Item, other: Item): Item[] {\n\tvar oneHierarchy = one.getHierarchy();\n\tvar otherHierarchy = other.getHierarchy();\n\tvar length = arrays.commonPrefixLength(oneHierarchy, otherHierarchy);\n\tvar item = oneHierarchy[length - 1];\n\tvar nav = item.getNavigator();\n\n\tvar oneIndex: number = null;\n\tvar otherIndex: number = null;\n\n\tvar index = 0;\n\tvar result: Item[] = [];\n\n\twhile (item && (oneIndex === null || otherIndex === null)) {\n\t\tresult.push(item);\n\n\t\tif (item === one) {\n\t\t\toneIndex = index;\n\t\t}\n\t\tif (item === other) {\n\t\t\totherIndex = index;\n\t\t}\n\n\t\tindex++;\n\t\titem = nav.next();\n\t}\n\n\tif (oneIndex === null || otherIndex === null) {\n\t\treturn [];\n\t}\n\n\tvar min = Math.min(oneIndex, otherIndex);\n\tvar max = Math.max(oneIndex, otherIndex);\n\treturn result.slice(min, max + 1);\n}\n\nexport interface IBaseEvent {\n\titem: Item;\n}\n\nexport interface IInputEvent extends IBaseEvent { }\n\nexport interface IRefreshEvent extends IBaseEvent {\n\trecursive: boolean;\n}\n\nexport class TreeModel extends Events.EventEmitter {\n\n\tprivate context: _.ITreeContext;\n\tprivate lock: Lock;\n\tprivate input: Item;\n\tprivate registry: ItemRegistry;\n\tprivate registryDisposable: IDisposable;\n\tprivate traitsToItems: ITraitMap;\n\n\tconstructor(context: _.ITreeContext) {\n\t\tsuper();\n\n\t\tthis.context = context;\n\t\tthis.input = null;\n\t\tthis.traitsToItems = {};\n\t}\n\n\tpublic setInput(element: any): WinJS.Promise {\n\t\tvar eventData: IInputEvent = { item: this.input };\n\t\tthis.emit('clearingInput', eventData);\n\n\t\tthis.setSelection([]);\n\t\tthis.setFocus();\n\t\tthis.setHighlight();\n\n\t\tthis.lock = new Lock();\n\n\t\tif (this.input) {\n\t\t\tthis.input.dispose();\n\t\t}\n\n\t\tif (this.registry) {\n\t\t\tthis.registry.dispose();\n\t\t\tthis.registryDisposable.dispose();\n\t\t}\n\n\t\tthis.registry = new ItemRegistry();\n\n\t\tthis.registryDisposable = combinedDisposable([\n\t\t\tthis.addEmitter(this.registry),\n\t\t\tthis.registry.addListener('item:dispose', (event: IItemDisposeEvent) => {\n\t\t\t\tevent.item.getAllTraits()\n\t\t\t\t\t.forEach(trait => delete this.traitsToItems[trait][event.item.id]);\n\t\t\t})\n\t\t]);\n\n\t\tvar id = this.context.dataSource.getId(this.context.tree, element);\n\t\tthis.input = new RootItem(id, this.registry, this.context, this.lock, element);\n\t\teventData = { item: this.input };\n\t\tthis.emit('setInput', eventData);\n\t\treturn this.refresh(this.input);\n\t}\n\n\tpublic getInput(): any {\n\t\treturn this.input ? this.input.getElement() : null;\n\t}\n\n\tpublic refresh(element: any = null, recursive: boolean = true): WinJS.Promise {\n\t\tvar item = this.getItem(element);\n\n\t\tif (!item) {\n\t\t\treturn WinJS.TPromise.as(null);\n\t\t}\n\n\t\tvar eventData: IRefreshEvent = { item: item, recursive: recursive };\n\t\tthis.emit('refreshing', eventData);\n\t\treturn item.refresh(recursive).then(() => {\n\t\t\tthis.emit('refreshed', eventData);\n\t\t});\n\t}\n\n\tpublic expand(element: any): WinJS.Promise {\n\t\tvar item = this.getItem(element);\n\n\t\tif (!item) {\n\t\t\treturn WinJS.TPromise.as(false);\n\t\t}\n\n\t\treturn item.expand();\n\t}\n\n\tpublic expandAll(elements?: any[]): WinJS.Promise {\n\t\tif (!elements) {\n\t\t\telements = [];\n\n\t\t\tvar item: Item;\n\t\t\tvar nav = this.getNavigator();\n\n\t\t\twhile (item = nav.next()) {\n\t\t\t\telements.push(item);\n\t\t\t}\n\t\t}\n\n\t\tvar promises = [];\n\t\tfor (var i = 0, len = elements.length; i < len; i++) {\n\t\t\tpromises.push(this.expand(elements[i]));\n\t\t}\n\t\treturn WinJS.Promise.join(promises);\n\t}\n\n\tpublic collapse(element: any, recursive: boolean = false): WinJS.Promise {\n\t\tvar item = this.getItem(element);\n\n\t\tif (!item) {\n\t\t\treturn WinJS.TPromise.as(false);\n\t\t}\n\n\t\treturn item.collapse(recursive);\n\t}\n\n\tpublic collapseAll(elements: any[] = null, recursive: boolean = false): WinJS.Promise {\n\t\tif (!elements) {\n\t\t\telements = [this.input];\n\t\t\trecursive = true;\n\t\t}\n\t\tvar promises = [];\n\t\tfor (var i = 0, len = elements.length; i < len; i++) {\n\t\t\tpromises.push(this.collapse(elements[i], recursive));\n\t\t}\n\t\treturn WinJS.Promise.join(promises);\n\t}\n\n\tpublic toggleExpansion(element: any): WinJS.Promise {\n\t\treturn this.isExpanded(element) ? this.collapse(element) : this.expand(element);\n\t}\n\n\tpublic toggleExpansionAll(elements: any[]): WinJS.Promise {\n\t\tvar promises = [];\n\t\tfor (var i = 0, len = elements.length; i < len; i++) {\n\t\t\tpromises.push(this.toggleExpansion(elements[i]));\n\t\t}\n\t\treturn WinJS.Promise.join(promises);\n\t}\n\n\tpublic isExpanded(element: any): boolean {\n\t\tvar item = this.getItem(element);\n\n\t\tif (!item) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn item.isExpanded();\n\t}\n\n\tpublic getExpandedElements(): any[] {\n\t\tvar result: any[] = [];\n\t\tvar item: Item;\n\t\tvar nav = this.getNavigator();\n\n\t\twhile (item = nav.next()) {\n\t\t\tif (item.isExpanded()) {\n\t\t\t\tresult.push(item.getElement());\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic reveal(element: any, relativeTop: number = null): WinJS.Promise {\n\t\treturn this.resolveUnknownParentChain(element).then((chain: any[]) => {\n\t\t\tvar result = WinJS.TPromise.as(null);\n\n\t\t\tchain.forEach((e) => {\n\t\t\t\tresult = result.then(() => this.expand(e));\n\t\t\t});\n\n\t\t\treturn result;\n\t\t}).then(() => {\n\t\t\tvar item = this.getItem(element);\n\n\t\t\tif (item) {\n\t\t\t\treturn item.reveal(relativeTop);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate resolveUnknownParentChain(element: any): WinJS.Promise {\n\t\treturn this.context.dataSource.getParent(this.context.tree, element).then((parent) => {\n\t\t\tif (!parent) {\n\t\t\t\treturn WinJS.TPromise.as([]);\n\t\t\t}\n\n\t\t\treturn this.resolveUnknownParentChain(parent).then((result) => {\n\t\t\t\tresult.push(parent);\n\t\t\t\treturn result;\n\t\t\t});\n\t\t});\n\t}\n\n\tpublic setHighlight(element?: any, eventPayload?: any): void {\n\t\tthis.setTraits('highlighted', element ? [element] : []);\n\t\tvar eventData: _.IHighlightEvent = { highlight: this.getHighlight(), payload: eventPayload };\n\t\tthis.emit('highlight', eventData);\n\t}\n\n\tpublic getHighlight(includeHidden?: boolean): any {\n\t\tvar result = this.getElementsWithTrait('highlighted', includeHidden);\n\t\treturn result.length === 0 ? null : result[0];\n\t}\n\n\tpublic isHighlighted(element: any): boolean {\n\t\tvar item = this.getItem(element);\n\n\t\tif (!item) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn item.hasTrait('highlighted');\n\t}\n\n\tpublic select(element: any, eventPayload?: any): void {\n\t\tthis.selectAll([element], eventPayload);\n\t}\n\n\tpublic selectRange(fromElement: any, toElement: any, eventPayload?: any): void {\n\t\tvar fromItem = this.getItem(fromElement);\n\t\tvar toItem = this.getItem(toElement);\n\n\t\tif (!fromItem || !toItem) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.selectAll(getRange(fromItem, toItem), eventPayload);\n\t}\n\n\tpublic deselectRange(fromElement: any, toElement: any, eventPayload?: any): void {\n\t\tvar fromItem = this.getItem(fromElement);\n\t\tvar toItem = this.getItem(toElement);\n\n\t\tif (!fromItem || !toItem) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.deselectAll(getRange(fromItem, toItem), eventPayload);\n\t}\n\n\tpublic selectAll(elements: any[], eventPayload?: any): void {\n\t\tthis.addTraits('selected', elements);\n\t\tvar eventData: _.ISelectionEvent = { selection: this.getSelection(), payload: eventPayload };\n\t\tthis.emit('selection', eventData);\n\t}\n\n\tpublic deselect(element: any, eventPayload?: any): void {\n\t\tthis.deselectAll([element], eventPayload);\n\t}\n\n\tpublic deselectAll(elements: any[], eventPayload?: any): void {\n\t\tthis.removeTraits('selected', elements);\n\t\tvar eventData: _.ISelectionEvent = { selection: this.getSelection(), payload: eventPayload };\n\t\tthis.emit('selection', eventData);\n\t}\n\n\tpublic setSelection(elements: any[], eventPayload?: any): void {\n\t\tthis.setTraits('selected', elements);\n\t\tvar eventData: _.ISelectionEvent = { selection: this.getSelection(), payload: eventPayload };\n\t\tthis.emit('selection', eventData);\n\t}\n\n\tpublic toggleSelection(element: any, eventPayload?: any): void {\n\t\tthis.toggleTrait('selected', element);\n\t\tvar eventData: _.ISelectionEvent = { selection: this.getSelection(), payload: eventPayload };\n\t\tthis.emit('selection', eventData);\n\t}\n\n\tpublic isSelected(element: any): boolean {\n\t\tvar item = this.getItem(element);\n\n\t\tif (!item) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn item.hasTrait('selected');\n\t}\n\n\tpublic getSelection(includeHidden?: boolean): any[] {\n\t\treturn this.getElementsWithTrait('selected', includeHidden);\n\t}\n\n\tpublic selectNext(count: number = 1, clearSelection: boolean = true, eventPayload?: any): void {\n\t\tvar selection = this.getSelection();\n\t\tvar item: Item = selection.length > 0 ? selection[0] : this.input;\n\t\tvar nextItem: Item;\n\t\tvar nav = this.getNavigator(item, false);\n\n\t\tfor (var i = 0; i < count; i++) {\n\t\t\tnextItem = nav.next();\n\t\t\tif (!nextItem) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\titem = nextItem;\n\t\t}\n\n\t\tif (clearSelection) {\n\t\t\tthis.setSelection([item], eventPayload);\n\t\t} else {\n\t\t\tthis.select(item, eventPayload);\n\t\t}\n\t}\n\n\tpublic selectPrevious(count: number = 1, clearSelection: boolean = true, eventPayload?: any): void {\n\t\tvar selection = this.getSelection(),\n\t\t\titem: Item = null,\n\t\t\tpreviousItem: Item = null;\n\n\t\tif (selection.length === 0) {\n\t\t\tvar nav = this.getNavigator(this.input);\n\n\t\t\twhile (item = nav.next()) {\n\t\t\t\tpreviousItem = item;\n\t\t\t}\n\n\t\t\titem = previousItem;\n\n\t\t} else {\n\t\t\titem = selection[0];\n\t\t\tvar nav = this.getNavigator(item, false);\n\n\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\tpreviousItem = nav.previous();\n\t\t\t\tif (!previousItem) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\titem = previousItem;\n\t\t\t}\n\t\t}\n\n\t\tif (clearSelection) {\n\t\t\tthis.setSelection([item], eventPayload);\n\t\t} else {\n\t\t\tthis.select(item, eventPayload);\n\t\t}\n\t}\n\n\tpublic selectParent(eventPayload?: any, clearSelection: boolean = true): void {\n\t\tvar selection = this.getSelection();\n\t\tvar item: Item = selection.length > 0 ? selection[0] : this.input;\n\t\tvar nav = this.getNavigator(item, false);\n\t\tvar parent = nav.parent();\n\n\t\tif (parent) {\n\t\t\tif (clearSelection) {\n\t\t\t\tthis.setSelection([parent], eventPayload);\n\t\t\t} else {\n\t\t\t\tthis.select(parent, eventPayload);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic setFocus(element?: any, eventPayload?: any): void {\n\t\tthis.setTraits('focused', element ? [element] : []);\n\t\tvar eventData: _.IFocusEvent = { focus: this.getFocus(), payload: eventPayload };\n\t\tthis.emit('focus', eventData);\n\t}\n\n\tpublic isFocused(element: any): boolean {\n\t\tvar item = this.getItem(element);\n\n\t\tif (!item) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn item.hasTrait('focused');\n\t}\n\n\tpublic getFocus(includeHidden?: boolean): any {\n\t\tvar result = this.getElementsWithTrait('focused', includeHidden);\n\t\treturn result.length === 0 ? null : result[0];\n\t}\n\n\tpublic focusNext(count: number = 1, eventPayload?: any): void {\n\t\tvar item: Item = this.getFocus() || this.input;\n\t\tvar nextItem: Item;\n\t\tvar nav = this.getNavigator(item, false);\n\n\t\tfor (var i = 0; i < count; i++) {\n\t\t\tnextItem = nav.next();\n\t\t\tif (!nextItem) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\titem = nextItem;\n\t\t}\n\n\t\tthis.setFocus(item, eventPayload);\n\t}\n\n\tpublic focusPrevious(count: number = 1, eventPayload?: any): void {\n\t\tvar item: Item = this.getFocus() || this.input;\n\t\tvar previousItem: Item;\n\t\tvar nav = this.getNavigator(item, false);\n\n\t\tfor (var i = 0; i < count; i++) {\n\t\t\tpreviousItem = nav.previous();\n\t\t\tif (!previousItem) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\titem = previousItem;\n\t\t}\n\n\t\tthis.setFocus(item, eventPayload);\n\t}\n\n\tpublic focusParent(eventPayload?: any): void {\n\t\tvar item: Item = this.getFocus() || this.input;\n\t\tvar nav = this.getNavigator(item, false);\n\t\tvar parent = nav.parent();\n\n\t\tif (parent) {\n\t\t\tthis.setFocus(parent, eventPayload);\n\t\t}\n\t}\n\n\tpublic focusFirstChild(eventPayload?: any): void {\n\t\tconst item = this.getItem(this.getFocus() || this.input);\n\t\tconst nav = this.getNavigator(item, false);\n\t\tconst next = nav.next();\n\t\tconst parent = nav.parent();\n\n\t\tif (parent === item) {\n\t\t\tthis.setFocus(next, eventPayload);\n\t\t}\n\t}\n\n\tpublic focusFirst(eventPayload?: any, from?: any): void {\n\t\tthis.focusNth(0, eventPayload, from);\n\t}\n\n\tpublic focusNth(index: number, eventPayload?: any, from?: any): void {\n\t\tvar navItem = this.getParent(from);\n\t\tvar nav = this.getNavigator(navItem);\n\t\tvar item = nav.first();\n\t\tfor (var i = 0; i < index; i++) {\n\t\t\titem = nav.next();\n\t\t}\n\n\t\tif (item) {\n\t\t\tthis.setFocus(item, eventPayload);\n\t\t}\n\t}\n\n\tpublic focusLast(eventPayload?: any, from?: any): void {\n\t\tvar navItem = this.getParent(from);\n\t\tvar item: Item;\n\t\tif (from) {\n\t\t\titem = navItem.lastChild;\n\t\t} else {\n\t\t\tvar nav = this.getNavigator(navItem);\n\t\t\titem = nav.last();\n\t\t}\n\n\t\tif (item) {\n\t\t\tthis.setFocus(item, eventPayload);\n\t\t}\n\t}\n\n\tprivate getParent(from?: any): Item {\n\t\tif (from) {\n\t\t\tvar fromItem = this.getItem(from);\n\t\t\tif (fromItem && fromItem.parent) {\n\t\t\t\treturn fromItem.parent;\n\t\t\t}\n\t\t}\n\n\t\treturn this.getItem(this.input);\n\t}\n\n\tpublic getNavigator(element: any = null, subTreeOnly: boolean = true): INavigator {\n\t\treturn new TreeNavigator(this.getItem(element), subTreeOnly);\n\t}\n\n\tpublic getItem(element: any = null): Item {\n\t\tif (element === null) {\n\t\t\treturn this.input;\n\t\t} else if (element instanceof Item) {\n\t\t\treturn element;\n\t\t} else if (typeof element === 'string') {\n\t\t\treturn this.registry.getItem(element);\n\t\t} else {\n\t\t\treturn this.registry.getItem(this.context.dataSource.getId(this.context.tree, element));\n\t\t}\n\t}\n\n\tpublic addTraits(trait: string, elements: any[]): void {\n\t\tvar items: IItemMap = this.traitsToItems[trait] || {};\n\t\tvar item: Item;\n\t\tfor (var i = 0, len = elements.length; i < len; i++) {\n\t\t\titem = this.getItem(elements[i]);\n\n\t\t\tif (item) {\n\t\t\t\titem.addTrait(trait);\n\t\t\t\titems[item.id] = item;\n\t\t\t}\n\t\t}\n\t\tthis.traitsToItems[trait] = items;\n\t}\n\n\tpublic removeTraits(trait: string, elements: any[]): void {\n\t\tvar items: IItemMap = this.traitsToItems[trait] || {};\n\t\tvar item: Item;\n\t\tvar id: string;\n\n\t\tif (elements.length === 0) {\n\t\t\tfor (id in items) {\n\t\t\t\tif (items.hasOwnProperty(id)) {\n\t\t\t\t\titem = items[id];\n\t\t\t\t\titem.removeTrait(trait);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdelete this.traitsToItems[trait];\n\n\t\t} else {\n\t\t\tfor (var i = 0, len = elements.length; i < len; i++) {\n\t\t\t\titem = this.getItem(elements[i]);\n\n\t\t\t\tif (item) {\n\t\t\t\t\titem.removeTrait(trait);\n\t\t\t\t\tdelete items[item.id];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic hasTrait(trait: string, element: any): boolean {\n\t\tvar item = this.getItem(element);\n\t\treturn item && item.hasTrait(trait);\n\t}\n\n\tprivate toggleTrait(trait: string, element: any): void {\n\t\tvar item = this.getItem(element);\n\n\t\tif (!item) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (item.hasTrait(trait)) {\n\t\t\tthis.removeTraits(trait, [element]);\n\t\t} else {\n\t\t\tthis.addTraits(trait, [element]);\n\t\t}\n\t}\n\n\tprivate setTraits(trait: string, elements: any[]): void {\n\t\tif (elements.length === 0) {\n\t\t\tthis.removeTraits(trait, elements);\n\t\t} else {\n\t\t\tvar items: { [id: string]: Item; } = {};\n\t\t\tvar item: Item;\n\n\t\t\tfor (var i = 0, len = elements.length; i < len; i++) {\n\t\t\t\titem = this.getItem(elements[i]);\n\n\t\t\t\tif (item) {\n\t\t\t\t\titems[item.id] = item;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar traitItems: IItemMap = this.traitsToItems[trait] || {};\n\t\t\tvar itemsToRemoveTrait: Item[] = [];\n\t\t\tvar id: string;\n\n\t\t\tfor (id in traitItems) {\n\t\t\t\tif (traitItems.hasOwnProperty(id)) {\n\t\t\t\t\tif (items.hasOwnProperty(id)) {\n\t\t\t\t\t\tdelete items[id];\n\t\t\t\t\t} else {\n\t\t\t\t\t\titemsToRemoveTrait.push(traitItems[id]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (var i = 0, len = itemsToRemoveTrait.length; i < len; i++) {\n\t\t\t\titem = itemsToRemoveTrait[i];\n\t\t\t\titem.removeTrait(trait);\n\t\t\t\tdelete traitItems[item.id];\n\t\t\t}\n\n\t\t\tfor (id in items) {\n\t\t\t\tif (items.hasOwnProperty(id)) {\n\t\t\t\t\titem = items[id];\n\t\t\t\t\titem.addTrait(trait);\n\t\t\t\t\ttraitItems[id] = item;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.traitsToItems[trait] = traitItems;\n\t\t}\n\t}\n\n\tprivate getElementsWithTrait(trait: string, includeHidden: boolean): any[] {\n\t\tvar elements = [];\n\t\tvar items = this.traitsToItems[trait] || {};\n\t\tvar id: string;\n\t\tfor (id in items) {\n\t\t\tif (items.hasOwnProperty(id) && (items[id].isVisible() || includeHidden)) {\n\t\t\t\telements.push(items[id].getElement());\n\t\t\t}\n\t\t}\n\t\treturn elements;\n\t}\n\n\tpublic dispose(): void {\n\t\tif (this.registry) {\n\t\t\tthis.registry.dispose();\n\t\t\tthis.registry = null;\n\t\t}\n\n\t\tsuper.dispose();\n\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 *--------------------------------------------------------------------------------------------*/\n\nimport { EventEmitter } from 'vs/base/common/eventEmitter';\nimport { IIterator, ArrayIterator } from 'vs/base/common/iterator';\nimport { Item } from './treeModel';\n\nexport interface IViewItem {\n\tmodel: Item;\n\ttop: number;\n\theight: number;\n}\n\nexport class HeightMap extends EventEmitter {\n\n\tprivate heightMap: IViewItem[];\n\tprivate indexes: { [item: string]: number; };\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.heightMap = [];\n\t\tthis.indexes = {};\n\t}\n\n\tpublic getTotalHeight(): number {\n\t\tvar last = this.heightMap[this.heightMap.length - 1];\n\t\treturn !last ? 0 : last.top + last.height;\n\t}\n\n\tpublic onInsertItems(iterator: IIterator, afterItemId: string = null): number {\n\t\tvar item: Item;\n\t\tvar viewItem: IViewItem;\n\t\tvar i: number, j: number;\n\t\tvar totalSize: number;\n\t\tvar sizeDiff = 0;\n\n\t\tif (afterItemId === null) {\n\t\t\ti = 0;\n\t\t\ttotalSize = 0;\n\t\t} else {\n\t\t\ti = this.indexes[afterItemId] + 1;\n\t\t\tviewItem = this.heightMap[i - 1];\n\n\t\t\tif (!viewItem) {\n\t\t\t\tconsole.error('view item doesnt exist');\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\ttotalSize = viewItem.top + viewItem.height;\n\t\t}\n\n\t\tvar boundSplice = this.heightMap.splice.bind(this.heightMap, i, 0);\n\n\t\tvar itemsToInsert: IViewItem[] = [];\n\n\t\twhile (item = iterator.next()) {\n\t\t\tviewItem = this.createViewItem(item);\n\t\t\tviewItem.top = totalSize + sizeDiff;\n\t\t\tthis.emit('viewItem:create', { item: viewItem.model });\n\n\t\t\tthis.indexes[item.id] = i++;\n\t\t\titemsToInsert.push(viewItem);\n\t\t\tsizeDiff += viewItem.height;\n\t\t}\n\n\t\tboundSplice.apply(this.heightMap, itemsToInsert);\n\n\t\tfor (j = i; j < this.heightMap.length; j++) {\n\t\t\tviewItem = this.heightMap[j];\n\t\t\tviewItem.top += sizeDiff;\n\t\t\tthis.indexes[viewItem.model.id] = j;\n\t\t}\n\n\t\tfor (j = itemsToInsert.length - 1; j >= 0; j--) {\n\t\t\tthis.onInsertItem(itemsToInsert[j]);\n\t\t}\n\n\t\tfor (j = this.heightMap.length - 1; j >= i; j--) {\n\t\t\tthis.onRefreshItem(this.heightMap[j]);\n\t\t}\n\n\t\treturn sizeDiff;\n\t}\n\n\tpublic onInsertItem(item: IViewItem): void {\n\t\t// noop\n\t}\n\n\t// Contiguous items\n\tpublic onRemoveItems(iterator: IIterator): void {\n\t\tvar itemId: string;\n\t\tvar viewItem: IViewItem;\n\t\tvar startIndex: number = null;\n\t\tvar i: number;\n\t\tvar sizeDiff = 0;\n\n\t\twhile (itemId = iterator.next()) {\n\t\t\ti = this.indexes[itemId];\n\t\t\tviewItem = this.heightMap[i];\n\n\t\t\tif (!viewItem) {\n\t\t\t\tconsole.error('view item doesnt exist');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsizeDiff -= viewItem.height;\n\t\t\tdelete this.indexes[itemId];\n\t\t\tthis.onRemoveItem(viewItem);\n\n\t\t\tif (startIndex === null) {\n\t\t\t\tstartIndex = i;\n\t\t\t}\n\t\t}\n\n\t\tif (sizeDiff === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.heightMap.splice(startIndex, i - startIndex + 1);\n\n\t\tfor (i = startIndex; i < this.heightMap.length; i++) {\n\t\t\tviewItem = this.heightMap[i];\n\t\t\tviewItem.top += sizeDiff;\n\t\t\tthis.indexes[viewItem.model.id] = i;\n\t\t\tthis.onRefreshItem(viewItem);\n\t\t}\n\t}\n\n\tpublic onRemoveItem(item: IViewItem): void {\n\t\t// noop\n\t}\n\n\tpublic onRefreshItemSet(items: Item[]): void {\n\t\tvar sortedItems = items.sort((a, b) => this.indexes[a.id] - this.indexes[b.id]);\n\t\tthis.onRefreshItems(new ArrayIterator(sortedItems));\n\t}\n\n\t// Ordered, but not necessarily contiguous items\n\tpublic onRefreshItems(iterator: IIterator): void {\n\t\tvar item: Item;\n\t\tvar viewItem: IViewItem;\n\t\tvar newHeight: number;\n\t\tvar i: number, j: number = null;\n\t\tvar cummDiff = 0;\n\n\t\twhile (item = iterator.next()) {\n\t\t\ti = this.indexes[item.id];\n\n\t\t\tfor (; cummDiff !== 0 && j !== null && j < i; j++) {\n\t\t\t\tviewItem = this.heightMap[j];\n\t\t\t\tviewItem.top += cummDiff;\n\t\t\t\tthis.onRefreshItem(viewItem);\n\t\t\t}\n\n\t\t\tviewItem = this.heightMap[i];\n\t\t\tnewHeight = item.getHeight();\n\t\t\tviewItem.top += cummDiff;\n\t\t\tcummDiff += newHeight - viewItem.height;\n\t\t\tviewItem.height = newHeight;\n\t\t\tthis.onRefreshItem(viewItem, true);\n\n\t\t\tj = i + 1;\n\t\t}\n\n\t\tif (cummDiff !== 0 && j !== null) {\n\t\t\tfor (; j < this.heightMap.length; j++) {\n\t\t\t\tviewItem = this.heightMap[j];\n\t\t\t\tviewItem.top += cummDiff;\n\t\t\t\tthis.onRefreshItem(viewItem);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic onRefreshItem(item: IViewItem, needsRender: boolean = false): void {\n\t\t// noop\n\t}\n\n\tpublic itemsCount(): number {\n\t\treturn this.heightMap.length;\n\t}\n\n\tpublic itemAt(position: number): string {\n\t\treturn this.heightMap[this.indexAt(position)].model.id;\n\t}\n\n\tpublic withItemsInRange(start: number, end: number, fn: (item: string) => void): void {\n\t\tstart = this.indexAt(start);\n\t\tend = this.indexAt(end);\n\t\tfor (var i = start; i <= end; i++) {\n\t\t\tfn(this.heightMap[i].model.id);\n\t\t}\n\t}\n\n\tpublic indexAt(position: number): number {\n\t\tvar left = 0;\n\t\tvar right = this.heightMap.length;\n\t\tvar center: number;\n\t\tvar item: IViewItem;\n\n\t\t// Binary search\n\t\twhile (left < right) {\n\t\t\tcenter = Math.floor((left + right) / 2);\n\t\t\titem = this.heightMap[center];\n\n\t\t\tif (position < item.top) {\n\t\t\t\tright = center;\n\t\t\t} else if (position >= item.top + item.height) {\n\t\t\t\tif (left === center) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tleft = center;\n\t\t\t} else {\n\t\t\t\treturn center;\n\t\t\t}\n\t\t}\n\n\t\treturn this.heightMap.length;\n\t}\n\n\tpublic indexAfter(position: number): number {\n\t\treturn Math.min(this.indexAt(position) + 1, this.heightMap.length);\n\t}\n\n\tpublic itemAtIndex(index: number): IViewItem {\n\t\treturn this.heightMap[index];\n\t}\n\n\tpublic itemAfter(item: IViewItem): IViewItem {\n\t\treturn this.heightMap[this.indexes[item.model.id] + 1] || null;\n\t}\n\n\tprotected createViewItem(item: Item): IViewItem {\n\t\tthrow new Error('not implemented');\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.heightMap = null;\n\t\tthis.indexes = null;\n\t}\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'use strict';\n\nimport { globals } from 'vs/base/common/platform';\nimport { logOnceWebWorkerWarning, IWorker, IWorkerCallback, IWorkerFactory } from 'vs/base/common/worker/simpleWorker';\n\n// Option for hosts to overwrite the worker script url (used in the standalone editor)\nconst getCrossOriginWorkerScriptUrl: (workerId: string, label: string) => string = environment('getWorkerUrl', null);\n\nfunction environment(name: string, fallback: any = false): any {\n\tif (globals.MonacoEnvironment && globals.MonacoEnvironment.hasOwnProperty(name)) {\n\t\treturn globals.MonacoEnvironment[name];\n\t}\n\n\treturn fallback;\n}\n\nfunction defaultGetWorkerUrl(workerId: string, label: string): string {\n\treturn require.toUrl('./' + workerId) + '#' + label;\n}\nvar getWorkerUrl = getCrossOriginWorkerScriptUrl || defaultGetWorkerUrl;\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 implements IWorker {\n\n\tprivate id: number;\n\tprivate worker: Worker;\n\n\tconstructor(moduleId: string, id: number, label: string, onMessageCallback: IWorkerCallback, onErrorCallback: (err: any) => void) {\n\t\tthis.id = id;\n\t\tthis.worker = new Worker(getWorkerUrl('workerMain.js', label));\n\t\tthis.postMessage(moduleId);\n\t\tthis.worker.onmessage = function (ev: any) {\n\t\t\tonMessageCallback(ev.data);\n\t\t};\n\t\tif (typeof this.worker.addEventListener === 'function') {\n\t\t\tthis.worker.addEventListener('error', onErrorCallback);\n\t\t}\n\t}\n\n\tpublic getId(): number {\n\t\treturn this.id;\n\t}\n\n\tpublic postMessage(msg: string): void {\n\t\tif (this.worker) {\n\t\t\tthis.worker.postMessage(msg);\n\t\t}\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.worker.terminate();\n\t\tthis.worker = null;\n\t}\n}\n\nexport class DefaultWorkerFactory implements IWorkerFactory {\n\n\tprivate static LAST_WORKER_ID = 0;\n\n\tprivate _label: string;\n\tprivate _webWorkerFailedBeforeError: any;\n\n\tconstructor(label: string) {\n\t\tthis._label = label;\n\t\tthis._webWorkerFailedBeforeError = false;\n\t}\n\n\tpublic create(moduleId: string, onMessageCallback: IWorkerCallback, onErrorCallback: (err: any) => void): IWorker {\n\t\tlet workerId = (++DefaultWorkerFactory.LAST_WORKER_ID);\n\n\t\tif (this._webWorkerFailedBeforeError) {\n\t\t\tthrow this._webWorkerFailedBeforeError;\n\t\t}\n\n\t\treturn new WebWorker(moduleId, workerId, this._label || 'anonymous' + workerId, onMessageCallback, (err) => {\n\t\t\tlogOnceWebWorkerWarning(err);\n\t\t\tthis._webWorkerFailedBeforeError = err;\n\t\t\tonErrorCallback(err);\n\t\t});\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport 'vs/css!./builder';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport types = require('vs/base/common/types');\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport strings = require('vs/base/common/strings');\nimport assert = require('vs/base/common/assert');\nimport DOM = require('vs/base/browser/dom');\n\n/**\n * Welcome to the monaco builder. The recommended way to use it is:\n *\n * import Builder = require('vs/base/browser/builder');\n * let $ = Builder.$;\n * $(....).fn(...);\n *\n * See below for examples how to invoke the $():\n *\n * \t$()\t\t\t\t\t\t\t- creates an offdom builder\n * \t$(builder)\t\t\t\t\t- wraps the given builder\n * \t$(builder[])\t\t\t\t- wraps the given builders into a multibuilder\n * \t$('div')\t\t\t\t\t- creates a div\n * \t$('.big')\t\t\t\t\t- creates a div with class `big`\n * \t$('#head')\t\t\t\t\t- creates a div with id `head`\n * \t$('ul#head')\t\t\t\t- creates an unordered list with id `head`\n * \t$('')\t- constructs a builder from the given HTML\n * \t$('a', { href: 'back'})\t\t- constructs a builder, similarly to the Builder#element() call\n */\nexport interface QuickBuilder {\n\t(): Builder;\n\t(builders: Builder[]): Builder;\n\t(element: HTMLElement): Builder;\n\t(element: HTMLElement[]): Builder;\n\t(window: Window): Builder;\n\t(htmlOrQuerySyntax: string): Builder; // Or, MultiBuilder\n\t(name: string, args?: any, fn?: (builder: Builder) => any): Builder;\n\t(one: string, two: string, three: string): Builder;\n\t(builder: Builder): Builder;\n}\n\n/**\n * Create a new builder from the element that is uniquely identified by the given identifier. If the\n * second parameter \"offdom\" is set to true, the created elements will only be added to the provided\n * element when the build() method is called.\n */\nexport function withElementById(id: string, offdom?: boolean): Builder {\n\tassert.ok(types.isString(id), 'Expected String as parameter');\n\n\tlet element = document.getElementById(id);\n\tif (element) {\n\t\treturn new Builder(element, offdom);\n\t}\n\n\treturn null;\n}\n\nexport let Build = {\n\twithElementById: withElementById\n};\n\n// --- Implementation starts here\n\nlet MS_DATA_KEY = '_msDataKey';\nlet DATA_BINDING_ID = '__$binding';\nlet LISTENER_BINDING_ID = '__$listeners';\nlet VISIBILITY_BINDING_ID = '__$visibility';\n\nexport class Position {\n\tpublic x: number;\n\tpublic y: number;\n\n\tconstructor(x: number, y: number) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t}\n}\n\nexport class Box {\n\tpublic top: number;\n\tpublic right: number;\n\tpublic bottom: number;\n\tpublic left: number;\n\n\tconstructor(top: number, right: number, bottom: number, left: number) {\n\t\tthis.top = top;\n\t\tthis.right = right;\n\t\tthis.bottom = bottom;\n\t\tthis.left = left;\n\t}\n}\n\nexport class Dimension {\n\tpublic width: number;\n\tpublic height: number;\n\n\tconstructor(width: number, height: number) {\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\n\tpublic substract(box: Box): Dimension {\n\t\treturn new Dimension(this.width - box.left - box.right, this.height - box.top - box.bottom);\n\t}\n}\n\nexport interface IRange {\n\tstart: number;\n\tend: number;\n}\n\nfunction data(element: any): any {\n\tif (!element[MS_DATA_KEY]) {\n\t\telement[MS_DATA_KEY] = {};\n\t}\n\n\treturn element[MS_DATA_KEY];\n}\n\nfunction hasData(element: any): boolean {\n\treturn !!element[MS_DATA_KEY];\n}\n\n/**\n * Wraps around the provided element to manipulate it and add more child elements.\n */\nexport class Builder implements IDisposable {\n\tprivate currentElement: HTMLElement;\n\tprivate offdom: boolean;\n\tprivate container: HTMLElement;\n\tprivate createdElements: HTMLElement[];\n\tprivate toUnbind: { [type: string]: IDisposable[]; };\n\tprivate captureToUnbind: { [type: string]: IDisposable[]; };\n\n\tconstructor(element?: HTMLElement, offdom?: boolean) {\n\t\tthis.offdom = offdom;\n\n\t\tthis.container = element;\n\n\t\tthis.currentElement = element;\n\t\tthis.createdElements = [];\n\n\t\tthis.toUnbind = {};\n\t\tthis.captureToUnbind = {};\n\t}\n\n\t/**\n\t * Returns a new builder that lets the current HTML Element of this builder be the container\n\t * for future additions on the builder.\n\t */\n\tpublic asContainer(): Builder {\n\t\treturn withBuilder(this, this.offdom);\n\t}\n\n\t/**\n\t * Clones the builder providing the same properties as this one.\n\t */\n\tpublic clone(): Builder {\n\t\tlet builder = new Builder(this.container, this.offdom);\n\t\tbuilder.currentElement = this.currentElement;\n\t\tbuilder.createdElements = this.createdElements;\n\t\tbuilder.captureToUnbind = this.captureToUnbind;\n\t\tbuilder.toUnbind = this.toUnbind;\n\n\t\treturn builder;\n\t}\n\n\t/**\n\t * Creates a new Builder that performs all operations on the current element of the builder and\n\t * the builder or element being passed in.\n\t */\n\tpublic and(element: HTMLElement): MultiBuilder;\n\tpublic and(builder: Builder): MultiBuilder;\n\tpublic and(obj: any): MultiBuilder {\n\n\t\t// Convert HTMLElement to Builder as necessary\n\t\tif (!(obj instanceof Builder) && !(obj instanceof MultiBuilder)) {\n\t\t\tobj = new Builder((obj), this.offdom);\n\t\t}\n\n\t\t// Wrap Builders into MultiBuilder\n\t\tlet builders: Builder[] = [this];\n\t\tif (obj instanceof MultiBuilder) {\n\t\t\tfor (let i = 0; i < (obj).length; i++) {\n\t\t\t\tbuilders.push((obj).item(i));\n\t\t\t}\n\t\t} else {\n\t\t\tbuilders.push(obj);\n\t\t}\n\n\t\treturn new MultiBuilder(builders);\n\t}\n\n\t/**\n\t * Inserts all created elements of this builder as children to the given container. If the\n\t * container is not provided, the element that was passed into the Builder at construction\n\t * time is being used. The caller can provide the index of insertion, or omit it to append\n\t * at the end.\n\t * This method is a no-op unless the builder was created with the offdom option to be true.\n\t */\n\tpublic build(container?: Builder, index?: number): Builder;\n\tpublic build(container?: HTMLElement, index?: number): Builder;\n\tpublic build(container?: any, index?: number): Builder {\n\t\tassert.ok(this.offdom, 'This builder was not created off-dom, so build() can not be called.');\n\n\t\t// Use builders own container if present\n\t\tif (!container) {\n\t\t\tcontainer = this.container;\n\t\t}\n\n\t\t// Handle case of passed in Builder\n\t\telse if (container instanceof Builder) {\n\t\t\tcontainer = (container).getHTMLElement();\n\t\t}\n\n\t\tassert.ok(container, 'Builder can only be build() with a container provided.');\n\t\tassert.ok(DOM.isHTMLElement(container), 'The container must either be a HTMLElement or a Builder.');\n\n\t\tlet htmlContainer = container;\n\n\t\t// Append\n\t\tlet i: number, len: number;\n\t\tlet childNodes = htmlContainer.childNodes;\n\t\tif (types.isNumber(index) && index < childNodes.length) {\n\t\t\tfor (i = 0, len = this.createdElements.length; i < len; i++) {\n\t\t\t\thtmlContainer.insertBefore(this.createdElements[i], childNodes[index++]);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0, len = this.createdElements.length; i < len; i++) {\n\t\t\t\thtmlContainer.appendChild(this.createdElements[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Similar to #build, but does not require that the builder is off DOM, and instead\n\t * attached the current element. If the current element has a parent, it will be\n\t * detached from that parent.\n\t */\n\tpublic appendTo(container?: Builder, index?: number): Builder;\n\tpublic appendTo(container?: HTMLElement, index?: number): Builder;\n\tpublic appendTo(container?: any, index?: number): Builder {\n\n\t\t// Use builders own container if present\n\t\tif (!container) {\n\t\t\tcontainer = this.container;\n\t\t}\n\n\t\t// Handle case of passed in Builder\n\t\telse if (container instanceof Builder) {\n\t\t\tcontainer = (container).getHTMLElement();\n\t\t}\n\n\t\tassert.ok(container, 'Builder can only be build() with a container provided.');\n\t\tassert.ok(DOM.isHTMLElement(container), 'The container must either be a HTMLElement or a Builder.');\n\n\t\tlet htmlContainer = container;\n\n\t\t// Remove node from parent, if needed\n\t\tif (this.currentElement.parentNode) {\n\t\t\tthis.currentElement.parentNode.removeChild(this.currentElement);\n\t\t}\n\n\t\tlet childNodes = htmlContainer.childNodes;\n\t\tif (types.isNumber(index) && index < childNodes.length) {\n\t\t\thtmlContainer.insertBefore(this.currentElement, childNodes[index]);\n\t\t} else {\n\t\t\thtmlContainer.appendChild(this.currentElement);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Performs the exact reverse operation of #append.\n\t * Doing `a.append(b)` is the same as doing `b.appendTo(a)`, with the difference\n\t * of the return value being the builder which called the operation (`a` in the\n\t * first case; `b` in the second case).\n\t */\n\tpublic append(child: HTMLElement, index?: number): Builder;\n\tpublic append(child: Builder, index?: number): Builder;\n\tpublic append(child: any, index?: number): Builder {\n\t\tassert.ok(child, 'Need a child to append');\n\n\t\tif (DOM.isHTMLElement(child)) {\n\t\t\tchild = withElement(child);\n\t\t}\n\n\t\tassert.ok(child instanceof Builder || child instanceof MultiBuilder, 'Need a child to append');\n\n\t\t(child).appendTo(this, index);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes the current element of this builder from its parent node.\n\t */\n\tpublic offDOM(): Builder {\n\t\tif (this.currentElement.parentNode) {\n\t\t\tthis.currentElement.parentNode.removeChild(this.currentElement);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Returns the HTML Element the builder is currently active on.\n\t */\n\tpublic getHTMLElement(): HTMLElement {\n\t\treturn this.currentElement;\n\t}\n\n\t/**\n\t * Returns the HTML Element the builder is building in.\n\t */\n\tpublic getContainer(): HTMLElement {\n\t\treturn this.container;\n\t}\n\n\t// HTML Elements\n\n\t/**\n\t * Creates a new element of this kind as child of the current element or parent.\n\t * Accepts an object literal as first parameter that can be used to describe the\n\t * attributes of the element.\n\t * Accepts a function as second parameter that can be used to create child elements\n\t * of the element. The function will be called with a new builder created with the\n\t * provided element.\n\t */\n\tpublic div(attributes?: any, fn?: (builder: Builder) => void): Builder {\n\t\treturn this.doElement('div', attributes, fn);\n\t}\n\n\t/**\n\t * Creates a new element of this kind as child of the current element or parent.\n\t * Accepts an object literal as first parameter that can be used to describe the\n\t * attributes of the element.\n\t * Accepts a function as second parameter that can be used to create child elements\n\t * of the element. The function will be called with a new builder created with the\n\t * provided element.\n\t */\n\tpublic p(attributes?: any, fn?: (builder: Builder) => void): Builder {\n\t\treturn this.doElement('p', attributes, fn);\n\t}\n\n\t/**\n\t * Creates a new element of this kind as child of the current element or parent.\n\t * Accepts an object literal as first parameter that can be used to describe the\n\t * attributes of the element.\n\t * Accepts a function as second parameter that can be used to create child elements\n\t * of the element. The function will be called with a new builder created with the\n\t * provided element.\n\t */\n\tpublic ul(attributes?: any, fn?: (builder: Builder) => void): Builder {\n\t\treturn this.doElement('ul', attributes, fn);\n\t}\n\n\t/**\n\t * Creates a new element of this kind as child of the current element or parent.\n\t * Accepts an object literal as first parameter that can be used to describe the\n\t * attributes of the element.\n\t * Accepts a function as second parameter that can be used to create child elements\n\t * of the element. The function will be called with a new builder created with the\n\t * provided element.\n\t */\n\tpublic ol(attributes?: any, fn?: (builder: Builder) => void): Builder {\n\t\treturn this.doElement('ol', attributes, fn);\n\t}\n\n\t/**\n\t * Creates a new element of this kind as child of the current element or parent.\n\t * Accepts an object literal as first parameter that can be used to describe the\n\t * attributes of the element.\n\t * Accepts a function as second parameter that can be used to create child elements\n\t * of the element. The function will be called with a new builder created with the\n\t * provided element.\n\t */\n\tpublic li(attributes?: any, fn?: (builder: Builder) => void): Builder {\n\t\treturn this.doElement('li', attributes, fn);\n\t}\n\n\t/**\n\t * Creates a new element of this kind as child of the current element or parent.\n\t * Accepts an object literal as first parameter that can be used to describe the\n\t * attributes of the element.\n\t * Accepts a function as second parameter that can be used to create child elements\n\t * of the element. The function will be called with a new builder created with the\n\t * provided element.\n\t */\n\tpublic span(attributes?: any, fn?: (builder: Builder) => void): Builder {\n\t\treturn this.doElement('span', attributes, fn);\n\t}\n\n\t/**\n\t * Creates a new element of this kind as child of the current element or parent.\n\t * Accepts an object literal as first parameter that can be used to describe the\n\t * attributes of the element.\n\t * Accepts a function as second parameter that can be used to create child elements\n\t * of the element. The function will be called with a new builder created with the\n\t * provided element.\n\t */\n\tpublic img(attributes?: any, fn?: (builder: Builder) => void): Builder {\n\t\treturn this.doElement('img', attributes, fn);\n\t}\n\n\t/**\n\t * Creates a new element of this kind as child of the current element or parent.\n\t * Accepts an object literal as first parameter that can be used to describe the\n\t * attributes of the element.\n\t * Accepts a function as second parameter that can be used to create child elements\n\t * of the element. The function will be called with a new builder created with the\n\t * provided element.\n\t */\n\tpublic a(attributes?: any, fn?: (builder: Builder) => void): Builder {\n\t\treturn this.doElement('a', attributes, fn);\n\t}\n\n\t/**\n\t * Creates a new element of this kind as child of the current element or parent.\n\t * Accepts an object literal as first parameter that can be used to describe the\n\t * attributes of the element.\n\t * Accepts a function as second parameter that can be used to create child elements\n\t * of the element. The function will be called with a new builder created with the\n\t * provided element.\n\t */\n\tpublic header(attributes?: any, fn?: (builder: Builder) => void): Builder {\n\t\treturn this.doElement('header', attributes, fn);\n\t}\n\n\t/**\n\t * Creates a new element of this kind as child of the current element or parent.\n\t * Accepts an object literal as first parameter that can be used to describe the\n\t * attributes of the element.\n\t * Accepts a function as second parameter that can be used to create child elements\n\t * of the element. The function will be called with a new builder created with the\n\t * provided element.\n\t */\n\tpublic section(attributes?: any, fn?: (builder: Builder) => void): Builder {\n\t\treturn this.doElement('section', attributes, fn);\n\t}\n\n\t/**\n\t * Creates a new element of this kind as child of the current element or parent.\n\t * Accepts an object literal as first parameter that can be used to describe the\n\t * attributes of the element.\n\t * Accepts a function as second parameter that can be used to create child elements\n\t * of the element. The function will be called with a new builder created with the\n\t * provided element.\n\t */\n\tpublic footer(attributes?: any, fn?: (builder: Builder) => void): Builder {\n\t\treturn this.doElement('footer', attributes, fn);\n\t}\n\n\t/**\n\t * Creates a new element of given tag name as child of the current element or parent.\n\t * Accepts an object literal as first parameter that can be used to describe the\n\t * attributes of the element.\n\t * Accepts a function as second parameter that can be used to create child elements\n\t * of the element. The function will be called with a new builder created with the\n\t * provided element.\n\t */\n\tpublic element(name: string, attributes?: any, fn?: (builder: Builder) => void): Builder {\n\t\treturn this.doElement(name, attributes, fn);\n\t}\n\n\tprivate doElement(name: string, attributesOrFn?: any, fn?: (builder: Builder) => void): Builder {\n\n\t\t// Create Element\n\t\tlet element = document.createElement(name);\n\t\tthis.currentElement = element;\n\n\t\t// Off-DOM: Remember in array of created elements\n\t\tif (this.offdom) {\n\t\t\tthis.createdElements.push(element);\n\t\t}\n\n\t\t// Object (apply properties as attributes to HTML element)\n\t\tif (types.isObject(attributesOrFn)) {\n\t\t\tthis.attr(attributesOrFn);\n\t\t}\n\n\t\t// Support second argument being function\n\t\tif (types.isFunction(attributesOrFn)) {\n\t\t\tfn = attributesOrFn;\n\t\t}\n\n\t\t// Apply Functions (Elements created in Functions will be added as child to current element)\n\t\tif (types.isFunction(fn)) {\n\t\t\tlet builder = new Builder(element);\n\t\t\tfn.call(builder, builder); // Set both 'this' and the first parameter to the new builder\n\t\t}\n\n\t\t// Add to parent\n\t\tif (!this.offdom) {\n\t\t\tthis.container.appendChild(element);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Calls focus() on the current HTML element;\n\t */\n\tpublic domFocus(): Builder {\n\t\tthis.currentElement.focus();\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Returns true if the current element of this builder is the active element.\n\t */\n\tpublic hasFocus(): boolean {\n\t\tlet activeElement: Element = document.activeElement;\n\n\t\treturn (activeElement === this.currentElement);\n\t}\n\n\t/**\n\t * Calls select() on the current HTML element;\n\t */\n\tpublic domSelect(range: IRange = null): Builder {\n\t\tlet input = this.currentElement;\n\n\t\tinput.select();\n\n\t\tif (range) {\n\t\t\tinput.setSelectionRange(range.start, range.end);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Calls blur() on the current HTML element;\n\t */\n\tpublic domBlur(): Builder {\n\t\tthis.currentElement.blur();\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Calls click() on the current HTML element;\n\t */\n\tpublic domClick(): Builder {\n\t\tthis.currentElement.click();\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Registers listener on event types on the current element.\n\t */\n\tpublic on(type: string, fn: (e: Event, builder: Builder, unbind: IDisposable) => void, listenerToUnbindContainer?: IDisposable[], useCapture?: boolean): Builder;\n\tpublic on(typeArray: string[], fn: (e: Event, builder: Builder, unbind: IDisposable) => void, listenerToUnbindContainer?: IDisposable[], useCapture?: boolean): Builder;\n\tpublic on(arg1: any, fn: (e: Event, builder: Builder, unbind: IDisposable) => void, listenerToUnbindContainer?: IDisposable[], useCapture?: boolean): Builder {\n\n\t\t// Event Type Array\n\t\tif (types.isArray(arg1)) {\n\t\t\targ1.forEach((type: string) => {\n\t\t\t\tthis.on(type, fn, listenerToUnbindContainer, useCapture);\n\t\t\t});\n\t\t}\n\n\t\t// Single Event Type\n\t\telse {\n\t\t\tlet type = arg1;\n\n\t\t\t// Add Listener\n\t\t\tlet unbind: IDisposable = DOM.addDisposableListener(this.currentElement, type, (e: Event) => {\n\t\t\t\tfn(e, this, unbind); // Pass in Builder as Second Argument\n\t\t\t}, useCapture || false);\n\n\t\t\t// Remember for off() use\n\t\t\tif (useCapture) {\n\t\t\t\tif (!this.captureToUnbind[type]) {\n\t\t\t\t\tthis.captureToUnbind[type] = [];\n\t\t\t\t}\n\t\t\t\tthis.captureToUnbind[type].push(unbind);\n\t\t\t} else {\n\t\t\t\tif (!this.toUnbind[type]) {\n\t\t\t\t\tthis.toUnbind[type] = [];\n\t\t\t\t}\n\t\t\t\tthis.toUnbind[type].push(unbind);\n\t\t\t}\n\n\t\t\t// Bind to Element\n\t\t\tlet listenerBinding: IDisposable[] = this.getProperty(LISTENER_BINDING_ID, []);\n\t\t\tlistenerBinding.push(unbind);\n\t\t\tthis.setProperty(LISTENER_BINDING_ID, listenerBinding);\n\n\t\t\t// Add to Array if passed in\n\t\t\tif (listenerToUnbindContainer && types.isArray(listenerToUnbindContainer)) {\n\t\t\t\tlistenerToUnbindContainer.push(unbind);\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes all listeners from all elements created by the builder for the given event type.\n\t */\n\tpublic off(type: string, useCapture?: boolean): Builder;\n\tpublic off(typeArray: string[], useCapture?: boolean): Builder;\n\tpublic off(arg1: any, useCapture?: boolean): Builder {\n\n\t\t// Event Type Array\n\t\tif (types.isArray(arg1)) {\n\t\t\targ1.forEach((type: string) => {\n\t\t\t\tthis.off(type);\n\t\t\t});\n\t\t}\n\n\t\t// Single Event Type\n\t\telse {\n\t\t\tlet type = arg1;\n\t\t\tif (useCapture) {\n\t\t\t\tif (this.captureToUnbind[type]) {\n\t\t\t\t\tthis.captureToUnbind[type] = dispose(this.captureToUnbind[type]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this.toUnbind[type]) {\n\t\t\t\t\tthis.toUnbind[type] = dispose(this.toUnbind[type]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Registers listener on event types on the current element and removes\n\t * them after first invocation.\n\t */\n\tpublic once(type: string, fn: (e: Event, builder: Builder, unbind: IDisposable) => void, listenerToUnbindContainer?: IDisposable[], useCapture?: boolean): Builder;\n\tpublic once(typesArray: string[], fn: (e: Event, builder: Builder, unbind: IDisposable) => void, listenerToUnbindContainer?: IDisposable[], useCapture?: boolean): Builder;\n\tpublic once(arg1: any, fn: (e: Event, builder: Builder, unbind: IDisposable) => void, listenerToUnbindContainer?: IDisposable[], useCapture?: boolean): Builder {\n\n\t\t// Event Type Array\n\t\tif (types.isArray(arg1)) {\n\t\t\targ1.forEach((type: string) => {\n\t\t\t\tthis.once(type, fn);\n\t\t\t});\n\t\t}\n\n\t\t// Single Event Type\n\t\telse {\n\t\t\tlet type = arg1;\n\n\t\t\t// Add Listener\n\t\t\tlet unbind: IDisposable = DOM.addDisposableListener(this.currentElement, type, (e: Event) => {\n\t\t\t\tfn(e, this, unbind); // Pass in Builder as Second Argument\n\t\t\t\tunbind.dispose();\n\t\t\t}, useCapture || false);\n\n\t\t\t// Add to Array if passed in\n\t\t\tif (listenerToUnbindContainer && types.isArray(listenerToUnbindContainer)) {\n\t\t\t\tlistenerToUnbindContainer.push(unbind);\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Registers listener on event types on the current element and causes\n\t * the event to prevent default execution (e.preventDefault()). If the\n\t * parameter \"cancelBubble\" is set to true, it will also prevent bubbling\n\t * of the event.\n\t */\n\tpublic preventDefault(type: string, cancelBubble: boolean, listenerToUnbindContainer?: IDisposable[], useCapture?: boolean): Builder;\n\tpublic preventDefault(typesArray: string[], cancelBubble: boolean, listenerToUnbindContainer?: IDisposable[], useCapture?: boolean): Builder;\n\tpublic preventDefault(arg1: any, cancelBubble: boolean, listenerToUnbindContainer?: IDisposable[], useCapture?: boolean): Builder {\n\t\tlet fn = function (e: Event) {\n\t\t\te.preventDefault();\n\n\t\t\tif (cancelBubble) {\n\t\t\t\tif (e.stopPropagation) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t} else {\n\t\t\t\t\te.cancelBubble = true;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\treturn this.on(arg1, fn, listenerToUnbindContainer, useCapture);\n\t}\n\n\t/**\n\t * \tThis method has different characteristics based on the parameter provided:\n\t * a) a single string passed in as argument will return the attribute value using the\n\t * string as key from the current element of the builder.\n\t * b) two strings passed in will set the value of an attribute identified by the first\n\t * parameter to match the second parameter\n\t * c) an object literal passed in will apply the properties of the literal as attributes\n\t * to the current element of the builder.\n\t */\n\tpublic attr(name: string): string;\n\tpublic attr(name: string, value: string): Builder;\n\tpublic attr(name: string, value: boolean): Builder;\n\tpublic attr(name: string, value: number): Builder;\n\tpublic attr(attributes: any): Builder;\n\tpublic attr(firstP: any, secondP?: any): any {\n\n\t\t// Apply Object Literal to Attributes of Element\n\t\tif (types.isObject(firstP)) {\n\t\t\tfor (let prop in firstP) {\n\t\t\t\tif (firstP.hasOwnProperty(prop)) {\n\t\t\t\t\tlet value = firstP[prop];\n\t\t\t\t\tthis.doSetAttr(prop, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Get Attribute Value\n\t\tif (types.isString(firstP) && !types.isString(secondP)) {\n\t\t\treturn this.currentElement.getAttribute(firstP);\n\t\t}\n\n\t\t// Set Attribute Value\n\t\tif (types.isString(firstP)) {\n\t\t\tif (!types.isString(secondP)) {\n\t\t\t\tsecondP = String(secondP);\n\t\t\t}\n\t\t\tthis.doSetAttr(firstP, secondP);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprivate doSetAttr(prop: string, value: any): void {\n\t\tif (prop === 'class') {\n\t\t\tprop = 'addClass'; // Workaround for the issue that a function name can not be 'class' in ES\n\t\t}\n\n\t\tif ((this)[prop]) {\n\t\t\tif (types.isArray(value)) {\n\t\t\t\t(this)[prop].apply(this, value);\n\t\t\t} else {\n\t\t\t\t(this)[prop].call(this, value);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.currentElement.setAttribute(prop, value);\n\t\t}\n\t}\n\n\t/**\n\t * Removes an attribute by the given name.\n\t */\n\tpublic removeAttribute(prop: string): void {\n\t\tthis.currentElement.removeAttribute(prop);\n\t}\n\n\t/**\n\t * Sets the id attribute to the value provided for the current HTML element of the builder.\n\t */\n\tpublic id(id: string): Builder {\n\t\tthis.currentElement.setAttribute('id', id);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the src attribute to the value provided for the current HTML element of the builder.\n\t */\n\tpublic src(src: string): Builder {\n\t\tthis.currentElement.setAttribute('src', src);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the href attribute to the value provided for the current HTML element of the builder.\n\t */\n\tpublic href(href: string): Builder {\n\t\tthis.currentElement.setAttribute('href', href);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the title attribute to the value provided for the current HTML element of the builder.\n\t */\n\tpublic title(title: string): Builder {\n\t\tthis.currentElement.setAttribute('title', title);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name attribute to the value provided for the current HTML element of the builder.\n\t */\n\tpublic name(name: string): Builder {\n\t\tthis.currentElement.setAttribute('name', name);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the type attribute to the value provided for the current HTML element of the builder.\n\t */\n\tpublic type(type: string): Builder {\n\t\tthis.currentElement.setAttribute('type', type);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the value attribute to the value provided for the current HTML element of the builder.\n\t */\n\tpublic value(value: string): Builder {\n\t\tthis.currentElement.setAttribute('value', value);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the alt attribute to the value provided for the current HTML element of the builder.\n\t */\n\tpublic alt(alt: string): Builder {\n\t\tthis.currentElement.setAttribute('alt', alt);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name draggable to the value provided for the current HTML element of the builder.\n\t */\n\tpublic draggable(isDraggable: boolean): Builder {\n\t\tthis.currentElement.setAttribute('draggable', isDraggable ? 'true' : 'false');\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the tabindex attribute to the value provided for the current HTML element of the builder.\n\t */\n\tpublic tabindex(index: number): Builder {\n\t\tthis.currentElement.setAttribute('tabindex', index.toString());\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * \tThis method has different characteristics based on the parameter provided:\n\t * a) a single string passed in as argument will return the style value using the\n\t * string as key from the current element of the builder.\n\t * b) two strings passed in will set the style value identified by the first\n\t * parameter to match the second parameter. The second parameter can be null\n\t * to unset a style\n\t * c) an object literal passed in will apply the properties of the literal as styles\n\t * to the current element of the builder.\n\t */\n\tpublic style(name: string): string;\n\tpublic style(name: string, value: string): Builder;\n\tpublic style(attributes: any): Builder;\n\tpublic style(firstP: any, secondP?: any): any {\n\n\t\t// Apply Object Literal to Styles of Element\n\t\tif (types.isObject(firstP)) {\n\t\t\tfor (let prop in firstP) {\n\t\t\t\tif (firstP.hasOwnProperty(prop)) {\n\t\t\t\t\tlet value = firstP[prop];\n\t\t\t\t\tthis.doSetStyle(prop, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\tconst hasFirstP = types.isString(firstP);\n\n\t\t// Get Style Value\n\t\tif (hasFirstP && types.isUndefined(secondP)) {\n\t\t\treturn this.currentElement.style[this.cssKeyToJavaScriptProperty(firstP)];\n\t\t}\n\n\t\t// Set Style Value\n\t\telse if (hasFirstP) {\n\t\t\tthis.doSetStyle(firstP, secondP);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprivate doSetStyle(key: string, value: string): void {\n\t\tif (key.indexOf('-') >= 0) {\n\t\t\tlet segments = key.split('-');\n\t\t\tkey = segments[0];\n\t\t\tfor (let i = 1; i < segments.length; i++) {\n\t\t\t\tlet segment = segments[i];\n\t\t\t\tkey = key + segment.charAt(0).toUpperCase() + segment.substr(1);\n\t\t\t}\n\t\t}\n\n\t\tthis.currentElement.style[this.cssKeyToJavaScriptProperty(key)] = value;\n\t}\n\n\tprivate cssKeyToJavaScriptProperty(key: string): string {\n\t\t// Automagically convert dashes as they are not allowed when programmatically\n\t\t// setting a CSS style property\n\n\t\tif (key.indexOf('-') >= 0) {\n\t\t\tlet segments = key.split('-');\n\t\t\tkey = segments[0];\n\t\t\tfor (let i = 1; i < segments.length; i++) {\n\t\t\t\tlet segment = segments[i];\n\t\t\t\tkey = key + segment.charAt(0).toUpperCase() + segment.substr(1);\n\t\t\t}\n\t\t}\n\n\t\t// Float is special too\n\t\telse if (key === 'float') {\n\t\t\tkey = 'cssFloat';\n\t\t}\n\n\t\treturn key;\n\t}\n\n\t/**\n\t * Returns the computed CSS style for the current HTML element of the builder.\n\t */\n\tpublic getComputedStyle(): CSSStyleDeclaration {\n\t\treturn DOM.getComputedStyle(this.currentElement);\n\t}\n\n\t/**\n\t * Adds the variable list of arguments as class names to the current HTML element of the builder.\n\t */\n\tpublic addClass(...classes: string[]): Builder {\n\t\tclasses.forEach((nameValue: string) => {\n\t\t\tlet names = nameValue.split(' ');\n\t\t\tnames.forEach((name: string) => {\n\t\t\t\tDOM.addClass(this.currentElement, name);\n\t\t\t});\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the class name of the current HTML element of the builder to the provided className.\n\t * If shouldAddClass is provided - for true class is added, for false class is removed.\n\t */\n\tpublic setClass(className: string, shouldAddClass: boolean = null): Builder {\n\t\tif (shouldAddClass === null) {\n\t\t\tthis.currentElement.className = className;\n\t\t} else if (shouldAddClass) {\n\t\t\tthis.addClass(className);\n\t\t} else {\n\t\t\tthis.removeClass(className);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Returns whether the current HTML element of the builder has the provided class assigned.\n\t */\n\tpublic hasClass(className: string): boolean {\n\t\treturn DOM.hasClass(this.currentElement, className);\n\t}\n\n\t/**\n\t * Removes the variable list of arguments as class names from the current HTML element of the builder.\n\t */\n\tpublic removeClass(...classes: string[]): Builder {\n\t\tclasses.forEach((nameValue: string) => {\n\t\t\tlet names = nameValue.split(' ');\n\t\t\tnames.forEach((name: string) => {\n\t\t\t\tDOM.removeClass(this.currentElement, name);\n\t\t\t});\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the first class to the current HTML element of the builder if the second class is currently set\n\t * and vice versa otherwise.\n\t */\n\tpublic swapClass(classA: string, classB: string): Builder {\n\t\tif (this.hasClass(classA)) {\n\t\t\tthis.removeClass(classA);\n\t\t\tthis.addClass(classB);\n\t\t} else {\n\t\t\tthis.removeClass(classB);\n\t\t\tthis.addClass(classA);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds or removes the provided className for the current HTML element of the builder.\n\t */\n\tpublic toggleClass(className: string): Builder {\n\t\tif (this.hasClass(className)) {\n\t\t\tthis.removeClass(className);\n\t\t} else {\n\t\t\tthis.addClass(className);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property color.\n\t */\n\tpublic color(color: string): Builder {\n\t\tthis.currentElement.style.color = color;\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property background.\n\t */\n\tpublic background(color: string): Builder {\n\t\tthis.currentElement.style.backgroundColor = color;\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property padding.\n\t */\n\tpublic padding(padding: string): Builder;\n\tpublic padding(top: number, right?: number, bottom?: number, left?: number): Builder;\n\tpublic padding(top: string, right?: string, bottom?: string, left?: string): Builder;\n\tpublic padding(top: any, right?: any, bottom?: any, left?: any): Builder {\n\t\tif (types.isString(top) && top.indexOf(' ') >= 0) {\n\t\t\treturn this.padding.apply(this, top.split(' '));\n\t\t}\n\n\t\tif (!types.isUndefinedOrNull(top)) {\n\t\t\tthis.currentElement.style.paddingTop = this.toPixel(top);\n\t\t}\n\n\t\tif (!types.isUndefinedOrNull(right)) {\n\t\t\tthis.currentElement.style.paddingRight = this.toPixel(right);\n\t\t}\n\n\t\tif (!types.isUndefinedOrNull(bottom)) {\n\t\t\tthis.currentElement.style.paddingBottom = this.toPixel(bottom);\n\t\t}\n\n\t\tif (!types.isUndefinedOrNull(left)) {\n\t\t\tthis.currentElement.style.paddingLeft = this.toPixel(left);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property margin.\n\t */\n\tpublic margin(margin: string): Builder;\n\tpublic margin(top: number, right?: number, bottom?: number, left?: number): Builder;\n\tpublic margin(top: string, right?: string, bottom?: string, left?: string): Builder;\n\tpublic margin(top: any, right?: any, bottom?: any, left?: any): Builder {\n\t\tif (types.isString(top) && top.indexOf(' ') >= 0) {\n\t\t\treturn this.margin.apply(this, top.split(' '));\n\t\t}\n\n\t\tif (!types.isUndefinedOrNull(top)) {\n\t\t\tthis.currentElement.style.marginTop = this.toPixel(top);\n\t\t}\n\n\t\tif (!types.isUndefinedOrNull(right)) {\n\t\t\tthis.currentElement.style.marginRight = this.toPixel(right);\n\t\t}\n\n\t\tif (!types.isUndefinedOrNull(bottom)) {\n\t\t\tthis.currentElement.style.marginBottom = this.toPixel(bottom);\n\t\t}\n\n\t\tif (!types.isUndefinedOrNull(left)) {\n\t\t\tthis.currentElement.style.marginLeft = this.toPixel(left);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property position.\n\t */\n\tpublic position(position: string): Builder;\n\tpublic position(top: number, right?: number, bottom?: number, left?: number, position?: string): Builder;\n\tpublic position(top: string, right?: string, bottom?: string, left?: string, position?: string): Builder;\n\tpublic position(top: any, right?: any, bottom?: any, left?: any, position?: string): Builder {\n\t\tif (types.isString(top) && top.indexOf(' ') >= 0) {\n\t\t\treturn this.position.apply(this, top.split(' '));\n\t\t}\n\n\t\tif (!types.isUndefinedOrNull(top)) {\n\t\t\tthis.currentElement.style.top = this.toPixel(top);\n\t\t}\n\n\t\tif (!types.isUndefinedOrNull(right)) {\n\t\t\tthis.currentElement.style.right = this.toPixel(right);\n\t\t}\n\n\t\tif (!types.isUndefinedOrNull(bottom)) {\n\t\t\tthis.currentElement.style.bottom = this.toPixel(bottom);\n\t\t}\n\n\t\tif (!types.isUndefinedOrNull(left)) {\n\t\t\tthis.currentElement.style.left = this.toPixel(left);\n\t\t}\n\n\t\tif (!position) {\n\t\t\tposition = 'absolute';\n\t\t}\n\n\t\tthis.currentElement.style.position = position;\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property size.\n\t */\n\tpublic size(size: string): Builder;\n\tpublic size(width: number, height?: number): Builder;\n\tpublic size(width: string, height?: string): Builder;\n\tpublic size(width: any, height?: any): Builder {\n\t\tif (types.isString(width) && width.indexOf(' ') >= 0) {\n\t\t\treturn this.size.apply(this, width.split(' '));\n\t\t}\n\n\t\tif (!types.isUndefinedOrNull(width)) {\n\t\t\tthis.currentElement.style.width = this.toPixel(width);\n\t\t}\n\n\t\tif (!types.isUndefinedOrNull(height)) {\n\t\t\tthis.currentElement.style.height = this.toPixel(height);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property min-size.\n\t */\n\tpublic minSize(size: string): Builder;\n\tpublic minSize(width: number, height?: number): Builder;\n\tpublic minSize(width: string, height?: string): Builder;\n\tpublic minSize(width: any, height?: any): Builder {\n\t\tif (types.isString(width) && width.indexOf(' ') >= 0) {\n\t\t\treturn this.minSize.apply(this, width.split(' '));\n\t\t}\n\n\t\tif (!types.isUndefinedOrNull(width)) {\n\t\t\tthis.currentElement.style.minWidth = this.toPixel(width);\n\t\t}\n\n\t\tif (!types.isUndefinedOrNull(height)) {\n\t\t\tthis.currentElement.style.minHeight = this.toPixel(height);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property max-size.\n\t */\n\tpublic maxSize(size: string): Builder;\n\tpublic maxSize(width: number, height?: number): Builder;\n\tpublic maxSize(width: string, height?: string): Builder;\n\tpublic maxSize(width: any, height?: any): Builder {\n\t\tif (types.isString(width) && width.indexOf(' ') >= 0) {\n\t\t\treturn this.maxSize.apply(this, width.split(' '));\n\t\t}\n\n\t\tif (!types.isUndefinedOrNull(width)) {\n\t\t\tthis.currentElement.style.maxWidth = this.toPixel(width);\n\t\t}\n\n\t\tif (!types.isUndefinedOrNull(height)) {\n\t\t\tthis.currentElement.style.maxHeight = this.toPixel(height);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property float.\n\t */\n\tpublic float(float: string): Builder {\n\t\tthis.currentElement.style.cssFloat = float;\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property clear.\n\t */\n\tpublic clear(clear: string): Builder {\n\t\tthis.currentElement.style.clear = clear;\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property for fonts back to default.\n\t */\n\tpublic normal(): Builder {\n\t\tthis.currentElement.style.fontStyle = 'normal';\n\t\tthis.currentElement.style.fontWeight = 'normal';\n\t\tthis.currentElement.style.textDecoration = 'none';\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property font-style to italic.\n\t */\n\tpublic italic(): Builder {\n\t\tthis.currentElement.style.fontStyle = 'italic';\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property font-weight to bold.\n\t */\n\tpublic bold(): Builder {\n\t\tthis.currentElement.style.fontWeight = 'bold';\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property text-decoration to underline.\n\t */\n\tpublic underline(): Builder {\n\t\tthis.currentElement.style.textDecoration = 'underline';\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property overflow.\n\t */\n\tpublic overflow(overflow: string): Builder {\n\t\tthis.currentElement.style.overflow = overflow;\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property display.\n\t */\n\tpublic display(display: string): Builder {\n\t\tthis.currentElement.style.display = display;\n\n\t\treturn this;\n\t}\n\n\tpublic disable(): Builder {\n\t\tthis.currentElement.setAttribute('disabled', 'disabled');\n\n\t\treturn this;\n\t}\n\n\tpublic enable(): Builder {\n\t\tthis.currentElement.removeAttribute('disabled');\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Shows the current element of the builder.\n\t */\n\tpublic show(): Builder {\n\t\tif (this.hasClass('builder-hidden')) {\n\t\t\tthis.removeClass('builder-hidden');\n\t\t}\n\n\t\tthis.attr('aria-hidden', 'false');\n\n\t\t// Cancel any pending showDelayed() invocation\n\t\tthis.cancelVisibilityPromise();\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Shows the current builder element after the provided delay. If the builder\n\t * was set to hidden using the hide() method before this method executed, the\n\t * function will return without showing the current element. This is useful to\n\t * only show the element when a specific delay is reached (e.g. for a long running\n\t * operation.\n\t */\n\tpublic showDelayed(delay: number): Builder {\n\n\t\t// Cancel any pending showDelayed() invocation\n\t\tthis.cancelVisibilityPromise();\n\n\t\tlet promise = TPromise.timeout(delay);\n\t\tthis.setProperty(VISIBILITY_BINDING_ID, promise);\n\n\t\tpromise.done(() => {\n\t\t\tthis.removeProperty(VISIBILITY_BINDING_ID);\n\t\t\tthis.show();\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Hides the current element of the builder.\n\t */\n\tpublic hide(): Builder {\n\t\tif (!this.hasClass('builder-hidden')) {\n\t\t\tthis.addClass('builder-hidden');\n\t\t}\n\t\tthis.attr('aria-hidden', 'true');\n\n\t\t// Cancel any pending showDelayed() invocation\n\t\tthis.cancelVisibilityPromise();\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Returns true if the current element of the builder is hidden.\n\t */\n\tpublic isHidden(): boolean {\n\t\treturn this.hasClass('builder-hidden') || this.currentElement.style.display === 'none';\n\t}\n\n\t/**\n\t * Toggles visibility of the current element of the builder.\n\t */\n\tpublic toggleVisibility(): Builder {\n\n\t\t// Cancel any pending showDelayed() invocation\n\t\tthis.cancelVisibilityPromise();\n\n\t\tthis.swapClass('builder-visible', 'builder-hidden');\n\n\t\tif (this.isHidden()) {\n\t\t\tthis.attr('aria-hidden', 'true');\n\t\t}\n\t\telse {\n\t\t\tthis.attr('aria-hidden', 'false');\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprivate cancelVisibilityPromise(): void {\n\t\tlet promise: TPromise = this.getProperty(VISIBILITY_BINDING_ID);\n\t\tif (promise) {\n\t\t\tpromise.cancel();\n\t\t\tthis.removeProperty(VISIBILITY_BINDING_ID);\n\t\t}\n\t}\n\n\t/**\n\t * Sets the CSS property border.\n\t */\n\tpublic border(border: string): Builder;\n\tpublic border(width: number, style?: string, color?: string): Builder;\n\tpublic border(width: any, style?: string, color?: string): Builder {\n\t\tif (types.isString(width) && width.indexOf(' ') >= 0) {\n\t\t\treturn this.border.apply(this, width.split(' '));\n\t\t}\n\n\t\tthis.currentElement.style.borderWidth = this.toPixel(width);\n\n\t\tif (color) {\n\t\t\tthis.currentElement.style.borderColor = color;\n\t\t}\n\n\t\tif (style) {\n\t\t\tthis.currentElement.style.borderStyle = style;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property border-top.\n\t */\n\tpublic borderTop(border: string): Builder;\n\tpublic borderTop(width: number, style: string, color: string): Builder;\n\tpublic borderTop(width: any, style?: string, color?: string): Builder {\n\t\tif (types.isString(width) && width.indexOf(' ') >= 0) {\n\t\t\treturn this.borderTop.apply(this, width.split(' '));\n\t\t}\n\n\t\tthis.currentElement.style.borderTopWidth = this.toPixel(width);\n\n\t\tif (color) {\n\t\t\tthis.currentElement.style.borderTopColor = color;\n\t\t}\n\n\t\tif (style) {\n\t\t\tthis.currentElement.style.borderTopStyle = style;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property border-bottom.\n\t */\n\tpublic borderBottom(border: string): Builder;\n\tpublic borderBottom(width: number, style: string, color: string): Builder;\n\tpublic borderBottom(width: any, style?: string, color?: string): Builder {\n\t\tif (types.isString(width) && width.indexOf(' ') >= 0) {\n\t\t\treturn this.borderBottom.apply(this, width.split(' '));\n\t\t}\n\n\t\tthis.currentElement.style.borderBottomWidth = this.toPixel(width);\n\n\t\tif (color) {\n\t\t\tthis.currentElement.style.borderBottomColor = color;\n\t\t}\n\n\t\tif (style) {\n\t\t\tthis.currentElement.style.borderBottomStyle = style;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property border-left.\n\t */\n\tpublic borderLeft(border: string): Builder;\n\tpublic borderLeft(width: number, style: string, color: string): Builder;\n\tpublic borderLeft(width: any, style?: string, color?: string): Builder {\n\t\tif (types.isString(width) && width.indexOf(' ') >= 0) {\n\t\t\treturn this.borderLeft.apply(this, width.split(' '));\n\t\t}\n\n\t\tthis.currentElement.style.borderLeftWidth = this.toPixel(width);\n\n\t\tif (color) {\n\t\t\tthis.currentElement.style.borderLeftColor = color;\n\t\t}\n\n\t\tif (style) {\n\t\t\tthis.currentElement.style.borderLeftStyle = style;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property border-right.\n\t */\n\tpublic borderRight(border: string): Builder;\n\tpublic borderRight(width: number, style: string, color: string): Builder;\n\tpublic borderRight(width: any, style?: string, color?: string): Builder {\n\t\tif (types.isString(width) && width.indexOf(' ') >= 0) {\n\t\t\treturn this.borderRight.apply(this, width.split(' '));\n\t\t}\n\n\t\tthis.currentElement.style.borderRightWidth = this.toPixel(width);\n\n\t\tif (color) {\n\t\t\tthis.currentElement.style.borderRightColor = color;\n\t\t}\n\n\t\tif (style) {\n\t\t\tthis.currentElement.style.borderRightStyle = style;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property text-align.\n\t */\n\tpublic textAlign(textAlign: string): Builder {\n\t\tthis.currentElement.style.textAlign = textAlign;\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the CSS property vertical-align.\n\t */\n\tpublic verticalAlign(valign: string): Builder {\n\t\tthis.currentElement.style.verticalAlign = valign;\n\n\t\treturn this;\n\t}\n\n\tprivate toPixel(obj: any): string {\n\t\tif (obj.toString().indexOf('px') === -1) {\n\t\t\treturn obj.toString() + 'px';\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\t/**\n\t * Sets the innerHTML attribute.\n\t */\n\tpublic innerHtml(html: string, append?: boolean): Builder {\n\t\tif (append) {\n\t\t\tthis.currentElement.innerHTML += html;\n\t\t} else {\n\t\t\tthis.currentElement.innerHTML = html;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the textContent property of the element.\n\t * All HTML special characters will be escaped.\n\t */\n\tpublic text(text: string, append?: boolean): Builder {\n\t\tif (append) {\n\t\t\t// children is child Elements versus childNodes includes textNodes\n\t\t\tif (this.currentElement.children.length === 0) {\n\t\t\t\tthis.currentElement.textContent += text;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// if there are elements inside this node, append the string as a new text node\n\t\t\t\t// to avoid wiping out the innerHTML and replacing it with only text content\n\t\t\t\tthis.currentElement.appendChild(document.createTextNode(text));\n\t\t\t}\n\t\t} else {\n\t\t\tthis.currentElement.textContent = text;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the innerHTML attribute in escaped form.\n\t */\n\tpublic safeInnerHtml(html: string, append?: boolean): Builder {\n\t\treturn this.innerHtml(strings.escape(html), append);\n\t}\n\n\t/**\n\t * Adds the provided object as property to the current element. Call getBinding()\n\t * to retrieve it again.\n\t */\n\tpublic bind(object: any): Builder {\n\t\tbindElement(this.currentElement, object);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes the binding of the current element.\n\t */\n\tpublic unbind(): Builder {\n\t\tunbindElement(this.currentElement);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Returns the object that was passed into the bind() call.\n\t */\n\tpublic getBinding(): any {\n\t\treturn getBindingFromElement(this.currentElement);\n\t}\n\n\t/**\n\t * Allows to store arbritary data into the current element.\n\t */\n\tpublic setProperty(key: string, value: any): Builder {\n\t\tsetPropertyOnElement(this.currentElement, key, value);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Allows to get arbritary data from the current element.\n\t */\n\tpublic getProperty(key: string, fallback?: any): any {\n\t\treturn getPropertyFromElement(this.currentElement, key, fallback);\n\t}\n\n\t/**\n\t * Removes a property from the current element that is stored under the given key.\n\t */\n\tpublic removeProperty(key: string): Builder {\n\t\tif (hasData(this.currentElement)) {\n\t\t\tdelete data(this.currentElement)[key];\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Returns a new builder with the parent element of the current element of the builder.\n\t */\n\tpublic parent(offdom?: boolean): Builder {\n\t\tassert.ok(!this.offdom, 'Builder was created with offdom = true and thus has no parent set');\n\n\t\treturn withElement(this.currentElement.parentNode, offdom);\n\t}\n\n\t/**\n\t * Returns a new builder with all child elements of the current element of the builder.\n\t */\n\tpublic children(offdom?: boolean): MultiBuilder {\n\t\tlet children = this.currentElement.children;\n\n\t\tlet builders: Builder[] = [];\n\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\tbuilders.push(withElement(children.item(i), offdom));\n\t\t}\n\n\t\treturn new MultiBuilder(builders);\n\t}\n\n\t/**\n\t * Returns a new builder with the child at the given index.\n\t */\n\tpublic child(index = 0): Builder {\n\t\tlet children = this.currentElement.children;\n\n\t\treturn withElement(children.item(index));\n\t}\n\n\t/**\n\t * Removes the current HTMLElement from the given builder from this builder if this builders\n\t * current HTMLElement is the direct parent.\n\t */\n\tpublic removeChild(builder: Builder): Builder {\n\t\tif (this.currentElement === builder.parent().getHTMLElement()) {\n\t\t\tthis.currentElement.removeChild(builder.getHTMLElement());\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Returns a new builder with all elements matching the provided selector scoped to the\n\t * current element of the builder. Use Build.withElementsBySelector() to run the selector\n\t * over the entire DOM.\n\t * The returned builder is an instance of array that can have 0 elements if the selector does not match any\n\t * elements.\n\t */\n\tpublic select(selector: string, offdom?: boolean): MultiBuilder {\n\t\tassert.ok(types.isString(selector), 'Expected String as parameter');\n\n\t\tlet elements = this.currentElement.querySelectorAll(selector);\n\n\t\tlet builders: Builder[] = [];\n\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\tbuilders.push(withElement(elements.item(i), offdom));\n\t\t}\n\n\t\treturn new MultiBuilder(builders);\n\t}\n\n\t/**\n\t * Returns true if the current element of the builder matches the given selector and false otherwise.\n\t */\n\tpublic matches(selector: string): boolean {\n\t\tlet element = this.currentElement;\n\t\tlet matches = (element).webkitMatchesSelector || (element).mozMatchesSelector || (element).msMatchesSelector || (element).oMatchesSelector;\n\n\t\treturn matches && matches.call(element, selector);\n\t}\n\n\t/**\n\t * Returns true if the current element of the builder has no children.\n\t */\n\tpublic isEmpty(): boolean {\n\t\treturn !this.currentElement.childNodes || this.currentElement.childNodes.length === 0;\n\t}\n\n\t/**\n\t * Recurse through all descendant nodes and remove their data binding.\n\t */\n\tprivate unbindDescendants(current: HTMLElement): void {\n\t\tif (current && current.children) {\n\t\t\tfor (let i = 0, length = current.children.length; i < length; i++) {\n\t\t\t\tlet element = current.children.item(i);\n\n\t\t\t\t// Unbind\n\t\t\t\tif (hasData(element)) {\n\n\t\t\t\t\t// Listeners\n\t\t\t\t\tlet listeners: IDisposable[] = data(element)[LISTENER_BINDING_ID];\n\t\t\t\t\tif (types.isArray(listeners)) {\n\t\t\t\t\t\twhile (listeners.length) {\n\t\t\t\t\t\t\tlisteners.pop().dispose();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Delete Data Slot\n\t\t\t\t\tdelete element[MS_DATA_KEY];\n\t\t\t\t}\n\n\t\t\t\t// Recurse\n\t\t\t\tthis.unbindDescendants(element);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Removes all HTML elements from the current element of the builder. Will also clean up any\n\t * event listners registered and also clear any data binding and properties stored\n\t * to any child element.\n\t */\n\tpublic empty(): Builder {\n\t\tthis.unbindDescendants(this.currentElement);\n\n\t\tthis.clearChildren();\n\n\t\tif (this.offdom) {\n\t\t\tthis.createdElements = [];\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes all HTML elements from the current element of the builder.\n\t */\n\tpublic clearChildren(): Builder {\n\t\t// Remove Elements\n\t\tif (this.currentElement) {\n\t\t\tDOM.clearNode(this.currentElement);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes the current HTML element and all its children from its parent and unbinds\n\t * all listeners and properties set to the data slots.\n\t */\n\tpublic destroy(): void {\n\n\t\tif (this.currentElement) {\n\n\t\t\t// Remove from parent\n\t\t\tif (this.currentElement.parentNode) {\n\t\t\t\tthis.currentElement.parentNode.removeChild(this.currentElement);\n\t\t\t}\n\n\t\t\t// Empty to clear listeners and bindings from children\n\t\t\tthis.empty();\n\n\t\t\t// Unbind\n\t\t\tif (hasData(this.currentElement)) {\n\n\t\t\t\t// Listeners\n\t\t\t\tlet listeners: IDisposable[] = data(this.currentElement)[LISTENER_BINDING_ID];\n\t\t\t\tif (types.isArray(listeners)) {\n\t\t\t\t\twhile (listeners.length) {\n\t\t\t\t\t\tlisteners.pop().dispose();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Delete Data Slot\n\t\t\t\tdelete this.currentElement[MS_DATA_KEY];\n\t\t\t}\n\t\t}\n\n\t\tlet type: string;\n\n\t\tfor (type in this.toUnbind) {\n\t\t\tif (this.toUnbind.hasOwnProperty(type) && types.isArray(this.toUnbind[type])) {\n\t\t\t\tthis.toUnbind[type] = dispose(this.toUnbind[type]);\n\t\t\t}\n\t\t}\n\n\t\tfor (type in this.captureToUnbind) {\n\t\t\tif (this.captureToUnbind.hasOwnProperty(type) && types.isArray(this.captureToUnbind[type])) {\n\t\t\t\tthis.captureToUnbind[type] = dispose(this.captureToUnbind[type]);\n\t\t\t}\n\t\t}\n\n\t\t// Nullify fields\n\t\tthis.currentElement = null;\n\t\tthis.container = null;\n\t\tthis.offdom = null;\n\t\tthis.createdElements = null;\n\t\tthis.captureToUnbind = null;\n\t\tthis.toUnbind = null;\n\t}\n\n\t/**\n\t * Removes the current HTML element and all its children from its parent and unbinds\n\t * all listeners and properties set to the data slots.\n\t */\n\tpublic dispose(): void {\n\t\tthis.destroy();\n\t}\n\n\t/**\n\t * Gets the size (in pixels) of an element, including the margin.\n\t */\n\tpublic getTotalSize(): Dimension {\n\t\tlet totalWidth = DOM.getTotalWidth(this.currentElement);\n\t\tlet totalHeight = DOM.getTotalHeight(this.currentElement);\n\n\t\treturn new Dimension(totalWidth, totalHeight);\n\t}\n\n\t/**\n\t * Gets the size (in pixels) of the inside of the element, excluding the border and padding.\n\t */\n\tpublic getContentSize(): Dimension {\n\t\tlet contentWidth = DOM.getContentWidth(this.currentElement);\n\t\tlet contentHeight = DOM.getContentHeight(this.currentElement);\n\n\t\treturn new Dimension(contentWidth, contentHeight);\n\t}\n\n\t/**\n\t * Another variant of getting the inner dimensions of an element.\n\t */\n\tpublic getClientArea(): Dimension {\n\n\t\t// 0.) Try with DOM clientWidth / clientHeight\n\t\tif (this.currentElement !== document.body) {\n\t\t\treturn new Dimension(this.currentElement.clientWidth, this.currentElement.clientHeight);\n\t\t}\n\n\t\t// 1.) Try innerWidth / innerHeight\n\t\tif (window.innerWidth && window.innerHeight) {\n\t\t\treturn new Dimension(window.innerWidth, window.innerHeight);\n\t\t}\n\n\t\t// 2.) Try with document.body.clientWidth / document.body.clientHeigh\n\t\tif (document.body && document.body.clientWidth && document.body.clientWidth) {\n\t\t\treturn new Dimension(document.body.clientWidth, document.body.clientHeight);\n\t\t}\n\n\t\t// 3.) Try with document.documentElement.clientWidth / document.documentElement.clientHeight\n\t\tif (document.documentElement && document.documentElement.clientWidth && document.documentElement.clientHeight) {\n\t\t\treturn new Dimension(document.documentElement.clientWidth, document.documentElement.clientHeight);\n\t\t}\n\n\t\tthrow new Error('Unable to figure out browser width and height');\n\t}\n}\n\n/**\n * The multi builder provides the same methods as the builder, but allows to call\n * them on an array of builders.\n */\nexport class MultiBuilder extends Builder {\n\n\tpublic length: number;\n\n\tprivate builders: Builder[];\n\n\tconstructor(multiBuilder: MultiBuilder);\n\tconstructor(builder: Builder);\n\tconstructor(builders: Builder[]);\n\tconstructor(elements: HTMLElement[]);\n\tconstructor(builders: any) {\n\t\tassert.ok(types.isArray(builders) || builders instanceof MultiBuilder, 'Expected Array or MultiBuilder as parameter');\n\n\t\tsuper();\n\t\tthis.length = 0;\n\t\tthis.builders = [];\n\n\t\t// Add Builders to Array\n\t\tif (types.isArray(builders)) {\n\t\t\tfor (let i = 0; i < builders.length; i++) {\n\t\t\t\tif (builders[i] instanceof HTMLElement) {\n\t\t\t\t\tthis.push(withElement(builders[i]));\n\t\t\t\t} else {\n\t\t\t\t\tthis.push(builders[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (let i = 0; i < (builders).length; i++) {\n\t\t\t\tthis.push((builders).item(i));\n\t\t\t}\n\t\t}\n\n\t\t// Mixin Builder functions to operate on all builders\n\t\tlet $outer = this;\n\t\tlet propertyFn = (prop: string) => {\n\t\t\t($outer)[prop] = function (): any {\n\t\t\t\tlet args = Array.prototype.slice.call(arguments);\n\n\t\t\t\tlet returnValues: any[];\n\t\t\t\tlet mergeBuilders = false;\n\n\t\t\t\tfor (let i = 0; i < $outer.length; i++) {\n\t\t\t\t\tlet res = ($outer.item(i))[prop].apply($outer.item(i), args);\n\n\t\t\t\t\t// Merge MultiBuilders into one\n\t\t\t\t\tif (res instanceof MultiBuilder) {\n\t\t\t\t\t\tif (!returnValues) {\n\t\t\t\t\t\t\treturnValues = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmergeBuilders = true;\n\n\t\t\t\t\t\tfor (let j = 0; j < (res).length; j++) {\n\t\t\t\t\t\t\treturnValues.push((res).item(j));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Any other Return Type (e.g. boolean, integer)\n\t\t\t\t\telse if (!types.isUndefined(res) && !(res instanceof Builder)) {\n\t\t\t\t\t\tif (!returnValues) {\n\t\t\t\t\t\t\treturnValues = [];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturnValues.push(res);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (returnValues && mergeBuilders) {\n\t\t\t\t\treturn new MultiBuilder(returnValues);\n\t\t\t\t}\n\n\t\t\t\treturn returnValues || $outer;\n\t\t\t};\n\t\t};\n\n\t\tfor (let prop in Builder.prototype) {\n\t\t\tif (prop !== 'clone' && prop !== 'and') { // Skip methods that are explicitly defined in MultiBuilder\n\t\t\t\tif (Builder.prototype.hasOwnProperty(prop) && types.isFunction((Builder).prototype[prop])) {\n\t\t\t\t\tpropertyFn(prop);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic item(i: number): Builder {\n\t\treturn this.builders[i];\n\t}\n\n\tpublic push(...items: Builder[]): void {\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\tthis.builders.push(items[i]);\n\t\t}\n\n\t\tthis.length = this.builders.length;\n\t}\n\n\tpublic pop(): Builder {\n\t\tlet element = this.builders.pop();\n\t\tthis.length = this.builders.length;\n\n\t\treturn element;\n\t}\n\n\tpublic concat(items: Builder[]): Builder[] {\n\t\tlet elements = this.builders.concat(items);\n\t\tthis.length = this.builders.length;\n\n\t\treturn elements;\n\t}\n\n\tpublic shift(): Builder {\n\t\tlet element = this.builders.shift();\n\t\tthis.length = this.builders.length;\n\n\t\treturn element;\n\t}\n\n\tpublic unshift(item: Builder): number {\n\t\tlet res = this.builders.unshift(item);\n\t\tthis.length = this.builders.length;\n\n\t\treturn res;\n\t}\n\n\tpublic slice(start: number, end?: number): Builder[] {\n\t\tlet elements = this.builders.slice(start, end);\n\t\tthis.length = this.builders.length;\n\n\t\treturn elements;\n\t}\n\n\tpublic splice(start: number, deleteCount?: number): Builder[] {\n\t\tlet elements = this.builders.splice(start, deleteCount);\n\t\tthis.length = this.builders.length;\n\n\t\treturn elements;\n\t}\n\n\tpublic clone(): MultiBuilder {\n\t\treturn new MultiBuilder(this);\n\t}\n\n\tpublic and(element: HTMLElement): MultiBuilder;\n\tpublic and(builder: Builder): MultiBuilder;\n\tpublic and(obj: any): MultiBuilder {\n\n\t\t// Convert HTMLElement to Builder as necessary\n\t\tif (!(obj instanceof Builder) && !(obj instanceof MultiBuilder)) {\n\t\t\tobj = new Builder((obj));\n\t\t}\n\n\t\tlet builders: Builder[] = [];\n\t\tif (obj instanceof MultiBuilder) {\n\t\t\tfor (let i = 0; i < (obj).length; i++) {\n\t\t\t\tbuilders.push((obj).item(i));\n\t\t\t}\n\t\t} else {\n\t\t\tbuilders.push(obj);\n\t\t}\n\n\t\tthis.push.apply(this, builders);\n\n\t\treturn this;\n\t}\n}\n\nfunction withBuilder(builder: Builder, offdom?: boolean): Builder {\n\tif (builder instanceof MultiBuilder) {\n\t\treturn new MultiBuilder((builder));\n\t}\n\n\treturn new Builder(builder.getHTMLElement(), offdom);\n}\n\nfunction withElement(element: HTMLElement, offdom?: boolean): Builder {\n\treturn new Builder(element, offdom);\n}\n\nfunction offDOM(): Builder {\n\treturn new Builder(null, true);\n}\n\n// Binding functions\n\n/**\n * Allows to store arbritary data into element.\n */\nexport function setPropertyOnElement(element: HTMLElement, key: string, value: any): void {\n\tdata(element)[key] = value;\n}\n\n/**\n * Allows to get arbritary data from element.\n */\nexport function getPropertyFromElement(element: HTMLElement, key: string, fallback?: any): any {\n\tif (hasData(element)) {\n\t\tlet value = data(element)[key];\n\t\tif (!types.isUndefined(value)) {\n\t\t\treturn value;\n\t\t}\n\t}\n\n\treturn fallback;\n}\n\n/**\n * Removes a property from an element.\n */\nexport function removePropertyFromElement(element: HTMLElement, key: string): void {\n\tif (hasData(element)) {\n\t\tdelete data(element)[key];\n\t}\n}\n\n/**\n * Adds the provided object as property to the given element. Call getBinding()\n * to retrieve it again.\n */\nexport function bindElement(element: HTMLElement, object: any): void {\n\tsetPropertyOnElement(element, DATA_BINDING_ID, object);\n}\n\n/**\n * Removes the binding of the given element.\n */\nexport function unbindElement(element: HTMLElement): void {\n\tremovePropertyFromElement(element, DATA_BINDING_ID);\n}\n\n/**\n * Returns the object that was passed into the bind() call for the element.\n */\nexport function getBindingFromElement(element: HTMLElement): any {\n\treturn getPropertyFromElement(element, DATA_BINDING_ID);\n}\n\nexport let Binding = {\n\tsetPropertyOnElement: setPropertyOnElement,\n\tgetPropertyFromElement: getPropertyFromElement,\n\tremovePropertyFromElement: removePropertyFromElement,\n\tbindElement: bindElement,\n\tunbindElement: unbindElement,\n\tgetBindingFromElement: getBindingFromElement\n};\n\nlet SELECTOR_REGEX = /([\\w\\-]+)?(#([\\w\\-]+))?((.([\\w\\-]+))*)/;\n\nexport let $: QuickBuilder = function (arg?: any): Builder {\n\n\t// Off-DOM use\n\tif (types.isUndefined(arg)) {\n\t\treturn offDOM();\n\t}\n\n\t// Falsified values cause error otherwise\n\tif (!arg) {\n\t\tthrow new Error('Bad use of $');\n\t}\n\n\t// Wrap the given element\n\tif (DOM.isHTMLElement(arg) || arg === window) {\n\t\treturn withElement(arg);\n\t}\n\n\t// Wrap the given builders\n\tif (types.isArray(arg)) {\n\t\treturn new MultiBuilder(arg);\n\t}\n\n\t// Wrap the given builder\n\tif (arg instanceof Builder) {\n\t\treturn withBuilder((arg));\n\t}\n\n\tif (types.isString(arg)) {\n\n\t\t// Use the argument as HTML code\n\t\tif (arg[0] === '<') {\n\t\t\tlet element: Node;\n\t\t\tlet container = document.createElement('div');\n\t\t\tcontainer.innerHTML = strings.format.apply(strings, arguments);\n\n\t\t\tif (container.children.length === 0) {\n\t\t\t\tthrow new Error('Bad use of $');\n\t\t\t}\n\n\t\t\tif (container.children.length === 1) {\n\t\t\t\telement = container.firstChild;\n\t\t\t\tcontainer.removeChild(element);\n\n\t\t\t\treturn withElement(element);\n\t\t\t}\n\n\t\t\tlet builders: Builder[] = [];\n\t\t\twhile (container.firstChild) {\n\t\t\t\telement = container.firstChild;\n\t\t\t\tcontainer.removeChild(element);\n\t\t\t\tbuilders.push(withElement(element));\n\t\t\t}\n\n\t\t\treturn new MultiBuilder(builders);\n\t\t}\n\n\t\t// Use the argument as a selector constructor\n\t\telse if (arguments.length === 1) {\n\t\t\tlet match = SELECTOR_REGEX.exec(arg);\n\t\t\tif (!match) {\n\t\t\t\tthrow new Error('Bad use of $');\n\t\t\t}\n\n\t\t\tlet tag = match[1] || 'div';\n\t\t\tlet id = match[3] || undefined;\n\t\t\tlet classes = (match[4] || '').replace(/\\./g, ' ');\n\n\t\t\tlet props: any = {};\n\t\t\tif (id) {\n\t\t\t\tprops['id'] = id;\n\t\t\t}\n\n\t\t\tif (classes) {\n\t\t\t\tprops['class'] = classes;\n\t\t\t}\n\n\t\t\treturn offDOM().element(tag, props);\n\t\t}\n\n\t\t// Use the arguments as the arguments to Builder#element(...)\n\t\telse {\n\t\t\tlet result = offDOM();\n\t\t\tresult.element.apply(result, arguments);\n\t\t\treturn result;\n\t\t}\n\t} else {\n\t\tthrow new Error('Bad use of $');\n\t}\n};\n\n($).Box = Box;\n($).Dimension = Dimension;\n($).Position = Position;\n($).Builder = Builder;\n($).MultiBuilder = MultiBuilder;\n($).Build = Build;\n($).Binding = Binding;","/*---------------------------------------------------------------------------------------------\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'use strict';\n\nimport 'vs/css!./checkbox';\n\nimport DOM = require('vs/base/browser/dom');\nimport * as objects from 'vs/base/common/objects';\nimport { KeyCode } from 'vs/base/common/keyCodes';\nimport { Widget } from 'vs/base/browser/ui/widget';\nimport { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport { Color } from 'vs/base/common/color';\n\nexport interface ICheckboxOpts extends ICheckboxStyles {\n\tactionClassName: string;\n\ttitle: string;\n\tisChecked: boolean;\n\tonChange: (viaKeyboard: boolean) => void;\n\tonKeyDown?: (e: IKeyboardEvent) => void;\n}\n\nexport interface ICheckboxStyles {\n\tinputActiveOptionBorder?: Color;\n}\n\nconst defaultOpts = {\n\tinputActiveOptionBorder: Color.fromHex('#007ACC')\n};\n\nexport class Checkbox extends Widget {\n\n\tprivate _opts: ICheckboxOpts;\n\tpublic domNode: HTMLElement;\n\n\tprivate _checked: boolean;\n\n\tconstructor(opts: ICheckboxOpts) {\n\t\tsuper();\n\t\tthis._opts = objects.clone(opts);\n\t\tobjects.mixin(this._opts, defaultOpts, false);\n\t\tthis._checked = this._opts.isChecked;\n\n\t\tthis.domNode = document.createElement('div');\n\t\tthis.domNode.title = this._opts.title;\n\t\tthis.domNode.className = this._className();\n\t\tthis.domNode.tabIndex = 0;\n\t\tthis.domNode.setAttribute('role', 'checkbox');\n\t\tthis.domNode.setAttribute('aria-checked', String(this._checked));\n\t\tthis.domNode.setAttribute('aria-label', this._opts.title);\n\n\t\tthis.applyStyles();\n\n\t\tthis.onclick(this.domNode, (ev) => {\n\t\t\tthis.checked = !this._checked;\n\t\t\tthis._opts.onChange(false);\n\t\t\tev.preventDefault();\n\t\t});\n\n\t\tthis.onkeydown(this.domNode, (keyboardEvent) => {\n\t\t\tif (keyboardEvent.keyCode === KeyCode.Space || keyboardEvent.keyCode === KeyCode.Enter) {\n\t\t\t\tthis.checked = !this._checked;\n\t\t\t\tthis._opts.onChange(true);\n\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this._opts.onKeyDown) {\n\t\t\t\tthis._opts.onKeyDown(keyboardEvent);\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic focus(): void {\n\t\tthis.domNode.focus();\n\t}\n\n\tpublic get checked(): boolean {\n\t\treturn this._checked;\n\t}\n\n\tpublic set checked(newIsChecked: boolean) {\n\t\tthis._checked = newIsChecked;\n\t\tthis.domNode.setAttribute('aria-checked', String(this._checked));\n\t\tthis.domNode.className = this._className();\n\t\tthis.applyStyles();\n\t}\n\n\tprivate _className(): string {\n\t\treturn 'custom-checkbox ' + this._opts.actionClassName + ' ' + (this._checked ? 'checked' : 'unchecked');\n\t}\n\n\tpublic width(): number {\n\t\treturn 2 /*marginleft*/ + 2 /*border*/ + 2 /*padding*/ + 16 /* icon width */;\n\t}\n\n\tpublic style(styles: ICheckboxStyles): void {\n\t\tif (styles.inputActiveOptionBorder) {\n\t\t\tthis._opts.inputActiveOptionBorder = styles.inputActiveOptionBorder;\n\t\t}\n\t\tthis.applyStyles();\n\t}\n\n\tprotected applyStyles(): void {\n\t\tif (this.domNode) {\n\t\t\tthis.domNode.style.borderColor = this._checked && this._opts.inputActiveOptionBorder ? this._opts.inputActiveOptionBorder.toString() : null;\n\t\t}\n\t}\n\n\tpublic enable(): void {\n\t\tthis.domNode.tabIndex = 0;\n\t\tthis.domNode.setAttribute('aria-disabled', String(false));\n\t}\n\n\tpublic disable(): void {\n\t\tDOM.removeTabIndexAndUpdateFocus(this.domNode);\n\t\tthis.domNode.setAttribute('aria-disabled', String(true));\n\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 *--------------------------------------------------------------------------------------------*/\n\n\n'use strict';\n\nimport 'vs/css!./contextview';\nimport { Builder, $ } from 'vs/base/browser/builder';\nimport DOM = require('vs/base/browser/dom');\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { EventEmitter } from 'vs/base/common/eventEmitter';\n\nexport interface IAnchor {\n\tx: number;\n\ty: number;\n\twidth?: number;\n\theight?: number;\n}\n\nexport enum AnchorAlignment {\n\tLEFT, RIGHT\n}\n\nexport enum AnchorPosition {\n\tBELOW, ABOVE\n}\n\nexport interface IDelegate {\n\tgetAnchor(): HTMLElement | IAnchor;\n\trender(container: HTMLElement): IDisposable;\n\tlayout?(): void;\n\tanchorAlignment?: AnchorAlignment; // default: left\n\tanchorPosition?: AnchorPosition; // default: below\n\tcanRelayout?: boolean; // default: true\n\tonDOMEvent?(e: Event, activeElement: HTMLElement): void;\n\tonHide?(data?: any): void;\n}\n\nexport interface IContextViewProvider {\n\tshowContextView(delegate: IDelegate): void;\n\thideContextView(): void;\n\tlayout(): void;\n}\n\nexport interface IPosition {\n\ttop: number;\n\tleft: number;\n}\n\nexport interface ISize {\n\twidth: number;\n\theight: number;\n}\n\nexport interface IView extends IPosition, ISize { }\n\nfunction layout(view: ISize, around: IView, viewport: IView, anchorPosition: AnchorPosition, anchorAlignment: AnchorAlignment): IPosition {\n\n\tlet chooseBiased = (a: number, aIsGood: boolean, b: number, bIsGood: boolean) => {\n\t\tif (aIsGood) {\n\t\t\treturn a;\n\t\t}\n\t\tif (bIsGood) {\n\t\t\treturn b;\n\t\t}\n\t\treturn a;\n\t};\n\n\tlet chooseOne = (a: number, aIsGood: boolean, b: number, bIsGood: boolean, aIsPreferred: boolean) => {\n\t\tif (aIsPreferred) {\n\t\t\treturn chooseBiased(a, aIsGood, b, bIsGood);\n\t\t} else {\n\t\t\treturn chooseBiased(b, bIsGood, a, aIsGood);\n\t\t}\n\t};\n\n\tlet top = (() => {\n\t\t// Compute both options (putting the segment above and below)\n\t\tlet posAbove = around.top - view.height;\n\t\tlet posBelow = around.top + around.height;\n\n\t\t// Check for both options if they are good\n\t\tlet aboveIsGood = (posAbove >= viewport.top && posAbove + view.height <= viewport.top + viewport.height);\n\t\tlet belowIsGood = (posBelow >= viewport.top && posBelow + view.height <= viewport.top + viewport.height);\n\n\t\treturn chooseOne(posAbove, aboveIsGood, posBelow, belowIsGood, anchorPosition === AnchorPosition.ABOVE);\n\t})();\n\n\tlet left = (() => {\n\t\t// Compute both options (aligning left and right)\n\t\tlet posLeft = around.left;\n\t\tlet posRight = around.left + around.width - view.width;\n\n\t\t// Check for both options if they are good\n\t\tlet leftIsGood = (posLeft >= viewport.left && posLeft + view.width <= viewport.left + viewport.width);\n\t\tlet rightIsGood = (posRight >= viewport.left && posRight + view.width <= viewport.left + viewport.width);\n\n\t\treturn chooseOne(posLeft, leftIsGood, posRight, rightIsGood, anchorAlignment === AnchorAlignment.LEFT);\n\t})();\n\n\treturn { top: top, left: left };\n}\n\nexport class ContextView extends EventEmitter {\n\n\tprivate static BUBBLE_UP_EVENTS = ['click', 'keydown', 'focus', 'blur'];\n\tprivate static BUBBLE_DOWN_EVENTS = ['click'];\n\n\tprivate $container: Builder;\n\tprivate $view: Builder;\n\tprivate delegate: IDelegate;\n\tprivate toDispose: IDisposable[];\n\tprivate toDisposeOnClean: IDisposable;\n\n\tconstructor(container: HTMLElement) {\n\t\tsuper();\n\t\tthis.$view = $('.context-view').hide();\n\t\tthis.setContainer(container);\n\n\t\tthis.toDispose = [{\n\t\t\tdispose: () => {\n\t\t\t\tthis.setContainer(null);\n\t\t\t}\n\t\t}];\n\n\t\tthis.toDisposeOnClean = null;\n\t}\n\n\tpublic setContainer(container: HTMLElement): void {\n\t\tif (this.$container) {\n\t\t\tthis.$container.off(ContextView.BUBBLE_UP_EVENTS);\n\t\t\tthis.$container.off(ContextView.BUBBLE_DOWN_EVENTS, true);\n\t\t\tthis.$container = null;\n\t\t}\n\t\tif (container) {\n\t\t\tthis.$container = $(container);\n\t\t\tthis.$view.appendTo(this.$container);\n\t\t\tthis.$container.on(ContextView.BUBBLE_UP_EVENTS, (e: Event) => {\n\t\t\t\tthis.onDOMEvent(e, document.activeElement, false);\n\t\t\t});\n\t\t\tthis.$container.on(ContextView.BUBBLE_DOWN_EVENTS, (e: Event) => {\n\t\t\t\tthis.onDOMEvent(e, document.activeElement, true);\n\t\t\t}, null, true);\n\t\t}\n\t}\n\n\tpublic show(delegate: IDelegate): void {\n\t\tif (this.isVisible()) {\n\t\t\tthis.hide();\n\t\t}\n\n\t\t// Show static box\n\t\tthis.$view.setClass('context-view').empty().style({ top: '0px', left: '0px' }).show();\n\n\t\t// Render content\n\t\tthis.toDisposeOnClean = delegate.render(this.$view.getHTMLElement());\n\n\t\t// Set active delegate\n\t\tthis.delegate = delegate;\n\n\t\t// Layout\n\t\tthis.doLayout();\n\t}\n\n\tpublic layout(): void {\n\t\tif (!this.isVisible()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.delegate.canRelayout === false) {\n\t\t\tthis.hide();\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.delegate.layout) {\n\t\t\tthis.delegate.layout();\n\t\t}\n\n\t\tthis.doLayout();\n\t}\n\n\tprivate doLayout(): void {\n\t\t// Get anchor\n\t\tlet anchor = this.delegate.getAnchor();\n\n\t\t// Compute around\n\t\tlet around: IView;\n\n\t\t// Get the element's position and size (to anchor the view)\n\t\tif (DOM.isHTMLElement(anchor)) {\n\t\t\tlet elementPosition = DOM.getDomNodePagePosition(anchor);\n\n\t\t\taround = {\n\t\t\t\ttop: elementPosition.top,\n\t\t\t\tleft: elementPosition.left,\n\t\t\t\twidth: elementPosition.width,\n\t\t\t\theight: elementPosition.height\n\t\t\t};\n\t\t} else {\n\t\t\tlet realAnchor = anchor;\n\n\t\t\taround = {\n\t\t\t\ttop: realAnchor.y,\n\t\t\t\tleft: realAnchor.x,\n\t\t\t\twidth: realAnchor.width || 0,\n\t\t\t\theight: realAnchor.height || 0\n\t\t\t};\n\t\t}\n\n\t\tlet viewport = {\n\t\t\ttop: DOM.StandardWindow.scrollY,\n\t\t\tleft: DOM.StandardWindow.scrollX,\n\t\t\theight: window.innerHeight,\n\t\t\twidth: window.innerWidth\n\t\t};\n\n\t\t// Get the view's size\n\t\tlet viewSize = this.$view.getTotalSize();\n\t\tlet view = { width: viewSize.width, height: viewSize.height };\n\n\t\tlet anchorPosition = this.delegate.anchorPosition || AnchorPosition.BELOW;\n\t\tlet anchorAlignment = this.delegate.anchorAlignment || AnchorAlignment.LEFT;\n\n\t\tlet result = layout(view, around, viewport, anchorPosition, anchorAlignment);\n\n\t\tlet containerPosition = DOM.getDomNodePagePosition(this.$container.getHTMLElement());\n\t\tresult.top -= containerPosition.top;\n\t\tresult.left -= containerPosition.left;\n\n\t\tthis.$view.removeClass('top', 'bottom', 'left', 'right');\n\t\tthis.$view.addClass(anchorPosition === AnchorPosition.BELOW ? 'bottom' : 'top');\n\t\tthis.$view.addClass(anchorAlignment === AnchorAlignment.LEFT ? 'left' : 'right');\n\t\tthis.$view.style({ top: result.top + 'px', left: result.left + 'px', width: 'initial' });\n\t}\n\n\tpublic hide(data?: any): void {\n\t\tif (this.delegate && this.delegate.onHide) {\n\t\t\tthis.delegate.onHide(data);\n\t\t}\n\n\t\tthis.delegate = null;\n\n\t\tif (this.toDisposeOnClean) {\n\t\t\tthis.toDisposeOnClean.dispose();\n\t\t\tthis.toDisposeOnClean = null;\n\t\t}\n\n\t\tthis.$view.hide();\n\t}\n\n\tprivate isVisible(): boolean {\n\t\treturn !!this.delegate;\n\t}\n\n\tprivate onDOMEvent(e: Event, element: HTMLElement, onCapture: boolean): void {\n\t\tif (this.delegate) {\n\t\t\tif (this.delegate.onDOMEvent) {\n\t\t\t\tthis.delegate.onDOMEvent(e, document.activeElement);\n\t\t\t} else if (onCapture && !DOM.isAncestor(e.target, this.$container.getHTMLElement())) {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t\tthis.hide();\n\n\t\tthis.toDispose = dispose(this.toDispose);\n\t}\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'use strict';\n\nimport 'vs/css!./countBadge';\nimport { $, append } from 'vs/base/browser/dom';\nimport { format } from 'vs/base/common/strings';\nimport { Color } from 'vs/base/common/color';\nimport { mixin } from 'vs/base/common/objects';\n\nexport interface ICountBadgeOptions extends ICountBadgetyles {\n\tcount?: number;\n\ttitleFormat?: string;\n}\n\nexport interface ICountBadgetyles {\n\tbadgeBackground?: Color;\n\tbadgeForeground?: Color;\n\tbadgeBorder?: Color;\n}\n\nconst defaultOpts = {\n\tbadgeBackground: Color.fromHex('#4D4D4D'),\n\tbadgeForeground: Color.fromHex('#FFFFFF')\n};\n\nexport class CountBadge {\n\n\tprivate element: HTMLElement;\n\tprivate count: number;\n\tprivate titleFormat: string;\n\n\tprivate badgeBackground: Color;\n\tprivate badgeForeground: Color;\n\tprivate badgeBorder: Color;\n\n\tprivate options: ICountBadgeOptions;\n\n\tconstructor(container: HTMLElement, options?: ICountBadgeOptions) {\n\t\tthis.options = options || Object.create(null);\n\t\tmixin(this.options, defaultOpts, false);\n\n\t\tthis.badgeBackground = this.options.badgeBackground;\n\t\tthis.badgeForeground = this.options.badgeForeground;\n\t\tthis.badgeBorder = this.options.badgeBorder;\n\n\t\tthis.element = append(container, $('.monaco-count-badge'));\n\t\tthis.titleFormat = this.options.titleFormat || '';\n\t\tthis.setCount(this.options.count || 0);\n\t}\n\n\tsetCount(count: number) {\n\t\tthis.count = count;\n\t\tthis.render();\n\t}\n\n\tsetTitleFormat(titleFormat: string) {\n\t\tthis.titleFormat = titleFormat;\n\t\tthis.render();\n\t}\n\n\tprivate render() {\n\t\tthis.element.textContent = '' + this.count;\n\t\tthis.element.title = format(this.titleFormat, this.count);\n\n\t\tthis.applyStyles();\n\t}\n\n\tstyle(styles: ICountBadgetyles): void {\n\t\tthis.badgeBackground = styles.badgeBackground;\n\t\tthis.badgeForeground = styles.badgeForeground;\n\t\tthis.badgeBorder = styles.badgeBorder;\n\n\t\tthis.applyStyles();\n\t}\n\n\tprivate applyStyles(): void {\n\t\tif (this.element) {\n\t\t\tconst background = this.badgeBackground ? this.badgeBackground.toString() : null;\n\t\t\tconst foreground = this.badgeForeground ? this.badgeForeground.toString() : null;\n\t\t\tconst border = this.badgeBorder ? this.badgeBorder.toString() : null;\n\n\t\t\tthis.element.style.backgroundColor = background;\n\t\t\tthis.element.style.color = foreground;\n\n\t\t\tthis.element.style.borderWidth = border ? '1px' : null;\n\t\t\tthis.element.style.borderStyle = border ? 'solid' : null;\n\t\t\tthis.element.style.borderColor = border;\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/css!./iconlabel';\nimport dom = require('vs/base/browser/dom');\nimport { HighlightedLabel } from 'vs/base/browser/ui/highlightedlabel/highlightedLabel';\nimport { IMatch } from 'vs/base/common/filters';\nimport uri from 'vs/base/common/uri';\nimport paths = require('vs/base/common/paths');\nimport { IRootProvider, getPathLabel, IUserHomeProvider } from 'vs/base/common/labels';\n\nexport interface IIconLabelCreationOptions {\n\tsupportHighlights?: boolean;\n}\n\nexport interface IIconLabelOptions {\n\ttitle?: string;\n\textraClasses?: string[];\n\titalic?: boolean;\n\tmatches?: IMatch[];\n}\n\nexport class IconLabel {\n\tprivate domNode: HTMLElement;\n\tprivate labelNode: HTMLElement | HighlightedLabel;\n\tprivate descriptionNode: HTMLElement;\n\n\tconstructor(container: HTMLElement, options?: IIconLabelCreationOptions) {\n\t\tthis.domNode = dom.append(container, dom.$('.monaco-icon-label'));\n\t\tif (options && options.supportHighlights) {\n\t\t\tthis.labelNode = new HighlightedLabel(dom.append(this.domNode, dom.$('a.label-name')));\n\t\t} else {\n\t\t\tthis.labelNode = dom.append(this.domNode, dom.$('a.label-name'));\n\t\t}\n\t\tthis.descriptionNode = dom.append(this.domNode, dom.$('span.label-description'));\n\t}\n\n\tpublic get element(): HTMLElement {\n\t\treturn this.domNode;\n\t}\n\n\tpublic get labelElement(): HTMLElement {\n\t\tconst labelNode = this.labelNode;\n\t\tif (labelNode instanceof HighlightedLabel) {\n\t\t\treturn labelNode.element;\n\t\t} else {\n\t\t\treturn labelNode;\n\t\t}\n\t}\n\n\tpublic get descriptionElement(): HTMLElement {\n\t\treturn this.descriptionNode;\n\t}\n\n\tpublic setValue(label?: string, description?: string, options?: IIconLabelOptions): void {\n\t\tconst labelNode = this.labelNode;\n\t\tif (labelNode instanceof HighlightedLabel) {\n\t\t\tlabelNode.set(label || '', options ? options.matches : void 0);\n\t\t} else {\n\t\t\tlabelNode.textContent = label || '';\n\t\t}\n\n\t\tthis.descriptionNode.textContent = description || '';\n\n\t\tif (!description) {\n\t\t\tdom.addClass(this.descriptionNode, 'empty');\n\t\t} else {\n\t\t\tdom.removeClass(this.descriptionNode, 'empty');\n\t\t}\n\n\t\tthis.domNode.title = options && options.title ? options.title : '';\n\n\t\tconst classes = ['monaco-icon-label'];\n\t\tif (options) {\n\t\t\tif (options.extraClasses) {\n\t\t\t\tclasses.push(...options.extraClasses);\n\t\t\t}\n\n\t\t\tif (options.italic) {\n\t\t\t\tclasses.push('italic');\n\t\t\t}\n\t\t}\n\n\t\tthis.domNode.className = classes.join(' ');\n\t}\n\n\tpublic dispose(): void {\n\t\tconst labelNode = this.labelNode;\n\t\tif (labelNode instanceof HighlightedLabel) {\n\t\t\tlabelNode.dispose();\n\t\t}\n\t}\n}\n\nexport class FileLabel extends IconLabel {\n\n\tconstructor(container: HTMLElement, file: uri, provider: IRootProvider, userHome?: IUserHomeProvider) {\n\t\tsuper(container);\n\n\t\tthis.setFile(file, provider, userHome);\n\t}\n\n\tpublic setFile(file: uri, provider: IRootProvider, userHome: IUserHomeProvider): void {\n\t\tconst parent = paths.dirname(file.fsPath);\n\n\t\tthis.setValue(paths.basename(file.fsPath), parent && parent !== '.' ? getPathLabel(parent, provider, userHome) : '', { title: file.fsPath });\n\t}\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'use strict';\n\nimport 'vs/css!./progressbar';\nimport { TPromise, ValueCallback } from 'vs/base/common/winjs.base';\nimport assert = require('vs/base/common/assert');\nimport { Builder, $ } from 'vs/base/browser/builder';\nimport DOM = require('vs/base/browser/dom');\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { Color } from 'vs/base/common/color';\nimport { mixin } from 'vs/base/common/objects';\n\nconst css_done = 'done';\nconst css_active = 'active';\nconst css_infinite = 'infinite';\nconst css_discrete = 'discrete';\nconst css_progress_container = 'progress-container';\nconst css_progress_bit = 'progress-bit';\n\nexport interface IProgressBarOptions extends IProgressBarStyles {\n}\n\nexport interface IProgressBarStyles {\n\tprogressBarBackground?: Color;\n}\n\nconst defaultOpts = {\n\tprogressBarBackground: Color.fromHex('#0E70C0')\n};\n\n/**\n * A progress bar with support for infinite or discrete progress.\n */\nexport class ProgressBar {\n\tprivate options: IProgressBarOptions;\n\tprivate toUnbind: IDisposable[];\n\tprivate workedVal: number;\n\tprivate element: Builder;\n\tprivate animationRunning: boolean;\n\tprivate bit: HTMLElement;\n\tprivate totalWork: number;\n\tprivate animationStopToken: ValueCallback;\n\tprivate progressBarBackground: Color;\n\n\tconstructor(builder: Builder, options?: IProgressBarOptions) {\n\t\tthis.options = options || Object.create(null);\n\t\tmixin(this.options, defaultOpts, false);\n\n\t\tthis.toUnbind = [];\n\t\tthis.workedVal = 0;\n\n\t\tthis.progressBarBackground = this.options.progressBarBackground;\n\n\t\tthis.create(builder);\n\t}\n\n\tprivate create(parent: Builder): void {\n\t\tparent.div({ 'class': css_progress_container }, (builder) => {\n\t\t\tthis.element = builder.clone();\n\n\t\t\tbuilder.div({ 'class': css_progress_bit }).on([DOM.EventType.ANIMATION_START, DOM.EventType.ANIMATION_END, DOM.EventType.ANIMATION_ITERATION], (e: Event) => {\n\t\t\t\tswitch (e.type) {\n\t\t\t\t\tcase DOM.EventType.ANIMATION_START:\n\t\t\t\t\tcase DOM.EventType.ANIMATION_END:\n\t\t\t\t\t\tthis.animationRunning = e.type === DOM.EventType.ANIMATION_START;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase DOM.EventType.ANIMATION_ITERATION:\n\t\t\t\t\t\tif (this.animationStopToken) {\n\t\t\t\t\t\t\tthis.animationStopToken(null);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t}, this.toUnbind);\n\n\t\t\tthis.bit = builder.getHTMLElement();\n\t\t});\n\n\t\tthis.applyStyles();\n\t}\n\n\tprivate off(): void {\n\t\tthis.bit.style.width = 'inherit';\n\t\tthis.bit.style.opacity = '1';\n\t\tthis.element.removeClass(css_active);\n\t\tthis.element.removeClass(css_infinite);\n\t\tthis.element.removeClass(css_discrete);\n\n\t\tthis.workedVal = 0;\n\t\tthis.totalWork = undefined;\n\t}\n\n\t/**\n\t * Indicates to the progress bar that all work is done.\n\t */\n\tpublic done(): ProgressBar {\n\t\treturn this.doDone(true);\n\t}\n\n\t/**\n\t * Stops the progressbar from showing any progress instantly without fading out.\n\t */\n\tpublic stop(): ProgressBar {\n\t\treturn this.doDone(false);\n\t}\n\n\tprivate doDone(delayed: boolean): ProgressBar {\n\t\tthis.element.addClass(css_done);\n\n\t\t// let it grow to 100% width and hide afterwards\n\t\tif (!this.element.hasClass(css_infinite)) {\n\t\t\tthis.bit.style.width = 'inherit';\n\n\t\t\tif (delayed) {\n\t\t\t\tTPromise.timeout(200).then(() => this.off());\n\t\t\t} else {\n\t\t\t\tthis.off();\n\t\t\t}\n\t\t}\n\n\t\t// let it fade out and hide afterwards\n\t\telse {\n\t\t\tthis.bit.style.opacity = '0';\n\t\t\tif (delayed) {\n\t\t\t\tTPromise.timeout(200).then(() => this.off());\n\t\t\t} else {\n\t\t\t\tthis.off();\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Use this mode to indicate progress that has no total number of work units.\n\t */\n\tpublic infinite(): ProgressBar {\n\t\tthis.bit.style.width = '2%';\n\t\tthis.bit.style.opacity = '1';\n\n\t\tthis.element.removeClass(css_discrete);\n\t\tthis.element.removeClass(css_done);\n\t\tthis.element.addClass(css_active);\n\t\tthis.element.addClass(css_infinite);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Tells the progress bar the total number of work. Use in combination with workedVal() to let\n\t * the progress bar show the actual progress based on the work that is done.\n\t */\n\tpublic total(value: number): ProgressBar {\n\t\tthis.workedVal = 0;\n\t\tthis.totalWork = value;\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Finds out if this progress bar is configured with total work\n\t */\n\tpublic hasTotal(): boolean {\n\t\treturn !isNaN(this.totalWork);\n\t}\n\n\t/**\n\t * Tells the progress bar that an amount of work has been completed.\n\t */\n\tpublic worked(value: number): ProgressBar {\n\t\tassert.ok(!isNaN(this.totalWork), 'Total work not set');\n\n\t\tvalue = Number(value);\n\t\tassert.ok(!isNaN(value), 'Value is not a number');\n\t\tvalue = Math.max(1, value);\n\n\t\tthis.workedVal += value;\n\t\tthis.workedVal = Math.min(this.totalWork, this.workedVal);\n\n\t\tif (this.element.hasClass(css_infinite)) {\n\t\t\tthis.element.removeClass(css_infinite);\n\t\t}\n\n\t\tif (this.element.hasClass(css_done)) {\n\t\t\tthis.element.removeClass(css_done);\n\t\t}\n\n\t\tif (!this.element.hasClass(css_active)) {\n\t\t\tthis.element.addClass(css_active);\n\t\t}\n\n\t\tif (!this.element.hasClass(css_discrete)) {\n\t\t\tthis.element.addClass(css_discrete);\n\t\t}\n\n\t\tthis.bit.style.width = 100 * (this.workedVal / this.totalWork) + '%';\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Returns the builder this progress bar is building in.\n\t */\n\tpublic getContainer(): Builder {\n\t\treturn $(this.element);\n\t}\n\n\tpublic style(styles: IProgressBarStyles): void {\n\t\tthis.progressBarBackground = styles.progressBarBackground;\n\n\t\tthis.applyStyles();\n\t}\n\n\tprotected applyStyles(): void {\n\t\tif (this.bit) {\n\t\t\tconst background = this.progressBarBackground ? this.progressBarBackground.toString() : null;\n\n\t\t\tthis.bit.style.backgroundColor = background;\n\t\t}\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.toUnbind = dispose(this.toUnbind);\n\t}\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'use strict';\n\nimport 'vs/css!./sash';\nimport { IDisposable, Disposable, dispose } from 'vs/base/common/lifecycle';\nimport { Builder, $, Dimension } from 'vs/base/browser/builder';\nimport { isIPad } from 'vs/base/browser/browser';\nimport { isMacintosh } from 'vs/base/common/platform';\nimport types = require('vs/base/common/types');\nimport DOM = require('vs/base/browser/dom');\nimport { Gesture, EventType, GestureEvent } from 'vs/base/browser/touch';\nimport { EventEmitter } from 'vs/base/common/eventEmitter';\nimport { StandardMouseEvent } from 'vs/base/browser/mouseEvent';\nimport Event, { Emitter } from 'vs/base/common/event';\n\nexport interface ISashLayoutProvider { }\n\nexport interface IVerticalSashLayoutProvider extends ISashLayoutProvider {\n\tgetVerticalSashLeft(sash: Sash): number;\n\tgetVerticalSashTop?(sash: Sash): number;\n\tgetVerticalSashHeight?(sash: Sash): number;\n}\n\nexport interface IHorizontalSashLayoutProvider extends ISashLayoutProvider {\n\tgetHorizontalSashTop(sash: Sash): number;\n\tgetHorizontalSashLeft?(sash: Sash): number;\n\tgetHorizontalSashWidth?(sash: Sash): number;\n}\n\nexport interface ISashEvent {\n\tstartX: number;\n\tcurrentX: number;\n\tstartY: number;\n\tcurrentY: number;\n}\n\nexport interface ISashOptions {\n\tbaseSize?: number;\n\torientation?: Orientation;\n}\n\nexport enum Orientation {\n\tVERTICAL,\n\tHORIZONTAL\n}\n\nexport class Sash extends EventEmitter {\n\n\tprivate $e: Builder;\n\tprivate gesture: Gesture;\n\tprivate layoutProvider: ISashLayoutProvider;\n\tprivate isDisabled: boolean;\n\tprivate hidden: boolean;\n\tprivate orientation: Orientation;\n\tprivate size: number;\n\n\tconstructor(container: HTMLElement, layoutProvider: ISashLayoutProvider, options: ISashOptions = {}) {\n\t\tsuper();\n\n\t\tthis.$e = $('.monaco-sash').appendTo(container);\n\n\t\tif (isMacintosh) {\n\t\t\tthis.$e.addClass('mac');\n\t\t}\n\n\t\tthis.gesture = new Gesture(this.$e.getHTMLElement());\n\n\t\tthis.$e.on(DOM.EventType.MOUSE_DOWN, (e: MouseEvent) => { this.onMouseDown(e); });\n\t\tthis.$e.on(DOM.EventType.DBLCLICK, (e: MouseEvent) => { this.emit('reset', e); });\n\t\tthis.$e.on(EventType.Start, (e: GestureEvent) => { this.onTouchStart(e); });\n\n\t\tthis.size = options.baseSize || 5;\n\n\t\tif (isIPad) {\n\t\t\tthis.size *= 4; // see also http://ux.stackexchange.com/questions/39023/what-is-the-optimum-button-size-of-touch-screen-applications\n\t\t\tthis.$e.addClass('touch');\n\t\t}\n\n\t\tthis.setOrientation(options.orientation || Orientation.VERTICAL);\n\n\t\tthis.isDisabled = false;\n\t\tthis.hidden = false;\n\t\tthis.layoutProvider = layoutProvider;\n\t}\n\n\tpublic getHTMLElement(): HTMLElement {\n\t\treturn this.$e.getHTMLElement();\n\t}\n\n\tpublic setOrientation(orientation: Orientation): void {\n\t\tthis.orientation = orientation;\n\n\t\tthis.$e.removeClass('horizontal', 'vertical');\n\t\tthis.$e.addClass(this.getOrientation());\n\n\t\tif (this.orientation === Orientation.HORIZONTAL) {\n\t\t\tthis.$e.size(null, this.size);\n\t\t} else {\n\t\t\tthis.$e.size(this.size);\n\t\t}\n\n\t\tif (this.layoutProvider) {\n\t\t\tthis.layout();\n\t\t}\n\t}\n\n\tprivate getOrientation(): 'horizontal' | 'vertical' {\n\t\treturn this.orientation === Orientation.HORIZONTAL ? 'horizontal' : 'vertical';\n\t}\n\n\tprivate onMouseDown(e: MouseEvent): void {\n\t\tDOM.EventHelper.stop(e, false);\n\n\t\tif (this.isDisabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst iframes = $(DOM.getElementsByTagName('iframe'));\n\t\tif (iframes) {\n\t\t\tiframes.style('pointer-events', 'none'); // disable mouse events on iframes as long as we drag the sash\n\t\t}\n\n\t\tlet mouseDownEvent = new StandardMouseEvent(e);\n\t\tlet startX = mouseDownEvent.posx;\n\t\tlet startY = mouseDownEvent.posy;\n\n\t\tlet startEvent: ISashEvent = {\n\t\t\tstartX: startX,\n\t\t\tcurrentX: startX,\n\t\t\tstartY: startY,\n\t\t\tcurrentY: startY\n\t\t};\n\n\t\tthis.$e.addClass('active');\n\t\tthis.emit('start', startEvent);\n\n\t\tlet $window = $(window);\n\t\tlet containerCSSClass = `${this.getOrientation()}-cursor-container${isMacintosh ? '-mac' : ''}`;\n\n\t\tlet lastCurrentX = startX;\n\t\tlet lastCurrentY = startY;\n\n\t\t$window.on('mousemove', (e: MouseEvent) => {\n\t\t\tDOM.EventHelper.stop(e, false);\n\t\t\tlet mouseMoveEvent = new StandardMouseEvent(e);\n\n\t\t\tlet event: ISashEvent = {\n\t\t\t\tstartX: startX,\n\t\t\t\tcurrentX: mouseMoveEvent.posx,\n\t\t\t\tstartY: startY,\n\t\t\t\tcurrentY: mouseMoveEvent.posy\n\t\t\t};\n\n\t\t\tlastCurrentX = mouseMoveEvent.posx;\n\t\t\tlastCurrentY = mouseMoveEvent.posy;\n\n\t\t\tthis.emit('change', event);\n\t\t}).once('mouseup', (e: MouseEvent) => {\n\t\t\tDOM.EventHelper.stop(e, false);\n\t\t\tthis.$e.removeClass('active');\n\t\t\tthis.emit('end');\n\n\t\t\t$window.off('mousemove');\n\t\t\tdocument.body.classList.remove(containerCSSClass);\n\n\t\t\tconst iframes = $(DOM.getElementsByTagName('iframe'));\n\t\t\tif (iframes) {\n\t\t\t\tiframes.style('pointer-events', 'auto');\n\t\t\t}\n\t\t});\n\n\t\tdocument.body.classList.add(containerCSSClass);\n\t}\n\n\tprivate onTouchStart(event: GestureEvent): void {\n\t\tDOM.EventHelper.stop(event);\n\n\t\tlet listeners: IDisposable[] = [];\n\n\t\tlet startX = event.pageX;\n\t\tlet startY = event.pageY;\n\n\t\tthis.emit('start', {\n\t\t\tstartX: startX,\n\t\t\tcurrentX: startX,\n\t\t\tstartY: startY,\n\t\t\tcurrentY: startY\n\t\t});\n\n\t\tlet lastCurrentX = startX;\n\t\tlet lastCurrentY = startY;\n\n\t\tlisteners.push(DOM.addDisposableListener(this.$e.getHTMLElement(), EventType.Change, (event: GestureEvent) => {\n\t\t\tif (types.isNumber(event.pageX) && types.isNumber(event.pageY)) {\n\t\t\t\tthis.emit('change', {\n\t\t\t\t\tstartX: startX,\n\t\t\t\t\tcurrentX: event.pageX,\n\t\t\t\t\tstartY: startY,\n\t\t\t\t\tcurrentY: event.pageY\n\t\t\t\t});\n\n\t\t\t\tlastCurrentX = event.pageX;\n\t\t\t\tlastCurrentY = event.pageY;\n\t\t\t}\n\t\t}));\n\n\t\tlisteners.push(DOM.addDisposableListener(this.$e.getHTMLElement(), EventType.End, (event: GestureEvent) => {\n\t\t\tthis.emit('end');\n\t\t\tdispose(listeners);\n\t\t}));\n\t}\n\n\tpublic layout(): void {\n\t\tlet style: { top?: string; left?: string; height?: string; width?: string; };\n\n\t\tif (this.orientation === Orientation.VERTICAL) {\n\t\t\tlet verticalProvider = (this.layoutProvider);\n\t\t\tstyle = { left: verticalProvider.getVerticalSashLeft(this) - (this.size / 2) + 'px' };\n\n\t\t\tif (verticalProvider.getVerticalSashTop) {\n\t\t\t\tstyle.top = verticalProvider.getVerticalSashTop(this) + 'px';\n\t\t\t}\n\n\t\t\tif (verticalProvider.getVerticalSashHeight) {\n\t\t\t\tstyle.height = verticalProvider.getVerticalSashHeight(this) + 'px';\n\t\t\t}\n\t\t} else {\n\t\t\tlet horizontalProvider = (this.layoutProvider);\n\t\t\tstyle = { top: horizontalProvider.getHorizontalSashTop(this) - (this.size / 2) + 'px' };\n\n\t\t\tif (horizontalProvider.getHorizontalSashLeft) {\n\t\t\t\tstyle.left = horizontalProvider.getHorizontalSashLeft(this) + 'px';\n\t\t\t}\n\n\t\t\tif (horizontalProvider.getHorizontalSashWidth) {\n\t\t\t\tstyle.width = horizontalProvider.getHorizontalSashWidth(this) + 'px';\n\t\t\t}\n\t\t}\n\n\t\tthis.$e.style(style);\n\t}\n\n\tpublic show(): void {\n\t\tthis.hidden = false;\n\t\tthis.$e.show();\n\t}\n\n\tpublic hide(): void {\n\t\tthis.hidden = true;\n\t\tthis.$e.hide();\n\t}\n\n\tpublic isHidden(): boolean {\n\t\treturn this.hidden;\n\t}\n\n\tpublic enable(): void {\n\t\tthis.$e.removeClass('disabled');\n\t\tthis.isDisabled = false;\n\t}\n\n\tpublic disable(): void {\n\t\tthis.$e.addClass('disabled');\n\t\tthis.isDisabled = true;\n\t}\n\n\tpublic dispose(): void {\n\t\tif (this.$e) {\n\t\t\tthis.$e.destroy();\n\t\t\tthis.$e = null;\n\t\t}\n\n\t\tsuper.dispose();\n\t}\n}\n\n/**\n * A simple Vertical Sash that computes the position of the sash when it is moved between the given dimension.\n * Triggers onPositionChange event when the position is changed\n */\nexport class VSash extends Disposable implements IVerticalSashLayoutProvider {\n\n\tprivate sash: Sash;\n\tprivate ratio: number;\n\tprivate startPosition: number;\n\tprivate position: number;\n\tprivate dimension: Dimension;\n\n\tprivate _onPositionChange: Emitter = new Emitter();\n\tpublic get onPositionChange(): Event { return this._onPositionChange.event; }\n\n\tconstructor(container: HTMLElement, private minWidth: number) {\n\t\tsuper();\n\t\tthis.ratio = 0.5;\n\t\tthis.sash = new Sash(container, this);\n\n\t\tthis._register(this.sash.addListener('start', () => this.onSashDragStart()));\n\t\tthis._register(this.sash.addListener('change', (e: ISashEvent) => this.onSashDrag(e)));\n\t\tthis._register(this.sash.addListener('end', () => this.onSashDragEnd()));\n\t\tthis._register(this.sash.addListener('reset', () => this.onSashReset()));\n\t}\n\n\tpublic getVerticalSashTop(): number {\n\t\treturn 0;\n\t}\n\n\tpublic getVerticalSashLeft(): number {\n\t\treturn this.position;\n\t}\n\n\tpublic getVerticalSashHeight(): number {\n\t\treturn this.dimension.height;\n\t}\n\n\tpublic setDimenesion(dimension: Dimension) {\n\t\tthis.dimension = dimension;\n\t\tthis.compute(this.ratio);\n\t}\n\n\tprivate onSashDragStart(): void {\n\t\tthis.startPosition = this.position;\n\t}\n\n\tprivate onSashDrag(e: ISashEvent): void {\n\t\tthis.compute((this.startPosition + (e.currentX - e.startX)) / this.dimension.width);\n\t}\n\n\tprivate compute(ratio: number) {\n\t\tthis.computeSashPosition(ratio);\n\t\tthis.ratio = this.position / this.dimension.width;\n\t\tthis._onPositionChange.fire(this.position);\n\t}\n\n\tprivate onSashDragEnd(): void {\n\t\tthis.sash.layout();\n\t}\n\n\tprivate onSashReset(): void {\n\t\tthis.ratio = 0.5;\n\t\tthis._onPositionChange.fire(this.position);\n\t\tthis.sash.layout();\n\t}\n\n\tprivate computeSashPosition(sashRatio: number = this.ratio) {\n\t\tlet contentWidth = this.dimension.width;\n\t\tlet sashPosition = Math.floor((sashRatio || 0.5) * contentWidth);\n\t\tlet midPoint = Math.floor(0.5 * contentWidth);\n\n\t\tif (contentWidth > this.minWidth * 2) {\n\t\t\tif (sashPosition < this.minWidth) {\n\t\t\t\tsashPosition = this.minWidth;\n\t\t\t}\n\t\t\tif (sashPosition > contentWidth - this.minWidth) {\n\t\t\t\tsashPosition = contentWidth - this.minWidth;\n\t\t\t}\n\t\t} else {\n\t\t\tsashPosition = midPoint;\n\t\t}\n\t\tif (this.position !== sashPosition) {\n\t\t\tthis.position = sashPosition;\n\t\t\tthis.sash.layout();\n\t\t}\n\t}\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'use strict';\n\nimport 'vs/css!./media/scrollbars';\n\nimport * as DomUtils from 'vs/base/browser/dom';\nimport * as Platform from 'vs/base/common/platform';\nimport { StandardMouseWheelEvent, IMouseEvent } from 'vs/base/browser/mouseEvent';\nimport { HorizontalScrollbar } from 'vs/base/browser/ui/scrollbar/horizontalScrollbar';\nimport { VerticalScrollbar } from 'vs/base/browser/ui/scrollbar/verticalScrollbar';\nimport { ScrollableElementCreationOptions, ScrollableElementChangeOptions, ScrollableElementResolvedOptions } from 'vs/base/browser/ui/scrollbar/scrollableElementOptions';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { Scrollable, ScrollState, ScrollEvent, INewScrollState, ScrollbarVisibility } from 'vs/base/common/scrollable';\nimport { Widget } from 'vs/base/browser/ui/widget';\nimport { TimeoutTimer } from 'vs/base/common/async';\nimport { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';\nimport { ScrollbarHost, ISimplifiedMouseEvent } from 'vs/base/browser/ui/scrollbar/abstractScrollbar';\nimport Event, { Emitter } from 'vs/base/common/event';\n\nconst HIDE_TIMEOUT = 500;\nconst SCROLL_WHEEL_SENSITIVITY = 50;\n\nexport interface IOverviewRulerLayoutInfo {\n\tparent: HTMLElement;\n\tinsertBefore: HTMLElement;\n}\n\nexport class ScrollableElement extends Widget {\n\n\tprivate _options: ScrollableElementResolvedOptions;\n\tprivate _scrollable: Scrollable;\n\tprivate _verticalScrollbar: VerticalScrollbar;\n\tprivate _horizontalScrollbar: HorizontalScrollbar;\n\tprivate _domNode: HTMLElement;\n\n\tprivate _leftShadowDomNode: FastDomNode;\n\tprivate _topShadowDomNode: FastDomNode;\n\tprivate _topLeftShadowDomNode: FastDomNode;\n\n\tprivate _listenOnDomNode: HTMLElement;\n\n\tprivate _mouseWheelToDispose: IDisposable[];\n\n\tprivate _isDragging: boolean;\n\tprivate _mouseIsOver: boolean;\n\n\tprivate _hideTimeout: TimeoutTimer;\n\tprivate _shouldRender: boolean;\n\n\tprivate _onScroll = this._register(new Emitter());\n\tpublic onScroll: Event = this._onScroll.event;\n\n\tconstructor(element: HTMLElement, options: ScrollableElementCreationOptions, scrollable?: Scrollable) {\n\t\tsuper();\n\t\telement.style.overflow = 'hidden';\n\t\tthis._options = resolveOptions(options);\n\n\t\tif (typeof scrollable === 'undefined') {\n\t\t\tthis._scrollable = this._register(new Scrollable());\n\t\t} else {\n\t\t\tthis._scrollable = scrollable;\n\t\t}\n\n\t\tthis._register(this._scrollable.onScroll((e) => {\n\t\t\tthis._onDidScroll(e);\n\t\t\tthis._onScroll.fire(e);\n\t\t}));\n\n\t\t// this._scrollable = this._register(new DelegateScrollable(scrollable, () => this._onScroll()));\n\n\t\tlet scrollbarHost: ScrollbarHost = {\n\t\t\tonMouseWheel: (mouseWheelEvent: StandardMouseWheelEvent) => this._onMouseWheel(mouseWheelEvent),\n\t\t\tonDragStart: () => this._onDragStart(),\n\t\t\tonDragEnd: () => this._onDragEnd(),\n\t\t};\n\t\tthis._verticalScrollbar = this._register(new VerticalScrollbar(this._scrollable, this._options, scrollbarHost));\n\t\tthis._horizontalScrollbar = this._register(new HorizontalScrollbar(this._scrollable, this._options, scrollbarHost));\n\n\t\tthis._domNode = document.createElement('div');\n\t\tthis._domNode.className = 'monaco-scrollable-element ' + this._options.className;\n\t\tthis._domNode.setAttribute('role', 'presentation');\n\t\tthis._domNode.style.position = 'relative';\n\t\tthis._domNode.style.overflow = 'hidden';\n\t\tthis._domNode.appendChild(element);\n\t\tthis._domNode.appendChild(this._horizontalScrollbar.domNode.domNode);\n\t\tthis._domNode.appendChild(this._verticalScrollbar.domNode.domNode);\n\n\t\tif (this._options.useShadows) {\n\t\t\tthis._leftShadowDomNode = createFastDomNode(document.createElement('div'));\n\t\t\tthis._leftShadowDomNode.setClassName('shadow');\n\t\t\tthis._domNode.appendChild(this._leftShadowDomNode.domNode);\n\n\t\t\tthis._topShadowDomNode = createFastDomNode(document.createElement('div'));\n\t\t\tthis._topShadowDomNode.setClassName('shadow');\n\t\t\tthis._domNode.appendChild(this._topShadowDomNode.domNode);\n\n\t\t\tthis._topLeftShadowDomNode = createFastDomNode(document.createElement('div'));\n\t\t\tthis._topLeftShadowDomNode.setClassName('shadow top-left-corner');\n\t\t\tthis._domNode.appendChild(this._topLeftShadowDomNode.domNode);\n\t\t}\n\n\t\tthis._listenOnDomNode = this._options.listenOnDomNode || this._domNode;\n\n\t\tthis._mouseWheelToDispose = [];\n\t\tthis._setListeningToMouseWheel(this._options.handleMouseWheel);\n\n\t\tthis.onmouseover(this._listenOnDomNode, (e) => this._onMouseOver(e));\n\t\tthis.onnonbubblingmouseout(this._listenOnDomNode, (e) => this._onMouseOut(e));\n\n\t\tthis._hideTimeout = this._register(new TimeoutTimer());\n\t\tthis._isDragging = false;\n\t\tthis._mouseIsOver = false;\n\n\t\tthis._shouldRender = true;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n\t\tsuper.dispose();\n\t}\n\n\t/**\n\t * Get the generated 'scrollable' dom node\n\t */\n\tpublic getDomNode(): HTMLElement {\n\t\treturn this._domNode;\n\t}\n\n\tpublic getOverviewRulerLayoutInfo(): IOverviewRulerLayoutInfo {\n\t\treturn {\n\t\t\tparent: this._domNode,\n\t\t\tinsertBefore: this._verticalScrollbar.domNode.domNode,\n\t\t};\n\t}\n\n\t/**\n\t * Delegate a mouse down event to the vertical scrollbar.\n\t * This is to help with clicking somewhere else and having the scrollbar react.\n\t */\n\tpublic delegateVerticalScrollbarMouseDown(browserEvent: IMouseEvent): void {\n\t\tthis._verticalScrollbar.delegateMouseDown(browserEvent);\n\t}\n\n\t/**\n\t * Delegate a mouse down event to the vertical scrollbar (directly to the slider!).\n\t * This is to help with clicking somewhere else and having the scrollbar react.\n\t */\n\tpublic delegateSliderMouseDown(e: ISimplifiedMouseEvent, onDragFinished: () => void): void {\n\t\tthis._verticalScrollbar.delegateSliderMouseDown(e, onDragFinished);\n\t}\n\n\tpublic updateState(newState: INewScrollState): void {\n\t\tthis._scrollable.updateState(newState);\n\t}\n\n\tpublic getScrollState(): ScrollState {\n\t\treturn this._scrollable.getState();\n\t}\n\n\t/**\n\t * Update the class name of the scrollable element.\n\t */\n\tpublic updateClassName(newClassName: string): void {\n\t\tthis._options.className = newClassName;\n\t\t// Defaults are different on Macs\n\t\tif (Platform.isMacintosh) {\n\t\t\tthis._options.className += ' mac';\n\t\t}\n\t\tthis._domNode.className = 'monaco-scrollable-element ' + this._options.className;\n\t}\n\n\t/**\n\t * Update configuration options for the scrollbar.\n\t * Really this is Editor.IEditorScrollbarOptions, but base shouldn't\n\t * depend on Editor.\n\t */\n\tpublic updateOptions(newOptions: ScrollableElementChangeOptions): void {\n\t\tlet massagedOptions = resolveOptions(newOptions);\n\t\tthis._options.handleMouseWheel = massagedOptions.handleMouseWheel;\n\t\tthis._options.mouseWheelScrollSensitivity = massagedOptions.mouseWheelScrollSensitivity;\n\t\tthis._setListeningToMouseWheel(this._options.handleMouseWheel);\n\n\t\tif (!this._options.lazyRender) {\n\t\t\tthis._render();\n\t\t}\n\t}\n\n\t// -------------------- mouse wheel scrolling --------------------\n\n\tprivate _setListeningToMouseWheel(shouldListen: boolean): void {\n\t\tlet isListening = (this._mouseWheelToDispose.length > 0);\n\n\t\tif (isListening === shouldListen) {\n\t\t\t// No change\n\t\t\treturn;\n\t\t}\n\n\t\t// Stop listening (if necessary)\n\t\tthis._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n\n\t\t// Start listening (if necessary)\n\t\tif (shouldListen) {\n\t\t\tlet onMouseWheel = (browserEvent: MouseWheelEvent) => {\n\t\t\t\tlet e = new StandardMouseWheelEvent(browserEvent);\n\t\t\t\tthis._onMouseWheel(e);\n\t\t\t};\n\n\t\t\tthis._mouseWheelToDispose.push(DomUtils.addDisposableListener(this._listenOnDomNode, 'mousewheel', onMouseWheel));\n\t\t\tthis._mouseWheelToDispose.push(DomUtils.addDisposableListener(this._listenOnDomNode, 'DOMMouseScroll', onMouseWheel));\n\t\t}\n\t}\n\n\tprivate _onMouseWheel(e: StandardMouseWheelEvent): void {\n\t\tlet desiredScrollTop = -1;\n\t\tlet desiredScrollLeft = -1;\n\n\t\tif (e.deltaY || e.deltaX) {\n\t\t\tlet deltaY = e.deltaY * this._options.mouseWheelScrollSensitivity;\n\t\t\tlet deltaX = e.deltaX * this._options.mouseWheelScrollSensitivity;\n\n\t\t\tif (this._options.flipAxes) {\n\t\t\t\t[deltaY, deltaX] = [deltaX, deltaY];\n\t\t\t}\n\n\t\t\t// Convert vertical scrolling to horizontal if shift is held, this\n\t\t\t// is handled at a higher level on Mac\n\t\t\tconst shiftConvert = !Platform.isMacintosh && e.browserEvent.shiftKey;\n\t\t\tif ((this._options.scrollYToX || shiftConvert) && !deltaX) {\n\t\t\t\tdeltaX = deltaY;\n\t\t\t\tdeltaY = 0;\n\t\t\t}\n\n\t\t\tif (Platform.isMacintosh) {\n\t\t\t\t// Give preference to vertical scrolling\n\t\t\t\tif (deltaY && Math.abs(deltaX) < 0.2) {\n\t\t\t\t\tdeltaX = 0;\n\t\t\t\t}\n\t\t\t\tif (Math.abs(deltaY) > Math.abs(deltaX) * 0.5) {\n\t\t\t\t\tdeltaX = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst scrollState = this._scrollable.getState();\n\t\t\tif (deltaY) {\n\t\t\t\tlet currentScrollTop = scrollState.scrollTop;\n\t\t\t\tdesiredScrollTop = this._verticalScrollbar.validateScrollPosition((desiredScrollTop !== -1 ? desiredScrollTop : currentScrollTop) - SCROLL_WHEEL_SENSITIVITY * deltaY);\n\t\t\t\tif (desiredScrollTop === currentScrollTop) {\n\t\t\t\t\tdesiredScrollTop = -1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (deltaX) {\n\t\t\t\tlet currentScrollLeft = scrollState.scrollLeft;\n\t\t\t\tdesiredScrollLeft = this._horizontalScrollbar.validateScrollPosition((desiredScrollLeft !== -1 ? desiredScrollLeft : currentScrollLeft) - SCROLL_WHEEL_SENSITIVITY * deltaX);\n\t\t\t\tif (desiredScrollLeft === currentScrollLeft) {\n\t\t\t\t\tdesiredScrollLeft = -1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (desiredScrollTop !== -1 || desiredScrollLeft !== -1) {\n\t\t\t\tif (desiredScrollTop !== -1) {\n\t\t\t\t\tthis._shouldRender = this._verticalScrollbar.setDesiredScrollPosition(desiredScrollTop) || this._shouldRender;\n\t\t\t\t\tdesiredScrollTop = -1;\n\t\t\t\t}\n\t\t\t\tif (desiredScrollLeft !== -1) {\n\t\t\t\t\tthis._shouldRender = this._horizontalScrollbar.setDesiredScrollPosition(desiredScrollLeft) || this._shouldRender;\n\t\t\t\t\tdesiredScrollLeft = -1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this._options.alwaysConsumeMouseWheel || this._shouldRender) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t}\n\t}\n\n\tprivate _onDidScroll(e: ScrollEvent): void {\n\t\tthis._shouldRender = this._horizontalScrollbar.onDidScroll(e) || this._shouldRender;\n\t\tthis._shouldRender = this._verticalScrollbar.onDidScroll(e) || this._shouldRender;\n\n\t\tif (this._options.useShadows) {\n\t\t\tthis._shouldRender = true;\n\t\t}\n\n\t\tthis._reveal();\n\n\t\tif (!this._options.lazyRender) {\n\t\t\tthis._render();\n\t\t}\n\t}\n\n\t/**\n\t * Render / mutate the DOM now.\n\t * Should be used together with the ctor option `lazyRender`.\n\t */\n\tpublic renderNow(): void {\n\t\tif (!this._options.lazyRender) {\n\t\t\tthrow new Error('Please use `lazyRender` together with `renderNow`!');\n\t\t}\n\n\t\tthis._render();\n\t}\n\n\tprivate _render(): void {\n\t\tif (!this._shouldRender) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._shouldRender = false;\n\n\t\tthis._horizontalScrollbar.render();\n\t\tthis._verticalScrollbar.render();\n\n\t\tif (this._options.useShadows) {\n\t\t\tconst scrollState = this._scrollable.getState();\n\t\t\tlet enableTop = scrollState.scrollTop > 0;\n\t\t\tlet enableLeft = scrollState.scrollLeft > 0;\n\n\t\t\tthis._leftShadowDomNode.setClassName('shadow' + (enableLeft ? ' left' : ''));\n\t\t\tthis._topShadowDomNode.setClassName('shadow' + (enableTop ? ' top' : ''));\n\t\t\tthis._topLeftShadowDomNode.setClassName('shadow top-left-corner' + (enableTop ? ' top' : '') + (enableLeft ? ' left' : ''));\n\t\t}\n\t}\n\n\t// -------------------- fade in / fade out --------------------\n\n\tprivate _onDragStart(): void {\n\t\tthis._isDragging = true;\n\t\tthis._reveal();\n\t}\n\n\tprivate _onDragEnd(): void {\n\t\tthis._isDragging = false;\n\t\tthis._hide();\n\t}\n\n\tprivate _onMouseOut(e: IMouseEvent): void {\n\t\tthis._mouseIsOver = false;\n\t\tthis._hide();\n\t}\n\n\tprivate _onMouseOver(e: IMouseEvent): void {\n\t\tthis._mouseIsOver = true;\n\t\tthis._reveal();\n\t}\n\n\tprivate _reveal(): void {\n\t\tthis._verticalScrollbar.beginReveal();\n\t\tthis._horizontalScrollbar.beginReveal();\n\t\tthis._scheduleHide();\n\t}\n\n\tprivate _hide(): void {\n\t\tif (!this._mouseIsOver && !this._isDragging) {\n\t\t\tthis._verticalScrollbar.beginHide();\n\t\t\tthis._horizontalScrollbar.beginHide();\n\t\t}\n\t}\n\n\tprivate _scheduleHide(): void {\n\t\tif (!this._mouseIsOver && !this._isDragging) {\n\t\t\tthis._hideTimeout.cancelAndSet(() => this._hide(), HIDE_TIMEOUT);\n\t\t}\n\t}\n}\n\nexport class DomScrollableElement extends ScrollableElement {\n\n\tprivate _element: HTMLElement;\n\n\tconstructor(element: HTMLElement, options: ScrollableElementCreationOptions) {\n\t\tsuper(element, options);\n\t\tthis._element = element;\n\t\tthis.onScroll((e) => {\n\t\t\tif (e.scrollTopChanged) {\n\t\t\t\tthis._element.scrollTop = e.scrollTop;\n\t\t\t}\n\t\t\tif (e.scrollLeftChanged) {\n\t\t\t\tthis._element.scrollLeft = e.scrollLeft;\n\t\t\t}\n\t\t});\n\t\tthis.scanDomNode();\n\t}\n\n\tpublic scanDomNode(): void {\n\t\t// widh, scrollLeft, scrollWidth, height, scrollTop, scrollHeight\n\t\tthis.updateState({\n\t\t\twidth: this._element.clientWidth,\n\t\t\tscrollWidth: this._element.scrollWidth,\n\t\t\tscrollLeft: this._element.scrollLeft,\n\n\t\t\theight: this._element.clientHeight,\n\t\t\tscrollHeight: this._element.scrollHeight,\n\t\t\tscrollTop: this._element.scrollTop,\n\t\t});\n\t}\n}\n\nfunction resolveOptions(opts: ScrollableElementCreationOptions): ScrollableElementResolvedOptions {\n\tlet result: ScrollableElementResolvedOptions = {\n\t\tlazyRender: (typeof opts.lazyRender !== 'undefined' ? opts.lazyRender : false),\n\t\tclassName: (typeof opts.className !== 'undefined' ? opts.className : ''),\n\t\tuseShadows: (typeof opts.useShadows !== 'undefined' ? opts.useShadows : true),\n\t\thandleMouseWheel: (typeof opts.handleMouseWheel !== 'undefined' ? opts.handleMouseWheel : true),\n\t\tflipAxes: (typeof opts.flipAxes !== 'undefined' ? opts.flipAxes : false),\n\t\talwaysConsumeMouseWheel: (typeof opts.alwaysConsumeMouseWheel !== 'undefined' ? opts.alwaysConsumeMouseWheel : false),\n\t\tscrollYToX: (typeof opts.scrollYToX !== 'undefined' ? opts.scrollYToX : false),\n\t\tmouseWheelScrollSensitivity: (typeof opts.mouseWheelScrollSensitivity !== 'undefined' ? opts.mouseWheelScrollSensitivity : 1),\n\t\tarrowSize: (typeof opts.arrowSize !== 'undefined' ? opts.arrowSize : 11),\n\n\t\tlistenOnDomNode: (typeof opts.listenOnDomNode !== 'undefined' ? opts.listenOnDomNode : null),\n\n\t\thorizontal: (typeof opts.horizontal !== 'undefined' ? opts.horizontal : ScrollbarVisibility.Auto),\n\t\thorizontalScrollbarSize: (typeof opts.horizontalScrollbarSize !== 'undefined' ? opts.horizontalScrollbarSize : 10),\n\t\thorizontalSliderSize: (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : 0),\n\t\thorizontalHasArrows: (typeof opts.horizontalHasArrows !== 'undefined' ? opts.horizontalHasArrows : false),\n\n\t\tvertical: (typeof opts.vertical !== 'undefined' ? opts.vertical : ScrollbarVisibility.Auto),\n\t\tverticalScrollbarSize: (typeof opts.verticalScrollbarSize !== 'undefined' ? opts.verticalScrollbarSize : 10),\n\t\tverticalHasArrows: (typeof opts.verticalHasArrows !== 'undefined' ? opts.verticalHasArrows : false),\n\t\tverticalSliderSize: (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : 0)\n\t};\n\n\tresult.horizontalSliderSize = (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : result.horizontalScrollbarSize);\n\tresult.verticalSliderSize = (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : result.verticalScrollbarSize);\n\n\t// Defaults are different on Macs\n\tif (Platform.isMacintosh) {\n\t\tresult.className += ' mac';\n\t}\n\n\treturn 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 *--------------------------------------------------------------------------------------------*/\n\nimport { toObject, assign, getOrDefault } from 'vs/base/common/objects';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { Gesture, EventType as TouchEventType, GestureEvent } from 'vs/base/browser/touch';\nimport * as DOM from 'vs/base/browser/dom';\nimport { domEvent } from 'vs/base/browser/event';\nimport { ScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement';\nimport { ScrollEvent, ScrollbarVisibility } from 'vs/base/common/scrollable';\nimport { RangeMap, IRange, relativeComplement, each } from './rangeMap';\nimport { IDelegate, IRenderer } from './list';\nimport { RowCache, IRow } from './rowCache';\nimport { isWindows } from 'vs/base/common/platform';\nimport { canUseTranslate3d } from 'vs/base/browser/browser';\n\ninterface IItem {\n\tid: string;\n\telement: T;\n\tsize: number;\n\ttemplateId: string;\n\trow: IRow;\n}\n\nconst MouseEventTypes = [\n\t'click',\n\t'dblclick',\n\t'mouseup',\n\t'mousedown',\n\t'mouseover',\n\t'mousemove',\n\t'mouseout',\n\t'contextmenu',\n\t'touchstart'\n];\n\nexport interface IListViewOptions {\n\tuseShadows?: boolean;\n}\n\nconst DefaultOptions: IListViewOptions = {\n\tuseShadows: true\n};\n\nexport class ListView implements IDisposable {\n\n\tprivate items: IItem[];\n\tprivate itemId: number;\n\tprivate rangeMap: RangeMap;\n\tprivate cache: RowCache;\n\tprivate renderers: { [templateId: string]: IRenderer; };\n\tprivate lastRenderTop: number;\n\tprivate lastRenderHeight: number;\n\tprivate _domNode: HTMLElement;\n\tprivate gesture: Gesture;\n\tprivate rowsContainer: HTMLElement;\n\tprivate scrollableElement: ScrollableElement;\n\tprivate disposables: IDisposable[];\n\n\tconstructor(\n\t\tcontainer: HTMLElement,\n\t\tprivate delegate: IDelegate,\n\t\trenderers: IRenderer[],\n\t\toptions: IListViewOptions = DefaultOptions\n\t) {\n\t\tthis.items = [];\n\t\tthis.itemId = 0;\n\t\tthis.rangeMap = new RangeMap();\n\t\tthis.renderers = toObject>(renderers, r => r.templateId);\n\t\tthis.cache = new RowCache(this.renderers);\n\n\t\tthis.lastRenderTop = 0;\n\t\tthis.lastRenderHeight = 0;\n\n\t\tthis._domNode = document.createElement('div');\n\t\tthis._domNode.className = 'monaco-list';\n\n\t\tthis.rowsContainer = document.createElement('div');\n\t\tthis.rowsContainer.className = 'monaco-list-rows';\n\t\tthis.gesture = new Gesture(this.rowsContainer);\n\n\t\tthis.scrollableElement = new ScrollableElement(this.rowsContainer, {\n\t\t\talwaysConsumeMouseWheel: true,\n\t\t\thorizontal: ScrollbarVisibility.Hidden,\n\t\t\tvertical: ScrollbarVisibility.Auto,\n\t\t\tuseShadows: getOrDefault(options, o => o.useShadows, DefaultOptions.useShadows)\n\t\t});\n\n\t\tthis._domNode.appendChild(this.scrollableElement.getDomNode());\n\t\tcontainer.appendChild(this._domNode);\n\n\t\tthis.disposables = [this.rangeMap, this.gesture, this.scrollableElement];\n\n\t\tthis.scrollableElement.onScroll(this.onScroll, this, this.disposables);\n\t\tdomEvent(this.rowsContainer, TouchEventType.Change)(this.onTouchChange, this, this.disposables);\n\n\t\tthis.layout();\n\t}\n\n\tget domNode(): HTMLElement {\n\t\treturn this._domNode;\n\t}\n\n\tsplice(start: number, deleteCount: number, elements: T[] = []): T[] {\n\t\tconst previousRenderRange = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);\n\t\teach(previousRenderRange, i => this.removeItemFromDOM(this.items[i]));\n\n\t\tconst inserted = elements.map>(element => ({\n\t\t\tid: String(this.itemId++),\n\t\t\telement,\n\t\t\tsize: this.delegate.getHeight(element),\n\t\t\ttemplateId: this.delegate.getTemplateId(element),\n\t\t\trow: null\n\t\t}));\n\n\t\tthis.rangeMap.splice(start, deleteCount, ...inserted);\n\n\t\tconst deleted = this.items.splice(start, deleteCount, ...inserted);\n\n\t\tconst renderRange = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);\n\t\teach(renderRange, i => this.insertItemInDOM(this.items[i], i));\n\n\t\tconst scrollHeight = this.getContentHeight();\n\t\tthis.rowsContainer.style.height = `${scrollHeight}px`;\n\t\tthis.scrollableElement.updateState({ scrollHeight });\n\n\t\treturn deleted.map(i => i.element);\n\t}\n\n\tget length(): number {\n\t\treturn this.items.length;\n\t}\n\n\tget renderHeight(): number {\n\t\tconst scrollState = this.scrollableElement.getScrollState();\n\t\treturn scrollState.height;\n\t}\n\n\telement(index: number): T {\n\t\treturn this.items[index].element;\n\t}\n\n\tdomElement(index: number): HTMLElement {\n\t\tconst row = this.items[index].row;\n\t\treturn row && row.domNode;\n\t}\n\n\telementHeight(index: number): number {\n\t\treturn this.items[index].size;\n\t}\n\n\telementTop(index: number): number {\n\t\treturn this.rangeMap.positionAt(index);\n\t}\n\n\tindexAt(position: number): number {\n\t\treturn this.rangeMap.indexAt(position);\n\t}\n\n\tindexAfter(position: number): number {\n\t\treturn this.rangeMap.indexAfter(position);\n\t}\n\n\tlayout(height?: number): void {\n\t\tthis.scrollableElement.updateState({\n\t\t\theight: height || DOM.getContentHeight(this._domNode)\n\t\t});\n\t}\n\n\t// Render\n\n\tprivate render(renderTop: number, renderHeight: number): void {\n\t\tconst previousRenderRange = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);\n\t\tconst renderRange = this.getRenderRange(renderTop, renderHeight);\n\n\t\tconst rangesToInsert = relativeComplement(renderRange, previousRenderRange);\n\t\tconst rangesToRemove = relativeComplement(previousRenderRange, renderRange);\n\n\t\trangesToInsert.forEach(range => each(range, i => this.insertItemInDOM(this.items[i], i)));\n\t\trangesToRemove.forEach(range => each(range, i => this.removeItemFromDOM(this.items[i])));\n\n\t\tif (canUseTranslate3d() && !isWindows /* Windows: translate3d breaks subpixel-antialias (ClearType) unless a background is defined */) {\n\t\t\tconst transform = `translate3d(0px, -${renderTop}px, 0px)`;\n\t\t\tthis.rowsContainer.style.transform = transform;\n\t\t\tthis.rowsContainer.style.webkitTransform = transform;\n\t\t} else {\n\t\t\tthis.rowsContainer.style.top = `-${renderTop}px`;\n\t\t}\n\n\t\tthis.lastRenderTop = renderTop;\n\t\tthis.lastRenderHeight = renderHeight;\n\t}\n\n\t// DOM operations\n\n\tprivate insertItemInDOM(item: IItem, index: number): void {\n\t\tif (!item.row) {\n\t\t\titem.row = this.cache.alloc(item.templateId);\n\t\t}\n\n\t\tif (!item.row.domNode.parentElement) {\n\t\t\tthis.rowsContainer.appendChild(item.row.domNode);\n\t\t}\n\n\t\tconst renderer = this.renderers[item.templateId];\n\t\titem.row.domNode.style.top = `${this.elementTop(index)}px`;\n\t\titem.row.domNode.style.height = `${item.size}px`;\n\t\titem.row.domNode.setAttribute('data-index', `${index}`);\n\t\trenderer.renderElement(item.element, index, item.row.templateData);\n\t}\n\n\tprivate removeItemFromDOM(item: IItem): void {\n\t\tthis.cache.release(item.row);\n\t\titem.row = null;\n\t}\n\n\tgetContentHeight(): number {\n\t\treturn this.rangeMap.size;\n\t}\n\n\tgetScrollTop(): number {\n\t\tconst scrollState = this.scrollableElement.getScrollState();\n\t\treturn scrollState.scrollTop;\n\t}\n\n\tsetScrollTop(scrollTop: number): void {\n\t\tthis.scrollableElement.updateState({ scrollTop });\n\t}\n\n\tget scrollTop(): number {\n\t\treturn this.getScrollTop();\n\t}\n\n\tset scrollTop(scrollTop: number) {\n\t\tthis.setScrollTop(scrollTop);\n\t}\n\n\t// Events\n\n\taddListener(type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable {\n\t\tconst userHandler = handler;\n\t\tlet domNode = this.domNode;\n\n\t\tif (MouseEventTypes.indexOf(type) > -1) {\n\t\t\thandler = e => this.fireScopedEvent(e, userHandler, this.getItemIndexFromMouseEvent(e));\n\t\t} else if (type === TouchEventType.Tap) {\n\t\t\tdomNode = this.rowsContainer;\n\t\t\thandler = e => this.fireScopedEvent(e, userHandler, this.getItemIndexFromGestureEvent(e));\n\t\t}\n\n\t\treturn DOM.addDisposableListener(domNode, type, handler, useCapture);\n\t}\n\n\tprivate fireScopedEvent(\n\t\tevent: any,\n\t\thandler: (event: any) => void,\n\t\tindex: number\n\t) {\n\t\tif (index < 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst element = this.items[index].element;\n\t\thandler(assign(event, { element, index }));\n\t}\n\n\tprivate onScroll(e: ScrollEvent): void {\n\t\tthis.render(e.scrollTop, e.height);\n\t}\n\n\tprivate onTouchChange(event: GestureEvent): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tthis.scrollTop -= event.translationY;\n\t}\n\n\t// Util\n\n\tprivate getItemIndexFromMouseEvent(event: MouseEvent): number {\n\t\treturn this.getItemIndexFromEventTarget(event.target);\n\t}\n\n\tprivate getItemIndexFromGestureEvent(event: GestureEvent): number {\n\t\treturn this.getItemIndexFromEventTarget(event.initialTarget);\n\t}\n\n\tprivate getItemIndexFromEventTarget(target: EventTarget): number {\n\t\twhile (target instanceof HTMLElement && target !== this.rowsContainer) {\n\t\t\tconst element = target as HTMLElement;\n\t\t\tconst rawIndex = element.getAttribute('data-index');\n\n\t\t\tif (rawIndex) {\n\t\t\t\tconst index = Number(rawIndex);\n\n\t\t\t\tif (!isNaN(index)) {\n\t\t\t\t\treturn index;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttarget = element.parentElement;\n\t\t}\n\n\t\treturn -1;\n\t}\n\n\tprivate getRenderRange(renderTop: number, renderHeight: number): IRange {\n\t\treturn {\n\t\t\tstart: this.rangeMap.indexAt(renderTop),\n\t\t\tend: this.rangeMap.indexAfter(renderTop + renderHeight - 1)\n\t\t};\n\t}\n\n\t// Dispose\n\n\tdispose() {\n\t\tthis.items = null;\n\n\t\tif (this._domNode && this._domNode.parentElement) {\n\t\t\tthis._domNode.parentNode.removeChild(this._domNode);\n\t\t\tthis._domNode = null;\n\t\t}\n\n\t\tthis.disposables = dispose(this.disposables);\n\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 *--------------------------------------------------------------------------------------------*/\n\nimport 'vs/css!./list';\nimport { IDisposable, dispose, empty as EmptyDisposable, toDisposable } from 'vs/base/common/lifecycle';\nimport { isNumber } from 'vs/base/common/types';\nimport { range } from 'vs/base/common/arrays';\nimport { once } from 'vs/base/common/functional';\nimport { memoize } from 'vs/base/common/decorators';\nimport * as DOM from 'vs/base/browser/dom';\nimport * as platform from 'vs/base/common/platform';\nimport { EventType as TouchEventType } from 'vs/base/browser/touch';\nimport { KeyCode } from 'vs/base/common/keyCodes';\nimport { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport Event, { Emitter, EventBufferer, chain, mapEvent, fromCallback, any } from 'vs/base/common/event';\nimport { domEvent } from 'vs/base/browser/event';\nimport { IDelegate, IRenderer, IListEvent, IListMouseEvent, IListContextMenuEvent } from './list';\nimport { ListView, IListViewOptions } from './listView';\nimport { Color } from 'vs/base/common/color';\nimport { mixin } from 'vs/base/common/objects';\n\nexport interface IIdentityProvider {\n\t(element: T): string;\n}\n\nexport interface ISpliceable {\n\tsplice(start: number, deleteCount: number, elements: T[]): void;\n}\n\nclass CombinedSpliceable implements ISpliceable {\n\n\tconstructor(private spliceables: ISpliceable[]) { }\n\n\tsplice(start: number, deleteCount: number, elements: T[]): void {\n\t\tthis.spliceables.forEach(s => s.splice(start, deleteCount, elements));\n\t}\n}\n\ninterface ITraitChangeEvent {\n\tindexes: number[];\n}\n\ninterface ITraitTemplateData {\n\tcontainer: HTMLElement;\n\telementDisposable: IDisposable;\n}\n\ninterface IRenderedElement {\n\ttemplateData: ITraitTemplateData;\n\tindex: number;\n}\n\nclass TraitRenderer implements IRenderer\n{\n\tprivate rendered: IRenderedElement[] = [];\n\n\tconstructor(private trait: Trait) { }\n\n\tget templateId(): string {\n\t\treturn `template:${this.trait.trait}`;\n\t}\n\n\trenderTemplate(container: HTMLElement): ITraitTemplateData {\n\t\tconst elementDisposable = EmptyDisposable;\n\t\treturn { container, elementDisposable };\n\t}\n\n\trenderElement(element: T, index: number, templateData: ITraitTemplateData): void {\n\t\ttemplateData.elementDisposable.dispose();\n\n\t\tconst rendered = { index, templateData };\n\t\tthis.rendered.push(rendered);\n\t\ttemplateData.elementDisposable = toDisposable(once(() => this.rendered.splice(this.rendered.indexOf(rendered), 1)));\n\n\t\tthis.trait.renderIndex(index, templateData.container);\n\t}\n\n\trenderIndexes(indexes: number[]): void {\n\t\tthis.rendered\n\t\t\t.filter(({ index }) => indexes.indexOf(index) > -1)\n\t\t\t.forEach(({ index, templateData }) => this.trait.renderIndex(index, templateData.container));\n\t}\n\n\tsplice(start: number, deleteCount: number): void {\n\t\tfor (let i = 0; i < deleteCount; i++) {\n\t\t\tconst key = `key_${start + i}`;\n\t\t\tconst data = this.rendered[key];\n\n\t\t\tif (data) {\n\t\t\t\tdata.elementDisposable.dispose();\n\t\t\t}\n\t\t}\n\t}\n\n\tdisposeTemplate(templateData: ITraitTemplateData): void {\n\t\ttemplateData.elementDisposable.dispose();\n\t}\n}\n\nclass Trait implements ISpliceable, IDisposable {\n\n\t/**\n\t * Sorted indexes which have this trait.\n\t */\n\tprivate indexes: number[];\n\n\tprivate _onChange = new Emitter();\n\tget onChange(): Event { return this._onChange.event; }\n\n\tget trait(): string { return this._trait; }\n\n\t@memoize\n\tget renderer(): TraitRenderer {\n\t\treturn new TraitRenderer(this);\n\t}\n\n\tconstructor(private _trait: string) {\n\t\tthis.indexes = [];\n\t}\n\n\tsplice(start: number, deleteCount: number, elements: boolean[]): void {\n\t\tconst diff = elements.length - deleteCount;\n\t\tconst end = start + deleteCount;\n\t\tconst indexes = [\n\t\t\t...this.indexes.filter(i => i < start),\n\t\t\t...elements.reduce((r, hasTrait, i) => hasTrait ? [...r, i + start] : r, []),\n\t\t\t...this.indexes.filter(i => i >= end).map(i => i + diff)\n\t\t];\n\n\t\tthis.renderer.splice(start, deleteCount);\n\t\tthis.set(indexes);\n\t}\n\n\trenderIndex(index: number, container: HTMLElement): void {\n\t\tDOM.toggleClass(container, this._trait, this.contains(index));\n\t}\n\n\t/**\n\t * Sets the indexes which should have this trait.\n\t *\n\t * @param indexes Indexes which should have this trait.\n\t * @return The old indexes which had this trait.\n\t */\n\tset(indexes: number[]): number[] {\n\t\tconst result = this.indexes;\n\t\tthis.indexes = indexes;\n\n\t\tconst toRender = disjunction(result, indexes);\n\t\tthis.renderer.renderIndexes(toRender);\n\n\t\tthis._onChange.fire({ indexes });\n\t\treturn result;\n\t}\n\n\tget(): number[] {\n\t\treturn this.indexes;\n\t}\n\n\tcontains(index: number): boolean {\n\t\treturn this.indexes.some(i => i === index);\n\t}\n\n\tdispose() {\n\t\tthis.indexes = null;\n\t\tthis._onChange = dispose(this._onChange);\n\t}\n}\n\nclass FocusTrait extends Trait {\n\n\tconstructor(\n\t\tprivate getDomId: IIdentityProvider\n\t) {\n\t\tsuper('focused');\n\t}\n\n\trenderIndex(index: number, container: HTMLElement): void {\n\t\tsuper.renderIndex(index, container);\n\t\tcontainer.setAttribute('role', 'treeitem');\n\t\tcontainer.setAttribute('id', this.getDomId(index));\n\t}\n}\n\nclass Aria implements IRenderer, ISpliceable {\n\n\tprivate length = 0;\n\n\tget templateId(): string {\n\t\treturn 'aria';\n\t}\n\n\tsplice(start: number, deleteCount: number, elements: T[]): void {\n\t\tthis.length += elements.length - deleteCount;\n\t}\n\n\trenderTemplate(container: HTMLElement): HTMLElement {\n\t\treturn container;\n\t}\n\n\trenderElement(element: T, index: number, container: HTMLElement): void {\n\t\tcontainer.setAttribute('aria-setsize', `${this.length}`);\n\t\tcontainer.setAttribute('aria-posinset', `${index + 1}`);\n\t}\n\n\tdisposeTemplate(container: HTMLElement): void {\n\t\t// noop\n\t}\n}\n\n/**\n * The TraitSpliceable is used as a util class to be able\n * to preserve traits across splice calls, given an identity\n * provider.\n */\nclass TraitSpliceable implements ISpliceable {\n\n\tconstructor(\n\t\tprivate trait: Trait,\n\t\tprivate view: ListView,\n\t\tprivate getId?: IIdentityProvider\n\t) { }\n\n\tsplice(start: number, deleteCount: number, elements: T[]): void {\n\t\tif (!this.getId) {\n\t\t\treturn this.trait.splice(start, deleteCount, elements.map(e => false));\n\t\t}\n\n\t\tconst pastElementsWithTrait = this.trait.get().map(i => this.getId(this.view.element(i)));\n\t\tconst elementsWithTrait = elements.map(e => pastElementsWithTrait.indexOf(this.getId(e)) > -1);\n\n\t\tthis.trait.splice(start, deleteCount, elementsWithTrait);\n\t}\n}\n\nclass KeyboardController implements IDisposable {\n\n\tprivate disposables: IDisposable[];\n\n\tconstructor(\n\t\tprivate list: List,\n\t\tprivate view: ListView\n\t) {\n\t\tthis.disposables = [];\n\n\t\tconst onKeyDown = chain(domEvent(view.domNode, 'keydown'))\n\t\t\t.map(e => new StandardKeyboardEvent(e));\n\n\t\tonKeyDown.filter(e => e.keyCode === KeyCode.Enter).on(this.onEnter, this, this.disposables);\n\t\tonKeyDown.filter(e => e.keyCode === KeyCode.UpArrow).on(this.onUpArrow, this, this.disposables);\n\t\tonKeyDown.filter(e => e.keyCode === KeyCode.DownArrow).on(this.onDownArrow, this, this.disposables);\n\t\tonKeyDown.filter(e => e.keyCode === KeyCode.PageUp).on(this.onPageUpArrow, this, this.disposables);\n\t\tonKeyDown.filter(e => e.keyCode === KeyCode.PageDown).on(this.onPageDownArrow, this, this.disposables);\n\t}\n\n\tprivate onEnter(e: StandardKeyboardEvent): void {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tthis.list.setSelection(this.list.getFocus());\n\t\tthis.list.open(this.list.getFocus());\n\t}\n\n\tprivate onUpArrow(e: StandardKeyboardEvent): void {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tthis.list.focusPrevious();\n\t\tthis.list.reveal(this.list.getFocus()[0]);\n\t\tthis.view.domNode.focus();\n\t}\n\n\tprivate onDownArrow(e: StandardKeyboardEvent): void {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tthis.list.focusNext();\n\t\tthis.list.reveal(this.list.getFocus()[0]);\n\t\tthis.view.domNode.focus();\n\t}\n\n\tprivate onPageUpArrow(e: StandardKeyboardEvent): void {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tthis.list.focusPreviousPage();\n\t\tthis.list.reveal(this.list.getFocus()[0]);\n\t\tthis.view.domNode.focus();\n\t}\n\n\tprivate onPageDownArrow(e: StandardKeyboardEvent): void {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tthis.list.focusNextPage();\n\t\tthis.list.reveal(this.list.getFocus()[0]);\n\t\tthis.view.domNode.focus();\n\t}\n\n\tdispose() {\n\t\tthis.disposables = dispose(this.disposables);\n\t}\n}\n\nfunction isSelectionSingleChangeEvent(event: IListMouseEvent): boolean {\n\treturn platform.isMacintosh ? event.metaKey : event.ctrlKey;\n}\n\nfunction isSelectionRangeChangeEvent(event: IListMouseEvent): boolean {\n\treturn event.shiftKey;\n}\n\nfunction isSelectionChangeEvent(event: IListMouseEvent): boolean {\n\treturn isSelectionSingleChangeEvent(event) || isSelectionRangeChangeEvent(event);\n}\n\nexport interface IMouseControllerOptions {\n\tselectOnMouseDown?: boolean;\n}\n\nclass MouseController implements IDisposable {\n\n\tprivate disposables: IDisposable[];\n\n\t@memoize get onContextMenu(): Event> {\n\t\tconst fromKeyboard = chain(domEvent(this.view.domNode, 'keydown'))\n\t\t\t.map(e => new StandardKeyboardEvent(e))\n\t\t\t.filter(e => this.list.getFocus().length > 0)\n\t\t\t.filter(e => e.keyCode === KeyCode.ContextMenu || (e.shiftKey && e.keyCode === KeyCode.F10))\n\t\t\t.map(e => {\n\t\t\t\tconst index = this.list.getFocus()[0];\n\t\t\t\tconst element = this.view.element(index);\n\t\t\t\tconst anchor = this.view.domElement(index);\n\t\t\t\treturn { index, element, anchor };\n\t\t\t})\n\t\t\t.filter(({ anchor }) => !!anchor)\n\t\t\t.event;\n\n\t\tconst fromMouse = chain(fromCallback(handler => this.view.addListener('contextmenu', handler)))\n\t\t\t.map(({ element, index, clientX, clientY }) => ({ element, index, anchor: { x: clientX + 1, y: clientY } }))\n\t\t\t.event;\n\n\t\treturn any>(fromKeyboard, fromMouse);\n\t}\n\n\tconstructor(\n\t\tprivate list: List,\n\t\tprivate view: ListView,\n\t\tprivate options: IMouseControllerOptions = {}\n\t) {\n\t\tthis.disposables = [];\n\t\tthis.disposables.push(view.addListener('mousedown', e => this.onMouseDown(e)));\n\t\tthis.disposables.push(view.addListener('click', e => this.onPointer(e)));\n\t\tthis.disposables.push(view.addListener('dblclick', e => this.onDoubleClick(e)));\n\t\tthis.disposables.push(view.addListener('touchstart', e => this.onMouseDown(e)));\n\t\tthis.disposables.push(view.addListener(TouchEventType.Tap, e => this.onPointer(e)));\n\t}\n\n\tprivate onMouseDown(e: IListMouseEvent): void {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tthis.view.domNode.focus();\n\n\t\tlet reference = this.list.getFocus()[0];\n\t\treference = reference === undefined ? this.list.getSelection()[0] : reference;\n\n\t\tif (isSelectionRangeChangeEvent(e)) {\n\t\t\treturn this.changeSelection(e, reference);\n\t\t}\n\n\t\tconst focus = e.index;\n\t\tthis.list.setFocus([focus]);\n\n\t\tif (isSelectionChangeEvent(e)) {\n\t\t\treturn this.changeSelection(e, reference);\n\t\t}\n\n\t\tif (this.options.selectOnMouseDown) {\n\t\t\tthis.list.setSelection([focus]);\n\t\t\tthis.list.open([focus]);\n\t\t}\n\t}\n\n\tprivate onPointer(e: IListMouseEvent): void {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tif (isSelectionChangeEvent(e)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst focus = this.list.getFocus();\n\t\tthis.list.setSelection(focus);\n\t\tthis.list.open(focus);\n\t}\n\n\tprivate onDoubleClick(e: IListMouseEvent): void {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tif (isSelectionChangeEvent(e)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst focus = this.list.getFocus();\n\t\tthis.list.setSelection(focus);\n\t\tthis.list.pin(focus);\n\t}\n\n\tprivate changeSelection(e: IListMouseEvent, reference: number | undefined): void {\n\t\tconst focus = e.index;\n\n\t\tif (isSelectionRangeChangeEvent(e) && reference !== undefined) {\n\t\t\tconst min = Math.min(reference, focus);\n\t\t\tconst max = Math.max(reference, focus);\n\t\t\tconst rangeSelection = range(max + 1, min);\n\t\t\tconst selection = this.list.getSelection();\n\t\t\tconst contiguousRange = getContiguousRangeContaining(disjunction(selection, [reference]), reference);\n\n\t\t\tif (contiguousRange.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst newSelection = disjunction(rangeSelection, relativeComplement(selection, contiguousRange));\n\t\t\tthis.list.setSelection(newSelection);\n\n\t\t} else if (isSelectionSingleChangeEvent(e)) {\n\t\t\tconst selection = this.list.getSelection();\n\t\t\tconst newSelection = selection.filter(i => i !== focus);\n\n\t\t\tif (selection.length === newSelection.length) {\n\t\t\t\tthis.list.setSelection([...newSelection, focus]);\n\t\t\t} else {\n\t\t\t\tthis.list.setSelection(newSelection);\n\t\t\t}\n\t\t}\n\t}\n\n\tdispose() {\n\t\tthis.disposables = dispose(this.disposables);\n\t}\n}\n\nexport interface IListOptions extends IListViewOptions, IMouseControllerOptions, IListStyles {\n\tidentityProvider?: IIdentityProvider;\n\tariaLabel?: string;\n\tmouseSupport?: boolean;\n\tkeyboardSupport?: boolean;\n}\n\nexport interface IListStyles {\n\tlistFocusBackground?: Color;\n\tlistFocusForeground?: Color;\n\tlistActiveSelectionBackground?: Color;\n\tlistActiveSelectionForeground?: Color;\n\tlistFocusAndSelectionBackground?: Color;\n\tlistFocusAndSelectionForeground?: Color;\n\tlistInactiveSelectionBackground?: Color;\n\tlistInactiveSelectionForeground?: Color;\n\tlistInactiveFocusBackground?: Color;\n\tlistHoverBackground?: Color;\n\tlistHoverForeground?: Color;\n\tlistDropBackground?: Color;\n\tlistFocusOutline?: Color;\n\tlistInactiveFocusOutline?: Color;\n\tlistSelectionOutline?: Color;\n\tlistHoverOutline?: Color;\n}\n\nconst defaultStyles: IListStyles = {\n\tlistFocusBackground: Color.fromHex('#073655'),\n\tlistActiveSelectionBackground: Color.fromHex('#0E639C'),\n\tlistActiveSelectionForeground: Color.fromHex('#FFFFFF'),\n\tlistFocusAndSelectionBackground: Color.fromHex('#094771'),\n\tlistFocusAndSelectionForeground: Color.fromHex('#FFFFFF'),\n\tlistInactiveSelectionBackground: Color.fromHex('#3F3F46'),\n\tlistHoverBackground: Color.fromHex('#2A2D2E'),\n\tlistDropBackground: Color.fromHex('#383B3D')\n};\n\nconst DefaultOptions: IListOptions = {\n\tkeyboardSupport: true,\n\tmouseSupport: true\n};\n\n// TODO@Joao: move these utils into a SortedArray class\n\nfunction getContiguousRangeContaining(range: number[], value: number): number[] {\n\tconst index = range.indexOf(value);\n\n\tif (index === -1) {\n\t\treturn [];\n\t}\n\n\tconst result = [];\n\tlet i = index - 1;\n\twhile (i >= 0 && range[i] === value - (index - i)) {\n\t\tresult.push(range[i--]);\n\t}\n\n\tresult.reverse();\n\ti = index;\n\twhile (i < range.length && range[i] === value + (i - index)) {\n\t\tresult.push(range[i++]);\n\t}\n\n\treturn result;\n}\n\n/**\n * Given two sorted collections of numbers, returns the intersection\n * betweem them (OR).\n */\nfunction disjunction(one: number[], other: number[]): number[] {\n\tconst result = [];\n\tlet i = 0, j = 0;\n\n\twhile (i < one.length || j < other.length) {\n\t\tif (i >= one.length) {\n\t\t\tresult.push(other[j++]);\n\t\t} else if (j >= other.length) {\n\t\t\tresult.push(one[i++]);\n\t\t} else if (one[i] === other[j]) {\n\t\t\tresult.push(one[i]);\n\t\t\ti++;\n\t\t\tj++;\n\t\t\tcontinue;\n\t\t} else if (one[i] < other[j]) {\n\t\t\tresult.push(one[i++]);\n\t\t} else {\n\t\t\tresult.push(other[j++]);\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Given two sorted collections of numbers, returns the relative\n * complement between them (XOR).\n */\nfunction relativeComplement(one: number[], other: number[]): number[] {\n\tconst result = [];\n\tlet i = 0, j = 0;\n\n\twhile (i < one.length || j < other.length) {\n\t\tif (i >= one.length) {\n\t\t\tresult.push(other[j++]);\n\t\t} else if (j >= other.length) {\n\t\t\tresult.push(one[i++]);\n\t\t} else if (one[i] === other[j]) {\n\t\t\ti++;\n\t\t\tj++;\n\t\t\tcontinue;\n\t\t} else if (one[i] < other[j]) {\n\t\t\tresult.push(one[i++]);\n\t\t} else {\n\t\t\tj++;\n\t\t}\n\t}\n\n\treturn result;\n}\n\nconst numericSort = (a: number, b: number) => a - b;\n\nclass PipelineRenderer implements IRenderer {\n\n\tconstructor(\n\t\tprivate _templateId: string,\n\t\tprivate renderers: IRenderer[]\n\t) { }\n\n\tget templateId(): string {\n\t\treturn this._templateId;\n\t}\n\n\trenderTemplate(container: HTMLElement): any[] {\n\t\treturn this.renderers.map(r => r.renderTemplate(container));\n\t}\n\n\trenderElement(element: T, index: number, templateData: any[]): void {\n\t\tthis.renderers.forEach((r, i) => r.renderElement(element, index, templateData[i]));\n\t}\n\n\tdisposeTemplate(templateData: any[]): void {\n\t\tthis.renderers.forEach((r, i) => r.disposeTemplate(templateData[i]));\n\t}\n}\n\nexport class List implements ISpliceable, IDisposable {\n\n\tprivate static InstanceCount = 0;\n\tprivate idPrefix = `list_id_${++List.InstanceCount}`;\n\n\tprivate focus: Trait;\n\tprivate selection: Trait;\n\tprivate eventBufferer: EventBufferer;\n\tprivate view: ListView;\n\tprivate spliceable: ISpliceable;\n\tprivate disposables: IDisposable[];\n\tprivate styleElement: HTMLStyleElement;\n\n\t@memoize get onFocusChange(): Event> {\n\t\treturn mapEvent(this.eventBufferer.wrapEvent(this.focus.onChange), e => this.toListEvent(e));\n\t}\n\n\t@memoize get onSelectionChange(): Event> {\n\t\treturn mapEvent(this.eventBufferer.wrapEvent(this.selection.onChange), e => this.toListEvent(e));\n\t}\n\n\tprivate _onContextMenu: Event> = Event.None;\n\tget onContextMenu(): Event> {\n\t\treturn this._onContextMenu;\n\t}\n\n\tprivate _onOpen = new Emitter();\n\t@memoize get onOpen(): Event> {\n\t\treturn mapEvent(this._onOpen.event, indexes => this.toListEvent({ indexes }));\n\t}\n\n\tprivate _onPin = new Emitter();\n\t@memoize get onPin(): Event> {\n\t\treturn mapEvent(this._onPin.event, indexes => this.toListEvent({ indexes }));\n\t}\n\n\tprivate _onDOMFocus = new Emitter();\n\tget onDOMFocus(): Event { return this._onDOMFocus.event; }\n\n\tprivate _onDOMBlur = new Emitter();\n\tget onDOMBlur(): Event { return this._onDOMBlur.event; }\n\n\tprivate _onDispose = new Emitter();\n\tget onDispose(): Event { return this._onDispose.event; }\n\n\tconstructor(\n\t\tcontainer: HTMLElement,\n\t\tdelegate: IDelegate,\n\t\trenderers: IRenderer[],\n\t\toptions: IListOptions = DefaultOptions\n\t) {\n\t\tconst aria = new Aria();\n\t\tthis.focus = new FocusTrait(i => this.getElementDomId(i));\n\t\tthis.selection = new Trait('selected');\n\n\t\tthis.eventBufferer = new EventBufferer();\n\t\tmixin(options, defaultStyles, false);\n\n\t\trenderers = renderers.map(r => new PipelineRenderer(r.templateId, [aria, this.focus.renderer, this.selection.renderer, r]));\n\n\t\tthis.view = new ListView(container, delegate, renderers, options);\n\t\tthis.view.domNode.setAttribute('role', 'tree');\n\t\tDOM.addClass(this.view.domNode, this.idPrefix);\n\t\tthis.view.domNode.tabIndex = 0;\n\n\t\tthis.styleElement = DOM.createStyleSheet(this.view.domNode);\n\n\t\tthis.spliceable = new CombinedSpliceable([\n\t\t\taria,\n\t\t\tnew TraitSpliceable(this.focus, this.view, options.identityProvider),\n\t\t\tnew TraitSpliceable(this.selection, this.view, options.identityProvider),\n\t\t\tthis.view\n\t\t]);\n\n\t\tthis.disposables = [this.focus, this.selection, this.view, this._onDispose];\n\n\t\tconst tracker = DOM.trackFocus(this.view.domNode);\n\t\tthis.disposables.push(tracker.addFocusListener(() => this._onDOMFocus.fire()));\n\t\tthis.disposables.push(tracker.addBlurListener(() => this._onDOMBlur.fire()));\n\n\t\tif (typeof options.keyboardSupport !== 'boolean' || options.keyboardSupport) {\n\t\t\tconst controller = new KeyboardController(this, this.view);\n\t\t\tthis.disposables.push(controller);\n\t\t}\n\n\t\tif (typeof options.mouseSupport !== 'boolean' || options.mouseSupport) {\n\t\t\tconst controller = new MouseController(this, this.view, options);\n\t\t\tthis.disposables.push(controller);\n\t\t\tthis._onContextMenu = controller.onContextMenu;\n\t\t}\n\n\t\tthis.onFocusChange(this._onFocusChange, this, this.disposables);\n\t\tthis.onSelectionChange(this._onSelectionChange, this, this.disposables);\n\n\t\tif (options.ariaLabel) {\n\t\t\tthis.view.domNode.setAttribute('aria-label', options.ariaLabel);\n\t\t}\n\n\t\tthis.style(options);\n\t}\n\n\tsplice(start: number, deleteCount: number, elements: T[] = []): void {\n\t\tthis.eventBufferer.bufferEvents(() => this.spliceable.splice(start, deleteCount, elements));\n\t}\n\n\tget length(): number {\n\t\treturn this.view.length;\n\t}\n\n\tget contentHeight(): number {\n\t\treturn this.view.getContentHeight();\n\t}\n\n\tget scrollTop(): number {\n\t\treturn this.view.getScrollTop();\n\t}\n\n\tset scrollTop(scrollTop: number) {\n\t\tthis.view.setScrollTop(scrollTop);\n\t}\n\n\tlayout(height?: number): void {\n\t\tthis.view.layout(height);\n\t}\n\n\tsetSelection(indexes: number[]): void {\n\t\tindexes = indexes.sort(numericSort);\n\t\tthis.selection.set(indexes);\n\t}\n\n\tselectNext(n = 1, loop = false): void {\n\t\tif (this.length === 0) { return; }\n\t\tconst selection = this.selection.get();\n\t\tlet index = selection.length > 0 ? selection[0] + n : 0;\n\t\tthis.setSelection(loop ? [index % this.length] : [Math.min(index, this.length - 1)]);\n\t}\n\n\tselectPrevious(n = 1, loop = false): void {\n\t\tif (this.length === 0) { return; }\n\t\tconst selection = this.selection.get();\n\t\tlet index = selection.length > 0 ? selection[0] - n : 0;\n\t\tif (loop && index < 0) {\n\t\t\tindex = this.length + (index % this.length);\n\t\t}\n\t\tthis.setSelection([Math.max(index, 0)]);\n\t}\n\n\tgetSelection(): number[] {\n\t\treturn this.selection.get();\n\t}\n\n\tgetSelectedElements(): T[] {\n\t\treturn this.getSelection().map(i => this.view.element(i));\n\t}\n\n\tsetFocus(indexes: number[]): void {\n\t\tindexes = indexes.sort(numericSort);\n\t\tthis.focus.set(indexes);\n\t}\n\n\tfocusNext(n = 1, loop = false): void {\n\t\tif (this.length === 0) { return; }\n\t\tconst focus = this.focus.get();\n\t\tlet index = focus.length > 0 ? focus[0] + n : 0;\n\t\tthis.setFocus(loop ? [index % this.length] : [Math.min(index, this.length - 1)]);\n\t}\n\n\tfocusPrevious(n = 1, loop = false): void {\n\t\tif (this.length === 0) { return; }\n\t\tconst focus = this.focus.get();\n\t\tlet index = focus.length > 0 ? focus[0] - n : 0;\n\t\tif (loop && index < 0) { index = (this.length + (index % this.length)) % this.length; }\n\t\tthis.setFocus([Math.max(index, 0)]);\n\t}\n\n\tfocusNextPage(): void {\n\t\tlet lastPageIndex = this.view.indexAt(this.view.getScrollTop() + this.view.renderHeight);\n\t\tlastPageIndex = lastPageIndex === 0 ? 0 : lastPageIndex - 1;\n\t\tconst lastPageElement = this.view.element(lastPageIndex);\n\t\tconst currentlyFocusedElement = this.getFocusedElements()[0];\n\n\t\tif (currentlyFocusedElement !== lastPageElement) {\n\t\t\tthis.setFocus([lastPageIndex]);\n\t\t} else {\n\t\t\tconst previousScrollTop = this.view.getScrollTop();\n\t\t\tthis.view.setScrollTop(previousScrollTop + this.view.renderHeight - this.view.elementHeight(lastPageIndex));\n\n\t\t\tif (this.view.getScrollTop() !== previousScrollTop) {\n\t\t\t\t// Let the scroll event listener run\n\t\t\t\tsetTimeout(() => this.focusNextPage(), 0);\n\t\t\t}\n\t\t}\n\t}\n\n\tfocusPreviousPage(): void {\n\t\tlet firstPageIndex: number;\n\t\tconst scrollTop = this.view.getScrollTop();\n\n\t\tif (scrollTop === 0) {\n\t\t\tfirstPageIndex = this.view.indexAt(scrollTop);\n\t\t} else {\n\t\t\tfirstPageIndex = this.view.indexAfter(scrollTop - 1);\n\t\t}\n\n\t\tconst firstPageElement = this.view.element(firstPageIndex);\n\t\tconst currentlyFocusedElement = this.getFocusedElements()[0];\n\n\t\tif (currentlyFocusedElement !== firstPageElement) {\n\t\t\tthis.setFocus([firstPageIndex]);\n\t\t} else {\n\t\t\tconst previousScrollTop = scrollTop;\n\t\t\tthis.view.setScrollTop(scrollTop - this.view.renderHeight);\n\n\t\t\tif (this.view.getScrollTop() !== previousScrollTop) {\n\t\t\t\t// Let the scroll event listener run\n\t\t\t\tsetTimeout(() => this.focusPreviousPage(), 0);\n\t\t\t}\n\t\t}\n\t}\n\n\tfocusLast(): void {\n\t\tif (this.length === 0) { return; }\n\t\tthis.setFocus([this.length - 1]);\n\t}\n\n\tfocusFirst(): void {\n\t\tif (this.length === 0) { return; }\n\t\tthis.setFocus([0]);\n\t}\n\n\tgetFocus(): number[] {\n\t\treturn this.focus.get();\n\t}\n\n\tgetFocusedElements(): T[] {\n\t\treturn this.getFocus().map(i => this.view.element(i));\n\t}\n\n\treveal(index: number, relativeTop?: number): void {\n\t\tconst scrollTop = this.view.getScrollTop();\n\t\tconst elementTop = this.view.elementTop(index);\n\t\tconst elementHeight = this.view.elementHeight(index);\n\n\t\tif (isNumber(relativeTop)) {\n\t\t\trelativeTop = relativeTop < 0 ? 0 : relativeTop;\n\t\t\trelativeTop = relativeTop > 1 ? 1 : relativeTop;\n\n\t\t\t// y = mx + b\n\t\t\tconst m = elementHeight - this.view.renderHeight;\n\t\t\tthis.view.setScrollTop(m * relativeTop + elementTop);\n\t\t} else {\n\t\t\tconst viewItemBottom = elementTop + elementHeight;\n\t\t\tconst wrapperBottom = scrollTop + this.view.renderHeight;\n\n\t\t\tif (elementTop < scrollTop) {\n\t\t\t\tthis.view.setScrollTop(elementTop);\n\t\t\t} else if (viewItemBottom >= wrapperBottom) {\n\t\t\t\tthis.view.setScrollTop(viewItemBottom - this.view.renderHeight);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate getElementDomId(index: number): string {\n\t\treturn `${this.idPrefix}_${index}`;\n\t}\n\n\tisDOMFocused(): boolean {\n\t\treturn this.view.domNode === document.activeElement;\n\t}\n\n\tgetHTMLElement(): HTMLElement {\n\t\treturn this.view.domNode;\n\t}\n\n\topen(indexes: number[]): void {\n\t\tthis._onOpen.fire(indexes);\n\t}\n\n\tpin(indexes: number[]): void {\n\t\tthis._onPin.fire(indexes);\n\t}\n\n\tstyle(styles: IListStyles): void {\n\t\tconst content: string[] = [];\n\n\t\tif (styles.listFocusBackground) {\n\t\t\tcontent.push(`.monaco-list.${this.idPrefix}:focus .monaco-list-row.focused { background-color: ${styles.listFocusBackground}; }`);\n\t\t}\n\n\t\tif (styles.listFocusForeground) {\n\t\t\tcontent.push(`.monaco-list.${this.idPrefix}:focus .monaco-list-row.focused { color: ${styles.listFocusForeground}; }`);\n\t\t}\n\n\t\tif (styles.listActiveSelectionBackground) {\n\t\t\tcontent.push(`.monaco-list.${this.idPrefix}:focus .monaco-list-row.selected { background-color: ${styles.listActiveSelectionBackground}; }`);\n\t\t\tcontent.push(`.monaco-list.${this.idPrefix}:focus .monaco-list-row.selected:hover { background-color: ${styles.listActiveSelectionBackground}; }`); // overwrite :hover style in this case!\n\t\t}\n\n\t\tif (styles.listActiveSelectionForeground) {\n\t\t\tcontent.push(`.monaco-list.${this.idPrefix}:focus .monaco-list-row.selected { color: ${styles.listActiveSelectionForeground}; }`);\n\t\t}\n\n\t\tif (styles.listFocusAndSelectionBackground) {\n\t\t\tcontent.push(`.monaco-list.${this.idPrefix}:focus .monaco-list-row.selected.focused { background-color: ${styles.listFocusAndSelectionBackground}; }`);\n\t\t}\n\n\t\tif (styles.listFocusAndSelectionForeground) {\n\t\t\tcontent.push(`.monaco-list.${this.idPrefix}:focus .monaco-list-row.selected.focused { color: ${styles.listFocusAndSelectionForeground}; }`);\n\t\t}\n\n\t\tif (styles.listInactiveFocusBackground) {\n\t\t\tcontent.push(`.monaco-list.${this.idPrefix} .monaco-list-row.focused { background-color: ${styles.listInactiveFocusBackground}; }`);\n\t\t\tcontent.push(`.monaco-list.${this.idPrefix} .monaco-list-row.focused:hover { background-color: ${styles.listInactiveFocusBackground}; }`); // overwrite :hover style in this case!\n\t\t}\n\n\t\tif (styles.listInactiveSelectionBackground) {\n\t\t\tcontent.push(`.monaco-list.${this.idPrefix} .monaco-list-row.selected { background-color: ${styles.listInactiveSelectionBackground}; }`);\n\t\t\tcontent.push(`.monaco-list.${this.idPrefix} .monaco-list-row.selected:hover { background-color: ${styles.listInactiveSelectionBackground}; }`); // overwrite :hover style in this case!\n\t\t}\n\n\t\tif (styles.listInactiveSelectionForeground) {\n\t\t\tcontent.push(`.monaco-list.${this.idPrefix} .monaco-list-row.selected { color: ${styles.listInactiveSelectionForeground}; }`);\n\t\t}\n\n\t\tif (styles.listHoverBackground) {\n\t\t\tcontent.push(`.monaco-list.${this.idPrefix} .monaco-list-row:hover { background-color: ${styles.listHoverBackground}; }`);\n\t\t}\n\n\t\tif (styles.listHoverForeground) {\n\t\t\tcontent.push(`.monaco-list.${this.idPrefix} .monaco-list-row:hover { color: ${styles.listHoverForeground}; }`);\n\t\t}\n\n\t\tif (styles.listSelectionOutline) {\n\t\t\tcontent.push(`.monaco-list.${this.idPrefix} .monaco-list-row.selected { outline: 1px dotted ${styles.listSelectionOutline}; outline-offset: -1px; }`);\n\t\t}\n\n\t\tif (styles.listFocusOutline) {\n\t\t\tcontent.push(`.monaco-list.${this.idPrefix}:focus .monaco-list-row.focused { outline: 1px solid ${styles.listFocusOutline}; outline-offset: -1px; }`);\n\t\t}\n\n\t\tif (styles.listInactiveFocusOutline) {\n\t\t\tcontent.push(`.monaco-list.${this.idPrefix} .monaco-list-row.focused { outline: 1px dotted ${styles.listInactiveFocusOutline}; outline-offset: -1px; }`);\n\t\t}\n\n\t\tif (styles.listHoverOutline) {\n\t\t\tcontent.push(`.monaco-list.${this.idPrefix} .monaco-list-row:hover { outline: 1px dashed ${styles.listHoverOutline}; outline-offset: -1px; }`);\n\t\t}\n\n\t\tthis.styleElement.innerHTML = content.join('\\n');\n\t}\n\n\tprivate toListEvent({ indexes }: ITraitChangeEvent) {\n\t\treturn { indexes, elements: indexes.map(i => this.view.element(i)) };\n\t}\n\n\tprivate _onFocusChange(): void {\n\t\tconst focus = this.focus.get();\n\n\t\tif (focus.length > 0) {\n\t\t\tthis.view.domNode.setAttribute('aria-activedescendant', this.getElementDomId(focus[0]));\n\t\t} else {\n\t\t\tthis.view.domNode.removeAttribute('aria-activedescendant');\n\t\t}\n\n\t\tthis.view.domNode.setAttribute('role', 'tree');\n\t\tDOM.toggleClass(this.view.domNode, 'element-focused', focus.length > 0);\n\t}\n\n\tprivate _onSelectionChange(): void {\n\t\tconst selection = this.selection.get();\n\n\t\tDOM.toggleClass(this.view.domNode, 'selection-none', selection.length === 0);\n\t\tDOM.toggleClass(this.view.domNode, 'selection-single', selection.length === 1);\n\t\tDOM.toggleClass(this.view.domNode, 'selection-multiple', selection.length > 1);\n\t}\n\n\tdispose(): void {\n\t\tthis._onDispose.fire();\n\t\tthis.disposables = dispose(this.disposables);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport Platform = require('vs/base/common/platform');\nimport Browser = require('vs/base/browser/browser');\nimport WinJS = require('vs/base/common/winjs.base');\nimport Lifecycle = require('vs/base/common/lifecycle');\nimport DOM = require('vs/base/browser/dom');\nimport Diff = require('vs/base/common/diff/diff');\nimport Touch = require('vs/base/browser/touch');\nimport strings = require('vs/base/common/strings');\nimport Mouse = require('vs/base/browser/mouseEvent');\nimport Keyboard = require('vs/base/browser/keyboardEvent');\nimport Model = require('vs/base/parts/tree/browser/treeModel');\nimport dnd = require('./treeDnd');\nimport { ArrayIterator, MappedIterator } from 'vs/base/common/iterator';\nimport { ScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement';\nimport { ScrollbarVisibility } from 'vs/base/common/scrollable';\nimport { HeightMap, IViewItem } from 'vs/base/parts/tree/browser/treeViewModel';\nimport _ = require('vs/base/parts/tree/browser/tree');\nimport { KeyCode } from 'vs/base/common/keyCodes';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { EmitterEvent } from 'vs/base/common/eventEmitter';\n\nexport interface IRow {\n\telement: HTMLElement;\n\ttemplateId: string;\n\ttemplateData: any;\n}\n\nfunction removeFromParent(element: HTMLElement): void {\n\ttry {\n\t\telement.parentElement.removeChild(element);\n\t} catch (e) {\n\t\t// this will throw if this happens due to a blur event, nasty business\n\t}\n}\n\nexport class RowCache implements Lifecycle.IDisposable {\n\n\tprivate _cache: { [templateId: string]: IRow[]; };\n\n\tconstructor(private context: _.ITreeContext) {\n\t\tthis._cache = { '': [] };\n\t}\n\n\tpublic alloc(templateId: string): IRow {\n\t\tvar result = this.cache(templateId).pop();\n\n\t\tif (!result) {\n\t\t\tvar content = document.createElement('div');\n\t\t\tcontent.className = 'content';\n\n\t\t\tvar row = document.createElement('div');\n\t\t\trow.appendChild(content);\n\n\t\t\tresult = {\n\t\t\t\telement: row,\n\t\t\t\ttemplateId: templateId,\n\t\t\t\ttemplateData: this.context.renderer.renderTemplate(this.context.tree, templateId, content)\n\t\t\t};\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic release(templateId: string, row: IRow): void {\n\t\tremoveFromParent(row.element);\n\t\tthis.cache(templateId).push(row);\n\t}\n\n\tprivate cache(templateId: string): IRow[] {\n\t\treturn this._cache[templateId] || (this._cache[templateId] = []);\n\t}\n\n\tpublic garbageCollect(): void {\n\t\tif (this._cache) {\n\t\t\tObject.keys(this._cache).forEach(templateId => {\n\t\t\t\tthis._cache[templateId].forEach(cachedRow => {\n\t\t\t\t\tthis.context.renderer.disposeTemplate(this.context.tree, templateId, cachedRow.templateData);\n\t\t\t\t\tcachedRow.element = null;\n\t\t\t\t\tcachedRow.templateData = null;\n\t\t\t\t});\n\n\t\t\t\tdelete this._cache[templateId];\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.garbageCollect();\n\t\tthis._cache = null;\n\t\tthis.context = null;\n\t}\n}\n\nexport interface IViewContext extends _.ITreeContext {\n\tcache: RowCache;\n}\n\nexport class ViewItem implements IViewItem {\n\n\tprivate context: IViewContext;\n\n\tpublic model: Model.Item;\n\tpublic id: string;\n\tprotected row: IRow;\n\n\tpublic top: number;\n\tpublic height: number;\n\tpublic onDragStart: (e: DragEvent) => void;\n\n\tpublic needsRender: boolean;\n\tpublic uri: string;\n\tpublic unbindDragStart: Lifecycle.IDisposable;\n\tpublic loadingTimer: number;\n\n\tpublic _styles: any;\n\tprivate _draggable: boolean;\n\n\tconstructor(context: IViewContext, model: Model.Item) {\n\t\tthis.context = context;\n\t\tthis.model = model;\n\n\t\tthis.id = this.model.id;\n\t\tthis.row = null;\n\n\t\tthis.top = 0;\n\t\tthis.height = model.getHeight();\n\n\t\tthis._styles = {};\n\t\tmodel.getAllTraits().forEach(t => this._styles[t] = true);\n\n\t\tif (model.isExpanded()) {\n\t\t\tthis.addClass('expanded');\n\t\t}\n\t}\n\n\tset expanded(value: boolean) {\n\t\tvalue ? this.addClass('expanded') : this.removeClass('expanded');\n\t}\n\n\tset loading(value: boolean) {\n\t\tvalue ? this.addClass('loading') : this.removeClass('loading');\n\t}\n\n\tset draggable(value: boolean) {\n\t\tthis._draggable = value;\n\t\tthis.render(true);\n\t}\n\n\tget draggable() {\n\t\treturn this._draggable;\n\t}\n\n\tset dropTarget(value: boolean) {\n\t\tvalue ? this.addClass('drop-target') : this.removeClass('drop-target');\n\t}\n\n\tpublic get element(): HTMLElement {\n\t\treturn this.row && this.row.element;\n\t}\n\n\tprivate _templateId: string;\n\tprivate get templateId(): string {\n\t\treturn this._templateId || (this._templateId = (this.context.renderer.getTemplateId && this.context.renderer.getTemplateId(this.context.tree, this.model.getElement())));\n\t}\n\n\tpublic addClass(name: string): void {\n\t\tthis._styles[name] = true;\n\t\tthis.render(true);\n\t}\n\n\tpublic removeClass(name: string): void {\n\t\tdelete this._styles[name]; // is this slow?\n\t\tthis.render(true);\n\t}\n\n\tpublic render(skipUserRender = false): void {\n\t\tif (!this.model || !this.element) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar classes = ['monaco-tree-row'];\n\t\tclasses.push.apply(classes, Object.keys(this._styles));\n\n\t\tif (this.model.hasChildren()) {\n\t\t\tclasses.push('has-children');\n\t\t}\n\n\t\tthis.element.className = classes.join(' ');\n\t\tthis.element.draggable = this.draggable;\n\t\tthis.element.style.height = this.height + 'px';\n\n\t\t// ARIA\n\t\tthis.element.setAttribute('role', 'treeitem');\n\t\tconst accessibility = this.context.accessibilityProvider;\n\t\tconst ariaLabel = accessibility.getAriaLabel(this.context.tree, this.model.getElement());\n\t\tif (ariaLabel) {\n\t\t\tthis.element.setAttribute('aria-label', ariaLabel);\n\t\t}\n\t\tif (accessibility.getPosInSet && accessibility.getSetSize) {\n\t\t\tthis.element.setAttribute('aria-setsize', accessibility.getSetSize());\n\t\t\tthis.element.setAttribute('aria-posinset', accessibility.getPosInSet(this.context.tree, this.model.getElement()));\n\t\t}\n\t\tif (this.model.hasTrait('focused')) {\n\t\t\tconst base64Id = strings.safeBtoa(this.model.id);\n\n\t\t\tthis.element.setAttribute('aria-selected', 'true');\n\t\t\tthis.element.setAttribute('id', base64Id);\n\t\t} else {\n\t\t\tthis.element.setAttribute('aria-selected', 'false');\n\t\t\tthis.element.removeAttribute('id');\n\t\t}\n\t\tif (this.model.hasChildren()) {\n\t\t\tthis.element.setAttribute('aria-expanded', String(!!this.model.isExpanded()));\n\t\t} else {\n\t\t\tthis.element.removeAttribute('aria-expanded');\n\t\t}\n\t\tthis.element.setAttribute('aria-level', String(this.model.getDepth()));\n\n\t\tif (this.context.options.paddingOnRow) {\n\t\t\tthis.element.style.paddingLeft = this.context.options.twistiePixels + ((this.model.getDepth() - 1) * this.context.options.indentPixels) + 'px';\n\t\t} else {\n\t\t\tthis.element.style.paddingLeft = ((this.model.getDepth() - 1) * this.context.options.indentPixels) + 'px';\n\t\t\t(this.row.element.firstElementChild).style.paddingLeft = this.context.options.twistiePixels + 'px';\n\t\t}\n\n\t\tvar uri = this.context.dnd.getDragURI(this.context.tree, this.model.getElement());\n\n\t\tif (uri !== this.uri) {\n\t\t\tif (this.unbindDragStart) {\n\t\t\t\tthis.unbindDragStart.dispose();\n\t\t\t\tthis.unbindDragStart = null;\n\t\t\t}\n\n\t\t\tif (uri) {\n\t\t\t\tthis.uri = uri;\n\t\t\t\tthis.draggable = true;\n\t\t\t\tthis.unbindDragStart = DOM.addDisposableListener(this.element, 'dragstart', (e) => {\n\t\t\t\t\tthis.onDragStart(e);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.uri = null;\n\t\t\t}\n\t\t}\n\n\t\tif (!skipUserRender) {\n\t\t\tthis.context.renderer.renderElement(this.context.tree, this.model.getElement(), this.templateId, this.row.templateData);\n\t\t}\n\t}\n\n\tpublic insertInDOM(container: HTMLElement, afterElement: HTMLElement): void {\n\t\tif (!this.row) {\n\t\t\tthis.row = this.context.cache.alloc(this.templateId);\n\n\t\t\t// used in reverse lookup from HTMLElement to Item\n\t\t\t(this.element)[TreeView.BINDING] = this;\n\t\t}\n\n\t\tif (this.element.parentElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (afterElement === null) {\n\t\t\tcontainer.appendChild(this.element);\n\t\t} else {\n\t\t\ttry {\n\t\t\t\tcontainer.insertBefore(this.element, afterElement);\n\t\t\t} catch (e) {\n\t\t\t\tconsole.warn('Failed to locate previous tree element');\n\t\t\t\tcontainer.appendChild(this.element);\n\t\t\t}\n\t\t}\n\n\t\tthis.render();\n\t}\n\n\tpublic removeFromDOM(): void {\n\t\tif (!this.row) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.unbindDragStart) {\n\t\t\tthis.unbindDragStart.dispose();\n\t\t\tthis.unbindDragStart = null;\n\t\t}\n\n\t\tthis.uri = null;\n\n\t\t(this.element)[TreeView.BINDING] = null;\n\t\tthis.context.cache.release(this.templateId, this.row);\n\t\tthis.row = null;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.row = null;\n\t\tthis.model = null;\n\t}\n}\n\nclass RootViewItem extends ViewItem {\n\n\tconstructor(context: IViewContext, model: Model.Item, wrapper: HTMLElement) {\n\t\tsuper(context, model);\n\n\t\tthis.row = {\n\t\t\telement: wrapper,\n\t\t\ttemplateData: null,\n\t\t\ttemplateId: null\n\t\t};\n\t}\n\n\tpublic render(): void {\n\t\tif (!this.model || !this.element) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar classes = ['monaco-tree-wrapper'];\n\t\tclasses.push.apply(classes, Object.keys(this._styles));\n\n\t\tif (this.model.hasChildren()) {\n\t\t\tclasses.push('has-children');\n\t\t}\n\n\t\tthis.element.className = classes.join(' ');\n\t}\n\n\tpublic insertInDOM(container: HTMLElement, afterElement: HTMLElement): void {\n\t\t// noop\n\t}\n\n\tpublic removeFromDOM(): void {\n\t\t// noop\n\t}\n}\n\ninterface IThrottledGestureEvent {\n\ttranslationX: number;\n\ttranslationY: number;\n}\n\nfunction reactionEquals(one: _.IDragOverReaction, other: _.IDragOverReaction): boolean {\n\tif (!one && !other) {\n\t\treturn true;\n\t} else if (!one || !other) {\n\t\treturn false;\n\t} else if (one.accept !== other.accept) {\n\t\treturn false;\n\t} else if (one.bubble !== other.bubble) {\n\t\treturn false;\n\t} else if (one.effect !== other.effect) {\n\t\treturn false;\n\t} else {\n\t\treturn true;\n\t}\n}\n\nexport class TreeView extends HeightMap {\n\n\tstatic BINDING = 'monaco-tree-row';\n\tstatic LOADING_DECORATION_DELAY = 800;\n\n\tprivate static counter: number = 0;\n\tprivate instance: number;\n\n\tprivate static currentExternalDragAndDropData: _.IDragAndDropData = null;\n\n\tprivate context: IViewContext;\n\tprivate modelListeners: Lifecycle.IDisposable[];\n\tprivate model: Model.TreeModel;\n\n\tprivate viewListeners: Lifecycle.IDisposable[];\n\tprivate domNode: HTMLElement;\n\tprivate wrapper: HTMLElement;\n\tprivate styleElement: HTMLStyleElement;\n\tprivate rowsContainer: HTMLElement;\n\tprivate scrollableElement: ScrollableElement;\n\tprivate wrapperGesture: Touch.Gesture;\n\tprivate msGesture: MSGesture;\n\tprivate lastPointerType: string;\n\tprivate lastClickTimeStamp: number = 0;\n\n\tprivate lastRenderTop: number;\n\tprivate lastRenderHeight: number;\n\n\tprivate inputItem: ViewItem;\n\tprivate items: { [id: string]: ViewItem; };\n\n\tprivate isRefreshing = false;\n\tprivate refreshingPreviousChildrenIds: { [id: string]: string[] } = {};\n\n\tprivate dragAndDropListeners: { (): void; }[];\n\tprivate currentDragAndDropData: _.IDragAndDropData;\n\tprivate currentDropElement: any;\n\tprivate currentDropElementReaction: _.IDragOverReaction;\n\tprivate currentDropTarget: ViewItem;\n\tprivate shouldInvalidateDropReaction: boolean;\n\tprivate currentDropTargets: ViewItem[];\n\tprivate currentDropPromise: WinJS.Promise;\n\tprivate dragAndDropScrollInterval: number;\n\tprivate dragAndDropScrollTimeout: number;\n\tprivate dragAndDropMouseY: number;\n\n\tprivate didJustPressContextMenuKey: boolean;\n\n\tprivate highlightedItemWasDraggable: boolean;\n\tprivate onHiddenScrollTop: number;\n\n\tprivate _onDOMFocus: Emitter = new Emitter();\n\tget onDOMFocus(): Event { return this._onDOMFocus.event; }\n\n\tprivate _onDOMBlur: Emitter = new Emitter();\n\tget onDOMBlur(): Event { return this._onDOMBlur.event; }\n\n\tconstructor(context: _.ITreeContext, container: HTMLElement) {\n\t\tsuper();\n\n\t\tTreeView.counter++;\n\t\tthis.instance = TreeView.counter;\n\n\t\tthis.context = {\n\t\t\tdataSource: context.dataSource,\n\t\t\trenderer: context.renderer,\n\t\t\tcontroller: context.controller,\n\t\t\tdnd: context.dnd,\n\t\t\tfilter: context.filter,\n\t\t\tsorter: context.sorter,\n\t\t\ttree: context.tree,\n\t\t\taccessibilityProvider: context.accessibilityProvider,\n\t\t\toptions: context.options,\n\t\t\tcache: new RowCache(context)\n\t\t};\n\n\t\tthis.modelListeners = [];\n\t\tthis.viewListeners = [];\n\t\tthis.dragAndDropListeners = [];\n\n\t\tthis.model = null;\n\t\tthis.items = {};\n\n\t\tthis.domNode = document.createElement('div');\n\t\tthis.domNode.className = `monaco-tree no-focused-item monaco-tree-instance-${this.instance}`;\n\t\tthis.domNode.tabIndex = 0;\n\n\t\tthis.styleElement = DOM.createStyleSheet(this.domNode);\n\n\t\t// ARIA\n\t\tthis.domNode.setAttribute('role', 'tree');\n\t\tif (this.context.options.ariaLabel) {\n\t\t\tthis.domNode.setAttribute('aria-label', this.context.options.ariaLabel);\n\t\t}\n\n\t\tif (this.context.options.alwaysFocused) {\n\t\t\tDOM.addClass(this.domNode, 'focused');\n\t\t}\n\n\t\tif (!this.context.options.paddingOnRow) {\n\t\t\tDOM.addClass(this.domNode, 'no-row-padding');\n\t\t}\n\n\t\tthis.wrapper = document.createElement('div');\n\t\tthis.wrapper.className = 'monaco-tree-wrapper';\n\t\tthis.scrollableElement = new ScrollableElement(this.wrapper, {\n\t\t\talwaysConsumeMouseWheel: true,\n\t\t\thorizontal: ScrollbarVisibility.Hidden,\n\t\t\tvertical: (typeof context.options.verticalScrollMode !== 'undefined' ? context.options.verticalScrollMode : ScrollbarVisibility.Auto),\n\t\t\tuseShadows: context.options.useShadows\n\t\t});\n\t\tthis.scrollableElement.onScroll((e) => {\n\t\t\tthis.render(e.scrollTop, e.height);\n\t\t\tthis.emit('scroll', e); // TODO@Joao: is anyone interested in this event?\n\t\t});\n\n\t\tif (Browser.isIE) {\n\t\t\tthis.wrapper.style.msTouchAction = 'none';\n\t\t\tthis.wrapper.style.msContentZooming = 'none';\n\t\t} else {\n\t\t\tthis.wrapperGesture = new Touch.Gesture(this.wrapper);\n\t\t}\n\n\t\tthis.rowsContainer = document.createElement('div');\n\t\tthis.rowsContainer.className = 'monaco-tree-rows';\n\t\tif (context.options.showTwistie) {\n\t\t\tthis.rowsContainer.className += ' show-twisties';\n\t\t}\n\n\t\tvar focusTracker = DOM.trackFocus(this.domNode);\n\t\tfocusTracker.addFocusListener(() => this.onFocus());\n\t\tfocusTracker.addBlurListener(() => this.onBlur());\n\t\tthis.viewListeners.push(focusTracker);\n\n\t\tthis.viewListeners.push(DOM.addDisposableListener(this.domNode, 'keydown', (e) => this.onKeyDown(e)));\n\t\tthis.viewListeners.push(DOM.addDisposableListener(this.domNode, 'keyup', (e) => this.onKeyUp(e)));\n\t\tthis.viewListeners.push(DOM.addDisposableListener(this.domNode, 'mousedown', (e) => this.onMouseDown(e)));\n\t\tthis.viewListeners.push(DOM.addDisposableListener(this.domNode, 'mouseup', (e) => this.onMouseUp(e)));\n\t\tthis.viewListeners.push(DOM.addDisposableListener(this.wrapper, 'click', (e) => this.onClick(e)));\n\t\tthis.viewListeners.push(DOM.addDisposableListener(this.wrapper, 'auxclick', (e) => this.onClick(e))); // >= Chrome 56\n\t\tthis.viewListeners.push(DOM.addDisposableListener(this.domNode, 'contextmenu', (e) => this.onContextMenu(e)));\n\t\tthis.viewListeners.push(DOM.addDisposableListener(this.wrapper, Touch.EventType.Tap, (e) => this.onTap(e)));\n\t\tthis.viewListeners.push(DOM.addDisposableListener(this.wrapper, Touch.EventType.Change, (e) => this.onTouchChange(e)));\n\n\t\tif (Browser.isIE) {\n\t\t\tthis.viewListeners.push(DOM.addDisposableListener(this.wrapper, 'MSPointerDown', (e) => this.onMsPointerDown(e)));\n\t\t\tthis.viewListeners.push(DOM.addDisposableListener(this.wrapper, 'MSGestureTap', (e) => this.onMsGestureTap(e)));\n\n\t\t\t// these events come too fast, we throttle them\n\t\t\tthis.viewListeners.push(DOM.addDisposableThrottledListener(this.wrapper, 'MSGestureChange', (e) => this.onThrottledMsGestureChange(e), (lastEvent: IThrottledGestureEvent, event: MSGestureEvent): IThrottledGestureEvent => {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tvar result = { translationY: event.translationY, translationX: event.translationX };\n\n\t\t\t\tif (lastEvent) {\n\t\t\t\t\tresult.translationY += lastEvent.translationY;\n\t\t\t\t\tresult.translationX += lastEvent.translationX;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}));\n\t\t}\n\n\t\tthis.viewListeners.push(DOM.addDisposableListener(window, 'dragover', (e) => this.onDragOver(e)));\n\t\tthis.viewListeners.push(DOM.addDisposableListener(window, 'drop', (e) => this.onDrop(e)));\n\t\tthis.viewListeners.push(DOM.addDisposableListener(window, 'dragend', (e) => this.onDragEnd(e)));\n\t\tthis.viewListeners.push(DOM.addDisposableListener(window, 'dragleave', (e) => this.onDragOver(e)));\n\n\t\tthis.wrapper.appendChild(this.rowsContainer);\n\t\tthis.domNode.appendChild(this.scrollableElement.getDomNode());\n\t\tcontainer.appendChild(this.domNode);\n\n\t\tthis.lastRenderTop = 0;\n\t\tthis.lastRenderHeight = 0;\n\n\t\tthis.didJustPressContextMenuKey = false;\n\n\t\tthis.currentDropTarget = null;\n\t\tthis.currentDropTargets = [];\n\t\tthis.shouldInvalidateDropReaction = false;\n\n\t\tthis.dragAndDropScrollInterval = null;\n\t\tthis.dragAndDropScrollTimeout = null;\n\n\t\tthis.onHiddenScrollTop = null;\n\n\t\tthis.onRowsChanged();\n\t\tthis.layout();\n\n\t\tthis.setupMSGesture();\n\n\t\tthis.applyStyles(context.options);\n\t}\n\n\tpublic applyStyles(styles: _.ITreeStyles): void {\n\t\tconst content: string[] = [];\n\n\t\tif (styles.listFocusBackground) {\n\t\t\tcontent.push(`.monaco-tree.monaco-tree-instance-${this.instance}.focused .monaco-tree-rows > .monaco-tree-row.focused:not(.highlighted) { background-color: ${styles.listFocusBackground}; }`);\n\t\t}\n\n\t\tif (styles.listFocusForeground) {\n\t\t\tcontent.push(`.monaco-tree.monaco-tree-instance-${this.instance}.focused .monaco-tree-rows > .monaco-tree-row.focused:not(.highlighted) { color: ${styles.listFocusForeground}; }`);\n\t\t}\n\n\t\tif (styles.listActiveSelectionBackground) {\n\t\t\tcontent.push(`.monaco-tree.monaco-tree-instance-${this.instance}.focused .monaco-tree-rows > .monaco-tree-row.selected:not(.highlighted) { background-color: ${styles.listActiveSelectionBackground}; }`);\n\t\t}\n\n\t\tif (styles.listActiveSelectionForeground) {\n\t\t\tcontent.push(`.monaco-tree.monaco-tree-instance-${this.instance}.focused .monaco-tree-rows > .monaco-tree-row.selected:not(.highlighted) { color: ${styles.listActiveSelectionForeground}; }`);\n\t\t}\n\n\t\tif (styles.listFocusAndSelectionBackground) {\n\t\t\tcontent.push(`\n\t\t\t\t.monaco-tree-drag-image,\n\t\t\t\t.monaco-tree.monaco-tree-instance-${this.instance}.focused .monaco-tree-rows > .monaco-tree-row.focused.selected:not(.highlighted) { background-color: ${styles.listFocusAndSelectionBackground}; }\n\t\t\t`);\n\t\t}\n\n\t\tif (styles.listFocusAndSelectionForeground) {\n\t\t\tcontent.push(`\n\t\t\t\t.monaco-tree-drag-image,\n\t\t\t\t.monaco-tree.monaco-tree-instance-${this.instance}.focused .monaco-tree-rows > .monaco-tree-row.focused.selected:not(.highlighted) { color: ${styles.listFocusAndSelectionForeground}; }\n\t\t\t`);\n\t\t}\n\n\t\tif (styles.listInactiveSelectionBackground) {\n\t\t\tcontent.push(`.monaco-tree.monaco-tree-instance-${this.instance} .monaco-tree-rows > .monaco-tree-row.selected:not(.highlighted) { background-color: ${styles.listInactiveSelectionBackground}; }`);\n\t\t}\n\n\t\tif (styles.listInactiveSelectionForeground) {\n\t\t\tcontent.push(`.monaco-tree.monaco-tree-instance-${this.instance} .monaco-tree-rows > .monaco-tree-row.selected:not(.highlighted) { color: ${styles.listInactiveSelectionForeground}; }`);\n\t\t}\n\n\t\tif (styles.listHoverBackground) {\n\t\t\tcontent.push(`.monaco-tree.monaco-tree-instance-${this.instance} .monaco-tree-rows > .monaco-tree-row:hover:not(.highlighted):not(.selected):not(.focused) { background-color: ${styles.listHoverBackground}; }`);\n\t\t}\n\n\t\tif (styles.listHoverForeground) {\n\t\t\tcontent.push(`.monaco-tree.monaco-tree-instance-${this.instance} .monaco-tree-rows > .monaco-tree-row:hover:not(.highlighted):not(.selected):not(.focused) { color: ${styles.listHoverForeground}; }`);\n\t\t}\n\n\t\tif (styles.listDropBackground) {\n\t\t\tcontent.push(`\n\t\t\t\t.monaco-tree.monaco-tree-instance-${this.instance} .monaco-tree-wrapper.drop-target,\n\t\t\t\t.monaco-tree.monaco-tree-instance-${this.instance} .monaco-tree-rows > .monaco-tree-row.drop-target { background-color: ${styles.listDropBackground} !important; color: inherit !important; }\n\t\t\t`);\n\t\t}\n\n\t\tif (styles.listFocusOutline) {\n\t\t\tcontent.push(`\n\t\t\t\t.monaco-tree-drag-image\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ border: 1px solid ${styles.listFocusOutline}; background: #000; }\n\t\t\t\t.monaco-tree.monaco-tree-instance-${this.instance} .monaco-tree-rows > .monaco-tree-row \t\t\t\t\t\t\t\t\t\t\t\t\t\t{ border: 1px solid transparent; }\n\t\t\t\t.monaco-tree.monaco-tree-instance-${this.instance}.focused .monaco-tree-rows > .monaco-tree-row.focused:not(.highlighted) \t\t\t\t\t\t{ border: 1px dotted ${styles.listFocusOutline}; }\n\t\t\t\t.monaco-tree.monaco-tree-instance-${this.instance}.focused .monaco-tree-rows > .monaco-tree-row.selected:not(.highlighted) \t\t\t\t\t\t{ border: 1px solid ${styles.listFocusOutline}; }\n\t\t\t\t.monaco-tree.monaco-tree-instance-${this.instance} .monaco-tree-rows > .monaco-tree-row.selected:not(.highlighted) \t\t\t\t\t\t\t{ border: 1px solid ${styles.listFocusOutline}; }\n\t\t\t\t.monaco-tree.monaco-tree-instance-${this.instance} .monaco-tree-rows > .monaco-tree-row:hover:not(.highlighted):not(.selected):not(.focused) \t{ border: 1px dashed ${styles.listFocusOutline}; }\n\t\t\t\t.monaco-tree.monaco-tree-instance-${this.instance} .monaco-tree-wrapper.drop-target,\n\t\t\t\t.monaco-tree.monaco-tree-instance-${this.instance} .monaco-tree-rows > .monaco-tree-row.drop-target\t\t\t\t\t\t\t\t\t\t\t\t{ border: 1px dashed ${styles.listFocusOutline}; }\n\t\t\t`);\n\t\t}\n\n\t\tthis.styleElement.innerHTML = content.join('\\n');\n\t}\n\n\tprotected createViewItem(item: Model.Item): IViewItem {\n\t\treturn new ViewItem(this.context, item);\n\t}\n\n\tpublic getHTMLElement(): HTMLElement {\n\t\treturn this.domNode;\n\t}\n\n\tpublic focus(): void {\n\t\tthis.domNode.focus();\n\t}\n\n\tpublic isFocused(): boolean {\n\t\treturn document.activeElement === this.domNode;\n\t}\n\n\tpublic blur(): void {\n\t\tthis.domNode.blur();\n\t}\n\n\tpublic onVisible(): void {\n\t\tthis.scrollTop = this.onHiddenScrollTop;\n\t\tthis.onHiddenScrollTop = null;\n\t\tthis.setupMSGesture();\n\t}\n\n\tprivate setupMSGesture(): void {\n\t\tif ((window).MSGesture) {\n\t\t\tthis.msGesture = new MSGesture();\n\t\t\tsetTimeout(() => this.msGesture.target = this.wrapper, 100); // TODO@joh, TODO@IETeam\n\t\t}\n\t}\n\n\tpublic onHidden(): void {\n\t\tthis.onHiddenScrollTop = this.scrollTop;\n\t}\n\n\tprivate isTreeVisible(): boolean {\n\t\treturn this.onHiddenScrollTop === null;\n\t}\n\n\tpublic layout(height?: number): void {\n\t\tif (!this.isTreeVisible()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.viewHeight = height || DOM.getContentHeight(this.wrapper); // render\n\t}\n\n\tprivate render(scrollTop: number, viewHeight: number): void {\n\t\tvar i: number;\n\t\tvar stop: number;\n\n\t\tvar renderTop = scrollTop;\n\t\tvar renderBottom = scrollTop + viewHeight;\n\t\tvar thisRenderBottom = this.lastRenderTop + this.lastRenderHeight;\n\n\t\t// when view scrolls down, start rendering from the renderBottom\n\t\tfor (i = this.indexAfter(renderBottom) - 1, stop = this.indexAt(Math.max(thisRenderBottom, renderTop)); i >= stop; i--) {\n\t\t\tthis.insertItemInDOM(this.itemAtIndex(i));\n\t\t}\n\n\t\t// when view scrolls up, start rendering from either this.renderTop or renderBottom\n\t\tfor (i = Math.min(this.indexAt(this.lastRenderTop), this.indexAfter(renderBottom)) - 1, stop = this.indexAt(renderTop); i >= stop; i--) {\n\t\t\tthis.insertItemInDOM(this.itemAtIndex(i));\n\t\t}\n\n\t\t// when view scrolls down, start unrendering from renderTop\n\t\tfor (i = this.indexAt(this.lastRenderTop), stop = Math.min(this.indexAt(renderTop), this.indexAfter(thisRenderBottom)); i < stop; i++) {\n\t\t\tthis.removeItemFromDOM(this.itemAtIndex(i));\n\t\t}\n\n\t\t// when view scrolls up, start unrendering from either renderBottom this.renderTop\n\t\tfor (i = Math.max(this.indexAfter(renderBottom), this.indexAt(this.lastRenderTop)), stop = this.indexAfter(thisRenderBottom); i < stop; i++) {\n\t\t\tthis.removeItemFromDOM(this.itemAtIndex(i));\n\t\t}\n\n\t\tvar topItem = this.itemAtIndex(this.indexAt(renderTop));\n\n\t\tif (topItem) {\n\t\t\tthis.rowsContainer.style.top = (topItem.top - renderTop) + 'px';\n\t\t}\n\n\t\tthis.lastRenderTop = renderTop;\n\t\tthis.lastRenderHeight = renderBottom - renderTop;\n\t}\n\n\tpublic setModel(newModel: Model.TreeModel): void {\n\t\tthis.releaseModel();\n\t\tthis.model = newModel;\n\n\t\tthis.modelListeners.push(this.model.addBulkListener((e) => this.onModelEvents(e)));\n\t}\n\n\tprivate onModelEvents(events: EmitterEvent[]): void {\n\t\tvar elementsToRefresh: Model.Item[] = [];\n\n\t\tfor (var i = 0, len = events.length; i < len; i++) {\n\t\t\tvar event = events[i];\n\t\t\tvar data = event.data;\n\n\t\t\tswitch (event.type) {\n\t\t\t\tcase 'refreshing':\n\t\t\t\t\tthis.onRefreshing();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'refreshed':\n\t\t\t\t\tthis.onRefreshed();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'clearingInput':\n\t\t\t\t\tthis.onClearingInput(data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'setInput':\n\t\t\t\t\tthis.onSetInput(data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'item:childrenRefreshing':\n\t\t\t\t\tthis.onItemChildrenRefreshing(data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'item:childrenRefreshed':\n\t\t\t\t\tthis.onItemChildrenRefreshed(data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'item:refresh':\n\t\t\t\t\telementsToRefresh.push(data.item);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'item:expanding':\n\t\t\t\t\tthis.onItemExpanding(data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'item:expanded':\n\t\t\t\t\tthis.onItemExpanded(data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'item:collapsing':\n\t\t\t\t\tthis.onItemCollapsing(data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'item:reveal':\n\t\t\t\t\tthis.onItemReveal(data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'item:addTrait':\n\t\t\t\t\tthis.onItemAddTrait(data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'item:removeTrait':\n\t\t\t\t\tthis.onItemRemoveTrait(data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'focus':\n\t\t\t\t\tthis.onModelFocusChange();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (elementsToRefresh.length > 0) {\n\t\t\tthis.onItemsRefresh(elementsToRefresh);\n\t\t}\n\t}\n\n\tprivate onRefreshing(): void {\n\t\tthis.isRefreshing = true;\n\t}\n\n\tprivate onRefreshed(): void {\n\t\tthis.isRefreshing = false;\n\t\tthis.onRowsChanged();\n\t}\n\n\tprivate onRowsChanged(scrollTop: number = this.scrollTop): void {\n\t\tif (this.isRefreshing) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.scrollTop = scrollTop;\n\t}\n\n\tpublic focusNextPage(eventPayload?: any): void {\n\t\tvar lastPageIndex = this.indexAt(this.scrollTop + this.viewHeight);\n\t\tlastPageIndex = lastPageIndex === 0 ? 0 : lastPageIndex - 1;\n\t\tvar lastPageElement = this.itemAtIndex(lastPageIndex).model.getElement();\n\t\tvar currentlyFocusedElement = this.model.getFocus();\n\n\t\tif (currentlyFocusedElement !== lastPageElement) {\n\t\t\tthis.model.setFocus(lastPageElement, eventPayload);\n\t\t} else {\n\t\t\tvar previousScrollTop = this.scrollTop;\n\t\t\tthis.scrollTop += this.viewHeight;\n\n\t\t\tif (this.scrollTop !== previousScrollTop) {\n\n\t\t\t\t// Let the scroll event listener run\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.focusNextPage(eventPayload);\n\t\t\t\t}, 0);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic focusPreviousPage(eventPayload?: any): void {\n\t\tvar firstPageIndex: number;\n\n\t\tif (this.scrollTop === 0) {\n\t\t\tfirstPageIndex = this.indexAt(this.scrollTop);\n\t\t} else {\n\t\t\tfirstPageIndex = this.indexAfter(this.scrollTop - 1);\n\t\t}\n\n\t\tvar firstPageElement = this.itemAtIndex(firstPageIndex).model.getElement();\n\t\tvar currentlyFocusedElement = this.model.getFocus();\n\n\t\tif (currentlyFocusedElement !== firstPageElement) {\n\t\t\tthis.model.setFocus(firstPageElement, eventPayload);\n\t\t} else {\n\t\t\tvar previousScrollTop = this.scrollTop;\n\t\t\tthis.scrollTop -= this.viewHeight;\n\n\t\t\tif (this.scrollTop !== previousScrollTop) {\n\n\t\t\t\t// Let the scroll event listener run\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.focusPreviousPage(eventPayload);\n\t\t\t\t}, 0);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic get viewHeight() {\n\t\tconst scrollState = this.scrollableElement.getScrollState();\n\t\treturn scrollState.height;\n\t}\n\n\tpublic set viewHeight(viewHeight: number) {\n\t\tthis.scrollableElement.updateState({\n\t\t\theight: viewHeight,\n\t\t\tscrollHeight: this.getTotalHeight()\n\t\t});\n\t}\n\n\tpublic get scrollTop(): number {\n\t\tconst scrollState = this.scrollableElement.getScrollState();\n\t\treturn scrollState.scrollTop;\n\t}\n\n\tpublic set scrollTop(scrollTop: number) {\n\t\tthis.scrollableElement.updateState({\n\t\t\tscrollTop: scrollTop,\n\t\t\tscrollHeight: this.getTotalHeight()\n\t\t});\n\t}\n\n\tpublic getScrollPosition(): number {\n\t\tconst height = this.getTotalHeight() - this.viewHeight;\n\t\treturn height <= 0 ? 0 : this.scrollTop / height;\n\t}\n\n\tpublic setScrollPosition(pos: number): void {\n\t\tconst height = this.getTotalHeight() - this.viewHeight;\n\t\tthis.scrollTop = height * pos;\n\t}\n\n\t// Events\n\n\tprivate onClearingInput(e: Model.IInputEvent): void {\n\t\tvar item = e.item;\n\t\tif (item) {\n\t\t\tthis.onRemoveItems(new MappedIterator(item.getNavigator(), item => item && item.id));\n\t\t\tthis.onRowsChanged();\n\t\t}\n\t}\n\n\tprivate onSetInput(e: Model.IInputEvent): void {\n\t\tthis.context.cache.garbageCollect();\n\t\tthis.inputItem = new RootViewItem(this.context, e.item, this.wrapper);\n\t\tthis.emit('viewItem:create', { item: this.inputItem.model });\n\t}\n\n\tprivate onItemChildrenRefreshing(e: Model.IItemChildrenRefreshEvent): void {\n\t\tvar item = e.item;\n\t\tvar viewItem = this.items[item.id];\n\n\t\tif (viewItem) {\n\t\t\tviewItem.loadingTimer = setTimeout(() => {\n\t\t\t\tviewItem.loadingTimer = 0;\n\t\t\t\tviewItem.loading = true;\n\t\t\t}, TreeView.LOADING_DECORATION_DELAY);\n\t\t}\n\n\t\tif (!e.isNested) {\n\t\t\tvar childrenIds: string[] = [];\n\t\t\tvar navigator = item.getNavigator();\n\t\t\tvar childItem: Model.Item;\n\n\t\t\twhile (childItem = navigator.next()) {\n\t\t\t\tchildrenIds.push(childItem.id);\n\t\t\t}\n\n\t\t\tthis.refreshingPreviousChildrenIds[item.id] = childrenIds;\n\t\t}\n\t}\n\n\tprivate onItemChildrenRefreshed(e: Model.IItemChildrenRefreshEvent): void {\n\t\tvar item = e.item;\n\t\tvar viewItem = this.items[item.id];\n\n\t\tif (viewItem) {\n\t\t\tif (viewItem.loadingTimer) {\n\t\t\t\tclearTimeout(viewItem.loadingTimer);\n\t\t\t\tviewItem.loadingTimer = 0;\n\t\t\t}\n\n\t\t\tviewItem.loading = false;\n\t\t}\n\n\t\tif (!e.isNested) {\n\t\t\tvar previousChildrenIds = this.refreshingPreviousChildrenIds[item.id];\n\t\t\tvar afterModelItems: Model.Item[] = [];\n\t\t\tvar navigator = item.getNavigator();\n\t\t\tvar childItem: Model.Item;\n\n\t\t\twhile (childItem = navigator.next()) {\n\t\t\t\tafterModelItems.push(childItem);\n\t\t\t}\n\n\t\t\tlet skipDiff = Math.abs(previousChildrenIds.length - afterModelItems.length) > 1000;\n\t\t\tlet diff: Diff.IDiffChange[];\n\t\t\tlet doToInsertItemsAlreadyExist: boolean;\n\n\t\t\tif (!skipDiff) {\n\t\t\t\tconst lcs = new Diff.LcsDiff({\n\t\t\t\t\tgetLength: () => previousChildrenIds.length,\n\t\t\t\t\tgetElementHash: (i: number) => previousChildrenIds[i]\n\t\t\t\t}, {\n\t\t\t\t\t\tgetLength: () => afterModelItems.length,\n\t\t\t\t\t\tgetElementHash: (i: number) => afterModelItems[i].id\n\t\t\t\t\t}, null);\n\n\t\t\t\tdiff = lcs.ComputeDiff();\n\n\t\t\t\t// this means that the result of the diff algorithm would result\n\t\t\t\t// in inserting items that were already registered. this can only\n\t\t\t\t// happen if the data provider returns bad ids OR if the sorting\n\t\t\t\t// of the elements has changed\n\t\t\t\tdoToInsertItemsAlreadyExist = diff.some(d => {\n\t\t\t\t\tif (d.modifiedLength > 0) {\n\t\t\t\t\t\tfor (var i = d.modifiedStart, len = d.modifiedStart + d.modifiedLength; i < len; i++) {\n\t\t\t\t\t\t\tif (this.items.hasOwnProperty(afterModelItems[i].id)) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// 50 is an optimization number, at some point we're better off\n\t\t\t// just replacing everything\n\t\t\tif (!skipDiff && !doToInsertItemsAlreadyExist && diff.length < 50) {\n\t\t\t\tfor (let i = 0, len = diff.length; i < len; i++) {\n\t\t\t\t\tconst diffChange = diff[i];\n\n\t\t\t\t\tif (diffChange.originalLength > 0) {\n\t\t\t\t\t\tthis.onRemoveItems(new ArrayIterator(previousChildrenIds, diffChange.originalStart, diffChange.originalStart + diffChange.originalLength));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (diffChange.modifiedLength > 0) {\n\t\t\t\t\t\tlet beforeItem = afterModelItems[diffChange.modifiedStart - 1] || item;\n\t\t\t\t\t\tbeforeItem = beforeItem.getDepth() > 0 ? beforeItem : null;\n\n\t\t\t\t\t\tthis.onInsertItems(new ArrayIterator(afterModelItems, diffChange.modifiedStart, diffChange.modifiedStart + diffChange.modifiedLength), beforeItem ? beforeItem.id : null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else if (skipDiff || diff.length) {\n\t\t\t\tthis.onRemoveItems(new ArrayIterator(previousChildrenIds));\n\t\t\t\tthis.onInsertItems(new ArrayIterator(afterModelItems), item.getDepth() > 0 ? item.id : null);\n\t\t\t}\n\n\t\t\tif (skipDiff || diff.length) {\n\t\t\t\tthis.onRowsChanged();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate onItemsRefresh(items: Model.Item[]): void {\n\t\tthis.onRefreshItemSet(items.filter(item => this.items.hasOwnProperty(item.id)));\n\t\tthis.onRowsChanged();\n\t}\n\n\tprivate onItemExpanding(e: Model.IItemExpandEvent): void {\n\t\tvar viewItem = this.items[e.item.id];\n\t\tif (viewItem) {\n\t\t\tviewItem.expanded = true;\n\t\t}\n\t}\n\n\tprivate onItemExpanded(e: Model.IItemExpandEvent): void {\n\t\tvar item = e.item;\n\t\tvar viewItem = this.items[item.id];\n\t\tif (viewItem) {\n\t\t\tviewItem.expanded = true;\n\n\t\t\tvar height = this.onInsertItems(item.getNavigator(), item.id);\n\t\t\tvar scrollTop = this.scrollTop;\n\n\t\t\tif (viewItem.top + viewItem.height <= this.scrollTop) {\n\t\t\t\tscrollTop += height;\n\t\t\t}\n\n\t\t\tthis.onRowsChanged(scrollTop);\n\t\t}\n\t}\n\n\tprivate onItemCollapsing(e: Model.IItemCollapseEvent): void {\n\t\tvar item = e.item;\n\t\tvar viewItem = this.items[item.id];\n\t\tif (viewItem) {\n\t\t\tviewItem.expanded = false;\n\t\t\tthis.onRemoveItems(new MappedIterator(item.getNavigator(), item => item && item.id));\n\t\t\tthis.onRowsChanged();\n\t\t}\n\t}\n\n\tpublic getRelativeTop(item: Model.Item): number {\n\t\tif (item && item.isVisible()) {\n\t\t\tvar viewItem = this.items[item.id];\n\t\t\tif (viewItem) {\n\t\t\t\treturn (viewItem.top - this.scrollTop) / (this.viewHeight - viewItem.height);\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\n\tprivate onItemReveal(e: Model.IItemRevealEvent): void {\n\t\tvar item = e.item;\n\t\tvar relativeTop = e.relativeTop;\n\t\tvar viewItem = this.items[item.id];\n\t\tif (viewItem) {\n\t\t\tif (relativeTop !== null) {\n\t\t\t\trelativeTop = relativeTop < 0 ? 0 : relativeTop;\n\t\t\t\trelativeTop = relativeTop > 1 ? 1 : relativeTop;\n\n\t\t\t\t// y = mx + b\n\t\t\t\tvar m = viewItem.height - this.viewHeight;\n\t\t\t\tthis.scrollTop = m * relativeTop + viewItem.top;\n\t\t\t} else {\n\t\t\t\tvar viewItemBottom = viewItem.top + viewItem.height;\n\t\t\t\tvar wrapperBottom = this.scrollTop + this.viewHeight;\n\n\t\t\t\tif (viewItem.top < this.scrollTop) {\n\t\t\t\t\tthis.scrollTop = viewItem.top;\n\t\t\t\t} else if (viewItemBottom >= wrapperBottom) {\n\t\t\t\t\tthis.scrollTop = viewItemBottom - this.viewHeight;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate onItemAddTrait(e: Model.IItemTraitEvent): void {\n\t\tvar item = e.item;\n\t\tvar trait = e.trait;\n\t\tvar viewItem = this.items[item.id];\n\t\tif (viewItem) {\n\t\t\tviewItem.addClass(trait);\n\t\t}\n\t\tif (trait === 'highlighted') {\n\t\t\tDOM.addClass(this.domNode, trait);\n\n\t\t\t// Ugly Firefox fix: input fields can't be selected if parent nodes are draggable\n\t\t\tif (viewItem) {\n\t\t\t\tthis.highlightedItemWasDraggable = !!viewItem.draggable;\n\t\t\t\tif (viewItem.draggable) {\n\t\t\t\t\tviewItem.draggable = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate onItemRemoveTrait(e: Model.IItemTraitEvent): void {\n\t\tvar item = e.item;\n\t\tvar trait = e.trait;\n\t\tvar viewItem = this.items[item.id];\n\t\tif (viewItem) {\n\t\t\tviewItem.removeClass(trait);\n\t\t}\n\t\tif (trait === 'highlighted') {\n\t\t\tDOM.removeClass(this.domNode, trait);\n\n\t\t\t// Ugly Firefox fix: input fields can't be selected if parent nodes are draggable\n\t\t\tif (this.highlightedItemWasDraggable) {\n\t\t\t\tviewItem.draggable = true;\n\t\t\t}\n\t\t\tthis.highlightedItemWasDraggable = false;\n\t\t}\n\t}\n\n\tprivate onModelFocusChange(): void {\n\t\tconst focus = this.model && this.model.getFocus();\n\n\t\tDOM.toggleClass(this.domNode, 'no-focused-item', !focus);\n\n\t\t// ARIA\n\t\tif (focus) {\n\t\t\tthis.domNode.setAttribute('aria-activedescendant', strings.safeBtoa(this.context.dataSource.getId(this.context.tree, focus)));\n\t\t} else {\n\t\t\tthis.domNode.removeAttribute('aria-activedescendant');\n\t\t}\n\t}\n\n\t// HeightMap \"events\"\n\n\tpublic onInsertItem(item: ViewItem): void {\n\t\titem.onDragStart = (e) => { this.onDragStart(item, e); };\n\t\titem.needsRender = true;\n\t\tthis.refreshViewItem(item);\n\t\tthis.items[item.id] = item;\n\t}\n\n\tpublic onRefreshItem(item: ViewItem, needsRender = false): void {\n\t\titem.needsRender = item.needsRender || needsRender;\n\t\tthis.refreshViewItem(item);\n\t}\n\n\tpublic onRemoveItem(item: ViewItem): void {\n\t\tthis.removeItemFromDOM(item);\n\n\t\titem.dispose();\n\t\tthis.emit('viewItem:dispose', { item: this.inputItem.model });\n\n\t\tdelete this.items[item.id];\n\t}\n\n\t// ViewItem refresh\n\n\tprivate refreshViewItem(item: ViewItem): void {\n\t\titem.render();\n\n\t\tif (this.shouldBeRendered(item)) {\n\t\t\tthis.insertItemInDOM(item);\n\t\t} else {\n\t\t\tthis.removeItemFromDOM(item);\n\t\t}\n\t}\n\n\t// DOM Events\n\n\tprivate onClick(e: MouseEvent): void {\n\t\tif (this.lastPointerType && this.lastPointerType !== 'mouse') {\n\t\t\treturn;\n\t\t}\n\n\t\tvar event = new Mouse.StandardMouseEvent(e);\n\t\tvar item = this.getItemAround(event.target);\n\n\t\tif (!item) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (Browser.isIE && Date.now() - this.lastClickTimeStamp < 300) {\n\t\t\t// IE10+ doesn't set the detail property correctly. While IE10 simply\n\t\t\t// counts the number of clicks, IE11 reports always 1. To align with\n\t\t\t// other browser, we set the value to 2 if clicks events come in a 300ms\n\t\t\t// sequence.\n\t\t\tevent.detail = 2;\n\t\t}\n\t\tthis.lastClickTimeStamp = Date.now();\n\n\t\tthis.context.controller.onClick(this.context.tree, item.model.getElement(), event);\n\t}\n\n\tprivate onMouseDown(e: MouseEvent): void {\n\t\tthis.didJustPressContextMenuKey = false;\n\n\t\tif (!this.context.controller.onMouseDown) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.lastPointerType && this.lastPointerType !== 'mouse') {\n\t\t\treturn;\n\t\t}\n\n\t\tvar event = new Mouse.StandardMouseEvent(e);\n\n\t\tif (event.ctrlKey && Platform.isNative && Platform.isMacintosh) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar item = this.getItemAround(event.target);\n\n\t\tif (!item) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.context.controller.onMouseDown(this.context.tree, item.model.getElement(), event);\n\t}\n\n\tprivate onMouseUp(e: MouseEvent): void {\n\t\tif (!this.context.controller.onMouseUp) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.lastPointerType && this.lastPointerType !== 'mouse') {\n\t\t\treturn;\n\t\t}\n\n\t\tvar event = new Mouse.StandardMouseEvent(e);\n\n\t\tif (event.ctrlKey && Platform.isNative && Platform.isMacintosh) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar item = this.getItemAround(event.target);\n\n\t\tif (!item) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.context.controller.onMouseUp(this.context.tree, item.model.getElement(), event);\n\t}\n\n\tprivate onTap(e: Touch.GestureEvent): void {\n\t\tvar item = this.getItemAround(e.initialTarget);\n\n\t\tif (!item) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.context.controller.onTap(this.context.tree, item.model.getElement(), e);\n\t}\n\n\tprivate onTouchChange(event: Touch.GestureEvent): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tthis.scrollTop -= event.translationY;\n\t}\n\n\tprivate onContextMenu(keyboardEvent: KeyboardEvent): void;\n\tprivate onContextMenu(mouseEvent: MouseEvent): void;\n\tprivate onContextMenu(event: KeyboardEvent | MouseEvent): void {\n\t\tvar resultEvent: _.ContextMenuEvent;\n\t\tvar element: any;\n\n\t\tif (event instanceof KeyboardEvent || this.didJustPressContextMenuKey) {\n\t\t\tthis.didJustPressContextMenuKey = false;\n\n\t\t\tvar keyboardEvent = new Keyboard.StandardKeyboardEvent(event);\n\t\t\telement = this.model.getFocus();\n\n\t\t\tif (!element) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar id = this.context.dataSource.getId(this.context.tree, element);\n\t\t\tvar viewItem = this.items[id];\n\t\t\tvar position = DOM.getDomNodePagePosition(viewItem.element);\n\n\t\t\tresultEvent = new _.KeyboardContextMenuEvent(position.left + position.width, position.top, keyboardEvent);\n\n\t\t} else {\n\t\t\tvar mouseEvent = new Mouse.StandardMouseEvent(event);\n\t\t\tvar item = this.getItemAround(mouseEvent.target);\n\n\t\t\tif (!item) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telement = item.model.getElement();\n\t\t\tresultEvent = new _.MouseContextMenuEvent(mouseEvent);\n\t\t}\n\n\t\tthis.context.controller.onContextMenu(this.context.tree, element, resultEvent);\n\t}\n\n\tprivate onKeyDown(e: KeyboardEvent): void {\n\t\tvar event = new Keyboard.StandardKeyboardEvent(e);\n\n\t\tthis.didJustPressContextMenuKey = event.keyCode === KeyCode.ContextMenu || (event.shiftKey && event.keyCode === KeyCode.F10);\n\n\t\tif (this.didJustPressContextMenuKey) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\n\t\tif (event.target && event.target.tagName && event.target.tagName.toLowerCase() === 'input') {\n\t\t\treturn; // Ignore event if target is a form input field (avoids browser specific issues)\n\t\t}\n\n\t\tthis.context.controller.onKeyDown(this.context.tree, event);\n\t}\n\n\tprivate onKeyUp(e: KeyboardEvent): void {\n\t\tif (this.didJustPressContextMenuKey) {\n\t\t\tthis.onContextMenu(e);\n\t\t}\n\n\t\tthis.didJustPressContextMenuKey = false;\n\t\tthis.context.controller.onKeyUp(this.context.tree, new Keyboard.StandardKeyboardEvent(e));\n\t}\n\n\tprivate onDragStart(item: ViewItem, e: any): void {\n\t\tif (this.model.getHighlight()) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar element = item.model.getElement();\n\t\tvar selection = this.model.getSelection();\n\t\tvar elements: any[];\n\n\t\tif (selection.indexOf(element) > -1) {\n\t\t\telements = selection;\n\t\t} else {\n\t\t\telements = [element];\n\t\t}\n\n\t\te.dataTransfer.effectAllowed = 'copyMove';\n\t\te.dataTransfer.setData('URL', item.uri);\n\t\tif (e.dataTransfer.setDragImage) {\n\t\t\tlet label: string;\n\n\t\t\tif (this.context.dnd.getDragLabel) {\n\t\t\t\tlabel = this.context.dnd.getDragLabel(this.context.tree, elements);\n\t\t\t} else {\n\t\t\t\tlabel = String(elements.length);\n\t\t\t}\n\n\t\t\tconst dragImage = document.createElement('div');\n\t\t\tdragImage.className = 'monaco-tree-drag-image';\n\t\t\tdragImage.textContent = label;\n\t\t\tdocument.body.appendChild(dragImage);\n\t\t\te.dataTransfer.setDragImage(dragImage, -10, -10);\n\t\t\tsetTimeout(() => document.body.removeChild(dragImage), 0);\n\t\t}\n\n\t\tthis.currentDragAndDropData = new dnd.ElementsDragAndDropData(elements);\n\t\tTreeView.currentExternalDragAndDropData = new dnd.ExternalElementsDragAndDropData(elements);\n\n\t\tthis.context.dnd.onDragStart(this.context.tree, this.currentDragAndDropData, new Mouse.DragMouseEvent(e));\n\t}\n\n\tprivate setupDragAndDropScrollInterval(): void {\n\t\tvar viewTop = DOM.getTopLeftOffset(this.wrapper).top;\n\n\t\tif (!this.dragAndDropScrollInterval) {\n\t\t\tthis.dragAndDropScrollInterval = window.setInterval(() => {\n\t\t\t\tif (this.dragAndDropMouseY === undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar diff = this.dragAndDropMouseY - viewTop;\n\t\t\t\tvar scrollDiff = 0;\n\t\t\t\tvar upperLimit = this.viewHeight - 35;\n\n\t\t\t\tif (diff < 35) {\n\t\t\t\t\tscrollDiff = Math.max(-14, 0.2 * (diff - 35));\n\t\t\t\t} else if (diff > upperLimit) {\n\t\t\t\t\tscrollDiff = Math.min(14, 0.2 * (diff - upperLimit));\n\t\t\t\t}\n\n\t\t\t\tthis.scrollTop += scrollDiff;\n\t\t\t}, 10);\n\n\t\t\tthis.cancelDragAndDropScrollTimeout();\n\n\t\t\tthis.dragAndDropScrollTimeout = window.setTimeout(() => {\n\t\t\t\tthis.cancelDragAndDropScrollInterval();\n\t\t\t\tthis.dragAndDropScrollTimeout = null;\n\t\t\t}, 1000);\n\t\t}\n\t}\n\n\tprivate cancelDragAndDropScrollInterval(): void {\n\t\tif (this.dragAndDropScrollInterval) {\n\t\t\twindow.clearInterval(this.dragAndDropScrollInterval);\n\t\t\tthis.dragAndDropScrollInterval = null;\n\t\t}\n\n\t\tthis.cancelDragAndDropScrollTimeout();\n\t}\n\n\tprivate cancelDragAndDropScrollTimeout(): void {\n\t\tif (this.dragAndDropScrollTimeout) {\n\t\t\twindow.clearTimeout(this.dragAndDropScrollTimeout);\n\t\t\tthis.dragAndDropScrollTimeout = null;\n\t\t}\n\t}\n\n\tprivate onDragOver(e: DragEvent): boolean {\n\t\tvar event = new Mouse.DragMouseEvent(e);\n\n\t\tvar viewItem = this.getItemAround(event.target);\n\n\t\tif (!viewItem || (event.posx === 0 && event.posy === 0 && event.browserEvent.type === DOM.EventType.DRAG_LEAVE)) {\n\t\t\t// dragging outside of tree\n\n\t\t\tif (this.currentDropTarget) {\n\t\t\t\t// clear previously hovered element feedback\n\n\t\t\t\tthis.currentDropTargets.forEach(i => i.dropTarget = false);\n\t\t\t\tthis.currentDropTargets = [];\n\n\t\t\t\tif (this.currentDropPromise) {\n\t\t\t\t\tthis.currentDropPromise.cancel();\n\t\t\t\t\tthis.currentDropPromise = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.cancelDragAndDropScrollInterval();\n\t\t\tthis.currentDropTarget = null;\n\t\t\tthis.currentDropElement = null;\n\t\t\tthis.dragAndDropMouseY = null;\n\n\t\t\treturn false;\n\t\t}\n\n\t\t// dragging inside the tree\n\t\tthis.setupDragAndDropScrollInterval();\n\t\tthis.dragAndDropMouseY = event.posy;\n\n\t\tif (!this.currentDragAndDropData) {\n\t\t\t// just started dragging\n\n\t\t\tif (TreeView.currentExternalDragAndDropData) {\n\t\t\t\tthis.currentDragAndDropData = TreeView.currentExternalDragAndDropData;\n\t\t\t} else {\n\t\t\t\tif (!event.dataTransfer.types) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tthis.currentDragAndDropData = new dnd.DesktopDragAndDropData();\n\t\t\t}\n\t\t}\n\n\t\tthis.currentDragAndDropData.update(event);\n\n\t\tvar element: any;\n\t\tvar item: Model.Item = viewItem.model;\n\t\tvar reaction: _.IDragOverReaction;\n\n\t\t// check the bubble up behavior\n\t\tdo {\n\t\t\telement = item ? item.getElement() : this.model.getInput();\n\t\t\treaction = this.context.dnd.onDragOver(this.context.tree, this.currentDragAndDropData, element, event);\n\n\t\t\tif (!reaction || reaction.bubble !== _.DragOverBubble.BUBBLE_UP) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\titem = item && item.parent;\n\t\t} while (item);\n\n\t\tif (!item) {\n\t\t\tthis.currentDropElement = null;\n\t\t\treturn false;\n\t\t}\n\n\t\tvar canDrop = reaction && reaction.accept;\n\n\t\tif (canDrop) {\n\t\t\tthis.currentDropElement = item.getElement();\n\t\t\tevent.preventDefault();\n\t\t\tevent.dataTransfer.dropEffect = reaction.effect === _.DragOverEffect.COPY ? 'copy' : 'move';\n\t\t} else {\n\t\t\tthis.currentDropElement = null;\n\t\t}\n\n\t\t// item is the model item where drop() should be called\n\n\t\t// can be null\n\t\tvar currentDropTarget = item.id === this.inputItem.id ? this.inputItem : this.items[item.id];\n\n\t\tif (this.shouldInvalidateDropReaction || this.currentDropTarget !== currentDropTarget || !reactionEquals(this.currentDropElementReaction, reaction)) {\n\t\t\tthis.shouldInvalidateDropReaction = false;\n\n\t\t\tif (this.currentDropTarget) {\n\t\t\t\tthis.currentDropTargets.forEach(i => i.dropTarget = false);\n\t\t\t\tthis.currentDropTargets = [];\n\n\t\t\t\tif (this.currentDropPromise) {\n\t\t\t\t\tthis.currentDropPromise.cancel();\n\t\t\t\t\tthis.currentDropPromise = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.currentDropTarget = currentDropTarget;\n\t\t\tthis.currentDropElementReaction = reaction;\n\n\t\t\tif (canDrop) {\n\t\t\t\t// setup hover feedback for drop target\n\n\t\t\t\tif (this.currentDropTarget) {\n\t\t\t\t\tthis.currentDropTarget.dropTarget = true;\n\t\t\t\t\tthis.currentDropTargets.push(this.currentDropTarget);\n\t\t\t\t}\n\n\t\t\t\tif (reaction.bubble === _.DragOverBubble.BUBBLE_DOWN) {\n\t\t\t\t\tvar nav = item.getNavigator();\n\t\t\t\t\tvar child: Model.Item;\n\t\t\t\t\twhile (child = nav.next()) {\n\t\t\t\t\t\tviewItem = this.items[child.id];\n\t\t\t\t\t\tif (viewItem) {\n\t\t\t\t\t\t\tviewItem.dropTarget = true;\n\t\t\t\t\t\t\tthis.currentDropTargets.push(viewItem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (reaction.autoExpand) {\n\t\t\t\t\tthis.currentDropPromise = WinJS.TPromise.timeout(500)\n\t\t\t\t\t\t.then(() => this.context.tree.expand(this.currentDropElement))\n\t\t\t\t\t\t.then(() => this.shouldInvalidateDropReaction = true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate onDrop(e: DragEvent): void {\n\t\tif (this.currentDropElement) {\n\t\t\tvar event = new Mouse.DragMouseEvent(e);\n\t\t\tevent.preventDefault();\n\t\t\tthis.currentDragAndDropData.update(event);\n\t\t\tthis.context.dnd.drop(this.context.tree, this.currentDragAndDropData, this.currentDropElement, event);\n\t\t\tthis.onDragEnd(e);\n\t\t}\n\t\tthis.cancelDragAndDropScrollInterval();\n\t}\n\n\tprivate onDragEnd(e: DragEvent): void {\n\t\tif (this.currentDropTarget) {\n\t\t\tthis.currentDropTargets.forEach(i => i.dropTarget = false);\n\t\t\tthis.currentDropTargets = [];\n\t\t}\n\n\t\tif (this.currentDropPromise) {\n\t\t\tthis.currentDropPromise.cancel();\n\t\t\tthis.currentDropPromise = null;\n\t\t}\n\n\t\tthis.cancelDragAndDropScrollInterval();\n\t\tthis.currentDragAndDropData = null;\n\t\tTreeView.currentExternalDragAndDropData = null;\n\t\tthis.currentDropElement = null;\n\t\tthis.currentDropTarget = null;\n\t\tthis.dragAndDropMouseY = null;\n\t}\n\n\tprivate onFocus(): void {\n\t\tif (!this.context.options.alwaysFocused) {\n\t\t\tDOM.addClass(this.domNode, 'focused');\n\t\t}\n\n\t\tthis._onDOMFocus.fire();\n\t}\n\n\tprivate onBlur(): void {\n\t\tif (!this.context.options.alwaysFocused) {\n\t\t\tDOM.removeClass(this.domNode, 'focused');\n\t\t}\n\n\t\tthis.domNode.removeAttribute('aria-activedescendant'); // ARIA\n\n\t\tthis._onDOMBlur.fire();\n\t}\n\n\t// MS specific DOM Events\n\n\tprivate onMsPointerDown(event: MSPointerEvent): void {\n\t\tif (!this.msGesture) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Circumvent IE11 breaking change in e.pointerType & TypeScript's stale definitions\n\t\tvar pointerType = event.pointerType;\n\t\tif (pointerType === ((event).MSPOINTER_TYPE_MOUSE || 'mouse')) {\n\t\t\tthis.lastPointerType = 'mouse';\n\t\t\treturn;\n\t\t} else if (pointerType === ((event).MSPOINTER_TYPE_TOUCH || 'touch')) {\n\t\t\tthis.lastPointerType = 'touch';\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\n\t\tthis.msGesture.addPointer(event.pointerId);\n\t}\n\n\tprivate onThrottledMsGestureChange(event: IThrottledGestureEvent): void {\n\t\tthis.scrollTop -= event.translationY;\n\t}\n\n\tprivate onMsGestureTap(event: MSGestureEvent): void {\n\t\t(event).initialTarget = document.elementFromPoint(event.clientX, event.clientY);\n\t\tthis.onTap(event);\n\t}\n\n\t// DOM changes\n\n\tprivate insertItemInDOM(item: ViewItem): void {\n\t\tvar elementAfter: HTMLElement = null;\n\t\tvar itemAfter = this.itemAfter(item);\n\n\t\tif (itemAfter && itemAfter.element) {\n\t\t\telementAfter = itemAfter.element;\n\t\t}\n\n\t\titem.insertInDOM(this.rowsContainer, elementAfter);\n\t}\n\n\tprivate removeItemFromDOM(item: ViewItem): void {\n\t\tif (!item) {\n\t\t\treturn;\n\t\t}\n\n\t\titem.removeFromDOM();\n\t}\n\n\t// Helpers\n\n\tprivate shouldBeRendered(item: ViewItem): boolean {\n\t\treturn item.top < this.lastRenderTop + this.lastRenderHeight && item.top + item.height > this.lastRenderTop;\n\t}\n\n\tprivate getItemAround(element: HTMLElement): ViewItem {\n\t\tvar candidate: ViewItem = this.inputItem;\n\t\tdo {\n\t\t\tif ((element)[TreeView.BINDING]) {\n\t\t\t\tcandidate = (element)[TreeView.BINDING];\n\t\t\t}\n\n\t\t\tif (element === this.wrapper || element === this.domNode) {\n\t\t\t\treturn candidate;\n\t\t\t}\n\n\t\t\tif (element === document.body) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t} while (element = element.parentElement);\n\t\treturn undefined;\n\t}\n\n\t// Cleanup\n\n\tprivate releaseModel(): void {\n\t\tif (this.model) {\n\t\t\tthis.modelListeners = Lifecycle.dispose(this.modelListeners);\n\t\t\tthis.model = null;\n\t\t}\n\t}\n\n\tpublic dispose(): void {\n\t\t// TODO@joao: improve\n\t\tthis.scrollableElement.dispose();\n\n\t\tthis.releaseModel();\n\t\tthis.modelListeners = null;\n\n\t\tthis.viewListeners = Lifecycle.dispose(this.viewListeners);\n\n\t\tthis._onDOMFocus.dispose();\n\t\tthis._onDOMBlur.dispose();\n\n\t\tif (this.domNode.parentNode) {\n\t\t\tthis.domNode.parentNode.removeChild(this.domNode);\n\t\t}\n\t\tthis.domNode = null;\n\n\t\tif (this.wrapperGesture) {\n\t\t\tthis.wrapperGesture.dispose();\n\t\t\tthis.wrapperGesture = null;\n\t\t}\n\n\t\tif (this.context.cache) {\n\t\t\tthis.context.cache.dispose();\n\t\t\tthis.context.cache = null;\n\t\t}\n\n\t\tsuper.dispose();\n\t}\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\nimport 'vs/css!./selectBox';\n\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { Widget } from 'vs/base/browser/ui/widget';\nimport * as dom from 'vs/base/browser/dom';\nimport * as arrays from 'vs/base/common/arrays';\nimport { Color } from 'vs/base/common/color';\nimport { clone } from 'vs/base/common/objects';\n\nexport interface ISelectBoxStyles {\n\tselectBackground?: Color;\n\tselectForeground?: Color;\n\tselectBorder?: Color;\n}\n\nconst defaultStyles = {\n\tselectBackground: Color.fromHex('#3C3C3C'),\n\tselectForeground: Color.fromHex('#F0F0F0'),\n\tselectBorder: Color.fromHex('#3C3C3C')\n};\n\nexport class SelectBox extends Widget {\n\n\tprivate selectElement: HTMLSelectElement;\n\tprivate options: string[];\n\tprivate selected: number;\n\tprivate container: HTMLElement;\n\tprivate _onDidSelect: Emitter;\n\tprivate toDispose: IDisposable[];\n\tprivate selectBackground: Color;\n\tprivate selectForeground: Color;\n\tprivate selectBorder: Color;\n\n\tconstructor(options: string[], selected: number, styles: ISelectBoxStyles = clone(defaultStyles)) {\n\t\tsuper();\n\n\t\tthis.selectElement = document.createElement('select');\n\t\tthis.selectElement.className = 'select-box';\n\n\t\tthis.setOptions(options, selected);\n\t\tthis.toDispose = [];\n\t\tthis._onDidSelect = new Emitter();\n\n\t\tthis.selectBackground = styles.selectBackground;\n\t\tthis.selectForeground = styles.selectForeground;\n\t\tthis.selectBorder = styles.selectBorder;\n\n\t\tthis.toDispose.push(dom.addStandardDisposableListener(this.selectElement, 'change', (e) => {\n\t\t\tthis.selectElement.title = e.target.value;\n\t\t\tthis._onDidSelect.fire(e.target.value);\n\t\t}));\n\t}\n\n\tpublic get onDidSelect(): Event {\n\t\treturn this._onDidSelect.event;\n\t}\n\n\tpublic setOptions(options: string[], selected?: number, disabled?: number): void {\n\t\tif (!this.options || !arrays.equals(this.options, options)) {\n\t\t\tthis.options = options;\n\n\t\t\tthis.selectElement.options.length = 0;\n\t\t\tlet i = 0;\n\t\t\tthis.options.forEach((option) => {\n\t\t\t\tthis.selectElement.add(this.createOption(option, disabled === i++));\n\t\t\t});\n\t\t}\n\t\tthis.select(selected);\n\t}\n\n\tpublic select(index: number): void {\n\t\tif (index >= 0 && index < this.options.length) {\n\t\t\tthis.selected = index;\n\t\t} else if (this.selected < 0) {\n\t\t\tthis.selected = 0;\n\t\t}\n\n\t\tthis.selectElement.selectedIndex = this.selected;\n\t\tthis.selectElement.title = this.options[this.selected];\n\t}\n\n\tpublic focus(): void {\n\t\tif (this.selectElement) {\n\t\t\tthis.selectElement.focus();\n\t\t}\n\t}\n\n\tpublic blur(): void {\n\t\tif (this.selectElement) {\n\t\t\tthis.selectElement.blur();\n\t\t}\n\t}\n\n\tpublic render(container: HTMLElement): void {\n\t\tthis.container = container;\n\t\tdom.addClass(container, 'select-container');\n\t\tcontainer.appendChild(this.selectElement);\n\t\tthis.setOptions(this.options, this.selected);\n\n\t\tthis.applyStyles();\n\t}\n\n\tpublic style(styles: ISelectBoxStyles): void {\n\t\tthis.selectBackground = styles.selectBackground;\n\t\tthis.selectForeground = styles.selectForeground;\n\t\tthis.selectBorder = styles.selectBorder;\n\n\t\tthis.applyStyles();\n\t}\n\n\tprotected applyStyles(): void {\n\t\tif (this.selectElement) {\n\t\t\tconst background = this.selectBackground ? this.selectBackground.toString() : null;\n\t\t\tconst foreground = this.selectForeground ? this.selectForeground.toString() : null;\n\t\t\tconst border = this.selectBorder ? this.selectBorder.toString() : null;\n\n\t\t\tthis.selectElement.style.backgroundColor = background;\n\t\t\tthis.selectElement.style.color = foreground;\n\t\t\tthis.selectElement.style.borderColor = border;\n\t\t}\n\t}\n\n\tprivate createOption(value: string, disabled?: boolean): HTMLOptionElement {\n\t\tlet option = document.createElement('option');\n\t\toption.value = value;\n\t\toption.text = value;\n\t\toption.disabled = disabled;\n\n\t\treturn option;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.toDispose = dispose(this.toDispose);\n\t\tsuper.dispose();\n\t}\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'use strict';\n\nimport { BareFontInfo } from 'vs/editor/common/config/fontInfo';\n\nexport const enum CharWidthRequestType {\n\tRegular = 0,\n\tItalic = 1,\n\tBold = 2\n}\n\nexport class CharWidthRequest {\n\n\tpublic readonly chr: string;\n\tpublic readonly type: CharWidthRequestType;\n\tpublic width: number;\n\n\tconstructor(chr: string, type: CharWidthRequestType) {\n\t\tthis.chr = chr;\n\t\tthis.type = type;\n\t\tthis.width = 0;\n\t}\n\n\tpublic fulfill(width: number) {\n\t\tthis.width = width;\n\t}\n}\n\ninterface ICharWidthReader {\n\tread(): void;\n}\n\nclass DomCharWidthReader implements ICharWidthReader {\n\n\tprivate readonly _bareFontInfo: BareFontInfo;\n\tprivate readonly _requests: CharWidthRequest[];\n\n\tprivate _container: HTMLElement;\n\tprivate _testElements: HTMLSpanElement[];\n\n\tconstructor(bareFontInfo: BareFontInfo, requests: CharWidthRequest[]) {\n\t\tthis._bareFontInfo = bareFontInfo;\n\t\tthis._requests = requests;\n\n\t\tthis._container = null;\n\t\tthis._testElements = null;\n\t}\n\n\tpublic read(): void {\n\t\t// Create a test container with all these test elements\n\t\tthis._createDomElements();\n\n\t\t// Add the container to the DOM\n\t\tdocument.body.appendChild(this._container);\n\n\t\t// Read character widths\n\t\tthis._readFromDomElements();\n\n\t\t// Remove the container from the DOM\n\t\tdocument.body.removeChild(this._container);\n\n\t\tthis._container = null;\n\t\tthis._testElements = null;\n\t}\n\n\tprivate _createDomElements(): void {\n\t\tlet container = document.createElement('div');\n\t\tcontainer.style.position = 'absolute';\n\t\tcontainer.style.top = '-50000px';\n\t\tcontainer.style.width = '50000px';\n\n\t\tlet regularDomNode = document.createElement('div');\n\t\tregularDomNode.style.fontFamily = this._bareFontInfo.fontFamily;\n\t\tregularDomNode.style.fontWeight = this._bareFontInfo.fontWeight;\n\t\tregularDomNode.style.fontSize = this._bareFontInfo.fontSize + 'px';\n\t\tregularDomNode.style.lineHeight = this._bareFontInfo.lineHeight + 'px';\n\t\tregularDomNode.style.letterSpacing = this._bareFontInfo.letterSpacing + 'px';\n\t\tcontainer.appendChild(regularDomNode);\n\n\t\tlet boldDomNode = document.createElement('div');\n\t\tboldDomNode.style.fontFamily = this._bareFontInfo.fontFamily;\n\t\tboldDomNode.style.fontWeight = 'bold';\n\t\tboldDomNode.style.fontSize = this._bareFontInfo.fontSize + 'px';\n\t\tboldDomNode.style.lineHeight = this._bareFontInfo.lineHeight + 'px';\n\t\tboldDomNode.style.letterSpacing = this._bareFontInfo.letterSpacing + 'px';\n\t\tcontainer.appendChild(boldDomNode);\n\n\t\tlet italicDomNode = document.createElement('div');\n\t\titalicDomNode.style.fontFamily = this._bareFontInfo.fontFamily;\n\t\titalicDomNode.style.fontWeight = this._bareFontInfo.fontWeight;\n\t\titalicDomNode.style.fontSize = this._bareFontInfo.fontSize + 'px';\n\t\titalicDomNode.style.lineHeight = this._bareFontInfo.lineHeight + 'px';\n\t\titalicDomNode.style.letterSpacing = this._bareFontInfo.letterSpacing + 'px';\n\t\titalicDomNode.style.fontStyle = 'italic';\n\t\tcontainer.appendChild(italicDomNode);\n\n\t\tlet testElements: HTMLSpanElement[] = [];\n\t\tfor (let i = 0, len = this._requests.length; i < len; i++) {\n\t\t\tconst request = this._requests[i];\n\n\t\t\tlet parent: HTMLElement;\n\t\t\tif (request.type === CharWidthRequestType.Regular) {\n\t\t\t\tparent = regularDomNode;\n\t\t\t}\n\t\t\tif (request.type === CharWidthRequestType.Bold) {\n\t\t\t\tparent = boldDomNode;\n\t\t\t}\n\t\t\tif (request.type === CharWidthRequestType.Italic) {\n\t\t\t\tparent = italicDomNode;\n\t\t\t}\n\n\t\t\tparent.appendChild(document.createElement('br'));\n\n\t\t\tlet testElement = document.createElement('span');\n\t\t\tDomCharWidthReader._render(testElement, request);\n\t\t\tparent.appendChild(testElement);\n\n\t\t\ttestElements[i] = testElement;\n\t\t}\n\n\t\tthis._container = container;\n\t\tthis._testElements = testElements;\n\t}\n\n\tprivate static _render(testElement: HTMLElement, request: CharWidthRequest): void {\n\t\tif (request.chr === ' ') {\n\t\t\tlet htmlString = ' ';\n\t\t\t// Repeat character 256 (2^8) times\n\t\t\tfor (let i = 0; i < 8; i++) {\n\t\t\t\thtmlString += htmlString;\n\t\t\t}\n\t\t\ttestElement.innerHTML = htmlString;\n\t\t} else {\n\t\t\tlet testString = request.chr;\n\t\t\t// Repeat character 256 (2^8) times\n\t\t\tfor (let i = 0; i < 8; i++) {\n\t\t\t\ttestString += testString;\n\t\t\t}\n\t\t\ttestElement.textContent = testString;\n\t\t}\n\t}\n\n\tprivate _readFromDomElements(): void {\n\t\tfor (let i = 0, len = this._requests.length; i < len; i++) {\n\t\t\tconst request = this._requests[i];\n\t\t\tconst testElement = this._testElements[i];\n\n\t\t\trequest.fulfill(testElement.offsetWidth / 256);\n\t\t}\n\t}\n}\n\nexport function readCharWidths(bareFontInfo: BareFontInfo, requests: CharWidthRequest[]): void {\n\tlet reader = new DomCharWidthReader(bareFontInfo, requests);\n\treader.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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { IDimension } from 'vs/editor/common/editorCommon';\n\nexport class ElementSizeObserver extends Disposable {\n\n\tprivate referenceDomElement: HTMLElement;\n\tprivate measureReferenceDomElementToken: number;\n\tprivate changeCallback: () => void;\n\tprivate width: number;\n\tprivate height: number;\n\n\tconstructor(referenceDomElement: HTMLElement, changeCallback: () => void) {\n\t\tsuper();\n\t\tthis.referenceDomElement = referenceDomElement;\n\t\tthis.changeCallback = changeCallback;\n\t\tthis.measureReferenceDomElementToken = -1;\n\t\tthis.width = -1;\n\t\tthis.height = -1;\n\t\tthis.measureReferenceDomElement(false);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.stopObserving();\n\t\tsuper.dispose();\n\t}\n\n\tpublic getWidth(): number {\n\t\treturn this.width;\n\t}\n\n\tpublic getHeight(): number {\n\t\treturn this.height;\n\t}\n\n\tpublic startObserving(): void {\n\t\tif (this.measureReferenceDomElementToken === -1) {\n\t\t\tthis.measureReferenceDomElementToken = setInterval(() => this.measureReferenceDomElement(true), 100);\n\t\t}\n\t}\n\n\tpublic stopObserving(): void {\n\t\tif (this.measureReferenceDomElementToken !== -1) {\n\t\t\tclearInterval(this.measureReferenceDomElementToken);\n\t\t\tthis.measureReferenceDomElementToken = -1;\n\t\t}\n\t}\n\n\tpublic observe(dimension?: IDimension): void {\n\t\tthis.measureReferenceDomElement(true, dimension);\n\t}\n\n\tprivate measureReferenceDomElement(callChangeCallback: boolean, dimension?: IDimension): void {\n\t\tlet observedWidth = 0;\n\t\tlet observedHeight = 0;\n\t\tif (dimension) {\n\t\t\tobservedWidth = dimension.width;\n\t\t\tobservedHeight = dimension.height;\n\t\t} else if (this.referenceDomElement) {\n\t\t\tobservedWidth = this.referenceDomElement.clientWidth;\n\t\t\tobservedHeight = this.referenceDomElement.clientHeight;\n\t\t}\n\t\tobservedWidth = Math.max(5, observedWidth);\n\t\tobservedHeight = Math.max(5, observedHeight);\n\t\tif (this.width !== observedWidth || this.height !== observedHeight) {\n\t\t\tthis.width = observedWidth;\n\t\t\tthis.height = observedHeight;\n\t\t\tif (callChangeCallback) {\n\t\t\t\tthis.changeCallback();\n\t\t\t}\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport { IMouseEvent } from 'vs/base/browser/mouseEvent';\nimport { IConstructorSignature1 } from 'vs/platform/instantiation/common/instantiation';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { Position, IPosition } from 'vs/editor/common/core/position';\nimport { Range, IRange } from 'vs/editor/common/core/range';\nimport * as editorOptions from 'vs/editor/common/config/editorOptions';\nimport { OverviewRulerZone } from 'vs/editor/common/view/overviewZoneManager';\nimport { IEditorWhitespace } from 'vs/editor/common/viewLayout/whitespaceComputer';\n\n/**\n * A view zone is a full horizontal rectangle that 'pushes' text down.\n * The editor reserves space for view zones when rendering.\n */\nexport interface IViewZone {\n\t/**\n\t * The line number after which this zone should appear.\n\t * Use 0 to place a view zone before the first line number.\n\t */\n\tafterLineNumber: number;\n\t/**\n\t * The column after which this zone should appear.\n\t * If not set, the maxLineColumn of `afterLineNumber` will be used.\n\t */\n\tafterColumn?: number;\n\t/**\n\t * Suppress mouse down events.\n\t * If set, the editor will attach a mouse down listener to the view zone and .preventDefault on it.\n\t * Defaults to false\n\t */\n\tsuppressMouseDown?: boolean;\n\t/**\n\t * The height in lines of the view zone.\n\t * If specified, `heightInPx` will be used instead of this.\n\t * If neither `heightInPx` nor `heightInLines` is specified, a default of `heightInLines` = 1 will be chosen.\n\t */\n\theightInLines?: number;\n\t/**\n\t * The height in px of the view zone.\n\t * If this is set, the editor will give preference to it rather than `heightInLines` above.\n\t * If neither `heightInPx` nor `heightInLines` is specified, a default of `heightInLines` = 1 will be chosen.\n\t */\n\theightInPx?: number;\n\t/**\n\t * The dom node of the view zone\n\t */\n\tdomNode: HTMLElement;\n\t/**\n\t * An optional dom node for the view zone that will be placed in the margin area.\n\t */\n\tmarginDomNode?: HTMLElement;\n\t/**\n\t * Callback which gives the relative top of the view zone as it appears (taking scrolling into account).\n\t */\n\tonDomNodeTop?: (top: number) => void;\n\t/**\n\t * Callback which gives the height in pixels of the view zone.\n\t */\n\tonComputedHeight?: (height: number) => void;\n}\n/**\n * An accessor that allows for zones to be added or removed.\n */\nexport interface IViewZoneChangeAccessor {\n\t/**\n\t * Create a new view zone.\n\t * @param zone Zone to create\n\t * @return A unique identifier to the view zone.\n\t */\n\taddZone(zone: IViewZone): number;\n\t/**\n\t * Remove a zone\n\t * @param id A unique identifier to the view zone, as returned by the `addZone` call.\n\t */\n\tremoveZone(id: number): void;\n\t/**\n\t * Change a zone's position.\n\t * The editor will rescan the `afterLineNumber` and `afterColumn` properties of a view zone.\n\t */\n\tlayoutZone(id: number): void;\n}\n\n/**\n * A positioning preference for rendering content widgets.\n */\nexport enum ContentWidgetPositionPreference {\n\t/**\n\t * Place the content widget exactly at a position\n\t */\n\tEXACT,\n\t/**\n\t * Place the content widget above a position\n\t */\n\tABOVE,\n\t/**\n\t * Place the content widget below a position\n\t */\n\tBELOW\n}\n/**\n * A position for rendering content widgets.\n */\nexport interface IContentWidgetPosition {\n\t/**\n\t * Desired position for the content widget.\n\t * `preference` will also affect the placement.\n\t */\n\tposition: IPosition;\n\t/**\n\t * Placement preference for position, in order of preference.\n\t */\n\tpreference: ContentWidgetPositionPreference[];\n}\n/**\n * A content widget renders inline with the text and can be easily placed 'near' an editor position.\n */\nexport interface IContentWidget {\n\t/**\n\t * Render this content widget in a location where it could overflow the editor's view dom node.\n\t */\n\tallowEditorOverflow?: boolean;\n\n\tsuppressMouseDown?: boolean;\n\t/**\n\t * Get a unique identifier of the content widget.\n\t */\n\tgetId(): string;\n\t/**\n\t * Get the dom node of the content widget.\n\t */\n\tgetDomNode(): HTMLElement;\n\t/**\n\t * Get the placement of the content widget.\n\t * If null is returned, the content widget will be placed off screen.\n\t */\n\tgetPosition(): IContentWidgetPosition;\n}\n\n/**\n * A positioning preference for rendering overlay widgets.\n */\nexport enum OverlayWidgetPositionPreference {\n\t/**\n\t * Position the overlay widget in the top right corner\n\t */\n\tTOP_RIGHT_CORNER,\n\n\t/**\n\t * Position the overlay widget in the bottom right corner\n\t */\n\tBOTTOM_RIGHT_CORNER,\n\n\t/**\n\t * Position the overlay widget in the top center\n\t */\n\tTOP_CENTER\n}\n/**\n * A position for rendering overlay widgets.\n */\nexport interface IOverlayWidgetPosition {\n\t/**\n\t * The position preference for the overlay widget.\n\t */\n\tpreference: OverlayWidgetPositionPreference;\n}\n/**\n * An overlay widgets renders on top of the text.\n */\nexport interface IOverlayWidget {\n\t/**\n\t * Get a unique identifier of the overlay widget.\n\t */\n\tgetId(): string;\n\t/**\n\t * Get the dom node of the overlay widget.\n\t */\n\tgetDomNode(): HTMLElement;\n\t/**\n\t * Get the placement of the overlay widget.\n\t * If null is returned, the overlay widget is responsible to place itself.\n\t */\n\tgetPosition(): IOverlayWidgetPosition;\n}\n\n/**\n * Type of hit element with the mouse in the editor.\n */\nexport enum MouseTargetType {\n\t/**\n\t * Mouse is on top of an unknown element.\n\t */\n\tUNKNOWN,\n\t/**\n\t * Mouse is on top of the textarea used for input.\n\t */\n\tTEXTAREA,\n\t/**\n\t * Mouse is on top of the glyph margin\n\t */\n\tGUTTER_GLYPH_MARGIN,\n\t/**\n\t * Mouse is on top of the line numbers\n\t */\n\tGUTTER_LINE_NUMBERS,\n\t/**\n\t * Mouse is on top of the line decorations\n\t */\n\tGUTTER_LINE_DECORATIONS,\n\t/**\n\t * Mouse is on top of the whitespace left in the gutter by a view zone.\n\t */\n\tGUTTER_VIEW_ZONE,\n\t/**\n\t * Mouse is on top of text in the content.\n\t */\n\tCONTENT_TEXT,\n\t/**\n\t * Mouse is on top of empty space in the content (e.g. after line text or below last line)\n\t */\n\tCONTENT_EMPTY,\n\t/**\n\t * Mouse is on top of a view zone in the content.\n\t */\n\tCONTENT_VIEW_ZONE,\n\t/**\n\t * Mouse is on top of a content widget.\n\t */\n\tCONTENT_WIDGET,\n\t/**\n\t * Mouse is on top of the decorations overview ruler.\n\t */\n\tOVERVIEW_RULER,\n\t/**\n\t * Mouse is on top of a scrollbar.\n\t */\n\tSCROLLBAR,\n\t/**\n\t * Mouse is on top of an overlay widget.\n\t */\n\tOVERLAY_WIDGET,\n\t/**\n\t * Mouse is outside of the editor.\n\t */\n\tOUTSIDE_EDITOR,\n}\n\n/**\n * Target hit with the mouse in the editor.\n */\nexport interface IMouseTarget {\n\t/**\n\t * The target element\n\t */\n\treadonly element: Element;\n\t/**\n\t * The target type\n\t */\n\treadonly type: MouseTargetType;\n\t/**\n\t * The 'approximate' editor position\n\t */\n\treadonly position: Position;\n\t/**\n\t * Desired mouse column (e.g. when position.column gets clamped to text length -- clicking after text on a line).\n\t */\n\treadonly mouseColumn: number;\n\t/**\n\t * The 'approximate' editor range\n\t */\n\treadonly range: Range;\n\t/**\n\t * Some extra detail.\n\t */\n\treadonly detail: any;\n}\n/**\n * A mouse event originating from the editor.\n */\nexport interface IEditorMouseEvent {\n\treadonly event: IMouseEvent;\n\treadonly target: IMouseTarget;\n}\n\n/**\n * @internal\n */\nexport type IEditorContributionCtor = IConstructorSignature1;\n\n/**\n * An overview ruler\n * @internal\n */\nexport interface IOverviewRuler {\n\tgetDomNode(): HTMLElement;\n\tdispose(): void;\n\tsetZones(zones: OverviewRulerZone[]): void;\n\tsetLayout(position: editorOptions.OverviewRulerPosition): void;\n}\n\n/**\n * A rich code editor.\n */\nexport interface ICodeEditor extends editorCommon.ICommonCodeEditor {\n\t/**\n\t * An event emitted on a \"mouseup\".\n\t * @event\n\t */\n\tonMouseUp(listener: (e: IEditorMouseEvent) => void): IDisposable;\n\t/**\n\t * An event emitted on a \"mousedown\".\n\t * @event\n\t */\n\tonMouseDown(listener: (e: IEditorMouseEvent) => void): IDisposable;\n\t/**\n\t * An event emitted on a \"mousedrag\".\n\t * @internal\n\t * @event\n\t */\n\tonMouseDrag(listener: (e: IEditorMouseEvent) => void): IDisposable;\n\t/**\n\t * An event emitted on a \"mousedrop\".\n\t * @internal\n\t * @event\n\t */\n\tonMouseDrop(listener: (e: IEditorMouseEvent) => void): IDisposable;\n\t/**\n\t * An event emitted on a \"contextmenu\".\n\t * @event\n\t */\n\tonContextMenu(listener: (e: IEditorMouseEvent) => void): IDisposable;\n\t/**\n\t * An event emitted on a \"mousemove\".\n\t * @event\n\t */\n\tonMouseMove(listener: (e: IEditorMouseEvent) => void): IDisposable;\n\t/**\n\t * An event emitted on a \"mouseleave\".\n\t * @event\n\t */\n\tonMouseLeave(listener: (e: IEditorMouseEvent) => void): IDisposable;\n\t/**\n\t * An event emitted on a \"keyup\".\n\t * @event\n\t */\n\tonKeyUp(listener: (e: IKeyboardEvent) => void): IDisposable;\n\t/**\n\t * An event emitted on a \"keydown\".\n\t * @event\n\t */\n\tonKeyDown(listener: (e: IKeyboardEvent) => void): IDisposable;\n\t/**\n\t * An event emitted when the layout of the editor has changed.\n\t * @event\n\t */\n\tonDidLayoutChange(listener: (e: editorOptions.EditorLayoutInfo) => void): IDisposable;\n\t/**\n\t * An event emitted when the scroll in the editor has changed.\n\t * @event\n\t */\n\tonDidScrollChange(listener: (e: editorCommon.IScrollEvent) => void): IDisposable;\n\n\t/**\n\t * Returns the editor's dom node\n\t */\n\tgetDomNode(): HTMLElement;\n\n\t/**\n\t * Add a content widget. Widgets must have unique ids, otherwise they will be overwritten.\n\t */\n\taddContentWidget(widget: IContentWidget): void;\n\t/**\n\t * Layout/Reposition a content widget. This is a ping to the editor to call widget.getPosition()\n\t * and update appropiately.\n\t */\n\tlayoutContentWidget(widget: IContentWidget): void;\n\t/**\n\t * Remove a content widget.\n\t */\n\tremoveContentWidget(widget: IContentWidget): void;\n\n\t/**\n\t * Add an overlay widget. Widgets must have unique ids, otherwise they will be overwritten.\n\t */\n\taddOverlayWidget(widget: IOverlayWidget): void;\n\t/**\n\t * Layout/Reposition an overlay widget. This is a ping to the editor to call widget.getPosition()\n\t * and update appropiately.\n\t */\n\tlayoutOverlayWidget(widget: IOverlayWidget): void;\n\t/**\n\t * Remove an overlay widget.\n\t */\n\tremoveOverlayWidget(widget: IOverlayWidget): void;\n\n\t/**\n\t * Change the view zones. View zones are lost when a new model is attached to the editor.\n\t */\n\tchangeViewZones(callback: (accessor: IViewZoneChangeAccessor) => void): void;\n\n\t/**\n\t * Returns the range that is currently centered in the view port.\n\t */\n\tgetCenteredRangeInViewport(): Range;\n\n\t/**\n\t * Get the view zones.\n\t * @internal\n\t */\n\tgetWhitespaces(): IEditorWhitespace[];\n\n\t/**\n\t * Get the horizontal position (left offset) for the column w.r.t to the beginning of the line.\n\t * This method works only if the line `lineNumber` is currently rendered (in the editor's viewport).\n\t * Use this method with caution.\n\t */\n\tgetOffsetForColumn(lineNumber: number, column: number): number;\n\n\t/**\n\t * Force an editor render now.\n\t */\n\trender(): void;\n\n\t/**\n\t * Get the vertical position (top offset) for the line w.r.t. to the first line.\n\t */\n\tgetTopForLineNumber(lineNumber: number): number;\n\n\t/**\n\t * Get the vertical position (top offset) for the position w.r.t. to the first line.\n\t */\n\tgetTopForPosition(lineNumber: number, column: number): number;\n\n\t/**\n\t * Get the hit test target at coordinates `clientX` and `clientY`.\n\t * The coordinates are relative to the top-left of the viewport.\n\t *\n\t * @returns Hit test target or null if the coordinates fall outside the editor or the editor has no model.\n\t */\n\tgetTargetAtClientPoint(clientX: number, clientY: number): IMouseTarget;\n\n\t/**\n\t * Get the visible position for `position`.\n\t * The result position takes scrolling into account and is relative to the top left corner of the editor.\n\t * Explanation 1: the results of this method will change for the same `position` if the user scrolls the editor.\n\t * Explanation 2: the results of this method will not change if the container of the editor gets repositioned.\n\t * Warning: the results of this method are innacurate for positions that are outside the current editor viewport.\n\t */\n\tgetScrolledVisiblePosition(position: IPosition): { top: number; left: number; height: number; };\n\n\t/**\n\t * Set the model ranges that will be hidden in the view.\n\t * @internal\n\t */\n\tsetHiddenAreas(ranges: IRange[]): void;\n\n\t/**\n\t * @internal\n\t */\n\tsetAriaActiveDescendant(id: string): void;\n\n\t/**\n\t * Apply the same font settings as the editor to `target`.\n\t */\n\tapplyFontInfo(target: HTMLElement): void;\n}\n\n/**\n * A rich diff editor.\n */\nexport interface IDiffEditor extends editorCommon.ICommonDiffEditor {\n\t/**\n\t * @see ICodeEditor.getDomNode\n\t */\n\tgetDomNode(): HTMLElement;\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'use strict';\n\nimport { IDisposable, Disposable } from 'vs/base/common/lifecycle';\nimport { StandardMouseEvent } from 'vs/base/browser/mouseEvent';\nimport * as dom from 'vs/base/browser/dom';\nimport { GlobalMouseMoveMonitor } from 'vs/base/browser/globalMouseMoveMonitor';\n\n/**\n * Coordinates relative to the whole document (e.g. mouse event's pageX and pageY)\n */\nexport class PageCoordinates {\n\t_pageCoordinatesBrand: void;\n\tpublic readonly x: number;\n\tpublic readonly y: number;\n\n\tconstructor(x: number, y: number) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t}\n\n\tpublic toClientCoordinates(): ClientCoordinates {\n\t\treturn new ClientCoordinates(this.x - dom.StandardWindow.scrollX, this.y - dom.StandardWindow.scrollY);\n\t}\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\t_clientCoordinatesBrand: void;\n\n\tpublic readonly clientX: number;\n\tpublic readonly clientY: number;\n\n\tconstructor(clientX: number, clientY: number) {\n\t\tthis.clientX = clientX;\n\t\tthis.clientY = clientY;\n\t}\n\n\tpublic toPageCoordinates(): PageCoordinates {\n\t\treturn new PageCoordinates(this.clientX + dom.StandardWindow.scrollX, this.clientY + dom.StandardWindow.scrollY);\n\t}\n}\n\n/**\n * The position of the editor in the page.\n */\nexport class EditorPagePosition {\n\t_editorPagePositionBrand: void;\n\n\tpublic readonly x: number;\n\tpublic readonly y: number;\n\tpublic readonly width: number;\n\tpublic readonly height: number;\n\n\tconstructor(x: number, y: number, width: number, height: number) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n}\n\nexport function createEditorPagePosition(editorViewDomNode: HTMLElement): EditorPagePosition {\n\tlet editorPos = dom.getDomNodePagePosition(editorViewDomNode);\n\treturn new EditorPagePosition(editorPos.left, editorPos.top, editorPos.width, editorPos.height);\n}\n\nexport class EditorMouseEvent extends StandardMouseEvent {\n\t_editorMouseEventBrand: void;\n\n\t/**\n\t * Coordinates relative to the whole document.\n\t */\n\tpublic readonly pos: PageCoordinates;\n\n\t/**\n\t * Editor's coordinates relative to the whole document.\n\t */\n\tpublic readonly editorPos: EditorPagePosition;\n\n\tconstructor(e: MouseEvent, editorViewDomNode: HTMLElement) {\n\t\tsuper(e);\n\t\tthis.pos = new PageCoordinates(this.posx, this.posy);\n\t\tthis.editorPos = createEditorPagePosition(editorViewDomNode);\n\t}\n}\n\nexport interface EditorMouseEventMerger {\n\t(lastEvent: EditorMouseEvent, currentEvent: EditorMouseEvent): EditorMouseEvent;\n}\n\nexport class EditorMouseEventFactory {\n\n\tprivate _editorViewDomNode: HTMLElement;\n\n\tconstructor(editorViewDomNode: HTMLElement) {\n\t\tthis._editorViewDomNode = editorViewDomNode;\n\t}\n\n\tprivate _create(e: MouseEvent): EditorMouseEvent {\n\t\treturn new EditorMouseEvent(e, this._editorViewDomNode);\n\t}\n\n\tpublic onContextMenu(target: HTMLElement, callback: (e: EditorMouseEvent) => void): IDisposable {\n\t\treturn dom.addDisposableListener(target, 'contextmenu', (e: MouseEvent) => {\n\t\t\tcallback(this._create(e));\n\t\t});\n\t}\n\n\tpublic onMouseUp(target: HTMLElement, callback: (e: EditorMouseEvent) => void): IDisposable {\n\t\treturn dom.addDisposableListener(target, 'mouseup', (e: MouseEvent) => {\n\t\t\tcallback(this._create(e));\n\t\t});\n\t}\n\n\tpublic onMouseDown(target: HTMLElement, callback: (e: EditorMouseEvent) => void): IDisposable {\n\t\treturn dom.addDisposableListener(target, 'mousedown', (e: MouseEvent) => {\n\t\t\tcallback(this._create(e));\n\t\t});\n\t}\n\n\tpublic onMouseLeave(target: HTMLElement, callback: (e: EditorMouseEvent) => void): IDisposable {\n\t\treturn dom.addDisposableNonBubblingMouseOutListener(target, (e: MouseEvent) => {\n\t\t\tcallback(this._create(e));\n\t\t});\n\t}\n\n\tpublic onMouseMoveThrottled(target: HTMLElement, callback: (e: EditorMouseEvent) => void, merger: EditorMouseEventMerger, minimumTimeMs: number): IDisposable {\n\t\tlet myMerger: dom.IEventMerger = (lastEvent: EditorMouseEvent, currentEvent: MouseEvent): EditorMouseEvent => {\n\t\t\treturn merger(lastEvent, this._create(currentEvent));\n\t\t};\n\t\treturn dom.addDisposableThrottledListener(target, 'mousemove', callback, myMerger, minimumTimeMs);\n\t}\n}\n\nexport class GlobalEditorMouseMoveMonitor extends Disposable {\n\n\tprivate _editorViewDomNode: HTMLElement;\n\tprivate _globalMouseMoveMonitor: GlobalMouseMoveMonitor;\n\tprivate _keydownListener: IDisposable;\n\n\tconstructor(editorViewDomNode: HTMLElement) {\n\t\tsuper();\n\t\tthis._editorViewDomNode = editorViewDomNode;\n\t\tthis._globalMouseMoveMonitor = this._register(new GlobalMouseMoveMonitor());\n\t\tthis._keydownListener = null;\n\t}\n\n\tpublic startMonitoring(merger: EditorMouseEventMerger, mouseMoveCallback: (e: EditorMouseEvent) => void, onStopCallback: () => void): void {\n\n\t\t// Add a <> keydown event listener that will cancel the monitoring\n\t\t// if something other than a modifier key is pressed\n\t\tthis._keydownListener = dom.addStandardDisposableListener(document, 'keydown', (e) => {\n\t\t\tconst kb = e.toKeybinding();\n\t\t\tif (kb.isModifierKey()) {\n\t\t\t\t// Allow modifier keys\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._globalMouseMoveMonitor.stopMonitoring(true);\n\t\t}, true);\n\n\t\tlet myMerger: dom.IEventMerger = (lastEvent: EditorMouseEvent, currentEvent: MouseEvent): EditorMouseEvent => {\n\t\t\treturn merger(lastEvent, new EditorMouseEvent(currentEvent, this._editorViewDomNode));\n\t\t};\n\n\t\tthis._globalMouseMoveMonitor.startMonitoring(myMerger, mouseMoveCallback, () => {\n\t\t\tthis._keydownListener.dispose();\n\t\t\tonStopCallback();\n\t\t});\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';\nimport { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\n\n/**\n * Represents a visible line\n */\nexport interface IVisibleLine {\n\tgetDomNode(): HTMLElement;\n\tsetDomNode(domNode: HTMLElement): void;\n\n\tonContentChanged(): void;\n\tonTokensChanged(): void;\n\n\t/**\n\t * Return null if the HTML should not be touched.\n\t * Return the new HTML otherwise.\n\t */\n\trenderLine(lineNumber: number, deltaTop: number, viewportData: ViewportData): string;\n\n\t/**\n\t * Layout the line.\n\t */\n\tlayoutLine(lineNumber: number, deltaTop: number): void;\n}\n\nexport interface ILine {\n\tonContentChanged(): void;\n\tonTokensChanged(): void;\n}\n\nexport class RenderedLinesCollection {\n\tprivate readonly _createLine: () => T;\n\tprivate _lines: T[];\n\tprivate _rendLineNumberStart: number;\n\n\tconstructor(createLine: () => T) {\n\t\tthis._createLine = createLine;\n\t\tthis._set(1, []);\n\t}\n\n\tpublic flush(): void {\n\t\tthis._set(1, []);\n\t}\n\n\t_set(rendLineNumberStart: number, lines: T[]): void {\n\t\tthis._lines = lines;\n\t\tthis._rendLineNumberStart = rendLineNumberStart;\n\t}\n\n\t_get(): { rendLineNumberStart: number; lines: T[]; } {\n\t\treturn {\n\t\t\trendLineNumberStart: this._rendLineNumberStart,\n\t\t\tlines: this._lines\n\t\t};\n\t}\n\n\t/**\n\t * @returns Inclusive line number that is inside this collection\n\t */\n\tpublic getStartLineNumber(): number {\n\t\treturn this._rendLineNumberStart;\n\t}\n\n\t/**\n\t * @returns Inclusive line number that is inside this collection\n\t */\n\tpublic getEndLineNumber(): number {\n\t\treturn this._rendLineNumberStart + this._lines.length - 1;\n\t}\n\n\tpublic getCount(): number {\n\t\treturn this._lines.length;\n\t}\n\n\tpublic getLine(lineNumber: number): T {\n\t\tlet lineIndex = lineNumber - this._rendLineNumberStart;\n\t\tif (lineIndex < 0 || lineIndex >= this._lines.length) {\n\t\t\tthrow new Error('Illegal value for lineNumber: ' + lineNumber);\n\t\t}\n\t\treturn this._lines[lineIndex];\n\t}\n\n\t/**\n\t * @returns Lines that were removed from this collection\n\t */\n\tpublic onLinesDeleted(deleteFromLineNumber: number, deleteToLineNumber: number): T[] {\n\t\tif (this.getCount() === 0) {\n\t\t\t// no lines\n\t\t\treturn null;\n\t\t}\n\n\t\tlet startLineNumber = this.getStartLineNumber();\n\t\tlet endLineNumber = this.getEndLineNumber();\n\n\t\tif (deleteToLineNumber < startLineNumber) {\n\t\t\t// deleting above the viewport\n\t\t\tlet deleteCnt = deleteToLineNumber - deleteFromLineNumber + 1;\n\t\t\tthis._rendLineNumberStart -= deleteCnt;\n\t\t\treturn null;\n\t\t}\n\n\t\tif (deleteFromLineNumber > endLineNumber) {\n\t\t\t// deleted below the viewport\n\t\t\treturn null;\n\t\t}\n\n\t\t// Record what needs to be deleted\n\t\tlet deleteStartIndex = 0;\n\t\tlet deleteCount = 0;\n\t\tfor (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n\t\t\tlet lineIndex = lineNumber - this._rendLineNumberStart;\n\n\t\t\tif (deleteFromLineNumber <= lineNumber && lineNumber <= deleteToLineNumber) {\n\t\t\t\t// this is a line to be deleted\n\t\t\t\tif (deleteCount === 0) {\n\t\t\t\t\t// this is the first line to be deleted\n\t\t\t\t\tdeleteStartIndex = lineIndex;\n\t\t\t\t\tdeleteCount = 1;\n\t\t\t\t} else {\n\t\t\t\t\tdeleteCount++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Adjust this._rendLineNumberStart for lines deleted above\n\t\tif (deleteFromLineNumber < startLineNumber) {\n\t\t\t// Something was deleted above\n\t\t\tlet deleteAboveCount = 0;\n\n\t\t\tif (deleteToLineNumber < startLineNumber) {\n\t\t\t\t// the entire deleted lines are above\n\t\t\t\tdeleteAboveCount = deleteToLineNumber - deleteFromLineNumber + 1;\n\t\t\t} else {\n\t\t\t\tdeleteAboveCount = startLineNumber - deleteFromLineNumber;\n\t\t\t}\n\n\t\t\tthis._rendLineNumberStart -= deleteAboveCount;\n\t\t}\n\n\t\tlet deleted = this._lines.splice(deleteStartIndex, deleteCount);\n\t\treturn deleted;\n\t}\n\n\tpublic onLinesChanged(changeFromLineNumber: number, changeToLineNumber: number): boolean {\n\t\tif (this.getCount() === 0) {\n\t\t\t// no lines\n\t\t\treturn false;\n\t\t}\n\n\t\tlet startLineNumber = this.getStartLineNumber();\n\t\tlet endLineNumber = this.getEndLineNumber();\n\n\t\tlet someoneNotified = false;\n\n\t\tfor (let changedLineNumber = changeFromLineNumber; changedLineNumber <= changeToLineNumber; changedLineNumber++) {\n\t\t\tif (changedLineNumber >= startLineNumber && changedLineNumber <= endLineNumber) {\n\t\t\t\t// Notify the line\n\t\t\t\tthis._lines[changedLineNumber - this._rendLineNumberStart].onContentChanged();\n\t\t\t\tsomeoneNotified = true;\n\t\t\t}\n\t\t}\n\n\t\treturn someoneNotified;\n\t}\n\n\tpublic onLinesInserted(insertFromLineNumber: number, insertToLineNumber: number): T[] {\n\t\tif (this.getCount() === 0) {\n\t\t\t// no lines\n\t\t\treturn null;\n\t\t}\n\n\t\tlet insertCnt = insertToLineNumber - insertFromLineNumber + 1;\n\t\tlet startLineNumber = this.getStartLineNumber();\n\t\tlet endLineNumber = this.getEndLineNumber();\n\n\t\tif (insertFromLineNumber <= startLineNumber) {\n\t\t\t// inserting above the viewport\n\t\t\tthis._rendLineNumberStart += insertCnt;\n\t\t\treturn null;\n\t\t}\n\n\t\tif (insertFromLineNumber > endLineNumber) {\n\t\t\t// inserting below the viewport\n\t\t\treturn null;\n\t\t}\n\n\t\tif (insertCnt + insertFromLineNumber > endLineNumber) {\n\t\t\t// insert inside the viewport in such a way that all remaining lines are pushed outside\n\t\t\tlet deleted = this._lines.splice(insertFromLineNumber - this._rendLineNumberStart, endLineNumber - insertFromLineNumber + 1);\n\t\t\treturn deleted;\n\t\t}\n\n\t\t// insert inside the viewport, push out some lines, but not all remaining lines\n\t\tlet newLines: T[] = [];\n\t\tfor (let i = 0; i < insertCnt; i++) {\n\t\t\tnewLines[i] = this._createLine();\n\t\t}\n\t\tlet insertIndex = insertFromLineNumber - this._rendLineNumberStart;\n\t\tlet beforeLines = this._lines.slice(0, insertIndex);\n\t\tlet afterLines = this._lines.slice(insertIndex, this._lines.length - insertCnt);\n\t\tlet deletedLines = this._lines.slice(this._lines.length - insertCnt, this._lines.length);\n\n\t\tthis._lines = beforeLines.concat(newLines).concat(afterLines);\n\n\t\treturn deletedLines;\n\t}\n\n\tpublic onTokensChanged(ranges: { fromLineNumber: number; toLineNumber: number; }[]): boolean {\n\t\tif (this.getCount() === 0) {\n\t\t\t// no lines\n\t\t\treturn false;\n\t\t}\n\n\t\tlet startLineNumber = this.getStartLineNumber();\n\t\tlet endLineNumber = this.getEndLineNumber();\n\n\t\tlet notifiedSomeone = false;\n\t\tfor (let i = 0, len = ranges.length; i < len; i++) {\n\t\t\tlet rng = ranges[i];\n\n\t\t\tif (rng.toLineNumber < startLineNumber || rng.fromLineNumber > endLineNumber) {\n\t\t\t\t// range outside viewport\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet from = Math.max(startLineNumber, rng.fromLineNumber);\n\t\t\tlet to = Math.min(endLineNumber, rng.toLineNumber);\n\n\t\t\tfor (let lineNumber = from; lineNumber <= to; lineNumber++) {\n\t\t\t\tlet lineIndex = lineNumber - this._rendLineNumberStart;\n\t\t\t\tthis._lines[lineIndex].onTokensChanged();\n\t\t\t\tnotifiedSomeone = true;\n\t\t\t}\n\t\t}\n\n\t\treturn notifiedSomeone;\n\t}\n}\n\nexport interface IVisibleLinesHost {\n\tcreateVisibleLine(): T;\n}\n\nexport class VisibleLinesCollection {\n\n\tprivate readonly _host: IVisibleLinesHost;\n\tpublic readonly domNode: FastDomNode;\n\tprivate readonly _linesCollection: RenderedLinesCollection;\n\n\tconstructor(host: IVisibleLinesHost) {\n\t\tthis._host = host;\n\t\tthis.domNode = this._createDomNode();\n\t\tthis._linesCollection = new RenderedLinesCollection(() => this._host.createVisibleLine());\n\t}\n\n\tprivate _createDomNode(): FastDomNode {\n\t\tlet domNode = createFastDomNode(document.createElement('div'));\n\t\tdomNode.setClassName('view-layer');\n\t\tdomNode.setPosition('absolute');\n\t\tdomNode.domNode.setAttribute('role', 'presentation');\n\t\tdomNode.domNode.setAttribute('aria-hidden', 'true');\n\t\treturn domNode;\n\t}\n\n\t// ---- begin view event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\treturn e.layoutInfo;\n\t}\n\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\tthis._linesCollection.flush();\n\t\t// No need to clear the dom node because a full .innerHTML will occur in ViewLayerRenderer._render\n\t\treturn true;\n\t}\n\n\tpublic onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn this._linesCollection.onLinesChanged(e.fromLineNumber, e.toLineNumber);\n\t}\n\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\tlet deleted = this._linesCollection.onLinesDeleted(e.fromLineNumber, e.toLineNumber);\n\t\tif (deleted) {\n\t\t\t// Remove from DOM\n\t\t\tfor (let i = 0, len = deleted.length; i < len; i++) {\n\t\t\t\tlet lineDomNode = deleted[i].getDomNode();\n\t\t\t\tif (lineDomNode) {\n\t\t\t\t\tthis.domNode.domNode.removeChild(lineDomNode);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\tlet deleted = this._linesCollection.onLinesInserted(e.fromLineNumber, e.toLineNumber);\n\t\tif (deleted) {\n\t\t\t// Remove from DOM\n\t\t\tfor (let i = 0, len = deleted.length; i < len; i++) {\n\t\t\t\tlet lineDomNode = deleted[i].getDomNode();\n\t\t\t\tif (lineDomNode) {\n\t\t\t\t\tthis.domNode.domNode.removeChild(lineDomNode);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn e.scrollTopChanged;\n\t}\n\n\tpublic onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean {\n\t\treturn this._linesCollection.onTokensChanged(e.ranges);\n\t}\n\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\n\t// ---- end view event handlers\n\n\tpublic getStartLineNumber(): number {\n\t\treturn this._linesCollection.getStartLineNumber();\n\t}\n\n\tpublic getEndLineNumber(): number {\n\t\treturn this._linesCollection.getEndLineNumber();\n\t}\n\n\tpublic getVisibleLine(lineNumber: number): T {\n\t\treturn this._linesCollection.getLine(lineNumber);\n\t}\n\n\tpublic renderLines(viewportData: ViewportData): void {\n\n\t\tlet inp = this._linesCollection._get();\n\n\t\tlet renderer = new ViewLayerRenderer(this.domNode.domNode, this._host, viewportData);\n\n\t\tlet ctx: IRendererContext = {\n\t\t\trendLineNumberStart: inp.rendLineNumberStart,\n\t\t\tlines: inp.lines,\n\t\t\tlinesLength: inp.lines.length\n\t\t};\n\n\t\t// Decide if this render will do a single update (single large .innerHTML) or many updates (inserting/removing dom nodes)\n\t\tlet resCtx = renderer.render(ctx, viewportData.startLineNumber, viewportData.endLineNumber, viewportData.relativeVerticalOffset);\n\n\t\tthis._linesCollection._set(resCtx.rendLineNumberStart, resCtx.lines);\n\t}\n}\n\ninterface IRendererContext {\n\trendLineNumberStart: number;\n\tlines: T[];\n\tlinesLength: number;\n}\n\nclass ViewLayerRenderer {\n\n\treadonly domNode: HTMLElement;\n\treadonly host: IVisibleLinesHost;\n\treadonly viewportData: ViewportData;\n\n\tconstructor(domNode: HTMLElement, host: IVisibleLinesHost, viewportData: ViewportData) {\n\t\tthis.domNode = domNode;\n\t\tthis.host = host;\n\t\tthis.viewportData = viewportData;\n\t}\n\n\tpublic render(inContext: IRendererContext, startLineNumber: number, stopLineNumber: number, deltaTop: number[]): IRendererContext {\n\n\t\tlet ctx: IRendererContext = {\n\t\t\trendLineNumberStart: inContext.rendLineNumberStart,\n\t\t\tlines: inContext.lines.slice(0),\n\t\t\tlinesLength: inContext.linesLength\n\t\t};\n\n\t\tif ((ctx.rendLineNumberStart + ctx.linesLength - 1 < startLineNumber) || (stopLineNumber < ctx.rendLineNumberStart)) {\n\t\t\t// There is no overlap whatsoever\n\t\t\tctx.rendLineNumberStart = startLineNumber;\n\t\t\tctx.linesLength = stopLineNumber - startLineNumber + 1;\n\t\t\tctx.lines = [];\n\t\t\tfor (let x = startLineNumber; x <= stopLineNumber; x++) {\n\t\t\t\tctx.lines[x - startLineNumber] = this.host.createVisibleLine();\n\t\t\t}\n\t\t\tthis._finishRendering(ctx, true, deltaTop);\n\t\t\treturn ctx;\n\t\t}\n\n\t\t// Update lines which will remain untouched\n\t\tthis._renderUntouchedLines(\n\t\t\tctx,\n\t\t\tMath.max(startLineNumber - ctx.rendLineNumberStart, 0),\n\t\t\tMath.min(stopLineNumber - ctx.rendLineNumberStart, ctx.linesLength - 1),\n\t\t\tdeltaTop,\n\t\t\tstartLineNumber\n\t\t);\n\n\t\tif (ctx.rendLineNumberStart > startLineNumber) {\n\t\t\t// Insert lines before\n\t\t\tlet fromLineNumber = startLineNumber;\n\t\t\tlet toLineNumber = Math.min(stopLineNumber, ctx.rendLineNumberStart - 1);\n\t\t\tif (fromLineNumber <= toLineNumber) {\n\t\t\t\tthis._insertLinesBefore(ctx, fromLineNumber, toLineNumber, deltaTop, startLineNumber);\n\t\t\t\tctx.linesLength += toLineNumber - fromLineNumber + 1;\n\t\t\t}\n\t\t} else if (ctx.rendLineNumberStart < startLineNumber) {\n\t\t\t// Remove lines before\n\t\t\tlet removeCnt = Math.min(ctx.linesLength, startLineNumber - ctx.rendLineNumberStart);\n\t\t\tif (removeCnt > 0) {\n\t\t\t\tthis._removeLinesBefore(ctx, removeCnt);\n\t\t\t\tctx.linesLength -= removeCnt;\n\t\t\t}\n\t\t}\n\n\t\tctx.rendLineNumberStart = startLineNumber;\n\n\t\tif (ctx.rendLineNumberStart + ctx.linesLength - 1 < stopLineNumber) {\n\t\t\t// Insert lines after\n\t\t\tlet fromLineNumber = ctx.rendLineNumberStart + ctx.linesLength;\n\t\t\tlet toLineNumber = stopLineNumber;\n\n\t\t\tif (fromLineNumber <= toLineNumber) {\n\t\t\t\tthis._insertLinesAfter(ctx, fromLineNumber, toLineNumber, deltaTop, startLineNumber);\n\t\t\t\tctx.linesLength += toLineNumber - fromLineNumber + 1;\n\t\t\t}\n\n\t\t} else if (ctx.rendLineNumberStart + ctx.linesLength - 1 > stopLineNumber) {\n\t\t\t// Remove lines after\n\t\t\tlet fromLineNumber = Math.max(0, stopLineNumber - ctx.rendLineNumberStart + 1);\n\t\t\tlet toLineNumber = ctx.linesLength - 1;\n\t\t\tlet removeCnt = toLineNumber - fromLineNumber + 1;\n\n\t\t\tif (removeCnt > 0) {\n\t\t\t\tthis._removeLinesAfter(ctx, removeCnt);\n\t\t\t\tctx.linesLength -= removeCnt;\n\t\t\t}\n\t\t}\n\n\t\tthis._finishRendering(ctx, false, deltaTop);\n\n\t\treturn ctx;\n\t}\n\n\tprivate _renderUntouchedLines(ctx: IRendererContext, startIndex: number, endIndex: number, deltaTop: number[], deltaLN: number): void {\n\t\tconst rendLineNumberStart = ctx.rendLineNumberStart;\n\t\tconst lines = ctx.lines;\n\n\t\tfor (let i = startIndex; i <= endIndex; i++) {\n\t\t\tlet lineNumber = rendLineNumberStart + i;\n\t\t\tlines[i].layoutLine(lineNumber, deltaTop[lineNumber - deltaLN]);\n\t\t}\n\t}\n\n\tprivate _insertLinesBefore(ctx: IRendererContext, fromLineNumber: number, toLineNumber: number, deltaTop: number[], deltaLN: number): void {\n\t\tlet newLines: T[] = [];\n\t\tlet newLinesLen = 0;\n\t\tfor (let lineNumber = fromLineNumber; lineNumber <= toLineNumber; lineNumber++) {\n\t\t\tnewLines[newLinesLen++] = this.host.createVisibleLine();\n\t\t}\n\t\tctx.lines = newLines.concat(ctx.lines);\n\t}\n\n\tprivate _removeLinesBefore(ctx: IRendererContext, removeCount: number): void {\n\t\tfor (let i = 0; i < removeCount; i++) {\n\t\t\tlet lineDomNode = ctx.lines[i].getDomNode();\n\t\t\tif (lineDomNode) {\n\t\t\t\tthis.domNode.removeChild(lineDomNode);\n\t\t\t}\n\t\t}\n\t\tctx.lines.splice(0, removeCount);\n\t}\n\n\tprivate _insertLinesAfter(ctx: IRendererContext, fromLineNumber: number, toLineNumber: number, deltaTop: number[], deltaLN: number): void {\n\t\tlet newLines: T[] = [];\n\t\tlet newLinesLen = 0;\n\t\tfor (let lineNumber = fromLineNumber; lineNumber <= toLineNumber; lineNumber++) {\n\t\t\tnewLines[newLinesLen++] = this.host.createVisibleLine();\n\t\t}\n\t\tctx.lines = ctx.lines.concat(newLines);\n\t}\n\n\tprivate _removeLinesAfter(ctx: IRendererContext, removeCount: number): void {\n\t\tlet removeIndex = ctx.linesLength - removeCount;\n\n\t\tfor (let i = 0; i < removeCount; i++) {\n\t\t\tlet lineDomNode = ctx.lines[removeIndex + i].getDomNode();\n\t\t\tif (lineDomNode) {\n\t\t\t\tthis.domNode.removeChild(lineDomNode);\n\t\t\t}\n\t\t}\n\t\tctx.lines.splice(removeIndex, removeCount);\n\t}\n\n\tprivate _finishRenderingNewLines(ctx: IRendererContext, domNodeIsEmpty: boolean, newLinesHTML: string[], wasNew: boolean[]): void {\n\t\tlet lastChild = this.domNode.lastChild;\n\t\tif (domNodeIsEmpty || !lastChild) {\n\t\t\tthis.domNode.innerHTML = newLinesHTML.join('');\n\t\t} else {\n\t\t\tlastChild.insertAdjacentHTML('afterend', newLinesHTML.join(''));\n\t\t}\n\n\t\tlet currChild = this.domNode.lastChild;\n\t\tfor (let i = ctx.linesLength - 1; i >= 0; i--) {\n\t\t\tlet line = ctx.lines[i];\n\t\t\tif (wasNew[i]) {\n\t\t\t\tline.setDomNode(currChild);\n\t\t\t\tcurrChild = currChild.previousSibling;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _finishRenderingInvalidLines(ctx: IRendererContext, invalidLinesHTML: string[], wasInvalid: boolean[]): void {\n\t\tlet hugeDomNode = document.createElement('div');\n\n\t\thugeDomNode.innerHTML = invalidLinesHTML.join('');\n\n\t\tfor (let i = 0; i < ctx.linesLength; i++) {\n\t\t\tlet line = ctx.lines[i];\n\t\t\tif (wasInvalid[i]) {\n\t\t\t\tlet source = hugeDomNode.firstChild;\n\t\t\t\tlet lineDomNode = line.getDomNode();\n\t\t\t\tlineDomNode.parentNode.replaceChild(source, lineDomNode);\n\t\t\t\tline.setDomNode(source);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _finishRendering(ctx: IRendererContext, domNodeIsEmpty: boolean, deltaTop: number[]): void {\n\n\t\tlet hadNewLine = false;\n\t\tlet wasNew: boolean[] = [];\n\t\tlet newLinesHTML: string[] = [];\n\t\tlet hadInvalidLine = false;\n\t\tlet wasInvalid: boolean[] = [];\n\t\tlet invalidLinesHTML: string[] = [];\n\n\t\tfor (let i = 0, len = ctx.linesLength; i < len; i++) {\n\t\t\tlet line = ctx.lines[i];\n\t\t\tlet lineNumber = i + ctx.rendLineNumberStart;\n\n\t\t\twasNew[i] = false;\n\t\t\twasInvalid[i] = false;\n\n\t\t\tlet renderResult = line.renderLine(lineNumber, deltaTop[i], this.viewportData);\n\n\t\t\tif (renderResult !== null) {\n\t\t\t\t// Line needs rendering\n\t\t\t\tlet lineDomNode = line.getDomNode();\n\t\t\t\tif (!lineDomNode) {\n\t\t\t\t\t// Line is new\n\t\t\t\t\tnewLinesHTML.push(renderResult);\n\t\t\t\t\twasNew[i] = true;\n\t\t\t\t\thadNewLine = true;\n\t\t\t\t} else {\n\t\t\t\t\t// Line is invalid\n\t\t\t\t\tinvalidLinesHTML.push(renderResult);\n\t\t\t\t\twasInvalid[i] = true;\n\t\t\t\t\thadInvalidLine = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hadNewLine) {\n\t\t\tthis._finishRenderingNewLines(ctx, domNodeIsEmpty, newLinesHTML, wasNew);\n\t\t}\n\n\t\tif (hadInvalidLine) {\n\t\t\tthis._finishRenderingInvalidLines(ctx, invalidLinesHTML, wasInvalid);\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport Event, { Emitter } from 'vs/base/common/event';\n\nexport interface IEditorZoom {\n\tonDidChangeZoomLevel: Event;\n\tgetZoomLevel(): number;\n\tsetZoomLevel(zoomLevel: number): void;\n}\n\nexport const EditorZoom: IEditorZoom = new class {\n\n\tprivate _zoomLevel: number = 0;\n\n\tprivate _onDidChangeZoomLevel: Emitter = new Emitter();\n\tpublic onDidChangeZoomLevel: Event = this._onDidChangeZoomLevel.event;\n\n\tpublic getZoomLevel(): number {\n\t\treturn this._zoomLevel;\n\t}\n\n\tpublic setZoomLevel(zoomLevel: number): void {\n\t\tzoomLevel = Math.min(Math.max(-9, zoomLevel), 9);\n\t\tif (this._zoomLevel === zoomLevel) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._zoomLevel = zoomLevel;\n\t\tthis._onDidChangeZoomLevel.fire(this._zoomLevel);\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { Position } from 'vs/editor/common/core/position';\nimport { Selection } from 'vs/editor/common/core/selection';\n\n/**\n * Describes the reason the cursor has changed its position.\n */\nexport enum CursorChangeReason {\n\t/**\n\t * Unknown or not set.\n\t */\n\tNotSet = 0,\n\t/**\n\t * A `model.setValue()` was called.\n\t */\n\tContentFlush = 1,\n\t/**\n\t * The `model` has been changed outside of this cursor and the cursor recovers its position from associated markers.\n\t */\n\tRecoverFromMarkers = 2,\n\t/**\n\t * There was an explicit user gesture.\n\t */\n\tExplicit = 3,\n\t/**\n\t * There was a Paste.\n\t */\n\tPaste = 4,\n\t/**\n\t * There was an Undo.\n\t */\n\tUndo = 5,\n\t/**\n\t * There was a Redo.\n\t */\n\tRedo = 6,\n}\n/**\n * An event describing that the cursor position has changed.\n */\nexport interface ICursorPositionChangedEvent {\n\t/**\n\t * Primary cursor's position.\n\t */\n\treadonly position: Position;\n\t/**\n\t * Secondary cursors' position.\n\t */\n\treadonly secondaryPositions: Position[];\n\t/**\n\t * Reason.\n\t */\n\treadonly reason: CursorChangeReason;\n\t/**\n\t * Source of the call that caused the event.\n\t */\n\treadonly source: string;\n}\n/**\n * An event describing that the cursor selection has changed.\n */\nexport interface ICursorSelectionChangedEvent {\n\t/**\n\t * The primary selection.\n\t */\n\treadonly selection: Selection;\n\t/**\n\t * The secondary selections.\n\t */\n\treadonly secondarySelections: Selection[];\n\t/**\n\t * Source of the call that caused the event.\n\t */\n\treadonly source: string;\n\t/**\n\t * Reason.\n\t */\n\treadonly reason: CursorChangeReason;\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'use strict';\n\nimport * as strings from 'vs/base/common/strings';\nimport { ICommonCodeEditor } from 'vs/editor/common/editorCommon';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\n\nexport const enum CodeEditorStateFlag {\n\tValue = 1,\n\tSelection = 2,\n\tPosition = 4,\n\tScroll = 8\n}\n\nexport class EditorState {\n\n\tprivate readonly flags: number;\n\n\tprivate readonly position: Position;\n\tprivate readonly selection: Range;\n\tprivate readonly modelVersionId: string;\n\tprivate readonly scrollLeft: number;\n\tprivate readonly scrollTop: number;\n\n\tconstructor(editor: ICommonCodeEditor, flags: number) {\n\t\tthis.flags = flags;\n\n\t\tif ((this.flags & CodeEditorStateFlag.Value) !== 0) {\n\t\t\tvar model = editor.getModel();\n\t\t\tthis.modelVersionId = model ? strings.format('{0}#{1}', model.uri.toString(), model.getVersionId()) : null;\n\t\t}\n\t\tif ((this.flags & CodeEditorStateFlag.Position) !== 0) {\n\t\t\tthis.position = editor.getPosition();\n\t\t}\n\t\tif ((this.flags & CodeEditorStateFlag.Selection) !== 0) {\n\t\t\tthis.selection = editor.getSelection();\n\t\t}\n\t\tif ((this.flags & CodeEditorStateFlag.Scroll) !== 0) {\n\t\t\tthis.scrollLeft = editor.getScrollLeft();\n\t\t\tthis.scrollTop = editor.getScrollTop();\n\t\t}\n\t}\n\n\tprivate _equals(other: any): boolean {\n\n\t\tif (!(other instanceof EditorState)) {\n\t\t\treturn false;\n\t\t}\n\t\tvar state = other;\n\n\t\tif (this.modelVersionId !== state.modelVersionId) {\n\t\t\treturn false;\n\t\t}\n\t\tif (this.scrollLeft !== state.scrollLeft || this.scrollTop !== state.scrollTop) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!this.position && state.position || this.position && !state.position || this.position && state.position && !this.position.equals(state.position)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!this.selection && state.selection || this.selection && !state.selection || this.selection && state.selection && !this.selection.equalsRange(state.selection)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic validate(editor: ICommonCodeEditor): boolean {\n\t\treturn this._equals(new EditorState(editor, this.flags));\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\n/**\n * A position in the editor. This interface is suitable for serialization.\n */\nexport interface IPosition {\n\t/**\n\t * line number (starts at 1)\n\t */\n\treadonly lineNumber: number;\n\t/**\n\t * column (the first character in a line is between column 1 and column 2)\n\t */\n\treadonly column: number;\n}\n\n/**\n * A position in the editor.\n */\nexport class Position {\n\t/**\n\t * line number (starts at 1)\n\t */\n\tpublic readonly lineNumber: number;\n\t/**\n\t * column (the first character in a line is between column 1 and column 2)\n\t */\n\tpublic readonly column: number;\n\n\tconstructor(lineNumber: number, column: number) {\n\t\tthis.lineNumber = lineNumber;\n\t\tthis.column = column;\n\t}\n\n\t/**\n\t * Test if this position equals other position\n\t */\n\tpublic equals(other: IPosition): boolean {\n\t\treturn Position.equals(this, other);\n\t}\n\n\t/**\n\t * Test if position `a` equals position `b`\n\t */\n\tpublic static equals(a: IPosition, b: IPosition): boolean {\n\t\tif (!a && !b) {\n\t\t\treturn true;\n\t\t}\n\t\treturn (\n\t\t\t!!a &&\n\t\t\t!!b &&\n\t\t\ta.lineNumber === b.lineNumber &&\n\t\t\ta.column === b.column\n\t\t);\n\t}\n\n\t/**\n\t * Test if this position is before other position.\n\t * If the two positions are equal, the result will be false.\n\t */\n\tpublic isBefore(other: IPosition): boolean {\n\t\treturn Position.isBefore(this, other);\n\t}\n\n\t/**\n\t * Test if position `a` is before position `b`.\n\t * If the two positions are equal, the result will be false.\n\t */\n\tpublic static isBefore(a: IPosition, b: IPosition): boolean {\n\t\tif (a.lineNumber < b.lineNumber) {\n\t\t\treturn true;\n\t\t}\n\t\tif (b.lineNumber < a.lineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\treturn a.column < b.column;\n\t}\n\n\t/**\n\t * Test if this position is before other position.\n\t * If the two positions are equal, the result will be true.\n\t */\n\tpublic isBeforeOrEqual(other: IPosition): boolean {\n\t\treturn Position.isBeforeOrEqual(this, other);\n\t}\n\n\t/**\n\t * Test if position `a` is before position `b`.\n\t * If the two positions are equal, the result will be true.\n\t */\n\tpublic static isBeforeOrEqual(a: IPosition, b: IPosition): boolean {\n\t\tif (a.lineNumber < b.lineNumber) {\n\t\t\treturn true;\n\t\t}\n\t\tif (b.lineNumber < a.lineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\treturn a.column <= b.column;\n\t}\n\n\t/**\n\t * A function that compares positions, useful for sorting\n\t */\n\tpublic static compare(a: IPosition, b: IPosition): number {\n\t\tlet aLineNumber = a.lineNumber | 0;\n\t\tlet bLineNumber = b.lineNumber | 0;\n\n\t\tif (aLineNumber === bLineNumber) {\n\t\t\tlet aColumn = a.column | 0;\n\t\t\tlet bColumn = b.column | 0;\n\t\t\treturn aColumn - bColumn;\n\t\t}\n\n\t\treturn aLineNumber - bLineNumber;\n\t}\n\n\t/**\n\t * Clone this position.\n\t */\n\tpublic clone(): Position {\n\t\treturn new Position(this.lineNumber, this.column);\n\t}\n\n\t/**\n\t * Convert to a human-readable representation.\n\t */\n\tpublic toString(): string {\n\t\treturn '(' + this.lineNumber + ',' + this.column + ')';\n\t}\n\n\t// ---\n\n\t/**\n\t * Create a `Position` from an `IPosition`.\n\t */\n\tpublic static lift(pos: IPosition): Position {\n\t\treturn new Position(pos.lineNumber, pos.column);\n\t}\n\n\t/**\n\t * Test if `obj` is an `IPosition`.\n\t */\n\tpublic static isIPosition(obj: any): obj is IPosition {\n\t\treturn (\n\t\t\tobj\n\t\t\t&& (typeof obj.lineNumber === 'number')\n\t\t\t&& (typeof obj.column === 'number')\n\t\t);\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { Position, IPosition } from 'vs/editor/common/core/position';\n\n/**\n * A range in the editor. This interface is suitable for serialization.\n */\nexport interface IRange {\n\t/**\n\t * Line number on which the range starts (starts at 1).\n\t */\n\treadonly startLineNumber: number;\n\t/**\n\t * Column on which the range starts in line `startLineNumber` (starts at 1).\n\t */\n\treadonly startColumn: number;\n\t/**\n\t * Line number on which the range ends.\n\t */\n\treadonly endLineNumber: number;\n\t/**\n\t * Column on which the range ends in line `endLineNumber`.\n\t */\n\treadonly endColumn: number;\n}\n\n/**\n * A range in the editor. (startLineNumber,startColumn) is <= (endLineNumber,endColumn)\n */\nexport class Range {\n\n\t/**\n\t * Line number on which the range starts (starts at 1).\n\t */\n\tpublic readonly startLineNumber: number;\n\t/**\n\t * Column on which the range starts in line `startLineNumber` (starts at 1).\n\t */\n\tpublic readonly startColumn: number;\n\t/**\n\t * Line number on which the range ends.\n\t */\n\tpublic readonly endLineNumber: number;\n\t/**\n\t * Column on which the range ends in line `endLineNumber`.\n\t */\n\tpublic readonly endColumn: number;\n\n\tconstructor(startLineNumber: number, startColumn: number, endLineNumber: number, endColumn: number) {\n\t\tif ((startLineNumber > endLineNumber) || (startLineNumber === endLineNumber && startColumn > endColumn)) {\n\t\t\tthis.startLineNumber = endLineNumber;\n\t\t\tthis.startColumn = endColumn;\n\t\t\tthis.endLineNumber = startLineNumber;\n\t\t\tthis.endColumn = startColumn;\n\t\t} else {\n\t\t\tthis.startLineNumber = startLineNumber;\n\t\t\tthis.startColumn = startColumn;\n\t\t\tthis.endLineNumber = endLineNumber;\n\t\t\tthis.endColumn = endColumn;\n\t\t}\n\t}\n\n\t/**\n\t * Test if this range is empty.\n\t */\n\tpublic isEmpty(): boolean {\n\t\treturn Range.isEmpty(this);\n\t}\n\n\t/**\n\t * Test if `range` is empty.\n\t */\n\tpublic static isEmpty(range: IRange): boolean {\n\t\treturn (range.startLineNumber === range.endLineNumber && range.startColumn === range.endColumn);\n\t}\n\n\t/**\n\t * Test if position is in this range. If the position is at the edges, will return true.\n\t */\n\tpublic containsPosition(position: IPosition): boolean {\n\t\treturn Range.containsPosition(this, position);\n\t}\n\n\t/**\n\t * Test if `position` is in `range`. If the position is at the edges, will return true.\n\t */\n\tpublic static containsPosition(range: IRange, position: IPosition): boolean {\n\t\tif (position.lineNumber < range.startLineNumber || position.lineNumber > range.endLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (position.lineNumber === range.startLineNumber && position.column < range.startColumn) {\n\t\t\treturn false;\n\t\t}\n\t\tif (position.lineNumber === range.endLineNumber && position.column > range.endColumn) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if range is in this range. If the range is equal to this range, will return true.\n\t */\n\tpublic containsRange(range: IRange): boolean {\n\t\treturn Range.containsRange(this, range);\n\t}\n\n\t/**\n\t * Test if `otherRange` is in `range`. If the ranges are equal, will return true.\n\t */\n\tpublic static containsRange(range: IRange, otherRange: IRange): boolean {\n\t\tif (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn < range.startColumn) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn > range.endColumn) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * A reunion of the two ranges.\n\t * The smallest position will be used as the start point, and the largest one as the end point.\n\t */\n\tpublic plusRange(range: IRange): Range {\n\t\treturn Range.plusRange(this, range);\n\t}\n\n\t/**\n\t * A reunion of the two ranges.\n\t * The smallest position will be used as the start point, and the largest one as the end point.\n\t */\n\tpublic static plusRange(a: IRange, b: IRange): Range {\n\t\tvar startLineNumber: number, startColumn: number, endLineNumber: number, endColumn: number;\n\t\tif (b.startLineNumber < a.startLineNumber) {\n\t\t\tstartLineNumber = b.startLineNumber;\n\t\t\tstartColumn = b.startColumn;\n\t\t} else if (b.startLineNumber === a.startLineNumber) {\n\t\t\tstartLineNumber = b.startLineNumber;\n\t\t\tstartColumn = Math.min(b.startColumn, a.startColumn);\n\t\t} else {\n\t\t\tstartLineNumber = a.startLineNumber;\n\t\t\tstartColumn = a.startColumn;\n\t\t}\n\n\t\tif (b.endLineNumber > a.endLineNumber) {\n\t\t\tendLineNumber = b.endLineNumber;\n\t\t\tendColumn = b.endColumn;\n\t\t} else if (b.endLineNumber === a.endLineNumber) {\n\t\t\tendLineNumber = b.endLineNumber;\n\t\t\tendColumn = Math.max(b.endColumn, a.endColumn);\n\t\t} else {\n\t\t\tendLineNumber = a.endLineNumber;\n\t\t\tendColumn = a.endColumn;\n\t\t}\n\n\t\treturn new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n\t}\n\n\t/**\n\t * A intersection of the two ranges.\n\t */\n\tpublic intersectRanges(range: IRange): Range {\n\t\treturn Range.intersectRanges(this, range);\n\t}\n\n\t/**\n\t * A intersection of the two ranges.\n\t */\n\tpublic static intersectRanges(a: IRange, b: IRange): Range {\n\t\tvar resultStartLineNumber = a.startLineNumber,\n\t\t\tresultStartColumn = a.startColumn,\n\t\t\tresultEndLineNumber = a.endLineNumber,\n\t\t\tresultEndColumn = a.endColumn,\n\t\t\totherStartLineNumber = b.startLineNumber,\n\t\t\totherStartColumn = b.startColumn,\n\t\t\totherEndLineNumber = b.endLineNumber,\n\t\t\totherEndColumn = b.endColumn;\n\n\t\tif (resultStartLineNumber < otherStartLineNumber) {\n\t\t\tresultStartLineNumber = otherStartLineNumber;\n\t\t\tresultStartColumn = otherStartColumn;\n\t\t} else if (resultStartLineNumber === otherStartLineNumber) {\n\t\t\tresultStartColumn = Math.max(resultStartColumn, otherStartColumn);\n\t\t}\n\n\t\tif (resultEndLineNumber > otherEndLineNumber) {\n\t\t\tresultEndLineNumber = otherEndLineNumber;\n\t\t\tresultEndColumn = otherEndColumn;\n\t\t} else if (resultEndLineNumber === otherEndLineNumber) {\n\t\t\tresultEndColumn = Math.min(resultEndColumn, otherEndColumn);\n\t\t}\n\n\t\t// Check if selection is now empty\n\t\tif (resultStartLineNumber > resultEndLineNumber) {\n\t\t\treturn null;\n\t\t}\n\t\tif (resultStartLineNumber === resultEndLineNumber && resultStartColumn > resultEndColumn) {\n\t\t\treturn null;\n\t\t}\n\t\treturn new Range(resultStartLineNumber, resultStartColumn, resultEndLineNumber, resultEndColumn);\n\t}\n\n\t/**\n\t * Test if this range equals other.\n\t */\n\tpublic equalsRange(other: IRange): boolean {\n\t\treturn Range.equalsRange(this, other);\n\t}\n\n\t/**\n\t * Test if range `a` equals `b`.\n\t */\n\tpublic static equalsRange(a: IRange, b: IRange): boolean {\n\t\treturn (\n\t\t\t!!a &&\n\t\t\t!!b &&\n\t\t\ta.startLineNumber === b.startLineNumber &&\n\t\t\ta.startColumn === b.startColumn &&\n\t\t\ta.endLineNumber === b.endLineNumber &&\n\t\t\ta.endColumn === b.endColumn\n\t\t);\n\t}\n\n\t/**\n\t * Return the end position (which will be after or equal to the start position)\n\t */\n\tpublic getEndPosition(): Position {\n\t\treturn new Position(this.endLineNumber, this.endColumn);\n\t}\n\n\t/**\n\t * Return the start position (which will be before or equal to the end position)\n\t */\n\tpublic getStartPosition(): Position {\n\t\treturn new Position(this.startLineNumber, this.startColumn);\n\t}\n\n\t/**\n\t * Clone this range.\n\t */\n\tpublic cloneRange(): Range {\n\t\treturn new Range(this.startLineNumber, this.startColumn, this.endLineNumber, this.endColumn);\n\t}\n\n\t/**\n\t * Transform to a user presentable string representation.\n\t */\n\tpublic toString(): string {\n\t\treturn '[' + this.startLineNumber + ',' + this.startColumn + ' -> ' + this.endLineNumber + ',' + this.endColumn + ']';\n\t}\n\n\t/**\n\t * Create a new range using this range's start position, and using endLineNumber and endColumn as the end position.\n\t */\n\tpublic setEndPosition(endLineNumber: number, endColumn: number): Range {\n\t\treturn new Range(this.startLineNumber, this.startColumn, endLineNumber, endColumn);\n\t}\n\n\t/**\n\t * Create a new range using this range's end position, and using startLineNumber and startColumn as the start position.\n\t */\n\tpublic setStartPosition(startLineNumber: number, startColumn: number): Range {\n\t\treturn new Range(startLineNumber, startColumn, this.endLineNumber, this.endColumn);\n\t}\n\n\t/**\n\t * Create a new empty range using this range's start position.\n\t */\n\tpublic collapseToStart(): Range {\n\t\treturn Range.collapseToStart(this);\n\t}\n\n\t/**\n\t * Create a new empty range using this range's start position.\n\t */\n\tpublic static collapseToStart(range: IRange): Range {\n\t\treturn new Range(range.startLineNumber, range.startColumn, range.startLineNumber, range.startColumn);\n\t}\n\n\t// ---\n\n\tpublic static fromPositions(start: IPosition, end: IPosition = start): Range {\n\t\treturn new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n\t}\n\n\t/**\n\t * Create a `Range` from an `IRange`.\n\t */\n\tpublic static lift(range: IRange): Range {\n\t\tif (!range) {\n\t\t\treturn null;\n\t\t}\n\t\treturn new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);\n\t}\n\n\t/**\n\t * Test if `obj` is an `IRange`.\n\t */\n\tpublic static isIRange(obj: any): obj is IRange {\n\t\treturn (\n\t\t\tobj\n\t\t\t&& (typeof obj.startLineNumber === 'number')\n\t\t\t&& (typeof obj.startColumn === 'number')\n\t\t\t&& (typeof obj.endLineNumber === 'number')\n\t\t\t&& (typeof obj.endColumn === 'number')\n\t\t);\n\t}\n\n\t/**\n\t * Test if the two ranges are touching in any way.\n\t */\n\tpublic static areIntersectingOrTouching(a: IRange, b: IRange): boolean {\n\t\t// Check if `a` is before `b`\n\t\tif (a.endLineNumber < b.startLineNumber || (a.endLineNumber === b.startLineNumber && a.endColumn < b.startColumn)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if `b` is before `a`\n\t\tif (b.endLineNumber < a.startLineNumber || (b.endLineNumber === a.startLineNumber && b.endColumn < a.startColumn)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// These ranges must intersect\n\t\treturn true;\n\t}\n\n\t/**\n\t * A function that compares ranges, useful for sorting ranges\n\t * It will first compare ranges on the startPosition and then on the endPosition\n\t */\n\tpublic static compareRangesUsingStarts(a: IRange, b: IRange): number {\n\t\tlet aStartLineNumber = a.startLineNumber | 0;\n\t\tlet bStartLineNumber = b.startLineNumber | 0;\n\n\t\tif (aStartLineNumber === bStartLineNumber) {\n\t\t\tlet aStartColumn = a.startColumn | 0;\n\t\t\tlet bStartColumn = b.startColumn | 0;\n\n\t\t\tif (aStartColumn === bStartColumn) {\n\t\t\t\tlet aEndLineNumber = a.endLineNumber | 0;\n\t\t\t\tlet bEndLineNumber = b.endLineNumber | 0;\n\n\t\t\t\tif (aEndLineNumber === bEndLineNumber) {\n\t\t\t\t\tlet aEndColumn = a.endColumn | 0;\n\t\t\t\t\tlet bEndColumn = b.endColumn | 0;\n\t\t\t\t\treturn aEndColumn - bEndColumn;\n\t\t\t\t}\n\t\t\t\treturn aEndLineNumber - bEndLineNumber;\n\t\t\t}\n\t\t\treturn aStartColumn - bStartColumn;\n\t\t}\n\t\treturn aStartLineNumber - bStartLineNumber;\n\t}\n\n\t/**\n\t * A function that compares ranges, useful for sorting ranges\n\t * It will first compare ranges on the endPosition and then on the startPosition\n\t */\n\tpublic static compareRangesUsingEnds(a: IRange, b: IRange): number {\n\t\tif (a.endLineNumber === b.endLineNumber) {\n\t\t\tif (a.endColumn === b.endColumn) {\n\t\t\t\tif (a.startLineNumber === b.startLineNumber) {\n\t\t\t\t\treturn a.startColumn - b.startColumn;\n\t\t\t\t}\n\t\t\t\treturn a.startLineNumber - b.startLineNumber;\n\t\t\t}\n\t\t\treturn a.endColumn - b.endColumn;\n\t\t}\n\t\treturn a.endLineNumber - b.endLineNumber;\n\t}\n\n\t/**\n\t * Test if the range spans multiple lines.\n\t */\n\tpublic static spansMultipleLines(range: IRange): boolean {\n\t\treturn range.endLineNumber > range.startLineNumber;\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as assert from 'vs/base/common/assert';\nimport { EventEmitter } from 'vs/base/common/eventEmitter';\nimport * as objects from 'vs/base/common/objects';\nimport { Range } from 'vs/editor/common/core/range';\nimport { ICommonDiffEditor, ILineChange } from 'vs/editor/common/editorCommon';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { ICursorPositionChangedEvent } from 'vs/editor/common/controller/cursorEvents';\n\ninterface IDiffRange {\n\trhs: boolean;\n\trange: Range;\n}\n\nexport interface Options {\n\tfollowsCaret?: boolean;\n\tignoreCharChanges?: boolean;\n\talwaysRevealFirst?: boolean;\n}\n\nvar defaultOptions: Options = {\n\tfollowsCaret: true,\n\tignoreCharChanges: true,\n\talwaysRevealFirst: true\n};\n\n/**\n * Create a new diff navigator for the provided diff editor.\n */\nexport class DiffNavigator extends EventEmitter {\n\n\tpublic static Events = {\n\t\tUPDATED: 'navigation.updated'\n\t};\n\n\tprivate editor: ICommonDiffEditor;\n\tprivate options: Options;\n\tprivate disposed: boolean;\n\tprivate toUnbind: IDisposable[];\n\n\tprivate nextIdx: number;\n\tprivate ranges: IDiffRange[];\n\tprivate ignoreSelectionChange: boolean;\n\tpublic revealFirst: boolean;\n\n\tconstructor(editor: ICommonDiffEditor, options: Options = {}) {\n\t\tsuper([\n\t\t\tDiffNavigator.Events.UPDATED\n\t\t]);\n\t\tthis.editor = editor;\n\t\tthis.options = objects.mixin(options, defaultOptions, false);\n\n\t\tthis.disposed = false;\n\t\tthis.toUnbind = [];\n\n\t\tthis.nextIdx = -1;\n\t\tthis.ranges = [];\n\t\tthis.ignoreSelectionChange = false;\n\t\tthis.revealFirst = this.options.alwaysRevealFirst;\n\n\t\t// hook up to diff editor for diff, disposal, and caret move\n\t\tthis.toUnbind.push(this.editor.onDidDispose(() => this.dispose()));\n\t\tthis.toUnbind.push(this.editor.onDidUpdateDiff(() => this.onDiffUpdated()));\n\n\t\tif (this.options.followsCaret) {\n\t\t\tthis.toUnbind.push(this.editor.getModifiedEditor().onDidChangeCursorPosition((e: ICursorPositionChangedEvent) => {\n\t\t\t\tif (this.ignoreSelectionChange) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.nextIdx = -1;\n\t\t\t}));\n\t\t}\n\t\tif (this.options.alwaysRevealFirst) {\n\t\t\tthis.toUnbind.push(this.editor.getModifiedEditor().onDidChangeModel((e) => {\n\t\t\t\tthis.revealFirst = true;\n\t\t\t}));\n\t\t}\n\n\t\t// init things\n\t\tthis.init();\n\t}\n\n\tprivate init(): void {\n\t\tvar changes = this.editor.getLineChanges();\n\t\tif (!changes) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate onDiffUpdated(): void {\n\t\tthis.init();\n\n\t\tthis.compute(this.editor.getLineChanges());\n\t\tif (this.revealFirst) {\n\t\t\t// Only reveal first on first non-null changes\n\t\t\tif (this.editor.getLineChanges() !== null) {\n\t\t\t\tthis.revealFirst = false;\n\t\t\t\tthis.nextIdx = -1;\n\t\t\t\tthis.next();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate compute(lineChanges: ILineChange[]): void {\n\n\t\t// new ranges\n\t\tthis.ranges = [];\n\n\t\tif (lineChanges) {\n\t\t\t// create ranges from changes\n\t\t\tlineChanges.forEach((lineChange) => {\n\n\t\t\t\tif (!this.options.ignoreCharChanges && lineChange.charChanges) {\n\n\t\t\t\t\tlineChange.charChanges.forEach((charChange) => {\n\t\t\t\t\t\tthis.ranges.push({\n\t\t\t\t\t\t\trhs: true,\n\t\t\t\t\t\t\trange: new Range(\n\t\t\t\t\t\t\t\tcharChange.modifiedStartLineNumber,\n\t\t\t\t\t\t\t\tcharChange.modifiedStartColumn,\n\t\t\t\t\t\t\t\tcharChange.modifiedEndLineNumber,\n\t\t\t\t\t\t\t\tcharChange.modifiedEndColumn)\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t} else {\n\t\t\t\t\tthis.ranges.push({\n\t\t\t\t\t\trhs: true,\n\t\t\t\t\t\trange: new Range(lineChange.modifiedStartLineNumber, 1, lineChange.modifiedStartLineNumber, 1)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// sort\n\t\tthis.ranges.sort((left, right) => {\n\t\t\tif (left.range.getStartPosition().isBeforeOrEqual(right.range.getStartPosition())) {\n\t\t\t\treturn -1;\n\t\t\t} else if (right.range.getStartPosition().isBeforeOrEqual(left.range.getStartPosition())) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t});\n\n\t\tthis.emit(DiffNavigator.Events.UPDATED, {});\n\t}\n\n\tprivate initIdx(fwd: boolean): void {\n\t\tvar found = false;\n\t\tvar position = this.editor.getPosition();\n\t\tfor (var i = 0, len = this.ranges.length; i < len && !found; i++) {\n\t\t\tvar range = this.ranges[i].range;\n\t\t\tif (position.isBeforeOrEqual(range.getStartPosition())) {\n\t\t\t\tthis.nextIdx = i + (fwd ? 0 : -1);\n\t\t\t\tfound = true;\n\t\t\t}\n\t\t}\n\t\tif (!found) {\n\t\t\t// after the last change\n\t\t\tthis.nextIdx = fwd ? 0 : this.ranges.length - 1;\n\t\t}\n\t\tif (this.nextIdx < 0) {\n\t\t\tthis.nextIdx = this.ranges.length - 1;\n\t\t}\n\t}\n\n\tprivate move(fwd: boolean): void {\n\t\tassert.ok(!this.disposed, 'Illegal State - diff navigator has been disposed');\n\n\t\tif (!this.canNavigate()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.nextIdx === -1) {\n\t\t\tthis.initIdx(fwd);\n\n\t\t} else if (fwd) {\n\t\t\tthis.nextIdx += 1;\n\t\t\tif (this.nextIdx >= this.ranges.length) {\n\t\t\t\tthis.nextIdx = 0;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.nextIdx -= 1;\n\t\t\tif (this.nextIdx < 0) {\n\t\t\t\tthis.nextIdx = this.ranges.length - 1;\n\t\t\t}\n\t\t}\n\n\t\tvar info = this.ranges[this.nextIdx];\n\t\tthis.ignoreSelectionChange = true;\n\t\ttry {\n\t\t\tvar pos = info.range.getStartPosition();\n\t\t\tthis.editor.setPosition(pos);\n\t\t\tthis.editor.revealPositionInCenter(pos);\n\t\t} finally {\n\t\t\tthis.ignoreSelectionChange = false;\n\t\t}\n\t}\n\n\tpublic canNavigate(): boolean {\n\t\treturn this.ranges && this.ranges.length > 0;\n\t}\n\n\tpublic next(): void {\n\t\tthis.move(true);\n\t}\n\n\tpublic previous(): void {\n\t\tthis.move(false);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.toUnbind = dispose(this.toUnbind);\n\t\tthis.ranges = null;\n\t\tthis.disposed = true;\n\n\t\tsuper.dispose();\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Range } from 'vs/editor/common/core/range';\nimport { Position } from 'vs/editor/common/core/position';\nimport { IIdentifiedSingleEditOperation } from 'vs/editor/common/editorCommon';\n\nexport class EditOperation {\n\n\tpublic static insert(position: Position, text: string): IIdentifiedSingleEditOperation {\n\t\treturn {\n\t\t\tidentifier: null,\n\t\t\trange: new Range(position.lineNumber, position.column, position.lineNumber, position.column),\n\t\t\ttext: text,\n\t\t\tforceMoveMarkers: true\n\t\t};\n\t}\n\n\tpublic static delete(range: Range): IIdentifiedSingleEditOperation {\n\t\treturn {\n\t\t\tidentifier: null,\n\t\t\trange: range,\n\t\t\ttext: null,\n\t\t\tforceMoveMarkers: true\n\t\t};\n\t}\n\n\tpublic static replace(range: Range, text: string): IIdentifiedSingleEditOperation {\n\t\treturn {\n\t\t\tidentifier: null,\n\t\t\trange: range,\n\t\t\ttext: text,\n\t\t\tforceMoveMarkers: false\n\t\t};\n\t}\n\n\tpublic static replaceMove(range: Range, text: string): IIdentifiedSingleEditOperation {\n\t\treturn {\n\t\t\tidentifier: null,\n\t\t\trange: range,\n\t\t\ttext: text,\n\t\t\tforceMoveMarkers: true\n\t\t};\n\t}\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'use strict';\n\nimport * as strings from 'vs/base/common/strings';\nimport { EditOperation } from 'vs/editor/common/core/editOperation';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Position } from 'vs/editor/common/core/position';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { Selection } from 'vs/editor/common/core/selection';\n\nexport class TrimTrailingWhitespaceCommand implements editorCommon.ICommand {\n\n\tprivate selection: Selection;\n\tprivate selectionId: string;\n\n\tconstructor(selection: Selection) {\n\t\tthis.selection = selection;\n\t}\n\n\tpublic getEditOperations(model: editorCommon.ITokenizedModel, builder: editorCommon.IEditOperationBuilder): void {\n\t\tlet ops = trimTrailingWhitespace(model, []);\n\t\tfor (let i = 0, len = ops.length; i < len; i++) {\n\t\t\tlet op = ops[i];\n\n\t\t\tbuilder.addEditOperation(op.range, op.text);\n\t\t}\n\n\t\tthis.selectionId = builder.trackSelection(this.selection);\n\t}\n\n\tpublic computeCursorState(model: editorCommon.ITokenizedModel, helper: editorCommon.ICursorStateComputerData): Selection {\n\t\treturn helper.getTrackedSelection(this.selectionId);\n\t}\n}\n\n/**\n * Generate commands for trimming trailing whitespace on a model and ignore lines on which cursors are sitting.\n */\nexport function trimTrailingWhitespace(model: editorCommon.ITextModel, cursors: Position[]): editorCommon.IIdentifiedSingleEditOperation[] {\n\t// Sort cursors ascending\n\tcursors.sort((a, b) => {\n\t\tif (a.lineNumber === b.lineNumber) {\n\t\t\treturn a.column - b.column;\n\t\t}\n\t\treturn a.lineNumber - b.lineNumber;\n\t});\n\n\t// Reduce multiple cursors on the same line and only keep the last one on the line\n\tfor (let i = cursors.length - 2; i >= 0; i--) {\n\t\tif (cursors[i].lineNumber === cursors[i + 1].lineNumber) {\n\t\t\t// Remove cursor at `i`\n\t\t\tcursors.splice(i, 1);\n\t\t}\n\t}\n\n\tlet r: editorCommon.IIdentifiedSingleEditOperation[] = [];\n\tlet rLen = 0;\n\tlet cursorIndex = 0;\n\tlet cursorLen = cursors.length;\n\n\tfor (let lineNumber = 1, lineCount = model.getLineCount(); lineNumber <= lineCount; lineNumber++) {\n\t\tlet lineContent = model.getLineContent(lineNumber);\n\t\tlet maxLineColumn = lineContent.length + 1;\n\t\tlet minEditColumn = 0;\n\n\t\tif (cursorIndex < cursorLen && cursors[cursorIndex].lineNumber === lineNumber) {\n\t\t\tminEditColumn = cursors[cursorIndex].column;\n\t\t\tcursorIndex++;\n\t\t\tif (minEditColumn === maxLineColumn) {\n\t\t\t\t// The cursor is at the end of the line => no edits for sure on this line\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tif (lineContent.length === 0) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet lastNonWhitespaceIndex = strings.lastNonWhitespaceIndex(lineContent);\n\n\t\tlet fromColumn = 0;\n\t\tif (lastNonWhitespaceIndex === -1) {\n\t\t\t// Entire line is whitespace\n\t\t\tfromColumn = 1;\n\t\t} else if (lastNonWhitespaceIndex !== lineContent.length - 1) {\n\t\t\t// There is trailing whitespace\n\t\t\tfromColumn = lastNonWhitespaceIndex + 2;\n\t\t} else {\n\t\t\t// There is no trailing whitespace\n\t\t\tcontinue;\n\t\t}\n\n\t\tfromColumn = Math.max(minEditColumn, fromColumn);\n\t\tr[rLen++] = EditOperation.delete(new Range(\n\t\t\tlineNumber, fromColumn,\n\t\t\tlineNumber, maxLineColumn\n\t\t));\n\t}\n\n\treturn 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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Range } from 'vs/editor/common/core/range';\nimport { Position, IPosition } from 'vs/editor/common/core/position';\n\n/**\n * A selection in the editor.\n * The selection is a range that has an orientation.\n */\nexport interface ISelection {\n\t/**\n\t * The line number on which the selection has started.\n\t */\n\treadonly selectionStartLineNumber: number;\n\t/**\n\t * The column on `selectionStartLineNumber` where the selection has started.\n\t */\n\treadonly selectionStartColumn: number;\n\t/**\n\t * The line number on which the selection has ended.\n\t */\n\treadonly positionLineNumber: number;\n\t/**\n\t * The column on `positionLineNumber` where the selection has ended.\n\t */\n\treadonly positionColumn: number;\n}\n\n/**\n * The direction of a selection.\n */\nexport enum SelectionDirection {\n\t/**\n\t * The selection starts above where it ends.\n\t */\n\tLTR,\n\t/**\n\t * The selection starts below where it ends.\n\t */\n\tRTL\n}\n\n/**\n * A selection in the editor.\n * The selection is a range that has an orientation.\n */\nexport class Selection extends Range {\n\t/**\n\t * The line number on which the selection has started.\n\t */\n\tpublic readonly selectionStartLineNumber: number;\n\t/**\n\t * The column on `selectionStartLineNumber` where the selection has started.\n\t */\n\tpublic readonly selectionStartColumn: number;\n\t/**\n\t * The line number on which the selection has ended.\n\t */\n\tpublic readonly positionLineNumber: number;\n\t/**\n\t * The column on `positionLineNumber` where the selection has ended.\n\t */\n\tpublic readonly positionColumn: number;\n\n\tconstructor(selectionStartLineNumber: number, selectionStartColumn: number, positionLineNumber: number, positionColumn: number) {\n\t\tsuper(selectionStartLineNumber, selectionStartColumn, positionLineNumber, positionColumn);\n\t\tthis.selectionStartLineNumber = selectionStartLineNumber;\n\t\tthis.selectionStartColumn = selectionStartColumn;\n\t\tthis.positionLineNumber = positionLineNumber;\n\t\tthis.positionColumn = positionColumn;\n\t}\n\n\t/**\n\t * Clone this selection.\n\t */\n\tpublic clone(): Selection {\n\t\treturn new Selection(this.selectionStartLineNumber, this.selectionStartColumn, this.positionLineNumber, this.positionColumn);\n\t}\n\n\t/**\n\t * Transform to a human-readable representation.\n\t */\n\tpublic toString(): string {\n\t\treturn '[' + this.selectionStartLineNumber + ',' + this.selectionStartColumn + ' -> ' + this.positionLineNumber + ',' + this.positionColumn + ']';\n\t}\n\n\t/**\n\t * Test if equals other selection.\n\t */\n\tpublic equalsSelection(other: ISelection): boolean {\n\t\treturn (\n\t\t\tSelection.selectionsEqual(this, other)\n\t\t);\n\t}\n\n\t/**\n\t * Test if the two selections are equal.\n\t */\n\tpublic static selectionsEqual(a: ISelection, b: ISelection): boolean {\n\t\treturn (\n\t\t\ta.selectionStartLineNumber === b.selectionStartLineNumber &&\n\t\t\ta.selectionStartColumn === b.selectionStartColumn &&\n\t\t\ta.positionLineNumber === b.positionLineNumber &&\n\t\t\ta.positionColumn === b.positionColumn\n\t\t);\n\t}\n\n\t/**\n\t * Get directions (LTR or RTL).\n\t */\n\tpublic getDirection(): SelectionDirection {\n\t\tif (this.selectionStartLineNumber === this.startLineNumber && this.selectionStartColumn === this.startColumn) {\n\t\t\treturn SelectionDirection.LTR;\n\t\t}\n\t\treturn SelectionDirection.RTL;\n\t}\n\n\t/**\n\t * Create a new selection with a different `positionLineNumber` and `positionColumn`.\n\t */\n\tpublic setEndPosition(endLineNumber: number, endColumn: number): Selection {\n\t\tif (this.getDirection() === SelectionDirection.LTR) {\n\t\t\treturn new Selection(this.startLineNumber, this.startColumn, endLineNumber, endColumn);\n\t\t}\n\t\treturn new Selection(endLineNumber, endColumn, this.startLineNumber, this.startColumn);\n\t}\n\n\t/**\n\t * Get the position at `positionLineNumber` and `positionColumn`.\n\t */\n\tpublic getPosition(): Position {\n\t\treturn new Position(this.positionLineNumber, this.positionColumn);\n\t}\n\n\t/**\n\t * Create a new selection with a different `selectionStartLineNumber` and `selectionStartColumn`.\n\t */\n\tpublic setStartPosition(startLineNumber: number, startColumn: number): Selection {\n\t\tif (this.getDirection() === SelectionDirection.LTR) {\n\t\t\treturn new Selection(startLineNumber, startColumn, this.endLineNumber, this.endColumn);\n\t\t}\n\t\treturn new Selection(this.endLineNumber, this.endColumn, startLineNumber, startColumn);\n\t}\n\n\t// ----\n\n\t/**\n\t * Create a `Selection` from one or two positions\n\t */\n\tpublic static fromPositions(start: IPosition, end: IPosition = start): Selection {\n\t\treturn new Selection(start.lineNumber, start.column, end.lineNumber, end.column);\n\t}\n\n\t/**\n\t * Create a `Selection` from an `ISelection`.\n\t */\n\tpublic static liftSelection(sel: ISelection): Selection {\n\t\treturn new Selection(sel.selectionStartLineNumber, sel.selectionStartColumn, sel.positionLineNumber, sel.positionColumn);\n\t}\n\n\t/**\n\t * `a` equals `b`.\n\t */\n\tpublic static selectionsArrEqual(a: ISelection[], b: ISelection[]): boolean {\n\t\tif (a && !b || !a && b) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!a && !b) {\n\t\t\treturn true;\n\t\t}\n\t\tif (a.length !== b.length) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (var i = 0, len = a.length; i < len; i++) {\n\t\t\tif (!this.selectionsEqual(a[i], b[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if `obj` is an `ISelection`.\n\t */\n\tpublic static isISelection(obj: any): obj is ISelection {\n\t\treturn (\n\t\t\tobj\n\t\t\t&& (typeof obj.selectionStartLineNumber === 'number')\n\t\t\t&& (typeof obj.selectionStartColumn === 'number')\n\t\t\t&& (typeof obj.positionLineNumber === 'number')\n\t\t\t&& (typeof obj.positionColumn === 'number')\n\t\t);\n\t}\n\n\t/**\n\t * Create with a direction.\n\t */\n\tpublic static createWithDirection(startLineNumber: number, startColumn: number, endLineNumber: number, endColumn: number, direction: SelectionDirection): Selection {\n\n\t\tif (direction === SelectionDirection.LTR) {\n\t\t\treturn new Selection(startLineNumber, startColumn, endLineNumber, endColumn);\n\t\t}\n\n\t\treturn new Selection(endLineNumber, endColumn, startLineNumber, startColumn);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Selection } from 'vs/editor/common/core/selection';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { Range } from 'vs/editor/common/core/range';\n\nexport class ReplaceCommand implements editorCommon.ICommand {\n\n\tprivate readonly _range: Range;\n\tprivate readonly _text: string;\n\tpublic readonly insertsAutoWhitespace: boolean;\n\n\tconstructor(range: Range, text: string, insertsAutoWhitespace: boolean = false) {\n\t\tthis._range = range;\n\t\tthis._text = text;\n\t\tthis.insertsAutoWhitespace = insertsAutoWhitespace;\n\t}\n\n\tpublic getEditOperations(model: editorCommon.ITokenizedModel, builder: editorCommon.IEditOperationBuilder): void {\n\t\tbuilder.addTrackedEditOperation(this._range, this._text);\n\t}\n\n\tpublic computeCursorState(model: editorCommon.ITokenizedModel, helper: editorCommon.ICursorStateComputerData): Selection {\n\t\tlet inverseEditOperations = helper.getInverseEditOperations();\n\t\tlet srcRange = inverseEditOperations[0].range;\n\t\treturn new Selection(\n\t\t\tsrcRange.endLineNumber,\n\t\t\tsrcRange.endColumn,\n\t\t\tsrcRange.endLineNumber,\n\t\t\tsrcRange.endColumn\n\t\t);\n\t}\n}\n\nexport class ReplaceCommandWithoutChangingPosition implements editorCommon.ICommand {\n\n\tprivate readonly _range: Range;\n\tprivate readonly _text: string;\n\tpublic readonly insertsAutoWhitespace: boolean;\n\n\tconstructor(range: Range, text: string, insertsAutoWhitespace: boolean = false) {\n\t\tthis._range = range;\n\t\tthis._text = text;\n\t\tthis.insertsAutoWhitespace = insertsAutoWhitespace;\n\t}\n\n\tpublic getEditOperations(model: editorCommon.ITokenizedModel, builder: editorCommon.IEditOperationBuilder): void {\n\t\tbuilder.addTrackedEditOperation(this._range, this._text);\n\t}\n\n\tpublic computeCursorState(model: editorCommon.ITokenizedModel, helper: editorCommon.ICursorStateComputerData): Selection {\n\t\tlet inverseEditOperations = helper.getInverseEditOperations();\n\t\tlet srcRange = inverseEditOperations[0].range;\n\t\treturn new Selection(\n\t\t\tsrcRange.startLineNumber,\n\t\t\tsrcRange.startColumn,\n\t\t\tsrcRange.startLineNumber,\n\t\t\tsrcRange.startColumn\n\t\t);\n\t}\n}\n\nexport class ReplaceCommandWithOffsetCursorState implements editorCommon.ICommand {\n\n\tprivate readonly _range: Range;\n\tprivate readonly _text: string;\n\tprivate readonly _columnDeltaOffset: number;\n\tprivate readonly _lineNumberDeltaOffset: number;\n\tpublic readonly insertsAutoWhitespace: boolean;\n\n\tconstructor(range: Range, text: string, lineNumberDeltaOffset: number, columnDeltaOffset: number, insertsAutoWhitespace: boolean = false) {\n\t\tthis._range = range;\n\t\tthis._text = text;\n\t\tthis._columnDeltaOffset = columnDeltaOffset;\n\t\tthis._lineNumberDeltaOffset = lineNumberDeltaOffset;\n\t\tthis.insertsAutoWhitespace = insertsAutoWhitespace;\n\t}\n\n\tpublic getEditOperations(model: editorCommon.ITokenizedModel, builder: editorCommon.IEditOperationBuilder): void {\n\t\tbuilder.addTrackedEditOperation(this._range, this._text);\n\t}\n\n\tpublic computeCursorState(model: editorCommon.ITokenizedModel, helper: editorCommon.ICursorStateComputerData): Selection {\n\t\tlet inverseEditOperations = helper.getInverseEditOperations();\n\t\tlet srcRange = inverseEditOperations[0].range;\n\t\treturn new Selection(\n\t\t\tsrcRange.endLineNumber + this._lineNumberDeltaOffset,\n\t\t\tsrcRange.endColumn + this._columnDeltaOffset,\n\t\t\tsrcRange.endLineNumber + this._lineNumberDeltaOffset,\n\t\t\tsrcRange.endColumn + this._columnDeltaOffset\n\t\t);\n\t}\n}\n\nexport class ReplaceCommandThatPreservesSelection implements editorCommon.ICommand {\n\n\tprivate _range: Range;\n\tprivate _text: string;\n\tprivate _initialSelection: Selection;\n\tprivate _selectionId: string;\n\n\tconstructor(editRange: Range, text: string, initialSelection: Selection) {\n\t\tthis._range = editRange;\n\t\tthis._text = text;\n\t\tthis._initialSelection = initialSelection;\n\t}\n\n\tpublic getEditOperations(model: editorCommon.ITokenizedModel, builder: editorCommon.IEditOperationBuilder): void {\n\t\tbuilder.addEditOperation(this._range, this._text);\n\t\tthis._selectionId = builder.trackSelection(this._initialSelection);\n\t}\n\n\tpublic computeCursorState(model: editorCommon.ITokenizedModel, helper: editorCommon.ICursorStateComputerData): Selection {\n\t\treturn helper.getTrackedSelection(this._selectionId);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { ICommand, ICursorStateComputerData, IEditOperationBuilder, ITokenizedModel } from 'vs/editor/common/editorCommon';\n\nexport class SurroundSelectionCommand implements ICommand {\n\tprivate _range: Selection;\n\tprivate _charBeforeSelection: string;\n\tprivate _charAfterSelection: string;\n\n\tconstructor(range: Selection, charBeforeSelection: string, charAfterSelection: string) {\n\t\tthis._range = range;\n\t\tthis._charBeforeSelection = charBeforeSelection;\n\t\tthis._charAfterSelection = charAfterSelection;\n\t}\n\n\tpublic getEditOperations(model: ITokenizedModel, builder: IEditOperationBuilder): void {\n\t\tbuilder.addTrackedEditOperation(new Range(\n\t\t\tthis._range.startLineNumber,\n\t\t\tthis._range.startColumn,\n\t\t\tthis._range.startLineNumber,\n\t\t\tthis._range.startColumn\n\t\t), this._charBeforeSelection);\n\n\t\tbuilder.addTrackedEditOperation(new Range(\n\t\t\tthis._range.endLineNumber,\n\t\t\tthis._range.endColumn,\n\t\t\tthis._range.endLineNumber,\n\t\t\tthis._range.endColumn\n\t\t), this._charAfterSelection);\n\t}\n\n\tpublic computeCursorState(model: ITokenizedModel, helper: ICursorStateComputerData): Selection {\n\t\tlet inverseEditOperations = helper.getInverseEditOperations();\n\t\tlet firstOperationRange = inverseEditOperations[0].range;\n\t\tlet secondOperationRange = inverseEditOperations[1].range;\n\n\t\treturn new Selection(\n\t\t\tfirstOperationRange.endLineNumber,\n\t\t\tfirstOperationRange.endColumn,\n\t\t\tsecondOperationRange.endLineNumber,\n\t\t\tsecondOperationRange.endColumn - this._charAfterSelection.length\n\t\t);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { IState } from 'vs/editor/common/modes';\n\nexport class Token {\n\t_tokenBrand: void;\n\n\tpublic readonly offset: number;\n\tpublic readonly type: string;\n\tpublic readonly language: string;\n\n\tconstructor(offset: number, type: string, language: string) {\n\t\tthis.offset = offset | 0;// @perf\n\t\tthis.type = type;\n\t\tthis.language = language;\n\t}\n\n\tpublic toString(): string {\n\t\treturn '(' + this.offset + ', ' + this.type + ')';\n\t}\n}\n\nexport class TokenizationResult {\n\t_tokenizationResultBrand: void;\n\n\tpublic readonly tokens: Token[];\n\tpublic readonly endState: IState;\n\n\tconstructor(tokens: Token[], endState: IState) {\n\t\tthis.tokens = tokens;\n\t\tthis.endState = endState;\n\t}\n}\n\nexport class TokenizationResult2 {\n\t_tokenizationResult2Brand: void;\n\n\t/**\n\t * The tokens in binary format. Each token occupies two array indices. For token i:\n\t * - at offset 2*i => startIndex\n\t * - at offset 2*i + 1 => metadata\n\t *\n\t */\n\tpublic readonly tokens: Uint32Array;\n\tpublic readonly endState: IState;\n\n\tconstructor(tokens: Uint32Array, endState: IState) {\n\t\tthis.tokens = tokens;\n\t\tthis.endState = endState;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nexport class Uint8Matrix {\n\n\tprivate _data: Uint8Array;\n\tprivate _rows: number;\n\tprivate _cols: number;\n\n\tconstructor(rows: number, cols: number, defaultValue: number) {\n\t\tlet data = new Uint8Array(rows * cols);\n\t\tfor (let i = 0, len = rows * cols; i < len; i++) {\n\t\t\tdata[i] = defaultValue;\n\t\t}\n\n\t\tthis._data = data;\n\t\tthis._rows = rows;\n\t\tthis._cols = cols;\n\t}\n\n\tpublic get(row: number, col: number): number {\n\t\treturn this._data[row * this._cols + col];\n\t}\n\n\tpublic set(row: number, col: number, value: number): void {\n\t\tthis._data[row * this._cols + col] = value;\n\t}\n}\n\nexport const enum Constants {\n\t/**\n\t * MAX SMI (SMall Integer) as defined in v8.\n\t * one bit is lost for boxing/unboxing flag.\n\t * one bit is lost for sign flag.\n\t * See https://thibaultlaurens.github.io/javascript/2013/04/29/how-the-v8-engine-works/#tagged-values\n\t */\n\tMAX_SAFE_SMALL_INTEGER = 1 << 30,\n\n\t/**\n\t * MIN SMI (SMall Integer) as defined in v8.\n\t * one bit is lost for boxing/unboxing flag.\n\t * one bit is lost for sign flag.\n\t * See https://thibaultlaurens.github.io/javascript/2013/04/29/how-the-v8-engine-works/#tagged-values\n\t */\n\tMIN_SAFE_SMALL_INTEGER = -(1 << 30),\n\n\t/**\n\t * Max unsigned integer that fits on 8 bits.\n\t */\n\tMAX_UINT_8 = 255, // 2^8 - 1\n\n\t/**\n\t * Max unsigned integer that fits on 16 bits.\n\t */\n\tMAX_UINT_16 = 65535, // 2^16 - 1\n\n\t/**\n\t * Max unsigned integer that fits on 32 bits.\n\t */\n\tMAX_UINT_32 = 4294967295, // 2^32 - 1\n\n\n}\n\nexport function toUint8(v: number): number {\n\tif (v < 0) {\n\t\treturn 0;\n\t}\n\tif (v > Constants.MAX_UINT_8) {\n\t\treturn Constants.MAX_UINT_8;\n\t}\n\treturn v | 0;\n}\n\nexport function toUint32(v: number): number {\n\tif (v < 0) {\n\t\treturn 0;\n\t}\n\tif (v > Constants.MAX_UINT_32) {\n\t\treturn Constants.MAX_UINT_32;\n\t}\n\treturn v | 0;\n}\n\nexport function toUint32Array(arr: number[]): Uint32Array {\n\tlet len = arr.length;\n\tlet r = new Uint32Array(len);\n\tfor (let i = 0; i < len; i++) {\n\t\tr[i] = toUint32(arr[i]);\n\t}\n\treturn 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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { toUint8 } from 'vs/editor/common/core/uint';\n\n/**\n * A fast character classifier that uses a compact array for ASCII values.\n */\nexport class CharacterClassifier {\n\t/**\n\t * Maintain a compact (fully initialized ASCII map for quickly classifying ASCII characters - used more often in code).\n\t */\n\tprivate _asciiMap: Uint8Array;\n\n\t/**\n\t * The entire map (sparse array).\n\t */\n\tprivate _map: Map;\n\n\tprivate _defaultValue: number;\n\n\tconstructor(_defaultValue: T) {\n\t\tlet defaultValue = toUint8(_defaultValue);\n\n\t\tthis._defaultValue = defaultValue;\n\t\tthis._asciiMap = CharacterClassifier._createAsciiMap(defaultValue);\n\t\tthis._map = new Map();\n\t}\n\n\tprivate static _createAsciiMap(defaultValue: number): Uint8Array {\n\t\tlet asciiMap: Uint8Array = new Uint8Array(256);\n\t\tfor (let i = 0; i < 256; i++) {\n\t\t\tasciiMap[i] = defaultValue;\n\t\t}\n\t\treturn asciiMap;\n\t}\n\n\tpublic set(charCode: number, _value: T): void {\n\t\tlet value = toUint8(_value);\n\n\t\tif (charCode >= 0 && charCode < 256) {\n\t\t\tthis._asciiMap[charCode] = value;\n\t\t} else {\n\t\t\tthis._map.set(charCode, value);\n\t\t}\n\t}\n\n\tpublic get(charCode: number): T {\n\t\tif (charCode >= 0 && charCode < 256) {\n\t\t\treturn this._asciiMap[charCode];\n\t\t} else {\n\t\t\treturn (this._map.get(charCode) || this._defaultValue);\n\t\t}\n\t}\n}\n\nconst enum Boolean {\n\tFalse = 0,\n\tTrue = 1\n}\n\nexport class CharacterSet {\n\n\tprivate _actual: CharacterClassifier;\n\n\tconstructor() {\n\t\tthis._actual = new CharacterClassifier(Boolean.False);\n\t}\n\n\tpublic add(charCode: number): void {\n\t\tthis._actual.set(charCode, Boolean.True);\n\t}\n\n\tpublic has(charCode: number): boolean {\n\t\treturn (this._actual.get(charCode) === Boolean.True);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { CharCode } from 'vs/base/common/charCode';\nimport { CharacterClassifier } from 'vs/editor/common/core/characterClassifier';\n\nexport const enum WordCharacterClass {\n\tRegular = 0,\n\tWhitespace = 1,\n\tWordSeparator = 2\n}\n\nexport class WordCharacterClassifier extends CharacterClassifier {\n\n\tconstructor(wordSeparators: string) {\n\t\tsuper(WordCharacterClass.Regular);\n\n\t\tfor (let i = 0, len = wordSeparators.length; i < len; i++) {\n\t\t\tthis.set(wordSeparators.charCodeAt(i), WordCharacterClass.WordSeparator);\n\t\t}\n\n\t\tthis.set(CharCode.Space, WordCharacterClass.Whitespace);\n\t\tthis.set(CharCode.Tab, WordCharacterClass.Whitespace);\n\t}\n\n}\n\nfunction once(computeFn: (input: string) => R): (input: string) => R {\n\tlet cache: { [key: string]: R; } = {}; // TODO@Alex unbounded cache\n\treturn (input: string): R => {\n\t\tif (!cache.hasOwnProperty(input)) {\n\t\t\tcache[input] = computeFn(input);\n\t\t}\n\t\treturn cache[input];\n\t};\n}\n\nexport const getMapForWordSeparators = once(\n\t(input) => new WordCharacterClassifier(input)\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'use strict';\n\nimport { IDiffChange, ISequence, LcsDiff } from 'vs/base/common/diff/diff';\nimport * as strings from 'vs/base/common/strings';\nimport { ICharChange, ILineChange } from 'vs/editor/common/editorCommon';\n\nvar MAXIMUM_RUN_TIME = 5000; // 5 seconds\nvar MINIMUM_MATCHING_CHARACTER_LENGTH = 3;\n\ninterface IMarker {\n\tlineNumber: number;\n\tcolumn: number;\n\toffset: number;\n}\n\nfunction computeDiff(originalSequence: ISequence, modifiedSequence: ISequence, continueProcessingPredicate: () => boolean): IDiffChange[] {\n\tvar diffAlgo = new LcsDiff(originalSequence, modifiedSequence, continueProcessingPredicate);\n\treturn diffAlgo.ComputeDiff();\n}\n\nclass MarkerSequence implements ISequence {\n\n\tpublic buffer: string;\n\tpublic startMarkers: IMarker[];\n\tpublic endMarkers: IMarker[];\n\n\tconstructor(buffer: string, startMarkers: IMarker[], endMarkers: IMarker[]) {\n\t\tthis.buffer = buffer;\n\t\tthis.startMarkers = startMarkers;\n\t\tthis.endMarkers = endMarkers;\n\t}\n\n\tpublic equals(other: any): boolean {\n\t\tif (!(other instanceof MarkerSequence)) {\n\t\t\treturn false;\n\t\t}\n\t\tvar otherMarkerSequence = other;\n\t\tif (this.getLength() !== otherMarkerSequence.getLength()) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (var i = 0, len = this.getLength(); i < len; i++) {\n\t\t\tvar myElement = this.getElementHash(i);\n\t\t\tvar otherElement = otherMarkerSequence.getElementHash(i);\n\t\t\tif (myElement !== otherElement) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic getLength(): number {\n\t\treturn this.startMarkers.length;\n\t}\n\n\tpublic getElementHash(i: number): string {\n\t\treturn this.buffer.substring(this.startMarkers[i].offset, this.endMarkers[i].offset);\n\t}\n\n\tpublic getStartLineNumber(i: number): number {\n\t\tif (i === this.startMarkers.length) {\n\t\t\t// This is the special case where a change happened after the last marker\n\t\t\treturn this.startMarkers[i - 1].lineNumber + 1;\n\t\t}\n\t\treturn this.startMarkers[i].lineNumber;\n\t}\n\n\tpublic getStartColumn(i: number): number {\n\t\treturn this.startMarkers[i].column;\n\t}\n\n\tpublic getEndLineNumber(i: number): number {\n\t\treturn this.endMarkers[i].lineNumber;\n\t}\n\n\tpublic getEndColumn(i: number): number {\n\t\treturn this.endMarkers[i].column;\n\t}\n\n}\n\nclass LineMarkerSequence extends MarkerSequence {\n\n\tconstructor(lines: string[], shouldIgnoreTrimWhitespace: boolean) {\n\t\tvar i: number, length: number, pos: number;\n\t\tvar buffer = '';\n\t\tvar startMarkers: IMarker[] = [], endMarkers: IMarker[] = [], startColumn: number, endColumn: number;\n\n\t\tfor (pos = 0, i = 0, length = lines.length; i < length; i++) {\n\t\t\tbuffer += lines[i];\n\t\t\tstartColumn = 1;\n\t\t\tendColumn = lines[i].length + 1;\n\n\t\t\tif (shouldIgnoreTrimWhitespace) {\n\t\t\t\tstartColumn = LineMarkerSequence._getFirstNonBlankColumn(lines[i], 1);\n\t\t\t\tendColumn = LineMarkerSequence._getLastNonBlankColumn(lines[i], 1);\n\t\t\t}\n\n\t\t\tstartMarkers.push({\n\t\t\t\toffset: pos + startColumn - 1,\n\t\t\t\tlineNumber: i + 1,\n\t\t\t\tcolumn: startColumn\n\t\t\t});\n\n\t\t\tendMarkers.push({\n\t\t\t\toffset: pos + endColumn - 1,\n\t\t\t\tlineNumber: i + 1,\n\t\t\t\tcolumn: endColumn\n\t\t\t});\n\n\t\t\tpos += lines[i].length;\n\t\t}\n\n\t\tsuper(buffer, startMarkers, endMarkers);\n\t}\n\n\tprivate static _getFirstNonBlankColumn(txt: string, defaultValue: number): number {\n\t\tvar r = strings.firstNonWhitespaceIndex(txt);\n\t\tif (r === -1) {\n\t\t\treturn defaultValue;\n\t\t}\n\t\treturn r + 1;\n\t}\n\n\tprivate static _getLastNonBlankColumn(txt: string, defaultValue: number): number {\n\t\tvar r = strings.lastNonWhitespaceIndex(txt);\n\t\tif (r === -1) {\n\t\t\treturn defaultValue;\n\t\t}\n\t\treturn r + 2;\n\t}\n\n\tpublic getCharSequence(startIndex: number, endIndex: number): MarkerSequence {\n\t\tvar startMarkers: IMarker[] = [], endMarkers: IMarker[] = [], index: number, i: number, startMarker: IMarker, endMarker: IMarker;\n\t\tfor (index = startIndex; index <= endIndex; index++) {\n\t\t\tstartMarker = this.startMarkers[index];\n\t\t\tendMarker = this.endMarkers[index];\n\t\t\tfor (i = startMarker.offset; i < endMarker.offset; i++) {\n\t\t\t\tstartMarkers.push({\n\t\t\t\t\toffset: i,\n\t\t\t\t\tlineNumber: startMarker.lineNumber,\n\t\t\t\t\tcolumn: startMarker.column + (i - startMarker.offset)\n\t\t\t\t});\n\t\t\t\tendMarkers.push({\n\t\t\t\t\toffset: i + 1,\n\t\t\t\t\tlineNumber: startMarker.lineNumber,\n\t\t\t\t\tcolumn: startMarker.column + (i - startMarker.offset) + 1\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn new MarkerSequence(this.buffer, startMarkers, endMarkers);\n\t}\n}\n\nclass CharChange implements ICharChange {\n\n\tpublic originalStartLineNumber: number;\n\tpublic originalStartColumn: number;\n\tpublic originalEndLineNumber: number;\n\tpublic originalEndColumn: number;\n\n\tpublic modifiedStartLineNumber: number;\n\tpublic modifiedStartColumn: number;\n\tpublic modifiedEndLineNumber: number;\n\tpublic modifiedEndColumn: number;\n\n\tconstructor(diffChange: IDiffChange, originalCharSequence: MarkerSequence, modifiedCharSequence: MarkerSequence) {\n\t\tif (diffChange.originalLength === 0) {\n\t\t\tthis.originalStartLineNumber = 0;\n\t\t\tthis.originalStartColumn = 0;\n\t\t\tthis.originalEndLineNumber = 0;\n\t\t\tthis.originalEndColumn = 0;\n\t\t} else {\n\t\t\tthis.originalStartLineNumber = originalCharSequence.getStartLineNumber(diffChange.originalStart);\n\t\t\tthis.originalStartColumn = originalCharSequence.getStartColumn(diffChange.originalStart);\n\t\t\tthis.originalEndLineNumber = originalCharSequence.getEndLineNumber(diffChange.originalStart + diffChange.originalLength - 1);\n\t\t\tthis.originalEndColumn = originalCharSequence.getEndColumn(diffChange.originalStart + diffChange.originalLength - 1);\n\t\t}\n\n\t\tif (diffChange.modifiedLength === 0) {\n\t\t\tthis.modifiedStartLineNumber = 0;\n\t\t\tthis.modifiedStartColumn = 0;\n\t\t\tthis.modifiedEndLineNumber = 0;\n\t\t\tthis.modifiedEndColumn = 0;\n\t\t} else {\n\t\t\tthis.modifiedStartLineNumber = modifiedCharSequence.getStartLineNumber(diffChange.modifiedStart);\n\t\t\tthis.modifiedStartColumn = modifiedCharSequence.getStartColumn(diffChange.modifiedStart);\n\t\t\tthis.modifiedEndLineNumber = modifiedCharSequence.getEndLineNumber(diffChange.modifiedStart + diffChange.modifiedLength - 1);\n\t\t\tthis.modifiedEndColumn = modifiedCharSequence.getEndColumn(diffChange.modifiedStart + diffChange.modifiedLength - 1);\n\t\t}\n\t}\n\n}\n\nfunction postProcessCharChanges(rawChanges: IDiffChange[]): IDiffChange[] {\n\tif (rawChanges.length <= 1) {\n\t\treturn rawChanges;\n\t}\n\tvar result = [rawChanges[0]];\n\n\tvar i: number, len: number, originalMatchingLength: number, modifiedMatchingLength: number, matchingLength: number, prevChange = result[0], currChange: IDiffChange;\n\tfor (i = 1, len = rawChanges.length; i < len; i++) {\n\t\tcurrChange = rawChanges[i];\n\n\t\toriginalMatchingLength = currChange.originalStart - (prevChange.originalStart + prevChange.originalLength);\n\t\tmodifiedMatchingLength = currChange.modifiedStart - (prevChange.modifiedStart + prevChange.modifiedLength);\n\t\t// Both of the above should be equal, but the continueProcessingPredicate may prevent this from being true\n\t\tmatchingLength = Math.min(originalMatchingLength, modifiedMatchingLength);\n\n\t\tif (matchingLength < MINIMUM_MATCHING_CHARACTER_LENGTH) {\n\t\t\t// Merge the current change into the previous one\n\t\t\tprevChange.originalLength = (currChange.originalStart + currChange.originalLength) - prevChange.originalStart;\n\t\t\tprevChange.modifiedLength = (currChange.modifiedStart + currChange.modifiedLength) - prevChange.modifiedStart;\n\t\t} else {\n\t\t\t// Add the current change\n\t\t\tresult.push(currChange);\n\t\t\tprevChange = currChange;\n\t\t}\n\t}\n\n\treturn result;\n}\n\nclass LineChange implements ILineChange {\n\tpublic originalStartLineNumber: number;\n\tpublic originalEndLineNumber: number;\n\tpublic modifiedStartLineNumber: number;\n\tpublic modifiedEndLineNumber: number;\n\tpublic charChanges: CharChange[];\n\n\tconstructor(diffChange: IDiffChange, originalLineSequence: LineMarkerSequence, modifiedLineSequence: LineMarkerSequence, continueProcessingPredicate: () => boolean, shouldPostProcessCharChanges: boolean) {\n\t\tif (diffChange.originalLength === 0) {\n\t\t\tthis.originalStartLineNumber = originalLineSequence.getStartLineNumber(diffChange.originalStart) - 1;\n\t\t\tthis.originalEndLineNumber = 0;\n\t\t} else {\n\t\t\tthis.originalStartLineNumber = originalLineSequence.getStartLineNumber(diffChange.originalStart);\n\t\t\tthis.originalEndLineNumber = originalLineSequence.getEndLineNumber(diffChange.originalStart + diffChange.originalLength - 1);\n\t\t}\n\n\t\tif (diffChange.modifiedLength === 0) {\n\t\t\tthis.modifiedStartLineNumber = modifiedLineSequence.getStartLineNumber(diffChange.modifiedStart) - 1;\n\t\t\tthis.modifiedEndLineNumber = 0;\n\t\t} else {\n\t\t\tthis.modifiedStartLineNumber = modifiedLineSequence.getStartLineNumber(diffChange.modifiedStart);\n\t\t\tthis.modifiedEndLineNumber = modifiedLineSequence.getEndLineNumber(diffChange.modifiedStart + diffChange.modifiedLength - 1);\n\t\t}\n\n\t\tif (diffChange.originalLength !== 0 && diffChange.modifiedLength !== 0 && continueProcessingPredicate()) {\n\t\t\tvar originalCharSequence = originalLineSequence.getCharSequence(diffChange.originalStart, diffChange.originalStart + diffChange.originalLength - 1);\n\t\t\tvar modifiedCharSequence = modifiedLineSequence.getCharSequence(diffChange.modifiedStart, diffChange.modifiedStart + diffChange.modifiedLength - 1);\n\n\t\t\tvar rawChanges = computeDiff(originalCharSequence, modifiedCharSequence, continueProcessingPredicate);\n\n\t\t\tif (shouldPostProcessCharChanges) {\n\t\t\t\trawChanges = postProcessCharChanges(rawChanges);\n\t\t\t}\n\n\t\t\tthis.charChanges = [];\n\t\t\tfor (var i = 0, length = rawChanges.length; i < length; i++) {\n\t\t\t\tthis.charChanges.push(new CharChange(rawChanges[i], originalCharSequence, modifiedCharSequence));\n\t\t\t}\n\t\t}\n\t}\n\n}\n\nexport interface IDiffComputerOpts {\n\tshouldPostProcessCharChanges: boolean;\n\tshouldIgnoreTrimWhitespace: boolean;\n\tshouldConsiderTrimWhitespaceInEmptyCase: boolean;\n}\n\nexport class DiffComputer {\n\n\tprivate shouldPostProcessCharChanges: boolean;\n\tprivate shouldIgnoreTrimWhitespace: boolean;\n\tprivate maximumRunTimeMs: number;\n\tprivate original: LineMarkerSequence;\n\tprivate modified: LineMarkerSequence;\n\n\tprivate computationStartTime: number;\n\n\tconstructor(originalLines: string[], modifiedLines: string[], opts: IDiffComputerOpts) {\n\t\tthis.shouldPostProcessCharChanges = opts.shouldPostProcessCharChanges;\n\t\tthis.shouldIgnoreTrimWhitespace = opts.shouldIgnoreTrimWhitespace;\n\t\tthis.maximumRunTimeMs = MAXIMUM_RUN_TIME;\n\t\tthis.original = new LineMarkerSequence(originalLines, this.shouldIgnoreTrimWhitespace);\n\t\tthis.modified = new LineMarkerSequence(modifiedLines, this.shouldIgnoreTrimWhitespace);\n\t\tif (opts.shouldConsiderTrimWhitespaceInEmptyCase && this.shouldIgnoreTrimWhitespace && this.original.equals(this.modified)) {\n\t\t\t// Diff would be empty with `shouldIgnoreTrimWhitespace`\n\t\t\tthis.shouldIgnoreTrimWhitespace = false;\n\t\t\tthis.original = new LineMarkerSequence(originalLines, this.shouldIgnoreTrimWhitespace);\n\t\t\tthis.modified = new LineMarkerSequence(modifiedLines, this.shouldIgnoreTrimWhitespace);\n\t\t}\n\t}\n\n\tpublic computeDiff(): ILineChange[] {\n\n\t\tif (this.original.getLength() === 1 && this.original.getElementHash(0).length === 0) {\n\t\t\t// empty original => fast path\n\t\t\treturn [{\n\t\t\t\toriginalStartLineNumber: 1,\n\t\t\t\toriginalEndLineNumber: 1,\n\t\t\t\tmodifiedStartLineNumber: 1,\n\t\t\t\tmodifiedEndLineNumber: this.modified.getLength(),\n\t\t\t\tcharChanges: [{\n\t\t\t\t\tmodifiedEndColumn: 0,\n\t\t\t\t\tmodifiedEndLineNumber: 0,\n\t\t\t\t\tmodifiedStartColumn: 0,\n\t\t\t\t\tmodifiedStartLineNumber: 0,\n\t\t\t\t\toriginalEndColumn: 0,\n\t\t\t\t\toriginalEndLineNumber: 0,\n\t\t\t\t\toriginalStartColumn: 0,\n\t\t\t\t\toriginalStartLineNumber: 0\n\t\t\t\t}]\n\t\t\t}];\n\t\t}\n\n\t\tif (this.modified.getLength() === 1 && this.modified.getElementHash(0).length === 0) {\n\t\t\t// empty modified => fast path\n\t\t\treturn [{\n\t\t\t\toriginalStartLineNumber: 1,\n\t\t\t\toriginalEndLineNumber: this.original.getLength(),\n\t\t\t\tmodifiedStartLineNumber: 1,\n\t\t\t\tmodifiedEndLineNumber: 1,\n\t\t\t\tcharChanges: [{\n\t\t\t\t\tmodifiedEndColumn: 0,\n\t\t\t\t\tmodifiedEndLineNumber: 0,\n\t\t\t\t\tmodifiedStartColumn: 0,\n\t\t\t\t\tmodifiedStartLineNumber: 0,\n\t\t\t\t\toriginalEndColumn: 0,\n\t\t\t\t\toriginalEndLineNumber: 0,\n\t\t\t\t\toriginalStartColumn: 0,\n\t\t\t\t\toriginalStartLineNumber: 0\n\t\t\t\t}]\n\t\t\t}];\n\t\t}\n\n\t\tthis.computationStartTime = (new Date()).getTime();\n\n\t\tvar rawChanges = computeDiff(this.original, this.modified, this._continueProcessingPredicate.bind(this));\n\n\t\tvar lineChanges: ILineChange[] = [];\n\t\tfor (var i = 0, length = rawChanges.length; i < length; i++) {\n\t\t\tlineChanges.push(new LineChange(rawChanges[i], this.original, this.modified, this._continueProcessingPredicate.bind(this), this.shouldPostProcessCharChanges));\n\t\t}\n\t\treturn lineChanges;\n\t}\n\n\tprivate _continueProcessingPredicate(): boolean {\n\t\tif (this.maximumRunTimeMs === 0) {\n\t\t\treturn true;\n\t\t}\n\t\tvar now = (new Date()).getTime();\n\t\treturn now - this.computationStartTime < this.maximumRunTimeMs;\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IEditorAction } from 'vs/editor/common/editorCommon';\nimport { IContextKeyService, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';\n\nexport class InternalEditorAction implements IEditorAction {\n\n\tpublic readonly id: string;\n\tpublic readonly label: string;\n\tpublic readonly alias: string;\n\n\tprivate readonly _precondition: ContextKeyExpr;\n\tprivate readonly _run: () => void | TPromise;\n\tprivate readonly _contextKeyService: IContextKeyService;\n\n\tconstructor(\n\t\tid: string,\n\t\tlabel: string,\n\t\talias: string,\n\t\tprecondition: ContextKeyExpr,\n\t\trun: () => void,\n\t\tcontextKeyService: IContextKeyService\n\t) {\n\t\tthis.id = id;\n\t\tthis.label = label;\n\t\tthis.alias = alias;\n\t\tthis._precondition = precondition;\n\t\tthis._run = run;\n\t\tthis._contextKeyService = contextKeyService;\n\t}\n\n\tpublic isSupported(): boolean {\n\t\treturn this._contextKeyService.contextMatchesRules(this._precondition);\n\t}\n\n\tpublic run(): TPromise {\n\t\tif (!this.isSupported()) {\n\t\t\treturn TPromise.as(void 0);\n\t\t}\n\n\t\tconst r = this._run();\n\t\treturn r ? r : TPromise.as(void 0);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { BulkListenerCallback } from 'vs/base/common/eventEmitter';\nimport { MarkedString } from 'vs/base/common/htmlContent';\nimport URI from 'vs/base/common/uri';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';\nimport { LanguageId, LanguageIdentifier } from 'vs/editor/common/modes';\nimport { LineTokens } from 'vs/editor/common/core/lineTokens';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { Position, IPosition } from 'vs/editor/common/core/position';\nimport { Range, IRange } from 'vs/editor/common/core/range';\nimport { Selection, ISelection } from 'vs/editor/common/core/selection';\nimport { IndentRange } from 'vs/editor/common/model/indentRanges';\nimport { ITextSource } from 'vs/editor/common/model/textSource';\nimport {\n\tModelRawContentChangedEvent, IModelContentChangedEvent, IModelDecorationsChangedEvent,\n\tIModelLanguageChangedEvent, IModelOptionsChangedEvent\n} from 'vs/editor/common/model/textModelEvents';\nimport * as editorOptions from 'vs/editor/common/config/editorOptions';\nimport { ICursorPositionChangedEvent, ICursorSelectionChangedEvent } from 'vs/editor/common/controller/cursorEvents';\nimport { ICursors, CursorConfiguration } from 'vs/editor/common/controller/cursorCommon';\nimport { ThemeColor } from 'vs/platform/theme/common/themeService';\n\n/**\n * Vertical Lane in the overview ruler of the editor.\n */\nexport enum OverviewRulerLane {\n\tLeft = 1,\n\tCenter = 2,\n\tRight = 4,\n\tFull = 7\n}\n\n/**\n * Options for rendering a model decoration in the overview ruler.\n */\nexport interface IModelDecorationOverviewRulerOptions {\n\t/**\n\t * CSS color to render in the overview ruler.\n\t * e.g.: rgba(100, 100, 100, 0.5) or a color from the color registry\n\t */\n\tcolor: string | ThemeColor;\n\t/**\n\t * CSS color to render in the overview ruler.\n\t * e.g.: rgba(100, 100, 100, 0.5) or a color from the color registry\n\t */\n\tdarkColor: string | ThemeColor;\n\t/**\n\t * CSS color to render in the overview ruler.\n\t * e.g.: rgba(100, 100, 100, 0.5) or a color from the color registry\n\t */\n\thcColor?: string | ThemeColor;\n\t/**\n\t * The position in the overview ruler.\n\t */\n\tposition: OverviewRulerLane;\n}\n\n/**\n * Options for a model decoration.\n */\nexport interface IModelDecorationOptions {\n\t/**\n\t * Customize the growing behavior of the decoration when typing at the edges of the decoration.\n\t * Defaults to TrackedRangeStickiness.AlwaysGrowsWhenTypingAtEdges\n\t */\n\tstickiness?: TrackedRangeStickiness;\n\t/**\n\t * CSS class name describing the decoration.\n\t */\n\tclassName?: string;\n\t/**\n\t * Message to be rendered when hovering over the glyph margin decoration.\n\t */\n\tglyphMarginHoverMessage?: MarkedString | MarkedString[];\n\t/**\n\t * Array of MarkedString to render as the decoration message.\n\t */\n\thoverMessage?: MarkedString | MarkedString[];\n\t/**\n\t * Should the decoration expand to encompass a whole line.\n\t */\n\tisWholeLine?: boolean;\n\t/**\n\t * Always render the decoration (even when the range it encompasses is collapsed).\n\t * @internal\n\t */\n\treadonly showIfCollapsed?: boolean;\n\t/**\n\t * If set, render this decoration in the overview ruler.\n\t */\n\toverviewRuler?: IModelDecorationOverviewRulerOptions;\n\t/**\n\t * If set, the decoration will be rendered in the glyph margin with this CSS class name.\n\t */\n\tglyphMarginClassName?: string;\n\t/**\n\t * If set, the decoration will be rendered in the lines decorations with this CSS class name.\n\t */\n\tlinesDecorationsClassName?: string;\n\t/**\n\t * If set, the decoration will be rendered in the margin (covering its full width) with this CSS class name.\n\t */\n\tmarginClassName?: string;\n\t/**\n\t * If set, the decoration will be rendered inline with the text with this CSS class name.\n\t * Please use this only for CSS rules that must impact the text. For example, use `className`\n\t * to have a background color decoration.\n\t */\n\tinlineClassName?: string;\n\t/**\n\t * If set, the decoration will be rendered before the text with this CSS class name.\n\t */\n\tbeforeContentClassName?: string;\n\t/**\n\t * If set, the decoration will be rendered after the text with this CSS class name.\n\t */\n\tafterContentClassName?: string;\n}\n\n/**\n * New model decorations.\n */\nexport interface IModelDeltaDecoration {\n\t/**\n\t * Range that this decoration covers.\n\t */\n\trange: IRange;\n\t/**\n\t * Options associated with this decoration.\n\t */\n\toptions: IModelDecorationOptions;\n}\n\n/**\n * A decoration in the model.\n */\nexport interface IModelDecoration {\n\t/**\n\t * Identifier for a decoration.\n\t */\n\treadonly id: string;\n\t/**\n\t * Identifier for a decoration's owener.\n\t */\n\treadonly ownerId: number;\n\t/**\n\t * Range that this decoration covers.\n\t */\n\treadonly range: Range;\n\t/**\n\t * Options associated with this decoration.\n\t */\n\treadonly options: IModelDecorationOptions;\n\t/**\n\t * A flag describing if this is a problem decoration (e.g. warning/error).\n\t */\n\treadonly isForValidation: boolean;\n}\n\n/**\n * An accessor that can add, change or remove model decorations.\n * @internal\n */\nexport interface IModelDecorationsChangeAccessor {\n\t/**\n\t * Add a new decoration.\n\t * @param range Range that this decoration covers.\n\t * @param options Options associated with this decoration.\n\t * @return An unique identifier associated with this decoration.\n\t */\n\taddDecoration(range: IRange, options: IModelDecorationOptions): string;\n\t/**\n\t * Change the range that an existing decoration covers.\n\t * @param id The unique identifier associated with the decoration.\n\t * @param newRange The new range that this decoration covers.\n\t */\n\tchangeDecoration(id: string, newRange: IRange): void;\n\t/**\n\t * Change the options associated with an existing decoration.\n\t * @param id The unique identifier associated with the decoration.\n\t * @param newOptions The new options associated with this decoration.\n\t */\n\tchangeDecorationOptions(id: string, newOptions: IModelDecorationOptions): void;\n\t/**\n\t * Remove an existing decoration.\n\t * @param id The unique identifier associated with the decoration.\n\t */\n\tremoveDecoration(id: string): void;\n\t/**\n\t * Perform a minimum ammount of operations, in order to transform the decorations\n\t * identified by `oldDecorations` to the decorations described by `newDecorations`\n\t * and returns the new identifiers associated with the resulting decorations.\n\t *\n\t * @param oldDecorations Array containing previous decorations identifiers.\n\t * @param newDecorations Array describing what decorations should result after the call.\n\t * @return An array containing the new decorations identifiers.\n\t */\n\tdeltaDecorations(oldDecorations: string[], newDecorations: IModelDeltaDecoration[]): string[];\n}\n\n/**\n * Word inside a model.\n */\nexport interface IWordAtPosition {\n\t/**\n\t * The word.\n\t */\n\treadonly word: string;\n\t/**\n\t * The column where the word starts.\n\t */\n\treadonly startColumn: number;\n\t/**\n\t * The column where the word ends.\n\t */\n\treadonly endColumn: number;\n}\n\n/**\n * End of line character preference.\n */\nexport enum EndOfLinePreference {\n\t/**\n\t * Use the end of line character identified in the text buffer.\n\t */\n\tTextDefined = 0,\n\t/**\n\t * Use line feed (\\n) as the end of line character.\n\t */\n\tLF = 1,\n\t/**\n\t * Use carriage return and line feed (\\r\\n) as the end of line character.\n\t */\n\tCRLF = 2\n}\n\n/**\n * The default end of line to use when instantiating models.\n */\nexport enum DefaultEndOfLine {\n\t/**\n\t * Use line feed (\\n) as the end of line character.\n\t */\n\tLF = 1,\n\t/**\n\t * Use carriage return and line feed (\\r\\n) as the end of line character.\n\t */\n\tCRLF = 2\n}\n\n/**\n * End of line character preference.\n */\nexport enum EndOfLineSequence {\n\t/**\n\t * Use line feed (\\n) as the end of line character.\n\t */\n\tLF = 0,\n\t/**\n\t * Use carriage return and line feed (\\r\\n) as the end of line character.\n\t */\n\tCRLF = 1\n}\n\n/**\n * An identifier for a single edit operation.\n */\nexport interface ISingleEditOperationIdentifier {\n\t/**\n\t * Identifier major\n\t */\n\tmajor: number;\n\t/**\n\t * Identifier minor\n\t */\n\tminor: number;\n}\n\n/**\n * A builder and helper for edit operations for a command.\n */\nexport interface IEditOperationBuilder {\n\t/**\n\t * Add a new edit operation (a replace operation).\n\t * @param range The range to replace (delete). May be empty to represent a simple insert.\n\t * @param text The text to replace with. May be null to represent a simple delete.\n\t */\n\taddEditOperation(range: Range, text: string): void;\n\n\t/**\n\t * Add a new edit operation (a replace operation).\n\t * The inverse edits will be accessible in `ICursorStateComputerData.getInverseEditOperations()`\n\t * @param range The range to replace (delete). May be empty to represent a simple insert.\n\t * @param text The text to replace with. May be null to represent a simple delete.\n\t */\n\taddTrackedEditOperation(range: Range, text: string): void;\n\n\t/**\n\t * Track `selection` when applying edit operations.\n\t * A best effort will be made to not grow/expand the selection.\n\t * An empty selection will clamp to a nearby character.\n\t * @param selection The selection to track.\n\t * @param trackPreviousOnEmpty If set, and the selection is empty, indicates whether the selection\n\t * should clamp to the previous or the next character.\n\t * @return A unique identifer.\n\t */\n\ttrackSelection(selection: Selection, trackPreviousOnEmpty?: boolean): string;\n}\n\n/**\n * A helper for computing cursor state after a command.\n */\nexport interface ICursorStateComputerData {\n\t/**\n\t * Get the inverse edit operations of the added edit operations.\n\t */\n\tgetInverseEditOperations(): IIdentifiedSingleEditOperation[];\n\t/**\n\t * Get a previously tracked selection.\n\t * @param id The unique identifier returned by `trackSelection`.\n\t * @return The selection.\n\t */\n\tgetTrackedSelection(id: string): Selection;\n}\n\n/**\n * A command that modifies text / cursor state on a model.\n */\nexport interface ICommand {\n\n\t/**\n\t * Signal that this command is inserting automatic whitespace that should be trimmed if possible.\n\t * @internal\n\t */\n\treadonly insertsAutoWhitespace?: boolean;\n\n\t/**\n\t * Get the edit operations needed to execute this command.\n\t * @param model The model the command will execute on.\n\t * @param builder A helper to collect the needed edit operations and to track selections.\n\t */\n\tgetEditOperations(model: ITokenizedModel, builder: IEditOperationBuilder): void;\n\n\t/**\n\t * Compute the cursor state after the edit operations were applied.\n\t * @param model The model the commad has executed on.\n\t * @param helper A helper to get inverse edit operations and to get previously tracked selections.\n\t * @return The cursor state after the command executed.\n\t */\n\tcomputeCursorState(model: ITokenizedModel, helper: ICursorStateComputerData): Selection;\n}\n\n/**\n * A single edit operation, that acts as a simple replace.\n * i.e. Replace text at `range` with `text` in model.\n */\nexport interface ISingleEditOperation {\n\t/**\n\t * The range to replace. This can be empty to emulate a simple insert.\n\t */\n\trange: IRange;\n\t/**\n\t * The text to replace with. This can be null to emulate a simple delete.\n\t */\n\ttext: string;\n\t/**\n\t * This indicates that this operation has \"insert\" semantics.\n\t * i.e. forceMoveMarkers = true => if `range` is collapsed, all markers at the position will be moved.\n\t */\n\tforceMoveMarkers?: boolean;\n}\n\n/**\n * A single edit operation, that has an identifier.\n */\nexport interface IIdentifiedSingleEditOperation {\n\t/**\n\t * An identifier associated with this single edit operation.\n\t */\n\tidentifier: ISingleEditOperationIdentifier;\n\t/**\n\t * The range to replace. This can be empty to emulate a simple insert.\n\t */\n\trange: Range;\n\t/**\n\t * The text to replace with. This can be null to emulate a simple delete.\n\t */\n\ttext: string;\n\t/**\n\t * This indicates that this operation has \"insert\" semantics.\n\t * i.e. forceMoveMarkers = true => if `range` is collapsed, all markers at the position will be moved.\n\t */\n\tforceMoveMarkers: boolean;\n\t/**\n\t * This indicates that this operation is inserting automatic whitespace\n\t * that can be removed on next model edit operation if `config.trimAutoWhitespace` is true.\n\t */\n\tisAutoWhitespaceEdit?: boolean;\n\t/**\n\t * This indicates that this operation is in a set of operations that are tracked and should not be \"simplified\".\n\t * @internal\n\t */\n\t_isTracked?: boolean;\n}\n\n/**\n * A callback that can compute the cursor state after applying a series of edit operations.\n */\nexport interface ICursorStateComputer {\n\t/**\n\t * A callback that can compute the resulting cursors state after some edit operations have been executed.\n\t */\n\t(inverseEditOperations: IIdentifiedSingleEditOperation[]): Selection[];\n}\n\nexport class TextModelResolvedOptions {\n\t_textModelResolvedOptionsBrand: void;\n\n\treadonly tabSize: number;\n\treadonly insertSpaces: boolean;\n\treadonly defaultEOL: DefaultEndOfLine;\n\treadonly trimAutoWhitespace: boolean;\n\n\t/**\n\t * @internal\n\t */\n\tconstructor(src: {\n\t\ttabSize: number;\n\t\tinsertSpaces: boolean;\n\t\tdefaultEOL: DefaultEndOfLine;\n\t\ttrimAutoWhitespace: boolean;\n\t}) {\n\t\tthis.tabSize = src.tabSize | 0;\n\t\tthis.insertSpaces = Boolean(src.insertSpaces);\n\t\tthis.defaultEOL = src.defaultEOL | 0;\n\t\tthis.trimAutoWhitespace = Boolean(src.trimAutoWhitespace);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic equals(other: TextModelResolvedOptions): boolean {\n\t\treturn (\n\t\t\tthis.tabSize === other.tabSize\n\t\t\t&& this.insertSpaces === other.insertSpaces\n\t\t\t&& this.defaultEOL === other.defaultEOL\n\t\t\t&& this.trimAutoWhitespace === other.trimAutoWhitespace\n\t\t);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic createChangeEvent(newOpts: TextModelResolvedOptions): IModelOptionsChangedEvent {\n\t\treturn {\n\t\t\ttabSize: this.tabSize !== newOpts.tabSize,\n\t\t\tinsertSpaces: this.insertSpaces !== newOpts.insertSpaces,\n\t\t\ttrimAutoWhitespace: this.trimAutoWhitespace !== newOpts.trimAutoWhitespace,\n\t\t};\n\t}\n}\n\n/**\n * @internal\n */\nexport interface ITextModelCreationOptions {\n\ttabSize: number;\n\tinsertSpaces: boolean;\n\tdetectIndentation: boolean;\n\ttrimAutoWhitespace: boolean;\n\tdefaultEOL: DefaultEndOfLine;\n}\n\nexport interface ITextModelUpdateOptions {\n\ttabSize?: number;\n\tinsertSpaces?: boolean;\n\ttrimAutoWhitespace?: boolean;\n}\n\n/**\n * A textual read-only model.\n */\nexport interface ITextModel {\n\n\t/**\n\t * If true, the text model might contain RTL.\n\t * If false, the text model **contains only** contain LTR.\n\t * @internal\n\t */\n\tmightContainRTL(): boolean;\n\n\t/**\n\t * If true, the text model might contain non basic ASCII.\n\t * If false, the text model **contains only** basic ASCII.\n\t * @internal\n\t */\n\tmightContainNonBasicASCII(): boolean;\n\n\t/**\n\t * Get the resolved options for this model.\n\t */\n\tgetOptions(): TextModelResolvedOptions;\n\n\t/**\n\t * Get the current version id of the model.\n\t * Anytime a change happens to the model (even undo/redo),\n\t * the version id is incremented.\n\t */\n\tgetVersionId(): number;\n\n\t/**\n\t * Get the alternative version id of the model.\n\t * This alternative version id is not always incremented,\n\t * it will return the same values in the case of undo-redo.\n\t */\n\tgetAlternativeVersionId(): number;\n\n\t/**\n\t * Replace the entire text buffer value contained in this model.\n\t */\n\tsetValue(newValue: string): void;\n\n\t/**\n\t * Replace the entire text buffer value contained in this model.\n\t * @internal\n\t */\n\tsetValueFromTextSource(newValue: ITextSource): void;\n\n\t/**\n\t * Get the text stored in this model.\n\t * @param eol The end of line character preference. Defaults to `EndOfLinePreference.TextDefined`.\n\t * @param preserverBOM Preserve a BOM character if it was detected when the model was constructed.\n\t * @return The text.\n\t */\n\tgetValue(eol?: EndOfLinePreference, preserveBOM?: boolean): string;\n\n\t/**\n\t * Get the length of the text stored in this model.\n\t */\n\tgetValueLength(eol?: EndOfLinePreference, preserveBOM?: boolean): number;\n\n\t/**\n\t * Check if the raw text stored in this model equals another raw text.\n\t * @internal\n\t */\n\tequals(other: ITextSource): boolean;\n\n\t/**\n\t * Get the text in a certain range.\n\t * @param range The range describing what text to get.\n\t * @param eol The end of line character preference. This will only be used for multiline ranges. Defaults to `EndOfLinePreference.TextDefined`.\n\t * @return The text.\n\t */\n\tgetValueInRange(range: IRange, eol?: EndOfLinePreference): string;\n\n\t/**\n\t * Get the length of text in a certain range.\n\t * @param range The range describing what text length to get.\n\t * @return The text length.\n\t */\n\tgetValueLengthInRange(range: IRange): number;\n\n\t/**\n\t * Splits characters in two buckets. First bucket (A) is of characters that\n\t * sit in lines with length < `LONG_LINE_BOUNDARY`. Second bucket (B) is of\n\t * characters that sit in lines with length >= `LONG_LINE_BOUNDARY`.\n\t * If count(B) > count(A) return true. Returns false otherwise.\n\t * @internal\n\t */\n\tisDominatedByLongLines(): boolean;\n\n\t/**\n\t * Get the number of lines in the model.\n\t */\n\tgetLineCount(): number;\n\n\t/**\n\t * Get the text for a certain line.\n\t */\n\tgetLineContent(lineNumber: number): string;\n\n\t/**\n\t * @internal\n\t */\n\tgetIndentLevel(lineNumber: number): number;\n\n\t/**\n\t * @internal\n\t */\n\tgetIndentRanges(): IndentRange[];\n\n\t/**\n\t * @internal\n\t */\n\tgetLineIndentGuide(lineNumber: number): number;\n\n\t/**\n\t * Get the text for all lines.\n\t */\n\tgetLinesContent(): string[];\n\n\t/**\n\t * Get the end of line sequence predominantly used in the text buffer.\n\t * @return EOL char sequence (e.g.: '\\n' or '\\r\\n').\n\t */\n\tgetEOL(): string;\n\n\t/**\n\t * Change the end of line sequence used in the text buffer.\n\t */\n\tsetEOL(eol: EndOfLineSequence): void;\n\n\t/**\n\t * Get the minimum legal column for line at `lineNumber`\n\t */\n\tgetLineMinColumn(lineNumber: number): number;\n\n\t/**\n\t * Get the maximum legal column for line at `lineNumber`\n\t */\n\tgetLineMaxColumn(lineNumber: number): number;\n\n\t/**\n\t * Returns the column before the first non whitespace character for line at `lineNumber`.\n\t * Returns 0 if line is empty or contains only whitespace.\n\t */\n\tgetLineFirstNonWhitespaceColumn(lineNumber: number): number;\n\n\t/**\n\t * Returns the column after the last non whitespace character for line at `lineNumber`.\n\t * Returns 0 if line is empty or contains only whitespace.\n\t */\n\tgetLineLastNonWhitespaceColumn(lineNumber: number): number;\n\n\t/**\n\t * Create a valid position,\n\t */\n\tvalidatePosition(position: IPosition): Position;\n\n\t/**\n\t * Advances the given position by the given offest (negative offsets are also accepted)\n\t * and returns it as a new valid position.\n\t *\n\t * If the offset and position are such that their combination goes beyond the beginning or\n\t * end of the model, throws an exception.\n\t *\n\t * If the ofsset is such that the new position would be in the middle of a multi-byte\n\t * line terminator, throws an exception.\n\t */\n\tmodifyPosition(position: IPosition, offset: number): Position;\n\n\t/**\n\t * Create a valid range.\n\t */\n\tvalidateRange(range: IRange): Range;\n\n\t/**\n\t * Converts the position to a zero-based offset.\n\t *\n\t * The position will be [adjusted](#TextDocument.validatePosition).\n\t *\n\t * @param position A position.\n\t * @return A valid zero-based offset.\n\t */\n\tgetOffsetAt(position: IPosition): number;\n\n\t/**\n\t * Converts a zero-based offset to a position.\n\t *\n\t * @param offset A zero-based offset.\n\t * @return A valid [position](#Position).\n\t */\n\tgetPositionAt(offset: number): Position;\n\n\t/**\n\t * Get a range covering the entire model\n\t */\n\tgetFullModelRange(): Range;\n\n\t/**\n\t * Returns iff the model was disposed or not.\n\t */\n\tisDisposed(): boolean;\n\n\t/**\n\t * No mode supports allowed on this model because it is simply too large.\n\t * (even tokenization would cause too much memory pressure)\n\t * @internal\n\t */\n\tisTooLargeForHavingAMode(): boolean;\n\n\t/**\n\t * Only basic mode supports allowed on this model because it is simply too large.\n\t * (tokenization is allowed and other basic supports)\n\t * @internal\n\t */\n\tisTooLargeForHavingARichMode(): boolean;\n\n\t/**\n\t * Search the model.\n\t * @param searchString The string used to search. If it is a regular expression, set `isRegex` to true.\n\t * @param searchOnlyEditableRange Limit the searching to only search inside the editable range of the model.\n\t * @param isRegex Used to indicate that `searchString` is a regular expression.\n\t * @param matchCase Force the matching to match lower/upper case exactly.\n\t * @param wordSeparators Force the matching to match entire words only. Pass null otherwise.\n\t * @param captureMatches The result will contain the captured groups.\n\t * @param limitResultCount Limit the number of results\n\t * @return The ranges where the matches are. It is empty if not matches have been found.\n\t */\n\tfindMatches(searchString: string, searchOnlyEditableRange: boolean, isRegex: boolean, matchCase: boolean, wordSeparators: string, captureMatches: boolean, limitResultCount?: number): FindMatch[];\n\t/**\n\t * Search the model.\n\t * @param searchString The string used to search. If it is a regular expression, set `isRegex` to true.\n\t * @param searchScope Limit the searching to only search inside this range.\n\t * @param isRegex Used to indicate that `searchString` is a regular expression.\n\t * @param matchCase Force the matching to match lower/upper case exactly.\n\t * @param wordSeparators Force the matching to match entire words only. Pass null otherwise.\n\t * @param captureMatches The result will contain the captured groups.\n\t * @param limitResultCount Limit the number of results\n\t * @return The ranges where the matches are. It is empty if no matches have been found.\n\t */\n\tfindMatches(searchString: string, searchScope: IRange, isRegex: boolean, matchCase: boolean, wordSeparators: string, captureMatches: boolean, limitResultCount?: number): FindMatch[];\n\t/**\n\t * Search the model for the next match. Loops to the beginning of the model if needed.\n\t * @param searchString The string used to search. If it is a regular expression, set `isRegex` to true.\n\t * @param searchStart Start the searching at the specified position.\n\t * @param isRegex Used to indicate that `searchString` is a regular expression.\n\t * @param matchCase Force the matching to match lower/upper case exactly.\n\t * @param wordSeparators Force the matching to match entire words only. Pass null otherwise.\n\t * @param captureMatches The result will contain the captured groups.\n\t * @return The range where the next match is. It is null if no next match has been found.\n\t */\n\tfindNextMatch(searchString: string, searchStart: IPosition, isRegex: boolean, matchCase: boolean, wordSeparators: string, captureMatches: boolean): FindMatch;\n\t/**\n\t * Search the model for the previous match. Loops to the end of the model if needed.\n\t * @param searchString The string used to search. If it is a regular expression, set `isRegex` to true.\n\t * @param searchStart Start the searching at the specified position.\n\t * @param isRegex Used to indicate that `searchString` is a regular expression.\n\t * @param matchCase Force the matching to match lower/upper case exactly.\n\t * @param wordSeparators Force the matching to match entire words only. Pass null otherwise.\n\t * @param captureMatches The result will contain the captured groups.\n\t * @return The range where the previous match is. It is null if no previous match has been found.\n\t */\n\tfindPreviousMatch(searchString: string, searchStart: IPosition, isRegex: boolean, matchCase: boolean, wordSeparators: string, captureMatches: boolean): FindMatch;\n}\n\nexport class FindMatch {\n\t_findMatchBrand: void;\n\n\tpublic readonly range: Range;\n\tpublic readonly matches: string[];\n\n\t/**\n\t * @internal\n\t */\n\tconstructor(range: Range, matches: string[]) {\n\t\tthis.range = range;\n\t\tthis.matches = matches;\n\t}\n}\n\nexport interface IReadOnlyModel extends ITextModel {\n\t/**\n\t * Gets the resource associated with this editor model.\n\t */\n\treadonly uri: URI;\n\n\t/**\n\t * Get the language associated with this model.\n\t * @internal\n\t */\n\tgetLanguageIdentifier(): LanguageIdentifier;\n\n\t/**\n\t * Get the language associated with this model.\n\t */\n\tgetModeId(): string;\n\n\t/**\n\t * Get the word under or besides `position`.\n\t * @param position The position to look for a word.\n\t * @param skipSyntaxTokens Ignore syntax tokens, as identified by the mode.\n\t * @return The word under or besides `position`. Might be null.\n\t */\n\tgetWordAtPosition(position: IPosition): IWordAtPosition;\n\n\t/**\n\t * Get the word under or besides `position` trimmed to `position`.column\n\t * @param position The position to look for a word.\n\t * @param skipSyntaxTokens Ignore syntax tokens, as identified by the mode.\n\t * @return The word under or besides `position`. Will never be null.\n\t */\n\tgetWordUntilPosition(position: IPosition): IWordAtPosition;\n}\n\n/**\n * @internal\n */\nexport interface IFoundBracket {\n\trange: Range;\n\topen: string;\n\tclose: string;\n\tisOpen: boolean;\n}\n\n/**\n * A model that is tokenized.\n */\nexport interface ITokenizedModel extends ITextModel {\n\n\t/**\n\t * Force tokenization information for `lineNumber` to be accurate.\n\t * @internal\n\t */\n\tforceTokenization(lineNumber: number): void;\n\n\t/**\n\t * Get the tokens for the line `lineNumber`.\n\t * The tokens might be inaccurate. Use `forceTokenization` to ensure accurate tokens.\n\t * @internal\n\t */\n\tgetLineTokens(lineNumber: number): LineTokens;\n\n\t/**\n\t * Get the language associated with this model.\n\t * @internal\n\t */\n\tgetLanguageIdentifier(): LanguageIdentifier;\n\n\t/**\n\t * Get the language associated with this model.\n\t */\n\tgetModeId(): string;\n\n\t/**\n\t * Set the current language mode associated with the model.\n\t * @internal\n\t */\n\tsetMode(languageIdentifier: LanguageIdentifier): void;\n\n\t/**\n\t * Returns the real (inner-most) language mode at a given position.\n\t * The result might be inaccurate. Use `forceTokenization` to ensure accurate tokens.\n\t * @internal\n\t */\n\tgetLanguageIdAtPosition(lineNumber: number, column: number): LanguageId;\n\n\t/**\n\t * Get the word under or besides `position`.\n\t * @param position The position to look for a word.\n\t * @param skipSyntaxTokens Ignore syntax tokens, as identified by the mode.\n\t * @return The word under or besides `position`. Might be null.\n\t */\n\tgetWordAtPosition(position: IPosition): IWordAtPosition;\n\n\t/**\n\t * Get the word under or besides `position` trimmed to `position`.column\n\t * @param position The position to look for a word.\n\t * @param skipSyntaxTokens Ignore syntax tokens, as identified by the mode.\n\t * @return The word under or besides `position`. Will never be null.\n\t */\n\tgetWordUntilPosition(position: IPosition): IWordAtPosition;\n\n\t/**\n\t * Find the matching bracket of `request` up, counting brackets.\n\t * @param request The bracket we're searching for\n\t * @param position The position at which to start the search.\n\t * @return The range of the matching bracket, or null if the bracket match was not found.\n\t * @internal\n\t */\n\tfindMatchingBracketUp(bracket: string, position: IPosition): Range;\n\n\t// /**\n\t// * Find the first bracket in the model before `position`.\n\t// * @param position The position at which to start the search.\n\t// * @return The info for the first bracket before `position`, or null if there are no more brackets before `positions`.\n\t// */\n\t// findPrevBracket(position:IPosition): IFoundBracket;\n\n\t// /**\n\t// * Find the first bracket in the model after `position`.\n\t// * @param position The position at which to start the search.\n\t// * @return The info for the first bracket after `position`, or null if there are no more brackets after `positions`.\n\t// */\n\t// findNextBracket(position:IPosition): IFoundBracket;\n\n\t/**\n\t * Given a `position`, if the position is on top or near a bracket,\n\t * find the matching bracket of that bracket and return the ranges of both brackets.\n\t * @param position The position at which to look for a bracket.\n\t * @internal\n\t */\n\tmatchBracket(position: IPosition): [Range, Range];\n}\n\n/**\n * A model that can track markers.\n */\nexport interface ITextModelWithMarkers extends ITextModel {\n\t/**\n\t * @internal\n\t */\n\t_addMarker(internalDecorationId: number, lineNumber: number, column: number, stickToPreviousCharacter: boolean): string;\n\t/**\n\t * @internal\n\t */\n\t_changeMarker(id: string, newLineNumber: number, newColumn: number): void;\n\t/**\n\t * @internal\n\t */\n\t_changeMarkerStickiness(id: string, newStickToPreviousCharacter: boolean): void;\n\t/**\n\t * @internal\n\t */\n\t_getMarker(id: string): Position;\n\t/**\n\t * @internal\n\t */\n\t_removeMarker(id: string): void;\n}\n\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 enum TrackedRangeStickiness {\n\tAlwaysGrowsWhenTypingAtEdges = 0,\n\tNeverGrowsWhenTypingAtEdges = 1,\n\tGrowsOnlyWhenTypingBefore = 2,\n\tGrowsOnlyWhenTypingAfter = 3,\n}\n\n/**\n * A model that can have decorations.\n */\nexport interface ITextModelWithDecorations {\n\t/**\n\t * Change the decorations. The callback will be called with a change accessor\n\t * that becomes invalid as soon as the callback finishes executing.\n\t * This allows for all events to be queued up until the change\n\t * is completed. Returns whatever the callback returns.\n\t * @param ownerId Identifies the editor id in which these decorations should appear. If no `ownerId` is provided, the decorations will appear in all editors that attach this model.\n\t * @internal\n\t */\n\tchangeDecorations(callback: (changeAccessor: IModelDecorationsChangeAccessor) => T, ownerId?: number): T;\n\n\t/**\n\t * Perform a minimum ammount of operations, in order to transform the decorations\n\t * identified by `oldDecorations` to the decorations described by `newDecorations`\n\t * and returns the new identifiers associated with the resulting decorations.\n\t *\n\t * @param oldDecorations Array containing previous decorations identifiers.\n\t * @param newDecorations Array describing what decorations should result after the call.\n\t * @param ownerId Identifies the editor id in which these decorations should appear. If no `ownerId` is provided, the decorations will appear in all editors that attach this model.\n\t * @return An array containing the new decorations identifiers.\n\t */\n\tdeltaDecorations(oldDecorations: string[], newDecorations: IModelDeltaDecoration[], ownerId?: number): string[];\n\n\t/**\n\t * Remove all decorations that have been added with this specific ownerId.\n\t * @param ownerId The owner id to search for.\n\t * @internal\n\t */\n\tremoveAllDecorationsWithOwnerId(ownerId: number): void;\n\n\t/**\n\t * Get the options associated with a decoration.\n\t * @param id The decoration id.\n\t * @return The decoration options or null if the decoration was not found.\n\t */\n\tgetDecorationOptions(id: string): IModelDecorationOptions;\n\n\t/**\n\t * Get the range associated with a decoration.\n\t * @param id The decoration id.\n\t * @return The decoration range or null if the decoration was not found.\n\t */\n\tgetDecorationRange(id: string): Range;\n\n\t/**\n\t * Gets all the decorations for the line `lineNumber` as an array.\n\t * @param lineNumber The line number\n\t * @param ownerId If set, it will ignore decorations belonging to other owners.\n\t * @param filterOutValidation If set, it will ignore decorations specific to validation (i.e. warnings, errors).\n\t * @return An array with the decorations\n\t */\n\tgetLineDecorations(lineNumber: number, ownerId?: number, filterOutValidation?: boolean): IModelDecoration[];\n\n\t/**\n\t * Gets all the decorations for the lines between `startLineNumber` and `endLineNumber` as an array.\n\t * @param startLineNumber The start line number\n\t * @param endLineNumber The end line number\n\t * @param ownerId If set, it will ignore decorations belonging to other owners.\n\t * @param filterOutValidation If set, it will ignore decorations specific to validation (i.e. warnings, errors).\n\t * @return An array with the decorations\n\t */\n\tgetLinesDecorations(startLineNumber: number, endLineNumber: number, ownerId?: number, filterOutValidation?: boolean): IModelDecoration[];\n\n\t/**\n\t * Gets all the deocorations in a range as an array. Only `startLineNumber` and `endLineNumber` from `range` are used for filtering.\n\t * So for now it returns all the decorations on the same line as `range`.\n\t * @param range The range to search in\n\t * @param ownerId If set, it will ignore decorations belonging to other owners.\n\t * @param filterOutValidation If set, it will ignore decorations specific to validation (i.e. warnings, errors).\n\t * @return An array with the decorations\n\t */\n\tgetDecorationsInRange(range: IRange, ownerId?: number, filterOutValidation?: boolean): IModelDecoration[];\n\n\t/**\n\t * Gets all the decorations as an array.\n\t * @param ownerId If set, it will ignore decorations belonging to other owners.\n\t * @param filterOutValidation If set, it will ignore decorations specific to validation (i.e. warnings, errors).\n\t */\n\tgetAllDecorations(ownerId?: number, filterOutValidation?: boolean): IModelDecoration[];\n}\n\n/**\n * An editable text model.\n */\nexport interface IEditableTextModel extends ITextModelWithMarkers {\n\n\t/**\n\t * Normalize a string containing whitespace according to indentation rules (converts to spaces or to tabs).\n\t */\n\tnormalizeIndentation(str: string): string;\n\n\t/**\n\t * Get what is considered to be one indent (e.g. a tab character or 4 spaces, etc.).\n\t */\n\tgetOneIndent(): string;\n\n\t/**\n\t * Change the options of this model.\n\t */\n\tupdateOptions(newOpts: ITextModelUpdateOptions): void;\n\n\t/**\n\t * Detect the indentation options for this model from its content.\n\t */\n\tdetectIndentation(defaultInsertSpaces: boolean, defaultTabSize: number): void;\n\n\t/**\n\t * Push a stack element onto the undo stack. This acts as an undo/redo point.\n\t * The idea is to use `pushEditOperations` to edit the model and then to\n\t * `pushStackElement` to create an undo/redo stop point.\n\t */\n\tpushStackElement(): void;\n\n\t/**\n\t * Push edit operations, basically editing the model. This is the preferred way\n\t * of editing the model. The edit operations will land on the undo stack.\n\t * @param beforeCursorState The cursor state before the edit operaions. This cursor state will be returned when `undo` or `redo` are invoked.\n\t * @param editOperations The edit operations.\n\t * @param cursorStateComputer A callback that can compute the resulting cursors state after the edit operations have been executed.\n\t * @return The cursor state returned by the `cursorStateComputer`.\n\t */\n\tpushEditOperations(beforeCursorState: Selection[], editOperations: IIdentifiedSingleEditOperation[], cursorStateComputer: ICursorStateComputer): Selection[];\n\n\t/**\n\t * Edit the model without adding the edits to the undo stack.\n\t * This can have dire consequences on the undo stack! See @pushEditOperations for the preferred way.\n\t * @param operations The edit operations.\n\t * @return The inverse edit operations, that, when applied, will bring the model back to the previous state.\n\t */\n\tapplyEdits(operations: IIdentifiedSingleEditOperation[]): IIdentifiedSingleEditOperation[];\n\n\t/**\n\t * Undo edit operations until the first previous stop point created by `pushStackElement`.\n\t * The inverse edit operations will be pushed on the redo stack.\n\t * @internal\n\t */\n\tundo(): Selection[];\n\n\t/**\n\t * Redo edit operations until the next stop point created by `pushStackElement`.\n\t * The inverse edit operations will be pushed on the undo stack.\n\t * @internal\n\t */\n\tredo(): Selection[];\n\n\t/**\n\t * Set an editable range on the model.\n\t * @internal\n\t */\n\tsetEditableRange(range: IRange): void;\n\n\t/**\n\t * Check if the model has an editable range.\n\t * @internal\n\t */\n\thasEditableRange(): boolean;\n\n\t/**\n\t * Get the editable range on the model.\n\t * @internal\n\t */\n\tgetEditableRange(): Range;\n}\n\n/**\n * A model.\n */\nexport interface IModel extends IReadOnlyModel, IEditableTextModel, ITextModelWithMarkers, ITokenizedModel, ITextModelWithDecorations {\n\t/**\n\t * @deprecated Please use `onDidChangeContent` instead.\n\t * An event emitted when the contents of the model have changed.\n\t * @internal\n\t * @event\n\t */\n\tonDidChangeRawContent(listener: (e: ModelRawContentChangedEvent) => void): IDisposable;\n\t/**\n\t * An event emitted when the contents of the model have changed.\n\t * @event\n\t */\n\tonDidChangeContent(listener: (e: IModelContentChangedEvent) => void): IDisposable;\n\t/**\n\t * An event emitted when decorations of the model have changed.\n\t * @event\n\t */\n\tonDidChangeDecorations(listener: (e: IModelDecorationsChangedEvent) => void): IDisposable;\n\t/**\n\t * An event emitted when the model options have changed.\n\t * @event\n\t */\n\tonDidChangeOptions(listener: (e: IModelOptionsChangedEvent) => void): IDisposable;\n\t/**\n\t * An event emitted when the language associated with the model has changed.\n\t * @event\n\t */\n\tonDidChangeLanguage(listener: (e: IModelLanguageChangedEvent) => void): IDisposable;\n\t/**\n\t * An event emitted right before disposing the model.\n\t * @event\n\t */\n\tonWillDispose(listener: () => void): IDisposable;\n\n\t/**\n\t * @internal\n\t */\n\taddBulkListener(listener: BulkListenerCallback): IDisposable;\n\n\t/**\n\t * A unique identifier associated with this model.\n\t */\n\treadonly id: string;\n\n\t/**\n\t * Destroy this model. This will unbind the model from the mode\n\t * and make all necessary clean-up to release this object to the GC.\n\t * @internal\n\t */\n\tdestroy(): void;\n\n\t/**\n\t * Destroy this model. This will unbind the model from the mode\n\t * and make all necessary clean-up to release this object to the GC.\n\t */\n\tdispose(): void;\n\n\t/**\n\t * @internal\n\t */\n\tonBeforeAttached(): void;\n\n\t/**\n\t * @internal\n\t */\n\tonBeforeDetached(): void;\n\n\t/**\n\t * Returns iff this model is attached to an editor or not.\n\t * @internal\n\t */\n\tisAttachedToEditor(): boolean;\n}\n\n/**\n * A model for the diff editor.\n */\nexport interface IDiffEditorModel {\n\t/**\n\t * Original model.\n\t */\n\toriginal: IModel;\n\t/**\n\t * Modified model.\n\t */\n\tmodified: IModel;\n}\n\n/**\n * An event describing that an editor has had its model reset (i.e. `editor.setModel()`).\n */\nexport interface IModelChangedEvent {\n\t/**\n\t * The `uri` of the previous model or null.\n\t */\n\treadonly oldModelUrl: URI;\n\t/**\n\t * The `uri` of the new model or null.\n\t */\n\treadonly newModelUrl: URI;\n}\n\nexport interface IDimension {\n\twidth: number;\n\theight: number;\n}\n\n/**\n * A change\n */\nexport interface IChange {\n\treadonly originalStartLineNumber: number;\n\treadonly originalEndLineNumber: number;\n\treadonly modifiedStartLineNumber: number;\n\treadonly modifiedEndLineNumber: number;\n}\n/**\n * A character level change.\n */\nexport interface ICharChange extends IChange {\n\treadonly originalStartColumn: number;\n\treadonly originalEndColumn: number;\n\treadonly modifiedStartColumn: number;\n\treadonly modifiedEndColumn: number;\n}\n/**\n * A line change\n */\nexport interface ILineChange extends IChange {\n\treadonly charChanges: ICharChange[];\n}\n/**\n * Information about a line in the diff editor\n */\nexport interface IDiffLineInformation {\n\treadonly equivalentLineNumber: number;\n}\n\n/**\n * @internal\n */\nexport interface IConfiguration {\n\tonDidChange(listener: (e: editorOptions.IConfigurationChangedEvent) => void): IDisposable;\n\n\treadonly editor: editorOptions.InternalEditorOptions;\n\n\tsetMaxLineNumber(maxLineNumber: number): void;\n}\n\n// --- view\n\nexport interface IScrollEvent {\n\treadonly scrollTop: number;\n\treadonly scrollLeft: number;\n\treadonly scrollWidth: number;\n\treadonly scrollHeight: number;\n\n\treadonly scrollTopChanged: boolean;\n\treadonly scrollLeftChanged: boolean;\n\treadonly scrollWidthChanged: boolean;\n\treadonly scrollHeightChanged: boolean;\n}\n\nexport interface INewScrollPosition {\n\tscrollLeft?: number;\n\tscrollTop?: number;\n}\n\n/**\n * Description of an action contribution\n */\nexport interface IActionDescriptor {\n\t/**\n\t * An unique identifier of the contributed action.\n\t */\n\tid: string;\n\t/**\n\t * A label of the action that will be presented to the user.\n\t */\n\tlabel: string;\n\t/**\n\t * Precondition rule.\n\t */\n\tprecondition?: string;\n\t/**\n\t * An array of keybindings for the action.\n\t */\n\tkeybindings?: number[];\n\t/**\n\t * The keybinding rule (condition on top of precondition).\n\t */\n\tkeybindingContext?: string;\n\t/**\n\t * Control if the action should show up in the context menu and where.\n\t * The context menu of the editor has these default:\n\t * navigation - The navigation group comes first in all cases.\n\t * 1_modification - This group comes next and contains commands that modify your code.\n\t * 9_cutcopypaste - The last default group with the basic editing commands.\n\t * You can also create your own group.\n\t * Defaults to null (don't show in context menu).\n\t */\n\tcontextMenuGroupId?: string;\n\t/**\n\t * Control the order in the context menu group.\n\t */\n\tcontextMenuOrder?: number;\n\t/**\n\t * Method that will be executed when the action is triggered.\n\t * @param editor The editor instance is passed in as a convinience\n\t */\n\trun(editor: ICommonCodeEditor): void | TPromise;\n}\n\nexport interface IEditorAction {\n\treadonly id: string;\n\treadonly label: string;\n\treadonly alias: string;\n\tisSupported(): boolean;\n\trun(): TPromise;\n}\n\nexport type IEditorModel = IModel | IDiffEditorModel;\n\n/**\n * A (serializable) state of the cursors.\n */\nexport interface ICursorState {\n\tinSelectionMode: boolean;\n\tselectionStart: IPosition;\n\tposition: IPosition;\n}\n/**\n * A (serializable) state of the view.\n */\nexport interface IViewState {\n\tscrollTop: number;\n\tscrollTopWithoutViewZones: number;\n\tscrollLeft: number;\n}\n/**\n * A (serializable) state of the code editor.\n */\nexport interface ICodeEditorViewState {\n\tcursorState: ICursorState[];\n\tviewState: IViewState;\n\tcontributionsState: { [id: string]: any };\n}\n/**\n * (Serializable) View state for the diff editor.\n */\nexport interface IDiffEditorViewState {\n\toriginal: ICodeEditorViewState;\n\tmodified: ICodeEditorViewState;\n}\n/**\n * An editor view state.\n */\nexport type IEditorViewState = ICodeEditorViewState | IDiffEditorViewState;\n\n/**\n * An editor.\n */\nexport interface IEditor {\n\t/**\n\t * An event emitted when the editor has been disposed.\n\t * @event\n\t */\n\tonDidDispose(listener: () => void): IDisposable;\n\n\t/**\n\t * Dispose the editor.\n\t */\n\tdispose(): void;\n\n\t/**\n\t * Get a unique id for this editor instance.\n\t */\n\tgetId(): string;\n\n\t/**\n\t * Get the editor type. Please see `EditorType`.\n\t * This is to avoid an instanceof check\n\t */\n\tgetEditorType(): string;\n\n\t/**\n\t * Destroy the editor.\n\t * @internal\n\t */\n\tdestroy(): void;\n\n\t/**\n\t * Update the editor's options after the editor has been created.\n\t */\n\tupdateOptions(newOptions: editorOptions.IEditorOptions): void;\n\n\t/**\n\t * Indicates that the editor becomes visible.\n\t * @internal\n\t */\n\tonVisible(): void;\n\n\t/**\n\t * Indicates that the editor becomes hidden.\n\t * @internal\n\t */\n\tonHide(): void;\n\n\t/**\n\t * Instructs the editor to remeasure its container. This method should\n\t * be called when the container of the editor gets resized.\n\t */\n\tlayout(dimension?: IDimension): void;\n\n\t/**\n\t * Brings browser focus to the editor text\n\t */\n\tfocus(): void;\n\n\t/**\n\t * Returns true if this editor has keyboard focus (e.g. cursor is blinking).\n\t */\n\tisFocused(): boolean;\n\n\t/**\n\t * Returns all actions associated with this editor.\n\t */\n\tgetActions(): IEditorAction[];\n\n\t/**\n\t * Returns all actions associated with this editor.\n\t */\n\tgetSupportedActions(): IEditorAction[];\n\n\t/**\n\t * Saves current view state of the editor in a serializable object.\n\t */\n\tsaveViewState(): IEditorViewState;\n\n\t/**\n\t * Restores the view state of the editor from a serializable object generated by `saveViewState`.\n\t */\n\trestoreViewState(state: IEditorViewState): void;\n\n\t/**\n\t * Given a position, returns a column number that takes tab-widths into account.\n\t */\n\tgetVisibleColumnFromPosition(position: IPosition): number;\n\n\t/**\n\t * Returns the primary position of the cursor.\n\t */\n\tgetPosition(): Position;\n\n\t/**\n\t * Set the primary position of the cursor. This will remove any secondary cursors.\n\t * @param position New primary cursor's position\n\t */\n\tsetPosition(position: IPosition): void;\n\n\t/**\n\t * Scroll vertically as necessary and reveal a line.\n\t */\n\trevealLine(lineNumber: number): void;\n\n\t/**\n\t * Scroll vertically as necessary and reveal a line centered vertically.\n\t */\n\trevealLineInCenter(lineNumber: number): void;\n\n\t/**\n\t * Scroll vertically as necessary and reveal a line centered vertically only if it lies outside the viewport.\n\t */\n\trevealLineInCenterIfOutsideViewport(lineNumber: number): void;\n\n\t/**\n\t * Scroll vertically or horizontally as necessary and reveal a position.\n\t */\n\trevealPosition(position: IPosition, revealVerticalInCenter?: boolean, revealHorizontal?: boolean): void;\n\n\t/**\n\t * Scroll vertically or horizontally as necessary and reveal a position centered vertically.\n\t */\n\trevealPositionInCenter(position: IPosition): void;\n\n\t/**\n\t * Scroll vertically or horizontally as necessary and reveal a position centered vertically only if it lies outside the viewport.\n\t */\n\trevealPositionInCenterIfOutsideViewport(position: IPosition): void;\n\n\t/**\n\t * Returns the primary selection of the editor.\n\t */\n\tgetSelection(): Selection;\n\n\t/**\n\t * Returns all the selections of the editor.\n\t */\n\tgetSelections(): Selection[];\n\n\t/**\n\t * Set the primary selection of the editor. This will remove any secondary cursors.\n\t * @param selection The new selection\n\t */\n\tsetSelection(selection: IRange): void;\n\t/**\n\t * Set the primary selection of the editor. This will remove any secondary cursors.\n\t * @param selection The new selection\n\t */\n\tsetSelection(selection: Range): void;\n\t/**\n\t * Set the primary selection of the editor. This will remove any secondary cursors.\n\t * @param selection The new selection\n\t */\n\tsetSelection(selection: ISelection): void;\n\t/**\n\t * Set the primary selection of the editor. This will remove any secondary cursors.\n\t * @param selection The new selection\n\t */\n\tsetSelection(selection: Selection): void;\n\n\t/**\n\t * Set the selections for all the cursors of the editor.\n\t * Cursors will be removed or added, as necessary.\n\t */\n\tsetSelections(selections: ISelection[]): void;\n\n\t/**\n\t * Scroll vertically as necessary and reveal lines.\n\t */\n\trevealLines(startLineNumber: number, endLineNumber: number): void;\n\n\t/**\n\t * Scroll vertically as necessary and reveal lines centered vertically.\n\t */\n\trevealLinesInCenter(lineNumber: number, endLineNumber: number): void;\n\n\t/**\n\t * Scroll vertically as necessary and reveal lines centered vertically only if it lies outside the viewport.\n\t */\n\trevealLinesInCenterIfOutsideViewport(lineNumber: number, endLineNumber: number): void;\n\n\t/**\n\t * Scroll vertically or horizontally as necessary and reveal a range.\n\t */\n\trevealRange(range: IRange): void;\n\n\t/**\n\t * Scroll vertically or horizontally as necessary and reveal a range centered vertically.\n\t */\n\trevealRangeInCenter(range: IRange): void;\n\n\t/**\n\t * Scroll vertically or horizontally as necessary and reveal a range at the top of the viewport.\n\t */\n\trevealRangeAtTop(range: IRange): void;\n\n\t/**\n\t * Scroll vertically or horizontally as necessary and reveal a range centered vertically only if it lies outside the viewport.\n\t */\n\trevealRangeInCenterIfOutsideViewport(range: IRange): void;\n\n\t/**\n\t * Directly trigger a handler or an editor action.\n\t * @param source The source of the call.\n\t * @param handlerId The id of the handler or the id of a contribution.\n\t * @param payload Extra data to be sent to the handler.\n\t */\n\ttrigger(source: string, handlerId: string, payload: any): void;\n\n\t/**\n\t * Gets the current model attached to this editor.\n\t */\n\tgetModel(): IEditorModel;\n\n\t/**\n\t * Sets the current model attached to this editor.\n\t * If the previous model was created by the editor via the value key in the options\n\t * literal object, it will be destroyed. Otherwise, if the previous model was set\n\t * via setModel, or the model key in the options literal object, the previous model\n\t * will not be destroyed.\n\t * It is safe to call setModel(null) to simply detach the current model from the editor.\n\t */\n\tsetModel(model: IEditorModel): void;\n\n\t/**\n\t * Change the decorations. All decorations added through this changeAccessor\n\t * will get the ownerId of the editor (meaning they will not show up in other\n\t * editors).\n\t * @see IModel.changeDecorations\n\t * @internal\n\t */\n\tchangeDecorations(callback: (changeAccessor: IModelDecorationsChangeAccessor) => any): any;\n}\n\n/**\n * An editor contribution that gets created every time a new editor gets created and gets disposed when the editor gets disposed.\n */\nexport interface IEditorContribution {\n\t/**\n\t * Get a unique identifier for this contribution.\n\t */\n\tgetId(): string;\n\t/**\n\t * Dispose this contribution.\n\t */\n\tdispose(): void;\n\t/**\n\t * Store view state.\n\t */\n\tsaveViewState?(): any;\n\t/**\n\t * Restore view state.\n\t */\n\trestoreViewState?(state: any): void;\n}\n\n/**\n * @internal\n */\nexport function isThemeColor(o): o is ThemeColor {\n\treturn o && typeof o.id === 'string';\n}\n\n/**\n * @internal\n */\nexport interface IThemeDecorationRenderOptions {\n\tbackgroundColor?: string | ThemeColor;\n\n\toutline?: string;\n\toutlineColor?: string | ThemeColor;\n\toutlineStyle?: string;\n\toutlineWidth?: string;\n\n\tborder?: string;\n\tborderColor?: string | ThemeColor;\n\tborderRadius?: string;\n\tborderSpacing?: string;\n\tborderStyle?: string;\n\tborderWidth?: string;\n\n\ttextDecoration?: string;\n\tcursor?: string;\n\tcolor?: string | ThemeColor;\n\tletterSpacing?: string;\n\n\tgutterIconPath?: string | URI;\n\tgutterIconSize?: string;\n\n\toverviewRulerColor?: string | ThemeColor;\n\n\tbefore?: IContentDecorationRenderOptions;\n\tafter?: IContentDecorationRenderOptions;\n}\n\n/**\n * @internal\n */\nexport interface IContentDecorationRenderOptions {\n\tcontentText?: string;\n\tcontentIconPath?: string | URI;\n\n\tborder?: string;\n\tborderColor?: string | ThemeColor;\n\ttextDecoration?: string;\n\tcolor?: string | ThemeColor;\n\tbackgroundColor?: string | ThemeColor;\n\n\tmargin?: string;\n\twidth?: string;\n\theight?: string;\n}\n\n/**\n * @internal\n */\nexport interface IDecorationRenderOptions extends IThemeDecorationRenderOptions {\n\tisWholeLine?: boolean;\n\trangeBehavior?: TrackedRangeStickiness;\n\toverviewRulerLane?: OverviewRulerLane;\n\n\tlight?: IThemeDecorationRenderOptions;\n\tdark?: IThemeDecorationRenderOptions;\n}\n\n/**\n * @internal\n */\nexport interface IThemeDecorationInstanceRenderOptions {\n\tbefore?: IContentDecorationRenderOptions;\n\tafter?: IContentDecorationRenderOptions;\n}\n\n/**\n * @internal\n */\nexport interface IDecorationInstanceRenderOptions extends IThemeDecorationInstanceRenderOptions {\n\tlight?: IThemeDecorationInstanceRenderOptions;\n\tdark?: IThemeDecorationInstanceRenderOptions;\n}\n\n/**\n * @internal\n */\nexport interface IDecorationOptions {\n\trange: IRange;\n\thoverMessage?: MarkedString | MarkedString[];\n\trenderOptions?: IDecorationInstanceRenderOptions;\n}\n\nexport interface ICommonCodeEditor extends IEditor {\n\t/**\n\t * An event emitted when the content of the current model has changed.\n\t * @event\n\t */\n\tonDidChangeModelContent(listener: (e: IModelContentChangedEvent) => void): IDisposable;\n\t/**\n\t * An event emitted when the language of the current model has changed.\n\t * @event\n\t */\n\tonDidChangeModelLanguage(listener: (e: IModelLanguageChangedEvent) => void): IDisposable;\n\t/**\n\t * An event emitted when the options of the current model has changed.\n\t * @event\n\t */\n\tonDidChangeModelOptions(listener: (e: IModelOptionsChangedEvent) => void): IDisposable;\n\t/**\n\t * An event emitted when the configuration of the editor has changed. (e.g. `editor.updateOptions()`)\n\t * @event\n\t */\n\tonDidChangeConfiguration(listener: (e: editorOptions.IConfigurationChangedEvent) => void): IDisposable;\n\t/**\n\t * An event emitted when the cursor position has changed.\n\t * @event\n\t */\n\tonDidChangeCursorPosition(listener: (e: ICursorPositionChangedEvent) => void): IDisposable;\n\t/**\n\t * An event emitted when the cursor selection has changed.\n\t * @event\n\t */\n\tonDidChangeCursorSelection(listener: (e: ICursorSelectionChangedEvent) => void): IDisposable;\n\t/**\n\t * An event emitted when the model of this editor has changed (e.g. `editor.setModel()`).\n\t * @event\n\t */\n\tonDidChangeModel(listener: (e: IModelChangedEvent) => void): IDisposable;\n\t/**\n\t * An event emitted when the decorations of the current model have changed.\n\t * @event\n\t */\n\tonDidChangeModelDecorations(listener: (e: IModelDecorationsChangedEvent) => void): IDisposable;\n\t/**\n\t * An event emitted when the text inside this editor gained focus (i.e. cursor blinking).\n\t * @event\n\t */\n\tonDidFocusEditorText(listener: () => void): IDisposable;\n\t/**\n\t * An event emitted when the text inside this editor lost focus.\n\t * @event\n\t */\n\tonDidBlurEditorText(listener: () => void): IDisposable;\n\t/**\n\t * An event emitted when the text inside this editor or an editor widget gained focus.\n\t * @event\n\t */\n\tonDidFocusEditor(listener: () => void): IDisposable;\n\t/**\n\t * An event emitted when the text inside this editor or an editor widget lost focus.\n\t * @event\n\t */\n\tonDidBlurEditor(listener: () => void): IDisposable;\n\t/**\n\t * An event emitted before interpreting typed characters (on the keyboard).\n\t * @event\n\t * @internal\n\t */\n\tonWillType(listener: (text: string) => void): IDisposable;\n\t/**\n\t * An event emitted before interpreting typed characters (on the keyboard).\n\t * @event\n\t * @internal\n\t */\n\tonDidType(listener: (text: string) => void): IDisposable;\n\t/**\n\t * An event emitted when users paste text in the editor.\n\t * @event\n\t * @internal\n\t */\n\tonDidPaste(listener: (range: Range) => void): IDisposable;\n\n\t/**\n\t * Saves current view state of the editor in a serializable object.\n\t */\n\tsaveViewState(): ICodeEditorViewState;\n\n\t/**\n\t * Restores the view state of the editor from a serializable object generated by `saveViewState`.\n\t */\n\trestoreViewState(state: ICodeEditorViewState): void;\n\n\t/**\n\t * Returns true if this editor or one of its widgets has keyboard focus.\n\t */\n\thasWidgetFocus(): boolean;\n\n\t/**\n\t * Get a contribution of this editor.\n\t * @id Unique identifier of the contribution.\n\t * @return The contribution or null if contribution not found.\n\t */\n\tgetContribution(id: string): T;\n\n\t/**\n\t * Execute `fn` with the editor's services.\n\t * @internal\n\t */\n\tinvokeWithinContext(fn: (accessor: ServicesAccessor) => T): T;\n\n\t/**\n\t * Type the getModel() of IEditor.\n\t */\n\tgetModel(): IModel;\n\n\t/**\n\t * Returns the current editor's configuration\n\t */\n\tgetConfiguration(): editorOptions.InternalEditorOptions;\n\n\t/**\n\t * Returns the 'raw' editor's configuration (without any validation or defaults).\n\t * @internal\n\t */\n\tgetRawConfiguration(): editorOptions.IEditorOptions;\n\n\t/**\n\t * Get value of the current model attached to this editor.\n\t * @see IModel.getValue\n\t */\n\tgetValue(options?: { preserveBOM: boolean; lineEnding: string; }): string;\n\n\t/**\n\t * Set the value of the current model attached to this editor.\n\t * @see IModel.setValue\n\t */\n\tsetValue(newValue: string): void;\n\n\t/**\n\t * Get the scrollWidth of the editor's viewport.\n\t */\n\tgetScrollWidth(): number;\n\t/**\n\t * Get the scrollLeft of the editor's viewport.\n\t */\n\tgetScrollLeft(): number;\n\n\t/**\n\t * Get the scrollHeight of the editor's viewport.\n\t */\n\tgetScrollHeight(): number;\n\t/**\n\t * Get the scrollTop of the editor's viewport.\n\t */\n\tgetScrollTop(): number;\n\n\t/**\n\t * Change the scrollLeft of the editor's viewport.\n\t */\n\tsetScrollLeft(newScrollLeft: number): void;\n\t/**\n\t * Change the scrollTop of the editor's viewport.\n\t */\n\tsetScrollTop(newScrollTop: number): void;\n\t/**\n\t * Change the scroll position of the editor's viewport.\n\t */\n\tsetScrollPosition(position: INewScrollPosition): void;\n\n\t/**\n\t * Get an action that is a contribution to this editor.\n\t * @id Unique identifier of the contribution.\n\t * @return The action or null if action not found.\n\t */\n\tgetAction(id: string): IEditorAction;\n\n\t/**\n\t * Execute a command on the editor.\n\t * The edits will land on the undo-redo stack, but no \"undo stop\" will be pushed.\n\t * @param source The source of the call.\n\t * @param command The command to execute\n\t */\n\texecuteCommand(source: string, command: ICommand): void;\n\n\t/**\n\t * Push an \"undo stop\" in the undo-redo stack.\n\t */\n\tpushUndoStop(): boolean;\n\n\t/**\n\t * Execute edits on the editor.\n\t * The edits will land on the undo-redo stack, but no \"undo stop\" will be pushed.\n\t * @param source The source of the call.\n\t * @param edits The edits to execute.\n\t * @param endCursoState Cursor state after the edits were applied.\n\t */\n\texecuteEdits(source: string, edits: IIdentifiedSingleEditOperation[], endCursoState?: Selection[]): boolean;\n\n\t/**\n\t * Execute multiple (concommitent) commands on the editor.\n\t * @param source The source of the call.\n\t * @param command The commands to execute\n\t */\n\texecuteCommands(source: string, commands: ICommand[]): void;\n\n\t/**\n\t * @internal\n\t */\n\t_getCursors(): ICursors;\n\n\t/**\n\t * @internal\n\t */\n\t_getCursorConfiguration(): CursorConfiguration;\n\n\t/**\n\t * Get all the decorations on a line (filtering out decorations from other editors).\n\t */\n\tgetLineDecorations(lineNumber: number): IModelDecoration[];\n\n\t/**\n\t * All decorations added through this call will get the ownerId of this editor.\n\t * @see IModel.deltaDecorations\n\t */\n\tdeltaDecorations(oldDecorations: string[], newDecorations: IModelDeltaDecoration[]): string[];\n\n\t/**\n\t * @internal\n\t */\n\tsetDecorations(decorationTypeKey: string, ranges: IDecorationOptions[]): void;\n\n\t/**\n\t * @internal\n\t */\n\tremoveDecorations(decorationTypeKey: string): void;\n\n\t/**\n\t * Get the layout info for the editor.\n\t */\n\tgetLayoutInfo(): editorOptions.EditorLayoutInfo;\n\n\t/**\n\t * @internal\n\t */\n\tgetTelemetryData(): { [key: string]: any; };\n}\n\nexport interface ICommonDiffEditor extends IEditor {\n\t/**\n\t * An event emitted when the diff information computed by this diff editor has been updated.\n\t * @event\n\t */\n\tonDidUpdateDiff(listener: () => void): IDisposable;\n\n\t/**\n\t * Saves current view state of the editor in a serializable object.\n\t */\n\tsaveViewState(): IDiffEditorViewState;\n\n\t/**\n\t * Restores the view state of the editor from a serializable object generated by `saveViewState`.\n\t */\n\trestoreViewState(state: IDiffEditorViewState): void;\n\n\t/**\n\t * Type the getModel() of IEditor.\n\t */\n\tgetModel(): IDiffEditorModel;\n\n\t/**\n\t * Get the `original` editor.\n\t */\n\tgetOriginalEditor(): ICommonCodeEditor;\n\n\t/**\n\t * Get the `modified` editor.\n\t */\n\tgetModifiedEditor(): ICommonCodeEditor;\n\n\t/**\n\t * Get the computed diff information.\n\t */\n\tgetLineChanges(): ILineChange[];\n\n\t/**\n\t * Get information based on computed diff about a line number from the original model.\n\t * If the diff computation is not finished or the model is missing, will return null.\n\t */\n\tgetDiffLineInformationForOriginal(lineNumber: number): IDiffLineInformation;\n\n\t/**\n\t * Get information based on computed diff about a line number from the modified model.\n\t * If the diff computation is not finished or the model is missing, will return null.\n\t */\n\tgetDiffLineInformationForModified(lineNumber: number): IDiffLineInformation;\n\n\t/**\n\t * @see ICodeEditor.getValue\n\t */\n\tgetValue(options?: { preserveBOM: boolean; lineEnding: string; }): string;\n\n\t/**\n\t * Returns whether the diff editor is ignoring trim whitespace or not.\n\t * @internal\n\t */\n\treadonly ignoreTrimWhitespace: boolean;\n\n\t/**\n\t * Returns whether the diff editor is rendering side by side or not.\n\t * @internal\n\t */\n\treadonly renderSideBySide: boolean;\n\t/**\n\t * Returns whether the diff editor is rendering +/- indicators or not.\n\t * @internal\n\t */\n\treadonly renderIndicators: boolean;\n}\n\n/**\n * The type of the `IEditor`.\n */\nexport var EditorType = {\n\tICodeEditor: 'vs.editor.ICodeEditor',\n\tIDiffEditor: 'vs.editor.IDiffEditor'\n};\n\n/**\n *@internal\n */\nexport function isCommonCodeEditor(thing: any): thing is ICommonCodeEditor {\n\tif (thing && typeof (thing).getEditorType === 'function') {\n\t\treturn (thing).getEditorType() === EditorType.ICodeEditor;\n\t} else {\n\t\treturn false;\n\t}\n}\n\n/**\n *@internal\n */\nexport function isCommonDiffEditor(thing: any): thing is ICommonDiffEditor {\n\tif (thing && typeof (thing).getEditorType === 'function') {\n\t\treturn (thing).getEditorType() === EditorType.IDiffEditor;\n\t} else {\n\t\treturn false;\n\t}\n}\n\n/**\n * Built-in commands.\n * @internal\n */\nexport var Handler = {\n\tExecuteCommand: 'executeCommand',\n\tExecuteCommands: 'executeCommands',\n\n\tType: 'type',\n\tReplacePreviousChar: 'replacePreviousChar',\n\tCompositionStart: 'compositionStart',\n\tCompositionEnd: 'compositionEnd',\n\tPaste: 'paste',\n\n\tCut: 'cut',\n\n\tUndo: 'undo',\n\tRedo: 'redo',\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'use strict';\n\nimport { Range } from 'vs/editor/common/core/range';\nimport { EndOfLinePreference } from 'vs/editor/common/editorCommon';\nimport * as strings from 'vs/base/common/strings';\n\nexport interface ITextAreaWrapper {\n\tgetValue(): string;\n\tsetValue(reason: string, value: string): void;\n\n\tgetSelectionStart(): number;\n\tgetSelectionEnd(): number;\n\tsetSelectionRange(reason: string, selectionStart: number, selectionEnd: number): void;\n}\n\nexport interface ISimpleModel {\n\tgetLineCount(): number;\n\tgetLineMaxColumn(lineNumber: number): number;\n\tgetValueInRange(range: Range, eol: EndOfLinePreference): string;\n}\n\nexport interface ITypeData {\n\ttext: string;\n\treplaceCharCnt: number;\n}\n\nexport class TextAreaState {\n\n\tpublic static EMPTY = new TextAreaState('', 0, 0);\n\n\tpublic readonly value: string;\n\tpublic readonly selectionStart: number;\n\tpublic readonly selectionEnd: number;\n\n\tconstructor(value: string, selectionStart: number, selectionEnd: number) {\n\t\tthis.value = value;\n\t\tthis.selectionStart = selectionStart;\n\t\tthis.selectionEnd = selectionEnd;\n\t}\n\n\tpublic equals(other: TextAreaState): boolean {\n\t\tif (other instanceof TextAreaState) {\n\t\t\treturn (\n\t\t\t\tthis.value === other.value\n\t\t\t\t&& this.selectionStart === other.selectionStart\n\t\t\t\t&& this.selectionEnd === other.selectionEnd\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic toString(): string {\n\t\treturn '[ <' + this.value + '>, selectionStart: ' + this.selectionStart + ', selectionEnd: ' + this.selectionEnd + ']';\n\t}\n\n\tpublic readFromTextArea(textArea: ITextAreaWrapper): TextAreaState {\n\t\treturn new TextAreaState(textArea.getValue(), textArea.getSelectionStart(), textArea.getSelectionEnd());\n\t}\n\n\tpublic collapseSelection(): TextAreaState {\n\t\treturn new TextAreaState(this.value, this.value.length, this.value.length);\n\t}\n\n\tpublic writeToTextArea(reason: string, textArea: ITextAreaWrapper, select: boolean): void {\n\t\t// console.log(Date.now() + ': applyToTextArea ' + reason + ': ' + this.toString());\n\t\ttextArea.setValue(reason, this.value);\n\t\tif (select) {\n\t\t\ttextArea.setSelectionRange(reason, this.selectionStart, this.selectionEnd);\n\t\t}\n\t}\n\n\tpublic static selectedText(text: string): TextAreaState {\n\t\treturn new TextAreaState(text, 0, text.length);\n\t}\n\n\tpublic static deduceInput(previousState: TextAreaState, currentState: TextAreaState, couldBeEmojiInput: boolean): ITypeData {\n\t\tif (!previousState) {\n\t\t\t// This is the EMPTY state\n\t\t\treturn {\n\t\t\t\ttext: '',\n\t\t\t\treplaceCharCnt: 0\n\t\t\t};\n\t\t}\n\n\t\t// console.log('------------------------deduceInput');\n\t\t// console.log('PREVIOUS STATE: ' + previousState.toString());\n\t\t// console.log('CURRENT STATE: ' + currentState.toString());\n\n\t\tlet previousValue = previousState.value;\n\t\tlet previousSelectionStart = previousState.selectionStart;\n\t\tlet previousSelectionEnd = previousState.selectionEnd;\n\t\tlet currentValue = currentState.value;\n\t\tlet currentSelectionStart = currentState.selectionStart;\n\t\tlet currentSelectionEnd = currentState.selectionEnd;\n\n\t\t// Strip the previous suffix from the value (without interfering with the current selection)\n\t\tconst previousSuffix = previousValue.substring(previousSelectionEnd);\n\t\tconst currentSuffix = currentValue.substring(currentSelectionEnd);\n\t\tconst suffixLength = strings.commonSuffixLength(previousSuffix, currentSuffix);\n\t\tcurrentValue = currentValue.substring(0, currentValue.length - suffixLength);\n\t\tpreviousValue = previousValue.substring(0, previousValue.length - suffixLength);\n\n\t\tconst previousPrefix = previousValue.substring(0, previousSelectionStart);\n\t\tconst currentPrefix = currentValue.substring(0, currentSelectionStart);\n\t\tconst prefixLength = strings.commonPrefixLength(previousPrefix, currentPrefix);\n\t\tcurrentValue = currentValue.substring(prefixLength);\n\t\tpreviousValue = previousValue.substring(prefixLength);\n\t\tcurrentSelectionStart -= prefixLength;\n\t\tpreviousSelectionStart -= prefixLength;\n\t\tcurrentSelectionEnd -= prefixLength;\n\t\tpreviousSelectionEnd -= prefixLength;\n\n\t\t// console.log('AFTER DIFFING PREVIOUS STATE: <' + previousValue + '>, selectionStart: ' + previousSelectionStart + ', selectionEnd: ' + previousSelectionEnd);\n\t\t// console.log('AFTER DIFFING CURRENT STATE: <' + currentValue + '>, selectionStart: ' + currentSelectionStart + ', selectionEnd: ' + currentSelectionEnd);\n\n\t\tif (couldBeEmojiInput && currentSelectionStart === currentSelectionEnd && previousValue.length > 0) {\n\t\t\t// on OSX, emojis from the emoji picker are inserted at random locations\n\t\t\t// the only hints we can use is that the selection is immediately after the inserted emoji\n\t\t\t// and that none of the old text has been deleted\n\n\t\t\tlet potentialEmojiInput: string = null;\n\n\t\t\tif (currentSelectionStart === currentValue.length) {\n\t\t\t\t// emoji potentially inserted \"somewhere\" after the previous selection => it should appear at the end of `currentValue`\n\t\t\t\tif (strings.startsWith(currentValue, previousValue)) {\n\t\t\t\t\t// only if all of the old text is accounted for\n\t\t\t\t\tpotentialEmojiInput = currentValue.substring(previousValue.length);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// emoji potentially inserted \"somewhere\" before the previous selection => it should appear at the start of `currentValue`\n\t\t\t\tif (strings.endsWith(currentValue, previousValue)) {\n\t\t\t\t\t// only if all of the old text is accounted for\n\t\t\t\t\tpotentialEmojiInput = currentValue.substring(0, currentValue.length - previousValue.length);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (potentialEmojiInput !== null && potentialEmojiInput.length > 0) {\n\t\t\t\t// now we check that this is indeed an emoji\n\t\t\t\t// emojis can grow quite long, so a length check is of no help\n\t\t\t\t// e.g. 1F3F4 E0067 E0062 E0065 E006E E0067 E007F ; fully-qualified # 🏴󠁧󠁢󠁥󠁮󠁧󠁿 England\n\n\t\t\t\t// Oftentimes, emojis use Variation Selector-16 (U+FE0F), so that is a good hint\n\t\t\t\t// http://emojipedia.org/variation-selector-16/\n\t\t\t\t// > An invisible codepoint which specifies that the preceding character\n\t\t\t\t// > should be displayed with emoji presentation. Only required if the\n\t\t\t\t// > preceding character defaults to text presentation.\n\t\t\t\tif (/\\uFE0F/.test(potentialEmojiInput) || strings.containsEmoji(potentialEmojiInput)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttext: potentialEmojiInput,\n\t\t\t\t\t\treplaceCharCnt: 0\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (currentSelectionStart === currentSelectionEnd) {\n\t\t\t// composition accept case (noticed in FF + Japanese)\n\t\t\t// [blahblah] => blahblah|\n\t\t\tif (\n\t\t\t\tpreviousValue === currentValue\n\t\t\t\t&& previousSelectionStart === 0\n\t\t\t\t&& previousSelectionEnd === previousValue.length\n\t\t\t\t&& currentSelectionStart === currentValue.length\n\t\t\t\t&& currentValue.indexOf('\\n') === -1\n\t\t\t) {\n\t\t\t\tif (strings.containsFullWidthCharacter(currentValue)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\treplaceCharCnt: 0\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// no current selection\n\t\t\tconst replacePreviousCharacters = (previousPrefix.length - prefixLength);\n\t\t\t// console.log('REMOVE PREVIOUS: ' + (previousPrefix.length - prefixLength) + ' chars');\n\n\t\t\treturn {\n\t\t\t\ttext: currentValue,\n\t\t\t\treplaceCharCnt: replacePreviousCharacters\n\t\t\t};\n\t\t}\n\n\t\t// there is a current selection => composition case\n\t\tconst replacePreviousCharacters = previousSelectionEnd - previousSelectionStart;\n\t\treturn {\n\t\t\ttext: currentValue,\n\t\t\treplaceCharCnt: replacePreviousCharacters\n\t\t};\n\t}\n}\n\nexport class PagedScreenReaderStrategy {\n\tprivate static _LINES_PER_PAGE = 10;\n\n\tprivate static _getPageOfLine(lineNumber: number): number {\n\t\treturn Math.floor((lineNumber - 1) / PagedScreenReaderStrategy._LINES_PER_PAGE);\n\t}\n\n\tprivate static _getRangeForPage(page: number): Range {\n\t\tlet offset = page * PagedScreenReaderStrategy._LINES_PER_PAGE;\n\t\tlet startLineNumber = offset + 1;\n\t\tlet endLineNumber = offset + PagedScreenReaderStrategy._LINES_PER_PAGE;\n\t\treturn new Range(startLineNumber, 1, endLineNumber + 1, 1);\n\t}\n\n\tpublic static fromEditorSelection(previousState: TextAreaState, model: ISimpleModel, selection: Range): TextAreaState {\n\n\t\tlet selectionStartPage = PagedScreenReaderStrategy._getPageOfLine(selection.startLineNumber);\n\t\tlet selectionStartPageRange = PagedScreenReaderStrategy._getRangeForPage(selectionStartPage);\n\n\t\tlet selectionEndPage = PagedScreenReaderStrategy._getPageOfLine(selection.endLineNumber);\n\t\tlet selectionEndPageRange = PagedScreenReaderStrategy._getRangeForPage(selectionEndPage);\n\n\t\tlet pretextRange = selectionStartPageRange.intersectRanges(new Range(1, 1, selection.startLineNumber, selection.startColumn));\n\t\tlet pretext = model.getValueInRange(pretextRange, EndOfLinePreference.LF);\n\n\t\tlet lastLine = model.getLineCount();\n\t\tlet lastLineMaxColumn = model.getLineMaxColumn(lastLine);\n\t\tlet posttextRange = selectionEndPageRange.intersectRanges(new Range(selection.endLineNumber, selection.endColumn, lastLine, lastLineMaxColumn));\n\t\tlet posttext = model.getValueInRange(posttextRange, EndOfLinePreference.LF);\n\n\t\tlet text: string = null;\n\t\tif (selectionStartPage === selectionEndPage || selectionStartPage + 1 === selectionEndPage) {\n\t\t\t// take full selection\n\t\t\ttext = model.getValueInRange(selection, EndOfLinePreference.LF);\n\t\t} else {\n\t\t\tlet selectionRange1 = selectionStartPageRange.intersectRanges(selection);\n\t\t\tlet selectionRange2 = selectionEndPageRange.intersectRanges(selection);\n\t\t\ttext = (\n\t\t\t\tmodel.getValueInRange(selectionRange1, EndOfLinePreference.LF)\n\t\t\t\t+ String.fromCharCode(8230)\n\t\t\t\t+ model.getValueInRange(selectionRange2, EndOfLinePreference.LF)\n\t\t\t);\n\t\t}\n\n\t\t// Chromium handles very poorly text even of a few thousand chars\n\t\t// Cut text to avoid stalling the entire UI\n\t\tconst LIMIT_CHARS = 500;\n\t\tif (pretext.length > LIMIT_CHARS) {\n\t\t\tpretext = pretext.substring(pretext.length - LIMIT_CHARS, pretext.length);\n\t\t}\n\t\tif (posttext.length > LIMIT_CHARS) {\n\t\t\tposttext = posttext.substring(0, LIMIT_CHARS);\n\t\t}\n\t\tif (text.length > 2 * LIMIT_CHARS) {\n\t\t\ttext = text.substring(0, LIMIT_CHARS) + String.fromCharCode(8230) + text.substring(text.length - LIMIT_CHARS, text.length);\n\t\t}\n\n\t\treturn new TextAreaState(pretext + text + posttext, pretext.length, pretext.length + text.length);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { RunOnceScheduler } from 'vs/base/common/async';\nimport * as strings from 'vs/base/common/strings';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { KeyCode } from 'vs/base/common/keyCodes';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { ITypeData, TextAreaState, ITextAreaWrapper } from 'vs/editor/browser/controller/textAreaState';\nimport * as browser from 'vs/base/browser/browser';\nimport * as platform from 'vs/base/common/platform';\nimport * as dom from 'vs/base/browser/dom';\nimport { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport { FastDomNode } from 'vs/base/browser/fastDomNode';\n\nexport interface ICompositionData {\n\tdata: string;\n}\n\nexport const CopyOptions = {\n\tforceCopyWithSyntaxHighlighting: false\n};\n\nconst enum ReadFromTextArea {\n\tType,\n\tPaste\n}\n\nexport interface IPasteData {\n\ttext: string;\n}\n\nexport interface ITextAreaInputHost {\n\tgetPlainTextToCopy(): string;\n\tgetHTMLToCopy(): string;\n\tgetScreenReaderContent(currentState: TextAreaState): TextAreaState;\n}\n\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\n\tprivate _onFocus = this._register(new Emitter());\n\tpublic onFocus: Event = this._onFocus.event;\n\n\tprivate _onBlur = this._register(new Emitter());\n\tpublic onBlur: Event = this._onBlur.event;\n\n\tprivate _onKeyDown = this._register(new Emitter());\n\tpublic onKeyDown: Event = this._onKeyDown.event;\n\n\tprivate _onKeyUp = this._register(new Emitter());\n\tpublic onKeyUp: Event = this._onKeyUp.event;\n\n\tprivate _onCut = this._register(new Emitter());\n\tpublic onCut: Event = this._onCut.event;\n\n\tprivate _onPaste = this._register(new Emitter());\n\tpublic onPaste: Event = this._onPaste.event;\n\n\tprivate _onType = this._register(new Emitter());\n\tpublic onType: Event = this._onType.event;\n\n\tprivate _onCompositionStart = this._register(new Emitter());\n\tpublic onCompositionStart: Event = this._onCompositionStart.event;\n\n\tprivate _onCompositionUpdate = this._register(new Emitter());\n\tpublic onCompositionUpdate: Event = this._onCompositionUpdate.event;\n\n\tprivate _onCompositionEnd = this._register(new Emitter());\n\tpublic onCompositionEnd: Event = this._onCompositionEnd.event;\n\n\t// ---\n\n\tprivate readonly _host: ITextAreaInputHost;\n\tprivate readonly _textArea: TextAreaWrapper;\n\tprivate readonly _asyncTriggerCut: RunOnceScheduler;\n\n\tprivate _textAreaState: TextAreaState;\n\n\tprivate _hasFocus: boolean;\n\tprivate _isDoingComposition: boolean;\n\tprivate _nextCommand: ReadFromTextArea;\n\n\tconstructor(host: ITextAreaInputHost, textArea: FastDomNode) {\n\t\tsuper();\n\t\tthis._host = host;\n\t\tthis._textArea = this._register(new TextAreaWrapper(textArea));\n\t\tthis._asyncTriggerCut = this._register(new RunOnceScheduler(() => this._onCut.fire(), 0));\n\n\t\tthis._textAreaState = TextAreaState.EMPTY;\n\t\tthis.writeScreenReaderContent('ctor');\n\n\t\tthis._hasFocus = false;\n\t\tthis._isDoingComposition = false;\n\t\tthis._nextCommand = ReadFromTextArea.Type;\n\n\t\tthis._register(dom.addStandardDisposableListener(textArea.domNode, 'keydown', (e: IKeyboardEvent) => {\n\t\t\tif (this._isDoingComposition && e.equals(KeyCode.KEY_IN_COMPOSITION)) {\n\t\t\t\t// Stop propagation for keyDown events if the IME is processing key input\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\n\t\t\tif (e.equals(KeyCode.Escape)) {\n\t\t\t\t// Prevent default always for `Esc`, otherwise it will generate a keypress\n\t\t\t\t// See https://msdn.microsoft.com/en-us/library/ie/ms536939(v=vs.85).aspx\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\tthis._onKeyDown.fire(e);\n\t\t}));\n\n\t\tthis._register(dom.addStandardDisposableListener(textArea.domNode, 'keyup', (e: IKeyboardEvent) => {\n\t\t\tthis._onKeyUp.fire(e);\n\t\t}));\n\n\t\tthis._register(dom.addDisposableListener(textArea.domNode, 'compositionstart', (e: CompositionEvent) => {\n\t\t\tif (this._isDoingComposition) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._isDoingComposition = true;\n\n\t\t\t// In IE we cannot set .value when handling 'compositionstart' because the entire composition will get canceled.\n\t\t\tif (!browser.isEdgeOrIE) {\n\t\t\t\tthis._setAndWriteTextAreaState('compositionstart', TextAreaState.EMPTY);\n\t\t\t}\n\n\t\t\tthis._onCompositionStart.fire();\n\t\t}));\n\n\t\t/**\n\t\t * Deduce the typed input from a text area's value and the last observed state.\n\t\t */\n\t\tconst deduceInputFromTextAreaValue = (couldBeEmojiInput: boolean): [TextAreaState, ITypeData] => {\n\t\t\tconst oldState = this._textAreaState;\n\t\t\tconst newState = this._textAreaState.readFromTextArea(this._textArea);\n\t\t\treturn [newState, TextAreaState.deduceInput(oldState, newState, couldBeEmojiInput)];\n\t\t};\n\n\t\t/**\n\t\t * Deduce the composition input from a string.\n\t\t */\n\t\tconst deduceComposition = (text: string): [TextAreaState, ITypeData] => {\n\t\t\tconst oldState = this._textAreaState;\n\t\t\tconst newState = TextAreaState.selectedText(text);\n\t\t\tconst typeInput: ITypeData = {\n\t\t\t\ttext: newState.value,\n\t\t\t\treplaceCharCnt: oldState.selectionEnd - oldState.selectionStart\n\t\t\t};\n\t\t\treturn [newState, typeInput];\n\t\t};\n\n\t\tthis._register(dom.addDisposableListener(textArea.domNode, 'compositionupdate', (e: CompositionEvent) => {\n\t\t\tif (browser.isChromev56) {\n\t\t\t\t// See https://github.com/Microsoft/monaco-editor/issues/320\n\t\t\t\t// where compositionupdate .data is broken in Chrome v55 and v56\n\t\t\t\t// See https://bugs.chromium.org/p/chromium/issues/detail?id=677050#c9\n\t\t\t\t// The textArea doesn't get the composition update yet, the value of textarea is still obsolete\n\t\t\t\t// so we can't correct e at this moment.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (browser.isEdgeOrIE && e.locale === 'ja') {\n\t\t\t\t// https://github.com/Microsoft/monaco-editor/issues/339\n\t\t\t\t// Multi-part Japanese compositions reset cursor in Edge/IE, Chinese and Korean IME don't have this issue.\n\t\t\t\t// The reason that we can't use this path for all CJK IME is IE and Edge behave differently when handling Korean IME,\n\t\t\t\t// which breaks this path of code.\n\t\t\t\tconst [newState, typeInput] = deduceInputFromTextAreaValue(/*couldBeEmojiInput*/false);\n\t\t\t\tthis._textAreaState = newState;\n\t\t\t\tthis._onType.fire(typeInput);\n\t\t\t\tthis._onCompositionUpdate.fire(e);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst [newState, typeInput] = deduceComposition(e.data);\n\t\t\tthis._textAreaState = newState;\n\t\t\tthis._onType.fire(typeInput);\n\t\t\tthis._onCompositionUpdate.fire(e);\n\t\t}));\n\n\t\tthis._register(dom.addDisposableListener(textArea.domNode, 'compositionend', (e: CompositionEvent) => {\n\t\t\tif (browser.isEdgeOrIE && e.locale === 'ja') {\n\t\t\t\t// https://github.com/Microsoft/monaco-editor/issues/339\n\t\t\t\tconst [newState, typeInput] = deduceInputFromTextAreaValue(/*couldBeEmojiInput*/false);\n\t\t\t\tthis._textAreaState = newState;\n\t\t\t\tthis._onType.fire(typeInput);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconst [newState, typeInput] = deduceComposition(e.data);\n\t\t\t\tthis._textAreaState = newState;\n\t\t\t\tthis._onType.fire(typeInput);\n\t\t\t}\n\n\t\t\t// Due to isEdgeOrIE (where the textarea was not cleared initially) and isChrome (the textarea is not updated correctly when composition ends)\n\t\t\t// we cannot assume the text at the end consists only of the composited text\n\t\t\tif (browser.isEdgeOrIE || browser.isChrome) {\n\t\t\t\tthis._textAreaState = this._textAreaState.readFromTextArea(this._textArea);\n\t\t\t}\n\n\t\t\tif (!this._isDoingComposition) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._isDoingComposition = false;\n\n\t\t\tthis._onCompositionEnd.fire();\n\t\t}));\n\n\t\tthis._register(dom.addDisposableListener(textArea.domNode, 'input', () => {\n\t\t\tif (this._isDoingComposition) {\n\t\t\t\t// See https://github.com/Microsoft/monaco-editor/issues/320\n\t\t\t\tif (browser.isChromev56) {\n\t\t\t\t\tconst [newState, typeInput] = deduceComposition(this._textArea.getValue());\n\t\t\t\t\tthis._textAreaState = newState;\n\n\t\t\t\t\tthis._onType.fire(typeInput);\n\t\t\t\t\tlet e: ICompositionData = {\n\t\t\t\t\t\tdata: typeInput.text\n\t\t\t\t\t};\n\t\t\t\t\tthis._onCompositionUpdate.fire(e);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst [newState, typeInput] = deduceInputFromTextAreaValue(/*couldBeEmojiInput*/platform.isMacintosh);\n\t\t\tif (typeInput.replaceCharCnt === 0 && typeInput.text.length === 1 && strings.isHighSurrogate(typeInput.text.charCodeAt(0))) {\n\t\t\t\t// Ignore invalid input but keep it around for next time\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._textAreaState = newState;\n\t\t\t// console.log('==> DEDUCED INPUT: ' + JSON.stringify(typeInput));\n\t\t\tif (this._nextCommand === ReadFromTextArea.Type) {\n\t\t\t\tif (typeInput.text !== '') {\n\t\t\t\t\tthis._onType.fire(typeInput);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (typeInput.text !== '') {\n\t\t\t\t\tthis._onPaste.fire({\n\t\t\t\t\t\ttext: typeInput.text\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis._nextCommand = ReadFromTextArea.Type;\n\t\t\t}\n\t\t}));\n\n\t\t// --- Clipboard operations\n\n\t\tthis._register(dom.addDisposableListener(textArea.domNode, 'cut', (e: ClipboardEvent) => {\n\t\t\tthis._ensureClipboardGetsEditorSelection(e);\n\t\t\tthis._asyncTriggerCut.schedule();\n\t\t}));\n\n\t\tthis._register(dom.addDisposableListener(textArea.domNode, 'copy', (e: ClipboardEvent) => {\n\t\t\tthis._ensureClipboardGetsEditorSelection(e);\n\t\t}));\n\n\t\tthis._register(dom.addDisposableListener(textArea.domNode, 'paste', (e: ClipboardEvent) => {\n\t\t\tif (ClipboardEventUtils.canUseTextData(e)) {\n\t\t\t\tconst pastePlainText = ClipboardEventUtils.getTextData(e);\n\t\t\t\tif (pastePlainText !== '') {\n\t\t\t\t\tthis._onPaste.fire({\n\t\t\t\t\t\ttext: pastePlainText\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this._textArea.getSelectionStart() !== this._textArea.getSelectionEnd()) {\n\t\t\t\t\t// Clean up the textarea, to get a clean paste\n\t\t\t\t\tthis._setAndWriteTextAreaState('paste', TextAreaState.EMPTY);\n\t\t\t\t}\n\t\t\t\tthis._nextCommand = ReadFromTextArea.Paste;\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(dom.addDisposableListener(textArea.domNode, 'focus', () => this._setHasFocus(true)));\n\t\tthis._register(dom.addDisposableListener(textArea.domNode, 'blur', () => this._setHasFocus(false)));\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t}\n\n\tpublic focusTextArea(): void {\n\t\t// Setting this._hasFocus and writing the screen reader content\n\t\t// will result in a focus() and setSelectionRange() in the textarea\n\t\tthis._setHasFocus(true);\n\t}\n\n\tpublic isFocused(): boolean {\n\t\treturn this._hasFocus;\n\t}\n\n\tprivate _setHasFocus(newHasFocus: boolean): void {\n\t\tif (this._hasFocus === newHasFocus) {\n\t\t\t// no change\n\t\t\treturn;\n\t\t}\n\t\tthis._hasFocus = newHasFocus;\n\n\t\tif (this._hasFocus) {\n\t\t\tif (browser.isEdge) {\n\t\t\t\t// Edge has a bug where setting the selection range while the focus event\n\t\t\t\t// is dispatching doesn't work. To reproduce, \"tab into\" the editor.\n\t\t\t\tthis._setAndWriteTextAreaState('focusgain', TextAreaState.EMPTY);\n\t\t\t} else {\n\t\t\t\tthis.writeScreenReaderContent('focusgain');\n\t\t\t}\n\t\t}\n\n\t\tif (this._hasFocus) {\n\t\t\tthis._onFocus.fire();\n\t\t} else {\n\t\t\tthis._onBlur.fire();\n\t\t}\n\t}\n\n\tprivate _setAndWriteTextAreaState(reason: string, textAreaState: TextAreaState): void {\n\t\tif (!this._hasFocus) {\n\t\t\ttextAreaState = textAreaState.collapseSelection();\n\t\t}\n\n\t\ttextAreaState.writeToTextArea(reason, this._textArea, this._hasFocus);\n\t\tthis._textAreaState = textAreaState;\n\t}\n\n\tpublic writeScreenReaderContent(reason: string): void {\n\t\tif (this._isDoingComposition) {\n\t\t\t// Do not write to the text area when doing composition\n\t\t\treturn;\n\t\t}\n\n\t\tthis._setAndWriteTextAreaState(reason, this._host.getScreenReaderContent(this._textAreaState));\n\t}\n\n\tprivate _ensureClipboardGetsEditorSelection(e: ClipboardEvent): void {\n\t\tconst copyPlainText = this._host.getPlainTextToCopy();\n\t\tif (!ClipboardEventUtils.canUseTextData(e)) {\n\t\t\t// Looks like an old browser. The strategy is to place the text\n\t\t\t// we'd like to be copied to the clipboard in the textarea and select it.\n\t\t\tthis._setAndWriteTextAreaState('copy or cut', TextAreaState.selectedText(copyPlainText));\n\t\t\treturn;\n\t\t}\n\n\t\tlet copyHTML: string = null;\n\t\tif (!browser.isEdgeOrIE && (copyPlainText.length < 65536 || CopyOptions.forceCopyWithSyntaxHighlighting)) {\n\t\t\tcopyHTML = this._host.getHTMLToCopy();\n\t\t}\n\t\tClipboardEventUtils.setTextData(e, copyPlainText, copyHTML);\n\t}\n}\n\nclass ClipboardEventUtils {\n\n\tpublic static canUseTextData(e: ClipboardEvent): boolean {\n\t\tif (e.clipboardData) {\n\t\t\treturn true;\n\t\t}\n\t\tif ((window).clipboardData) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic static getTextData(e: ClipboardEvent): string {\n\t\tif (e.clipboardData) {\n\t\t\te.preventDefault();\n\t\t\treturn e.clipboardData.getData('text/plain');\n\t\t}\n\n\t\tif ((window).clipboardData) {\n\t\t\te.preventDefault();\n\t\t\treturn (window).clipboardData.getData('Text');\n\t\t}\n\n\t\tthrow new Error('ClipboardEventUtils.getTextData: Cannot use text data!');\n\t}\n\n\tpublic static setTextData(e: ClipboardEvent, text: string, richText: string): void {\n\t\tif (e.clipboardData) {\n\t\t\te.clipboardData.setData('text/plain', text);\n\t\t\tif (richText !== null) {\n\t\t\t\te.clipboardData.setData('text/html', richText);\n\t\t\t}\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif ((window).clipboardData) {\n\t\t\t(window).clipboardData.setData('Text', text);\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tthrow new Error('ClipboardEventUtils.setTextData: Cannot use text data!');\n\t}\n}\n\nclass TextAreaWrapper extends Disposable implements ITextAreaWrapper {\n\n\tprivate readonly _actual: FastDomNode;\n\n\tconstructor(_textArea: FastDomNode) {\n\t\tsuper();\n\t\tthis._actual = _textArea;\n\t}\n\n\tpublic getValue(): string {\n\t\t// console.log('current value: ' + this._textArea.value);\n\t\treturn this._actual.domNode.value;\n\t}\n\n\tpublic setValue(reason: string, value: string): void {\n\t\tconst textArea = this._actual.domNode;\n\t\tif (textArea.value === value) {\n\t\t\t// No change\n\t\t\treturn;\n\t\t}\n\t\t// console.log('reason: ' + reason + ', current value: ' + textArea.value + ' => new value: ' + value);\n\t\ttextArea.value = value;\n\t}\n\n\tpublic getSelectionStart(): number {\n\t\treturn this._actual.domNode.selectionStart;\n\t}\n\n\tpublic getSelectionEnd(): number {\n\t\treturn this._actual.domNode.selectionEnd;\n\t}\n\n\tpublic setSelectionRange(reason: string, selectionStart: number, selectionEnd: number): void {\n\t\tconst textArea = this._actual.domNode;\n\n\t\tconst currentIsFocused = (document.activeElement === textArea);\n\t\tconst currentSelectionStart = textArea.selectionStart;\n\t\tconst currentSelectionEnd = textArea.selectionEnd;\n\n\t\tif (currentIsFocused && currentSelectionStart === selectionStart && currentSelectionEnd === selectionEnd) {\n\t\t\t// No change\n\t\t\treturn;\n\t\t}\n\n\t\t// console.log('reason: ' + reason + ', setSelectionRange: ' + selectionStart + ' -> ' + selectionEnd);\n\n\t\tif (currentIsFocused) {\n\t\t\t// No need to focus, only need to change the selection range\n\t\t\ttextArea.setSelectionRange(selectionStart, selectionEnd);\n\t\t\treturn;\n\t\t}\n\n\t\t// If the focus is outside the textarea, browsers will try really hard to reveal the textarea.\n\t\t// Here, we try to undo the browser's desperate reveal.\n\t\ttry {\n\t\t\tconst scrollState = dom.saveParentsScrollTop(textArea);\n\t\t\ttextArea.focus();\n\t\t\ttextArea.setSelectionRange(selectionStart, selectionEnd);\n\t\t\tdom.restoreParentsScrollTop(textArea, scrollState);\n\t\t} catch (e) {\n\t\t\t// Sometimes IE throws when setting selection (e.g. textarea is off-DOM)\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { ICursorStateComputer, IEditableTextModel, IIdentifiedSingleEditOperation } from 'vs/editor/common/editorCommon';\nimport { Selection } from 'vs/editor/common/core/selection';\n\ninterface IEditOperation {\n\toperations: IIdentifiedSingleEditOperation[];\n}\n\ninterface IStackElement {\n\tbeforeVersionId: number;\n\tbeforeCursorState: Selection[];\n\n\teditOperations: IEditOperation[];\n\n\tafterCursorState: Selection[];\n\tafterVersionId: number;\n}\n\nexport interface IUndoRedoResult {\n\tselections: Selection[];\n\trecordedVersionId: number;\n}\n\nexport class EditStack {\n\n\tprivate model: IEditableTextModel;\n\tprivate currentOpenStackElement: IStackElement;\n\tprivate past: IStackElement[];\n\tprivate future: IStackElement[];\n\n\tconstructor(model: IEditableTextModel) {\n\t\tthis.model = model;\n\t\tthis.currentOpenStackElement = null;\n\t\tthis.past = [];\n\t\tthis.future = [];\n\t}\n\n\tpublic pushStackElement(): void {\n\t\tif (this.currentOpenStackElement !== null) {\n\t\t\tthis.past.push(this.currentOpenStackElement);\n\t\t\tthis.currentOpenStackElement = null;\n\t\t}\n\t}\n\n\tpublic clear(): void {\n\t\tthis.currentOpenStackElement = null;\n\t\tthis.past = [];\n\t\tthis.future = [];\n\t}\n\n\tpublic pushEditOperation(beforeCursorState: Selection[], editOperations: IIdentifiedSingleEditOperation[], cursorStateComputer: ICursorStateComputer): Selection[] {\n\t\t// No support for parallel universes :(\n\t\tthis.future = [];\n\n\t\tif (!this.currentOpenStackElement) {\n\t\t\tthis.currentOpenStackElement = {\n\t\t\t\tbeforeVersionId: this.model.getAlternativeVersionId(),\n\t\t\t\tbeforeCursorState: beforeCursorState,\n\t\t\t\teditOperations: [],\n\t\t\t\tafterCursorState: null,\n\t\t\t\tafterVersionId: -1\n\t\t\t};\n\t\t}\n\n\t\tvar inverseEditOperation: IEditOperation = {\n\t\t\toperations: this.model.applyEdits(editOperations)\n\t\t};\n\n\t\tthis.currentOpenStackElement.editOperations.push(inverseEditOperation);\n\t\ttry {\n\t\t\tthis.currentOpenStackElement.afterCursorState = cursorStateComputer ? cursorStateComputer(inverseEditOperation.operations) : null;\n\t\t} catch (e) {\n\t\t\tonUnexpectedError(e);\n\t\t\tthis.currentOpenStackElement.afterCursorState = null;\n\t\t}\n\n\t\tthis.currentOpenStackElement.afterVersionId = this.model.getVersionId();\n\t\treturn this.currentOpenStackElement.afterCursorState;\n\t}\n\n\tpublic undo(): IUndoRedoResult {\n\n\t\tthis.pushStackElement();\n\n\t\tif (this.past.length > 0) {\n\t\t\tvar pastStackElement = this.past.pop();\n\n\t\t\ttry {\n\t\t\t\t// Apply all operations in reverse order\n\t\t\t\tfor (var i = pastStackElement.editOperations.length - 1; i >= 0; i--) {\n\t\t\t\t\tpastStackElement.editOperations[i] = {\n\t\t\t\t\t\toperations: this.model.applyEdits(pastStackElement.editOperations[i].operations)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tthis.clear();\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tthis.future.push(pastStackElement);\n\n\t\t\treturn {\n\t\t\t\tselections: pastStackElement.beforeCursorState,\n\t\t\t\trecordedVersionId: pastStackElement.beforeVersionId\n\t\t\t};\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tpublic redo(): IUndoRedoResult {\n\n\t\tif (this.future.length > 0) {\n\t\t\tif (this.currentOpenStackElement) {\n\t\t\t\tthrow new Error('How is this possible?');\n\t\t\t}\n\n\t\t\tvar futureStackElement = this.future.pop();\n\n\t\t\ttry {\n\t\t\t\t// Apply all operations\n\t\t\t\tfor (var i = 0; i < futureStackElement.editOperations.length; i++) {\n\t\t\t\t\tfutureStackElement.editOperations[i] = {\n\t\t\t\t\t\toperations: this.model.applyEdits(futureStackElement.editOperations[i].operations)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tthis.clear();\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tthis.past.push(futureStackElement);\n\n\t\t\treturn {\n\t\t\t\tselections: futureStackElement.afterCursorState,\n\t\t\t\trecordedVersionId: futureStackElement.afterVersionId\n\t\t\t};\n\t\t}\n\n\t\treturn null;\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { ITextModel } from 'vs/editor/common/editorCommon';\n\nexport class IndentRange {\n\t_indentRangeBrand: void;\n\tstartLineNumber: number;\n\tendLineNumber: number;\n\tindent: number;\n\n\tconstructor(startLineNumber: number, endLineNumber: number, indent: number) {\n\t\tthis.startLineNumber = startLineNumber;\n\t\tthis.endLineNumber = endLineNumber;\n\t\tthis.indent = indent;\n\t}\n\n\tpublic static deepCloneArr(indentRanges: IndentRange[]): IndentRange[] {\n\t\tlet result: IndentRange[] = [];\n\t\tfor (let i = 0, len = indentRanges.length; i < len; i++) {\n\t\t\tlet r = indentRanges[i];\n\t\t\tresult[i] = new IndentRange(r.startLineNumber, r.endLineNumber, r.indent);\n\t\t}\n\t\treturn result;\n\t}\n}\n\nexport function computeRanges(model: ITextModel, minimumRangeSize: number = 1): IndentRange[] {\n\n\tlet result: IndentRange[] = [];\n\n\tlet previousRegions: { indent: number, line: number }[] = [];\n\tpreviousRegions.push({ indent: -1, line: model.getLineCount() + 1 }); // sentinel, to make sure there's at least one entry\n\n\tfor (let line = model.getLineCount(); line > 0; line--) {\n\t\tlet indent = model.getIndentLevel(line);\n\t\tif (indent === -1) {\n\t\t\tcontinue; // only whitespace\n\t\t}\n\n\t\tlet previous = previousRegions[previousRegions.length - 1];\n\n\t\tif (previous.indent > indent) {\n\t\t\t// discard all regions with larger indent\n\t\t\tdo {\n\t\t\t\tpreviousRegions.pop();\n\t\t\t\tprevious = previousRegions[previousRegions.length - 1];\n\t\t\t} while (previous.indent > indent);\n\n\t\t\t// new folding range\n\t\t\tlet endLineNumber = previous.line - 1;\n\t\t\tif (endLineNumber - line >= minimumRangeSize) {\n\t\t\t\tresult.push(new IndentRange(line, endLineNumber, indent));\n\t\t\t}\n\t\t}\n\t\tif (previous.indent === indent) {\n\t\t\tprevious.line = line;\n\t\t} else { // previous.indent < indent\n\t\t\t// new region with a bigger indent\n\t\t\tpreviousRegions.push({ indent, line });\n\t\t}\n\t}\n\n\treturn result.reverse();\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'use strict';\n\nimport { CharCode } from 'vs/base/common/charCode';\n\n/**\n * Compute the diff in spaces between two line's indentation.\n */\nfunction spacesDiff(a: string, aLength: number, b: string, bLength: number): number {\n\n\t// This can go both ways (e.g.):\n\t// - a: \"\\t\"\n\t// - b: \"\\t \"\n\t// => This should count 1 tab and 4 spaces\n\n\tlet i: number;\n\n\tfor (i = 0; i < aLength && i < bLength; i++) {\n\t\tlet aCharCode = a.charCodeAt(i);\n\t\tlet bCharCode = b.charCodeAt(i);\n\n\t\tif (aCharCode !== bCharCode) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tlet aSpacesCnt = 0, aTabsCount = 0;\n\tfor (let j = i; j < aLength; j++) {\n\t\tlet aCharCode = a.charCodeAt(j);\n\t\tif (aCharCode === CharCode.Space) {\n\t\t\taSpacesCnt++;\n\t\t} else {\n\t\t\taTabsCount++;\n\t\t}\n\t}\n\n\tlet bSpacesCnt = 0, bTabsCount = 0;\n\tfor (let j = i; j < bLength; j++) {\n\t\tlet bCharCode = b.charCodeAt(j);\n\t\tif (bCharCode === CharCode.Space) {\n\t\t\tbSpacesCnt++;\n\t\t} else {\n\t\t\tbTabsCount++;\n\t\t}\n\t}\n\n\tif (aSpacesCnt > 0 && aTabsCount > 0) {\n\t\treturn 0;\n\t}\n\tif (bSpacesCnt > 0 && bTabsCount > 0) {\n\t\treturn 0;\n\t}\n\n\tlet tabsDiff = Math.abs(aTabsCount - bTabsCount);\n\tlet spacesDiff = Math.abs(aSpacesCnt - bSpacesCnt);\n\n\tif (tabsDiff === 0) {\n\t\treturn spacesDiff;\n\t}\n\tif (spacesDiff % tabsDiff === 0) {\n\t\treturn spacesDiff / tabsDiff;\n\t}\n\treturn 0;\n}\n\n/**\n * Result for a guessIndentation\n */\nexport interface IGuessedIndentation {\n\t/**\n\t * If indentation is based on spaces (`insertSpaces` = true), then what is the number of spaces that make an indent?\n\t */\n\ttabSize: number;\n\t/**\n\t * Is indentation based on spaces?\n\t */\n\tinsertSpaces: boolean;\n}\n\nexport function guessIndentation(lines: string[], defaultTabSize: number, defaultInsertSpaces: boolean): IGuessedIndentation {\n\tlet linesIndentedWithTabsCount = 0;\t\t\t\t// number of lines that contain at least one tab in indentation\n\tlet linesIndentedWithSpacesCount = 0;\t\t\t// number of lines that contain only spaces in indentation\n\n\tlet previousLineText = '';\t\t\t\t\t\t// content of latest line that contained non-whitespace chars\n\tlet previousLineIndentation = 0;\t\t\t\t// index at which latest line contained the first non-whitespace char\n\n\tconst ALLOWED_TAB_SIZE_GUESSES = [2, 4, 6, 8];\t// limit guesses for `tabSize` to 2, 4, 6 or 8.\n\tconst MAX_ALLOWED_TAB_SIZE_GUESS = 8;\t\t\t// max(2,4,6,8) = 8\n\n\tlet spacesDiffCount = [0, 0, 0, 0, 0, 0, 0, 0, 0];\t\t// `tabSize` scores\n\n\tfor (let i = 0, len = lines.length; i < len; i++) {\n\t\tlet currentLineText = lines[i];\n\n\t\tlet currentLineHasContent = false;\t\t\t// does `currentLineText` contain non-whitespace chars\n\t\tlet currentLineIndentation = 0;\t\t\t\t// index at which `currentLineText` contains the first non-whitespace char\n\t\tlet currentLineSpacesCount = 0;\t\t\t\t// count of spaces found in `currentLineText` indentation\n\t\tlet currentLineTabsCount = 0;\t\t\t\t// count of tabs found in `currentLineText` indentation\n\t\tfor (let j = 0, lenJ = currentLineText.length; j < lenJ; j++) {\n\t\t\tlet charCode = currentLineText.charCodeAt(j);\n\n\t\t\tif (charCode === CharCode.Tab) {\n\t\t\t\tcurrentLineTabsCount++;\n\t\t\t} else if (charCode === CharCode.Space) {\n\t\t\t\tcurrentLineSpacesCount++;\n\t\t\t} else {\n\t\t\t\t// Hit non whitespace character on this line\n\t\t\t\tcurrentLineHasContent = true;\n\t\t\t\tcurrentLineIndentation = j;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Ignore empty or only whitespace lines\n\t\tif (!currentLineHasContent) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (currentLineTabsCount > 0) {\n\t\t\tlinesIndentedWithTabsCount++;\n\t\t} else if (currentLineSpacesCount > 1) {\n\t\t\tlinesIndentedWithSpacesCount++;\n\t\t}\n\n\t\tlet currentSpacesDiff = spacesDiff(previousLineText, previousLineIndentation, currentLineText, currentLineIndentation);\n\t\tif (currentSpacesDiff <= MAX_ALLOWED_TAB_SIZE_GUESS) {\n\t\t\tspacesDiffCount[currentSpacesDiff]++;\n\t\t}\n\n\t\tpreviousLineText = currentLineText;\n\t\tpreviousLineIndentation = currentLineIndentation;\n\t}\n\n\t// Take into account the last line as well\n\tlet deltaSpacesCount = spacesDiff(previousLineText, previousLineIndentation, '', 0);\n\tif (deltaSpacesCount <= MAX_ALLOWED_TAB_SIZE_GUESS) {\n\t\tspacesDiffCount[deltaSpacesCount]++;\n\t}\n\n\tlet insertSpaces = defaultInsertSpaces;\n\tif (linesIndentedWithTabsCount !== linesIndentedWithSpacesCount) {\n\t\tinsertSpaces = (linesIndentedWithTabsCount < linesIndentedWithSpacesCount);\n\t}\n\n\tlet tabSize = defaultTabSize;\n\tlet tabSizeScore = (insertSpaces ? 0 : 0.1 * lines.length);\n\n\t// console.log(\"score threshold: \" + tabSizeScore);\n\n\tALLOWED_TAB_SIZE_GUESSES.forEach((possibleTabSize) => {\n\t\tlet possibleTabSizeScore = spacesDiffCount[possibleTabSize];\n\t\tif (possibleTabSizeScore > tabSizeScore) {\n\t\t\ttabSizeScore = possibleTabSizeScore;\n\t\t\ttabSize = possibleTabSize;\n\t\t}\n\t});\n\n\n\t// console.log('--------------------------');\n\t// console.log('linesIndentedWithTabsCount: ' + linesIndentedWithTabsCount + ', linesIndentedWithSpacesCount: ' + linesIndentedWithSpacesCount);\n\t// console.log('spacesDiffCount: ' + spacesDiffCount);\n\t// console.log('tabSize: ' + tabSize + ', tabSizeScore: ' + tabSizeScore);\n\n\treturn {\n\t\tinsertSpaces: insertSpaces,\n\t\ttabSize: tabSize\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { IRange } from 'vs/editor/common/core/range';\n\n/**\n * @internal\n */\nexport const TextModelEventType = {\n\tModelDispose: 'modelDispose',\n\tModelTokensChanged: 'modelTokensChanged',\n\tModelLanguageChanged: 'modelLanguageChanged',\n\tModelOptionsChanged: 'modelOptionsChanged',\n\tModelContentChanged: 'contentChanged',\n\tModelRawContentChanged2: 'rawContentChanged2',\n\tModelDecorationsChanged: 'decorationsChanged',\n};\n\n/**\n * An event describing that the current mode associated with a model has changed.\n */\nexport interface IModelLanguageChangedEvent {\n\t/**\n\t * Previous language\n\t */\n\treadonly oldLanguage: string;\n\t/**\n\t * New language\n\t */\n\treadonly newLanguage: string;\n}\n\nexport interface IModelContentChange {\n\t/**\n\t * The range that got replaced.\n\t */\n\treadonly range: IRange;\n\t/**\n\t * The length of the range that got replaced.\n\t */\n\treadonly rangeLength: number;\n\t/**\n\t * The new text for the range.\n\t */\n\treadonly text: string;\n}\n\n/**\n * An event describing a change in the text of a model.\n */\nexport interface IModelContentChangedEvent {\n\treadonly changes: IModelContentChange[];\n\t/**\n\t * The (new) end-of-line character.\n\t */\n\treadonly eol: string;\n\t/**\n\t * The new version id the model has transitioned to.\n\t */\n\treadonly versionId: number;\n\t/**\n\t * Flag that indicates that this event was generated while undoing.\n\t */\n\treadonly isUndoing: boolean;\n\t/**\n\t * Flag that indicates that this event was generated while redoing.\n\t */\n\treadonly isRedoing: boolean;\n\t/**\n\t * Flag that indicates that all decorations were lost with this edit.\n\t * The model has been reset to a new value.\n\t */\n\treadonly isFlush: boolean;\n}\n\n/**\n * An event describing that model decorations have changed.\n */\nexport interface IModelDecorationsChangedEvent {\n\t/**\n\t * Lists of ids for added decorations.\n\t */\n\treadonly addedDecorations: string[];\n\t/**\n\t * Lists of ids for changed decorations.\n\t */\n\treadonly changedDecorations: string[];\n\t/**\n\t * List of ids for removed decorations.\n\t */\n\treadonly removedDecorations: string[];\n}\n\n/**\n * An event describing that some ranges of lines have been tokenized (their tokens have changed).\n */\nexport interface IModelTokensChangedEvent {\n\treadonly ranges: {\n\t\t/**\n\t\t * The start of the range (inclusive)\n\t\t */\n\t\treadonly fromLineNumber: number;\n\t\t/**\n\t\t * The end of the range (inclusive)\n\t\t */\n\t\treadonly toLineNumber: number;\n\t}[];\n}\n\nexport interface IModelOptionsChangedEvent {\n\treadonly tabSize: boolean;\n\treadonly insertSpaces: boolean;\n\treadonly trimAutoWhitespace: boolean;\n}\n\n/**\n * @internal\n */\nexport const enum RawContentChangedType {\n\tFlush = 1,\n\tLineChanged = 2,\n\tLinesDeleted = 3,\n\tLinesInserted = 4,\n\tEOLChanged = 5\n}\n\n/**\n * An event describing that a model has been reset to a new value.\n * @internal\n */\nexport class ModelRawFlush {\n\tpublic readonly changeType = RawContentChangedType.Flush;\n}\n\n/**\n * An event describing that a line has changed in a model.\n * @internal\n */\nexport class ModelRawLineChanged {\n\tpublic readonly changeType = RawContentChangedType.LineChanged;\n\t/**\n\t * The line that has changed.\n\t */\n\tpublic readonly lineNumber: number;\n\t/**\n\t * The new value of the line.\n\t */\n\tpublic readonly detail: string;\n\n\tconstructor(lineNumber: number, detail: string) {\n\t\tthis.lineNumber = lineNumber;\n\t\tthis.detail = detail;\n\t}\n}\n\n/**\n * An event describing that line(s) have been deleted in a model.\n * @internal\n */\nexport class ModelRawLinesDeleted {\n\tpublic readonly changeType = RawContentChangedType.LinesDeleted;\n\t/**\n\t * At what line the deletion began (inclusive).\n\t */\n\tpublic readonly fromLineNumber: number;\n\t/**\n\t * At what line the deletion stopped (inclusive).\n\t */\n\tpublic readonly toLineNumber: number;\n\n\tconstructor(fromLineNumber: number, toLineNumber: number) {\n\t\tthis.fromLineNumber = fromLineNumber;\n\t\tthis.toLineNumber = toLineNumber;\n\t}\n}\n\n/**\n * An event describing that line(s) have been inserted in a model.\n * @internal\n */\nexport class ModelRawLinesInserted {\n\tpublic readonly changeType = RawContentChangedType.LinesInserted;\n\t/**\n\t * Before what line did the insertion begin\n\t */\n\tpublic readonly fromLineNumber: number;\n\t/**\n\t * `toLineNumber` - `fromLineNumber` + 1 denotes the number of lines that were inserted\n\t */\n\tpublic readonly toLineNumber: number;\n\t/**\n\t * The text that was inserted\n\t */\n\tpublic readonly detail: string;\n\n\tconstructor(fromLineNumber: number, toLineNumber: number, detail: string) {\n\t\tthis.fromLineNumber = fromLineNumber;\n\t\tthis.toLineNumber = toLineNumber;\n\t\tthis.detail = detail;\n\t}\n}\n\n/**\n * An event describing that a model has had its EOL changed.\n * @internal\n */\nexport class ModelRawEOLChanged {\n\tpublic readonly changeType = RawContentChangedType.EOLChanged;\n}\n\n/**\n * @internal\n */\nexport type ModelRawChange = ModelRawFlush | ModelRawLineChanged | ModelRawLinesDeleted | ModelRawLinesInserted | ModelRawEOLChanged;\n\n/**\n * An event describing a change in the text of a model.\n * @internal\n */\nexport class ModelRawContentChangedEvent {\n\n\tpublic readonly changes: ModelRawChange[];\n\t/**\n\t * The new version id the model has transitioned to.\n\t */\n\tpublic readonly versionId: number;\n\t/**\n\t * Flag that indicates that this event was generated while undoing.\n\t */\n\tpublic readonly isUndoing: boolean;\n\t/**\n\t * Flag that indicates that this event was generated while redoing.\n\t */\n\tpublic readonly isRedoing: boolean;\n\n\tconstructor(changes: ModelRawChange[], versionId: number, isUndoing: boolean, isRedoing: boolean) {\n\t\tthis.changes = changes;\n\t\tthis.versionId = versionId;\n\t\tthis.isUndoing = isUndoing;\n\t\tthis.isRedoing = isRedoing;\n\t}\n\n\tpublic containsEvent(type: RawContentChangedType): boolean {\n\t\tfor (let i = 0, len = this.changes.length; i < len; i++) {\n\t\t\tconst change = this.changes[i];\n\t\t\tif (change.changeType === type) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as strings from 'vs/base/common/strings';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport { FindMatch, EndOfLinePreference } from 'vs/editor/common/editorCommon';\nimport { CharCode } from 'vs/base/common/charCode';\nimport { TextModel } from 'vs/editor/common/model/textModel';\nimport { getMapForWordSeparators, WordCharacterClassifier, WordCharacterClass } from 'vs/editor/common/controller/wordCharacterClassifier';\n\nconst LIMIT_FIND_COUNT = 999;\n\nexport class SearchParams {\n\tpublic readonly searchString: string;\n\tpublic readonly isRegex: boolean;\n\tpublic readonly matchCase: boolean;\n\tpublic readonly wordSeparators: string;\n\n\tconstructor(searchString: string, isRegex: boolean, matchCase: boolean, wordSeparators: string) {\n\t\tthis.searchString = searchString;\n\t\tthis.isRegex = isRegex;\n\t\tthis.matchCase = matchCase;\n\t\tthis.wordSeparators = wordSeparators;\n\t}\n\n\tprivate static _isMultilineRegexSource(searchString: string): boolean {\n\t\tif (!searchString || searchString.length === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (let i = 0, len = searchString.length; i < len; i++) {\n\t\t\tconst chCode = searchString.charCodeAt(i);\n\n\t\t\tif (chCode === CharCode.Backslash) {\n\n\t\t\t\t// move to next char\n\t\t\t\ti++;\n\n\t\t\t\tif (i >= len) {\n\t\t\t\t\t// string ends with a \\\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst nextChCode = searchString.charCodeAt(i);\n\t\t\t\tif (nextChCode === CharCode.n || nextChCode === CharCode.r) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tpublic parseSearchRequest(): SearchData {\n\t\tif (this.searchString === '') {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Try to create a RegExp out of the params\n\t\tlet multiline: boolean;\n\t\tif (this.isRegex) {\n\t\t\tmultiline = SearchParams._isMultilineRegexSource(this.searchString);\n\t\t} else {\n\t\t\tmultiline = (this.searchString.indexOf('\\n') >= 0);\n\t\t}\n\n\t\tlet regex: RegExp = null;\n\t\ttry {\n\t\t\tregex = strings.createRegExp(this.searchString, this.isRegex, {\n\t\t\t\tmatchCase: this.matchCase,\n\t\t\t\twholeWord: false,\n\t\t\t\tmultiline: multiline,\n\t\t\t\tglobal: true\n\t\t\t});\n\t\t} catch (err) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (!regex) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet canUseSimpleSearch = (!this.isRegex && !multiline);\n\t\tif (canUseSimpleSearch && this.searchString.toLowerCase() !== this.searchString.toUpperCase()) {\n\t\t\t// casing might make a difference\n\t\t\tcanUseSimpleSearch = this.matchCase;\n\t\t}\n\n\t\treturn new SearchData(regex, this.wordSeparators ? getMapForWordSeparators(this.wordSeparators) : null, canUseSimpleSearch ? this.searchString : null);\n\t}\n}\n\nexport class SearchData {\n\n\t/**\n\t * The regex to search for. Always defined.\n\t */\n\tpublic readonly regex: RegExp;\n\t/**\n\t * The word separator classifier.\n\t */\n\tpublic readonly wordSeparators: WordCharacterClassifier;\n\t/**\n\t * The simple string to search for (if possible).\n\t */\n\tpublic readonly simpleSearch: string;\n\n\tconstructor(regex: RegExp, wordSeparators: WordCharacterClassifier, simpleSearch: string) {\n\t\tthis.regex = regex;\n\t\tthis.wordSeparators = wordSeparators;\n\t\tthis.simpleSearch = simpleSearch;\n\t}\n}\n\nfunction createFindMatch(range: Range, rawMatches: RegExpExecArray, captureMatches: boolean): FindMatch {\n\tif (!captureMatches) {\n\t\treturn new FindMatch(range, null);\n\t}\n\tlet matches: string[] = [];\n\tfor (let i = 0, len = rawMatches.length; i < len; i++) {\n\t\tmatches[i] = rawMatches[i];\n\t}\n\treturn new FindMatch(range, matches);\n}\n\nexport class TextModelSearch {\n\n\tpublic static findMatches(model: TextModel, searchParams: SearchParams, searchRange: Range, captureMatches: boolean, limitResultCount: number): FindMatch[] {\n\t\tconst searchData = searchParams.parseSearchRequest();\n\t\tif (!searchData) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (searchData.regex.multiline) {\n\t\t\treturn this._doFindMatchesMultiline(model, searchRange, new Searcher(searchData.wordSeparators, searchData.regex), captureMatches, limitResultCount);\n\t\t}\n\t\treturn this._doFindMatchesLineByLine(model, searchRange, searchData, captureMatches, limitResultCount);\n\t}\n\n\t/**\n\t * Multiline search always executes on the lines concatenated with \\n.\n\t * We must therefore compensate for the count of \\n in case the model is CRLF\n\t */\n\tprivate static _getMultilineMatchRange(model: TextModel, deltaOffset: number, text: string, matchIndex: number, match0: string): Range {\n\t\tlet startOffset: number;\n\t\tif (model.getEOL() === '\\r\\n') {\n\t\t\tlet lineFeedCountBeforeMatch = 0;\n\t\t\tfor (let i = 0; i < matchIndex; i++) {\n\t\t\t\tlet chCode = text.charCodeAt(i);\n\t\t\t\tif (chCode === CharCode.LineFeed) {\n\t\t\t\t\tlineFeedCountBeforeMatch++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tstartOffset = deltaOffset + matchIndex + lineFeedCountBeforeMatch /* add as many \\r as there were \\n */;\n\t\t} else {\n\t\t\tstartOffset = deltaOffset + matchIndex;\n\t\t}\n\n\t\tlet endOffset: number;\n\t\tif (model.getEOL() === '\\r\\n') {\n\t\t\tlet lineFeedCountInMatch = 0;\n\t\t\tfor (let i = 0, len = match0.length; i < len; i++) {\n\t\t\t\tlet chCode = text.charCodeAt(i + matchIndex);\n\t\t\t\tif (chCode === CharCode.LineFeed) {\n\t\t\t\t\tlineFeedCountInMatch++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tendOffset = startOffset + match0.length + lineFeedCountInMatch /* add as many \\r as there were \\n */;\n\t\t} else {\n\t\t\tendOffset = startOffset + match0.length;\n\t\t}\n\n\t\tconst startPosition = model.getPositionAt(startOffset);\n\t\tconst endPosition = model.getPositionAt(endOffset);\n\t\treturn new Range(startPosition.lineNumber, startPosition.column, endPosition.lineNumber, endPosition.column);\n\t}\n\n\tprivate static _doFindMatchesMultiline(model: TextModel, searchRange: Range, searcher: Searcher, captureMatches: boolean, limitResultCount: number): FindMatch[] {\n\t\tconst deltaOffset = model.getOffsetAt(searchRange.getStartPosition());\n\t\t// We always execute multiline search over the lines joined with \\n\n\t\t// This makes it that \\n will match the EOL for both CRLF and LF models\n\t\t// We compensate for offset errors in `_getMultilineMatchRange`\n\t\tconst text = model.getValueInRange(searchRange, EndOfLinePreference.LF);\n\n\t\tconst result: FindMatch[] = [];\n\t\tlet counter = 0;\n\n\t\tlet m: RegExpExecArray;\n\t\tsearcher.reset(0);\n\t\twhile ((m = searcher.next(text))) {\n\t\t\tresult[counter++] = createFindMatch(this._getMultilineMatchRange(model, deltaOffset, text, m.index, m[0]), m, captureMatches);\n\t\t\tif (counter >= limitResultCount) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate static _doFindMatchesLineByLine(model: TextModel, searchRange: Range, searchData: SearchData, captureMatches: boolean, limitResultCount: number): FindMatch[] {\n\t\tconst result: FindMatch[] = [];\n\t\tlet resultLen = 0;\n\n\t\t// Early case for a search range that starts & stops on the same line number\n\t\tif (searchRange.startLineNumber === searchRange.endLineNumber) {\n\t\t\tconst text = model.getLineContent(searchRange.startLineNumber).substring(searchRange.startColumn - 1, searchRange.endColumn - 1);\n\t\t\tresultLen = this._findMatchesInLine(searchData, text, searchRange.startLineNumber, searchRange.startColumn - 1, resultLen, result, captureMatches, limitResultCount);\n\t\t\treturn result;\n\t\t}\n\n\t\t// Collect results from first line\n\t\tconst text = model.getLineContent(searchRange.startLineNumber).substring(searchRange.startColumn - 1);\n\t\tresultLen = this._findMatchesInLine(searchData, text, searchRange.startLineNumber, searchRange.startColumn - 1, resultLen, result, captureMatches, limitResultCount);\n\n\t\t// Collect results from middle lines\n\t\tfor (let lineNumber = searchRange.startLineNumber + 1; lineNumber < searchRange.endLineNumber && resultLen < limitResultCount; lineNumber++) {\n\t\t\tresultLen = this._findMatchesInLine(searchData, model.getLineContent(lineNumber), lineNumber, 0, resultLen, result, captureMatches, limitResultCount);\n\t\t}\n\n\t\t// Collect results from last line\n\t\tif (resultLen < limitResultCount) {\n\t\t\tconst text = model.getLineContent(searchRange.endLineNumber).substring(0, searchRange.endColumn - 1);\n\t\t\tresultLen = this._findMatchesInLine(searchData, text, searchRange.endLineNumber, 0, resultLen, result, captureMatches, limitResultCount);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate static _findMatchesInLine(searchData: SearchData, text: string, lineNumber: number, deltaOffset: number, resultLen: number, result: FindMatch[], captureMatches: boolean, limitResultCount: number): number {\n\t\tconst wordSeparators = searchData.wordSeparators;\n\t\tif (!captureMatches && searchData.simpleSearch) {\n\t\t\tconst searchString = searchData.simpleSearch;\n\t\t\tconst searchStringLen = searchString.length;\n\t\t\tconst textLength = text.length;\n\n\t\t\tlet lastMatchIndex = -searchStringLen;\n\t\t\twhile ((lastMatchIndex = text.indexOf(searchString, lastMatchIndex + searchStringLen)) !== -1) {\n\t\t\t\tif (!wordSeparators || isValidMatch(wordSeparators, text, textLength, lastMatchIndex, searchStringLen)) {\n\t\t\t\t\tresult[resultLen++] = new FindMatch(new Range(lineNumber, lastMatchIndex + 1 + deltaOffset, lineNumber, lastMatchIndex + 1 + searchStringLen + deltaOffset), null);\n\t\t\t\t\tif (resultLen >= limitResultCount) {\n\t\t\t\t\t\treturn resultLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn resultLen;\n\t\t}\n\n\t\tconst searcher = new Searcher(searchData.wordSeparators, searchData.regex);\n\t\tlet m: RegExpExecArray;\n\t\t// Reset regex to search from the beginning\n\t\tsearcher.reset(0);\n\t\tdo {\n\t\t\tm = searcher.next(text);\n\t\t\tif (m) {\n\t\t\t\tresult[resultLen++] = createFindMatch(new Range(lineNumber, m.index + 1 + deltaOffset, lineNumber, m.index + 1 + m[0].length + deltaOffset), m, captureMatches);\n\t\t\t\tif (resultLen >= limitResultCount) {\n\t\t\t\t\treturn resultLen;\n\t\t\t\t}\n\t\t\t}\n\t\t} while (m);\n\t\treturn resultLen;\n\t}\n\n\tpublic static findNextMatch(model: TextModel, searchParams: SearchParams, searchStart: Position, captureMatches: boolean): FindMatch {\n\t\tconst searchData = searchParams.parseSearchRequest();\n\t\tif (!searchData) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst searcher = new Searcher(searchData.wordSeparators, searchData.regex);\n\n\t\tif (searchData.regex.multiline) {\n\t\t\treturn this._doFindNextMatchMultiline(model, searchStart, searcher, captureMatches);\n\t\t}\n\t\treturn this._doFindNextMatchLineByLine(model, searchStart, searcher, captureMatches);\n\t}\n\n\tprivate static _doFindNextMatchMultiline(model: TextModel, searchStart: Position, searcher: Searcher, captureMatches: boolean): FindMatch {\n\t\tconst searchTextStart = new Position(searchStart.lineNumber, 1);\n\t\tconst deltaOffset = model.getOffsetAt(searchTextStart);\n\t\tconst lineCount = model.getLineCount();\n\t\t// We always execute multiline search over the lines joined with \\n\n\t\t// This makes it that \\n will match the EOL for both CRLF and LF models\n\t\t// We compensate for offset errors in `_getMultilineMatchRange`\n\t\tconst text = model.getValueInRange(new Range(searchTextStart.lineNumber, searchTextStart.column, lineCount, model.getLineMaxColumn(lineCount)), EndOfLinePreference.LF);\n\t\tsearcher.reset(searchStart.column - 1);\n\t\tlet m = searcher.next(text);\n\t\tif (m) {\n\t\t\treturn createFindMatch(\n\t\t\t\tthis._getMultilineMatchRange(model, deltaOffset, text, m.index, m[0]),\n\t\t\t\tm,\n\t\t\t\tcaptureMatches\n\t\t\t);\n\t\t}\n\n\t\tif (searchStart.lineNumber !== 1 || searchStart.column !== 1) {\n\t\t\t// Try again from the top\n\t\t\treturn this._doFindNextMatchMultiline(model, new Position(1, 1), searcher, captureMatches);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate static _doFindNextMatchLineByLine(model: TextModel, searchStart: Position, searcher: Searcher, captureMatches: boolean): FindMatch {\n\t\tconst lineCount = model.getLineCount();\n\t\tconst startLineNumber = searchStart.lineNumber;\n\n\t\t// Look in first line\n\t\tconst text = model.getLineContent(startLineNumber);\n\t\tconst r = this._findFirstMatchInLine(searcher, text, startLineNumber, searchStart.column, captureMatches);\n\t\tif (r) {\n\t\t\treturn r;\n\t\t}\n\n\t\tfor (let i = 1; i <= lineCount; i++) {\n\t\t\tconst lineIndex = (startLineNumber + i - 1) % lineCount;\n\t\t\tconst text = model.getLineContent(lineIndex + 1);\n\t\t\tconst r = this._findFirstMatchInLine(searcher, text, lineIndex + 1, 1, captureMatches);\n\t\t\tif (r) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate static _findFirstMatchInLine(searcher: Searcher, text: string, lineNumber: number, fromColumn: number, captureMatches: boolean): FindMatch {\n\t\t// Set regex to search from column\n\t\tsearcher.reset(fromColumn - 1);\n\t\tconst m: RegExpExecArray = searcher.next(text);\n\t\tif (m) {\n\t\t\treturn createFindMatch(\n\t\t\t\tnew Range(lineNumber, m.index + 1, lineNumber, m.index + 1 + m[0].length),\n\t\t\t\tm,\n\t\t\t\tcaptureMatches\n\t\t\t);\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic static findPreviousMatch(model: TextModel, searchParams: SearchParams, searchStart: Position, captureMatches: boolean): FindMatch {\n\t\tconst searchData = searchParams.parseSearchRequest();\n\t\tif (!searchData) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst searcher = new Searcher(searchData.wordSeparators, searchData.regex);\n\n\t\tif (searchData.regex.multiline) {\n\t\t\treturn this._doFindPreviousMatchMultiline(model, searchStart, searcher, captureMatches);\n\t\t}\n\t\treturn this._doFindPreviousMatchLineByLine(model, searchStart, searcher, captureMatches);\n\t}\n\n\tprivate static _doFindPreviousMatchMultiline(model: TextModel, searchStart: Position, searcher: Searcher, captureMatches: boolean): FindMatch {\n\t\tconst matches = this._doFindMatchesMultiline(model, new Range(1, 1, searchStart.lineNumber, searchStart.column), searcher, captureMatches, 10 * LIMIT_FIND_COUNT);\n\t\tif (matches.length > 0) {\n\t\t\treturn matches[matches.length - 1];\n\t\t}\n\n\t\tconst lineCount = model.getLineCount();\n\t\tif (searchStart.lineNumber !== lineCount || searchStart.column !== model.getLineMaxColumn(lineCount)) {\n\t\t\t// Try again with all content\n\t\t\treturn this._doFindPreviousMatchMultiline(model, new Position(lineCount, model.getLineMaxColumn(lineCount)), searcher, captureMatches);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate static _doFindPreviousMatchLineByLine(model: TextModel, searchStart: Position, searcher: Searcher, captureMatches: boolean): FindMatch {\n\t\tconst lineCount = model.getLineCount();\n\t\tconst startLineNumber = searchStart.lineNumber;\n\n\t\t// Look in first line\n\t\tconst text = model.getLineContent(startLineNumber).substring(0, searchStart.column - 1);\n\t\tconst r = this._findLastMatchInLine(searcher, text, startLineNumber, captureMatches);\n\t\tif (r) {\n\t\t\treturn r;\n\t\t}\n\n\t\tfor (let i = 1; i <= lineCount; i++) {\n\t\t\tconst lineIndex = (lineCount + startLineNumber - i - 1) % lineCount;\n\t\t\tconst text = model.getLineContent(lineIndex + 1);\n\t\t\tconst r = this._findLastMatchInLine(searcher, text, lineIndex + 1, captureMatches);\n\t\t\tif (r) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate static _findLastMatchInLine(searcher: Searcher, text: string, lineNumber: number, captureMatches: boolean): FindMatch {\n\t\tlet bestResult: FindMatch = null;\n\t\tlet m: RegExpExecArray;\n\t\tsearcher.reset(0);\n\t\twhile ((m = searcher.next(text))) {\n\t\t\tbestResult = createFindMatch(new Range(lineNumber, m.index + 1, lineNumber, m.index + 1 + m[0].length), m, captureMatches);\n\t\t}\n\t\treturn bestResult;\n\t}\n}\n\nfunction leftIsWordBounday(wordSeparators: WordCharacterClassifier, text: string, textLength: number, matchStartIndex: number, matchLength: number): boolean {\n\tif (matchStartIndex === 0) {\n\t\t// Match starts at start of string\n\t\treturn true;\n\t}\n\n\tconst charBefore = text.charCodeAt(matchStartIndex - 1);\n\tif (wordSeparators.get(charBefore) !== WordCharacterClass.Regular) {\n\t\t// The character before the match is a word separator\n\t\treturn true;\n\t}\n\n\tif (matchLength > 0) {\n\t\tconst firstCharInMatch = text.charCodeAt(matchStartIndex);\n\t\tif (wordSeparators.get(firstCharInMatch) !== WordCharacterClass.Regular) {\n\t\t\t// The first character inside the match is a word separator\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\nfunction rightIsWordBounday(wordSeparators: WordCharacterClassifier, text: string, textLength: number, matchStartIndex: number, matchLength: number): boolean {\n\tif (matchStartIndex + matchLength === textLength) {\n\t\t// Match ends at end of string\n\t\treturn true;\n\t}\n\n\tconst charAfter = text.charCodeAt(matchStartIndex + matchLength);\n\tif (wordSeparators.get(charAfter) !== WordCharacterClass.Regular) {\n\t\t// The character after the match is a word separator\n\t\treturn true;\n\t}\n\n\tif (matchLength > 0) {\n\t\tconst lastCharInMatch = text.charCodeAt(matchStartIndex + matchLength - 1);\n\t\tif (wordSeparators.get(lastCharInMatch) !== WordCharacterClass.Regular) {\n\t\t\t// The last character in the match is a word separator\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\nfunction isValidMatch(wordSeparators: WordCharacterClassifier, text: string, textLength: number, matchStartIndex: number, matchLength: number): boolean {\n\treturn (\n\t\tleftIsWordBounday(wordSeparators, text, textLength, matchStartIndex, matchLength)\n\t\t&& rightIsWordBounday(wordSeparators, text, textLength, matchStartIndex, matchLength)\n\t);\n}\n\nclass Searcher {\n\tprivate _wordSeparators: WordCharacterClassifier;\n\tprivate _searchRegex: RegExp;\n\tprivate _prevMatchStartIndex: number;\n\tprivate _prevMatchLength: number;\n\n\tconstructor(wordSeparators: WordCharacterClassifier, searchRegex: RegExp, ) {\n\t\tthis._wordSeparators = wordSeparators;\n\t\tthis._searchRegex = searchRegex;\n\t\tthis._prevMatchStartIndex = -1;\n\t\tthis._prevMatchLength = 0;\n\t}\n\n\tpublic reset(lastIndex: number): void {\n\t\tthis._searchRegex.lastIndex = lastIndex;\n\t\tthis._prevMatchStartIndex = -1;\n\t\tthis._prevMatchLength = 0;\n\t}\n\n\tpublic next(text: string): RegExpExecArray {\n\t\tconst textLength = text.length;\n\n\t\tlet m: RegExpExecArray;\n\t\tdo {\n\t\t\tif (this._prevMatchStartIndex + this._prevMatchLength === textLength) {\n\t\t\t\t// Reached the end of the line\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tm = this._searchRegex.exec(text);\n\t\t\tif (!m) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst matchStartIndex = m.index;\n\t\t\tconst matchLength = m[0].length;\n\t\t\tif (matchStartIndex === this._prevMatchStartIndex && matchLength === this._prevMatchLength) {\n\t\t\t\t// Exit early if the regex matches the same range twice\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tthis._prevMatchStartIndex = matchStartIndex;\n\t\t\tthis._prevMatchLength = matchLength;\n\n\t\t\tif (!this._wordSeparators || isValidMatch(this._wordSeparators, text, textLength, matchStartIndex, matchLength)) {\n\t\t\t\treturn m;\n\t\t\t}\n\n\t\t} while (m);\n\n\t\treturn null;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as strings from 'vs/base/common/strings';\nimport { DefaultEndOfLine } from 'vs/editor/common/editorCommon';\n\n/**\n * A processed string ready to be turned into an editor model.\n */\nexport interface IRawTextSource {\n\t/**\n\t * The entire text length.\n\t */\n\treadonly length: number;\n\t/**\n\t * The text split into lines.\n\t */\n\treadonly lines: string[];\n\t/**\n\t * The BOM (leading character sequence of the file).\n\t */\n\treadonly BOM: string;\n\t/**\n\t * The number of lines ending with '\\r\\n'\n\t */\n\treadonly totalCRCount: number;\n\t/**\n\t * The text contains Unicode characters classified as \"R\" or \"AL\".\n\t */\n\treadonly containsRTL: boolean;\n\t/**\n\t * The text contains only characters inside the ASCII range 32-126 or \\t \\r \\n\n\t */\n\treadonly isBasicASCII: boolean;\n}\n\nexport class RawTextSource {\n\n\tpublic static fromString(rawText: string): IRawTextSource {\n\t\t// Count the number of lines that end with \\r\\n\n\t\tlet carriageReturnCnt = 0;\n\t\tlet lastCarriageReturnIndex = -1;\n\t\twhile ((lastCarriageReturnIndex = rawText.indexOf('\\r', lastCarriageReturnIndex + 1)) !== -1) {\n\t\t\tcarriageReturnCnt++;\n\t\t}\n\n\t\tconst containsRTL = strings.containsRTL(rawText);\n\t\tconst isBasicASCII = (containsRTL ? false : strings.isBasicASCII(rawText));\n\n\t\t// Split the text into lines\n\t\tconst lines = rawText.split(/\\r\\n|\\r|\\n/);\n\n\t\t// Remove the BOM (if present)\n\t\tlet BOM = '';\n\t\tif (strings.startsWithUTF8BOM(lines[0])) {\n\t\t\tBOM = strings.UTF8_BOM_CHARACTER;\n\t\t\tlines[0] = lines[0].substr(1);\n\t\t}\n\n\t\treturn {\n\t\t\tBOM: BOM,\n\t\t\tlines: lines,\n\t\t\tlength: rawText.length,\n\t\t\tcontainsRTL: containsRTL,\n\t\t\tisBasicASCII: isBasicASCII,\n\t\t\ttotalCRCount: carriageReturnCnt\n\t\t};\n\t}\n\n}\n\n/**\n * A processed string with its EOL resolved ready to be turned into an editor model.\n */\nexport interface ITextSource {\n\t/**\n\t * The entire text length.\n\t */\n\treadonly length: number;\n\t/**\n\t * The text split into lines.\n\t */\n\treadonly lines: string[];\n\t/**\n\t * The BOM (leading character sequence of the file).\n\t */\n\treadonly BOM: string;\n\t/**\n\t * The end of line sequence.\n\t */\n\treadonly EOL: string;\n\t/**\n\t * The text contains Unicode characters classified as \"R\" or \"AL\".\n\t */\n\treadonly containsRTL: boolean;\n\t/**\n\t * The text contains only characters inside the ASCII range 32-126 or \\t \\r \\n\n\t */\n\treadonly isBasicASCII: boolean;\n}\n\nexport class TextSource {\n\n\t/**\n\t * if text source is empty or with precisely one line, returns null. No end of line is detected.\n\t * if text source contains more lines ending with '\\r\\n', returns '\\r\\n'.\n\t * Otherwise returns '\\n'. More lines end with '\\n'.\n\t */\n\tprivate static _getEOL(rawTextSource: IRawTextSource, defaultEOL: DefaultEndOfLine): '\\r\\n' | '\\n' {\n\t\tconst lineFeedCnt = rawTextSource.lines.length - 1;\n\t\tif (lineFeedCnt === 0) {\n\t\t\t// This is an empty file or a file with precisely one line\n\t\t\treturn (defaultEOL === DefaultEndOfLine.LF ? '\\n' : '\\r\\n');\n\t\t}\n\t\tif (rawTextSource.totalCRCount > lineFeedCnt / 2) {\n\t\t\t// More than half of the file contains \\r\\n ending lines\n\t\t\treturn '\\r\\n';\n\t\t}\n\t\t// At least one line more ends in \\n\n\t\treturn '\\n';\n\t}\n\n\tpublic static fromRawTextSource(rawTextSource: IRawTextSource, defaultEOL: DefaultEndOfLine): ITextSource {\n\t\treturn {\n\t\t\tlength: rawTextSource.length,\n\t\t\tlines: rawTextSource.lines,\n\t\t\tBOM: rawTextSource.BOM,\n\t\t\tEOL: this._getEOL(rawTextSource, defaultEOL),\n\t\t\tcontainsRTL: rawTextSource.containsRTL,\n\t\t\tisBasicASCII: rawTextSource.isBasicASCII,\n\t\t};\n\t}\n\n\tpublic static fromString(text: string, defaultEOL: DefaultEndOfLine): ITextSource {\n\t\treturn this.fromRawTextSource(RawTextSource.fromString(text), defaultEOL);\n\t}\n\n\tpublic static create(source: string | IRawTextSource, defaultEOL: DefaultEndOfLine): ITextSource {\n\t\tif (typeof source === 'string') {\n\t\t\treturn this.fromString(source, defaultEOL);\n\t\t}\n\n\t\treturn this.fromRawTextSource(source, defaultEOL);\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { ColorId, FontStyle, StandardTokenType, MetadataConsts, LanguageId } from 'vs/editor/common/modes';\n\nexport class TokenMetadata {\n\n\tpublic static getLanguageId(metadata: number): LanguageId {\n\t\treturn (metadata & MetadataConsts.LANGUAGEID_MASK) >>> MetadataConsts.LANGUAGEID_OFFSET;\n\t}\n\n\tpublic static getTokenType(metadata: number): StandardTokenType {\n\t\treturn (metadata & MetadataConsts.TOKEN_TYPE_MASK) >>> MetadataConsts.TOKEN_TYPE_OFFSET;\n\t}\n\n\tpublic static getFontStyle(metadata: number): FontStyle {\n\t\treturn (metadata & MetadataConsts.FONT_STYLE_MASK) >>> MetadataConsts.FONT_STYLE_OFFSET;\n\t}\n\n\tpublic static getForeground(metadata: number): ColorId {\n\t\treturn (metadata & MetadataConsts.FOREGROUND_MASK) >>> MetadataConsts.FOREGROUND_OFFSET;\n\t}\n\n\tpublic static getBackground(metadata: number): ColorId {\n\t\treturn (metadata & MetadataConsts.BACKGROUND_MASK) >>> MetadataConsts.BACKGROUND_OFFSET;\n\t}\n\n\tpublic static getClassNameFromMetadata(metadata: number): string {\n\t\tlet foreground = this.getForeground(metadata);\n\t\tlet className = 'mtk' + foreground;\n\n\t\tlet fontStyle = this.getFontStyle(metadata);\n\t\tif (fontStyle & FontStyle.Italic) {\n\t\t\tclassName += ' mtki';\n\t\t}\n\t\tif (fontStyle & FontStyle.Bold) {\n\t\t\tclassName += ' mtkb';\n\t\t}\n\t\tif (fontStyle & FontStyle.Underline) {\n\t\t\tclassName += ' mtku';\n\t\t}\n\n\t\treturn className;\n\t}\n\n\tpublic static getInlineStyleFromMetadata(metadata: number, colorMap: string[]): string {\n\t\tconst foreground = this.getForeground(metadata);\n\t\tconst fontStyle = this.getFontStyle(metadata);\n\n\t\tlet result = `color: ${colorMap[foreground]};`;\n\t\tif (fontStyle & FontStyle.Italic) {\n\t\t\tresult += 'font-style: italic;';\n\t\t}\n\t\tif (fontStyle & FontStyle.Bold) {\n\t\t\tresult += 'font-weight: bold;';\n\t\t}\n\t\tif (fontStyle & FontStyle.Underline) {\n\t\t\tresult += 'text-decoration: underline;';\n\t\t}\n\t\treturn result;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { ColorId } from 'vs/editor/common/modes';\nimport { TokenMetadata } from 'vs/editor/common/model/tokensBinaryEncoding';\n\n/**\n * A token on a line.\n */\nexport class ViewLineToken {\n\t_viewLineTokenBrand: void;\n\n\t/**\n\t * last char index of this token (not inclusive).\n\t */\n\tpublic readonly endIndex: number;\n\tprivate readonly _metadata: number;\n\n\tconstructor(endIndex: number, metadata: number) {\n\t\tthis.endIndex = endIndex;\n\t\tthis._metadata = metadata;\n\t}\n\n\tpublic getForeground(): ColorId {\n\t\treturn TokenMetadata.getForeground(this._metadata);\n\t}\n\n\tpublic getType(): string {\n\t\treturn TokenMetadata.getClassNameFromMetadata(this._metadata);\n\t}\n\n\tpublic getInlineStyle(colorMap: string[]): string {\n\t\treturn TokenMetadata.getInlineStyleFromMetadata(this._metadata, colorMap);\n\t}\n\n\tprivate static _equals(a: ViewLineToken, b: ViewLineToken): boolean {\n\t\treturn (\n\t\t\ta.endIndex === b.endIndex\n\t\t\t&& a._metadata === b._metadata\n\t\t);\n\t}\n\n\tpublic static equalsArr(a: ViewLineToken[], b: ViewLineToken[]): boolean {\n\t\tconst aLen = a.length;\n\t\tconst bLen = b.length;\n\t\tif (aLen !== bLen) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (let i = 0; i < aLen; i++) {\n\t\t\tif (!this._equals(a[i], b[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n}\n\nexport class ViewLineTokenFactory {\n\n\tpublic static inflateArr(tokens: Uint32Array, lineLength: number): ViewLineToken[] {\n\t\tlet result: ViewLineToken[] = [];\n\n\t\tfor (let i = 0, len = (tokens.length >>> 1); i < len; i++) {\n\t\t\tlet endOffset = (i + 1 < len ? tokens[((i + 1) << 1)] : lineLength);\n\t\t\tlet metadata = tokens[(i << 1) + 1];\n\n\t\t\tresult[i] = new ViewLineToken(endOffset, metadata);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic static sliceAndInflate(tokens: Uint32Array, startOffset: number, endOffset: number, deltaOffset: number, lineLength: number): ViewLineToken[] {\n\t\tconst tokenIndex = this.findIndexInSegmentsArray(tokens, startOffset);\n\t\tconst maxEndOffset = (endOffset - startOffset + deltaOffset);\n\t\tlet result: ViewLineToken[] = [], resultLen = 0;\n\n\t\tfor (let i = tokenIndex, len = (tokens.length >>> 1); i < len; i++) {\n\t\t\tlet tokenStartOffset = tokens[(i << 1)];\n\n\t\t\tif (tokenStartOffset >= endOffset) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tlet tokenEndOffset = (i + 1 < len ? tokens[((i + 1) << 1)] : lineLength);\n\t\t\tlet newEndOffset = Math.min(maxEndOffset, tokenEndOffset - startOffset + deltaOffset);\n\t\t\tlet metadata = tokens[(i << 1) + 1];\n\n\t\t\tresult[resultLen++] = new ViewLineToken(newEndOffset, metadata);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic static findIndexInSegmentsArray(tokens: Uint32Array, desiredIndex: number): number {\n\n\t\tlet low = 0;\n\t\tlet high = (tokens.length >>> 1) - 1;\n\n\t\twhile (low < high) {\n\n\t\t\tlet mid = low + Math.ceil((high - low) / 2);\n\n\t\t\tlet value = tokens[(mid << 1)];\n\n\t\t\tif (value > desiredIndex) {\n\t\t\t\thigh = mid - 1;\n\t\t\t} else {\n\t\t\t\tlow = mid;\n\t\t\t}\n\t\t}\n\n\t\treturn low;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { TokenMetadata } from 'vs/editor/common/model/tokensBinaryEncoding';\nimport { ViewLineTokenFactory, ViewLineToken } from 'vs/editor/common/core/viewLineToken';\nimport { ColorId, FontStyle, StandardTokenType, LanguageId } from 'vs/editor/common/modes';\n\nexport class LineToken {\n\t_lineTokenBrand: void;\n\n\tprivate readonly _source: LineTokens;\n\tprivate readonly _tokenIndex: number;\n\tprivate readonly _metadata: number;\n\n\tpublic readonly startOffset: number;\n\tpublic readonly endOffset: number;\n\n\tpublic readonly hasPrev: boolean;\n\tpublic readonly hasNext: boolean;\n\n\tpublic get languageId(): LanguageId {\n\t\treturn TokenMetadata.getLanguageId(this._metadata);\n\t}\n\n\tpublic get tokenType(): StandardTokenType {\n\t\treturn TokenMetadata.getTokenType(this._metadata);\n\t}\n\n\tpublic get fontStyle(): FontStyle {\n\t\treturn TokenMetadata.getFontStyle(this._metadata);\n\t}\n\n\tpublic get foregroundId(): ColorId {\n\t\treturn TokenMetadata.getForeground(this._metadata);\n\t}\n\n\tpublic get backgroundId(): ColorId {\n\t\treturn TokenMetadata.getBackground(this._metadata);\n\t}\n\n\tconstructor(source: LineTokens, tokenIndex: number, tokenCount: number, startOffset: number, endOffset: number, metadata: number) {\n\t\tthis._source = source;\n\t\tthis._tokenIndex = tokenIndex;\n\t\tthis._metadata = metadata;\n\n\t\tthis.startOffset = startOffset;\n\t\tthis.endOffset = endOffset;\n\n\t\tthis.hasPrev = (this._tokenIndex > 0);\n\t\tthis.hasNext = (this._tokenIndex + 1 < tokenCount);\n\t}\n\n\tpublic prev(): LineToken {\n\t\tif (!this.hasPrev) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this._source.tokenAt(this._tokenIndex - 1);\n\t}\n\n\tpublic next(): LineToken {\n\t\tif (!this.hasNext) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this._source.tokenAt(this._tokenIndex + 1);\n\t}\n}\n\nexport class LineTokens {\n\t_lineTokensBrand: void;\n\n\tprivate readonly _tokens: Uint32Array;\n\tprivate readonly _tokensCount: number;\n\tprivate readonly _text: string;\n\tprivate readonly _textLength: number;\n\n\tconstructor(tokens: Uint32Array, text: string) {\n\t\tthis._tokens = tokens;\n\t\tthis._tokensCount = (this._tokens.length >>> 1);\n\t\tthis._text = text;\n\t\tthis._textLength = this._text.length;\n\t}\n\n\tpublic getTokenCount(): number {\n\t\treturn this._tokensCount;\n\t}\n\n\tpublic getLineContent(): string {\n\t\treturn this._text;\n\t}\n\n\tpublic getLineLength(): number {\n\t\treturn this._textLength;\n\t}\n\n\tpublic getTokenStartOffset(tokenIndex: number): number {\n\t\treturn this._tokens[(tokenIndex << 1)];\n\t}\n\n\tpublic getLanguageId(tokenIndex: number): LanguageId {\n\t\tlet metadata = this._tokens[(tokenIndex << 1) + 1];\n\t\treturn TokenMetadata.getLanguageId(metadata);\n\t}\n\n\tpublic getStandardTokenType(tokenIndex: number): StandardTokenType {\n\t\tlet metadata = this._tokens[(tokenIndex << 1) + 1];\n\t\treturn TokenMetadata.getTokenType(metadata);\n\t}\n\n\tpublic getTokenEndOffset(tokenIndex: number): number {\n\t\tif (tokenIndex + 1 < this._tokensCount) {\n\t\t\treturn this._tokens[(tokenIndex + 1) << 1];\n\t\t}\n\t\treturn this._textLength;\n\t}\n\n\t/**\n\t * Find the token containing offset `offset`.\n\t * ```\n\t * For example, with the following tokens [0, 5), [5, 9), [9, infinity)\n\t * Searching for 0, 1, 2, 3 or 4 will return 0.\n\t * Searching for 5, 6, 7 or 8 will return 1.\n\t * Searching for 9, 10, 11, ... will return 2.\n\t * ```\n\t * @param offset The search offset\n\t * @return The index of the token containing the offset.\n\t */\n\tpublic findTokenIndexAtOffset(offset: number): number {\n\t\treturn ViewLineTokenFactory.findIndexInSegmentsArray(this._tokens, offset);\n\t}\n\n\tpublic findTokenAtOffset(offset: number): LineToken {\n\t\tlet tokenIndex = this.findTokenIndexAtOffset(offset);\n\t\treturn this.tokenAt(tokenIndex);\n\t}\n\n\tpublic tokenAt(tokenIndex: number): LineToken {\n\t\tlet startOffset = this._tokens[(tokenIndex << 1)];\n\t\tlet endOffset: number;\n\t\tif (tokenIndex + 1 < this._tokensCount) {\n\t\t\tendOffset = this._tokens[(tokenIndex + 1) << 1];\n\t\t} else {\n\t\t\tendOffset = this._textLength;\n\t\t}\n\t\tlet metadata = this._tokens[(tokenIndex << 1) + 1];\n\t\treturn new LineToken(this, tokenIndex, this._tokensCount, startOffset, endOffset, metadata);\n\t}\n\n\tpublic firstToken(): LineToken {\n\t\tif (this._textLength === 0) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.tokenAt(0);\n\t}\n\n\tpublic lastToken(): LineToken {\n\t\tif (this._textLength === 0) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.tokenAt(this._tokensCount - 1);\n\t}\n\n\tpublic inflate(): ViewLineToken[] {\n\t\treturn ViewLineTokenFactory.inflateArr(this._tokens, this._textLength);\n\t}\n\n\tpublic sliceAndInflate(startOffset: number, endOffset: number, deltaOffset: number): ViewLineToken[] {\n\t\treturn ViewLineTokenFactory.sliceAndInflate(this._tokens, startOffset, endOffset, deltaOffset, this._textLength);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { IState, FontStyle, StandardTokenType, MetadataConsts, ColorId, LanguageId } from 'vs/editor/common/modes';\nimport { CharCode } from 'vs/base/common/charCode';\nimport { LineTokens } from 'vs/editor/common/core/lineTokens';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Constants } from 'vs/editor/common/core/uint';\n\nexport interface ILineEdit {\n\tstartColumn: number;\n\tendColumn: number;\n\ttext: string;\n\tforceMoveMarkers: boolean;\n}\n\nexport class LineMarker {\n\t_lineMarkerBrand: void;\n\n\tpublic readonly id: string;\n\tpublic readonly internalDecorationId: number;\n\n\tpublic stickToPreviousCharacter: boolean;\n\tpublic position: Position;\n\n\tconstructor(id: string, internalDecorationId: number, position: Position, stickToPreviousCharacter: boolean) {\n\t\tthis.id = id;\n\t\tthis.internalDecorationId = internalDecorationId;\n\t\tthis.position = position;\n\t\tthis.stickToPreviousCharacter = stickToPreviousCharacter;\n\t}\n\n\tpublic toString(): string {\n\t\treturn '{\\'' + this.id + '\\';' + this.position.toString() + ',' + this.stickToPreviousCharacter + '}';\n\t}\n\n\tpublic updateLineNumber(markersTracker: MarkersTracker, lineNumber: number): void {\n\t\tif (this.position.lineNumber === lineNumber) {\n\t\t\treturn;\n\t\t}\n\t\tmarkersTracker.addChangedMarker(this);\n\t\tthis.position = new Position(lineNumber, this.position.column);\n\t}\n\n\tpublic updateColumn(markersTracker: MarkersTracker, column: number): void {\n\t\tif (this.position.column === column) {\n\t\t\treturn;\n\t\t}\n\t\tmarkersTracker.addChangedMarker(this);\n\t\tthis.position = new Position(this.position.lineNumber, column);\n\t}\n\n\tpublic updatePosition(markersTracker: MarkersTracker, position: Position): void {\n\t\tif (this.position.lineNumber === position.lineNumber && this.position.column === position.column) {\n\t\t\treturn;\n\t\t}\n\t\tmarkersTracker.addChangedMarker(this);\n\t\tthis.position = position;\n\t}\n\n\tpublic setPosition(position: Position) {\n\t\tthis.position = position;\n\t}\n\n\n\tpublic static compareMarkers(a: LineMarker, b: LineMarker): number {\n\t\tif (a.position.column === b.position.column) {\n\t\t\treturn (a.stickToPreviousCharacter ? 0 : 1) - (b.stickToPreviousCharacter ? 0 : 1);\n\t\t}\n\t\treturn a.position.column - b.position.column;\n\t}\n}\n\nexport class MarkersTracker {\n\t_changedDecorationsBrand: void;\n\n\tprivate _changedDecorations: number[];\n\tprivate _changedDecorationsLen: number;\n\n\tconstructor() {\n\t\tthis._changedDecorations = [];\n\t\tthis._changedDecorationsLen = 0;\n\t}\n\n\tpublic addChangedMarker(marker: LineMarker): void {\n\t\tlet internalDecorationId = marker.internalDecorationId;\n\t\tif (internalDecorationId !== 0) {\n\t\t\tthis._changedDecorations[this._changedDecorationsLen++] = internalDecorationId;\n\t\t}\n\t}\n\n\tpublic getDecorationIds(): number[] {\n\t\treturn this._changedDecorations;\n\t}\n}\n\nexport interface ITextWithMarkers {\n\ttext: string;\n\tmarkers: LineMarker[];\n}\n\ninterface ITokensAdjuster {\n\tadjust(toColumn: number, delta: number, minimumAllowedColumn: number): void;\n\tfinish(delta: number, lineTextLength: number): void;\n}\n\ninterface IMarkersAdjuster {\n\tadjustDelta(toColumn: number, delta: number, minimumAllowedColumn: number, moveSemantics: MarkerMoveSemantics): void;\n\tadjustSet(toColumn: number, newColumn: number, moveSemantics: MarkerMoveSemantics): void;\n\tfinish(delta: number, lineTextLength: number): void;\n}\n\nvar NO_OP_TOKENS_ADJUSTER: ITokensAdjuster = {\n\tadjust: () => { },\n\tfinish: () => { }\n};\nvar NO_OP_MARKERS_ADJUSTER: IMarkersAdjuster = {\n\tadjustDelta: () => { },\n\tadjustSet: () => { },\n\tfinish: () => { }\n};\n\nconst enum MarkerMoveSemantics {\n\tMarkerDefined = 0,\n\tForceMove = 1,\n\tForceStay = 2\n}\n\n/**\n * Returns:\n * - 0 => the line consists of whitespace\n * - otherwise => the indent level is returned value - 1\n */\nfunction computePlusOneIndentLevel(line: string, tabSize: number): number {\n\tlet indent = 0;\n\tlet i = 0;\n\tlet len = line.length;\n\n\twhile (i < len) {\n\t\tlet chCode = line.charCodeAt(i);\n\t\tif (chCode === CharCode.Space) {\n\t\t\tindent++;\n\t\t} else if (chCode === CharCode.Tab) {\n\t\t\tindent = indent - indent % tabSize + tabSize;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t\ti++;\n\t}\n\n\tif (i === len) {\n\t\treturn 0; // line only consists of whitespace\n\t}\n\n\treturn indent + 1;\n}\n\nexport class ModelLine {\n\tprivate _lineNumber: number;\n\tpublic get lineNumber(): number { return this._lineNumber; }\n\n\tprivate _text: string;\n\tpublic get text(): string { return this._text; }\n\n\t/**\n\t * bits 31 - 1 => indentLevel\n\t * bit 0 => isInvalid\n\t */\n\tprivate _metadata: number;\n\n\tpublic get isInvalid(): boolean {\n\t\treturn (this._metadata & 0x00000001) ? true : false;\n\t}\n\n\tpublic set isInvalid(value: boolean) {\n\t\tthis._metadata = (this._metadata & 0xfffffffe) | (value ? 1 : 0);\n\t}\n\n\t/**\n\t * Returns:\n\t * - -1 => the line consists of whitespace\n\t * - otherwise => the indent level is returned value\n\t */\n\tpublic getIndentLevel(): number {\n\t\treturn ((this._metadata & 0xfffffffe) >> 1) - 1;\n\t}\n\n\tprivate _setPlusOneIndentLevel(value: number): void {\n\t\tthis._metadata = (this._metadata & 0x00000001) | ((value & 0xefffffff) << 1);\n\t}\n\n\tpublic updateTabSize(tabSize: number): void {\n\t\tif (tabSize === 0) {\n\t\t\t// don't care mark\n\t\t\tthis._metadata = this._metadata & 0x00000001;\n\t\t} else {\n\t\t\tthis._setPlusOneIndentLevel(computePlusOneIndentLevel(this._text, tabSize));\n\t\t}\n\t}\n\n\tprivate _state: IState;\n\tprivate _lineTokens: ArrayBuffer;\n\tprivate _markers: LineMarker[];\n\n\tconstructor(lineNumber: number, text: string, tabSize: number) {\n\t\tthis._lineNumber = lineNumber | 0;\n\t\tthis._metadata = 0;\n\t\tthis._setText(text, tabSize);\n\t\tthis._state = null;\n\t\tthis._lineTokens = null;\n\t\tthis._markers = null;\n\t}\n\n\t// --- BEGIN STATE\n\n\tpublic resetTokenizationState(): void {\n\t\tthis._state = null;\n\t\tthis._lineTokens = null;\n\t}\n\n\tpublic setState(state: IState): void {\n\t\tthis._state = state;\n\t}\n\n\tpublic getState(): IState {\n\t\treturn this._state || null;\n\t}\n\n\t// --- END STATE\n\n\t// --- BEGIN TOKENS\n\n\tprivate static _getDefaultMetadata(topLevelLanguageId: LanguageId): number {\n\t\treturn (\n\t\t\t(topLevelLanguageId << MetadataConsts.LANGUAGEID_OFFSET)\n\t\t\t| (StandardTokenType.Other << MetadataConsts.TOKEN_TYPE_OFFSET)\n\t\t\t| (FontStyle.None << MetadataConsts.FONT_STYLE_OFFSET)\n\t\t\t| (ColorId.DefaultForeground << MetadataConsts.FOREGROUND_OFFSET)\n\t\t\t| (ColorId.DefaultBackground << MetadataConsts.BACKGROUND_OFFSET)\n\t\t) >>> 0;\n\t}\n\n\tpublic setTokens(topLevelLanguageId: LanguageId, tokens: Uint32Array): void {\n\t\tif (!tokens || tokens.length === 0) {\n\t\t\tthis._lineTokens = null;\n\t\t\treturn;\n\t\t}\n\t\tif (tokens.length === 2) {\n\t\t\t// there is one token\n\t\t\tif (tokens[0] === 0 && tokens[1] === ModelLine._getDefaultMetadata(topLevelLanguageId)) {\n\t\t\t\tthis._lineTokens = null;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tthis._lineTokens = tokens.buffer;\n\t}\n\n\tpublic getTokens(topLevelLanguageId: LanguageId): LineTokens {\n\t\tlet rawLineTokens = this._lineTokens;\n\t\tif (rawLineTokens) {\n\t\t\treturn new LineTokens(new Uint32Array(rawLineTokens), this._text);\n\t\t}\n\n\t\tlet lineTokens = new Uint32Array(2);\n\t\tlineTokens[0] = 0;\n\t\tlineTokens[1] = ModelLine._getDefaultMetadata(topLevelLanguageId);\n\t\treturn new LineTokens(lineTokens, this._text);\n\t}\n\n\t// --- END TOKENS\n\n\tprivate _createTokensAdjuster(): ITokensAdjuster {\n\t\tif (!this._lineTokens) {\n\t\t\t// This line does not have real tokens, so there is nothing to adjust\n\t\t\treturn NO_OP_TOKENS_ADJUSTER;\n\t\t}\n\n\t\tlet lineTokens = new Uint32Array(this._lineTokens);\n\t\tlet tokensLength = (lineTokens.length >>> 1);\n\t\tlet tokenIndex = 0;\n\t\tlet tokenStartOffset = 0;\n\t\tlet removeTokensCount = 0;\n\n\t\tlet adjust = (toColumn: number, delta: number, minimumAllowedColumn: number) => {\n\t\t\t// console.log(`------------------------------------------------------------------`);\n\t\t\t// console.log(`before call: tokenIndex: ${tokenIndex}: ${lineTokens}`);\n\t\t\t// console.log(`adjustTokens: ${toColumn} with delta: ${delta} and [${minimumAllowedColumn}]`);\n\t\t\t// console.log(`tokenStartOffset: ${tokenStartOffset}`);\n\t\t\tlet minimumAllowedIndex = minimumAllowedColumn - 1;\n\n\t\t\twhile (tokenStartOffset < toColumn && tokenIndex < tokensLength) {\n\n\t\t\t\tif (tokenStartOffset > 0 && delta !== 0) {\n\t\t\t\t\t// adjust token's `startIndex` by `delta`\n\t\t\t\t\tlet newTokenStartOffset = Math.max(minimumAllowedIndex, tokenStartOffset + delta);\n\t\t\t\t\tlineTokens[(tokenIndex << 1)] = newTokenStartOffset;\n\n\t\t\t\t\t// console.log(` * adjusted token start offset for token at ${tokenIndex}: ${newTokenStartOffset}`);\n\n\t\t\t\t\tif (delta < 0) {\n\t\t\t\t\t\tlet tmpTokenIndex = tokenIndex;\n\t\t\t\t\t\twhile (tmpTokenIndex > 0) {\n\t\t\t\t\t\t\tlet prevTokenStartOffset = lineTokens[((tmpTokenIndex - 1) << 1)];\n\t\t\t\t\t\t\tif (prevTokenStartOffset >= newTokenStartOffset) {\n\t\t\t\t\t\t\t\tif (prevTokenStartOffset !== Constants.MAX_UINT_32) {\n\t\t\t\t\t\t\t\t\t// console.log(` * marking for deletion token at ${tmpTokenIndex - 1}`);\n\t\t\t\t\t\t\t\t\tlineTokens[((tmpTokenIndex - 1) << 1)] = Constants.MAX_UINT_32;\n\t\t\t\t\t\t\t\t\tremoveTokensCount++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttmpTokenIndex--;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttokenIndex++;\n\t\t\t\tif (tokenIndex < tokensLength) {\n\t\t\t\t\ttokenStartOffset = lineTokens[(tokenIndex << 1)];\n\t\t\t\t}\n\t\t\t}\n\t\t\t// console.log(`after call: tokenIndex: ${tokenIndex}: ${lineTokens}`);\n\t\t};\n\n\t\tlet finish = (delta: number, lineTextLength: number) => {\n\t\t\tadjust(Constants.MAX_SAFE_SMALL_INTEGER, delta, 1);\n\n\t\t\t// Mark overflowing tokens for deletion & delete marked tokens\n\t\t\tthis._deleteMarkedTokens(this._markOverflowingTokensForDeletion(removeTokensCount, lineTextLength));\n\t\t};\n\n\t\treturn {\n\t\t\tadjust: adjust,\n\t\t\tfinish: finish\n\t\t};\n\t}\n\n\tprivate _markOverflowingTokensForDeletion(removeTokensCount: number, lineTextLength: number): number {\n\t\tif (!this._lineTokens) {\n\t\t\treturn removeTokensCount;\n\t\t}\n\n\t\tlet lineTokens = new Uint32Array(this._lineTokens);\n\t\tlet tokensLength = (lineTokens.length >>> 1);\n\n\t\tif (removeTokensCount + 1 === tokensLength) {\n\t\t\t// no more removing, cannot end up without any tokens for mode transition reasons\n\t\t\treturn removeTokensCount;\n\t\t}\n\n\t\tfor (let tokenIndex = tokensLength - 1; tokenIndex > 0; tokenIndex--) {\n\t\t\tlet tokenStartOffset = lineTokens[(tokenIndex << 1)];\n\t\t\tif (tokenStartOffset < lineTextLength) {\n\t\t\t\t// valid token => stop iterating\n\t\t\t\treturn removeTokensCount;\n\t\t\t}\n\n\t\t\t// this token now overflows the text => mark it for removal\n\t\t\tif (tokenStartOffset !== Constants.MAX_UINT_32) {\n\t\t\t\t// console.log(` * marking for deletion token at ${tokenIndex}`);\n\t\t\t\tlineTokens[(tokenIndex << 1)] = Constants.MAX_UINT_32;\n\t\t\t\tremoveTokensCount++;\n\n\t\t\t\tif (removeTokensCount + 1 === tokensLength) {\n\t\t\t\t\t// no more removing, cannot end up without any tokens for mode transition reasons\n\t\t\t\t\treturn removeTokensCount;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn removeTokensCount;\n\t}\n\n\tprivate _deleteMarkedTokens(removeTokensCount: number): void {\n\t\tif (removeTokensCount === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet lineTokens = new Uint32Array(this._lineTokens);\n\t\tlet tokensLength = (lineTokens.length >>> 1);\n\t\tlet newTokens = new Uint32Array(((tokensLength - removeTokensCount) << 1)), newTokenIdx = 0;\n\t\tfor (let i = 0; i < tokensLength; i++) {\n\t\t\tlet startOffset = lineTokens[(i << 1)];\n\t\t\tif (startOffset === Constants.MAX_UINT_32) {\n\t\t\t\t// marked for deletion\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet metadata = lineTokens[(i << 1) + 1];\n\t\t\tnewTokens[newTokenIdx++] = startOffset;\n\t\t\tnewTokens[newTokenIdx++] = metadata;\n\t\t}\n\t\tthis._lineTokens = newTokens.buffer;\n\t}\n\n\tprivate _setText(text: string, tabSize: number): void {\n\t\tthis._text = text;\n\t\tif (tabSize === 0) {\n\t\t\t// don't care mark\n\t\t\tthis._metadata = this._metadata & 0x00000001;\n\t\t} else {\n\t\t\tthis._setPlusOneIndentLevel(computePlusOneIndentLevel(text, tabSize));\n\t\t}\n\t}\n\n\t// private _printMarkers(): string {\n\t// \tif (!this._markers) {\n\t// \t\treturn '[]';\n\t// \t}\n\t// \tif (this._markers.length === 0) {\n\t// \t\treturn '[]';\n\t// \t}\n\n\t// \tvar markers = this._markers;\n\n\t// \tvar printMarker = (m:LineMarker) => {\n\t// \t\tif (m.stickToPreviousCharacter) {\n\t// \t\t\treturn '|' + m.position.column;\n\t// \t\t}\n\t// \t\treturn m.position.column + '|';\n\t// \t};\n\t// \treturn '[' + markers.map(printMarker).join(', ') + ']';\n\t// }\n\n\tprivate _createMarkersAdjuster(markersTracker: MarkersTracker): IMarkersAdjuster {\n\t\tif (!this._markers) {\n\t\t\treturn NO_OP_MARKERS_ADJUSTER;\n\t\t}\n\t\tif (this._markers.length === 0) {\n\t\t\treturn NO_OP_MARKERS_ADJUSTER;\n\t\t}\n\n\t\tthis._markers.sort(LineMarker.compareMarkers);\n\n\t\tvar markers = this._markers;\n\t\tvar markersLength = markers.length;\n\t\tvar markersIndex = 0;\n\t\tvar marker = markers[markersIndex];\n\n\t\t// console.log('------------- INITIAL MARKERS: ' + this._printMarkers());\n\n\t\tlet adjustMarkerBeforeColumn = (toColumn: number, moveSemantics: MarkerMoveSemantics) => {\n\t\t\tif (marker.position.column < toColumn) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (marker.position.column > toColumn) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (moveSemantics === MarkerMoveSemantics.ForceMove) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (moveSemantics === MarkerMoveSemantics.ForceStay) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn marker.stickToPreviousCharacter;\n\t\t};\n\n\t\tlet adjustDelta = (toColumn: number, delta: number, minimumAllowedColumn: number, moveSemantics: MarkerMoveSemantics) => {\n\t\t\t// console.log('------------------------------');\n\t\t\t// console.log('adjustDelta called: toColumn: ' + toColumn + ', delta: ' + delta + ', minimumAllowedColumn: ' + minimumAllowedColumn + ', moveSemantics: ' + MarkerMoveSemantics[moveSemantics]);\n\t\t\t// console.log('BEFORE::: markersIndex: ' + markersIndex + ' : ' + this._printMarkers());\n\n\t\t\twhile (markersIndex < markersLength && adjustMarkerBeforeColumn(toColumn, moveSemantics)) {\n\t\t\t\tif (delta !== 0) {\n\t\t\t\t\tlet newColumn = Math.max(minimumAllowedColumn, marker.position.column + delta);\n\t\t\t\t\tmarker.updateColumn(markersTracker, newColumn);\n\t\t\t\t}\n\n\t\t\t\tmarkersIndex++;\n\t\t\t\tif (markersIndex < markersLength) {\n\t\t\t\t\tmarker = markers[markersIndex];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// console.log('AFTER::: markersIndex: ' + markersIndex + ' : ' + this._printMarkers());\n\t\t};\n\n\t\tlet adjustSet = (toColumn: number, newColumn: number, moveSemantics: MarkerMoveSemantics) => {\n\t\t\t// console.log('------------------------------');\n\t\t\t// console.log('adjustSet called: toColumn: ' + toColumn + ', newColumn: ' + newColumn + ', moveSemantics: ' + MarkerMoveSemantics[moveSemantics]);\n\t\t\t// console.log('BEFORE::: markersIndex: ' + markersIndex + ' : ' + this._printMarkers());\n\n\t\t\twhile (markersIndex < markersLength && adjustMarkerBeforeColumn(toColumn, moveSemantics)) {\n\t\t\t\tmarker.updateColumn(markersTracker, newColumn);\n\n\t\t\t\tmarkersIndex++;\n\t\t\t\tif (markersIndex < markersLength) {\n\t\t\t\t\tmarker = markers[markersIndex];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// console.log('AFTER::: markersIndex: ' + markersIndex + ' : ' + this._printMarkers());\n\t\t};\n\n\t\tlet finish = (delta: number, lineTextLength: number) => {\n\t\t\tadjustDelta(Constants.MAX_SAFE_SMALL_INTEGER, delta, 1, MarkerMoveSemantics.MarkerDefined);\n\n\t\t\t// console.log('------------- FINAL MARKERS: ' + this._printMarkers());\n\t\t};\n\n\t\treturn {\n\t\t\tadjustDelta: adjustDelta,\n\t\t\tadjustSet: adjustSet,\n\t\t\tfinish: finish\n\t\t};\n\t}\n\n\tpublic applyEdits(markersTracker: MarkersTracker, edits: ILineEdit[], tabSize: number): number {\n\t\tlet deltaColumn = 0;\n\t\tlet resultText = this._text;\n\n\t\tlet tokensAdjuster = this._createTokensAdjuster();\n\t\tlet markersAdjuster = this._createMarkersAdjuster(markersTracker);\n\n\t\tfor (let i = 0, len = edits.length; i < len; i++) {\n\t\t\tlet edit = edits[i];\n\n\t\t\t// console.log();\n\t\t\t// console.log('=============================');\n\t\t\t// console.log('EDIT #' + i + ' [ ' + edit.startColumn + ' -> ' + edit.endColumn + ' ] : <<<' + edit.text + '>>>, forceMoveMarkers: ' + edit.forceMoveMarkers);\n\t\t\t// console.log('deltaColumn: ' + deltaColumn);\n\n\t\t\tlet startColumn = deltaColumn + edit.startColumn;\n\t\t\tlet endColumn = deltaColumn + edit.endColumn;\n\t\t\tlet deletingCnt = endColumn - startColumn;\n\t\t\tlet insertingCnt = edit.text.length;\n\n\t\t\t// Adjust tokens & markers before this edit\n\t\t\t// console.log('Adjust tokens & markers before this edit');\n\t\t\ttokensAdjuster.adjust(edit.startColumn - 1, deltaColumn, 1);\n\t\t\tmarkersAdjuster.adjustDelta(edit.startColumn, deltaColumn, 1, edit.forceMoveMarkers ? MarkerMoveSemantics.ForceMove : (deletingCnt > 0 ? MarkerMoveSemantics.ForceStay : MarkerMoveSemantics.MarkerDefined));\n\n\t\t\t// Adjust tokens & markers for the common part of this edit\n\t\t\tlet commonLength = Math.min(deletingCnt, insertingCnt);\n\t\t\tif (commonLength > 0) {\n\t\t\t\t// console.log('Adjust tokens & markers for the common part of this edit');\n\t\t\t\ttokensAdjuster.adjust(edit.startColumn - 1 + commonLength, deltaColumn, startColumn);\n\n\t\t\t\tif (!edit.forceMoveMarkers) {\n\t\t\t\t\tmarkersAdjuster.adjustDelta(edit.startColumn + commonLength, deltaColumn, startColumn, edit.forceMoveMarkers ? MarkerMoveSemantics.ForceMove : (deletingCnt > insertingCnt ? MarkerMoveSemantics.ForceStay : MarkerMoveSemantics.MarkerDefined));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Perform the edit & update `deltaColumn`\n\t\t\tresultText = resultText.substring(0, startColumn - 1) + edit.text + resultText.substring(endColumn - 1);\n\t\t\tdeltaColumn += insertingCnt - deletingCnt;\n\n\t\t\t// Adjust tokens & markers inside this edit\n\t\t\t// console.log('Adjust tokens & markers inside this edit');\n\t\t\ttokensAdjuster.adjust(edit.endColumn, deltaColumn, startColumn);\n\t\t\tmarkersAdjuster.adjustSet(edit.endColumn, startColumn + insertingCnt, edit.forceMoveMarkers ? MarkerMoveSemantics.ForceMove : MarkerMoveSemantics.MarkerDefined);\n\t\t}\n\n\t\t// Wrap up tokens & markers; adjust remaining if needed\n\t\ttokensAdjuster.finish(deltaColumn, resultText.length);\n\t\tmarkersAdjuster.finish(deltaColumn, resultText.length);\n\n\t\t// Save the resulting text\n\t\tthis._setText(resultText, tabSize);\n\n\t\treturn deltaColumn;\n\t}\n\n\tpublic split(markersTracker: MarkersTracker, splitColumn: number, forceMoveMarkers: boolean, tabSize: number): ModelLine {\n\t\t// console.log('--> split @ ' + splitColumn + '::: ' + this._printMarkers());\n\t\tvar myText = this._text.substring(0, splitColumn - 1);\n\t\tvar otherText = this._text.substring(splitColumn - 1);\n\n\t\tvar otherMarkers: LineMarker[] = null;\n\n\t\tif (this._markers) {\n\t\t\tthis._markers.sort(LineMarker.compareMarkers);\n\t\t\tfor (let i = 0, len = this._markers.length; i < len; i++) {\n\t\t\t\tlet marker = this._markers[i];\n\n\t\t\t\tif (\n\t\t\t\t\tmarker.position.column > splitColumn\n\t\t\t\t\t|| (\n\t\t\t\t\t\tmarker.position.column === splitColumn\n\t\t\t\t\t\t&& (\n\t\t\t\t\t\t\tforceMoveMarkers\n\t\t\t\t\t\t\t|| !marker.stickToPreviousCharacter\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tlet myMarkers = this._markers.slice(0, i);\n\t\t\t\t\totherMarkers = this._markers.slice(i);\n\t\t\t\t\tthis._markers = myMarkers;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (otherMarkers) {\n\t\t\t\tfor (let i = 0, len = otherMarkers.length; i < len; i++) {\n\t\t\t\t\tlet marker = otherMarkers[i];\n\n\t\t\t\t\tmarker.updateColumn(markersTracker, marker.position.column - (splitColumn - 1));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._setText(myText, tabSize);\n\n\t\t// Mark overflowing tokens for deletion & delete marked tokens\n\t\tthis._deleteMarkedTokens(this._markOverflowingTokensForDeletion(0, this._text.length));\n\n\t\tvar otherLine = new ModelLine(this._lineNumber + 1, otherText, tabSize);\n\t\tif (otherMarkers) {\n\t\t\totherLine.addMarkers(otherMarkers);\n\t\t}\n\t\treturn otherLine;\n\t}\n\n\tpublic append(markersTracker: MarkersTracker, other: ModelLine, tabSize: number): void {\n\t\t// console.log('--> append: THIS :: ' + this._printMarkers());\n\t\t// console.log('--> append: OTHER :: ' + this._printMarkers());\n\t\tlet thisTextLength = this._text.length;\n\t\tthis._setText(this._text + other._text, tabSize);\n\n\t\tlet otherRawTokens = other._lineTokens;\n\t\tif (otherRawTokens) {\n\t\t\t// Other has real tokens\n\n\t\t\tlet otherTokens = new Uint32Array(otherRawTokens);\n\n\t\t\t// Adjust other tokens\n\t\t\tif (thisTextLength > 0) {\n\t\t\t\tfor (let i = 0, len = (otherTokens.length >>> 1); i < len; i++) {\n\t\t\t\t\totherTokens[(i << 1)] = otherTokens[(i << 1)] + thisTextLength;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Append other tokens\n\t\t\tlet myRawTokens = this._lineTokens;\n\t\t\tif (myRawTokens) {\n\t\t\t\t// I have real tokens\n\t\t\t\tlet myTokens = new Uint32Array(myRawTokens);\n\t\t\t\tlet result = new Uint32Array(myTokens.length + otherTokens.length);\n\t\t\t\tresult.set(myTokens, 0);\n\t\t\t\tresult.set(otherTokens, myTokens.length);\n\t\t\t\tthis._lineTokens = result.buffer;\n\t\t\t} else {\n\t\t\t\t// I don't have real tokens\n\t\t\t\tthis._lineTokens = otherTokens.buffer;\n\t\t\t}\n\t\t}\n\n\t\tif (other._markers) {\n\t\t\t// Other has markers\n\t\t\tlet otherMarkers = other._markers;\n\n\t\t\t// Adjust other markers\n\t\t\tfor (let i = 0, len = otherMarkers.length; i < len; i++) {\n\t\t\t\tlet marker = otherMarkers[i];\n\n\t\t\t\tmarker.updatePosition(markersTracker, new Position(this._lineNumber, marker.position.column + thisTextLength));\n\t\t\t}\n\n\t\t\tthis.addMarkers(otherMarkers);\n\t\t}\n\t}\n\n\tpublic addMarker(marker: LineMarker): void {\n\t\tif (!this._markers) {\n\t\t\tthis._markers = [marker];\n\t\t} else {\n\t\t\tthis._markers.push(marker);\n\t\t}\n\t}\n\n\tpublic addMarkers(markers: LineMarker[]): void {\n\t\tif (markers.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this._markers) {\n\t\t\tthis._markers = markers.slice(0);\n\t\t} else {\n\t\t\tthis._markers = this._markers.concat(markers);\n\t\t}\n\t}\n\n\tpublic removeMarker(marker: LineMarker): void {\n\t\tif (!this._markers) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet index = this._indexOfMarkerId(marker.id);\n\t\tif (index < 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._markers.length === 1) {\n\t\t\t// was last marker on line\n\t\t\tthis._markers = null;\n\t\t} else {\n\t\t\tthis._markers.splice(index, 1);\n\t\t}\n\t}\n\n\tpublic removeMarkers(deleteMarkers: { [markerId: string]: boolean; }): void {\n\t\tif (!this._markers) {\n\t\t\treturn;\n\t\t}\n\t\tfor (let i = 0, len = this._markers.length; i < len; i++) {\n\t\t\tlet marker = this._markers[i];\n\n\t\t\tif (deleteMarkers[marker.id]) {\n\t\t\t\tthis._markers.splice(i, 1);\n\t\t\t\tlen--;\n\t\t\t\ti--;\n\t\t\t}\n\t\t}\n\t\tif (this._markers.length === 0) {\n\t\t\tthis._markers = null;\n\t\t}\n\t}\n\n\tpublic getMarkers(): LineMarker[] {\n\t\tif (!this._markers) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._markers;\n\t}\n\n\tpublic updateLineNumber(markersTracker: MarkersTracker, newLineNumber: number): void {\n\t\tif (this._lineNumber === newLineNumber) {\n\t\t\treturn;\n\t\t}\n\t\tif (this._markers) {\n\t\t\tlet markers = this._markers;\n\t\t\tfor (let i = 0, len = markers.length; i < len; i++) {\n\t\t\t\tlet marker = markers[i];\n\t\t\t\tmarker.updateLineNumber(markersTracker, newLineNumber);\n\t\t\t}\n\t\t}\n\n\t\tthis._lineNumber = newLineNumber;\n\t}\n\n\tprivate _indexOfMarkerId(markerId: string): number {\n\t\tlet markers = this._markers;\n\t\tfor (let i = 0, len = markers.length; i < len; i++) {\n\t\t\tif (markers[i].id === markerId) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { IWordAtPosition } from 'vs/editor/common/editorCommon';\n\nexport const USUAL_WORD_SEPARATORS = '`~!@#$%^&*()-=+[{]}\\\\|;:\\'\",.<>/?';\n\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: string = ''): RegExp {\n\tvar usualSeparators = USUAL_WORD_SEPARATORS;\n\tvar source = '(-?\\\\d*\\\\.\\\\d\\\\w*)|([^';\n\tfor (var i = 0; i < usualSeparators.length; i++) {\n\t\tif (allowInWords.indexOf(usualSeparators[i]) >= 0) {\n\t\t\tcontinue;\n\t\t}\n\t\tsource += '\\\\' + usualSeparators[i];\n\t}\n\tsource += '\\\\s]+)';\n\treturn new RegExp(source, 'g');\n}\n\n// catches numbers (including floating numbers) in the first group, and alphanum in the second\nexport const DEFAULT_WORD_REGEXP = createWordRegExp();\n\nexport function ensureValidWordDefinition(wordDefinition?: RegExp): RegExp {\n\tvar result: RegExp = DEFAULT_WORD_REGEXP;\n\n\tif (wordDefinition && (wordDefinition instanceof RegExp)) {\n\t\tif (!wordDefinition.global) {\n\t\t\tvar flags = 'g';\n\t\t\tif (wordDefinition.ignoreCase) {\n\t\t\t\tflags += 'i';\n\t\t\t}\n\t\t\tif (wordDefinition.multiline) {\n\t\t\t\tflags += 'm';\n\t\t\t}\n\t\t\tresult = new RegExp(wordDefinition.source, flags);\n\t\t} else {\n\t\t\tresult = wordDefinition;\n\t\t}\n\t}\n\n\tresult.lastIndex = 0;\n\n\treturn result;\n}\n\nfunction getWordAtPosFast(column: number, wordDefinition: RegExp, text: string, textOffset: number): IWordAtPosition {\n\t// find whitespace enclosed text around column and match from there\n\n\tif (wordDefinition.test(' ')) {\n\t\treturn getWordAtPosSlow(column, wordDefinition, text, textOffset);\n\t}\n\n\tlet pos = column - 1 - textOffset;\n\tlet start = text.lastIndexOf(' ', pos - 1) + 1;\n\tlet end = text.indexOf(' ', pos);\n\tif (end === -1) {\n\t\tend = text.length;\n\t}\n\n\twordDefinition.lastIndex = start;\n\tlet match: RegExpMatchArray;\n\twhile (match = wordDefinition.exec(text)) {\n\t\tif (match.index <= pos && wordDefinition.lastIndex >= pos) {\n\t\t\treturn {\n\t\t\t\tword: match[0],\n\t\t\t\tstartColumn: textOffset + 1 + match.index,\n\t\t\t\tendColumn: textOffset + 1 + wordDefinition.lastIndex\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n}\n\n\nfunction getWordAtPosSlow(column: number, wordDefinition: RegExp, text: string, textOffset: number): IWordAtPosition {\n\t// matches all words starting at the beginning\n\t// of the input until it finds a match that encloses\n\t// the desired column. slow but correct\n\n\tlet pos = column - 1 - textOffset;\n\twordDefinition.lastIndex = 0;\n\n\tlet match: RegExpMatchArray;\n\twhile (match = wordDefinition.exec(text)) {\n\n\t\tif (match.index > pos) {\n\t\t\t// |nW -> matched only after the pos\n\t\t\treturn null;\n\n\t\t} else if (wordDefinition.lastIndex >= pos) {\n\t\t\t// W|W -> match encloses pos\n\t\t\treturn {\n\t\t\t\tword: match[0],\n\t\t\t\tstartColumn: textOffset + 1 + match.index,\n\t\t\t\tendColumn: textOffset + 1 + wordDefinition.lastIndex\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport function getWordAtText(column: number, wordDefinition: RegExp, text: string, textOffset: number): IWordAtPosition {\n\tconst result = getWordAtPosFast(column, wordDefinition, text, textOffset);\n\t// both (getWordAtPosFast and getWordAtPosSlow) leave the wordDefinition-RegExp\n\t// in an undefined state and to not confuse other users of the wordDefinition\n\t// we reset the lastIndex\n\twordDefinition.lastIndex = 0;\n\treturn 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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { IMode, LanguageIdentifier } from 'vs/editor/common/modes';\n\nexport class FrankensteinMode implements IMode {\n\n\tprivate _languageIdentifier: LanguageIdentifier;\n\n\tconstructor(languageIdentifier: LanguageIdentifier) {\n\t\tthis._languageIdentifier = languageIdentifier;\n\t}\n\n\tpublic getId(): string {\n\t\treturn this._languageIdentifier.language;\n\t}\n\n\tpublic getLanguageIdentifier(): LanguageIdentifier {\n\t\treturn this._languageIdentifier;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { StandardTokenType } from 'vs/editor/common/modes';\n\n/**\n * Describes how comments for a language work.\n */\nexport interface CommentRule {\n\t/**\n\t * The line comment token, like `// this is a comment`\n\t */\n\tlineComment?: string;\n\t/**\n\t * The block comment character pair, like `/* block comment */`\n\t */\n\tblockComment?: CharacterPair;\n}\n\n/**\n * The language configuration interface defines the contract between extensions and\n * various editor features, like automatic bracket insertion, automatic indentation etc.\n */\nexport interface LanguageConfiguration {\n\t/**\n\t * The language's comment settings.\n\t */\n\tcomments?: CommentRule;\n\t/**\n\t * The language's brackets.\n\t * This configuration implicitly affects pressing Enter around these brackets.\n\t */\n\tbrackets?: CharacterPair[];\n\t/**\n\t * The language's word definition.\n\t * If the language supports Unicode identifiers (e.g. JavaScript), it is preferable\n\t * to provide a word definition that uses exclusion of known separators.\n\t * e.g.: A regex that matches anything except known separators (and dot is allowed to occur in a floating point number):\n\t * /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g\n\t */\n\twordPattern?: RegExp;\n\t/**\n\t * The language's indentation settings.\n\t */\n\tindentationRules?: IndentationRule;\n\t/**\n\t * The language's rules to be evaluated when pressing Enter.\n\t */\n\tonEnterRules?: OnEnterRule[];\n\t/**\n\t * The language's auto closing pairs. The 'close' character is automatically inserted with the\n\t * 'open' character is typed. If not set, the configured brackets will be used.\n\t */\n\tautoClosingPairs?: IAutoClosingPairConditional[];\n\t/**\n\t * The language's surrounding pairs. When the 'open' character is typed on a selection, the\n\t * selected string is surrounded by the open and close characters. If not set, the autoclosing pairs\n\t * settings will be used.\n\t */\n\tsurroundingPairs?: IAutoClosingPair[];\n\t/**\n\t * **Deprecated** Do not use.\n\t *\n\t * @deprecated Will be replaced by a better API soon.\n\t */\n\t__electricCharacterSupport?: IBracketElectricCharacterContribution;\n}\n\n/**\n * Describes indentation rules for a language.\n */\nexport interface IndentationRule {\n\t/**\n\t * If a line matches this pattern, then all the lines after it should be unindendented once (until another rule matches).\n\t */\n\tdecreaseIndentPattern: RegExp;\n\t/**\n\t * If a line matches this pattern, then all the lines after it should be indented once (until another rule matches).\n\t */\n\tincreaseIndentPattern: RegExp;\n\t/**\n\t * If a line matches this pattern, then **only the next line** after it should be indented once.\n\t */\n\tindentNextLinePattern?: RegExp;\n\t/**\n\t * If a line matches this pattern, then its indentation should not be changed and it should not be evaluated against the other rules.\n\t */\n\tunIndentedLinePattern?: RegExp;\n}\n\n/**\n * Describes a rule to be evaluated when pressing Enter.\n */\nexport interface OnEnterRule {\n\t/**\n\t * This rule will only execute if the text before the cursor matches this regular expression.\n\t */\n\tbeforeText: RegExp;\n\t/**\n\t * This rule will only execute if the text after the cursor matches this regular expression.\n\t */\n\tafterText?: RegExp;\n\t/**\n\t * The action to execute.\n\t */\n\taction: EnterAction;\n}\n\nexport interface IBracketElectricCharacterContribution {\n\tdocComment?: IDocComment;\n}\n\n/**\n * Definition of documentation comments (e.g. Javadoc/JSdoc)\n */\nexport interface IDocComment {\n\t/**\n\t * The string that starts a doc comment (e.g. '/**')\n\t */\n\topen: string;\n\t/**\n\t * The string that appears on the last line and closes the doc comment (e.g. ' * /').\n\t */\n\tclose: string;\n}\n\n/**\n * A tuple of two characters, like a pair of\n * opening and closing brackets.\n */\nexport type CharacterPair = [string, string];\n\nexport interface IAutoClosingPair {\n\topen: string;\n\tclose: string;\n}\n\nexport interface IAutoClosingPairConditional extends IAutoClosingPair {\n\tnotIn?: string[];\n}\n\n/**\n * Describes what to do with the indentation when pressing Enter.\n */\nexport enum IndentAction {\n\t/**\n\t * Insert new line and copy the previous line's indentation.\n\t */\n\tNone = 0,\n\t/**\n\t * Insert new line and indent once (relative to the previous line's indentation).\n\t */\n\tIndent = 1,\n\t/**\n\t * Insert two new lines:\n\t * - the first one indented which will hold the cursor\n\t * - the second one at the same indentation level\n\t */\n\tIndentOutdent = 2,\n\t/**\n\t * Insert new line and outdent once (relative to the previous line's indentation).\n\t */\n\tOutdent = 3\n}\n\n/**\n * Describes what to do when pressing Enter.\n */\nexport interface EnterAction {\n\t/**\n\t * Describe what to do with the indentation.\n\t */\n\tindentAction: IndentAction;\n\t/**\n\t * Describe whether to outdent current line.\n\t */\n\toutdentCurrentLine?: boolean;\n\t/**\n\t * Describes text to be appended after the new line and after the indentation.\n\t */\n\tappendText?: string;\n\t/**\n\t * Describes the number of characters to remove from the new line's indentation.\n\t */\n\tremoveText?: number;\n}\n\n/**\n * @internal\n */\nexport class StandardAutoClosingPairConditional {\n\t_standardAutoClosingPairConditionalBrand: void;\n\n\treadonly open: string;\n\treadonly close: string;\n\tprivate readonly _standardTokenMask: number;\n\n\tconstructor(source: IAutoClosingPairConditional) {\n\t\tthis.open = source.open;\n\t\tthis.close = source.close;\n\n\t\t// initially allowed in all tokens\n\t\tthis._standardTokenMask = 0;\n\n\t\tif (Array.isArray(source.notIn)) {\n\t\t\tfor (let i = 0, len = source.notIn.length; i < len; i++) {\n\t\t\t\tlet notIn = source.notIn[i];\n\t\t\t\tswitch (notIn) {\n\t\t\t\t\tcase 'string':\n\t\t\t\t\t\tthis._standardTokenMask |= StandardTokenType.String;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'comment':\n\t\t\t\t\t\tthis._standardTokenMask |= StandardTokenType.Comment;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'regex':\n\t\t\t\t\t\tthis._standardTokenMask |= StandardTokenType.RegEx;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic isOK(standardToken: StandardTokenType): boolean {\n\t\treturn (this._standardTokenMask & standardToken) === 0;\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport URI from 'vs/base/common/uri';\nimport { match as matchGlobPattern } from 'vs/base/common/glob'; // TODO@Alex\n\nexport interface LanguageFilter {\n\tlanguage?: string;\n\tscheme?: string;\n\tpattern?: string;\n}\n\nexport type LanguageSelector = string | LanguageFilter | (string | LanguageFilter)[];\n\nexport default function matches(selection: LanguageSelector, uri: URI, language: string): boolean {\n\treturn score(selection, uri, language) > 0;\n}\n\nexport function score(selector: LanguageSelector, candidateUri: URI, candidateLanguage: string): number {\n\n\tif (Array.isArray(selector)) {\n\t\t// array -> take max individual value\n\t\tlet ret = 0;\n\t\tfor (const filter of selector) {\n\t\t\tconst value = score(filter, candidateUri, candidateLanguage);\n\t\t\tif (value === 10) {\n\t\t\t\treturn value; // already at the highest\n\t\t\t}\n\t\t\tif (value > ret) {\n\t\t\t\tret = value;\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\n\t} else if (typeof selector === 'string') {\n\t\t// short-hand notion, desugars to\n\t\t// 'fooLang' -> [{ language: 'fooLang', scheme: 'file' }, { language: 'fooLang', scheme: 'untitled' }]\n\t\t// '*' -> { language: '*', scheme: '*' }\n\t\tif (selector === '*') {\n\t\t\treturn 5;\n\t\t} else if (selector === candidateLanguage) {\n\t\t\treturn 10;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\n\t} else if (selector) {\n\t\t// filter -> select accordingly, use defaults for scheme\n\t\tconst { language, pattern, scheme } = selector;\n\n\t\tlet ret = 0;\n\n\t\tif (scheme) {\n\t\t\tif (scheme === candidateUri.scheme) {\n\t\t\t\tret = 10;\n\t\t\t} else if (scheme === '*') {\n\t\t\t\tret = 5;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\tif (language) {\n\t\t\tif (language === candidateLanguage) {\n\t\t\t\tret = 10;\n\t\t\t} else if (language === '*') {\n\t\t\t\tret = Math.max(ret, 5);\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\tif (pattern) {\n\t\t\tif (pattern === candidateUri.fsPath || matchGlobPattern(pattern, candidateUri.fsPath)) {\n\t\t\t\tret = 10;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\n\t} else {\n\t\treturn 0;\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { IReadOnlyModel } from 'vs/editor/common/editorCommon';\nimport { LanguageSelector, score } from 'vs/editor/common/modes/languageSelector';\n\ninterface Entry {\n\tselector: LanguageSelector;\n\tprovider: T;\n\t_score: number;\n\t_time: number;\n}\n\nexport default class LanguageFeatureRegistry {\n\n\tprivate _clock: number = 0;\n\tprivate _entries: Entry[] = [];\n\tprivate _onDidChange: Emitter = new Emitter();\n\n\tconstructor() {\n\t}\n\n\tget onDidChange(): Event {\n\t\treturn this._onDidChange.event;\n\t}\n\n\tregister(selector: LanguageSelector, provider: T): IDisposable {\n\n\t\tlet entry: Entry = {\n\t\t\tselector,\n\t\t\tprovider,\n\t\t\t_score: -1,\n\t\t\t_time: this._clock++\n\t\t};\n\n\t\tthis._entries.push(entry);\n\t\tthis._lastCandidate = undefined;\n\t\tthis._onDidChange.fire(this._entries.length);\n\n\t\treturn {\n\t\t\tdispose: () => {\n\t\t\t\tif (entry) {\n\t\t\t\t\tlet idx = this._entries.indexOf(entry);\n\t\t\t\t\tif (idx >= 0) {\n\t\t\t\t\t\tthis._entries.splice(idx, 1);\n\t\t\t\t\t\tthis._lastCandidate = undefined;\n\t\t\t\t\t\tthis._onDidChange.fire(this._entries.length);\n\t\t\t\t\t\tentry = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\thas(model: IReadOnlyModel): boolean {\n\t\treturn this.all(model).length > 0;\n\t}\n\n\tall(model: IReadOnlyModel): T[] {\n\t\tif (!model || model.isTooLargeForHavingARichMode()) {\n\t\t\treturn [];\n\t\t}\n\n\t\tthis._updateScores(model);\n\t\tconst result: T[] = [];\n\n\t\t// from registry\n\t\tfor (let entry of this._entries) {\n\t\t\tif (entry._score > 0) {\n\t\t\t\tresult.push(entry.provider);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tordered(model: IReadOnlyModel): T[] {\n\t\tconst result: T[] = [];\n\t\tthis._orderedForEach(model, entry => result.push(entry.provider));\n\t\treturn result;\n\t}\n\n\torderedGroups(model: IReadOnlyModel): T[][] {\n\t\tconst result: T[][] = [];\n\t\tlet lastBucket: T[];\n\t\tlet lastBucketScore: number;\n\n\t\tthis._orderedForEach(model, entry => {\n\t\t\tif (lastBucket && lastBucketScore === entry._score) {\n\t\t\t\tlastBucket.push(entry.provider);\n\t\t\t} else {\n\t\t\t\tlastBucketScore = entry._score;\n\t\t\t\tlastBucket = [entry.provider];\n\t\t\t\tresult.push(lastBucket);\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tprivate _orderedForEach(model: IReadOnlyModel, callback: (provider: Entry) => any): void {\n\n\t\tif (!model || model.isTooLargeForHavingARichMode()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._updateScores(model);\n\n\t\tfor (let from = 0; from < this._entries.length; from++) {\n\t\t\tlet entry = this._entries[from];\n\t\t\tif (entry._score > 0) {\n\t\t\t\tcallback(entry);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _lastCandidate: { uri: string; language: string; };\n\n\tprivate _updateScores(model: IReadOnlyModel): void {\n\n\t\tlet candidate = {\n\t\t\turi: model.uri.toString(),\n\t\t\tlanguage: model.getLanguageIdentifier().language\n\t\t};\n\n\t\tif (this._lastCandidate\n\t\t\t&& this._lastCandidate.language === candidate.language\n\t\t\t&& this._lastCandidate.uri === candidate.uri) {\n\n\t\t\t// nothing has changed\n\t\t\treturn;\n\t\t}\n\n\t\tthis._lastCandidate = candidate;\n\n\t\tfor (let entry of this._entries) {\n\t\t\tentry._score = score(entry.selector, model.uri, model.getLanguageIdentifier().language);\n\t\t}\n\n\t\t// needs sorting\n\t\tthis._entries.sort(LanguageFeatureRegistry._compareByScoreAndTime);\n\t}\n\n\tprivate static _compareByScoreAndTime(a: Entry, b: Entry): number {\n\t\tif (a._score < b._score) {\n\t\t\treturn 1;\n\t\t} else if (a._score > b._score) {\n\t\t\treturn -1;\n\t\t} else if (a._time < b._time) {\n\t\t\treturn 1;\n\t\t} else if (a._time > b._time) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { ILink } from 'vs/editor/common/modes';\nimport { CharCode } from 'vs/base/common/charCode';\nimport { CharacterClassifier } from 'vs/editor/common/core/characterClassifier';\nimport { Uint8Matrix } from 'vs/editor/common/core/uint';\n\nexport interface ILinkComputerTarget {\n\tgetLineCount(): number;\n\tgetLineContent(lineNumber: number): string;\n}\n\nconst enum State {\n\tInvalid = 0,\n\tStart = 1,\n\tH = 2,\n\tHT = 3,\n\tHTT = 4,\n\tHTTP = 5,\n\tF = 6,\n\tFI = 7,\n\tFIL = 8,\n\tBeforeColon = 9,\n\tAfterColon = 10,\n\tAlmostThere = 11,\n\tEnd = 12,\n\tAccept = 13\n}\n\ntype Edge = [State, number, State];\n\nclass StateMachine {\n\n\tprivate _states: Uint8Matrix;\n\tprivate _maxCharCode: number;\n\n\tconstructor(edges: Edge[]) {\n\t\tlet maxCharCode = 0;\n\t\tlet maxState = State.Invalid;\n\t\tfor (let i = 0, len = edges.length; i < len; i++) {\n\t\t\tlet [from, chCode, to] = edges[i];\n\t\t\tif (chCode > maxCharCode) {\n\t\t\t\tmaxCharCode = chCode;\n\t\t\t}\n\t\t\tif (from > maxState) {\n\t\t\t\tmaxState = from;\n\t\t\t}\n\t\t\tif (to > maxState) {\n\t\t\t\tmaxState = to;\n\t\t\t}\n\t\t}\n\n\t\tmaxCharCode++;\n\t\tmaxState++;\n\n\t\tlet states = new Uint8Matrix(maxState, maxCharCode, State.Invalid);\n\t\tfor (let i = 0, len = edges.length; i < len; i++) {\n\t\t\tlet [from, chCode, to] = edges[i];\n\t\t\tstates.set(from, chCode, to);\n\t\t}\n\n\t\tthis._states = states;\n\t\tthis._maxCharCode = maxCharCode;\n\t}\n\n\tpublic nextState(currentState: State, chCode: number): State {\n\t\tif (chCode < 0 || chCode >= this._maxCharCode) {\n\t\t\treturn State.Invalid;\n\t\t}\n\t\treturn this._states.get(currentState, chCode);\n\t}\n}\n\n// State machine for http:// or https:// or file://\nlet _stateMachine: StateMachine = null;\nfunction getStateMachine(): StateMachine {\n\tif (_stateMachine === null) {\n\t\t_stateMachine = new StateMachine([\n\t\t\t[State.Start, CharCode.h, State.H],\n\t\t\t[State.Start, CharCode.H, State.H],\n\t\t\t[State.Start, CharCode.f, State.F],\n\t\t\t[State.Start, CharCode.F, State.F],\n\n\t\t\t[State.H, CharCode.t, State.HT],\n\t\t\t[State.H, CharCode.T, State.HT],\n\n\t\t\t[State.HT, CharCode.t, State.HTT],\n\t\t\t[State.HT, CharCode.T, State.HTT],\n\n\t\t\t[State.HTT, CharCode.p, State.HTTP],\n\t\t\t[State.HTT, CharCode.P, State.HTTP],\n\n\t\t\t[State.HTTP, CharCode.s, State.BeforeColon],\n\t\t\t[State.HTTP, CharCode.S, State.BeforeColon],\n\t\t\t[State.HTTP, CharCode.Colon, State.AfterColon],\n\n\t\t\t[State.F, CharCode.i, State.FI],\n\t\t\t[State.F, CharCode.I, State.FI],\n\n\t\t\t[State.FI, CharCode.l, State.FIL],\n\t\t\t[State.FI, CharCode.L, State.FIL],\n\n\t\t\t[State.FIL, CharCode.e, State.BeforeColon],\n\t\t\t[State.FIL, CharCode.E, State.BeforeColon],\n\n\t\t\t[State.BeforeColon, CharCode.Colon, State.AfterColon],\n\n\t\t\t[State.AfterColon, CharCode.Slash, State.AlmostThere],\n\n\t\t\t[State.AlmostThere, CharCode.Slash, State.End],\n\t\t]);\n\t}\n\treturn _stateMachine;\n}\n\n\nconst enum CharacterClass {\n\tNone = 0,\n\tForceTermination = 1,\n\tCannotEndIn = 2\n}\n\nlet _classifier: CharacterClassifier = null;\nfunction getClassifier(): CharacterClassifier {\n\tif (_classifier === null) {\n\t\t_classifier = new CharacterClassifier(CharacterClass.None);\n\n\t\tconst FORCE_TERMINATION_CHARACTERS = ' \\t<>\\'\\\"、。。、,.:;?!@#$%&*‘“〈《「『【〔([{「」}])〕】』」》〉”’`~…';\n\t\tfor (let i = 0; i < FORCE_TERMINATION_CHARACTERS.length; i++) {\n\t\t\t_classifier.set(FORCE_TERMINATION_CHARACTERS.charCodeAt(i), CharacterClass.ForceTermination);\n\t\t}\n\n\t\tconst CANNOT_END_WITH_CHARACTERS = '.,;';\n\t\tfor (let i = 0; i < CANNOT_END_WITH_CHARACTERS.length; i++) {\n\t\t\t_classifier.set(CANNOT_END_WITH_CHARACTERS.charCodeAt(i), CharacterClass.CannotEndIn);\n\t\t}\n\t}\n\treturn _classifier;\n}\n\nclass LinkComputer {\n\n\tprivate static _createLink(classifier: CharacterClassifier, line: string, lineNumber: number, linkBeginIndex: number, linkEndIndex: number): ILink {\n\t\t// Do not allow to end link in certain characters...\n\t\tlet lastIncludedCharIndex = linkEndIndex - 1;\n\t\tdo {\n\t\t\tconst chCode = line.charCodeAt(lastIncludedCharIndex);\n\t\t\tconst chClass = classifier.get(chCode);\n\t\t\tif (chClass !== CharacterClass.CannotEndIn) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlastIncludedCharIndex--;\n\t\t} while (lastIncludedCharIndex > linkBeginIndex);\n\n\t\treturn {\n\t\t\trange: {\n\t\t\t\tstartLineNumber: lineNumber,\n\t\t\t\tstartColumn: linkBeginIndex + 1,\n\t\t\t\tendLineNumber: lineNumber,\n\t\t\t\tendColumn: lastIncludedCharIndex + 2\n\t\t\t},\n\t\t\turl: line.substring(linkBeginIndex, lastIncludedCharIndex + 1)\n\t\t};\n\t}\n\n\tpublic static computeLinks(model: ILinkComputerTarget): ILink[] {\n\t\tconst stateMachine = getStateMachine();\n\t\tconst classifier = getClassifier();\n\n\t\tlet result: ILink[] = [];\n\t\tfor (let i = 1, lineCount = model.getLineCount(); i <= lineCount; i++) {\n\t\t\tconst line = model.getLineContent(i);\n\t\t\tconst len = line.length;\n\n\t\t\tlet j = 0;\n\t\t\tlet linkBeginIndex = 0;\n\t\t\tlet linkBeginChCode = 0;\n\t\t\tlet state = State.Start;\n\t\t\tlet hasOpenParens = false;\n\t\t\tlet hasOpenSquareBracket = false;\n\t\t\tlet hasOpenCurlyBracket = false;\n\n\t\t\twhile (j < len) {\n\n\t\t\t\tlet resetStateMachine = false;\n\t\t\t\tconst chCode = line.charCodeAt(j);\n\n\t\t\t\tif (state === State.Accept) {\n\t\t\t\t\tlet chClass: CharacterClass;\n\t\t\t\t\tswitch (chCode) {\n\t\t\t\t\t\tcase CharCode.OpenParen:\n\t\t\t\t\t\t\thasOpenParens = true;\n\t\t\t\t\t\t\tchClass = CharacterClass.None;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase CharCode.CloseParen:\n\t\t\t\t\t\t\tchClass = (hasOpenParens ? CharacterClass.None : CharacterClass.ForceTermination);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase CharCode.OpenSquareBracket:\n\t\t\t\t\t\t\thasOpenSquareBracket = true;\n\t\t\t\t\t\t\tchClass = CharacterClass.None;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase CharCode.CloseSquareBracket:\n\t\t\t\t\t\t\tchClass = (hasOpenSquareBracket ? CharacterClass.None : CharacterClass.ForceTermination);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase CharCode.OpenCurlyBrace:\n\t\t\t\t\t\t\thasOpenCurlyBracket = true;\n\t\t\t\t\t\t\tchClass = CharacterClass.None;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase CharCode.CloseCurlyBrace:\n\t\t\t\t\t\t\tchClass = (hasOpenCurlyBracket ? CharacterClass.None : CharacterClass.ForceTermination);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t/* The following three rules make it that ' or \" or ` are allowed inside links if the link began with a different one */\n\t\t\t\t\t\tcase CharCode.SingleQuote:\n\t\t\t\t\t\t\tchClass = (linkBeginChCode === CharCode.DoubleQuote || linkBeginChCode === CharCode.BackTick) ? CharacterClass.None : CharacterClass.ForceTermination;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase CharCode.DoubleQuote:\n\t\t\t\t\t\t\tchClass = (linkBeginChCode === CharCode.SingleQuote || linkBeginChCode === CharCode.BackTick) ? CharacterClass.None : CharacterClass.ForceTermination;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase CharCode.BackTick:\n\t\t\t\t\t\t\tchClass = (linkBeginChCode === CharCode.SingleQuote || linkBeginChCode === CharCode.DoubleQuote) ? CharacterClass.None : CharacterClass.ForceTermination;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tchClass = classifier.get(chCode);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check if character terminates link\n\t\t\t\t\tif (chClass === CharacterClass.ForceTermination) {\n\t\t\t\t\t\tresult.push(LinkComputer._createLink(classifier, line, i, linkBeginIndex, j));\n\t\t\t\t\t\tresetStateMachine = true;\n\t\t\t\t\t}\n\t\t\t\t} else if (state === State.End) {\n\t\t\t\t\tconst chClass = classifier.get(chCode);\n\n\t\t\t\t\t// Check if character terminates link\n\t\t\t\t\tif (chClass === CharacterClass.ForceTermination) {\n\t\t\t\t\t\tresetStateMachine = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate = State.Accept;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tstate = stateMachine.nextState(state, chCode);\n\t\t\t\t\tif (state === State.Invalid) {\n\t\t\t\t\t\tresetStateMachine = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (resetStateMachine) {\n\t\t\t\t\tstate = State.Start;\n\t\t\t\t\thasOpenParens = false;\n\t\t\t\t\thasOpenSquareBracket = false;\n\t\t\t\t\thasOpenCurlyBracket = false;\n\n\t\t\t\t\t// Record where the link started\n\t\t\t\t\tlinkBeginIndex = j + 1;\n\t\t\t\t\tlinkBeginChCode = chCode;\n\t\t\t\t}\n\n\t\t\t\tj++;\n\t\t\t}\n\n\t\t\tif (state === State.Accept) {\n\t\t\t\tresult.push(LinkComputer._createLink(classifier, line, i, linkBeginIndex, len));\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\t}\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: ILinkComputerTarget): ILink[] {\n\tif (!model || typeof model.getLineCount !== 'function' || typeof model.getLineContent !== 'function') {\n\t\t// Unknown caller!\n\t\treturn [];\n\t}\n\treturn 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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { ScopedLineTokens } from 'vs/editor/common/modes/supports';\nimport { CharacterPair, IAutoClosingPair, IAutoClosingPairConditional, StandardAutoClosingPairConditional } from 'vs/editor/common/modes/languageConfiguration';\n\nexport class CharacterPairSupport {\n\n\tprivate readonly _autoClosingPairs: StandardAutoClosingPairConditional[];\n\tprivate readonly _surroundingPairs: IAutoClosingPair[];\n\n\tconstructor(config: { brackets?: CharacterPair[]; autoClosingPairs?: IAutoClosingPairConditional[], surroundingPairs?: IAutoClosingPair[] }) {\n\t\tif (config.autoClosingPairs) {\n\t\t\tthis._autoClosingPairs = config.autoClosingPairs.map(el => new StandardAutoClosingPairConditional(el));\n\t\t} else if (config.brackets) {\n\t\t\tthis._autoClosingPairs = config.brackets.map(b => new StandardAutoClosingPairConditional({ open: b[0], close: b[1] }));\n\t\t} else {\n\t\t\tthis._autoClosingPairs = [];\n\t\t}\n\n\t\tthis._surroundingPairs = config.surroundingPairs || this._autoClosingPairs;\n\t}\n\n\tpublic getAutoClosingPairs(): IAutoClosingPair[] {\n\t\treturn this._autoClosingPairs;\n\t}\n\n\tpublic shouldAutoClosePair(character: string, context: ScopedLineTokens, column: number): boolean {\n\t\t// Always complete on empty line\n\t\tif (context.getTokenCount() === 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet tokenIndex = context.findTokenIndexAtOffset(column - 2);\n\t\tlet standardTokenType = context.getStandardTokenType(tokenIndex);\n\n\t\tfor (let i = 0; i < this._autoClosingPairs.length; ++i) {\n\t\t\tlet autoClosingPair = this._autoClosingPairs[i];\n\n\t\t\tif (autoClosingPair.open === character) {\n\t\t\t\treturn autoClosingPair.isOK(standardTokenType);\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic getSurroundingPairs(): IAutoClosingPair[] {\n\t\treturn this._surroundingPairs;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as strings from 'vs/base/common/strings';\nimport { IndentationRule, IndentAction } from 'vs/editor/common/modes/languageConfiguration';\n\nexport const enum IndentConsts {\n\tINCREASE_MASK = 0b00000001,\n\tDECREASE_MASK = 0b00000010,\n\tINDENT_NEXTLINE_MASK = 0b00000100,\n\tUNINDENT_MASK = 0b00001000,\n};\n\nexport class IndentRulesSupport {\n\n\tprivate readonly _indentationRules: IndentationRule;\n\n\tconstructor(indentationRules: IndentationRule) {\n\t\tthis._indentationRules = indentationRules;\n\t}\n\n\tpublic onType(text: string): IndentAction {\n\t\tif (this._indentationRules) {\n\t\t\tif (this._indentationRules.unIndentedLinePattern && this._indentationRules.unIndentedLinePattern.test(text)) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (this._indentationRules.decreaseIndentPattern && this._indentationRules.decreaseIndentPattern.test(text)) {\n\t\t\t\treturn IndentAction.Outdent;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic containNonWhitespace(text: string): boolean {\n\t\t// the text doesn't contain any non-whitespace character.\n\t\tlet nonWhitespaceIdx = strings.lastNonWhitespaceIndex(text);\n\n\t\tif (nonWhitespaceIdx >= 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tpublic shouldIncrease(text: string): boolean {\n\t\tif (this._indentationRules) {\n\t\t\tif (this._indentationRules.increaseIndentPattern && this._indentationRules.increaseIndentPattern.test(text)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\t// if (this._indentationRules.indentNextLinePattern && this._indentationRules.indentNextLinePattern.test(text)) {\n\t\t\t// \treturn true;\n\t\t\t// }\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic shouldDecrease(text: string): boolean {\n\t\tif (this._indentationRules && this._indentationRules.decreaseIndentPattern && this._indentationRules.decreaseIndentPattern.test(text)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic shouldIndentNextLine(text: string): boolean {\n\t\tif (this._indentationRules && this._indentationRules.indentNextLinePattern && this._indentationRules.indentNextLinePattern.test(text)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tpublic shouldIgnore(text: string): boolean {\n\t\t// the text matches `unIndentedLinePattern`\n\t\tif (this._indentationRules && this._indentationRules.unIndentedLinePattern && this._indentationRules.unIndentedLinePattern.test(text)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tpublic getIndentMetadata(text: string): number {\n\t\tlet ret = 0;\n\t\tif (this.shouldIncrease(text)) {\n\t\t\tret += IndentConsts.INCREASE_MASK;\n\t\t}\n\t\tif (this.shouldDecrease(text)) {\n\t\t\tret += IndentConsts.DECREASE_MASK;\n\t\t}\n\t\tif (this.shouldIndentNextLine(text)) {\n\t\t\tret += IndentConsts.INDENT_NEXTLINE_MASK;\n\t\t}\n\t\tif (this.shouldIgnore(text)) {\n\t\t\tret += IndentConsts.UNINDENT_MASK;\n\t\t}\n\t\treturn ret;\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { IInplaceReplaceSupportResult } from 'vs/editor/common/modes';\nimport { IRange } from 'vs/editor/common/core/range';\n\nexport class BasicInplaceReplace {\n\n\tpublic static INSTANCE = new BasicInplaceReplace();\n\n\tpublic navigateValueSet(range1: IRange, text1: string, range2: IRange, text2: string, up: boolean): IInplaceReplaceSupportResult {\n\n\t\tif (range1 && text1) {\n\t\t\tlet result = this.doNavigateValueSet(text1, up);\n\t\t\tif (result) {\n\t\t\t\treturn {\n\t\t\t\t\trange: range1,\n\t\t\t\t\tvalue: result\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (range2 && text2) {\n\t\t\tlet result = this.doNavigateValueSet(text2, up);\n\t\t\tif (result) {\n\t\t\t\treturn {\n\t\t\t\t\trange: range2,\n\t\t\t\t\tvalue: result\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate doNavigateValueSet(text: string, up: boolean): string {\n\t\tlet numberResult = this.numberReplace(text, up);\n\t\tif (numberResult !== null) {\n\t\t\treturn numberResult;\n\t\t}\n\t\treturn this.textReplace(text, up);\n\t}\n\n\tprivate numberReplace(value: string, up: boolean): string {\n\t\tvar precision = Math.pow(10, value.length - (value.lastIndexOf('.') + 1)),\n\t\t\tn1 = Number(value),\n\t\t\tn2 = parseFloat(value);\n\n\t\tif (!isNaN(n1) && !isNaN(n2) && n1 === n2) {\n\n\t\t\tif (n1 === 0 && !up) {\n\t\t\t\treturn null; // don't do negative\n\t\t\t\t//\t\t\t} else if(n1 === 9 && up) {\n\t\t\t\t//\t\t\t\treturn null; // don't insert 10 into a number\n\t\t\t} else {\n\t\t\t\tn1 = Math.floor(n1 * precision);\n\t\t\t\tn1 += up ? precision : -precision;\n\t\t\t\treturn String(n1 / precision);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate _defaultValueSet: string[][] = [\n\t\t['true', 'false'],\n\t\t['True', 'False'],\n\t\t['Private', 'Public', 'Friend', 'ReadOnly', 'Partial', 'Protected', 'WriteOnly'],\n\t\t['public', 'protected', 'private'],\n\t];\n\n\tprivate textReplace(value: string, up: boolean): string {\n\t\treturn this.valueSetsReplace(this._defaultValueSet, value, up);\n\t}\n\n\tprivate valueSetsReplace(valueSets: string[][], value: string, up: boolean): string {\n\t\tvar result: string = null;\n\t\tfor (let i = 0, len = valueSets.length; result === null && i < len; i++) {\n\t\t\tresult = this.valueSetReplace(valueSets[i], value, up);\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate valueSetReplace(valueSet: string[], value: string, up: boolean): string {\n\t\tvar idx = valueSet.indexOf(value);\n\t\tif (idx >= 0) {\n\t\t\tidx += up ? +1 : -1;\n\t\t\tif (idx < 0) {\n\t\t\t\tidx = valueSet.length - 1;\n\t\t\t} else {\n\t\t\t\tidx %= valueSet.length;\n\t\t\t}\n\t\t\treturn valueSet[idx];\n\t\t}\n\t\treturn null;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport * as strings from 'vs/base/common/strings';\nimport { CharacterPair, IndentationRule, IndentAction, EnterAction, OnEnterRule } from 'vs/editor/common/modes/languageConfiguration';\n\nexport interface IOnEnterSupportOptions {\n\tbrackets?: CharacterPair[];\n\tindentationRules?: IndentationRule;\n\tregExpRules?: OnEnterRule[];\n}\n\ninterface IProcessedBracketPair {\n\topen: string;\n\tclose: string;\n\topenRegExp: RegExp;\n\tcloseRegExp: RegExp;\n}\n\nexport class OnEnterSupport {\n\n\tprivate readonly _brackets: IProcessedBracketPair[];\n\tprivate readonly _indentationRules: IndentationRule;\n\tprivate readonly _regExpRules: OnEnterRule[];\n\n\tconstructor(opts?: IOnEnterSupportOptions) {\n\t\topts = opts || {};\n\t\topts.brackets = opts.brackets || [\n\t\t\t['(', ')'],\n\t\t\t['{', '}'],\n\t\t\t['[', ']']\n\t\t];\n\n\t\tthis._brackets = opts.brackets.map((bracket) => {\n\t\t\treturn {\n\t\t\t\topen: bracket[0],\n\t\t\t\topenRegExp: OnEnterSupport._createOpenBracketRegExp(bracket[0]),\n\t\t\t\tclose: bracket[1],\n\t\t\t\tcloseRegExp: OnEnterSupport._createCloseBracketRegExp(bracket[1]),\n\t\t\t};\n\t\t});\n\t\tthis._regExpRules = opts.regExpRules || [];\n\t\tthis._indentationRules = opts.indentationRules;\n\t}\n\n\tpublic onEnter(oneLineAboveText: string, beforeEnterText: string, afterEnterText: string): EnterAction {\n\t\t// (1): `regExpRules`\n\t\tfor (let i = 0, len = this._regExpRules.length; i < len; i++) {\n\t\t\tlet rule = this._regExpRules[i];\n\t\t\tif (rule.beforeText.test(beforeEnterText)) {\n\t\t\t\tif (rule.afterText) {\n\t\t\t\t\tif (rule.afterText.test(afterEnterText)) {\n\t\t\t\t\t\treturn rule.action;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn rule.action;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// (2): Special indent-outdent\n\t\tif (beforeEnterText.length > 0 && afterEnterText.length > 0) {\n\t\t\tfor (let i = 0, len = this._brackets.length; i < len; i++) {\n\t\t\t\tlet bracket = this._brackets[i];\n\t\t\t\tif (bracket.openRegExp.test(beforeEnterText) && bracket.closeRegExp.test(afterEnterText)) {\n\t\t\t\t\treturn { indentAction: IndentAction.IndentOutdent };\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\n\t\t// (4): Open bracket based logic\n\t\tif (beforeEnterText.length > 0) {\n\t\t\tfor (let i = 0, len = this._brackets.length; i < len; i++) {\n\t\t\t\tlet bracket = this._brackets[i];\n\t\t\t\tif (bracket.openRegExp.test(beforeEnterText)) {\n\t\t\t\t\treturn { indentAction: IndentAction.Indent };\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate static _createOpenBracketRegExp(bracket: string): RegExp {\n\t\tvar str = strings.escapeRegExpCharacters(bracket);\n\t\tif (!/\\B/.test(str.charAt(0))) {\n\t\t\tstr = '\\\\b' + str;\n\t\t}\n\t\tstr += '\\\\s*$';\n\t\treturn OnEnterSupport._safeRegExp(str);\n\t}\n\n\tprivate static _createCloseBracketRegExp(bracket: string): RegExp {\n\t\tvar str = strings.escapeRegExpCharacters(bracket);\n\t\tif (!/\\B/.test(str.charAt(str.length - 1))) {\n\t\t\tstr = str + '\\\\b';\n\t\t}\n\t\tstr = '^\\\\s*' + str;\n\t\treturn OnEnterSupport._safeRegExp(str);\n\t}\n\n\tprivate static _safeRegExp(def: string): RegExp {\n\t\ttry {\n\t\t\treturn new RegExp(def);\n\t\t} catch (err) {\n\t\t\tonUnexpectedError(err);\n\t\t\treturn null;\n\t\t}\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as strings from 'vs/base/common/strings';\nimport { Range } from 'vs/editor/common/core/range';\nimport { CharacterPair } from 'vs/editor/common/modes/languageConfiguration';\nimport { LanguageIdentifier } from 'vs/editor/common/modes';\n\ninterface ISimpleInternalBracket {\n\topen: string;\n\tclose: string;\n}\n\nexport class RichEditBracket {\n\t_richEditBracketBrand: void;\n\n\treadonly languageIdentifier: LanguageIdentifier;\n\treadonly open: string;\n\treadonly close: string;\n\treadonly forwardRegex: RegExp;\n\treadonly reversedRegex: RegExp;\n\n\tconstructor(languageIdentifier: LanguageIdentifier, open: string, close: string, forwardRegex: RegExp, reversedRegex: RegExp) {\n\t\tthis.languageIdentifier = languageIdentifier;\n\t\tthis.open = open;\n\t\tthis.close = close;\n\t\tthis.forwardRegex = forwardRegex;\n\t\tthis.reversedRegex = reversedRegex;\n\t}\n}\n\nexport class RichEditBrackets {\n\t_richEditBracketsBrand: void;\n\n\tpublic readonly brackets: RichEditBracket[];\n\tpublic readonly forwardRegex: RegExp;\n\tpublic readonly reversedRegex: RegExp;\n\tpublic readonly maxBracketLength: number;\n\tpublic readonly textIsBracket: { [text: string]: RichEditBracket; };\n\tpublic readonly textIsOpenBracket: { [text: string]: boolean; };\n\n\tconstructor(languageIdentifier: LanguageIdentifier, brackets: CharacterPair[]) {\n\t\tthis.brackets = brackets.map((b) => {\n\t\t\treturn new RichEditBracket(\n\t\t\t\tlanguageIdentifier,\n\t\t\t\tb[0],\n\t\t\t\tb[1],\n\t\t\t\tgetRegexForBracketPair({ open: b[0], close: b[1] }),\n\t\t\t\tgetReversedRegexForBracketPair({ open: b[0], close: b[1] })\n\t\t\t);\n\t\t});\n\t\tthis.forwardRegex = getRegexForBrackets(this.brackets);\n\t\tthis.reversedRegex = getReversedRegexForBrackets(this.brackets);\n\n\t\tthis.textIsBracket = {};\n\t\tthis.textIsOpenBracket = {};\n\n\t\tlet maxBracketLength = 0;\n\t\tthis.brackets.forEach((b) => {\n\t\t\tthis.textIsBracket[b.open.toLowerCase()] = b;\n\t\t\tthis.textIsBracket[b.close.toLowerCase()] = b;\n\t\t\tthis.textIsOpenBracket[b.open.toLowerCase()] = true;\n\t\t\tthis.textIsOpenBracket[b.close.toLowerCase()] = false;\n\t\t\tmaxBracketLength = Math.max(maxBracketLength, b.open.length);\n\t\t\tmaxBracketLength = Math.max(maxBracketLength, b.close.length);\n\t\t});\n\t\tthis.maxBracketLength = maxBracketLength;\n\t}\n}\n\nfunction once(keyFn: (input: T) => string, computeFn: (input: T) => R): (input: T) => R {\n\tlet cache: { [key: string]: R; } = {};\n\treturn (input: T): R => {\n\t\tlet key = keyFn(input);\n\t\tif (!cache.hasOwnProperty(key)) {\n\t\t\tcache[key] = computeFn(input);\n\t\t}\n\t\treturn cache[key];\n\t};\n}\n\nvar getRegexForBracketPair = once(\n\t(input) => `${input.open};${input.close}`,\n\t(input) => {\n\t\treturn createOrRegex([input.open, input.close]);\n\t}\n);\n\nvar getReversedRegexForBracketPair = once(\n\t(input) => `${input.open};${input.close}`,\n\t(input) => {\n\t\treturn createOrRegex([toReversedString(input.open), toReversedString(input.close)]);\n\t}\n);\n\nvar getRegexForBrackets = once(\n\t(input) => input.map(b => `${b.open};${b.close}`).join(';'),\n\t(input) => {\n\t\tlet pieces: string[] = [];\n\t\tinput.forEach((b) => {\n\t\t\tpieces.push(b.open);\n\t\t\tpieces.push(b.close);\n\t\t});\n\t\treturn createOrRegex(pieces);\n\t}\n);\n\nvar getReversedRegexForBrackets = once(\n\t(input) => input.map(b => `${b.open};${b.close}`).join(';'),\n\t(input) => {\n\t\tlet pieces: string[] = [];\n\t\tinput.forEach((b) => {\n\t\t\tpieces.push(toReversedString(b.open));\n\t\t\tpieces.push(toReversedString(b.close));\n\t\t});\n\t\treturn createOrRegex(pieces);\n\t}\n);\n\nfunction createOrRegex(pieces: string[]): RegExp {\n\tlet regexStr = `(${pieces.map(strings.escapeRegExpCharacters).join(')|(')})`;\n\treturn strings.createRegExp(regexStr, true);\n}\n\nlet toReversedString = (function () {\n\n\tfunction reverse(str: string): string {\n\t\tlet reversedStr = '';\n\t\tfor (let i = str.length - 1; i >= 0; i--) {\n\t\t\treversedStr += str.charAt(i);\n\t\t}\n\t\treturn reversedStr;\n\t}\n\n\tlet lastInput: string = null;\n\tlet lastOutput: string = null;\n\treturn function toReversedString(str: string): string {\n\t\tif (lastInput !== str) {\n\t\t\tlastInput = str;\n\t\t\tlastOutput = reverse(lastInput);\n\t\t}\n\t\treturn lastOutput;\n\t};\n})();\n\nexport class BracketsUtils {\n\n\tprivate static _findPrevBracketInText(reversedBracketRegex: RegExp, lineNumber: number, reversedText: string, offset: number): Range {\n\t\tlet m = reversedText.match(reversedBracketRegex);\n\n\t\tif (!m) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet matchOffset = reversedText.length - m.index;\n\t\tlet matchLength = m[0].length;\n\t\tlet absoluteMatchOffset = offset + matchOffset;\n\n\t\treturn new Range(lineNumber, absoluteMatchOffset - matchLength + 1, lineNumber, absoluteMatchOffset + 1);\n\t}\n\n\tpublic static findPrevBracketInToken(reversedBracketRegex: RegExp, lineNumber: number, lineText: string, currentTokenStart: number, currentTokenEnd: number): Range {\n\t\t// Because JS does not support backwards regex search, we search forwards in a reversed string with a reversed regex ;)\n\t\tlet reversedLineText = toReversedString(lineText);\n\t\tlet reversedTokenText = reversedLineText.substring(lineText.length - currentTokenEnd, lineText.length - currentTokenStart);\n\n\t\treturn this._findPrevBracketInText(reversedBracketRegex, lineNumber, reversedTokenText, currentTokenStart);\n\t}\n\n\tpublic static findNextBracketInText(bracketRegex: RegExp, lineNumber: number, text: string, offset: number): Range {\n\t\tlet m = text.match(bracketRegex);\n\n\t\tif (!m) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet matchOffset = m.index;\n\t\tlet matchLength = m[0].length;\n\t\tlet absoluteMatchOffset = offset + matchOffset;\n\n\t\treturn new Range(lineNumber, absoluteMatchOffset + 1, lineNumber, absoluteMatchOffset + 1 + matchLength);\n\t}\n\n\tpublic static findNextBracketInToken(bracketRegex: RegExp, lineNumber: number, lineText: string, currentTokenStart: number, currentTokenEnd: number): Range {\n\t\tlet currentTokenText = lineText.substring(currentTokenStart, currentTokenEnd);\n\n\t\treturn this.findNextBracketInText(bracketRegex, lineNumber, currentTokenText, currentTokenStart);\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { ColorId, FontStyle, MetadataConsts, LanguageId, StandardTokenType } from 'vs/editor/common/modes';\nimport { Color } from 'vs/base/common/color';\n\nexport interface ITokenThemeRule {\n\ttoken: string;\n\tforeground?: string;\n\tbackground?: string;\n\tfontStyle?: string;\n}\n\nexport class ParsedTokenThemeRule {\n\t_parsedThemeRuleBrand: void;\n\n\treadonly token: string;\n\treadonly index: number;\n\n\t/**\n\t * -1 if not set. An or mask of `FontStyle` otherwise.\n\t */\n\treadonly fontStyle: FontStyle;\n\treadonly foreground: string;\n\treadonly background: string;\n\n\tconstructor(\n\t\ttoken: string,\n\t\tindex: number,\n\t\tfontStyle: number,\n\t\tforeground: string,\n\t\tbackground: string,\n\t) {\n\t\tthis.token = token;\n\t\tthis.index = index;\n\t\tthis.fontStyle = fontStyle;\n\t\tthis.foreground = foreground;\n\t\tthis.background = background;\n\t}\n}\n\n/**\n * Parse a raw theme into rules.\n */\nexport function parseTokenTheme(source: ITokenThemeRule[]): ParsedTokenThemeRule[] {\n\tif (!source || !Array.isArray(source)) {\n\t\treturn [];\n\t}\n\tlet result: ParsedTokenThemeRule[] = [], resultLen = 0;\n\tfor (let i = 0, len = source.length; i < len; i++) {\n\t\tlet entry = source[i];\n\n\t\tlet fontStyle: number = FontStyle.NotSet;\n\t\tif (typeof entry.fontStyle === 'string') {\n\t\t\tfontStyle = FontStyle.None;\n\n\t\t\tlet segments = entry.fontStyle.split(' ');\n\t\t\tfor (let j = 0, lenJ = segments.length; j < lenJ; j++) {\n\t\t\t\tlet segment = segments[j];\n\t\t\t\tswitch (segment) {\n\t\t\t\t\tcase 'italic':\n\t\t\t\t\t\tfontStyle = fontStyle | FontStyle.Italic;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bold':\n\t\t\t\t\t\tfontStyle = fontStyle | FontStyle.Bold;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'underline':\n\t\t\t\t\t\tfontStyle = fontStyle | FontStyle.Underline;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet foreground: string = null;\n\t\tif (typeof entry.foreground === 'string') {\n\t\t\tforeground = entry.foreground;\n\t\t}\n\n\t\tlet background: string = null;\n\t\tif (typeof entry.background === 'string') {\n\t\t\tbackground = entry.background;\n\t\t}\n\n\t\tresult[resultLen++] = new ParsedTokenThemeRule(\n\t\t\tentry.token || '',\n\t\t\ti,\n\t\t\tfontStyle,\n\t\t\tforeground,\n\t\t\tbackground\n\t\t);\n\t}\n\n\treturn result;\n}\n\n/**\n * Resolve rules (i.e. inheritance).\n */\nfunction resolveParsedTokenThemeRules(parsedThemeRules: ParsedTokenThemeRule[]): TokenTheme {\n\n\t// Sort rules lexicographically, and then by index if necessary\n\tparsedThemeRules.sort((a, b) => {\n\t\tlet r = strcmp(a.token, b.token);\n\t\tif (r !== 0) {\n\t\t\treturn r;\n\t\t}\n\t\treturn a.index - b.index;\n\t});\n\n\t// Determine defaults\n\tlet defaultFontStyle = FontStyle.None;\n\tlet defaultForeground = '000000';\n\tlet defaultBackground = 'ffffff';\n\twhile (parsedThemeRules.length >= 1 && parsedThemeRules[0].token === '') {\n\t\tlet incomingDefaults = parsedThemeRules.shift();\n\t\tif (incomingDefaults.fontStyle !== FontStyle.NotSet) {\n\t\t\tdefaultFontStyle = incomingDefaults.fontStyle;\n\t\t}\n\t\tif (incomingDefaults.foreground !== null) {\n\t\t\tdefaultForeground = incomingDefaults.foreground;\n\t\t}\n\t\tif (incomingDefaults.background !== null) {\n\t\t\tdefaultBackground = incomingDefaults.background;\n\t\t}\n\t}\n\tlet colorMap = new ColorMap();\n\t// ensure default foreground gets id 1 and default background gets id 2\n\tlet defaults = new ThemeTrieElementRule(defaultFontStyle, colorMap.getId(defaultForeground), colorMap.getId(defaultBackground));\n\n\tlet root = new ThemeTrieElement(defaults);\n\tfor (let i = 0, len = parsedThemeRules.length; i < len; i++) {\n\t\tlet rule = parsedThemeRules[i];\n\t\troot.insert(rule.token, rule.fontStyle, colorMap.getId(rule.foreground), colorMap.getId(rule.background));\n\t}\n\n\treturn new TokenTheme(colorMap, root);\n}\n\nexport class ColorMap {\n\n\tprivate _lastColorId: number;\n\tprivate _id2color: Color[];\n\tprivate _color2id: Map;\n\n\tconstructor() {\n\t\tthis._lastColorId = 0;\n\t\tthis._id2color = [];\n\t\tthis._color2id = new Map();\n\t}\n\n\tpublic getId(color: string): ColorId {\n\t\tif (color === null) {\n\t\t\treturn 0;\n\t\t}\n\t\tcolor = color.toUpperCase();\n\t\tif (!/^[0-9A-F]{6}$/.test(color)) {\n\t\t\tthrow new Error('Illegal color name: ' + color);\n\t\t}\n\t\tlet value = this._color2id.get(color);\n\t\tif (value) {\n\t\t\treturn value;\n\t\t}\n\t\tvalue = ++this._lastColorId;\n\t\tthis._color2id.set(color, value);\n\t\tthis._id2color[value] = Color.fromHex('#' + color);\n\t\treturn value;\n\t}\n\n\tpublic getColorMap(): Color[] {\n\t\treturn this._id2color.slice(0);\n\t}\n\n}\n\nexport class TokenTheme {\n\n\tpublic static createFromRawTokenTheme(source: ITokenThemeRule[]): TokenTheme {\n\t\treturn this.createFromParsedTokenTheme(parseTokenTheme(source));\n\t}\n\n\tpublic static createFromParsedTokenTheme(source: ParsedTokenThemeRule[]): TokenTheme {\n\t\treturn resolveParsedTokenThemeRules(source);\n\t}\n\n\tprivate readonly _colorMap: ColorMap;\n\tprivate readonly _root: ThemeTrieElement;\n\tprivate readonly _cache: Map;\n\n\tconstructor(colorMap: ColorMap, root: ThemeTrieElement) {\n\t\tthis._colorMap = colorMap;\n\t\tthis._root = root;\n\t\tthis._cache = new Map();\n\t}\n\n\tpublic getColorMap(): Color[] {\n\t\treturn this._colorMap.getColorMap();\n\t}\n\n\t/**\n\t * used for testing purposes\n\t */\n\tpublic getThemeTrieElement(): ExternalThemeTrieElement {\n\t\treturn this._root.toExternalThemeTrieElement();\n\t}\n\n\tpublic _match(token: string): ThemeTrieElementRule {\n\t\treturn this._root.match(token);\n\t}\n\n\tpublic match(languageId: LanguageId, token: string): number {\n\t\t// The cache contains the metadata without the language bits set.\n\t\tlet result = this._cache.get(token);\n\t\tif (typeof result === 'undefined') {\n\t\t\tlet rule = this._match(token);\n\t\t\tlet standardToken = toStandardTokenType(token);\n\t\t\tresult = (\n\t\t\t\trule.metadata\n\t\t\t\t| (standardToken << MetadataConsts.TOKEN_TYPE_OFFSET)\n\t\t\t) >>> 0;\n\t\t\tthis._cache.set(token, result);\n\t\t}\n\n\t\treturn (\n\t\t\tresult\n\t\t\t| (languageId << MetadataConsts.LANGUAGEID_OFFSET)\n\t\t) >>> 0;\n\t}\n}\n\nconst STANDARD_TOKEN_TYPE_REGEXP = /\\b(comment|string|regex)\\b/;\nexport function toStandardTokenType(tokenType: string): StandardTokenType {\n\tlet m = tokenType.match(STANDARD_TOKEN_TYPE_REGEXP);\n\tif (!m) {\n\t\treturn StandardTokenType.Other;\n\t}\n\tswitch (m[1]) {\n\t\tcase 'comment':\n\t\t\treturn StandardTokenType.Comment;\n\t\tcase 'string':\n\t\t\treturn StandardTokenType.String;\n\t\tcase 'regex':\n\t\t\treturn StandardTokenType.RegEx;\n\t}\n\tthrow new Error('Unexpected match for standard token type!');\n}\n\nexport function strcmp(a: string, b: string): number {\n\tif (a < b) {\n\t\treturn -1;\n\t}\n\tif (a > b) {\n\t\treturn 1;\n\t}\n\treturn 0;\n}\n\nexport class ThemeTrieElementRule {\n\t_themeTrieElementRuleBrand: void;\n\n\tprivate _fontStyle: FontStyle;\n\tprivate _foreground: ColorId;\n\tprivate _background: ColorId;\n\tpublic metadata: number;\n\n\tconstructor(fontStyle: FontStyle, foreground: ColorId, background: ColorId) {\n\t\tthis._fontStyle = fontStyle;\n\t\tthis._foreground = foreground;\n\t\tthis._background = background;\n\t\tthis.metadata = (\n\t\t\t(this._fontStyle << MetadataConsts.FONT_STYLE_OFFSET)\n\t\t\t| (this._foreground << MetadataConsts.FOREGROUND_OFFSET)\n\t\t\t| (this._background << MetadataConsts.BACKGROUND_OFFSET)\n\t\t) >>> 0;\n\t}\n\n\tpublic clone(): ThemeTrieElementRule {\n\t\treturn new ThemeTrieElementRule(this._fontStyle, this._foreground, this._background);\n\t}\n\n\tpublic static cloneArr(arr: ThemeTrieElementRule[]): ThemeTrieElementRule[] {\n\t\tlet r: ThemeTrieElementRule[] = [];\n\t\tfor (let i = 0, len = arr.length; i < len; i++) {\n\t\t\tr[i] = arr[i].clone();\n\t\t}\n\t\treturn r;\n\t}\n\n\tpublic acceptOverwrite(fontStyle: FontStyle, foreground: ColorId, background: ColorId): void {\n\t\tif (fontStyle !== FontStyle.NotSet) {\n\t\t\tthis._fontStyle = fontStyle;\n\t\t}\n\t\tif (foreground !== ColorId.None) {\n\t\t\tthis._foreground = foreground;\n\t\t}\n\t\tif (background !== ColorId.None) {\n\t\t\tthis._background = background;\n\t\t}\n\t\tthis.metadata = (\n\t\t\t(this._fontStyle << MetadataConsts.FONT_STYLE_OFFSET)\n\t\t\t| (this._foreground << MetadataConsts.FOREGROUND_OFFSET)\n\t\t\t| (this._background << MetadataConsts.BACKGROUND_OFFSET)\n\t\t) >>> 0;\n\t}\n}\n\nexport class ExternalThemeTrieElement {\n\n\tpublic readonly mainRule: ThemeTrieElementRule;\n\tpublic readonly children: { [segment: string]: ExternalThemeTrieElement };\n\n\tconstructor(mainRule: ThemeTrieElementRule, children?: { [segment: string]: ExternalThemeTrieElement }) {\n\t\tthis.mainRule = mainRule;\n\t\tthis.children = children || Object.create(null);\n\t}\n}\n\nexport class ThemeTrieElement {\n\t_themeTrieElementBrand: void;\n\n\tprivate readonly _mainRule: ThemeTrieElementRule;\n\tprivate readonly _children: Map;\n\n\tconstructor(mainRule: ThemeTrieElementRule) {\n\t\tthis._mainRule = mainRule;\n\t\tthis._children = new Map();\n\t}\n\n\t/**\n\t * used for testing purposes\n\t */\n\tpublic toExternalThemeTrieElement(): ExternalThemeTrieElement {\n\t\tlet children: { [segment: string]: ExternalThemeTrieElement } = Object.create(null);\n\t\tthis._children.forEach((element, index) => {\n\t\t\tchildren[index] = element.toExternalThemeTrieElement();\n\t\t});\n\t\treturn new ExternalThemeTrieElement(this._mainRule, children);\n\t}\n\n\tpublic match(token: string): ThemeTrieElementRule {\n\t\tif (token === '') {\n\t\t\treturn this._mainRule;\n\t\t}\n\n\t\tlet dotIndex = token.indexOf('.');\n\t\tlet head: string;\n\t\tlet tail: string;\n\t\tif (dotIndex === -1) {\n\t\t\thead = token;\n\t\t\ttail = '';\n\t\t} else {\n\t\t\thead = token.substring(0, dotIndex);\n\t\t\ttail = token.substring(dotIndex + 1);\n\t\t}\n\n\t\tlet child = this._children.get(head);\n\t\tif (typeof child !== 'undefined') {\n\t\t\treturn child.match(tail);\n\t\t}\n\n\t\treturn this._mainRule;\n\t}\n\n\tpublic insert(token: string, fontStyle: FontStyle, foreground: ColorId, background: ColorId): void {\n\t\tif (token === '') {\n\t\t\t// Merge into the main rule\n\t\t\tthis._mainRule.acceptOverwrite(fontStyle, foreground, background);\n\t\t\treturn;\n\t\t}\n\n\t\tlet dotIndex = token.indexOf('.');\n\t\tlet head: string;\n\t\tlet tail: string;\n\t\tif (dotIndex === -1) {\n\t\t\thead = token;\n\t\t\ttail = '';\n\t\t} else {\n\t\t\thead = token.substring(0, dotIndex);\n\t\t\ttail = token.substring(dotIndex + 1);\n\t\t}\n\n\t\tlet child = this._children.get(head);\n\t\tif (typeof child === 'undefined') {\n\t\t\tchild = new ThemeTrieElement(this._mainRule.clone());\n\t\t\tthis._children.set(head, child);\n\t\t}\n\n\t\tchild.insert(tail, fontStyle, foreground, background);\n\t}\n}\n\nexport function generateTokensCSSForColorMap(colorMap: Color[]): string {\n\tlet rules: string[] = [];\n\tfor (let i = 1, len = colorMap.length; i < len; i++) {\n\t\tlet color = colorMap[i];\n\t\trules[i] = `.mtk${i} { color: ${color.toString()}; }`;\n\t}\n\trules.push('.mtki { font-style: italic; }');\n\trules.push('.mtkb { font-weight: bold; }');\n\trules.push('.mtku { text-decoration: underline; }');\n\treturn rules.join('\\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'use strict';\n\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { ColorId, ITokenizationRegistry, ITokenizationSupport, ITokenizationSupportChangedEvent } from 'vs/editor/common/modes';\nimport { Color } from 'vs/base/common/color';\nimport * as objects from 'vs/base/common/objects';\n\nexport class TokenizationRegistryImpl implements ITokenizationRegistry {\n\n\tprivate _map: { [language: string]: ITokenizationSupport };\n\n\tprivate _onDidChange: Emitter = new Emitter();\n\tpublic onDidChange: Event = this._onDidChange.event;\n\n\tprivate _colorMap: Color[];\n\n\tconstructor() {\n\t\tthis._map = Object.create(null);\n\t\tthis._colorMap = null;\n\t}\n\n\tpublic fire(languages: string[]): void {\n\t\tthis._onDidChange.fire({\n\t\t\tchangedLanguages: languages,\n\t\t\tchangedColorMap: false\n\t\t});\n\t}\n\n\tpublic register(language: string, support: ITokenizationSupport): IDisposable {\n\t\tthis._map[language] = support;\n\t\tthis.fire([language]);\n\t\treturn {\n\t\t\tdispose: () => {\n\t\t\t\tif (this._map[language] !== support) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tdelete this._map[language];\n\t\t\t\tthis.fire([language]);\n\t\t\t}\n\t\t};\n\t}\n\n\tpublic get(language: string): ITokenizationSupport {\n\t\treturn (this._map[language] || null);\n\t}\n\n\tpublic setColorMap(colorMap: Color[]): void {\n\t\tif (!objects.equals(colorMap, this._colorMap)) {\n\t\t\tthis._colorMap = colorMap;\n\t\t\tthis._onDidChange.fire({\n\t\t\t\tchangedLanguages: Object.keys(this._map),\n\t\t\t\tchangedColorMap: true\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic getColorMap(): Color[] {\n\t\treturn this._colorMap;\n\t}\n\n\tpublic getDefaultForeground(): Color {\n\t\treturn this._colorMap[ColorId.DefaultForeground];\n\t}\n\n\tpublic getDefaultBackground(): Color {\n\t\treturn this._colorMap[ColorId.DefaultBackground];\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { MarkedString } from 'vs/base/common/htmlContent';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport URI from 'vs/base/common/uri';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { TokenizationResult, TokenizationResult2 } from 'vs/editor/common/core/token';\nimport LanguageFeatureRegistry from 'vs/editor/common/modes/languageFeatureRegistry';\nimport { CancellationToken } from 'vs/base/common/cancellation';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range, IRange } from 'vs/editor/common/core/range';\nimport Event from 'vs/base/common/event';\nimport { TokenizationRegistryImpl } from 'vs/editor/common/modes/tokenizationRegistry';\nimport { Color } from 'vs/base/common/color';\n\n/**\n * Open ended enum at runtime\n * @internal\n */\nexport const enum LanguageId {\n\tNull = 0,\n\tPlainText = 1\n}\n\n/**\n * @internal\n */\nexport class LanguageIdentifier {\n\n\t/**\n\t * A string identifier. Unique across languages. e.g. 'javascript'.\n\t */\n\tpublic readonly language: string;\n\n\t/**\n\t * A numeric identifier. Unique across languages. e.g. 5\n\t * Will vary at runtime based on registration order, etc.\n\t */\n\tpublic readonly id: LanguageId;\n\n\tconstructor(language: string, id: LanguageId) {\n\t\tthis.language = language;\n\t\tthis.id = id;\n\t}\n}\n\n/**\n * A mode. Will soon be obsolete.\n * @internal\n */\nexport interface IMode {\n\n\tgetId(): string;\n\n\tgetLanguageIdentifier(): LanguageIdentifier;\n\n}\n\n/**\n * A font style. Values are 2^x such that a bit mask can be used.\n * @internal\n */\nexport const enum FontStyle {\n\tNotSet = -1,\n\tNone = 0,\n\tItalic = 1,\n\tBold = 2,\n\tUnderline = 4\n}\n\n/**\n * Open ended enum at runtime\n * @internal\n */\nexport const enum ColorId {\n\tNone = 0,\n\tDefaultForeground = 1,\n\tDefaultBackground = 2\n}\n\n/**\n * A standard token type. Values are 2^x such that a bit mask can be used.\n * @internal\n */\nexport const enum StandardTokenType {\n\tOther = 0,\n\tComment = 1,\n\tString = 2,\n\tRegEx = 4\n}\n\n/**\n * Helpers to manage the \"collapsed\" metadata of an entire StackElement stack.\n * The following assumptions have been made:\n * - languageId < 256 => needs 8 bits\n * - unique color count < 512 => needs 9 bits\n *\n * The binary format is:\n * - -------------------------------------------\n * 3322 2222 2222 1111 1111 1100 0000 0000\n * 1098 7654 3210 9876 5432 1098 7654 3210\n * - -------------------------------------------\n * xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx\n * bbbb bbbb bfff ffff ffFF FTTT LLLL LLLL\n * - -------------------------------------------\n * - L = LanguageId (8 bits)\n * - T = StandardTokenType (3 bits)\n * - F = FontStyle (3 bits)\n * - f = foreground color (9 bits)\n * - b = background color (9 bits)\n *\n * @internal\n */\nexport const enum MetadataConsts {\n\tLANGUAGEID_MASK = 0b00000000000000000000000011111111,\n\tTOKEN_TYPE_MASK = 0b00000000000000000000011100000000,\n\tFONT_STYLE_MASK = 0b00000000000000000011100000000000,\n\tFOREGROUND_MASK = 0b00000000011111111100000000000000,\n\tBACKGROUND_MASK = 0b11111111100000000000000000000000,\n\n\tLANGUAGEID_OFFSET = 0,\n\tTOKEN_TYPE_OFFSET = 8,\n\tFONT_STYLE_OFFSET = 11,\n\tFOREGROUND_OFFSET = 14,\n\tBACKGROUND_OFFSET = 23\n}\n\n/**\n * @internal\n */\nexport interface ITokenizationSupport {\n\n\tgetInitialState(): IState;\n\n\t// add offsetDelta to each of the returned indices\n\ttokenize(line: string, state: IState, offsetDelta: number): TokenizationResult;\n\n\ttokenize2(line: string, state: IState, offsetDelta: number): TokenizationResult2;\n}\n\n/**\n * The state of the tokenizer between two lines.\n * It is useful to store flags such as in multiline comment, etc.\n * The model will clone the previous line's state and pass it in to tokenize the next line.\n */\nexport interface IState {\n\tclone(): IState;\n\tequals(other: IState): boolean;\n}\n\n/**\n * A hover represents additional information for a symbol or word. Hovers are\n * rendered in a tooltip-like widget.\n */\nexport interface Hover {\n\t/**\n\t * The contents of this hover.\n\t */\n\tcontents: MarkedString[];\n\n\t/**\n\t * The range to which this hover applies. When missing, the\n\t * editor will use the range at the current position or the\n\t * current position itself.\n\t */\n\trange: IRange;\n}\n\n/**\n * The hover provider interface defines the contract between extensions and\n * the [hover](https://code.visualstudio.com/docs/editor/intellisense)-feature.\n */\nexport interface HoverProvider {\n\t/**\n\t * Provide a hover for the given position and document. Multiple hovers at the same\n\t * position will be merged by the editor. A hover can have a range which defaults\n\t * to the word range at the position when omitted.\n\t */\n\tprovideHover(model: editorCommon.IReadOnlyModel, position: Position, token: CancellationToken): Hover | Thenable;\n}\n\n/**\n * @internal\n */\nexport type SuggestionType = 'method'\n\t| 'function'\n\t| 'constructor'\n\t| 'field'\n\t| 'variable'\n\t| 'class'\n\t| 'struct'\n\t| 'interface'\n\t| 'module'\n\t| 'property'\n\t| 'event'\n\t| 'operator'\n\t| 'unit'\n\t| 'value'\n\t| 'constant'\n\t| 'enum'\n\t| 'enum-member'\n\t| 'keyword'\n\t| 'snippet'\n\t| 'text'\n\t| 'color'\n\t| 'file'\n\t| 'reference'\n\t| 'customcolor'\n\t| 'folder'\n\t| 'type-parameter';\n\n/**\n * @internal\n */\nexport type SnippetType = 'internal' | 'textmate';\n\n/**\n * @internal\n */\nexport interface ISuggestion {\n\tlabel: string;\n\tinsertText: string;\n\ttype: SuggestionType;\n\tdetail?: string;\n\tdocumentation?: string;\n\tfilterText?: string;\n\tsortText?: string;\n\tnoAutoAccept?: boolean;\n\tcommitCharacters?: string[];\n\toverwriteBefore?: number;\n\toverwriteAfter?: number;\n\tadditionalTextEdits?: editorCommon.ISingleEditOperation[];\n\tcommand?: Command;\n\tsnippetType?: SnippetType;\n}\n\n/**\n * @internal\n */\nexport interface ISuggestResult {\n\tsuggestions: ISuggestion[];\n\tincomplete?: boolean;\n}\n\n/**\n * @internal\n */\nexport interface ISuggestSupport {\n\n\ttriggerCharacters?: string[];\n\n\tprovideCompletionItems(model: editorCommon.IModel, position: Position, token: CancellationToken): ISuggestResult | Thenable;\n\n\tresolveCompletionItem?(model: editorCommon.IModel, position: Position, item: ISuggestion, token: CancellationToken): ISuggestion | Thenable;\n}\n\n/**\n * Interface used to quick fix typing errors while accesing member fields.\n */\nexport interface CodeAction {\n\tcommand: Command;\n\tscore: number;\n}\n/**\n * The code action interface defines the contract between extensions and\n * the [light bulb](https://code.visualstudio.com/docs/editor/editingevolved#_code-action) feature.\n * @internal\n */\nexport interface CodeActionProvider {\n\t/**\n\t * Provide commands for the given document and range.\n\t */\n\tprovideCodeActions(model: editorCommon.IReadOnlyModel, range: Range, token: CancellationToken): CodeAction[] | Thenable;\n}\n\n/**\n * Represents a parameter of a callable-signature. A parameter can\n * have a label and a doc-comment.\n */\nexport interface ParameterInformation {\n\t/**\n\t * The label of this signature. Will be shown in\n\t * the UI.\n\t */\n\tlabel: string;\n\t/**\n\t * The human-readable doc-comment of this signature. Will be shown\n\t * in the UI but can be omitted.\n\t */\n\tdocumentation?: string;\n}\n/**\n * Represents the signature of something callable. A signature\n * can have a label, like a function-name, a doc-comment, and\n * a set of parameters.\n */\nexport interface SignatureInformation {\n\t/**\n\t * The label of this signature. Will be shown in\n\t * the UI.\n\t */\n\tlabel: string;\n\t/**\n\t * The human-readable doc-comment of this signature. Will be shown\n\t * in the UI but can be omitted.\n\t */\n\tdocumentation?: string;\n\t/**\n\t * The parameters of this signature.\n\t */\n\tparameters: ParameterInformation[];\n}\n/**\n * Signature help represents the signature of something\n * callable. There can be multiple signatures but only one\n * active and only one active parameter.\n */\nexport interface SignatureHelp {\n\t/**\n\t * One or more signatures.\n\t */\n\tsignatures: SignatureInformation[];\n\t/**\n\t * The active signature.\n\t */\n\tactiveSignature: number;\n\t/**\n\t * The active parameter of the active signature.\n\t */\n\tactiveParameter: number;\n}\n/**\n * The signature help provider interface defines the contract between extensions and\n * the [parameter hints](https://code.visualstudio.com/docs/editor/intellisense)-feature.\n */\nexport interface SignatureHelpProvider {\n\n\tsignatureHelpTriggerCharacters: string[];\n\n\t/**\n\t * Provide help for the signature at the given position and document.\n\t */\n\tprovideSignatureHelp(model: editorCommon.IReadOnlyModel, position: Position, token: CancellationToken): SignatureHelp | Thenable;\n}\n\n/**\n * A document highlight kind.\n */\nexport enum DocumentHighlightKind {\n\t/**\n\t * A textual occurrence.\n\t */\n\tText,\n\t/**\n\t * Read-access of a symbol, like reading a variable.\n\t */\n\tRead,\n\t/**\n\t * Write-access of a symbol, like writing to a variable.\n\t */\n\tWrite\n}\n/**\n * A document highlight is a range inside a text document which deserves\n * special attention. Usually a document highlight is visualized by changing\n * the background color of its range.\n */\nexport interface DocumentHighlight {\n\t/**\n\t * The range this highlight applies to.\n\t */\n\trange: IRange;\n\t/**\n\t * The highlight kind, default is [text](#DocumentHighlightKind.Text).\n\t */\n\tkind: DocumentHighlightKind;\n}\n/**\n * The document highlight provider interface defines the contract between extensions and\n * the word-highlight-feature.\n */\nexport interface DocumentHighlightProvider {\n\t/**\n\t * Provide a set of document highlights, like all occurrences of a variable or\n\t * all exit-points of a function.\n\t */\n\tprovideDocumentHighlights(model: editorCommon.IReadOnlyModel, position: Position, token: CancellationToken): DocumentHighlight[] | Thenable;\n}\n\n/**\n * Value-object that contains additional information when\n * requesting references.\n */\nexport interface ReferenceContext {\n\t/**\n\t * Include the declaration of the current symbol.\n\t */\n\tincludeDeclaration: boolean;\n}\n/**\n * The reference provider interface defines the contract between extensions and\n * the [find references](https://code.visualstudio.com/docs/editor/editingevolved#_peek)-feature.\n */\nexport interface ReferenceProvider {\n\t/**\n\t * Provide a set of project-wide references for the given position and document.\n\t */\n\tprovideReferences(model: editorCommon.IReadOnlyModel, position: Position, context: ReferenceContext, token: CancellationToken): Location[] | Thenable;\n}\n\n/**\n * Represents a location inside a resource, such as a line\n * inside a text file.\n */\nexport interface Location {\n\t/**\n\t * The resource identifier of this location.\n\t */\n\turi: URI;\n\t/**\n\t * The document range of this locations.\n\t */\n\trange: IRange;\n}\n/**\n * The definition of a symbol represented as one or many [locations](#Location).\n * For most programming languages there is only one location at which a symbol is\n * defined.\n */\nexport type Definition = Location | Location[];\n\n/**\n * The definition provider interface defines the contract between extensions and\n * the [go to definition](https://code.visualstudio.com/docs/editor/editingevolved#_go-to-definition)\n * and peek definition features.\n */\nexport interface DefinitionProvider {\n\t/**\n\t * Provide the definition of the symbol at the given position and document.\n\t */\n\tprovideDefinition(model: editorCommon.IReadOnlyModel, position: Position, token: CancellationToken): Definition | Thenable;\n}\n\n/**\n * The implementation provider interface defines the contract between extensions and\n * the go to implementation feature.\n */\nexport interface ImplementationProvider {\n\t/**\n\t * Provide the implementation of the symbol at the given position and document.\n\t */\n\tprovideImplementation(model: editorCommon.IReadOnlyModel, position: Position, token: CancellationToken): Definition | Thenable;\n}\n\n/**\n * The type definition provider interface defines the contract between extensions and\n * the go to type definition feature.\n */\nexport interface TypeDefinitionProvider {\n\t/**\n\t * Provide the type definition of the symbol at the given position and document.\n\t */\n\tprovideTypeDefinition(model: editorCommon.IReadOnlyModel, position: Position, token: CancellationToken): Definition | Thenable;\n}\n\n/**\n * A symbol kind.\n */\nexport enum SymbolKind {\n\tFile = 0,\n\tModule = 1,\n\tNamespace = 2,\n\tPackage = 3,\n\tClass = 4,\n\tMethod = 5,\n\tProperty = 6,\n\tField = 7,\n\tConstructor = 8,\n\tEnum = 9,\n\tInterface = 10,\n\tFunction = 11,\n\tVariable = 12,\n\tConstant = 13,\n\tString = 14,\n\tNumber = 15,\n\tBoolean = 16,\n\tArray = 17,\n\tObject = 18,\n\tKey = 19,\n\tNull = 20,\n\tEnumMember = 21,\n\tStruct = 22,\n\tEvent = 23,\n\tOperator = 24,\n\tTypeParameter = 25\n}\n\n\n/**\n * @internal\n */\nexport const symbolKindToCssClass = (function () {\n\n\tconst _fromMapping: { [n: number]: string } = Object.create(null);\n\t_fromMapping[SymbolKind.File] = 'file';\n\t_fromMapping[SymbolKind.Module] = 'module';\n\t_fromMapping[SymbolKind.Namespace] = 'namespace';\n\t_fromMapping[SymbolKind.Package] = 'package';\n\t_fromMapping[SymbolKind.Class] = 'class';\n\t_fromMapping[SymbolKind.Method] = 'method';\n\t_fromMapping[SymbolKind.Property] = 'property';\n\t_fromMapping[SymbolKind.Field] = 'field';\n\t_fromMapping[SymbolKind.Constructor] = 'constructor';\n\t_fromMapping[SymbolKind.Enum] = 'enum';\n\t_fromMapping[SymbolKind.Interface] = 'interface';\n\t_fromMapping[SymbolKind.Function] = 'function';\n\t_fromMapping[SymbolKind.Variable] = 'variable';\n\t_fromMapping[SymbolKind.Constant] = 'constant';\n\t_fromMapping[SymbolKind.String] = 'string';\n\t_fromMapping[SymbolKind.Number] = 'number';\n\t_fromMapping[SymbolKind.Boolean] = 'boolean';\n\t_fromMapping[SymbolKind.Array] = 'array';\n\t_fromMapping[SymbolKind.Object] = 'object';\n\t_fromMapping[SymbolKind.Key] = 'key';\n\t_fromMapping[SymbolKind.Null] = 'null';\n\t_fromMapping[SymbolKind.EnumMember] = 'enum-member';\n\t_fromMapping[SymbolKind.Struct] = 'struct';\n\t_fromMapping[SymbolKind.Event] = 'event';\n\t_fromMapping[SymbolKind.Operator] = 'operator';\n\t_fromMapping[SymbolKind.TypeParameter] = 'type-parameter';\n\n\treturn function toCssClassName(kind: SymbolKind): string {\n\t\treturn _fromMapping[kind] || 'property';\n\t};\n})();\n\n/**\n * @internal\n */\nexport interface IOutline {\n\tentries: SymbolInformation[];\n}\n/**\n * Represents information about programming constructs like variables, classes,\n * interfaces etc.\n */\nexport interface SymbolInformation {\n\t/**\n\t * The name of this symbol.\n\t */\n\tname: string;\n\t/**\n\t * The name of the symbol containing this symbol.\n\t */\n\tcontainerName?: string;\n\t/**\n\t * The kind of this symbol.\n\t */\n\tkind: SymbolKind;\n\t/**\n\t * The location of this symbol.\n\t */\n\tlocation: Location;\n}\n/**\n * The document symbol provider interface defines the contract between extensions and\n * the [go to symbol](https://code.visualstudio.com/docs/editor/editingevolved#_goto-symbol)-feature.\n */\nexport interface DocumentSymbolProvider {\n\t/**\n\t * Provide symbol information for the given document.\n\t */\n\tprovideDocumentSymbols(model: editorCommon.IReadOnlyModel, token: CancellationToken): SymbolInformation[] | Thenable;\n}\n\nexport interface TextEdit {\n\trange: IRange;\n\ttext: string;\n\teol?: editorCommon.EndOfLineSequence;\n}\n\n/**\n * Interface used to format a model\n */\nexport interface FormattingOptions {\n\t/**\n\t * Size of a tab in spaces.\n\t */\n\ttabSize: number;\n\t/**\n\t * Prefer spaces over tabs.\n\t */\n\tinsertSpaces: boolean;\n}\n/**\n * The document formatting provider interface defines the contract between extensions and\n * the formatting-feature.\n */\nexport interface DocumentFormattingEditProvider {\n\t/**\n\t * Provide formatting edits for a whole document.\n\t */\n\tprovideDocumentFormattingEdits(model: editorCommon.IReadOnlyModel, options: FormattingOptions, token: CancellationToken): TextEdit[] | Thenable;\n}\n/**\n * The document formatting provider interface defines the contract between extensions and\n * the formatting-feature.\n */\nexport interface DocumentRangeFormattingEditProvider {\n\t/**\n\t * Provide formatting edits for a range in a document.\n\t *\n\t * The given range is a hint and providers can decide to format a smaller\n\t * or larger range. Often this is done by adjusting the start and end\n\t * of the range to full syntax nodes.\n\t */\n\tprovideDocumentRangeFormattingEdits(model: editorCommon.IReadOnlyModel, range: Range, options: FormattingOptions, token: CancellationToken): TextEdit[] | Thenable;\n}\n/**\n * The document formatting provider interface defines the contract between extensions and\n * the formatting-feature.\n */\nexport interface OnTypeFormattingEditProvider {\n\tautoFormatTriggerCharacters: string[];\n\t/**\n\t * Provide formatting edits after a character has been typed.\n\t *\n\t * The given position and character should hint to the provider\n\t * what range the position to expand to, like find the matching `{`\n\t * when `}` has been entered.\n\t */\n\tprovideOnTypeFormattingEdits(model: editorCommon.IReadOnlyModel, position: Position, ch: string, options: FormattingOptions, token: CancellationToken): TextEdit[] | Thenable;\n}\n\n/**\n * @internal\n */\nexport interface IInplaceReplaceSupportResult {\n\tvalue: string;\n\trange: IRange;\n}\n\n/**\n * A link inside the editor.\n */\nexport interface ILink {\n\trange: IRange;\n\turl: string;\n}\n/**\n * A provider of links.\n */\nexport interface LinkProvider {\n\tprovideLinks(model: editorCommon.IReadOnlyModel, token: CancellationToken): ILink[] | Thenable;\n\tresolveLink?: (link: ILink, token: CancellationToken) => ILink | Thenable;\n}\n\n\nexport interface IResourceEdit {\n\tresource: URI;\n\trange: IRange;\n\tnewText: string;\n}\nexport interface WorkspaceEdit {\n\tedits: IResourceEdit[];\n\trejectReason?: string;\n}\nexport interface RenameProvider {\n\tprovideRenameEdits(model: editorCommon.IReadOnlyModel, position: Position, newName: string, token: CancellationToken): WorkspaceEdit | Thenable;\n}\n\n\nexport interface Command {\n\tid: string;\n\ttitle: string;\n\ttooltip?: string;\n\targuments?: any[];\n}\nexport interface ICodeLensSymbol {\n\trange: IRange;\n\tid?: string;\n\tcommand?: Command;\n}\nexport interface CodeLensProvider {\n\tonDidChange?: Event;\n\tprovideCodeLenses(model: editorCommon.IReadOnlyModel, token: CancellationToken): ICodeLensSymbol[] | Thenable;\n\tresolveCodeLens?(model: editorCommon.IReadOnlyModel, codeLens: ICodeLensSymbol, token: CancellationToken): ICodeLensSymbol | Thenable;\n}\n\n// --- feature registries ------\n\n/**\n * @internal\n */\nexport const ReferenceProviderRegistry = new LanguageFeatureRegistry();\n\n/**\n * @internal\n */\nexport const RenameProviderRegistry = new LanguageFeatureRegistry();\n\n/**\n * @internal\n */\nexport const SuggestRegistry = new LanguageFeatureRegistry();\n\n/**\n * @internal\n */\nexport const SignatureHelpProviderRegistry = new LanguageFeatureRegistry();\n\n/**\n * @internal\n */\nexport const HoverProviderRegistry = new LanguageFeatureRegistry();\n\n/**\n * @internal\n */\nexport const DocumentSymbolProviderRegistry = new LanguageFeatureRegistry();\n\n/**\n * @internal\n */\nexport const DocumentHighlightProviderRegistry = new LanguageFeatureRegistry();\n\n/**\n * @internal\n */\nexport const DefinitionProviderRegistry = new LanguageFeatureRegistry();\n\n/**\n * @internal\n */\nexport const ImplementationProviderRegistry = new LanguageFeatureRegistry();\n\n/**\n * @internal\n */\nexport const TypeDefinitionProviderRegistry = new LanguageFeatureRegistry();\n\n/**\n * @internal\n */\nexport const CodeLensProviderRegistry = new LanguageFeatureRegistry();\n\n/**\n * @internal\n */\nexport const CodeActionProviderRegistry = new LanguageFeatureRegistry();\n\n/**\n * @internal\n */\nexport const DocumentFormattingEditProviderRegistry = new LanguageFeatureRegistry();\n\n/**\n * @internal\n */\nexport const DocumentRangeFormattingEditProviderRegistry = new LanguageFeatureRegistry();\n\n/**\n * @internal\n */\nexport const OnTypeFormattingEditProviderRegistry = new LanguageFeatureRegistry();\n\n/**\n * @internal\n */\nexport const LinkProviderRegistry = new LanguageFeatureRegistry();\n\n/**\n * @internal\n */\nexport interface ITokenizationSupportChangedEvent {\n\tchangedLanguages: string[];\n\tchangedColorMap: boolean;\n}\n\n/**\n * @internal\n */\nexport interface ITokenizationRegistry {\n\n\t/**\n\t * An event triggered when:\n\t * - a tokenization support is registered, unregistered or changed.\n\t * - the color map is changed.\n\t */\n\tonDidChange: Event;\n\n\t/**\n\t * Fire a change event for a language.\n\t * This is useful for languages that embed other languages.\n\t */\n\tfire(languages: string[]): void;\n\n\t/**\n\t * Register a tokenization support.\n\t */\n\tregister(language: string, support: ITokenizationSupport): IDisposable;\n\n\t/**\n\t * Get the tokenization support for a language.\n\t * Returns null if not found.\n\t */\n\tget(language: string): ITokenizationSupport;\n\n\t/**\n\t * Set the new color map that all tokens will use in their ColorId binary encoded bits for foreground and background.\n\t */\n\tsetColorMap(colorMap: Color[]): void;\n\n\tgetColorMap(): Color[];\n\tgetDefaultForeground(): Color;\n\tgetDefaultBackground(): Color;\n}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { IState, ColorId, MetadataConsts, LanguageIdentifier, FontStyle, StandardTokenType, LanguageId } from 'vs/editor/common/modes';\nimport { Token, TokenizationResult, TokenizationResult2 } from 'vs/editor/common/core/token';\n\nclass NullStateImpl implements IState {\n\n\tpublic clone(): IState {\n\t\treturn this;\n\t}\n\n\tpublic equals(other: IState): boolean {\n\t\treturn (this === other);\n\t}\n}\n\nexport const NULL_STATE: IState = new NullStateImpl();\n\nexport const NULL_MODE_ID = 'vs.editor.nullMode';\n\nexport const NULL_LANGUAGE_IDENTIFIER = new LanguageIdentifier(NULL_MODE_ID, LanguageId.Null);\n\nexport function nullTokenize(modeId: string, buffer: string, state: IState, deltaOffset: number): TokenizationResult {\n\treturn new TokenizationResult([new Token(deltaOffset, '', modeId)], state);\n}\n\nexport function nullTokenize2(languageId: LanguageId, buffer: string, state: IState, deltaOffset: number): TokenizationResult2 {\n\tlet tokens = new Uint32Array(2);\n\ttokens[0] = deltaOffset;\n\ttokens[1] = (\n\t\t(languageId << MetadataConsts.LANGUAGEID_OFFSET)\n\t\t| (StandardTokenType.Other << MetadataConsts.TOKEN_TYPE_OFFSET)\n\t\t| (FontStyle.None << MetadataConsts.FONT_STYLE_OFFSET)\n\t\t| (ColorId.DefaultForeground << MetadataConsts.FOREGROUND_OFFSET)\n\t\t| (ColorId.DefaultBackground << MetadataConsts.BACKGROUND_OFFSET)\n\t) >>> 0;\n\n\treturn new TokenizationResult2(tokens, 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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as modes from 'vs/editor/common/modes';\nimport { LineTokens } from 'vs/editor/common/core/lineTokens';\n\nexport function createScopedLineTokens(context: LineTokens, offset: number): ScopedLineTokens {\n\tlet tokenCount = context.getTokenCount();\n\tlet tokenIndex = context.findTokenIndexAtOffset(offset);\n\tlet desiredLanguageId = context.getLanguageId(tokenIndex);\n\n\tlet lastTokenIndex = tokenIndex;\n\twhile (lastTokenIndex + 1 < tokenCount && context.getLanguageId(lastTokenIndex + 1) === desiredLanguageId) {\n\t\tlastTokenIndex++;\n\t}\n\n\tlet firstTokenIndex = tokenIndex;\n\twhile (firstTokenIndex > 0 && context.getLanguageId(firstTokenIndex - 1) === desiredLanguageId) {\n\t\tfirstTokenIndex--;\n\t}\n\n\treturn new ScopedLineTokens(\n\t\tcontext,\n\t\tdesiredLanguageId,\n\t\tfirstTokenIndex,\n\t\tlastTokenIndex + 1,\n\t\tcontext.getTokenStartOffset(firstTokenIndex),\n\t\tcontext.getTokenEndOffset(lastTokenIndex)\n\t);\n}\n\nexport class ScopedLineTokens {\n\t_scopedLineTokensBrand: void;\n\n\tpublic readonly languageId: modes.LanguageId;\n\tprivate readonly _actual: LineTokens;\n\tprivate readonly _firstTokenIndex: number;\n\tprivate readonly _lastTokenIndex: number;\n\tpublic readonly firstCharOffset: number;\n\tprivate readonly _lastCharOffset: number;\n\n\tconstructor(\n\t\tactual: LineTokens,\n\t\tlanguageId: modes.LanguageId,\n\t\tfirstTokenIndex: number,\n\t\tlastTokenIndex: number,\n\t\tfirstCharOffset: number,\n\t\tlastCharOffset: number\n\t) {\n\t\tthis._actual = actual;\n\t\tthis.languageId = languageId;\n\t\tthis._firstTokenIndex = firstTokenIndex;\n\t\tthis._lastTokenIndex = lastTokenIndex;\n\t\tthis.firstCharOffset = firstCharOffset;\n\t\tthis._lastCharOffset = lastCharOffset;\n\t}\n\n\tpublic getLineContent(): string {\n\t\tvar actualLineContent = this._actual.getLineContent();\n\t\treturn actualLineContent.substring(this.firstCharOffset, this._lastCharOffset);\n\t}\n\n\tpublic getTokenCount(): number {\n\t\treturn this._lastTokenIndex - this._firstTokenIndex;\n\t}\n\n\tpublic findTokenIndexAtOffset(offset: number): number {\n\t\treturn this._actual.findTokenIndexAtOffset(offset + this.firstCharOffset) - this._firstTokenIndex;\n\t}\n\n\tpublic getTokenStartOffset(tokenIndex: number): number {\n\t\treturn this._actual.getTokenStartOffset(tokenIndex + this._firstTokenIndex) - this.firstCharOffset;\n\t}\n\n\tpublic getStandardTokenType(tokenIndex: number): modes.StandardTokenType {\n\t\treturn this._actual.getStandardTokenType(tokenIndex + this._firstTokenIndex);\n\t}\n}\n\nconst enum IgnoreBracketsInTokens {\n\tvalue = modes.StandardTokenType.Comment | modes.StandardTokenType.String | modes.StandardTokenType.RegEx\n}\n\nexport function ignoreBracketsInToken(standardTokenType: modes.StandardTokenType): boolean {\n\treturn (standardTokenType & IgnoreBracketsInTokens.value) !== 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'use strict';\n\nimport { ScopedLineTokens, ignoreBracketsInToken } from 'vs/editor/common/modes/supports';\nimport { BracketsUtils, RichEditBrackets } from 'vs/editor/common/modes/supports/richEditBrackets';\nimport { IAutoClosingPairConditional, IBracketElectricCharacterContribution, StandardAutoClosingPairConditional } from 'vs/editor/common/modes/languageConfiguration';\n\n/**\n * Interface used to support electric characters\n * @internal\n */\nexport interface IElectricAction {\n\t// Only one of the following properties should be defined:\n\n\t// The line will be indented at the same level of the line\n\t// which contains the matching given bracket type.\n\tmatchOpenBracket?: string;\n\n\t// The text will be appended after the electric character.\n\tappendText?: string;\n}\n\nexport class BracketElectricCharacterSupport {\n\n\tprivate readonly _richEditBrackets: RichEditBrackets;\n\tprivate readonly _complexAutoClosePairs: StandardAutoClosingPairConditional[];\n\n\tconstructor(richEditBrackets: RichEditBrackets, autoClosePairs: IAutoClosingPairConditional[], contribution: IBracketElectricCharacterContribution) {\n\t\tcontribution = contribution || {};\n\t\tthis._richEditBrackets = richEditBrackets;\n\t\tthis._complexAutoClosePairs = autoClosePairs.filter(pair => pair.open.length > 1 && !!pair.close).map(el => new StandardAutoClosingPairConditional(el));\n\t\tif (contribution.docComment) {\n\t\t\t// IDocComment is legacy, only partially supported\n\t\t\tthis._complexAutoClosePairs.push(new StandardAutoClosingPairConditional({ open: contribution.docComment.open, close: contribution.docComment.close }));\n\t\t}\n\t}\n\n\tpublic getElectricCharacters(): string[] {\n\t\tvar result: string[] = [];\n\n\t\tif (this._richEditBrackets) {\n\t\t\tfor (let i = 0, len = this._richEditBrackets.brackets.length; i < len; i++) {\n\t\t\t\tlet bracketPair = this._richEditBrackets.brackets[i];\n\t\t\t\tlet lastChar = bracketPair.close.charAt(bracketPair.close.length - 1);\n\t\t\t\tresult.push(lastChar);\n\t\t\t}\n\t\t}\n\n\t\t// auto close\n\t\tfor (let pair of this._complexAutoClosePairs) {\n\t\t\tresult.push(pair.open.charAt(pair.open.length - 1));\n\t\t}\n\n\t\t// Filter duplicate entries\n\t\tresult = result.filter((item, pos, array) => {\n\t\t\treturn array.indexOf(item) === pos;\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tpublic onElectricCharacter(character: string, context: ScopedLineTokens, column: number): IElectricAction {\n\t\treturn (this._onElectricAutoClose(character, context, column) ||\n\t\t\tthis._onElectricAutoIndent(character, context, column));\n\t}\n\n\tprivate _onElectricAutoIndent(character: string, context: ScopedLineTokens, column: number): IElectricAction {\n\n\t\tif (!this._richEditBrackets || this._richEditBrackets.brackets.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet tokenIndex = context.findTokenIndexAtOffset(column - 1);\n\t\tif (ignoreBracketsInToken(context.getStandardTokenType(tokenIndex))) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet reversedBracketRegex = this._richEditBrackets.reversedRegex;\n\t\tlet text = context.getLineContent().substring(0, column - 1) + character;\n\n\t\tlet r = BracketsUtils.findPrevBracketInToken(reversedBracketRegex, 1, text, 0, text.length);\n\t\tif (!r) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet bracketText = text.substring(r.startColumn - 1, r.endColumn - 1);\n\t\tbracketText = bracketText.toLowerCase();\n\n\t\tlet isOpen = this._richEditBrackets.textIsOpenBracket[bracketText];\n\t\tif (isOpen) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet textBeforeBracket = text.substring(0, r.startColumn - 1);\n\t\tif (!/^\\s*$/.test(textBeforeBracket)) {\n\t\t\t// There is other text on the line before the bracket\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tmatchOpenBracket: bracketText\n\t\t};\n\t}\n\n\tprivate _onElectricAutoClose(character: string, context: ScopedLineTokens, column: number): IElectricAction {\n\t\tif (!this._complexAutoClosePairs.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet line = context.getLineContent();\n\n\t\tfor (let i = 0, len = this._complexAutoClosePairs.length; i < len; i++) {\n\t\t\tlet pair = this._complexAutoClosePairs[i];\n\n\t\t\t// See if the right electric character was pressed\n\t\t\tif (character !== pair.open.charAt(pair.open.length - 1)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// check if the full open bracket matches\n\t\t\tlet actual = line.substring(line.length - pair.open.length + 1) + character;\n\t\t\tif (actual !== pair.open) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet lastTokenIndex = context.findTokenIndexAtOffset(column - 1);\n\t\t\tlet lastTokenStandardType = context.getStandardTokenType(lastTokenIndex);\n\t\t\t// If we're in a scope listed in 'notIn', do nothing\n\t\t\tif (!pair.isOK(lastTokenStandardType)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If this line already contains the closing tag, do nothing.\n\t\t\tif (line.indexOf(pair.close, column - 1) >= 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\treturn { appendText: pair.close };\n\t\t}\n\n\t\treturn null;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { CharacterPairSupport } from 'vs/editor/common/modes/supports/characterPair';\nimport { BracketElectricCharacterSupport, IElectricAction } from 'vs/editor/common/modes/supports/electricCharacter';\nimport { IOnEnterSupportOptions, OnEnterSupport } from 'vs/editor/common/modes/supports/onEnter';\nimport { IndentRulesSupport, IndentConsts } from 'vs/editor/common/modes/supports/indentRules';\nimport { RichEditBrackets } from 'vs/editor/common/modes/supports/richEditBrackets';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { ITokenizedModel } from 'vs/editor/common/editorCommon';\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport * as strings from 'vs/base/common/strings';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { DEFAULT_WORD_REGEXP, ensureValidWordDefinition } from 'vs/editor/common/model/wordHelper';\nimport { createScopedLineTokens } from 'vs/editor/common/modes/supports';\nimport { LineTokens } from 'vs/editor/common/core/lineTokens';\nimport { Range } from 'vs/editor/common/core/range';\nimport { IndentAction, EnterAction, IAutoClosingPair, LanguageConfiguration, IndentationRule } from 'vs/editor/common/modes/languageConfiguration';\nimport { LanguageIdentifier, LanguageId } from 'vs/editor/common/modes';\n\n/**\n * Interface used to support insertion of mode specific comments.\n */\nexport interface ICommentsConfiguration {\n\tlineCommentToken?: string;\n\tblockCommentStartToken?: string;\n\tblockCommentEndToken?: string;\n}\n\nexport interface IVirtualModel {\n\tgetLineTokens(lineNumber: number): LineTokens;\n\tgetLanguageIdentifier(): LanguageIdentifier;\n\tgetLanguageIdAtPosition(lineNumber: number, column: number): LanguageId;\n\tgetLineContent(lineNumber: number): string;\n}\n\nexport interface IIndentConverter {\n\tshiftIndent?(indentation: string): string;\n\tunshiftIndent?(indentation: string): string;\n\tnormalizeIndentation?(indentation: string): string;\n}\n\nexport class RichEditSupport {\n\n\tprivate readonly _conf: LanguageConfiguration;\n\n\tpublic readonly electricCharacter: BracketElectricCharacterSupport;\n\tpublic readonly comments: ICommentsConfiguration;\n\tpublic readonly characterPair: CharacterPairSupport;\n\tpublic readonly wordDefinition: RegExp;\n\tpublic readonly onEnter: OnEnterSupport;\n\tpublic readonly indentRulesSupport: IndentRulesSupport;\n\tpublic readonly brackets: RichEditBrackets;\n\tpublic readonly indentationRules: IndentationRule;\n\n\tconstructor(languageIdentifier: LanguageIdentifier, previous: RichEditSupport, rawConf: LanguageConfiguration) {\n\n\t\tlet prev: LanguageConfiguration = null;\n\t\tif (previous) {\n\t\t\tprev = previous._conf;\n\t\t}\n\n\t\tthis._conf = RichEditSupport._mergeConf(prev, rawConf);\n\n\t\tif (this._conf.brackets) {\n\t\t\tthis.brackets = new RichEditBrackets(languageIdentifier, this._conf.brackets);\n\t\t}\n\n\t\tthis.onEnter = RichEditSupport._handleOnEnter(this._conf);\n\n\t\tthis.comments = RichEditSupport._handleComments(this._conf);\n\n\t\tthis.characterPair = new CharacterPairSupport(this._conf);\n\t\tthis.electricCharacter = new BracketElectricCharacterSupport(this.brackets, this.characterPair.getAutoClosingPairs(), this._conf.__electricCharacterSupport);\n\n\t\tthis.wordDefinition = this._conf.wordPattern || DEFAULT_WORD_REGEXP;\n\n\t\tthis.indentationRules = this._conf.indentationRules;\n\t\tif (this._conf.indentationRules) {\n\t\t\tthis.indentRulesSupport = new IndentRulesSupport(this._conf.indentationRules);\n\t\t}\n\t}\n\n\tprivate static _mergeConf(prev: LanguageConfiguration, current: LanguageConfiguration): LanguageConfiguration {\n\t\treturn {\n\t\t\tcomments: (prev ? current.comments || prev.comments : current.comments),\n\t\t\tbrackets: (prev ? current.brackets || prev.brackets : current.brackets),\n\t\t\twordPattern: (prev ? current.wordPattern || prev.wordPattern : current.wordPattern),\n\t\t\tindentationRules: (prev ? current.indentationRules || prev.indentationRules : current.indentationRules),\n\t\t\tonEnterRules: (prev ? current.onEnterRules || prev.onEnterRules : current.onEnterRules),\n\t\t\tautoClosingPairs: (prev ? current.autoClosingPairs || prev.autoClosingPairs : current.autoClosingPairs),\n\t\t\tsurroundingPairs: (prev ? current.surroundingPairs || prev.surroundingPairs : current.surroundingPairs),\n\t\t\t__electricCharacterSupport: (prev ? current.__electricCharacterSupport || prev.__electricCharacterSupport : current.__electricCharacterSupport),\n\t\t};\n\t}\n\n\tprivate static _handleOnEnter(conf: LanguageConfiguration): OnEnterSupport {\n\t\t// on enter\n\t\tlet onEnter: IOnEnterSupportOptions = {};\n\t\tlet empty = true;\n\n\t\tif (conf.brackets) {\n\t\t\tempty = false;\n\t\t\tonEnter.brackets = conf.brackets;\n\t\t}\n\t\tif (conf.indentationRules) {\n\t\t\tempty = false;\n\t\t\tonEnter.indentationRules = conf.indentationRules;\n\t\t}\n\t\tif (conf.onEnterRules) {\n\t\t\tempty = false;\n\t\t\tonEnter.regExpRules = conf.onEnterRules;\n\t\t}\n\n\t\tif (!empty) {\n\t\t\treturn new OnEnterSupport(onEnter);\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate static _handleComments(conf: LanguageConfiguration): ICommentsConfiguration {\n\t\tlet commentRule = conf.comments;\n\t\tif (!commentRule) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// comment configuration\n\t\tlet comments: ICommentsConfiguration = {};\n\n\t\tif (commentRule.lineComment) {\n\t\t\tcomments.lineCommentToken = commentRule.lineComment;\n\t\t}\n\t\tif (commentRule.blockComment) {\n\t\t\tlet [blockStart, blockEnd] = commentRule.blockComment;\n\t\t\tcomments.blockCommentStartToken = blockStart;\n\t\t\tcomments.blockCommentEndToken = blockEnd;\n\t\t}\n\n\t\treturn comments;\n\t}\n}\n\nexport class LanguageConfigurationRegistryImpl {\n\n\tprivate _entries: RichEditSupport[];\n\n\tprivate _onDidChange: Emitter = new Emitter();\n\tpublic onDidChange: Event = this._onDidChange.event;\n\n\tconstructor() {\n\t\tthis._entries = [];\n\t}\n\n\tpublic register(languageIdentifier: LanguageIdentifier, configuration: LanguageConfiguration): IDisposable {\n\t\tlet previous = this._getRichEditSupport(languageIdentifier.id);\n\t\tlet current = new RichEditSupport(languageIdentifier, previous, configuration);\n\t\tthis._entries[languageIdentifier.id] = current;\n\t\tthis._onDidChange.fire(void 0);\n\t\treturn {\n\t\t\tdispose: () => {\n\t\t\t\tif (this._entries[languageIdentifier.id] === current) {\n\t\t\t\t\tthis._entries[languageIdentifier.id] = previous;\n\t\t\t\t\tthis._onDidChange.fire(void 0);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate _getRichEditSupport(languageId: LanguageId): RichEditSupport {\n\t\treturn this._entries[languageId] || null;\n\t}\n\n\tpublic getIndentationRules(languageId: LanguageId) {\n\t\tlet value = this._entries[languageId];\n\n\t\tif (!value) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn value.indentationRules || null;\n\t}\n\n\t// begin electricCharacter\n\n\tprivate _getElectricCharacterSupport(languageId: LanguageId): BracketElectricCharacterSupport {\n\t\tlet value = this._getRichEditSupport(languageId);\n\t\tif (!value) {\n\t\t\treturn null;\n\t\t}\n\t\treturn value.electricCharacter || null;\n\t}\n\n\tpublic getElectricCharacters(languageId: LanguageId): string[] {\n\t\tlet electricCharacterSupport = this._getElectricCharacterSupport(languageId);\n\t\tif (!electricCharacterSupport) {\n\t\t\treturn [];\n\t\t}\n\t\treturn electricCharacterSupport.getElectricCharacters();\n\t}\n\n\t/**\n\t * Should return opening bracket type to match indentation with\n\t */\n\tpublic onElectricCharacter(character: string, context: LineTokens, column: number): IElectricAction {\n\t\tlet scopedLineTokens = createScopedLineTokens(context, column - 1);\n\t\tlet electricCharacterSupport = this._getElectricCharacterSupport(scopedLineTokens.languageId);\n\t\tif (!electricCharacterSupport) {\n\t\t\treturn null;\n\t\t}\n\t\treturn electricCharacterSupport.onElectricCharacter(character, scopedLineTokens, column - scopedLineTokens.firstCharOffset);\n\t}\n\n\t// end electricCharacter\n\n\tpublic getComments(languageId: LanguageId): ICommentsConfiguration {\n\t\tlet value = this._getRichEditSupport(languageId);\n\t\tif (!value) {\n\t\t\treturn null;\n\t\t}\n\t\treturn value.comments || null;\n\t}\n\n\t// begin characterPair\n\n\tprivate _getCharacterPairSupport(languageId: LanguageId): CharacterPairSupport {\n\t\tlet value = this._getRichEditSupport(languageId);\n\t\tif (!value) {\n\t\t\treturn null;\n\t\t}\n\t\treturn value.characterPair || null;\n\t}\n\n\tpublic getAutoClosingPairs(languageId: LanguageId): IAutoClosingPair[] {\n\t\tlet characterPairSupport = this._getCharacterPairSupport(languageId);\n\t\tif (!characterPairSupport) {\n\t\t\treturn [];\n\t\t}\n\t\treturn characterPairSupport.getAutoClosingPairs();\n\t}\n\n\tpublic getSurroundingPairs(languageId: LanguageId): IAutoClosingPair[] {\n\t\tlet characterPairSupport = this._getCharacterPairSupport(languageId);\n\t\tif (!characterPairSupport) {\n\t\t\treturn [];\n\t\t}\n\t\treturn characterPairSupport.getSurroundingPairs();\n\t}\n\n\tpublic shouldAutoClosePair(character: string, context: LineTokens, column: number): boolean {\n\t\tlet scopedLineTokens = createScopedLineTokens(context, column - 1);\n\t\tlet characterPairSupport = this._getCharacterPairSupport(scopedLineTokens.languageId);\n\t\tif (!characterPairSupport) {\n\t\t\treturn false;\n\t\t}\n\t\treturn characterPairSupport.shouldAutoClosePair(character, scopedLineTokens, column - scopedLineTokens.firstCharOffset);\n\t}\n\n\t// end characterPair\n\n\tpublic getWordDefinition(languageId: LanguageId): RegExp {\n\t\tlet value = this._getRichEditSupport(languageId);\n\t\tif (!value) {\n\t\t\treturn ensureValidWordDefinition(null);\n\t\t}\n\t\treturn ensureValidWordDefinition(value.wordDefinition || null);\n\t}\n\n\n\n\t// beigin Indent Rules\n\n\tpublic getIndentRulesSupport(languageId: LanguageId): IndentRulesSupport {\n\t\tlet value = this._getRichEditSupport(languageId);\n\t\tif (!value) {\n\t\t\treturn null;\n\t\t}\n\t\treturn value.indentRulesSupport || null;\n\t}\n\n\t/**\n\t * Get nearest preceiding line which doesn't match unIndentPattern or contains all whitespace.\n\t */\n\tprivate getPrecedingValidLine(model: IVirtualModel, lineNumber: number, indentRulesSupport: IndentRulesSupport) {\n\t\tlet languageID = model.getLanguageIdAtPosition(lineNumber, 0);\n\t\tif (lineNumber > 1) {\n\t\t\tlet lastLineNumber = lineNumber - 1;\n\t\t\tlet resultLineNumber = -1;\n\n\t\t\tfor (lastLineNumber = lineNumber - 1; lastLineNumber >= 1; lastLineNumber--) {\n\t\t\t\tif (model.getLanguageIdAtPosition(lastLineNumber, 0) !== languageID) {\n\t\t\t\t\treturn resultLineNumber;\n\t\t\t\t}\n\t\t\t\tlet text = model.getLineContent(lastLineNumber);\n\t\t\t\tif (indentRulesSupport.shouldIgnore(text) || /^\\s+$/.test(text) || text === '') {\n\t\t\t\t\tresultLineNumber = lastLineNumber;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\treturn lastLineNumber;\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t}\n\n\t/**\n\t * Get inherited indentation from above lines.\n\t * 1. Find the nearest preceding line which doesn't match unIndentedLinePattern.\n\t * 2. If this line matches indentNextLinePattern or increaseIndentPattern, it means that the indent level of `lineNumber` should be 1 greater than this line.\n\t * 3. If this line doesn't match any indent rules\n\t * a. check whether the line above it matches indentNextLinePattern\n\t * b. If not, the indent level of this line is the result\n\t * 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\t * 4. Otherwise, we fail to get an inherited indent from aboves. Return null and we should not touch the indent of `lineNumber`\n\t *\n\t * This function only return the inherited indent based on above lines, it doesn't check whether current line should decrease or not.\n\t */\n\tpublic getInheritIndentForLine(model: IVirtualModel, lineNumber: number, honorIntentialIndent: boolean = true): { indentation: string, action: IndentAction, line?: number } {\n\t\tlet indentRulesSupport = this.getIndentRulesSupport(model.getLanguageIdentifier().id);\n\t\tif (!indentRulesSupport) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (lineNumber <= 1) {\n\t\t\treturn {\n\t\t\t\tindentation: '',\n\t\t\t\taction: null\n\t\t\t};\n\t\t}\n\n\t\tlet precedingUnIgnoredLine = this.getPrecedingValidLine(model, lineNumber, indentRulesSupport);\n\t\tif (precedingUnIgnoredLine < 1) {\n\t\t\treturn {\n\t\t\t\tindentation: '',\n\t\t\t\taction: null\n\t\t\t};\n\t\t}\n\n\t\tlet precedingUnIgnoredLineContent = model.getLineContent(precedingUnIgnoredLine);\n\n\t\tif (indentRulesSupport.shouldIncrease(precedingUnIgnoredLineContent) || indentRulesSupport.shouldIndentNextLine(precedingUnIgnoredLineContent)) {\n\t\t\treturn {\n\t\t\t\tindentation: strings.getLeadingWhitespace(precedingUnIgnoredLineContent),\n\t\t\t\taction: IndentAction.Indent,\n\t\t\t\tline: precedingUnIgnoredLine\n\t\t\t};\n\t\t} else if (indentRulesSupport.shouldDecrease(precedingUnIgnoredLineContent)) {\n\t\t\treturn {\n\t\t\t\tindentation: strings.getLeadingWhitespace(precedingUnIgnoredLineContent),\n\t\t\t\taction: null,\n\t\t\t\tline: precedingUnIgnoredLine\n\t\t\t};\n\t\t} else {\n\t\t\t// precedingUnIgnoredLine can not be ignored.\n\t\t\t// it doesn't increase indent of following lines\n\t\t\t// it doesn't increase just next line\n\t\t\t// so current line is not affect by precedingUnIgnoredLine\n\t\t\t// and then we should get a correct inheritted indentation from above lines\n\t\t\tif (precedingUnIgnoredLine === 1) {\n\t\t\t\treturn {\n\t\t\t\t\tindentation: strings.getLeadingWhitespace(model.getLineContent(precedingUnIgnoredLine)),\n\t\t\t\t\taction: null,\n\t\t\t\t\tline: precedingUnIgnoredLine\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet previousLine = precedingUnIgnoredLine - 1;\n\n\t\t\tlet previousLineIndentMetadata = indentRulesSupport.getIndentMetadata(model.getLineContent(previousLine));\n\t\t\tif (!(previousLineIndentMetadata & (IndentConsts.INCREASE_MASK | IndentConsts.DECREASE_MASK)) &&\n\t\t\t\t(previousLineIndentMetadata & IndentConsts.INDENT_NEXTLINE_MASK)) {\n\t\t\t\tlet stopLine = 0;\n\t\t\t\tfor (let i = previousLine - 1; i > 0; i--) {\n\t\t\t\t\tif (indentRulesSupport.shouldIndentNextLine(model.getLineContent(i))) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstopLine = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tindentation: strings.getLeadingWhitespace(model.getLineContent(stopLine + 1)),\n\t\t\t\t\taction: null,\n\t\t\t\t\tline: stopLine + 1\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (honorIntentialIndent) {\n\t\t\t\treturn {\n\t\t\t\t\tindentation: strings.getLeadingWhitespace(model.getLineContent(precedingUnIgnoredLine)),\n\t\t\t\t\taction: null,\n\t\t\t\t\tline: precedingUnIgnoredLine\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\t// search from precedingUnIgnoredLine until we find one whose indent is not temporary\n\t\t\t\tfor (let i = precedingUnIgnoredLine; i > 0; i--) {\n\t\t\t\t\tlet lineContent = model.getLineContent(i);\n\t\t\t\t\tif (indentRulesSupport.shouldIncrease(lineContent)) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tindentation: strings.getLeadingWhitespace(lineContent),\n\t\t\t\t\t\t\taction: IndentAction.Indent,\n\t\t\t\t\t\t\tline: i\n\t\t\t\t\t\t};\n\t\t\t\t\t} else if (indentRulesSupport.shouldIndentNextLine(lineContent)) {\n\t\t\t\t\t\tlet stopLine = 0;\n\t\t\t\t\t\tfor (let j = i - 1; j > 0; j--) {\n\t\t\t\t\t\t\tif (indentRulesSupport.shouldIndentNextLine(model.getLineContent(i))) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstopLine = j;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tindentation: strings.getLeadingWhitespace(model.getLineContent(stopLine + 1)),\n\t\t\t\t\t\t\taction: null,\n\t\t\t\t\t\t\tline: stopLine + 1\n\t\t\t\t\t\t};\n\t\t\t\t\t} else if (indentRulesSupport.shouldDecrease(lineContent)) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tindentation: strings.getLeadingWhitespace(lineContent),\n\t\t\t\t\t\t\taction: null,\n\t\t\t\t\t\t\tline: i\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tindentation: strings.getLeadingWhitespace(model.getLineContent(1)),\n\t\t\t\t\taction: null,\n\t\t\t\t\tline: 1\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic getGoodIndentForLine(virtualModel: IVirtualModel, languageId: LanguageId, lineNumber: number, indentConverter: IIndentConverter): string {\n\t\tlet indentRulesSupport = this.getIndentRulesSupport(languageId);\n\t\tif (!indentRulesSupport) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet indent = this.getInheritIndentForLine(virtualModel, lineNumber);\n\t\tlet lineContent = virtualModel.getLineContent(lineNumber);\n\n\t\tif (indent) {\n\t\t\tlet inheritLine = indent.line;\n\t\t\tif (inheritLine !== undefined) {\n\t\t\t\tlet onEnterSupport = this._getOnEnterSupport(languageId);\n\t\t\t\tlet enterResult: EnterAction = null;\n\t\t\t\ttry {\n\t\t\t\t\tenterResult = onEnterSupport.onEnter('', virtualModel.getLineContent(inheritLine), '');\n\t\t\t\t} catch (e) {\n\t\t\t\t\tonUnexpectedError(e);\n\t\t\t\t}\n\n\t\t\t\tif (enterResult) {\n\t\t\t\t\tlet indentation = strings.getLeadingWhitespace(virtualModel.getLineContent(inheritLine));\n\n\t\t\t\t\tif (enterResult.removeText) {\n\t\t\t\t\t\tindentation = indentation.substring(0, indentation.length - enterResult.removeText);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(enterResult.indentAction === IndentAction.Indent) ||\n\t\t\t\t\t\t(enterResult.indentAction === IndentAction.IndentOutdent)\n\t\t\t\t\t) {\n\t\t\t\t\t\tindentation = indentConverter.shiftIndent(indentation);\n\t\t\t\t\t} else if (enterResult.indentAction === IndentAction.Outdent) {\n\t\t\t\t\t\tindentation = indentConverter.unshiftIndent(indentation);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (indentRulesSupport.shouldDecrease(lineContent)) {\n\t\t\t\t\t\tindentation = indentConverter.unshiftIndent(indentation);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (enterResult.appendText) {\n\t\t\t\t\t\tindentation += enterResult.appendText;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn strings.getLeadingWhitespace(indentation);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (indentRulesSupport.shouldDecrease(lineContent)) {\n\t\t\t\tif (indent.action === IndentAction.Indent) {\n\t\t\t\t\treturn indent.indentation;\n\t\t\t\t} else {\n\t\t\t\t\treturn indentConverter.unshiftIndent(indent.indentation);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (indent.action === IndentAction.Indent) {\n\t\t\t\t\treturn indentConverter.shiftIndent(indent.indentation);\n\t\t\t\t} else {\n\t\t\t\t\treturn indent.indentation;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic getIndentForEnter(model: ITokenizedModel, range: Range, indentConverter: IIndentConverter, autoIndent: boolean): { beforeEnter: string, afterEnter: string } {\n\t\tmodel.forceTokenization(range.startLineNumber);\n\t\tlet lineTokens = model.getLineTokens(range.startLineNumber);\n\n\t\tlet beforeEnterText;\n\t\tlet tokenIndexUnderCursor = lineTokens.findTokenIndexAtOffset(range.startColumn);\n\t\tlet tokenIndexAtBeginning = lineTokens.findTokenIndexAtOffset(0);\n\t\tlet scopedLineTokens = createScopedLineTokens(lineTokens, range.startColumn);\n\t\tlet scopedLineText = scopedLineTokens.getLineContent();\n\n\t\tif (lineTokens.getLanguageId(tokenIndexAtBeginning) === lineTokens.getLanguageId(tokenIndexUnderCursor)) {\n\t\t\tbeforeEnterText = lineTokens.getLineContent().substring(0, range.startColumn - 1);\n\t\t} else {\n\t\t\tbeforeEnterText = scopedLineText.substr(0, range.startColumn - 1 - scopedLineTokens.firstCharOffset);\n\t\t}\n\n\t\tlet afterEnterText;\n\n\t\tif (range.isEmpty()) {\n\t\t\tafterEnterText = scopedLineText.substr(range.startColumn - 1 - scopedLineTokens.firstCharOffset);\n\t\t} else {\n\t\t\tconst endScopedLineTokens = this.getScopedLineTokens(model, range.endLineNumber, range.endColumn);\n\t\t\tafterEnterText = endScopedLineTokens.getLineContent().substr(range.endColumn - 1 - scopedLineTokens.firstCharOffset);\n\t\t}\n\n\t\tlet indentRulesSupport = this.getIndentRulesSupport(scopedLineTokens.languageId);\n\n\t\tif (!indentRulesSupport) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet beforeEnterResult = beforeEnterText;\n\t\tlet beforeEnterIndent = strings.getLeadingWhitespace(beforeEnterText);\n\n\t\tif (!autoIndent) {\n\t\t\tlet beforeEnterIndentAction = this.getInheritIndentForLine(model, range.startLineNumber);\n\t\t\tlet beforeEnterIndent = strings.getLeadingWhitespace(beforeEnterText);\n\n\t\t\tif (indentRulesSupport.shouldDecrease(beforeEnterText)) {\n\t\t\t\tif (beforeEnterIndentAction) {\n\t\t\t\t\tbeforeEnterIndent = beforeEnterIndentAction.indentation;\n\t\t\t\t\tif (beforeEnterIndentAction.action !== IndentAction.Indent) {\n\t\t\t\t\t\tbeforeEnterIndent = indentConverter.unshiftIndent(beforeEnterIndent);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbeforeEnterResult = beforeEnterIndent + strings.ltrim(strings.ltrim(beforeEnterText, ' '), '\\t');\n\t\t}\n\n\t\tlet virtualModel: IVirtualModel = {\n\t\t\tgetLineTokens: (lineNumber: number) => {\n\t\t\t\treturn model.getLineTokens(lineNumber);\n\t\t\t},\n\t\t\tgetLanguageIdentifier: () => {\n\t\t\t\treturn model.getLanguageIdentifier();\n\t\t\t},\n\t\t\tgetLanguageIdAtPosition: (lineNumber: number, column: number) => {\n\t\t\t\treturn model.getLanguageIdAtPosition(lineNumber, column);\n\t\t\t},\n\t\t\tgetLineContent: (lineNumber: number) => {\n\t\t\t\tif (lineNumber === range.startLineNumber) {\n\t\t\t\t\treturn beforeEnterResult;\n\t\t\t\t} else {\n\t\t\t\t\treturn model.getLineContent(lineNumber);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tlet afterEnterAction = this.getInheritIndentForLine(virtualModel, range.startLineNumber + 1);\n\t\tif (!afterEnterAction) {\n\t\t\treturn {\n\t\t\t\tbeforeEnter: beforeEnterIndent,\n\t\t\t\tafterEnter: beforeEnterIndent\n\t\t\t};\n\t\t}\n\n\t\tlet afterEnterIndent = afterEnterAction.indentation;\n\n\t\tif (afterEnterAction.action === IndentAction.Indent) {\n\t\t\tafterEnterIndent = indentConverter.shiftIndent(afterEnterIndent);\n\t\t}\n\n\t\tif (indentRulesSupport.shouldDecrease(afterEnterText)) {\n\t\t\tafterEnterIndent = indentConverter.unshiftIndent(afterEnterIndent);\n\t\t}\n\n\t\treturn {\n\t\t\tbeforeEnter: beforeEnterIndent,\n\t\t\tafterEnter: afterEnterIndent\n\t\t};\n\t}\n\n\t/**\n\t * We should always allow intentional indentation. It means, if users change the indentation of `lineNumber` and the content of\n\t * this line doesn't match decreaseIndentPattern, we should not adjust the indentation.\n\t */\n\tpublic getIndentActionForType(model: ITokenizedModel, range: Range, ch: string, indentConverter: IIndentConverter): string {\n\t\tlet scopedLineTokens = this.getScopedLineTokens(model, range.startLineNumber, range.startColumn);\n\t\tlet indentRulesSupport = this.getIndentRulesSupport(scopedLineTokens.languageId);\n\t\tif (!indentRulesSupport) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet scopedLineText = scopedLineTokens.getLineContent();\n\t\tlet beforeTypeText = scopedLineText.substr(0, range.startColumn - 1 - scopedLineTokens.firstCharOffset);\n\t\tlet afterTypeText;\n\n\t\t// selection support\n\t\tif (range.isEmpty()) {\n\t\t\tafterTypeText = scopedLineText.substr(range.startColumn - 1 - scopedLineTokens.firstCharOffset);\n\t\t} else {\n\t\t\tconst endScopedLineTokens = this.getScopedLineTokens(model, range.endLineNumber, range.endColumn);\n\t\t\tafterTypeText = endScopedLineTokens.getLineContent().substr(range.endColumn - 1 - scopedLineTokens.firstCharOffset);\n\t\t}\n\n\t\tif (indentRulesSupport.shouldDecrease(beforeTypeText + ch + afterTypeText)) {\n\t\t\t// after typing `ch`, the content matches decreaseIndentPattern, we should adjust the indent to a good manner.\n\t\t\t// 1. Get inherited indent action\n\t\t\tlet r = this.getInheritIndentForLine(model, range.startLineNumber, false);\n\t\t\tif (!r) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlet indentation = r.indentation;\n\n\t\t\tif (r.action !== IndentAction.Indent) {\n\t\t\t\tindentation = indentConverter.unshiftIndent(indentation);\n\t\t\t}\n\n\t\t\treturn indentation;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tpublic getIndentMetadata(model: ITokenizedModel, lineNumber: number): number {\n\t\tlet indentRulesSupport = this.getIndentRulesSupport(model.getLanguageIdentifier().id);\n\t\tif (!indentRulesSupport) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (lineNumber < 1 || lineNumber > model.getLineCount()) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn indentRulesSupport.getIndentMetadata(model.getLineContent(lineNumber));\n\t}\n\n\t// end Indent Rules\n\n\t// begin onEnter\n\n\tprivate _getOnEnterSupport(languageId: LanguageId): OnEnterSupport {\n\t\tlet value = this._getRichEditSupport(languageId);\n\t\tif (!value) {\n\t\t\treturn null;\n\t\t}\n\t\treturn value.onEnter || null;\n\t}\n\n\tpublic getRawEnterActionAtPosition(model: ITokenizedModel, lineNumber: number, column: number): EnterAction {\n\t\tlet r = this.getEnterAction(model, new Range(lineNumber, column, lineNumber, column));\n\n\t\treturn r ? r.enterAction : null;\n\t}\n\n\tpublic getEnterAction(model: ITokenizedModel, range: Range): { enterAction: EnterAction; indentation: string; } {\n\t\tlet indentation = this.getIndentationAtPosition(model, range.startLineNumber, range.startColumn);\n\n\t\tlet scopedLineTokens = this.getScopedLineTokens(model, range.startLineNumber, range.startColumn);\n\t\tlet onEnterSupport = this._getOnEnterSupport(scopedLineTokens.languageId);\n\t\tif (!onEnterSupport) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet scopedLineText = scopedLineTokens.getLineContent();\n\t\tlet beforeEnterText = scopedLineText.substr(0, range.startColumn - 1 - scopedLineTokens.firstCharOffset);\n\t\tlet afterEnterText;\n\n\t\t// selection support\n\t\tif (range.isEmpty()) {\n\t\t\tafterEnterText = scopedLineText.substr(range.startColumn - 1 - scopedLineTokens.firstCharOffset);\n\t\t} else {\n\t\t\tconst endScopedLineTokens = this.getScopedLineTokens(model, range.endLineNumber, range.endColumn);\n\t\t\tafterEnterText = endScopedLineTokens.getLineContent().substr(range.endColumn - 1 - scopedLineTokens.firstCharOffset);\n\t\t}\n\n\t\tlet lineNumber = range.startLineNumber;\n\t\tlet oneLineAboveText = '';\n\n\t\tif (lineNumber > 1 && scopedLineTokens.firstCharOffset === 0) {\n\t\t\t// This is not the first line and the entire line belongs to this mode\n\t\t\tlet oneLineAboveScopedLineTokens = this.getScopedLineTokens(model, lineNumber - 1);\n\t\t\tif (oneLineAboveScopedLineTokens.languageId === scopedLineTokens.languageId) {\n\t\t\t\t// The line above ends with text belonging to the same mode\n\t\t\t\toneLineAboveText = oneLineAboveScopedLineTokens.getLineContent();\n\t\t\t}\n\t\t}\n\n\t\tlet enterResult: EnterAction = null;\n\t\ttry {\n\t\t\tenterResult = onEnterSupport.onEnter(oneLineAboveText, beforeEnterText, afterEnterText);\n\t\t} catch (e) {\n\t\t\tonUnexpectedError(e);\n\t\t}\n\n\t\tif (!enterResult) {\n\t\t\treturn null;\n\t\t} else {\n\t\t\t// Here we add `\\t` to appendText first because enterAction is leveraging appendText and removeText to change indentation.\n\t\t\tif (!enterResult.appendText) {\n\t\t\t\tif (\n\t\t\t\t\t(enterResult.indentAction === IndentAction.Indent) ||\n\t\t\t\t\t(enterResult.indentAction === IndentAction.IndentOutdent)\n\t\t\t\t) {\n\t\t\t\t\tenterResult.appendText = '\\t';\n\t\t\t\t} else {\n\t\t\t\t\tenterResult.appendText = '';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (enterResult.removeText) {\n\t\t\tindentation = indentation.substring(0, indentation.length - enterResult.removeText);\n\t\t}\n\n\t\treturn {\n\t\t\tenterAction: enterResult,\n\t\t\tindentation: indentation,\n\t\t};\n\t}\n\n\tpublic getIndentationAtPosition(model: ITokenizedModel, lineNumber: number, column: number): string {\n\t\tlet lineText = model.getLineContent(lineNumber);\n\t\tlet indentation = strings.getLeadingWhitespace(lineText);\n\t\tif (indentation.length > column - 1) {\n\t\t\tindentation = indentation.substring(0, column - 1);\n\t\t}\n\n\t\treturn indentation;\n\t}\n\n\tprivate getScopedLineTokens(model: ITokenizedModel, lineNumber: number, columnNumber?: number) {\n\t\tmodel.forceTokenization(lineNumber);\n\t\tlet lineTokens = model.getLineTokens(lineNumber);\n\t\tlet column = isNaN(columnNumber) ? model.getLineMaxColumn(lineNumber) - 1 : columnNumber;\n\t\tlet scopedLineTokens = createScopedLineTokens(lineTokens, column);\n\t\treturn scopedLineTokens;\n\t}\n\n\t// end onEnter\n\n\tpublic getBracketsSupport(languageId: LanguageId): RichEditBrackets {\n\t\tlet value = this._getRichEditSupport(languageId);\n\t\tif (!value) {\n\t\t\treturn null;\n\t\t}\n\t\treturn value.brackets || null;\n\t}\n}\n\nexport const LanguageConfigurationRegistry = new LanguageConfigurationRegistryImpl();\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'use strict';\n\nimport * as strings from 'vs/base/common/strings';\nimport { IState, ITokenizationSupport, TokenizationRegistry, LanguageId } from 'vs/editor/common/modes';\nimport { NULL_STATE, nullTokenize2 } from 'vs/editor/common/modes/nullMode';\nimport { LineTokens } from 'vs/editor/common/core/lineTokens';\nimport { CharCode } from 'vs/base/common/charCode';\nimport { ViewLineToken } from 'vs/editor/common/core/viewLineToken';\n\nexport function tokenizeToString(text: string, languageId: string): string {\n\treturn _tokenizeToString(text, _getSafeTokenizationSupport(languageId));\n}\n\nexport function tokenizeLineToHTML(text: string, viewLineTokens: ViewLineToken[], colorMap: string[], startOffset: number, endOffset: number, tabSize: number): string {\n\tlet result = `
    `;\n\tlet charIndex = startOffset;\n\tlet tabsCharDelta = 0;\n\n\tfor (let tokenIndex = 0, lenJ = viewLineTokens.length; tokenIndex < lenJ; tokenIndex++) {\n\t\tconst token = viewLineTokens[tokenIndex];\n\t\tconst tokenEndIndex = token.endIndex;\n\n\t\tif (token.endIndex <= startOffset) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet partContent = '';\n\n\t\tfor (; charIndex < tokenEndIndex && charIndex < endOffset; charIndex++) {\n\t\t\tconst charCode = text.charCodeAt(charIndex);\n\n\t\t\tswitch (charCode) {\n\t\t\t\tcase CharCode.Tab:\n\t\t\t\t\tlet insertSpacesCount = tabSize - (charIndex + tabsCharDelta) % tabSize;\n\t\t\t\t\ttabsCharDelta += insertSpacesCount - 1;\n\t\t\t\t\twhile (insertSpacesCount > 0) {\n\t\t\t\t\t\tpartContent += ' ';\n\t\t\t\t\t\tinsertSpacesCount--;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase CharCode.LessThan:\n\t\t\t\t\tpartContent += '<';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase CharCode.GreaterThan:\n\t\t\t\t\tpartContent += '>';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase CharCode.Ampersand:\n\t\t\t\t\tpartContent += '&';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase CharCode.Null:\n\t\t\t\t\tpartContent += '�';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase CharCode.UTF8_BOM:\n\t\t\t\tcase CharCode.LINE_SEPARATOR_2028:\n\t\t\t\t\tpartContent += '\\ufffd';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase CharCode.CarriageReturn:\n\t\t\t\t\t// zero width space, because carriage return would introduce a line break\n\t\t\t\t\tpartContent += '​';\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tpartContent += String.fromCharCode(charCode);\n\t\t\t}\n\t\t}\n\n\t\tresult += `${partContent}`;\n\n\t\tif (token.endIndex > endOffset || charIndex >= endOffset) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tresult += `
    `;\n\treturn result;\n}\n\nfunction _getSafeTokenizationSupport(languageId: string): ITokenizationSupport {\n\tlet tokenizationSupport = TokenizationRegistry.get(languageId);\n\tif (tokenizationSupport) {\n\t\treturn tokenizationSupport;\n\t}\n\treturn {\n\t\tgetInitialState: () => NULL_STATE,\n\t\ttokenize: undefined,\n\t\ttokenize2: (buffer: string, state: IState, deltaOffset: number) => nullTokenize2(LanguageId.Null, buffer, state, deltaOffset)\n\t};\n}\n\nfunction _tokenizeToString(text: string, tokenizationSupport: ITokenizationSupport): string {\n\tlet result = `
    `;\n\tlet lines = text.split(/\\r\\n|\\r|\\n/);\n\tlet currentState = tokenizationSupport.getInitialState();\n\tfor (let i = 0, len = lines.length; i < len; i++) {\n\t\tlet line = lines[i];\n\n\t\tif (i > 0) {\n\t\t\tresult += `
    `;\n\t\t}\n\n\t\tlet tokenizationResult = tokenizationSupport.tokenize2(line, currentState, 0);\n\t\tlet lineTokens = new LineTokens(tokenizationResult.tokens, line);\n\t\tlet viewLineTokens = lineTokens.inflate();\n\n\t\tlet startOffset = 0;\n\t\tfor (let j = 0, lenJ = viewLineTokens.length; j < lenJ; j++) {\n\t\t\tconst viewLineToken = viewLineTokens[j];\n\t\t\tresult += `${strings.escape(line.substring(startOffset, viewLineToken.endIndex))}`;\n\t\t\tstartOffset = viewLineToken.endIndex;\n\t\t}\n\n\t\tcurrentState = tokenizationResult.endState;\n\t}\n\n\tresult += `
    `;\n\treturn 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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { ICommonCodeEditor, ICommonDiffEditor, IDecorationRenderOptions, IModelDecorationOptions, IModel } from 'vs/editor/common/editorCommon';\nimport { ICodeEditorService } from 'vs/editor/common/services/codeEditorService';\n\nexport abstract class AbstractCodeEditorService implements ICodeEditorService {\n\n\t_serviceBrand: any;\n\n\tprivate _onCodeEditorAdd: Emitter;\n\tprivate _onCodeEditorRemove: Emitter;\n\tprivate _codeEditors: { [editorId: string]: ICommonCodeEditor; };\n\n\tprivate _onDiffEditorAdd: Emitter;\n\tprivate _onDiffEditorRemove: Emitter;\n\tprivate _diffEditors: { [editorId: string]: ICommonDiffEditor; };\n\n\tconstructor() {\n\t\tthis._codeEditors = Object.create(null);\n\t\tthis._diffEditors = Object.create(null);\n\t\tthis._onCodeEditorAdd = new Emitter();\n\t\tthis._onCodeEditorRemove = new Emitter();\n\t\tthis._onDiffEditorAdd = new Emitter();\n\t\tthis._onDiffEditorRemove = new Emitter();\n\t}\n\n\taddCodeEditor(editor: ICommonCodeEditor): void {\n\t\tthis._codeEditors[editor.getId()] = editor;\n\t\tthis._onCodeEditorAdd.fire(editor);\n\t}\n\n\tget onCodeEditorAdd(): Event {\n\t\treturn this._onCodeEditorAdd.event;\n\t}\n\n\tremoveCodeEditor(editor: ICommonCodeEditor): void {\n\t\tif (delete this._codeEditors[editor.getId()]) {\n\t\t\tthis._onCodeEditorRemove.fire(editor);\n\t\t}\n\t}\n\n\tget onCodeEditorRemove(): Event {\n\t\treturn this._onCodeEditorRemove.event;\n\t}\n\n\tgetCodeEditor(editorId: string): ICommonCodeEditor {\n\t\treturn this._codeEditors[editorId] || null;\n\t}\n\n\tlistCodeEditors(): ICommonCodeEditor[] {\n\t\treturn Object.keys(this._codeEditors).map(id => this._codeEditors[id]);\n\t}\n\n\taddDiffEditor(editor: ICommonDiffEditor): void {\n\t\tthis._diffEditors[editor.getId()] = editor;\n\t\tthis._onDiffEditorAdd.fire(editor);\n\t}\n\n\tget onDiffEditorAdd(): Event {\n\t\treturn this._onDiffEditorAdd.event;\n\t}\n\n\tremoveDiffEditor(editor: ICommonDiffEditor): void {\n\t\tif (delete this._diffEditors[editor.getId()]) {\n\t\t\tthis._onDiffEditorRemove.fire(editor);\n\t\t}\n\t}\n\n\tget onDiffEditorRemove(): Event {\n\t\treturn this._onDiffEditorRemove.event;\n\t}\n\n\tgetDiffEditor(editorId: string): ICommonDiffEditor {\n\t\treturn this._diffEditors[editorId] || null;\n\t}\n\n\tlistDiffEditors(): ICommonDiffEditor[] {\n\t\treturn Object.keys(this._diffEditors).map(id => this._diffEditors[id]);\n\t}\n\n\tgetFocusedCodeEditor(): ICommonCodeEditor {\n\t\tlet editorWithWidgetFocus: ICommonCodeEditor = null;\n\n\t\tlet editors = this.listCodeEditors();\n\t\tfor (let i = 0; i < editors.length; i++) {\n\t\t\tlet editor = editors[i];\n\n\t\t\tif (editor.isFocused()) {\n\t\t\t\t// bingo!\n\t\t\t\treturn editor;\n\t\t\t}\n\n\t\t\tif (editor.hasWidgetFocus()) {\n\t\t\t\teditorWithWidgetFocus = editor;\n\t\t\t}\n\t\t}\n\n\t\treturn editorWithWidgetFocus;\n\t}\n\n\tabstract registerDecorationType(key: string, options: IDecorationRenderOptions, parentTypeKey?: string): void;\n\tabstract removeDecorationType(key: string): void;\n\tabstract resolveDecorationOptions(decorationTypeKey: string, writable: boolean): IModelDecorationOptions;\n\n\tprivate _transientWatchers: { [uri: string]: ModelTransientSettingWatcher; } = {};\n\n\tpublic setTransientModelProperty(model: IModel, key: string, value: any): void {\n\t\tconst uri = model.uri.toString();\n\n\t\tlet w: ModelTransientSettingWatcher;\n\t\tif (this._transientWatchers.hasOwnProperty(uri)) {\n\t\t\tw = this._transientWatchers[uri];\n\t\t} else {\n\t\t\tw = new ModelTransientSettingWatcher(uri, model, this);\n\t\t\tthis._transientWatchers[uri] = w;\n\t\t}\n\n\t\tw.set(key, value);\n\t}\n\n\tpublic getTransientModelProperty(model: IModel, key: string): any {\n\t\tconst uri = model.uri.toString();\n\n\t\tif (!this._transientWatchers.hasOwnProperty(uri)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn this._transientWatchers[uri].get(key);\n\t}\n\n\t_removeWatcher(w: ModelTransientSettingWatcher): void {\n\t\tdelete this._transientWatchers[w.uri];\n\t}\n}\n\nexport class ModelTransientSettingWatcher {\n\tpublic readonly uri: string;\n\tprivate readonly _values: { [key: string]: any; };\n\n\tconstructor(uri: string, model: IModel, owner: AbstractCodeEditorService) {\n\t\tthis.uri = uri;\n\t\tthis._values = {};\n\t\tmodel.onWillDispose(() => owner._removeWatcher(this));\n\t}\n\n\tpublic set(key: string, value: any): void {\n\t\tthis._values[key] = value;\n\t}\n\n\tpublic get(key: string): any {\n\t\treturn this._values[key];\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Emitter } from 'vs/base/common/event';\nimport { KeyMod as ConstKeyMod, KeyChord } from 'vs/base/common/keyCodes';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection, SelectionDirection } from 'vs/editor/common/core/selection';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { CancellationTokenSource } from 'vs/base/common/cancellation';\nimport { Token } from 'vs/editor/common/core/token';\nimport URI from 'vs/base/common/uri';\n\n// --------------------------------------------\n// This is repeated here so it can be exported\n// because TS inlines const enums\n// --------------------------------------------\nexport enum Severity {\n\tIgnore = 0,\n\tInfo = 1,\n\tWarning = 2,\n\tError = 3,\n}\n\n// --------------------------------------------\n// This is repeated here so it can be exported\n// because TS inlines const enums\n// --------------------------------------------\nexport class KeyMod {\n\tpublic static readonly CtrlCmd: number = ConstKeyMod.CtrlCmd;\n\tpublic static readonly Shift: number = ConstKeyMod.Shift;\n\tpublic static readonly Alt: number = ConstKeyMod.Alt;\n\tpublic static readonly WinCtrl: number = ConstKeyMod.WinCtrl;\n\n\tpublic static chord(firstPart: number, secondPart: number): number {\n\t\treturn KeyChord(firstPart, secondPart);\n\t}\n}\n\n// --------------------------------------------\n// This is repeated here so it can be exported\n// because TS inlines const enums\n// --------------------------------------------\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 enum KeyCode {\n\t/**\n\t * Placed first to cover the 0 value of the enum.\n\t */\n\tUnknown = 0,\n\tBackspace = 1,\n\tTab = 2,\n\tEnter = 3,\n\tShift = 4,\n\tCtrl = 5,\n\tAlt = 6,\n\tPauseBreak = 7,\n\tCapsLock = 8,\n\tEscape = 9,\n\tSpace = 10,\n\tPageUp = 11,\n\tPageDown = 12,\n\tEnd = 13,\n\tHome = 14,\n\tLeftArrow = 15,\n\tUpArrow = 16,\n\tRightArrow = 17,\n\tDownArrow = 18,\n\tInsert = 19,\n\tDelete = 20,\n\tKEY_0 = 21,\n\tKEY_1 = 22,\n\tKEY_2 = 23,\n\tKEY_3 = 24,\n\tKEY_4 = 25,\n\tKEY_5 = 26,\n\tKEY_6 = 27,\n\tKEY_7 = 28,\n\tKEY_8 = 29,\n\tKEY_9 = 30,\n\tKEY_A = 31,\n\tKEY_B = 32,\n\tKEY_C = 33,\n\tKEY_D = 34,\n\tKEY_E = 35,\n\tKEY_F = 36,\n\tKEY_G = 37,\n\tKEY_H = 38,\n\tKEY_I = 39,\n\tKEY_J = 40,\n\tKEY_K = 41,\n\tKEY_L = 42,\n\tKEY_M = 43,\n\tKEY_N = 44,\n\tKEY_O = 45,\n\tKEY_P = 46,\n\tKEY_Q = 47,\n\tKEY_R = 48,\n\tKEY_S = 49,\n\tKEY_T = 50,\n\tKEY_U = 51,\n\tKEY_V = 52,\n\tKEY_W = 53,\n\tKEY_X = 54,\n\tKEY_Y = 55,\n\tKEY_Z = 56,\n\tMeta = 57,\n\tContextMenu = 58,\n\tF1 = 59,\n\tF2 = 60,\n\tF3 = 61,\n\tF4 = 62,\n\tF5 = 63,\n\tF6 = 64,\n\tF7 = 65,\n\tF8 = 66,\n\tF9 = 67,\n\tF10 = 68,\n\tF11 = 69,\n\tF12 = 70,\n\tF13 = 71,\n\tF14 = 72,\n\tF15 = 73,\n\tF16 = 74,\n\tF17 = 75,\n\tF18 = 76,\n\tF19 = 77,\n\tNumLock = 78,\n\tScrollLock = 79,\n\t/**\n\t * Used for miscellaneous characters; it can vary by keyboard.\n\t * For the US standard keyboard, the ';:' key\n\t */\n\tUS_SEMICOLON = 80,\n\t/**\n\t * For any country/region, the '+' key\n\t * For the US standard keyboard, the '=+' key\n\t */\n\tUS_EQUAL = 81,\n\t/**\n\t * For any country/region, the ',' key\n\t * For the US standard keyboard, the ',<' key\n\t */\n\tUS_COMMA = 82,\n\t/**\n\t * For any country/region, the '-' key\n\t * For the US standard keyboard, the '-_' key\n\t */\n\tUS_MINUS = 83,\n\t/**\n\t * For any country/region, the '.' key\n\t * For the US standard keyboard, the '.>' key\n\t */\n\tUS_DOT = 84,\n\t/**\n\t * Used for miscellaneous characters; it can vary by keyboard.\n\t * For the US standard keyboard, the '/?' key\n\t */\n\tUS_SLASH = 85,\n\t/**\n\t * Used for miscellaneous characters; it can vary by keyboard.\n\t * For the US standard keyboard, the '`~' key\n\t */\n\tUS_BACKTICK = 86,\n\t/**\n\t * Used for miscellaneous characters; it can vary by keyboard.\n\t * For the US standard keyboard, the '[{' key\n\t */\n\tUS_OPEN_SQUARE_BRACKET = 87,\n\t/**\n\t * Used for miscellaneous characters; it can vary by keyboard.\n\t * For the US standard keyboard, the '\\|' key\n\t */\n\tUS_BACKSLASH = 88,\n\t/**\n\t * Used for miscellaneous characters; it can vary by keyboard.\n\t * For the US standard keyboard, the ']}' key\n\t */\n\tUS_CLOSE_SQUARE_BRACKET = 89,\n\t/**\n\t * Used for miscellaneous characters; it can vary by keyboard.\n\t * For the US standard keyboard, the ''\"' key\n\t */\n\tUS_QUOTE = 90,\n\t/**\n\t * Used for miscellaneous characters; it can vary by keyboard.\n\t */\n\tOEM_8 = 91,\n\t/**\n\t * Either the angle bracket key or the backslash key on the RT 102-key keyboard.\n\t */\n\tOEM_102 = 92,\n\tNUMPAD_0 = 93,\n\tNUMPAD_1 = 94,\n\tNUMPAD_2 = 95,\n\tNUMPAD_3 = 96,\n\tNUMPAD_4 = 97,\n\tNUMPAD_5 = 98,\n\tNUMPAD_6 = 99,\n\tNUMPAD_7 = 100,\n\tNUMPAD_8 = 101,\n\tNUMPAD_9 = 102,\n\tNUMPAD_MULTIPLY = 103,\n\tNUMPAD_ADD = 104,\n\tNUMPAD_SEPARATOR = 105,\n\tNUMPAD_SUBTRACT = 106,\n\tNUMPAD_DECIMAL = 107,\n\tNUMPAD_DIVIDE = 108,\n\t/**\n\t * Cover all key codes when IME is processing input.\n\t */\n\tKEY_IN_COMPOSITION = 109,\n\tABNT_C1 = 110,\n\tABNT_C2 = 111,\n\t/**\n\t * Placed last to cover the length of the enum.\n\t * Please do not depend on this value!\n\t */\n\tMAX_VALUE\n}\n\nexport function createMonacoBaseAPI(): typeof monaco {\n\treturn {\n\t\teditor: undefined,\n\t\tlanguages: undefined,\n\t\tCancellationTokenSource: CancellationTokenSource,\n\t\tEmitter: Emitter,\n\t\tKeyCode: KeyCode,\n\t\tKeyMod: KeyMod,\n\t\tPosition: Position,\n\t\tRange: Range,\n\t\tSelection: Selection,\n\t\tSelectionDirection: SelectionDirection,\n\t\tSeverity: Severity,\n\t\tPromise: TPromise,\n\t\tUri: URI,\n\t\tToken: Token\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { ColorId, TokenizationRegistry } from 'vs/editor/common/modes';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { RGBA } from 'vs/base/common/color';\n\nexport class MinimapTokensColorTracker {\n\tprivate static _INSTANCE: MinimapTokensColorTracker = null;\n\tpublic static getInstance(): MinimapTokensColorTracker {\n\t\tif (!this._INSTANCE) {\n\t\t\tthis._INSTANCE = new MinimapTokensColorTracker();\n\t\t}\n\t\treturn this._INSTANCE;\n\t}\n\n\tprivate _colors: RGBA[];\n\tprivate _backgroundIsLight: boolean;\n\n\tprivate _onDidChange = new Emitter();\n\tpublic onDidChange: Event = this._onDidChange.event;\n\n\tprivate constructor() {\n\t\tthis._updateColorMap();\n\t\tTokenizationRegistry.onDidChange((e) => {\n\t\t\tif (e.changedColorMap) {\n\t\t\t\tthis._updateColorMap();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _updateColorMap(): void {\n\t\tconst colorMap = TokenizationRegistry.getColorMap();\n\t\tif (!colorMap) {\n\t\t\tthis._colors = [null];\n\t\t\tthis._backgroundIsLight = true;\n\t\t\treturn;\n\t\t}\n\t\tthis._colors = [null];\n\t\tfor (let colorId = 1; colorId < colorMap.length; colorId++) {\n\t\t\tthis._colors[colorId] = colorMap[colorId].toRGBA();\n\t\t}\n\t\tlet backgroundLuminosity = colorMap[ColorId.DefaultBackground].getLuminosity();\n\t\tthis._backgroundIsLight = (backgroundLuminosity >= 0.5);\n\t\tthis._onDidChange.fire(void 0);\n\t}\n\n\tpublic getColor(colorId: ColorId): RGBA {\n\t\tif (colorId < 1 || colorId >= this._colors.length) {\n\t\t\t// background color (basically invisible)\n\t\t\tcolorId = ColorId.DefaultBackground;\n\t\t}\n\t\treturn this._colors[colorId];\n\t}\n\n\tpublic backgroundIsLight(): boolean {\n\t\treturn this._backgroundIsLight;\n\t}\n}\n\nexport const enum Constants {\n\tSTART_CH_CODE = 32, // Space\n\tEND_CH_CODE = 126, // Tilde (~)\n\tCHAR_COUNT = END_CH_CODE - START_CH_CODE + 1,\n\n\tSAMPLED_CHAR_HEIGHT = 16,\n\tSAMPLED_CHAR_WIDTH = 10,\n\tSAMPLED_HALF_CHAR_WIDTH = SAMPLED_CHAR_WIDTH / 2,\n\n\tx2_CHAR_HEIGHT = 4,\n\tx2_CHAR_WIDTH = 2,\n\n\tx1_CHAR_HEIGHT = 2,\n\tx1_CHAR_WIDTH = 1,\n\n\tRGBA_CHANNELS_CNT = 4,\n}\n\nexport class MinimapCharRenderer {\n\n\t_minimapCharRendererBrand: void;\n\n\tpublic readonly x2charData: Uint8ClampedArray;\n\tpublic readonly x1charData: Uint8ClampedArray;\n\n\tpublic readonly x2charDataLight: Uint8ClampedArray;\n\tpublic readonly x1charDataLight: Uint8ClampedArray;\n\n\tconstructor(x2CharData: Uint8ClampedArray, x1CharData: Uint8ClampedArray) {\n\t\tconst x2ExpectedLen = Constants.x2_CHAR_HEIGHT * Constants.x2_CHAR_WIDTH * Constants.CHAR_COUNT;\n\t\tif (x2CharData.length !== x2ExpectedLen) {\n\t\t\tthrow new Error('Invalid x2CharData');\n\t\t}\n\t\tconst x1ExpectedLen = Constants.x1_CHAR_HEIGHT * Constants.x1_CHAR_WIDTH * Constants.CHAR_COUNT;\n\t\tif (x1CharData.length !== x1ExpectedLen) {\n\t\t\tthrow new Error('Invalid x1CharData');\n\t\t}\n\t\tthis.x2charData = x2CharData;\n\t\tthis.x1charData = x1CharData;\n\n\t\tthis.x2charDataLight = MinimapCharRenderer.soften(x2CharData, 12 / 15);\n\t\tthis.x1charDataLight = MinimapCharRenderer.soften(x1CharData, 50 / 60);\n\t}\n\n\tprivate static soften(input: Uint8ClampedArray, ratio: number): Uint8ClampedArray {\n\t\tlet result = new Uint8ClampedArray(input.length);\n\t\tfor (let i = 0, len = input.length; i < len; i++) {\n\t\t\tresult[i] = input[i] * ratio;\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _getChIndex(chCode: number): number {\n\t\tchCode -= Constants.START_CH_CODE;\n\t\tif (chCode < 0) {\n\t\t\tchCode += Constants.CHAR_COUNT;\n\t\t}\n\t\treturn (chCode % Constants.CHAR_COUNT);\n\t}\n\n\tpublic x2RenderChar(target: ImageData, dx: number, dy: number, chCode: number, color: RGBA, backgroundColor: RGBA, useLighterFont: boolean): void {\n\t\tif (dx + Constants.x2_CHAR_WIDTH > target.width || dy + Constants.x2_CHAR_HEIGHT > target.height) {\n\t\t\tconsole.warn('bad render request outside image data');\n\t\t\treturn;\n\t\t}\n\t\tconst x2CharData = useLighterFont ? this.x2charDataLight : this.x2charData;\n\t\tconst chIndex = MinimapCharRenderer._getChIndex(chCode);\n\n\t\tconst outWidth = target.width * Constants.RGBA_CHANNELS_CNT;\n\n\t\tconst backgroundR = backgroundColor.r;\n\t\tconst backgroundG = backgroundColor.g;\n\t\tconst backgroundB = backgroundColor.b;\n\n\t\tconst deltaR = color.r - backgroundR;\n\t\tconst deltaG = color.g - backgroundG;\n\t\tconst deltaB = color.b - backgroundB;\n\n\t\tconst dest = target.data;\n\t\tconst sourceOffset = chIndex * Constants.x2_CHAR_HEIGHT * Constants.x2_CHAR_WIDTH;\n\t\tlet destOffset = dy * outWidth + dx * Constants.RGBA_CHANNELS_CNT;\n\t\t{\n\t\t\tconst c = x2CharData[sourceOffset] / 255;\n\t\t\tdest[destOffset + 0] = backgroundR + deltaR * c;\n\t\t\tdest[destOffset + 1] = backgroundG + deltaG * c;\n\t\t\tdest[destOffset + 2] = backgroundB + deltaB * c;\n\t\t}\n\t\t{\n\t\t\tconst c = x2CharData[sourceOffset + 1] / 255;\n\t\t\tdest[destOffset + 4] = backgroundR + deltaR * c;\n\t\t\tdest[destOffset + 5] = backgroundG + deltaG * c;\n\t\t\tdest[destOffset + 6] = backgroundB + deltaB * c;\n\t\t}\n\n\t\tdestOffset += outWidth;\n\t\t{\n\t\t\tconst c = x2CharData[sourceOffset + 2] / 255;\n\t\t\tdest[destOffset + 0] = backgroundR + deltaR * c;\n\t\t\tdest[destOffset + 1] = backgroundG + deltaG * c;\n\t\t\tdest[destOffset + 2] = backgroundB + deltaB * c;\n\t\t}\n\t\t{\n\t\t\tconst c = x2CharData[sourceOffset + 3] / 255;\n\t\t\tdest[destOffset + 4] = backgroundR + deltaR * c;\n\t\t\tdest[destOffset + 5] = backgroundG + deltaG * c;\n\t\t\tdest[destOffset + 6] = backgroundB + deltaB * c;\n\t\t}\n\n\t\tdestOffset += outWidth;\n\t\t{\n\t\t\tconst c = x2CharData[sourceOffset + 4] / 255;\n\t\t\tdest[destOffset + 0] = backgroundR + deltaR * c;\n\t\t\tdest[destOffset + 1] = backgroundG + deltaG * c;\n\t\t\tdest[destOffset + 2] = backgroundB + deltaB * c;\n\t\t}\n\t\t{\n\t\t\tconst c = x2CharData[sourceOffset + 5] / 255;\n\t\t\tdest[destOffset + 4] = backgroundR + deltaR * c;\n\t\t\tdest[destOffset + 5] = backgroundG + deltaG * c;\n\t\t\tdest[destOffset + 6] = backgroundB + deltaB * c;\n\t\t}\n\n\t\tdestOffset += outWidth;\n\t\t{\n\t\t\tconst c = x2CharData[sourceOffset + 6] / 255;\n\t\t\tdest[destOffset + 0] = backgroundR + deltaR * c;\n\t\t\tdest[destOffset + 1] = backgroundG + deltaG * c;\n\t\t\tdest[destOffset + 2] = backgroundB + deltaB * c;\n\t\t}\n\t\t{\n\t\t\tconst c = x2CharData[sourceOffset + 7] / 255;\n\t\t\tdest[destOffset + 4] = backgroundR + deltaR * c;\n\t\t\tdest[destOffset + 5] = backgroundG + deltaG * c;\n\t\t\tdest[destOffset + 6] = backgroundB + deltaB * c;\n\t\t}\n\t}\n\n\tpublic x1RenderChar(target: ImageData, dx: number, dy: number, chCode: number, color: RGBA, backgroundColor: RGBA, useLighterFont: boolean): void {\n\t\tif (dx + Constants.x1_CHAR_WIDTH > target.width || dy + Constants.x1_CHAR_HEIGHT > target.height) {\n\t\t\tconsole.warn('bad render request outside image data');\n\t\t\treturn;\n\t\t}\n\t\tconst x1CharData = useLighterFont ? this.x1charDataLight : this.x1charData;\n\t\tconst chIndex = MinimapCharRenderer._getChIndex(chCode);\n\n\t\tconst outWidth = target.width * Constants.RGBA_CHANNELS_CNT;\n\n\t\tconst backgroundR = backgroundColor.r;\n\t\tconst backgroundG = backgroundColor.g;\n\t\tconst backgroundB = backgroundColor.b;\n\n\t\tconst deltaR = color.r - backgroundR;\n\t\tconst deltaG = color.g - backgroundG;\n\t\tconst deltaB = color.b - backgroundB;\n\n\t\tconst dest = target.data;\n\t\tconst sourceOffset = chIndex * Constants.x1_CHAR_HEIGHT * Constants.x1_CHAR_WIDTH;\n\t\tlet destOffset = dy * outWidth + dx * Constants.RGBA_CHANNELS_CNT;\n\t\t{\n\t\t\tconst c = x1CharData[sourceOffset] / 255;\n\t\t\tdest[destOffset + 0] = backgroundR + deltaR * c;\n\t\t\tdest[destOffset + 1] = backgroundG + deltaG * c;\n\t\t\tdest[destOffset + 2] = backgroundB + deltaB * c;\n\t\t}\n\n\t\tdestOffset += outWidth;\n\t\t{\n\t\t\tconst c = x1CharData[sourceOffset + 1] / 255;\n\t\t\tdest[destOffset + 0] = backgroundR + deltaR * c;\n\t\t\tdest[destOffset + 1] = backgroundG + deltaG * c;\n\t\t\tdest[destOffset + 2] = backgroundB + deltaB * c;\n\t\t}\n\t}\n\n\tpublic x2BlockRenderChar(target: ImageData, dx: number, dy: number, color: RGBA, backgroundColor: RGBA, useLighterFont: boolean): void {\n\t\tif (dx + Constants.x2_CHAR_WIDTH > target.width || dy + Constants.x2_CHAR_HEIGHT > target.height) {\n\t\t\tconsole.warn('bad render request outside image data');\n\t\t\treturn;\n\t\t}\n\n\t\tconst outWidth = target.width * Constants.RGBA_CHANNELS_CNT;\n\n\t\tconst c = 0.5;\n\n\t\tconst backgroundR = backgroundColor.r;\n\t\tconst backgroundG = backgroundColor.g;\n\t\tconst backgroundB = backgroundColor.b;\n\n\t\tconst deltaR = color.r - backgroundR;\n\t\tconst deltaG = color.g - backgroundG;\n\t\tconst deltaB = color.b - backgroundB;\n\n\t\tconst colorR = backgroundR + deltaR * c;\n\t\tconst colorG = backgroundG + deltaG * c;\n\t\tconst colorB = backgroundB + deltaB * c;\n\n\t\tconst dest = target.data;\n\t\tlet destOffset = dy * outWidth + dx * Constants.RGBA_CHANNELS_CNT;\n\t\t{\n\t\t\tdest[destOffset + 0] = colorR;\n\t\t\tdest[destOffset + 1] = colorG;\n\t\t\tdest[destOffset + 2] = colorB;\n\t\t}\n\t\t{\n\t\t\tdest[destOffset + 4] = colorR;\n\t\t\tdest[destOffset + 5] = colorG;\n\t\t\tdest[destOffset + 6] = colorB;\n\t\t}\n\n\t\tdestOffset += outWidth;\n\t\t{\n\t\t\tdest[destOffset + 0] = colorR;\n\t\t\tdest[destOffset + 1] = colorG;\n\t\t\tdest[destOffset + 2] = colorB;\n\t\t}\n\t\t{\n\t\t\tdest[destOffset + 4] = colorR;\n\t\t\tdest[destOffset + 5] = colorG;\n\t\t\tdest[destOffset + 6] = colorB;\n\t\t}\n\n\t\tdestOffset += outWidth;\n\t\t{\n\t\t\tdest[destOffset + 0] = colorR;\n\t\t\tdest[destOffset + 1] = colorG;\n\t\t\tdest[destOffset + 2] = colorB;\n\t\t}\n\t\t{\n\t\t\tdest[destOffset + 4] = colorR;\n\t\t\tdest[destOffset + 5] = colorG;\n\t\t\tdest[destOffset + 6] = colorB;\n\t\t}\n\n\t\tdestOffset += outWidth;\n\t\t{\n\t\t\tdest[destOffset + 0] = colorR;\n\t\t\tdest[destOffset + 1] = colorG;\n\t\t\tdest[destOffset + 2] = colorB;\n\t\t}\n\t\t{\n\t\t\tdest[destOffset + 4] = colorR;\n\t\t\tdest[destOffset + 5] = colorG;\n\t\t\tdest[destOffset + 6] = colorB;\n\t\t}\n\t}\n\n\tpublic x1BlockRenderChar(target: ImageData, dx: number, dy: number, color: RGBA, backgroundColor: RGBA, useLighterFont: boolean): void {\n\t\tif (dx + Constants.x1_CHAR_WIDTH > target.width || dy + Constants.x1_CHAR_HEIGHT > target.height) {\n\t\t\tconsole.warn('bad render request outside image data');\n\t\t\treturn;\n\t\t}\n\n\t\tconst outWidth = target.width * Constants.RGBA_CHANNELS_CNT;\n\n\t\tconst c = 0.5;\n\n\t\tconst backgroundR = backgroundColor.r;\n\t\tconst backgroundG = backgroundColor.g;\n\t\tconst backgroundB = backgroundColor.b;\n\n\t\tconst deltaR = color.r - backgroundR;\n\t\tconst deltaG = color.g - backgroundG;\n\t\tconst deltaB = color.b - backgroundB;\n\n\t\tconst colorR = backgroundR + deltaR * c;\n\t\tconst colorG = backgroundG + deltaG * c;\n\t\tconst colorB = backgroundB + deltaB * c;\n\n\t\tconst dest = target.data;\n\n\t\tlet destOffset = dy * outWidth + dx * Constants.RGBA_CHANNELS_CNT;\n\t\t{\n\t\t\tdest[destOffset + 0] = colorR;\n\t\t\tdest[destOffset + 1] = colorG;\n\t\t\tdest[destOffset + 2] = colorB;\n\t\t}\n\n\t\tdestOffset += outWidth;\n\t\t{\n\t\t\tdest[destOffset + 0] = colorR;\n\t\t\tdest[destOffset + 1] = colorG;\n\t\t\tdest[destOffset + 2] = colorB;\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { IViewLayout, ViewModelDecoration } from 'vs/editor/common/viewModel/viewModel';\nimport { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Position } from 'vs/editor/common/core/position';\n\nexport interface IViewLines {\n\tlinesVisibleRangesForRange(range: Range, includeNewLines: boolean): LineVisibleRanges[];\n\tvisibleRangesForRange2(range: Range): HorizontalRange[];\n}\n\nexport abstract class RestrictedRenderingContext {\n\t_restrictedRenderingContextBrand: void;\n\n\tpublic readonly viewportData: ViewportData;\n\n\tpublic readonly scrollWidth: number;\n\tpublic readonly scrollHeight: number;\n\n\tpublic readonly visibleRange: Range;\n\tpublic readonly bigNumbersDelta: number;\n\n\tpublic readonly scrollTop: number;\n\tpublic readonly scrollLeft: number;\n\n\tpublic readonly viewportWidth: number;\n\tpublic readonly viewportHeight: number;\n\n\tprivate readonly _viewLayout: IViewLayout;\n\n\tconstructor(viewLayout: IViewLayout, viewportData: ViewportData) {\n\t\tthis._viewLayout = viewLayout;\n\t\tthis.viewportData = viewportData;\n\n\t\tthis.scrollWidth = this._viewLayout.getScrollWidth();\n\t\tthis.scrollHeight = this._viewLayout.getScrollHeight();\n\n\t\tthis.visibleRange = this.viewportData.visibleRange;\n\t\tthis.bigNumbersDelta = this.viewportData.bigNumbersDelta;\n\n\t\tconst vInfo = this._viewLayout.getCurrentViewport();\n\t\tthis.scrollTop = vInfo.top;\n\t\tthis.scrollLeft = vInfo.left;\n\t\tthis.viewportWidth = vInfo.width;\n\t\tthis.viewportHeight = vInfo.height;\n\t}\n\n\tpublic getScrolledTopFromAbsoluteTop(absoluteTop: number): number {\n\t\treturn absoluteTop - this.scrollTop;\n\t}\n\n\tpublic getVerticalOffsetForLineNumber(lineNumber: number): number {\n\t\treturn this._viewLayout.getVerticalOffsetForLineNumber(lineNumber);\n\t}\n\n\tpublic lineIsVisible(lineNumber: number): boolean {\n\t\treturn (\n\t\t\tthis.visibleRange.startLineNumber <= lineNumber\n\t\t\t&& lineNumber <= this.visibleRange.endLineNumber\n\t\t);\n\t}\n\n\tpublic getDecorationsInViewport(): ViewModelDecoration[] {\n\t\treturn this.viewportData.getDecorationsInViewport();\n\t}\n\n}\n\nexport class RenderingContext extends RestrictedRenderingContext {\n\t_renderingContextBrand: void;\n\n\tprivate readonly _viewLines: IViewLines;\n\n\tconstructor(viewLayout: IViewLayout, viewportData: ViewportData, viewLines: IViewLines) {\n\t\tsuper(viewLayout, viewportData);\n\t\tthis._viewLines = viewLines;\n\t}\n\n\tpublic linesVisibleRangesForRange(range: Range, includeNewLines: boolean): LineVisibleRanges[] {\n\t\treturn this._viewLines.linesVisibleRangesForRange(range, includeNewLines);\n\t}\n\n\tpublic visibleRangeForPosition(position: Position): HorizontalRange {\n\t\tconst visibleRanges = this._viewLines.visibleRangesForRange2(\n\t\t\tnew Range(position.lineNumber, position.column, position.lineNumber, position.column)\n\t\t);\n\t\tif (!visibleRanges) {\n\t\t\treturn null;\n\t\t}\n\t\treturn visibleRanges[0];\n\t}\n}\n\nexport class LineVisibleRanges {\n\t_lineVisibleRangesBrand: void;\n\n\tpublic lineNumber: number;\n\tpublic ranges: HorizontalRange[];\n\n\tconstructor(lineNumber: number, ranges: HorizontalRange[]) {\n\t\tthis.lineNumber = lineNumber;\n\t\tthis.ranges = ranges;\n\t}\n}\n\nexport class HorizontalRange {\n\t_horizontalRangeBrand: void;\n\n\tpublic left: number;\n\tpublic width: number;\n\n\tconstructor(left: number, width: number) {\n\t\tthis.left = Math.round(left);\n\t\tthis.width = Math.round(width);\n\t}\n\n\tpublic toString(): string {\n\t\treturn `[${this.left},${this.width}]`;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { HorizontalRange } from 'vs/editor/common/view/renderingContext';\n\nclass FloatHorizontalRange {\n\t_floatHorizontalRangeBrand: void;\n\n\tpublic readonly left: number;\n\tpublic readonly width: number;\n\n\tconstructor(left: number, width: number) {\n\t\tthis.left = left;\n\t\tthis.width = width;\n\t}\n\n\tpublic toString(): string {\n\t\treturn `[${this.left},${this.width}]`;\n\t}\n\n\tpublic static compare(a: FloatHorizontalRange, b: FloatHorizontalRange): number {\n\t\treturn a.left - b.left;\n\t}\n}\n\nexport class RangeUtil {\n\n\t/**\n\t * Reusing the same range here\n\t * because IE is buggy and constantly freezes when using a large number\n\t * of ranges and calling .detach on them\n\t */\n\tprivate static _handyReadyRange: Range;\n\n\tprivate static _createRange(): Range {\n\t\tif (!this._handyReadyRange) {\n\t\t\tthis._handyReadyRange = document.createRange();\n\t\t}\n\t\treturn this._handyReadyRange;\n\t}\n\n\tprivate static _detachRange(range: Range, endNode: HTMLElement): void {\n\t\t// Move range out of the span node, IE doesn't like having many ranges in\n\t\t// the same spot and will act badly for lines containing dashes ('-')\n\t\trange.selectNodeContents(endNode);\n\t}\n\n\tprivate static _readClientRects(startElement: Node, startOffset: number, endElement: Node, endOffset: number, endNode: HTMLElement): ClientRectList {\n\t\tlet range = this._createRange();\n\t\ttry {\n\t\t\trange.setStart(startElement, startOffset);\n\t\t\trange.setEnd(endElement, endOffset);\n\n\t\t\treturn range.getClientRects();\n\t\t} catch (e) {\n\t\t\t// This is life ...\n\t\t\treturn null;\n\t\t} finally {\n\t\t\tthis._detachRange(range, endNode);\n\t\t}\n\t}\n\n\tprivate static _mergeAdjacentRanges(ranges: FloatHorizontalRange[]): HorizontalRange[] {\n\t\tif (ranges.length === 1) {\n\t\t\t// There is nothing to merge\n\t\t\treturn [new HorizontalRange(ranges[0].left, ranges[0].width)];\n\t\t}\n\n\t\tranges.sort(FloatHorizontalRange.compare);\n\n\t\tlet result: HorizontalRange[] = [], resultLen = 0;\n\t\tlet prevLeft = ranges[0].left;\n\t\tlet prevWidth = ranges[0].width;\n\n\t\tfor (let i = 1, len = ranges.length; i < len; i++) {\n\t\t\tconst range = ranges[i];\n\t\t\tconst myLeft = range.left;\n\t\t\tconst myWidth = range.width;\n\n\t\t\tif (prevLeft + prevWidth + 0.9 /* account for browser's rounding errors*/ >= myLeft) {\n\t\t\t\tprevWidth = Math.max(prevWidth, myLeft + myWidth - prevLeft);\n\t\t\t} else {\n\t\t\t\tresult[resultLen++] = new HorizontalRange(prevLeft, prevWidth);\n\t\t\t\tprevLeft = myLeft;\n\t\t\t\tprevWidth = myWidth;\n\t\t\t}\n\t\t}\n\n\t\tresult[resultLen++] = new HorizontalRange(prevLeft, prevWidth);\n\n\t\treturn result;\n\t}\n\n\tprivate static _createHorizontalRangesFromClientRects(clientRects: ClientRectList, clientRectDeltaLeft: number): HorizontalRange[] {\n\t\tif (!clientRects || clientRects.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// We go through FloatHorizontalRange because it has been observed in bi-di text\n\t\t// that the clientRects are not coming in sorted from the browser\n\n\t\tlet result: FloatHorizontalRange[] = [];\n\t\tfor (let i = 0, len = clientRects.length; i < len; i++) {\n\t\t\tconst clientRect = clientRects[i];\n\t\t\tresult[i] = new FloatHorizontalRange(Math.max(0, clientRect.left - clientRectDeltaLeft), clientRect.width);\n\t\t}\n\n\t\treturn this._mergeAdjacentRanges(result);\n\t}\n\n\tpublic static readHorizontalRanges(domNode: HTMLElement, startChildIndex: number, startOffset: number, endChildIndex: number, endOffset: number, clientRectDeltaLeft: number, endNode: HTMLElement): HorizontalRange[] {\n\t\t// Panic check\n\t\tlet min = 0;\n\t\tlet max = domNode.children.length - 1;\n\t\tif (min > max) {\n\t\t\treturn null;\n\t\t}\n\t\tstartChildIndex = Math.min(max, Math.max(min, startChildIndex));\n\t\tendChildIndex = Math.min(max, Math.max(min, endChildIndex));\n\n\t\t// If crossing over to a span only to select offset 0, then use the previous span's maximum offset\n\t\t// Chrome is buggy and doesn't handle 0 offsets well sometimes.\n\t\tif (startChildIndex !== endChildIndex) {\n\t\t\tif (endChildIndex > 0 && endOffset === 0) {\n\t\t\t\tendChildIndex--;\n\t\t\t\tendOffset = Number.MAX_VALUE;\n\t\t\t}\n\t\t}\n\n\t\tlet startElement = domNode.children[startChildIndex].firstChild;\n\t\tlet endElement = domNode.children[endChildIndex].firstChild;\n\n\t\tif (!startElement || !endElement) {\n\t\t\treturn null;\n\t\t}\n\n\t\tstartOffset = Math.min(startElement.textContent.length, Math.max(0, startOffset));\n\t\tendOffset = Math.min(endElement.textContent.length, Math.max(0, endOffset));\n\n\t\tlet clientRects = this._readClientRects(startElement, startOffset, endElement, endOffset, endNode);\n\t\treturn this._createHorizontalRangesFromClientRects(clientRects, clientRectDeltaLeft);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { MinimapCharRenderer } from 'vs/editor/common/view/minimapCharRenderer';\n\nfunction toUint8ClampedArrat(arr: number[]): Uint8ClampedArray {\n\tlet r = new Uint8ClampedArray(arr.length);\n\tfor (let i = 0, len = arr.length; i < len; i++) {\n\t\tr[i] = arr[i];\n\t}\n\treturn r;\n}\n\nlet minimapCharRenderer: MinimapCharRenderer = null;\nexport function getOrCreateMinimapCharRenderer(): MinimapCharRenderer {\n\tif (!minimapCharRenderer) {\n\t\tlet _x1Data = toUint8ClampedArrat(x1Data);\n\t\tx1Data = null;\n\n\t\tlet _x2Data = toUint8ClampedArrat(x2Data);\n\t\tx2Data = null;\n\t\tminimapCharRenderer = new MinimapCharRenderer(_x2Data, _x1Data);\n\t}\n\treturn minimapCharRenderer;\n}\n\nvar x2Data = [\n\n\t//\n\t0, 0,\n\t0, 0,\n\t0, 0,\n\t0, 0,\n\n\t// !\n\t39, 14,\n\t39, 14,\n\t14, 5,\n\t29, 10,\n\n\t// \"\n\t96, 96,\n\t29, 29,\n\t0, 0,\n\t0, 0,\n\n\t// #\n\t49, 113,\n\t195, 214,\n\t227, 166,\n\t135, 42,\n\n\t// $\n\t40, 29,\n\t194, 38,\n\t75, 148,\n\t197, 187,\n\n\t// %\n\t145, 0,\n\t160, 61,\n\t75, 143,\n\t2, 183,\n\n\t// &\n\t138, 58,\n\t163, 6,\n\t177, 223,\n\t197, 227,\n\n\t// '\n\t38, 13,\n\t11, 4,\n\t0, 0,\n\t0, 0,\n\n\t// (\n\t10, 54,\n\t52, 8,\n\t62, 4,\n\t71, 122,\n\n\t// )\n\t73, 2,\n\t19, 40,\n\t10, 50,\n\t155, 36,\n\n\t// *\n\t79, 70,\n\t145, 121,\n\t7, 5,\n\t0, 0,\n\n\t// +\n\t2, 1,\n\t36, 12,\n\t204, 166,\n\t16, 5,\n\n\t// ,\n\t0, 0,\n\t0, 0,\n\t1, 0,\n\t154, 34,\n\n\t// -\n\t0, 0,\n\t0, 0,\n\t96, 83,\n\t0, 0,\n\n\t// .\n\t0, 0,\n\t0, 0,\n\t0, 0,\n\t46, 34,\n\n\t// /\n\t0, 82,\n\t2, 56,\n\t53, 3,\n\t146, 0,\n\n\t// 0\n\t146, 119,\n\t152, 132,\n\t152, 131,\n\t145, 119,\n\n\t// 1\n\t170, 42,\n\t15, 42,\n\t15, 42,\n\t172, 194,\n\n\t// 2\n\t131, 132,\n\t0, 139,\n\t80, 28,\n\t227, 143,\n\n\t// 3\n\t159, 135,\n\t15, 118,\n\t11, 126,\n\t171, 144,\n\n\t// 4\n\t20, 124,\n\t88, 106,\n\t217, 196,\n\t0, 106,\n\n\t// 5\n\t189, 92,\n\t168, 43,\n\t5, 130,\n\t164, 133,\n\n\t// 6\n\t130, 115,\n\t183, 65,\n\t134, 120,\n\t141, 141,\n\n\t// 7\n\t170, 196,\n\t2, 106,\n\t31, 32,\n\t105, 2,\n\n\t// 8\n\t145, 130,\n\t116, 114,\n\t132, 135,\n\t138, 140,\n\n\t// 9\n\t138, 113,\n\t147, 137,\n\t81, 183,\n\t129, 94,\n\n\t// :\n\t0, 0,\n\t21, 16,\n\t4, 3,\n\t46, 34,\n\n\t// ;\n\t0, 0,\n\t45, 34,\n\t1, 0,\n\t160, 49,\n\n\t// <\n\t0, 0,\n\t43, 143,\n\t203, 23,\n\t1, 76,\n\n\t// =\n\t0, 0,\n\t38, 28,\n\t131, 96,\n\t38, 28,\n\n\t// >\n\t0, 0,\n\t168, 31,\n\t29, 191,\n\t98, 0,\n\n\t// ?\n\t118, 139,\n\t5, 113,\n\t45, 13,\n\t37, 6,\n\n\t// @\n\t97, 115,\n\t161, 179,\n\t204, 105,\n\t223, 224,\n\n\t// A\n\t83, 52,\n\t111, 100,\n\t184, 186,\n\t120, 132,\n\n\t// B\n\t212, 145,\n\t180, 139,\n\t174, 161,\n\t212, 182,\n\n\t// C\n\t104, 162,\n\t131, 0,\n\t131, 0,\n\t104, 161,\n\n\t// D\n\t219, 120,\n\t110, 116,\n\t110, 116,\n\t219, 120,\n\n\t// E\n\t207, 154,\n\t163, 40,\n\t147, 22,\n\t207, 154,\n\n\t// F\n\t202, 159,\n\t161, 47,\n\t145, 23,\n\t111, 0,\n\n\t// G\n\t139, 154,\n\t144, 30,\n\t144, 135,\n\t139, 187,\n\n\t// H\n\t110, 110,\n\t168, 161,\n\t150, 145,\n\t110, 110,\n\n\t// I\n\t185, 162,\n\t43, 16,\n\t43, 16,\n\t185, 162,\n\n\t// J\n\t73, 129,\n\t0, 110,\n\t0, 110,\n\t191, 87,\n\n\t// K\n\t149, 149,\n\t236, 48,\n\t195, 91,\n\t146, 149,\n\n\t// L\n\t146, 0,\n\t146, 0,\n\t146, 0,\n\t187, 173,\n\n\t// M\n\t200, 201,\n\t222, 215,\n\t172, 147,\n\t95, 95,\n\n\t// N\n\t193, 97,\n\t224, 129,\n\t159, 206,\n\t97, 192,\n\n\t// O\n\t155, 139,\n\t153, 115,\n\t153, 115,\n\t156, 140,\n\n\t// P\n\t189, 158,\n\t123, 136,\n\t190, 64,\n\t111, 0,\n\n\t// Q\n\t155, 139,\n\t153, 115,\n\t153, 114,\n\t156, 241,\n\n\t// R\n\t197, 148,\n\t150, 152,\n\t170, 116,\n\t110, 157,\n\n\t// S\n\t156, 128,\n\t169, 14,\n\t13, 159,\n\t158, 149,\n\n\t// T\n\t212, 189,\n\t43, 16,\n\t43, 16,\n\t43, 16,\n\n\t// U\n\t148, 110,\n\t148, 110,\n\t147, 109,\n\t182, 151,\n\n\t// V\n\t133, 121,\n\t106, 118,\n\t114, 103,\n\t89, 66,\n\n\t// W\n\t94, 94,\n\t211, 188,\n\t205, 207,\n\t139, 168,\n\n\t// X\n\t151, 152,\n\t87, 76,\n\t101, 79,\n\t151, 152,\n\n\t// Y\n\t130, 156,\n\t125, 116,\n\t47, 29,\n\t43, 16,\n\n\t// Z\n\t169, 228,\n\t11, 103,\n\t120, 6,\n\t230, 176,\n\n\t// [\n\t55, 49,\n\t55, 6,\n\t55, 6,\n\t193, 102,\n\n\t// \\\n\t92, 0,\n\t71, 0,\n\t13, 30,\n\t0, 147,\n\n\t// ]\n\t63, 43,\n\t12, 43,\n\t12, 43,\n\t142, 152,\n\n\t// ^\n\t71, 53,\n\t61, 61,\n\t0, 0,\n\t0, 0,\n\n\t// _\n\t0, 0,\n\t0, 0,\n\t0, 0,\n\t158, 146,\n\n\t// `\n\t25, 2,\n\t0, 0,\n\t0, 0,\n\t0, 0,\n\n\t// a\n\t0, 0,\n\t107, 130,\n\t170, 194,\n\t176, 188,\n\n\t// b\n\t109, 0,\n\t203, 159,\n\t113, 111,\n\t202, 158,\n\n\t// c\n\t0, 0,\n\t135, 135,\n\t114, 0,\n\t136, 135,\n\n\t// d\n\t0, 109,\n\t187, 190,\n\t148, 126,\n\t177, 187,\n\n\t// e\n\t0, 0,\n\t149, 130,\n\t218, 105,\n\t169, 135,\n\n\t// f\n\t37, 113,\n\t146, 113,\n\t49, 13,\n\t49, 13,\n\n\t// g\n\t0, 0,\n\t178, 195,\n\t147, 114,\n\t255, 255,\n\n\t// h\n\t109, 0,\n\t193, 149,\n\t110, 109,\n\t109, 109,\n\n\t// i\n\t12, 15,\n\t125, 41,\n\t33, 41,\n\t144, 188,\n\n\t// j\n\t1, 6,\n\t75, 53,\n\t10, 53,\n\t210, 161,\n\n\t// k\n\t110, 0,\n\t152, 148,\n\t210, 60,\n\t110, 156,\n\n\t// l\n\t213, 5,\n\t63, 5,\n\t63, 5,\n\t45, 111,\n\n\t// m\n\t0, 0,\n\t232, 172,\n\t190, 168,\n\t190, 169,\n\n\t// n\n\t0, 0,\n\t190, 144,\n\t109, 109,\n\t109, 109,\n\n\t// o\n\t0, 0,\n\t168, 140,\n\t148, 111,\n\t168, 140,\n\n\t// p\n\t0, 0,\n\t200, 151,\n\t113, 110,\n\t255, 158,\n\n\t// q\n\t0, 0,\n\t184, 188,\n\t147, 139,\n\t186, 255,\n\n\t// r\n\t0, 0,\n\t122, 130,\n\t111, 0,\n\t109, 0,\n\n\t// s\n\t0, 0,\n\t132, 69,\n\t109, 93,\n\t110, 136,\n\n\t// t\n\t51, 5,\n\t205, 103,\n\t61, 6,\n\t47, 106,\n\n\t// u\n\t0, 0,\n\t110, 109,\n\t110, 122,\n\t155, 179,\n\n\t// v\n\t0, 0,\n\t132, 120,\n\t113, 114,\n\t84, 63,\n\n\t// w\n\t0, 0,\n\t124, 108,\n\t202, 189,\n\t160, 174,\n\n\t// x\n\t0, 0,\n\t144, 142,\n\t79, 57,\n\t159, 146,\n\n\t// y\n\t0, 0,\n\t138, 138,\n\t119, 117,\n\t255, 69,\n\n\t// z\n\t0, 0,\n\t97, 198,\n\t47, 38,\n\t208, 84,\n\n\t// {\n\t23, 112,\n\t41, 14,\n\t157, 7,\n\t121, 192,\n\n\t// |\n\t35, 11,\n\t35, 11,\n\t35, 11,\n\t160, 61,\n\n\t// }\n\t129, 9,\n\t40, 19,\n\t20, 139,\n\t236, 44,\n\n\t// ~\n\t0, 0,\n\t15, 3,\n\t97, 93,\n\t0, 0,\n\n];\n\nvar x1Data = [\n\n\t//\n\t0,\n\t0,\n\n\t// !\n\t23,\n\t12,\n\n\t// \"\n\t53,\n\t0,\n\n\t// #\n\t130,\n\t127,\n\n\t// $\n\t58,\n\t149,\n\n\t// %\n\t67,\n\t77,\n\n\t// &\n\t72,\n\t198,\n\n\t// '\n\t13,\n\t0,\n\n\t// (\n\t25,\n\t51,\n\n\t// )\n\t25,\n\t49,\n\n\t// *\n\t94,\n\t2,\n\n\t// +\n\t8,\n\t64,\n\n\t// ,\n\t0,\n\t24,\n\n\t// -\n\t0,\n\t21,\n\n\t// .\n\t0,\n\t9,\n\n\t// /\n\t19,\n\t27,\n\n\t// 0\n\t126,\n\t126,\n\n\t// 1\n\t51,\n\t80,\n\n\t// 2\n\t72,\n\t105,\n\n\t// 3\n\t87,\n\t98,\n\n\t// 4\n\t73,\n\t93,\n\n\t// 5\n\t106,\n\t85,\n\n\t// 6\n\t111,\n\t123,\n\n\t// 7\n\t87,\n\t30,\n\n\t// 8\n\t116,\n\t126,\n\n\t// 9\n\t123,\n\t110,\n\n\t// :\n\t4,\n\t16,\n\n\t// ;\n\t9,\n\t28,\n\n\t// <\n\t21,\n\t53,\n\n\t// =\n\t8,\n\t62,\n\n\t// >\n\t23,\n\t52,\n\n\t// ?\n\t73,\n\t21,\n\n\t// @\n\t132,\n\t183,\n\n\t// A\n\t78,\n\t142,\n\n\t// B\n\t168,\n\t175,\n\n\t// C\n\t70,\n\t70,\n\n\t// D\n\t128,\n\t128,\n\n\t// E\n\t123,\n\t110,\n\n\t// F\n\t125,\n\t43,\n\n\t// G\n\t100,\n\t139,\n\n\t// H\n\t125,\n\t119,\n\n\t// I\n\t78,\n\t78,\n\n\t// J\n\t54,\n\t77,\n\n\t// K\n\t139,\n\t139,\n\n\t// L\n\t33,\n\t87,\n\n\t// M\n\t201,\n\t117,\n\n\t// N\n\t162,\n\t149,\n\n\t// O\n\t130,\n\t130,\n\n\t// P\n\t138,\n\t60,\n\n\t// Q\n\t130,\n\t172,\n\n\t// R\n\t149,\n\t127,\n\n\t// S\n\t95,\n\t98,\n\n\t// T\n\t95,\n\t25,\n\n\t// U\n\t118,\n\t135,\n\n\t// V\n\t110,\n\t85,\n\n\t// W\n\t147,\n\t175,\n\n\t// X\n\t105,\n\t110,\n\n\t// Y\n\t121,\n\t30,\n\n\t// Z\n\t101,\n\t113,\n\n\t// [\n\t34,\n\t68,\n\n\t// \\\n\t20,\n\t26,\n\n\t// ]\n\t34,\n\t68,\n\n\t// ^\n\t56,\n\t0,\n\n\t// _\n\t0,\n\t44,\n\n\t// `\n\t3,\n\t0,\n\n\t// a\n\t27,\n\t175,\n\n\t// b\n\t80,\n\t133,\n\n\t// c\n\t31,\n\t66,\n\n\t// d\n\t85,\n\t147,\n\n\t// e\n\t32,\n\t150,\n\n\t// f\n\t90,\n\t25,\n\n\t// g\n\t45,\n\t230,\n\n\t// h\n\t77,\n\t101,\n\n\t// i\n\t36,\n\t83,\n\n\t// j\n\t22,\n\t84,\n\n\t// k\n\t71,\n\t118,\n\n\t// l\n\t44,\n\t44,\n\n\t// m\n\t52,\n\t172,\n\n\t// n\n\t38,\n\t101,\n\n\t// o\n\t35,\n\t130,\n\n\t// p\n\t40,\n\t197,\n\n\t// q\n\t43,\n\t197,\n\n\t// r\n\t29,\n\t26,\n\n\t// s\n\t23,\n\t103,\n\n\t// t\n\t67,\n\t44,\n\n\t// u\n\t25,\n\t129,\n\n\t// v\n\t29,\n\t85,\n\n\t// w\n\t27,\n\t177,\n\n\t// x\n\t33,\n\t97,\n\n\t// y\n\t32,\n\t145,\n\n\t// z\n\t33,\n\t77,\n\n\t// {\n\t38,\n\t96,\n\n\t// |\n\t20,\n\t55,\n\n\t// }\n\t36,\n\t95,\n\n\t// ~\n\t2,\n\t22,\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'use strict';\n\nimport { IConfiguration } from 'vs/editor/common/editorCommon';\nimport { IViewModel, IViewLayout } from 'vs/editor/common/viewModel/viewModel';\nimport { ViewEventHandler } from 'vs/editor/common/viewModel/viewEventHandler';\nimport { ViewEventDispatcher } from 'vs/editor/common/view/viewEventDispatcher';\nimport { ITheme } from 'vs/platform/theme/common/themeService';\n\nexport class ViewContext {\n\n\tpublic readonly configuration: IConfiguration;\n\tpublic readonly model: IViewModel;\n\tpublic readonly viewLayout: IViewLayout;\n\tpublic readonly privateViewEventBus: ViewEventDispatcher;\n\n\tpublic theme: ITheme; // will be updated\n\n\tconstructor(\n\t\tconfiguration: IConfiguration,\n\t\ttheme: ITheme,\n\t\tmodel: IViewModel,\n\t\tprivateViewEventBus: ViewEventDispatcher\n\t) {\n\t\tthis.configuration = configuration;\n\t\tthis.theme = theme;\n\t\tthis.model = model;\n\t\tthis.viewLayout = model.viewLayout;\n\t\tthis.privateViewEventBus = privateViewEventBus;\n\t}\n\n\tpublic addEventHandler(eventHandler: ViewEventHandler): void {\n\t\tthis.privateViewEventBus.addEventHandler(eventHandler);\n\t}\n\n\tpublic removeEventHandler(eventHandler: ViewEventHandler): void {\n\t\tthis.privateViewEventBus.removeEventHandler(eventHandler);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { ViewEventHandler } from 'vs/editor/common/viewModel/viewEventHandler';\nimport { ViewEvent } from 'vs/editor/common/view/viewEvents';\n\nexport class ViewEventDispatcher {\n\n\tprivate _eventHandlerGateKeeper: (callback: () => void) => void;\n\tprivate _eventHandlers: ViewEventHandler[];\n\tprivate _eventQueue: ViewEvent[];\n\tprivate _isConsumingQueue: boolean;\n\n\tconstructor(eventHandlerGateKeeper: (callback: () => void) => void) {\n\t\tthis._eventHandlerGateKeeper = eventHandlerGateKeeper;\n\t\tthis._eventHandlers = [];\n\t\tthis._eventQueue = null;\n\t\tthis._isConsumingQueue = false;\n\t}\n\n\tpublic addEventHandler(eventHandler: ViewEventHandler): void {\n\t\tfor (let i = 0, len = this._eventHandlers.length; i < len; i++) {\n\t\t\tif (this._eventHandlers[i] === eventHandler) {\n\t\t\t\tconsole.warn('Detected duplicate listener in ViewEventDispatcher', eventHandler);\n\t\t\t}\n\t\t}\n\t\tthis._eventHandlers.push(eventHandler);\n\t}\n\n\tpublic removeEventHandler(eventHandler: ViewEventHandler): void {\n\t\tfor (let i = 0; i < this._eventHandlers.length; i++) {\n\t\t\tif (this._eventHandlers[i] === eventHandler) {\n\t\t\t\tthis._eventHandlers.splice(i, 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic emit(event: ViewEvent): void {\n\n\t\tif (this._eventQueue) {\n\t\t\tthis._eventQueue.push(event);\n\t\t} else {\n\t\t\tthis._eventQueue = [event];\n\t\t}\n\n\t\tif (!this._isConsumingQueue) {\n\t\t\tthis.consumeQueue();\n\t\t}\n\t}\n\n\tpublic emitMany(events: ViewEvent[]): void {\n\t\tif (this._eventQueue) {\n\t\t\tthis._eventQueue = this._eventQueue.concat(events);\n\t\t} else {\n\t\t\tthis._eventQueue = events;\n\t\t}\n\n\t\tif (!this._isConsumingQueue) {\n\t\t\tthis.consumeQueue();\n\t\t}\n\t}\n\n\tprivate consumeQueue(): void {\n\t\tthis._eventHandlerGateKeeper(() => {\n\t\t\ttry {\n\t\t\t\tthis._isConsumingQueue = true;\n\n\t\t\t\tthis._doConsumeQueue();\n\n\t\t\t} finally {\n\t\t\t\tthis._isConsumingQueue = false;\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _doConsumeQueue(): void {\n\t\twhile (this._eventQueue) {\n\t\t\t// Empty event queue, as events might come in while sending these off\n\t\t\tlet events = this._eventQueue;\n\t\t\tthis._eventQueue = null;\n\n\t\t\t// Use a clone of the event handlers list, as they might remove themselves\n\t\t\tlet eventHandlers = this._eventHandlers.slice(0);\n\t\t\tfor (let i = 0, len = eventHandlers.length; i < len; i++) {\n\t\t\t\teventHandlers[i].handleEvents(events);\n\t\t\t}\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { ScrollEvent } from 'vs/base/common/scrollable';\nimport { IConfigurationChangedEvent } from 'vs/editor/common/config/editorOptions';\nimport * as errors from 'vs/base/common/errors';\nimport { IDisposable, Disposable } from 'vs/base/common/lifecycle';\n\nexport const enum ViewEventType {\n\tViewConfigurationChanged = 1,\n\tViewCursorStateChanged = 2,\n\tViewDecorationsChanged = 3,\n\tViewFlushed = 4,\n\tViewFocusChanged = 5,\n\tViewLineMappingChanged = 6,\n\tViewLinesChanged = 7,\n\tViewLinesDeleted = 8,\n\tViewLinesInserted = 9,\n\tViewRevealRangeRequest = 10,\n\tViewScrollChanged = 11,\n\tViewTokensChanged = 12,\n\tViewTokensColorsChanged = 13,\n\tViewZonesChanged = 14,\n\tViewThemeChanged = 15\n}\n\nexport class ViewConfigurationChangedEvent {\n\n\tpublic readonly type = ViewEventType.ViewConfigurationChanged;\n\n\tpublic readonly canUseLayerHinting: boolean;\n\tpublic readonly pixelRatio: boolean;\n\tpublic readonly editorClassName: boolean;\n\tpublic readonly lineHeight: boolean;\n\tpublic readonly readOnly: boolean;\n\tpublic readonly accessibilitySupport: boolean;\n\tpublic readonly emptySelectionClipboard: boolean;\n\tpublic readonly layoutInfo: boolean;\n\tpublic readonly fontInfo: boolean;\n\tpublic readonly viewInfo: boolean;\n\tpublic readonly wrappingInfo: boolean;\n\n\tconstructor(source: IConfigurationChangedEvent) {\n\t\tthis.canUseLayerHinting = source.canUseLayerHinting;\n\t\tthis.pixelRatio = source.pixelRatio;\n\t\tthis.editorClassName = source.editorClassName;\n\t\tthis.lineHeight = source.lineHeight;\n\t\tthis.readOnly = source.readOnly;\n\t\tthis.accessibilitySupport = source.accessibilitySupport;\n\t\tthis.emptySelectionClipboard = source.emptySelectionClipboard;\n\t\tthis.layoutInfo = source.layoutInfo;\n\t\tthis.fontInfo = source.fontInfo;\n\t\tthis.viewInfo = source.viewInfo;\n\t\tthis.wrappingInfo = source.wrappingInfo;\n\t}\n}\n\nexport class ViewCursorStateChangedEvent {\n\n\tpublic readonly type = ViewEventType.ViewCursorStateChanged;\n\n\t/**\n\t * The primary selection is always at index 0.\n\t */\n\tpublic readonly selections: Selection[];\n\t/**\n\t * Is the primary cursor in the editable range?\n\t */\n\tpublic readonly isInEditableRange: boolean;\n\t/**\n\t * A message that can be presented to screen readers.\n\t */\n\tpublic readonly screenReaderMessage: string;\n\n\tconstructor(selections: Selection[], isInEditableRange: boolean, screenReaderMessage: string) {\n\t\tthis.selections = selections;\n\t\tthis.isInEditableRange = isInEditableRange;\n\t\tthis.screenReaderMessage = screenReaderMessage;\n\t}\n}\n\nexport class ViewDecorationsChangedEvent {\n\n\tpublic readonly type = ViewEventType.ViewDecorationsChanged;\n\n\tconstructor() {\n\t\t// Nothing to do\n\t}\n}\n\nexport class ViewFlushedEvent {\n\n\tpublic readonly type = ViewEventType.ViewFlushed;\n\n\tconstructor() {\n\t\t// Nothing to do\n\t}\n}\n\nexport class ViewFocusChangedEvent {\n\n\tpublic readonly type = ViewEventType.ViewFocusChanged;\n\n\tpublic readonly isFocused: boolean;\n\n\tconstructor(isFocused: boolean) {\n\t\tthis.isFocused = isFocused;\n\t}\n}\n\nexport class ViewLineMappingChangedEvent {\n\n\tpublic readonly type = ViewEventType.ViewLineMappingChanged;\n\n\tconstructor() {\n\t\t// Nothing to do\n\t}\n}\n\nexport class ViewLinesChangedEvent {\n\n\tpublic readonly type = ViewEventType.ViewLinesChanged;\n\n\t/**\n\t * The first line that has changed.\n\t */\n\tpublic readonly fromLineNumber: number;\n\t/**\n\t * The last line that has changed.\n\t */\n\tpublic readonly toLineNumber: number;\n\n\tconstructor(fromLineNumber: number, toLineNumber: number) {\n\t\tthis.fromLineNumber = fromLineNumber;\n\t\tthis.toLineNumber = toLineNumber;\n\t}\n}\n\nexport class ViewLinesDeletedEvent {\n\n\tpublic readonly type = ViewEventType.ViewLinesDeleted;\n\n\t/**\n\t * At what line the deletion began (inclusive).\n\t */\n\tpublic readonly fromLineNumber: number;\n\t/**\n\t * At what line the deletion stopped (inclusive).\n\t */\n\tpublic readonly toLineNumber: number;\n\n\tconstructor(fromLineNumber: number, toLineNumber: number) {\n\t\tthis.fromLineNumber = fromLineNumber;\n\t\tthis.toLineNumber = toLineNumber;\n\t}\n}\n\nexport class ViewLinesInsertedEvent {\n\n\tpublic readonly type = ViewEventType.ViewLinesInserted;\n\n\t/**\n\t * Before what line did the insertion begin\n\t */\n\tpublic readonly fromLineNumber: number;\n\t/**\n\t * `toLineNumber` - `fromLineNumber` + 1 denotes the number of lines that were inserted\n\t */\n\tpublic readonly toLineNumber: number;\n\n\tconstructor(fromLineNumber: number, toLineNumber: number) {\n\t\tthis.fromLineNumber = fromLineNumber;\n\t\tthis.toLineNumber = toLineNumber;\n\t}\n}\n\nexport const enum VerticalRevealType {\n\tSimple = 0,\n\tCenter = 1,\n\tCenterIfOutsideViewport = 2,\n\tTop = 3,\n\tBottom = 4\n}\n\nexport class ViewRevealRangeRequestEvent {\n\n\tpublic readonly type = ViewEventType.ViewRevealRangeRequest;\n\n\t/**\n\t * Range to be reavealed.\n\t */\n\tpublic readonly range: Range;\n\n\tpublic readonly verticalType: VerticalRevealType;\n\t/**\n\t * If true: there should be a horizontal & vertical revealing\n\t * If false: there should be just a vertical revealing\n\t */\n\tpublic readonly revealHorizontal: boolean;\n\n\tconstructor(range: Range, verticalType: VerticalRevealType, revealHorizontal: boolean) {\n\t\tthis.range = range;\n\t\tthis.verticalType = verticalType;\n\t\tthis.revealHorizontal = revealHorizontal;\n\t}\n}\n\nexport class ViewScrollChangedEvent {\n\n\tpublic readonly type = ViewEventType.ViewScrollChanged;\n\n\tpublic readonly scrollWidth: number;\n\tpublic readonly scrollLeft: number;\n\tpublic readonly scrollHeight: number;\n\tpublic readonly scrollTop: number;\n\n\tpublic readonly scrollWidthChanged: boolean;\n\tpublic readonly scrollLeftChanged: boolean;\n\tpublic readonly scrollHeightChanged: boolean;\n\tpublic readonly scrollTopChanged: boolean;\n\n\tconstructor(source: ScrollEvent) {\n\t\tthis.scrollWidth = source.scrollWidth;\n\t\tthis.scrollLeft = source.scrollLeft;\n\t\tthis.scrollHeight = source.scrollHeight;\n\t\tthis.scrollTop = source.scrollTop;\n\n\t\tthis.scrollWidthChanged = source.scrollWidthChanged;\n\t\tthis.scrollLeftChanged = source.scrollLeftChanged;\n\t\tthis.scrollHeightChanged = source.scrollHeightChanged;\n\t\tthis.scrollTopChanged = source.scrollTopChanged;\n\t}\n}\n\nexport class ViewTokensChangedEvent {\n\n\tpublic readonly type = ViewEventType.ViewTokensChanged;\n\n\tpublic readonly ranges: {\n\t\t/**\n\t\t * Start line number of range\n\t\t */\n\t\treadonly fromLineNumber: number;\n\t\t/**\n\t\t * End line number of range\n\t\t */\n\t\treadonly toLineNumber: number;\n\t}[];\n\n\tconstructor(ranges: { fromLineNumber: number; toLineNumber: number; }[]) {\n\t\tthis.ranges = ranges;\n\t}\n}\n\nexport class ViewThemeChangedEvent {\n\n\tpublic readonly type = ViewEventType.ViewThemeChanged;\n\n\tconstructor() {\n\t}\n}\n\nexport class ViewTokensColorsChangedEvent {\n\n\tpublic readonly type = ViewEventType.ViewTokensColorsChanged;\n\n\tconstructor() {\n\t\t// Nothing to do\n\t}\n}\n\nexport class ViewZonesChangedEvent {\n\n\tpublic readonly type = ViewEventType.ViewZonesChanged;\n\n\tconstructor() {\n\t\t// Nothing to do\n\t}\n}\n\nexport type ViewEvent = (\n\tViewConfigurationChangedEvent\n\t| ViewCursorStateChangedEvent\n\t| ViewDecorationsChangedEvent\n\t| ViewFlushedEvent\n\t| ViewFocusChangedEvent\n\t| ViewLinesChangedEvent\n\t| ViewLineMappingChangedEvent\n\t| ViewLinesDeletedEvent\n\t| ViewLinesInsertedEvent\n\t| ViewRevealRangeRequestEvent\n\t| ViewScrollChangedEvent\n\t| ViewTokensChangedEvent\n\t| ViewTokensColorsChangedEvent\n\t| ViewZonesChangedEvent\n\t| ViewThemeChangedEvent\n);\n\nexport interface IViewEventListener {\n\t(events: ViewEvent[]): void;\n}\n\nexport class ViewEventEmitter extends Disposable {\n\tprivate _listeners: IViewEventListener[];\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis._listeners = [];\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._listeners = [];\n\t\tsuper.dispose();\n\t}\n\n\tprotected _emit(events: ViewEvent[]): void {\n\t\tconst listeners = this._listeners.slice(0);\n\t\tfor (let i = 0, len = listeners.length; i < len; i++) {\n\t\t\tsafeInvokeListener(listeners[i], events);\n\t\t}\n\t}\n\n\tpublic addEventListener(listener: (events: ViewEvent[]) => void): IDisposable {\n\t\tthis._listeners.push(listener);\n\t\treturn {\n\t\t\tdispose: () => {\n\t\t\t\tlet listeners = this._listeners;\n\t\t\t\tfor (let i = 0, len = listeners.length; i < len; i++) {\n\t\t\t\t\tif (listeners[i] === listener) {\n\t\t\t\t\t\tlisteners.splice(i, 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n}\n\nfunction safeInvokeListener(listener: IViewEventListener, events: ViewEvent[]): void {\n\ttry {\n\t\tlistener(events);\n\t} catch (e) {\n\t\terrors.onUnexpectedError(e);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { InlineDecoration } from 'vs/editor/common/viewModel/viewModel';\nimport { Constants } from 'vs/editor/common/core/uint';\n\nexport class LineDecoration {\n\t_lineDecorationBrand: void;\n\n\tpublic readonly startColumn: number;\n\tpublic readonly endColumn: number;\n\tpublic readonly className: string;\n\tpublic readonly insertsBeforeOrAfter: boolean;\n\n\tconstructor(startColumn: number, endColumn: number, className: string, insertsBeforeOrAfter: boolean) {\n\t\tthis.startColumn = startColumn;\n\t\tthis.endColumn = endColumn;\n\t\tthis.className = className;\n\t\tthis.insertsBeforeOrAfter = insertsBeforeOrAfter;\n\t}\n\n\tprivate static _equals(a: LineDecoration, b: LineDecoration): boolean {\n\t\treturn (\n\t\t\ta.startColumn === b.startColumn\n\t\t\t&& a.endColumn === b.endColumn\n\t\t\t&& a.className === b.className\n\t\t\t&& a.insertsBeforeOrAfter === b.insertsBeforeOrAfter\n\t\t);\n\t}\n\n\tpublic static equalsArr(a: LineDecoration[], b: LineDecoration[]): boolean {\n\t\tlet aLen = a.length;\n\t\tlet bLen = b.length;\n\t\tif (aLen !== bLen) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (let i = 0; i < aLen; i++) {\n\t\t\tif (!LineDecoration._equals(a[i], b[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic static filter(lineDecorations: InlineDecoration[], lineNumber: number, minLineColumn: number, maxLineColumn: number): LineDecoration[] {\n\t\tif (lineDecorations.length === 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\tlet result: LineDecoration[] = [], resultLen = 0;\n\n\t\tfor (let i = 0, len = lineDecorations.length; i < len; i++) {\n\t\t\tlet d = lineDecorations[i];\n\t\t\tlet range = d.range;\n\n\t\t\tif (range.endLineNumber < lineNumber || range.startLineNumber > lineNumber) {\n\t\t\t\t// Ignore decorations that sit outside this line\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (range.isEmpty()) {\n\t\t\t\t// Ignore empty range decorations\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet startColumn = (range.startLineNumber === lineNumber ? range.startColumn : minLineColumn);\n\t\t\tlet endColumn = (range.endLineNumber === lineNumber ? range.endColumn : maxLineColumn);\n\n\t\t\tif (endColumn <= 1) {\n\t\t\t\t// An empty decoration (endColumn === 1)\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tresult[resultLen++] = new LineDecoration(startColumn, endColumn, d.inlineClassName, d.insertsBeforeOrAfter);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic static compare(a: LineDecoration, b: LineDecoration): number {\n\t\tif (a.startColumn === b.startColumn) {\n\t\t\tif (a.endColumn === b.endColumn) {\n\t\t\t\tif (a.className < b.className) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\tif (a.className > b.className) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\treturn a.endColumn - b.endColumn;\n\t\t}\n\t\treturn a.startColumn - b.startColumn;\n\t}\n}\n\nexport class DecorationSegment {\n\tstartOffset: number;\n\tendOffset: number;\n\tclassName: string;\n\n\tconstructor(startOffset: number, endOffset: number, className: string) {\n\t\tthis.startOffset = startOffset;\n\t\tthis.endOffset = endOffset;\n\t\tthis.className = className;\n\t}\n}\n\nclass Stack {\n\tpublic count: number;\n\tprivate stopOffsets: number[];\n\tprivate classNames: string[];\n\n\tconstructor() {\n\t\tthis.stopOffsets = [];\n\t\tthis.classNames = [];\n\t\tthis.count = 0;\n\t}\n\n\tpublic consumeLowerThan(maxStopOffset: number, nextStartOffset: number, result: DecorationSegment[]): number {\n\n\t\twhile (this.count > 0 && this.stopOffsets[0] < maxStopOffset) {\n\t\t\tvar i = 0;\n\n\t\t\t// Take all equal stopping offsets\n\t\t\twhile (i + 1 < this.count && this.stopOffsets[i] === this.stopOffsets[i + 1]) {\n\t\t\t\ti++;\n\t\t\t}\n\n\t\t\t// Basically we are consuming the first i + 1 elements of the stack\n\t\t\tresult.push(new DecorationSegment(nextStartOffset, this.stopOffsets[i], this.classNames.join(' ')));\n\t\t\tnextStartOffset = this.stopOffsets[i] + 1;\n\n\t\t\t// Consume them\n\t\t\tthis.stopOffsets.splice(0, i + 1);\n\t\t\tthis.classNames.splice(0, i + 1);\n\t\t\tthis.count -= (i + 1);\n\t\t}\n\n\t\tif (this.count > 0 && nextStartOffset < maxStopOffset) {\n\t\t\tresult.push(new DecorationSegment(nextStartOffset, maxStopOffset - 1, this.classNames.join(' ')));\n\t\t\tnextStartOffset = maxStopOffset;\n\t\t}\n\n\t\treturn nextStartOffset;\n\t}\n\n\tpublic insert(stopOffset: number, className: string): void {\n\t\tif (this.count === 0 || this.stopOffsets[this.count - 1] <= stopOffset) {\n\t\t\t// Insert at the end\n\t\t\tthis.stopOffsets.push(stopOffset);\n\t\t\tthis.classNames.push(className);\n\t\t} else {\n\t\t\t// Find the insertion position for `stopOffset`\n\t\t\tfor (var i = 0; i < this.count; i++) {\n\t\t\t\tif (this.stopOffsets[i] >= stopOffset) {\n\t\t\t\t\tthis.stopOffsets.splice(i, 0, stopOffset);\n\t\t\t\t\tthis.classNames.splice(i, 0, className);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.count++;\n\t\treturn;\n\t}\n}\n\nexport class LineDecorationsNormalizer {\n\t/**\n\t * Normalize line decorations. Overlapping decorations will generate multiple segments\n\t */\n\tpublic static normalize(lineDecorations: LineDecoration[]): DecorationSegment[] {\n\t\tif (lineDecorations.length === 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\tlet result: DecorationSegment[] = [];\n\n\t\tlet stack = new Stack();\n\t\tlet nextStartOffset = 0;\n\n\t\tfor (let i = 0, len = lineDecorations.length; i < len; i++) {\n\t\t\tlet d = lineDecorations[i];\n\n\t\t\tlet currentStartOffset = d.startColumn - 1;\n\t\t\tlet currentEndOffset = d.endColumn - 2;\n\n\t\t\tnextStartOffset = stack.consumeLowerThan(currentStartOffset, nextStartOffset, result);\n\n\t\t\tif (stack.count === 0) {\n\t\t\t\tnextStartOffset = currentStartOffset;\n\t\t\t}\n\t\t\tstack.insert(currentEndOffset, d.className);\n\t\t}\n\n\t\tstack.consumeLowerThan(Constants.MAX_SAFE_SMALL_INTEGER, nextStartOffset, result);\n\n\t\treturn result;\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { ViewLineToken } from 'vs/editor/common/core/viewLineToken';\nimport { CharCode } from 'vs/base/common/charCode';\nimport { LineDecoration, LineDecorationsNormalizer } from 'vs/editor/common/viewLayout/lineDecorations';\nimport * as strings from 'vs/base/common/strings';\n\nexport const enum RenderWhitespace {\n\tNone = 0,\n\tBoundary = 1,\n\tAll = 2\n}\n\nclass LinePart {\n\t_linePartBrand: void;\n\n\t/**\n\t * last char index of this token (not inclusive).\n\t */\n\tpublic readonly endIndex: number;\n\tpublic readonly type: string;\n\n\tconstructor(endIndex: number, type: string) {\n\t\tthis.endIndex = endIndex;\n\t\tthis.type = type;\n\t}\n}\n\nexport class RenderLineInput {\n\n\tpublic readonly useMonospaceOptimizations: boolean;\n\tpublic readonly lineContent: string;\n\tpublic readonly mightContainRTL: boolean;\n\tpublic readonly fauxIndentLength: number;\n\tpublic readonly lineTokens: ViewLineToken[];\n\tpublic readonly lineDecorations: LineDecoration[];\n\tpublic readonly tabSize: number;\n\tpublic readonly spaceWidth: number;\n\tpublic readonly stopRenderingLineAfter: number;\n\tpublic readonly renderWhitespace: RenderWhitespace;\n\tpublic readonly renderControlCharacters: boolean;\n\tpublic readonly fontLigatures: boolean;\n\n\tconstructor(\n\t\tuseMonospaceOptimizations: boolean,\n\t\tlineContent: string,\n\t\tmightContainRTL: boolean,\n\t\tfauxIndentLength: number,\n\t\tlineTokens: ViewLineToken[],\n\t\tlineDecorations: LineDecoration[],\n\t\ttabSize: number,\n\t\tspaceWidth: number,\n\t\tstopRenderingLineAfter: number,\n\t\trenderWhitespace: 'none' | 'boundary' | 'all',\n\t\trenderControlCharacters: boolean,\n\t\tfontLigatures: boolean\n\t) {\n\t\tthis.useMonospaceOptimizations = useMonospaceOptimizations;\n\t\tthis.lineContent = lineContent;\n\t\tthis.mightContainRTL = mightContainRTL;\n\t\tthis.fauxIndentLength = fauxIndentLength;\n\t\tthis.lineTokens = lineTokens;\n\t\tthis.lineDecorations = lineDecorations;\n\t\tthis.tabSize = tabSize;\n\t\tthis.spaceWidth = spaceWidth;\n\t\tthis.stopRenderingLineAfter = stopRenderingLineAfter;\n\t\tthis.renderWhitespace = (\n\t\t\trenderWhitespace === 'all'\n\t\t\t\t? RenderWhitespace.All\n\t\t\t\t: renderWhitespace === 'boundary'\n\t\t\t\t\t? RenderWhitespace.Boundary\n\t\t\t\t\t: RenderWhitespace.None\n\t\t);\n\t\tthis.renderControlCharacters = renderControlCharacters;\n\t\tthis.fontLigatures = fontLigatures;\n\t}\n\n\tpublic equals(other: RenderLineInput): boolean {\n\t\treturn (\n\t\t\tthis.useMonospaceOptimizations === other.useMonospaceOptimizations\n\t\t\t&& this.lineContent === other.lineContent\n\t\t\t&& this.mightContainRTL === other.mightContainRTL\n\t\t\t&& this.fauxIndentLength === other.fauxIndentLength\n\t\t\t&& this.tabSize === other.tabSize\n\t\t\t&& this.spaceWidth === other.spaceWidth\n\t\t\t&& this.stopRenderingLineAfter === other.stopRenderingLineAfter\n\t\t\t&& this.renderWhitespace === other.renderWhitespace\n\t\t\t&& this.renderControlCharacters === other.renderControlCharacters\n\t\t\t&& this.fontLigatures === other.fontLigatures\n\t\t\t&& LineDecoration.equalsArr(this.lineDecorations, other.lineDecorations)\n\t\t\t&& ViewLineToken.equalsArr(this.lineTokens, other.lineTokens)\n\t\t);\n\t}\n}\n\nexport const enum CharacterMappingConstants {\n\tPART_INDEX_MASK = 0b11111111111111110000000000000000,\n\tCHAR_INDEX_MASK = 0b00000000000000001111111111111111,\n\n\tCHAR_INDEX_OFFSET = 0,\n\tPART_INDEX_OFFSET = 16\n}\n\n/**\n * Provides a both direction mapping between a line's character and its rendered position.\n */\nexport class CharacterMapping {\n\n\tpublic static getPartIndex(partData: number): number {\n\t\treturn (partData & CharacterMappingConstants.PART_INDEX_MASK) >>> CharacterMappingConstants.PART_INDEX_OFFSET;\n\t}\n\n\tpublic static getCharIndex(partData: number): number {\n\t\treturn (partData & CharacterMappingConstants.CHAR_INDEX_MASK) >>> CharacterMappingConstants.CHAR_INDEX_OFFSET;\n\t}\n\n\tprivate readonly _data: Uint32Array;\n\tpublic readonly length: number;\n\n\tprivate readonly _partLengths: Uint16Array;\n\n\tconstructor(length: number, partCount: number) {\n\t\tthis.length = length;\n\t\tthis._data = new Uint32Array(this.length);\n\t\tthis._partLengths = new Uint16Array(partCount);\n\t}\n\n\tpublic setPartData(charOffset: number, partIndex: number, charIndex: number): void {\n\t\tlet partData = (\n\t\t\t(partIndex << CharacterMappingConstants.PART_INDEX_OFFSET)\n\t\t\t| (charIndex << CharacterMappingConstants.CHAR_INDEX_OFFSET)\n\t\t) >>> 0;\n\t\tthis._data[charOffset] = partData;\n\t}\n\n\tpublic setPartLength(partIndex: number, length: number): void {\n\t\tthis._partLengths[partIndex] = length;\n\t}\n\n\tpublic getPartLengths(): Uint16Array {\n\t\treturn this._partLengths;\n\t}\n\n\tpublic charOffsetToPartData(charOffset: number): number {\n\t\tif (this.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (charOffset < 0) {\n\t\t\treturn this._data[0];\n\t\t}\n\t\tif (charOffset >= this.length) {\n\t\t\treturn this._data[this.length - 1];\n\t\t}\n\t\treturn this._data[charOffset];\n\t}\n\n\tpublic partDataToCharOffset(partIndex: number, partLength: number, charIndex: number): number {\n\t\tif (this.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tlet searchEntry = (\n\t\t\t(partIndex << CharacterMappingConstants.PART_INDEX_OFFSET)\n\t\t\t| (charIndex << CharacterMappingConstants.CHAR_INDEX_OFFSET)\n\t\t) >>> 0;\n\n\t\tlet min = 0;\n\t\tlet max = this.length - 1;\n\t\twhile (min + 1 < max) {\n\t\t\tlet mid = ((min + max) >>> 1);\n\t\t\tlet midEntry = this._data[mid];\n\t\t\tif (midEntry === searchEntry) {\n\t\t\t\treturn mid;\n\t\t\t} else if (midEntry > searchEntry) {\n\t\t\t\tmax = mid;\n\t\t\t} else {\n\t\t\t\tmin = mid;\n\t\t\t}\n\t\t}\n\n\t\tif (min === max) {\n\t\t\treturn min;\n\t\t}\n\n\t\tlet minEntry = this._data[min];\n\t\tlet maxEntry = this._data[max];\n\n\t\tif (minEntry === searchEntry) {\n\t\t\treturn min;\n\t\t}\n\t\tif (maxEntry === searchEntry) {\n\t\t\treturn max;\n\t\t}\n\n\t\tlet minPartIndex = CharacterMapping.getPartIndex(minEntry);\n\t\tlet minCharIndex = CharacterMapping.getCharIndex(minEntry);\n\n\t\tlet maxPartIndex = CharacterMapping.getPartIndex(maxEntry);\n\t\tlet maxCharIndex: number;\n\n\t\tif (minPartIndex !== maxPartIndex) {\n\t\t\t// sitting between parts\n\t\t\tmaxCharIndex = partLength;\n\t\t} else {\n\t\t\tmaxCharIndex = CharacterMapping.getCharIndex(maxEntry);\n\t\t}\n\n\t\tlet minEntryDistance = charIndex - minCharIndex;\n\t\tlet maxEntryDistance = maxCharIndex - charIndex;\n\n\t\tif (minEntryDistance <= maxEntryDistance) {\n\t\t\treturn min;\n\t\t}\n\t\treturn max;\n\t}\n}\n\nexport class RenderLineOutput {\n\t_renderLineOutputBrand: void;\n\n\treadonly characterMapping: CharacterMapping;\n\treadonly html: string;\n\treadonly containsRTL: boolean;\n\treadonly containsForeignElements: boolean;\n\n\tconstructor(characterMapping: CharacterMapping, html: string, containsRTL: boolean, containsForeignElements: boolean) {\n\t\tthis.characterMapping = characterMapping;\n\t\tthis.html = html;\n\t\tthis.containsRTL = containsRTL;\n\t\tthis.containsForeignElements = containsForeignElements;\n\t}\n}\n\nexport function renderViewLine(input: RenderLineInput): RenderLineOutput {\n\tif (input.lineContent.length === 0) {\n\t\treturn new RenderLineOutput(\n\t\t\tnew CharacterMapping(0, 0),\n\t\t\t// This is basically for IE's hit test to work\n\t\t\t' ',\n\t\t\tfalse,\n\t\t\tfalse\n\t\t);\n\t}\n\n\treturn _renderLine(resolveRenderLineInput(input));\n}\n\nclass ResolvedRenderLineInput {\n\tconstructor(\n\t\tpublic readonly fontIsMonospace: boolean,\n\t\tpublic readonly lineContent: string,\n\t\tpublic readonly len: number,\n\t\tpublic readonly isOverflowing: boolean,\n\t\tpublic readonly parts: LinePart[],\n\t\tpublic readonly containsForeignElements: boolean,\n\t\tpublic readonly tabSize: number,\n\t\tpublic readonly containsRTL: boolean,\n\t\tpublic readonly spaceWidth: number,\n\t\tpublic readonly renderWhitespace: RenderWhitespace,\n\t\tpublic readonly renderControlCharacters: boolean,\n\t) {\n\t\t//\n\t}\n}\n\nfunction resolveRenderLineInput(input: RenderLineInput): ResolvedRenderLineInput {\n\tconst useMonospaceOptimizations = input.useMonospaceOptimizations;\n\tconst lineContent = input.lineContent;\n\n\tlet isOverflowing: boolean;\n\tlet len: number;\n\n\tif (input.stopRenderingLineAfter !== -1 && input.stopRenderingLineAfter < lineContent.length) {\n\t\tisOverflowing = true;\n\t\tlen = input.stopRenderingLineAfter;\n\t} else {\n\t\tisOverflowing = false;\n\t\tlen = lineContent.length;\n\t}\n\n\tlet tokens = transformAndRemoveOverflowing(input.lineTokens, input.fauxIndentLength, len);\n\tif (input.renderWhitespace === RenderWhitespace.All || input.renderWhitespace === RenderWhitespace.Boundary) {\n\t\ttokens = _applyRenderWhitespace(lineContent, len, tokens, input.fauxIndentLength, input.tabSize, useMonospaceOptimizations, input.renderWhitespace === RenderWhitespace.Boundary);\n\t}\n\tlet containsForeignElements = false;\n\tif (input.lineDecorations.length > 0) {\n\t\tfor (let i = 0, len = input.lineDecorations.length; i < len; i++) {\n\t\t\tconst lineDecoration = input.lineDecorations[i];\n\t\t\tif (lineDecoration.insertsBeforeOrAfter) {\n\t\t\t\tcontainsForeignElements = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\ttokens = _applyInlineDecorations(lineContent, len, tokens, input.lineDecorations);\n\t}\n\tlet containsRTL = false;\n\tif (input.mightContainRTL) {\n\t\tcontainsRTL = strings.containsRTL(lineContent);\n\t}\n\tif (!containsRTL && !input.fontLigatures) {\n\t\ttokens = splitLargeTokens(lineContent, tokens);\n\t}\n\n\treturn new ResolvedRenderLineInput(\n\t\tuseMonospaceOptimizations,\n\t\tlineContent,\n\t\tlen,\n\t\tisOverflowing,\n\t\ttokens,\n\t\tcontainsForeignElements,\n\t\tinput.tabSize,\n\t\tcontainsRTL,\n\t\tinput.spaceWidth,\n\t\tinput.renderWhitespace,\n\t\tinput.renderControlCharacters\n\t);\n}\n\n/**\n * In the rendering phase, characters are always looped until token.endIndex.\n * Ensure that all tokens end before `len` and the last one ends precisely at `len`.\n */\nfunction transformAndRemoveOverflowing(tokens: ViewLineToken[], fauxIndentLength: number, len: number): LinePart[] {\n\tlet result: LinePart[] = [], resultLen = 0;\n\n\t// The faux indent part of the line should have no token type\n\tif (fauxIndentLength > 0) {\n\t\tresult[resultLen++] = new LinePart(fauxIndentLength, '');\n\t}\n\n\tfor (let tokenIndex = 0, tokensLen = tokens.length; tokenIndex < tokensLen; tokenIndex++) {\n\t\tconst token = tokens[tokenIndex];\n\t\tconst endIndex = token.endIndex;\n\t\tif (endIndex <= fauxIndentLength) {\n\t\t\t// The faux indent part of the line should have no token type\n\t\t\tcontinue;\n\t\t}\n\t\tconst type = token.getType();\n\t\tif (endIndex >= len) {\n\t\t\tresult[resultLen++] = new LinePart(len, type);\n\t\t\tbreak;\n\t\t}\n\t\tresult[resultLen++] = new LinePart(endIndex, type);\n\t}\n\n\treturn result;\n}\n\n/**\n * written as a const enum to get value inlining.\n */\nconst enum Constants {\n\tLongToken = 50\n}\n\n/**\n * See https://github.com/Microsoft/vscode/issues/6885.\n * It appears that having very large spans causes very slow reading of character positions.\n * So here we try to avoid that.\n */\nfunction splitLargeTokens(lineContent: string, tokens: LinePart[]): LinePart[] {\n\tlet lastTokenEndIndex = 0;\n\tlet result: LinePart[] = [], resultLen = 0;\n\tfor (let i = 0, len = tokens.length; i < len; i++) {\n\t\tconst token = tokens[i];\n\t\tconst tokenEndIndex = token.endIndex;\n\t\tlet diff = (tokenEndIndex - lastTokenEndIndex);\n\t\tif (diff > Constants.LongToken) {\n\t\t\tconst tokenType = token.type;\n\t\t\tconst piecesCount = Math.ceil(diff / Constants.LongToken);\n\t\t\tfor (let j = 1; j < piecesCount; j++) {\n\t\t\t\tlet pieceEndIndex = lastTokenEndIndex + (j * Constants.LongToken);\n\t\t\t\tlet lastCharInPiece = lineContent.charCodeAt(pieceEndIndex - 1);\n\t\t\t\tif (strings.isHighSurrogate(lastCharInPiece)) {\n\t\t\t\t\t// Don't cut in the middle of a surrogate pair\n\t\t\t\t\tpieceEndIndex--;\n\t\t\t\t}\n\t\t\t\tresult[resultLen++] = new LinePart(pieceEndIndex, tokenType);\n\t\t\t}\n\t\t\tresult[resultLen++] = new LinePart(tokenEndIndex, tokenType);\n\t\t} else {\n\t\t\tresult[resultLen++] = token;\n\t\t}\n\t\tlastTokenEndIndex = tokenEndIndex;\n\t}\n\n\treturn result;\n}\n\n/**\n * Whitespace is rendered by \"replacing\" tokens with a special-purpose `vs-whitespace` 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(lineContent: string, len: number, tokens: LinePart[], fauxIndentLength: number, tabSize: number, useMonospaceOptimizations: boolean, onlyBoundary: boolean): LinePart[] {\n\n\tlet result: LinePart[] = [], resultLen = 0;\n\tlet tokenIndex = 0;\n\tlet tokenType = tokens[tokenIndex].type;\n\tlet tokenEndIndex = tokens[tokenIndex].endIndex;\n\n\tlet firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);\n\tlet lastNonWhitespaceIndex: number;\n\tif (firstNonWhitespaceIndex === -1) {\n\t\t// The entire line is whitespace\n\t\tfirstNonWhitespaceIndex = len;\n\t\tlastNonWhitespaceIndex = len;\n\t} else {\n\t\tlastNonWhitespaceIndex = strings.lastNonWhitespaceIndex(lineContent);\n\t}\n\n\tlet tmpIndent = 0;\n\tfor (let charIndex = 0; charIndex < fauxIndentLength; charIndex++) {\n\t\tconst chCode = lineContent.charCodeAt(charIndex);\n\t\tif (chCode === CharCode.Tab) {\n\t\t\ttmpIndent = tabSize;\n\t\t} else {\n\t\t\ttmpIndent++;\n\t\t}\n\t}\n\ttmpIndent = tmpIndent % tabSize;\n\n\tlet wasInWhitespace = false;\n\tfor (let charIndex = fauxIndentLength; charIndex < len; charIndex++) {\n\t\tconst chCode = lineContent.charCodeAt(charIndex);\n\n\t\tlet isInWhitespace: boolean;\n\t\tif (charIndex < firstNonWhitespaceIndex || charIndex > lastNonWhitespaceIndex) {\n\t\t\t// in leading or trailing whitespace\n\t\t\tisInWhitespace = true;\n\t\t} else if (chCode === CharCode.Tab) {\n\t\t\t// a tab character is rendered both in all and boundary cases\n\t\t\tisInWhitespace = true;\n\t\t} else if (chCode === CharCode.Space) {\n\t\t\t// hit a space character\n\t\t\tif (onlyBoundary) {\n\t\t\t\t// rendering only boundary whitespace\n\t\t\t\tif (wasInWhitespace) {\n\t\t\t\t\tisInWhitespace = true;\n\t\t\t\t} else {\n\t\t\t\t\tconst nextChCode = (charIndex + 1 < len ? lineContent.charCodeAt(charIndex + 1) : CharCode.Null);\n\t\t\t\t\tisInWhitespace = (nextChCode === CharCode.Space || nextChCode === CharCode.Tab);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisInWhitespace = true;\n\t\t\t}\n\t\t} else {\n\t\t\tisInWhitespace = false;\n\t\t}\n\n\t\tif (wasInWhitespace) {\n\t\t\t// was in whitespace token\n\t\t\tif (!isInWhitespace || (!useMonospaceOptimizations && tmpIndent >= tabSize)) {\n\t\t\t\t// leaving whitespace token or entering a new indent\n\t\t\t\tresult[resultLen++] = new LinePart(charIndex, 'vs-whitespace');\n\t\t\t\ttmpIndent = tmpIndent % tabSize;\n\t\t\t}\n\t\t} else {\n\t\t\t// was in regular token\n\t\t\tif (charIndex === tokenEndIndex || (isInWhitespace && charIndex > fauxIndentLength)) {\n\t\t\t\tresult[resultLen++] = new LinePart(charIndex, tokenType);\n\t\t\t\ttmpIndent = tmpIndent % tabSize;\n\t\t\t}\n\t\t}\n\n\t\tif (chCode === CharCode.Tab) {\n\t\t\ttmpIndent = tabSize;\n\t\t} else {\n\t\t\ttmpIndent++;\n\t\t}\n\n\t\twasInWhitespace = isInWhitespace;\n\n\t\tif (charIndex === tokenEndIndex) {\n\t\t\ttokenIndex++;\n\t\t\ttokenType = tokens[tokenIndex].type;\n\t\t\ttokenEndIndex = tokens[tokenIndex].endIndex;\n\t\t}\n\t}\n\n\tif (wasInWhitespace) {\n\t\t// was in whitespace token\n\t\tresult[resultLen++] = new LinePart(len, 'vs-whitespace');\n\t} else {\n\t\t// was in regular token\n\t\tresult[resultLen++] = new LinePart(len, tokenType);\n\t}\n\n\treturn result;\n}\n\n/**\n * Inline decorations are \"merged\" on top of tokens.\n * Special care must be taken when multiple inline decorations are at play and they overlap.\n */\nfunction _applyInlineDecorations(lineContent: string, len: number, tokens: LinePart[], _lineDecorations: LineDecoration[]): LinePart[] {\n\t_lineDecorations.sort(LineDecoration.compare);\n\tconst lineDecorations = LineDecorationsNormalizer.normalize(_lineDecorations);\n\tconst lineDecorationsLen = lineDecorations.length;\n\n\tlet lineDecorationIndex = 0;\n\tlet result: LinePart[] = [], resultLen = 0, lastResultEndIndex = 0;\n\tfor (let tokenIndex = 0, len = tokens.length; tokenIndex < len; tokenIndex++) {\n\t\tconst token = tokens[tokenIndex];\n\t\tconst tokenEndIndex = token.endIndex;\n\t\tconst tokenType = token.type;\n\n\t\twhile (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset < tokenEndIndex) {\n\t\t\tconst lineDecoration = lineDecorations[lineDecorationIndex];\n\n\t\t\tif (lineDecoration.startOffset > lastResultEndIndex) {\n\t\t\t\tlastResultEndIndex = lineDecoration.startOffset;\n\t\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, tokenType);\n\t\t\t}\n\n\t\t\tif (lineDecoration.endOffset + 1 <= tokenEndIndex) {\n\t\t\t\t// This line decoration ends before this token ends\n\t\t\t\tlastResultEndIndex = lineDecoration.endOffset + 1;\n\t\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, tokenType + ' ' + lineDecoration.className);\n\t\t\t\tlineDecorationIndex++;\n\t\t\t} else {\n\t\t\t\t// This line decoration continues on to the next token\n\t\t\t\tlastResultEndIndex = tokenEndIndex;\n\t\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, tokenType + ' ' + lineDecoration.className);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (tokenEndIndex > lastResultEndIndex) {\n\t\t\tlastResultEndIndex = tokenEndIndex;\n\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, tokenType);\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * This function is on purpose not split up into multiple functions to allow runtime type inference (i.e. performance reasons).\n * Notice how all the needed data is fully resolved and passed in (i.e. no other calls).\n */\nfunction _renderLine(input: ResolvedRenderLineInput): RenderLineOutput {\n\tconst fontIsMonospace = input.fontIsMonospace;\n\tconst containsForeignElements = input.containsForeignElements;\n\tconst lineContent = input.lineContent;\n\tconst len = input.len;\n\tconst isOverflowing = input.isOverflowing;\n\tconst parts = input.parts;\n\tconst tabSize = input.tabSize;\n\tconst containsRTL = input.containsRTL;\n\tconst spaceWidth = input.spaceWidth;\n\tconst renderWhitespace = input.renderWhitespace;\n\tconst renderControlCharacters = input.renderControlCharacters;\n\n\tconst characterMapping = new CharacterMapping(len + 1, parts.length);\n\n\tlet charIndex = 0;\n\tlet tabsCharDelta = 0;\n\tlet charOffsetInPart = 0;\n\n\tlet out = '';\n\tfor (let partIndex = 0, tokensLen = parts.length; partIndex < tokensLen; partIndex++) {\n\t\tconst part = parts[partIndex];\n\t\tconst partEndIndex = part.endIndex;\n\t\tconst partType = part.type;\n\t\tconst partRendersWhitespace = (renderWhitespace !== RenderWhitespace.None && (partType.indexOf('vs-whitespace') >= 0));\n\t\tcharOffsetInPart = 0;\n\n\t\tif (partRendersWhitespace) {\n\n\t\t\tlet partContentCnt = 0;\n\t\t\tlet partContent = '';\n\t\t\tfor (; charIndex < partEndIndex; charIndex++) {\n\t\t\t\tcharacterMapping.setPartData(charIndex, partIndex, charOffsetInPart);\n\t\t\t\tconst charCode = lineContent.charCodeAt(charIndex);\n\n\t\t\t\tif (charCode === CharCode.Tab) {\n\t\t\t\t\tlet insertSpacesCount = tabSize - (charIndex + tabsCharDelta) % tabSize;\n\t\t\t\t\ttabsCharDelta += insertSpacesCount - 1;\n\t\t\t\t\tcharOffsetInPart += insertSpacesCount - 1;\n\t\t\t\t\tif (insertSpacesCount > 0) {\n\t\t\t\t\t\tpartContent += '→';\n\t\t\t\t\t\tpartContentCnt++;\n\t\t\t\t\t\tinsertSpacesCount--;\n\t\t\t\t\t}\n\t\t\t\t\twhile (insertSpacesCount > 0) {\n\t\t\t\t\t\tpartContent += ' ';\n\t\t\t\t\t\tpartContentCnt++;\n\t\t\t\t\t\tinsertSpacesCount--;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// must be CharCode.Space\n\t\t\t\t\tpartContent += '·';\n\t\t\t\t\tpartContentCnt++;\n\t\t\t\t}\n\n\t\t\t\tcharOffsetInPart++;\n\t\t\t}\n\n\t\t\tcharacterMapping.setPartLength(partIndex, partContentCnt);\n\t\t\tif (fontIsMonospace) {\n\t\t\t\tout += `${partContent}`;\n\t\t\t} else {\n\t\t\t\tout += `${partContent}`;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tlet partContentCnt = 0;\n\t\t\tlet partContent = '';\n\n\t\t\tfor (; charIndex < partEndIndex; charIndex++) {\n\t\t\t\tcharacterMapping.setPartData(charIndex, partIndex, charOffsetInPart);\n\t\t\t\tconst charCode = lineContent.charCodeAt(charIndex);\n\n\t\t\t\tswitch (charCode) {\n\t\t\t\t\tcase CharCode.Tab:\n\t\t\t\t\t\tlet insertSpacesCount = tabSize - (charIndex + tabsCharDelta) % tabSize;\n\t\t\t\t\t\ttabsCharDelta += insertSpacesCount - 1;\n\t\t\t\t\t\tcharOffsetInPart += insertSpacesCount - 1;\n\t\t\t\t\t\twhile (insertSpacesCount > 0) {\n\t\t\t\t\t\t\tpartContent += ' ';\n\t\t\t\t\t\t\tpartContentCnt++;\n\t\t\t\t\t\t\tinsertSpacesCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.Space:\n\t\t\t\t\t\tpartContent += ' ';\n\t\t\t\t\t\tpartContentCnt++;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.LessThan:\n\t\t\t\t\t\tpartContent += '<';\n\t\t\t\t\t\tpartContentCnt++;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.GreaterThan:\n\t\t\t\t\t\tpartContent += '>';\n\t\t\t\t\t\tpartContentCnt++;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.Ampersand:\n\t\t\t\t\t\tpartContent += '&';\n\t\t\t\t\t\tpartContentCnt++;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.Null:\n\t\t\t\t\t\tpartContent += '�';\n\t\t\t\t\t\tpartContentCnt++;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.UTF8_BOM:\n\t\t\t\t\tcase CharCode.LINE_SEPARATOR_2028:\n\t\t\t\t\t\tpartContent += '\\ufffd';\n\t\t\t\t\t\tpartContentCnt++;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.CarriageReturn:\n\t\t\t\t\t\t// zero width space, because carriage return would introduce a line break\n\t\t\t\t\t\tpartContent += '​';\n\t\t\t\t\t\tpartContentCnt++;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (renderControlCharacters && charCode < 32) {\n\t\t\t\t\t\t\tpartContent += String.fromCharCode(9216 + charCode);\n\t\t\t\t\t\t\tpartContentCnt++;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpartContent += String.fromCharCode(charCode);\n\t\t\t\t\t\t\tpartContentCnt++;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcharOffsetInPart++;\n\t\t\t}\n\n\t\t\tcharacterMapping.setPartLength(partIndex, partContentCnt);\n\t\t\tif (containsRTL) {\n\t\t\t\tout += `${partContent}`;\n\t\t\t} else {\n\t\t\t\tout += `${partContent}`;\n\t\t\t}\n\n\t\t}\n\t}\n\n\t// When getting client rects for the last character, we will position the\n\t// text range at the end of the span, insteaf of at the beginning of next span\n\tcharacterMapping.setPartData(len, parts.length - 1, charOffsetInPart);\n\n\tif (isOverflowing) {\n\t\tout += ``;\n\t}\n\n\tout += '';\n\n\treturn new RenderLineOutput(characterMapping, out, 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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { ViewLineRenderingData, IViewModel, ViewModelDecoration, IViewWhitespaceViewportData } from 'vs/editor/common/viewModel/viewModel';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection } from 'vs/editor/common/core/selection';\n\nexport interface IPartialViewLinesViewportData {\n\t/**\n\t * Value to be substracted from `scrollTop` (in order to vertical offset numbers < 1MM)\n\t */\n\treadonly bigNumbersDelta: number;\n\t/**\n\t * The first (partially) visible line number.\n\t */\n\treadonly startLineNumber: number;\n\t/**\n\t * The last (partially) visible line number.\n\t */\n\treadonly endLineNumber: number;\n\t/**\n\t * relativeVerticalOffset[i] is the `top` position for line at `i` + `startLineNumber`.\n\t */\n\treadonly relativeVerticalOffset: number[];\n\t/**\n\t * The centered line in the viewport.\n\t */\n\treadonly centeredLineNumber: number;\n\t/**\n\t * The first completely visible line number.\n\t */\n\treadonly completelyVisibleStartLineNumber: number;\n\t/**\n\t * The last completely visible line number.\n\t */\n\treadonly completelyVisibleEndLineNumber: number;\n}\n\n/**\n * Contains all data needed to render at a specific viewport.\n */\nexport class ViewportData {\n\n\tpublic readonly selections: Selection[];\n\n\t/**\n\t * The line number at which to start rendering (inclusive).\n\t */\n\tpublic readonly startLineNumber: number;\n\n\t/**\n\t * The line number at which to end rendering (inclusive).\n\t */\n\tpublic readonly endLineNumber: number;\n\n\t/**\n\t * relativeVerticalOffset[i] is the `top` position for line at `i` + `startLineNumber`.\n\t */\n\tpublic readonly relativeVerticalOffset: number[];\n\n\t/**\n\t * The viewport as a range (startLineNumber,1) -> (endLineNumber,maxColumn(endLineNumber)).\n\t */\n\tpublic readonly visibleRange: Range;\n\n\t/**\n\t * Value to be substracted from `scrollTop` (in order to vertical offset numbers < 1MM)\n\t */\n\tpublic readonly bigNumbersDelta: number;\n\n\t/**\n\t * Positioning information about gaps whitespace.\n\t */\n\tpublic readonly whitespaceViewportData: IViewWhitespaceViewportData[];\n\n\tprivate readonly _model: IViewModel;\n\n\tconstructor(\n\t\tselections: Selection[],\n\t\tpartialData: IPartialViewLinesViewportData,\n\t\twhitespaceViewportData: IViewWhitespaceViewportData[],\n\t\tmodel: IViewModel\n\t) {\n\t\tthis.selections = selections;\n\t\tthis.startLineNumber = partialData.startLineNumber | 0;\n\t\tthis.endLineNumber = partialData.endLineNumber | 0;\n\t\tthis.relativeVerticalOffset = partialData.relativeVerticalOffset;\n\t\tthis.bigNumbersDelta = partialData.bigNumbersDelta | 0;\n\t\tthis.whitespaceViewportData = whitespaceViewportData;\n\n\t\tthis._model = model;\n\n\t\tthis.visibleRange = new Range(\n\t\t\tpartialData.startLineNumber,\n\t\t\tthis._model.getLineMinColumn(partialData.startLineNumber),\n\t\t\tpartialData.endLineNumber,\n\t\t\tthis._model.getLineMaxColumn(partialData.endLineNumber)\n\t\t);\n\t}\n\n\tpublic getViewLineRenderingData(lineNumber: number): ViewLineRenderingData {\n\t\treturn this._model.getViewLineRenderingData(this.visibleRange, lineNumber);\n\t}\n\n\tpublic getDecorationsInViewport(): ViewModelDecoration[] {\n\t\treturn this._model.getDecorationsInViewport(this.visibleRange);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nexport interface IEditorWhitespace {\n\treadonly id: number;\n\treadonly afterLineNumber: number;\n\treadonly heightInLines: number;\n}\n\n/**\n * Represent whitespaces in between lines and provide fast CRUD management methods.\n * The whitespaces are sorted ascending by `afterLineNumber`.\n */\nexport class WhitespaceComputer {\n\n\t/**\n\t * heights[i] is the height in pixels for whitespace at index i\n\t */\n\tprivate _heights: number[];\n\n\t/**\n\t * afterLineNumbers[i] is the line number whitespace at index i is after\n\t */\n\tprivate _afterLineNumbers: number[];\n\n\t/**\n\t * ordinals[i] is the orinal of the whitespace at index i\n\t */\n\tprivate _ordinals: number[];\n\n\t/**\n\t * prefixSum[i] = SUM(heights[j]), 1 <= j <= i\n\t */\n\tprivate _prefixSum: number[];\n\n\t/**\n\t * prefixSum[i], 1 <= i <= prefixSumValidIndex can be trusted\n\t */\n\tprivate _prefixSumValidIndex: number;\n\n\t/**\n\t * ids[i] is the whitespace id of whitespace at index i\n\t */\n\tprivate _ids: number[];\n\n\t/**\n\t * index at which a whitespace is positioned (inside heights, afterLineNumbers, prefixSum members)\n\t */\n\tprivate _whitespaceId2Index: {\n\t\t[id: string]: number;\n\t};\n\n\t/**\n\t * last whitespace id issued\n\t */\n\tprivate _lastWhitespaceId: number;\n\n\tconstructor() {\n\t\tthis._heights = [];\n\t\tthis._ids = [];\n\t\tthis._afterLineNumbers = [];\n\t\tthis._ordinals = [];\n\t\tthis._prefixSum = [];\n\t\tthis._prefixSumValidIndex = -1;\n\t\tthis._whitespaceId2Index = {};\n\t\tthis._lastWhitespaceId = 0;\n\t}\n\n\t/**\n\t * Find the insertion index for a new value inside a sorted array of values.\n\t * If the value is already present in the sorted array, the insertion index will be after the already existing value.\n\t */\n\tpublic static findInsertionIndex(sortedArray: number[], value: number, ordinals: number[], valueOrdinal: number): number {\n\t\tlet low = 0;\n\t\tlet high = sortedArray.length;\n\n\t\twhile (low < high) {\n\t\t\tlet mid = ((low + high) >>> 1);\n\n\t\t\tif (value === sortedArray[mid]) {\n\t\t\t\tif (valueOrdinal < ordinals[mid]) {\n\t\t\t\t\thigh = mid;\n\t\t\t\t} else {\n\t\t\t\t\tlow = mid + 1;\n\t\t\t\t}\n\t\t\t} else if (value < sortedArray[mid]) {\n\t\t\t\thigh = mid;\n\t\t\t} else {\n\t\t\t\tlow = mid + 1;\n\t\t\t}\n\t\t}\n\n\t\treturn low;\n\t}\n\n\t/**\n\t * Insert a new whitespace of a certain height after a line number.\n\t * The whitespace has a \"sticky\" characteristic.\n\t * Irrespective of edits above or below `afterLineNumber`, the whitespace will follow the initial line.\n\t *\n\t * @param afterLineNumber The conceptual position of this whitespace. The whitespace will follow this line as best as possible even when deleting/inserting lines above/below.\n\t * @param heightInPx The height of the whitespace, in pixels.\n\t * @return An id that can be used later to mutate or delete the whitespace\n\t */\n\tpublic insertWhitespace(afterLineNumber: number, ordinal: number, heightInPx: number): number {\n\t\tafterLineNumber = afterLineNumber | 0;\n\t\tordinal = ordinal | 0;\n\t\theightInPx = heightInPx | 0;\n\n\t\tlet id = (++this._lastWhitespaceId);\n\t\tlet insertionIndex = WhitespaceComputer.findInsertionIndex(this._afterLineNumbers, afterLineNumber, this._ordinals, ordinal);\n\t\tthis._insertWhitespaceAtIndex(id, insertionIndex, afterLineNumber, ordinal, heightInPx);\n\t\treturn id;\n\t}\n\n\tprivate _insertWhitespaceAtIndex(id: number, insertIndex: number, afterLineNumber: number, ordinal: number, heightInPx: number): void {\n\t\tid = id | 0;\n\t\tinsertIndex = insertIndex | 0;\n\t\tafterLineNumber = afterLineNumber | 0;\n\t\tordinal = ordinal | 0;\n\t\theightInPx = heightInPx | 0;\n\n\t\tthis._heights.splice(insertIndex, 0, heightInPx);\n\t\tthis._ids.splice(insertIndex, 0, id);\n\t\tthis._afterLineNumbers.splice(insertIndex, 0, afterLineNumber);\n\t\tthis._ordinals.splice(insertIndex, 0, ordinal);\n\t\tthis._prefixSum.splice(insertIndex, 0, 0);\n\n\t\tlet keys = Object.keys(this._whitespaceId2Index);\n\t\tfor (let i = 0, len = keys.length; i < len; i++) {\n\t\t\tlet sid = keys[i];\n\t\t\tlet oldIndex = this._whitespaceId2Index[sid];\n\t\t\tif (oldIndex >= insertIndex) {\n\t\t\t\tthis._whitespaceId2Index[sid] = oldIndex + 1;\n\t\t\t}\n\t\t}\n\n\t\tthis._whitespaceId2Index[id.toString()] = insertIndex;\n\t\tthis._prefixSumValidIndex = Math.min(this._prefixSumValidIndex, insertIndex - 1);\n\t}\n\n\t/**\n\t * Change properties associated with a certain whitespace.\n\t */\n\tpublic changeWhitespace(id: number, newAfterLineNumber: number, newHeight: number): boolean {\n\t\tid = id | 0;\n\t\tnewAfterLineNumber = newAfterLineNumber | 0;\n\t\tnewHeight = newHeight | 0;\n\n\t\tlet hasChanges = false;\n\t\thasChanges = this.changeWhitespaceHeight(id, newHeight) || hasChanges;\n\t\thasChanges = this.changeWhitespaceAfterLineNumber(id, newAfterLineNumber) || hasChanges;\n\t\treturn hasChanges;\n\t}\n\n\t/**\n\t * Change the height of an existing whitespace\n\t *\n\t * @param id The whitespace to change\n\t * @param newHeightInPx The new height of the whitespace, in pixels\n\t * @return Returns true if the whitespace is found and if the new height is different than the old height\n\t */\n\tpublic changeWhitespaceHeight(id: number, newHeightInPx: number): boolean {\n\t\tid = id | 0;\n\t\tnewHeightInPx = newHeightInPx | 0;\n\n\t\tlet sid = id.toString();\n\t\tif (this._whitespaceId2Index.hasOwnProperty(sid)) {\n\t\t\tlet index = this._whitespaceId2Index[sid];\n\t\t\tif (this._heights[index] !== newHeightInPx) {\n\t\t\t\tthis._heights[index] = newHeightInPx;\n\t\t\t\tthis._prefixSumValidIndex = Math.min(this._prefixSumValidIndex, index - 1);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Change the line number after which an existing whitespace flows.\n\t *\n\t * @param id The whitespace to change\n\t * @param newAfterLineNumber The new line number the whitespace will follow\n\t * @return Returns true if the whitespace is found and if the new line number is different than the old line number\n\t */\n\tpublic changeWhitespaceAfterLineNumber(id: number, newAfterLineNumber: number): boolean {\n\t\tid = id | 0;\n\t\tnewAfterLineNumber = newAfterLineNumber | 0;\n\n\t\tlet sid = id.toString();\n\t\tif (this._whitespaceId2Index.hasOwnProperty(sid)) {\n\t\t\tlet index = this._whitespaceId2Index[sid];\n\t\t\tif (this._afterLineNumbers[index] !== newAfterLineNumber) {\n\t\t\t\t// `afterLineNumber` changed for this whitespace\n\n\t\t\t\t// Record old ordinal\n\t\t\t\tlet ordinal = this._ordinals[index];\n\n\t\t\t\t// Record old height\n\t\t\t\tlet heightInPx = this._heights[index];\n\n\t\t\t\t// Since changing `afterLineNumber` can trigger a reordering, we're gonna remove this whitespace\n\t\t\t\tthis.removeWhitespace(id);\n\n\t\t\t\t// And add it again\n\t\t\t\tlet insertionIndex = WhitespaceComputer.findInsertionIndex(this._afterLineNumbers, newAfterLineNumber, this._ordinals, ordinal);\n\t\t\t\tthis._insertWhitespaceAtIndex(id, insertionIndex, newAfterLineNumber, ordinal, heightInPx);\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Remove an existing whitespace.\n\t *\n\t * @param id The whitespace to remove\n\t * @return Returns true if the whitespace is found and it is removed.\n\t */\n\tpublic removeWhitespace(id: number): boolean {\n\t\tid = id | 0;\n\n\t\tlet sid = id.toString();\n\n\t\tif (this._whitespaceId2Index.hasOwnProperty(sid)) {\n\t\t\tlet index = this._whitespaceId2Index[sid];\n\t\t\tdelete this._whitespaceId2Index[sid];\n\t\t\tthis._removeWhitespaceAtIndex(index);\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate _removeWhitespaceAtIndex(removeIndex: number): void {\n\t\tremoveIndex = removeIndex | 0;\n\n\t\tthis._heights.splice(removeIndex, 1);\n\t\tthis._ids.splice(removeIndex, 1);\n\t\tthis._afterLineNumbers.splice(removeIndex, 1);\n\t\tthis._ordinals.splice(removeIndex, 1);\n\t\tthis._prefixSum.splice(removeIndex, 1);\n\t\tthis._prefixSumValidIndex = Math.min(this._prefixSumValidIndex, removeIndex - 1);\n\n\t\tlet keys = Object.keys(this._whitespaceId2Index);\n\t\tfor (let i = 0, len = keys.length; i < len; i++) {\n\t\t\tlet sid = keys[i];\n\t\t\tlet oldIndex = this._whitespaceId2Index[sid];\n\t\t\tif (oldIndex >= removeIndex) {\n\t\t\t\tthis._whitespaceId2Index[sid] = oldIndex - 1;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Notify the computer that lines have been deleted (a continuous zone of lines).\n\t * This gives it a chance to update `afterLineNumber` for whitespaces, giving the \"sticky\" characteristic.\n\t *\n\t * @param fromLineNumber The line number at which the deletion started, inclusive\n\t * @param toLineNumber The line number at which the deletion ended, inclusive\n\t */\n\tpublic onLinesDeleted(fromLineNumber: number, toLineNumber: number): void {\n\t\tfromLineNumber = fromLineNumber | 0;\n\t\ttoLineNumber = toLineNumber | 0;\n\n\t\tfor (let i = 0, len = this._afterLineNumbers.length; i < len; i++) {\n\t\t\tlet afterLineNumber = this._afterLineNumbers[i];\n\n\t\t\tif (fromLineNumber <= afterLineNumber && afterLineNumber <= toLineNumber) {\n\t\t\t\t// The line this whitespace was after has been deleted\n\t\t\t\t// => move whitespace to before first deleted line\n\t\t\t\tthis._afterLineNumbers[i] = fromLineNumber - 1;\n\t\t\t} else if (afterLineNumber > toLineNumber) {\n\t\t\t\t// The line this whitespace was after has been moved up\n\t\t\t\t// => move whitespace up\n\t\t\t\tthis._afterLineNumbers[i] -= (toLineNumber - fromLineNumber + 1);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Notify the computer that lines have been inserted (a continuous zone of lines).\n\t * This gives it a chance to update `afterLineNumber` for whitespaces, giving the \"sticky\" characteristic.\n\t *\n\t * @param fromLineNumber The line number at which the insertion started, inclusive\n\t * @param toLineNumber The line number at which the insertion ended, inclusive.\n\t */\n\tpublic onLinesInserted(fromLineNumber: number, toLineNumber: number): void {\n\t\tfromLineNumber = fromLineNumber | 0;\n\t\ttoLineNumber = toLineNumber | 0;\n\n\t\tfor (let i = 0, len = this._afterLineNumbers.length; i < len; i++) {\n\t\t\tlet afterLineNumber = this._afterLineNumbers[i];\n\n\t\t\tif (fromLineNumber <= afterLineNumber) {\n\t\t\t\tthis._afterLineNumbers[i] += (toLineNumber - fromLineNumber + 1);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Get the sum of all the whitespaces.\n\t */\n\tpublic getTotalHeight(): number {\n\t\tif (this._heights.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn this.getAccumulatedHeight(this._heights.length - 1);\n\t}\n\n\t/**\n\t * Return the sum of the heights of the whitespaces at [0..index].\n\t * This includes the whitespace at `index`.\n\t *\n\t * @param index The index of the whitespace.\n\t * @return The sum of the heights of all whitespaces before the one at `index`, including the one at `index`.\n\t */\n\tpublic getAccumulatedHeight(index: number): number {\n\t\tindex = index | 0;\n\n\t\tlet startIndex = Math.max(0, this._prefixSumValidIndex + 1);\n\t\tif (startIndex === 0) {\n\t\t\tthis._prefixSum[0] = this._heights[0];\n\t\t\tstartIndex++;\n\t\t}\n\n\t\tfor (let i = startIndex; i <= index; i++) {\n\t\t\tthis._prefixSum[i] = this._prefixSum[i - 1] + this._heights[i];\n\t\t}\n\t\tthis._prefixSumValidIndex = Math.max(this._prefixSumValidIndex, index);\n\t\treturn this._prefixSum[index];\n\t}\n\n\t/**\n\t * Find all whitespaces with `afterLineNumber` < `lineNumber` and return the sum of their heights.\n\t *\n\t * @param lineNumber The line number whitespaces should be before.\n\t * @return The sum of the heights of the whitespaces before `lineNumber`.\n\t */\n\tpublic getAccumulatedHeightBeforeLineNumber(lineNumber: number): number {\n\t\tlineNumber = lineNumber | 0;\n\n\t\tlet lastWhitespaceBeforeLineNumber = this._findLastWhitespaceBeforeLineNumber(lineNumber);\n\n\t\tif (lastWhitespaceBeforeLineNumber === -1) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn this.getAccumulatedHeight(lastWhitespaceBeforeLineNumber);\n\t}\n\n\tprivate _findLastWhitespaceBeforeLineNumber(lineNumber: number): number {\n\t\tlineNumber = lineNumber | 0;\n\n\t\t// Find the whitespace before line number\n\t\tlet afterLineNumbers = this._afterLineNumbers;\n\t\tlet low = 0;\n\t\tlet high = afterLineNumbers.length - 1;\n\n\t\twhile (low <= high) {\n\t\t\tlet delta = (high - low) | 0;\n\t\t\tlet halfDelta = (delta / 2) | 0;\n\t\t\tlet mid = (low + halfDelta) | 0;\n\n\t\t\tif (afterLineNumbers[mid] < lineNumber) {\n\t\t\t\tif (mid + 1 >= afterLineNumbers.length || afterLineNumbers[mid + 1] >= lineNumber) {\n\t\t\t\t\treturn mid;\n\t\t\t\t} else {\n\t\t\t\t\tlow = (mid + 1) | 0;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thigh = (mid - 1) | 0;\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t}\n\n\tprivate _findFirstWhitespaceAfterLineNumber(lineNumber: number): number {\n\t\tlineNumber = lineNumber | 0;\n\n\t\tlet lastWhitespaceBeforeLineNumber = this._findLastWhitespaceBeforeLineNumber(lineNumber);\n\t\tlet firstWhitespaceAfterLineNumber = lastWhitespaceBeforeLineNumber + 1;\n\n\t\tif (firstWhitespaceAfterLineNumber < this._heights.length) {\n\t\t\treturn firstWhitespaceAfterLineNumber;\n\t\t}\n\n\t\treturn -1;\n\t}\n\n\t/**\n\t * Find the index of the first whitespace which has `afterLineNumber` >= `lineNumber`.\n\t * @return The index of the first whitespace with `afterLineNumber` >= `lineNumber` or -1 if no whitespace is found.\n\t */\n\tpublic getFirstWhitespaceIndexAfterLineNumber(lineNumber: number): number {\n\t\tlineNumber = lineNumber | 0;\n\n\t\treturn this._findFirstWhitespaceAfterLineNumber(lineNumber);\n\t}\n\n\t/**\n\t * The number of whitespaces.\n\t */\n\tpublic getCount(): number {\n\t\treturn this._heights.length;\n\t}\n\n\t/**\n\t * Get the `afterLineNumber` for whitespace at index `index`.\n\t *\n\t * @param index The index of the whitespace.\n\t * @return `afterLineNumber` of whitespace at `index`.\n\t */\n\tpublic getAfterLineNumberForWhitespaceIndex(index: number): number {\n\t\tindex = index | 0;\n\n\t\treturn this._afterLineNumbers[index];\n\t}\n\n\t/**\n\t * Get the `id` for whitespace at index `index`.\n\t *\n\t * @param index The index of the whitespace.\n\t * @return `id` of whitespace at `index`.\n\t */\n\tpublic getIdForWhitespaceIndex(index: number): number {\n\t\tindex = index | 0;\n\n\t\treturn this._ids[index];\n\t}\n\n\t/**\n\t * Get the `height` for whitespace at index `index`.\n\t *\n\t * @param index The index of the whitespace.\n\t * @return `height` of whitespace at `index`.\n\t */\n\tpublic getHeightForWhitespaceIndex(index: number): number {\n\t\tindex = index | 0;\n\n\t\treturn this._heights[index];\n\t}\n\n\t/**\n\t * Get all whitespaces.\n\t */\n\tpublic getWhitespaces(deviceLineHeight: number): IEditorWhitespace[] {\n\t\tdeviceLineHeight = deviceLineHeight | 0;\n\n\t\tlet result: IEditorWhitespace[] = [];\n\t\tfor (let i = 0; i < this._heights.length; i++) {\n\t\t\tresult.push({\n\t\t\t\tid: this._ids[i],\n\t\t\t\tafterLineNumber: this._afterLineNumbers[i],\n\t\t\t\theightInLines: this._heights[i] / deviceLineHeight\n\t\t\t});\n\t\t}\n\t\treturn result;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { WhitespaceComputer, IEditorWhitespace } from 'vs/editor/common/viewLayout/whitespaceComputer';\nimport { IPartialViewLinesViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData';\nimport { IViewWhitespaceViewportData } from 'vs/editor/common/viewModel/viewModel';\n\n/**\n * Layouting of objects that take vertical space (by having a height) and push down other objects.\n *\n * These objects are basically either text (lines) or spaces between those lines (whitespaces).\n * This provides commodity operations for working with lines that contain whitespace that pushes lines lower (vertically).\n * This is written with no knowledge of an editor in mind.\n */\nexport class LinesLayout {\n\n\t/**\n\t * Keep track of the total number of lines.\n\t * This is useful for doing binary searches or for doing hit-testing.\n\t */\n\tprivate _lineCount: number;\n\n\t/**\n\t * The height of a line in pixels.\n\t */\n\tprivate _lineHeight: number;\n\n\t/**\n\t * Contains whitespace information in pixels\n\t */\n\tprivate _whitespaces: WhitespaceComputer;\n\n\tconstructor(lineCount: number, lineHeight: number) {\n\t\tthis._lineCount = lineCount;\n\t\tthis._lineHeight = lineHeight;\n\t\tthis._whitespaces = new WhitespaceComputer();\n\t}\n\n\t/**\n\t * Change the height of a line in pixels.\n\t */\n\tpublic setLineHeight(lineHeight: number): void {\n\t\tthis._lineHeight = lineHeight;\n\t}\n\n\t/**\n\t * Set the number of lines.\n\t *\n\t * @param lineCount New number of lines.\n\t */\n\tpublic onFlushed(lineCount: number): void {\n\t\tthis._lineCount = lineCount;\n\t}\n\n\t/**\n\t * Insert a new whitespace of a certain height after a line number.\n\t * The whitespace has a \"sticky\" characteristic.\n\t * Irrespective of edits above or below `afterLineNumber`, the whitespace will follow the initial line.\n\t *\n\t * @param afterLineNumber The conceptual position of this whitespace. The whitespace will follow this line as best as possible even when deleting/inserting lines above/below.\n\t * @param heightInPx The height of the whitespace, in pixels.\n\t * @return An id that can be used later to mutate or delete the whitespace\n\t */\n\tpublic insertWhitespace(afterLineNumber: number, ordinal: number, heightInPx: number): number {\n\t\treturn this._whitespaces.insertWhitespace(afterLineNumber, ordinal, heightInPx);\n\t}\n\n\t/**\n\t * Change properties associated with a certain whitespace.\n\t */\n\tpublic changeWhitespace(id: number, newAfterLineNumber: number, newHeight: number): boolean {\n\t\treturn this._whitespaces.changeWhitespace(id, newAfterLineNumber, newHeight);\n\t}\n\n\t/**\n\t * Remove an existing whitespace.\n\t *\n\t * @param id The whitespace to remove\n\t * @return Returns true if the whitespace is found and it is removed.\n\t */\n\tpublic removeWhitespace(id: number): boolean {\n\t\treturn this._whitespaces.removeWhitespace(id);\n\t}\n\n\t/**\n\t * Notify the layouter that lines have been deleted (a continuous zone of lines).\n\t *\n\t * @param fromLineNumber The line number at which the deletion started, inclusive\n\t * @param toLineNumber The line number at which the deletion ended, inclusive\n\t */\n\tpublic onLinesDeleted(fromLineNumber: number, toLineNumber: number): void {\n\t\tthis._lineCount -= (toLineNumber - fromLineNumber + 1);\n\t\tthis._whitespaces.onLinesDeleted(fromLineNumber, toLineNumber);\n\t}\n\n\t/**\n\t * Notify the layouter that lines have been inserted (a continuous zone of lines).\n\t *\n\t * @param fromLineNumber The line number at which the insertion started, inclusive\n\t * @param toLineNumber The line number at which the insertion ended, inclusive.\n\t */\n\tpublic onLinesInserted(fromLineNumber: number, toLineNumber: number): void {\n\t\tthis._lineCount += (toLineNumber - fromLineNumber + 1);\n\t\tthis._whitespaces.onLinesInserted(fromLineNumber, toLineNumber);\n\t}\n\n\t/**\n\t * Get the sum of heights for all objects.\n\t *\n\t * @return The sum of heights for all objects.\n\t */\n\tpublic getLinesTotalHeight(): number {\n\t\tlet linesHeight = this._lineHeight * this._lineCount;\n\t\tlet whitespacesHeight = this._whitespaces.getTotalHeight();\n\t\treturn linesHeight + whitespacesHeight;\n\t}\n\n\t/**\n\t * Get the vertical offset (the sum of heights for all objects above) a certain line number.\n\t *\n\t * @param lineNumber The line number\n\t * @return The sum of heights for all objects above `lineNumber`.\n\t */\n\tpublic getVerticalOffsetForLineNumber(lineNumber: number): number {\n\t\tlineNumber = lineNumber | 0;\n\n\t\tlet previousLinesHeight: number;\n\t\tif (lineNumber > 1) {\n\t\t\tpreviousLinesHeight = this._lineHeight * (lineNumber - 1);\n\t\t} else {\n\t\t\tpreviousLinesHeight = 0;\n\t\t}\n\n\t\tlet previousWhitespacesHeight = this._whitespaces.getAccumulatedHeightBeforeLineNumber(lineNumber);\n\n\t\treturn previousLinesHeight + previousWhitespacesHeight;\n\t}\n\n\t/**\n\t * Returns the accumulated height of whitespaces before the given line number.\n\t *\n\t * @param lineNumber The line number\n\t */\n\tpublic getWhitespaceAccumulatedHeightBeforeLineNumber(lineNumber: number): number {\n\t\treturn this._whitespaces.getAccumulatedHeightBeforeLineNumber(lineNumber);\n\t}\n\n\t/**\n\t * Returns if there is any whitespace in the document.\n\t */\n\tpublic hasWhitespace(): boolean {\n\t\treturn this._whitespaces.getCount() > 0;\n\t}\n\n\t/**\n\t * Check if `verticalOffset` is below all lines.\n\t */\n\tpublic isAfterLines(verticalOffset: number): boolean {\n\t\tlet totalHeight = this.getLinesTotalHeight();\n\t\treturn verticalOffset > totalHeight;\n\t}\n\n\t/**\n\t * Find the first line number that is at or after vertical offset `verticalOffset`.\n\t * i.e. if getVerticalOffsetForLine(line) is x and getVerticalOffsetForLine(line + 1) is y, then\n\t * getLineNumberAtOrAfterVerticalOffset(i) = line, x <= i < y.\n\t *\n\t * @param verticalOffset The vertical offset to search at.\n\t * @return The line number at or after vertical offset `verticalOffset`.\n\t */\n\tpublic getLineNumberAtOrAfterVerticalOffset(verticalOffset: number): number {\n\t\tverticalOffset = verticalOffset | 0;\n\n\t\tif (verticalOffset < 0) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst linesCount = this._lineCount | 0;\n\t\tconst lineHeight = this._lineHeight;\n\t\tlet minLineNumber = 1;\n\t\tlet maxLineNumber = linesCount;\n\n\t\twhile (minLineNumber < maxLineNumber) {\n\t\t\tlet midLineNumber = ((minLineNumber + maxLineNumber) / 2) | 0;\n\n\t\t\tlet midLineNumberVerticalOffset = this.getVerticalOffsetForLineNumber(midLineNumber) | 0;\n\n\t\t\tif (verticalOffset >= midLineNumberVerticalOffset + lineHeight) {\n\t\t\t\t// vertical offset is after mid line number\n\t\t\t\tminLineNumber = midLineNumber + 1;\n\t\t\t} else if (verticalOffset >= midLineNumberVerticalOffset) {\n\t\t\t\t// Hit\n\t\t\t\treturn midLineNumber;\n\t\t\t} else {\n\t\t\t\t// vertical offset is before mid line number, but mid line number could still be what we're searching for\n\t\t\t\tmaxLineNumber = midLineNumber;\n\t\t\t}\n\t\t}\n\n\t\tif (minLineNumber > linesCount) {\n\t\t\treturn linesCount;\n\t\t}\n\n\t\treturn minLineNumber;\n\t}\n\n\t/**\n\t * Get all the lines and their relative vertical offsets that are positioned between `verticalOffset1` and `verticalOffset2`.\n\t *\n\t * @param verticalOffset1 The beginning of the viewport.\n\t * @param verticalOffset2 The end of the viewport.\n\t * @return A structure describing the lines positioned between `verticalOffset1` and `verticalOffset2`.\n\t */\n\tpublic getLinesViewportData(verticalOffset1: number, verticalOffset2: number): IPartialViewLinesViewportData {\n\t\tverticalOffset1 = verticalOffset1 | 0;\n\t\tverticalOffset2 = verticalOffset2 | 0;\n\t\tconst lineHeight = this._lineHeight;\n\n\t\t// Find first line number\n\t\t// We don't live in a perfect world, so the line number might start before or after verticalOffset1\n\t\tconst startLineNumber = this.getLineNumberAtOrAfterVerticalOffset(verticalOffset1) | 0;\n\t\tconst startLineNumberVerticalOffset = this.getVerticalOffsetForLineNumber(startLineNumber) | 0;\n\n\t\tlet endLineNumber = this._lineCount | 0;\n\n\t\t// Also keep track of what whitespace we've got\n\t\tlet whitespaceIndex = this._whitespaces.getFirstWhitespaceIndexAfterLineNumber(startLineNumber) | 0;\n\t\tconst whitespaceCount = this._whitespaces.getCount() | 0;\n\t\tlet currentWhitespaceHeight: number;\n\t\tlet currentWhitespaceAfterLineNumber: number;\n\n\t\tif (whitespaceIndex === -1) {\n\t\t\twhitespaceIndex = whitespaceCount;\n\t\t\tcurrentWhitespaceAfterLineNumber = endLineNumber + 1;\n\t\t\tcurrentWhitespaceHeight = 0;\n\t\t} else {\n\t\t\tcurrentWhitespaceAfterLineNumber = this._whitespaces.getAfterLineNumberForWhitespaceIndex(whitespaceIndex) | 0;\n\t\t\tcurrentWhitespaceHeight = this._whitespaces.getHeightForWhitespaceIndex(whitespaceIndex) | 0;\n\t\t}\n\n\t\tlet currentVerticalOffset = startLineNumberVerticalOffset;\n\t\tlet currentLineRelativeOffset = currentVerticalOffset;\n\n\t\t// IE (all versions) cannot handle units above about 1,533,908 px, so every 500k pixels bring numbers down\n\t\tconst STEP_SIZE = 500000;\n\t\tlet bigNumbersDelta = 0;\n\t\tif (startLineNumberVerticalOffset >= STEP_SIZE) {\n\t\t\t// Compute a delta that guarantees that lines are positioned at `lineHeight` increments\n\t\t\tbigNumbersDelta = Math.floor(startLineNumberVerticalOffset / STEP_SIZE) * STEP_SIZE;\n\t\t\tbigNumbersDelta = Math.floor(bigNumbersDelta / lineHeight) * lineHeight;\n\n\t\t\tcurrentLineRelativeOffset -= bigNumbersDelta;\n\t\t}\n\n\t\tlet linesOffsets: number[] = [];\n\n\t\tconst verticalCenter = verticalOffset1 + (verticalOffset2 - verticalOffset1) / 2;\n\t\tlet centeredLineNumber = -1;\n\n\t\t// Figure out how far the lines go\n\t\tfor (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n\n\t\t\tif (centeredLineNumber === -1) {\n\t\t\t\tlet currentLineTop = currentVerticalOffset;\n\t\t\t\tlet currentLineBottom = currentVerticalOffset + lineHeight;\n\t\t\t\tif ((currentLineTop <= verticalCenter && verticalCenter < currentLineBottom) || currentLineTop > verticalCenter) {\n\t\t\t\t\tcenteredLineNumber = lineNumber;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Count current line height in the vertical offsets\n\t\t\tcurrentVerticalOffset += lineHeight;\n\t\t\tlinesOffsets[lineNumber - startLineNumber] = currentLineRelativeOffset;\n\n\t\t\t// Next line starts immediately after this one\n\t\t\tcurrentLineRelativeOffset += lineHeight;\n\t\t\twhile (currentWhitespaceAfterLineNumber === lineNumber) {\n\t\t\t\t// Push down next line with the height of the current whitespace\n\t\t\t\tcurrentLineRelativeOffset += currentWhitespaceHeight;\n\n\t\t\t\t// Count current whitespace in the vertical offsets\n\t\t\t\tcurrentVerticalOffset += currentWhitespaceHeight;\n\t\t\t\twhitespaceIndex++;\n\n\t\t\t\tif (whitespaceIndex >= whitespaceCount) {\n\t\t\t\t\tcurrentWhitespaceAfterLineNumber = endLineNumber + 1;\n\t\t\t\t} else {\n\t\t\t\t\tcurrentWhitespaceAfterLineNumber = this._whitespaces.getAfterLineNumberForWhitespaceIndex(whitespaceIndex) | 0;\n\t\t\t\t\tcurrentWhitespaceHeight = this._whitespaces.getHeightForWhitespaceIndex(whitespaceIndex) | 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (currentVerticalOffset >= verticalOffset2) {\n\t\t\t\t// We have covered the entire viewport area, time to stop\n\t\t\t\tendLineNumber = lineNumber;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (centeredLineNumber === -1) {\n\t\t\tcenteredLineNumber = endLineNumber;\n\t\t}\n\n\t\tconst endLineNumberVerticalOffset = this.getVerticalOffsetForLineNumber(endLineNumber) | 0;\n\n\t\tlet completelyVisibleStartLineNumber = startLineNumber;\n\t\tlet completelyVisibleEndLineNumber = endLineNumber;\n\n\t\tif (completelyVisibleStartLineNumber < completelyVisibleEndLineNumber) {\n\t\t\tif (startLineNumberVerticalOffset < verticalOffset1) {\n\t\t\t\tcompletelyVisibleStartLineNumber++;\n\t\t\t}\n\t\t}\n\t\tif (completelyVisibleStartLineNumber < completelyVisibleEndLineNumber) {\n\t\t\tif (endLineNumberVerticalOffset + lineHeight > verticalOffset2) {\n\t\t\t\tcompletelyVisibleEndLineNumber--;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tbigNumbersDelta: bigNumbersDelta,\n\t\t\tstartLineNumber: startLineNumber,\n\t\t\tendLineNumber: endLineNumber,\n\t\t\trelativeVerticalOffset: linesOffsets,\n\t\t\tcenteredLineNumber: centeredLineNumber,\n\t\t\tcompletelyVisibleStartLineNumber: completelyVisibleStartLineNumber,\n\t\t\tcompletelyVisibleEndLineNumber: completelyVisibleEndLineNumber\n\t\t};\n\t}\n\n\tpublic getVerticalOffsetForWhitespaceIndex(whitespaceIndex: number): number {\n\t\twhitespaceIndex = whitespaceIndex | 0;\n\n\t\tlet afterLineNumber = this._whitespaces.getAfterLineNumberForWhitespaceIndex(whitespaceIndex);\n\n\t\tlet previousLinesHeight: number;\n\t\tif (afterLineNumber >= 1) {\n\t\t\tpreviousLinesHeight = this._lineHeight * afterLineNumber;\n\t\t} else {\n\t\t\tpreviousLinesHeight = 0;\n\t\t}\n\n\t\tlet previousWhitespacesHeight: number;\n\t\tif (whitespaceIndex > 0) {\n\t\t\tpreviousWhitespacesHeight = this._whitespaces.getAccumulatedHeight(whitespaceIndex - 1);\n\t\t} else {\n\t\t\tpreviousWhitespacesHeight = 0;\n\t\t}\n\t\treturn previousLinesHeight + previousWhitespacesHeight;\n\t}\n\n\tpublic getWhitespaceIndexAtOrAfterVerticallOffset(verticalOffset: number): number {\n\t\tverticalOffset = verticalOffset | 0;\n\n\t\tlet midWhitespaceIndex: number,\n\t\t\tminWhitespaceIndex = 0,\n\t\t\tmaxWhitespaceIndex = this._whitespaces.getCount() - 1,\n\t\t\tmidWhitespaceVerticalOffset: number,\n\t\t\tmidWhitespaceHeight: number;\n\n\t\tif (maxWhitespaceIndex < 0) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Special case: nothing to be found\n\t\tlet maxWhitespaceVerticalOffset = this.getVerticalOffsetForWhitespaceIndex(maxWhitespaceIndex);\n\t\tlet maxWhitespaceHeight = this._whitespaces.getHeightForWhitespaceIndex(maxWhitespaceIndex);\n\t\tif (verticalOffset >= maxWhitespaceVerticalOffset + maxWhitespaceHeight) {\n\t\t\treturn -1;\n\t\t}\n\n\t\twhile (minWhitespaceIndex < maxWhitespaceIndex) {\n\t\t\tmidWhitespaceIndex = Math.floor((minWhitespaceIndex + maxWhitespaceIndex) / 2);\n\n\t\t\tmidWhitespaceVerticalOffset = this.getVerticalOffsetForWhitespaceIndex(midWhitespaceIndex);\n\t\t\tmidWhitespaceHeight = this._whitespaces.getHeightForWhitespaceIndex(midWhitespaceIndex);\n\n\t\t\tif (verticalOffset >= midWhitespaceVerticalOffset + midWhitespaceHeight) {\n\t\t\t\t// vertical offset is after whitespace\n\t\t\t\tminWhitespaceIndex = midWhitespaceIndex + 1;\n\t\t\t} else if (verticalOffset >= midWhitespaceVerticalOffset) {\n\t\t\t\t// Hit\n\t\t\t\treturn midWhitespaceIndex;\n\t\t\t} else {\n\t\t\t\t// vertical offset is before whitespace, but midWhitespaceIndex might still be what we're searching for\n\t\t\t\tmaxWhitespaceIndex = midWhitespaceIndex;\n\t\t\t}\n\t\t}\n\t\treturn minWhitespaceIndex;\n\t}\n\n\t/**\n\t * Get exactly the whitespace that is layouted at `verticalOffset`.\n\t *\n\t * @param verticalOffset The vertical offset.\n\t * @return Precisely the whitespace that is layouted at `verticaloffset` or null.\n\t */\n\tpublic getWhitespaceAtVerticalOffset(verticalOffset: number): IViewWhitespaceViewportData {\n\t\tverticalOffset = verticalOffset | 0;\n\n\t\tlet candidateIndex = this.getWhitespaceIndexAtOrAfterVerticallOffset(verticalOffset);\n\n\t\tif (candidateIndex < 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (candidateIndex >= this._whitespaces.getCount()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet candidateTop = this.getVerticalOffsetForWhitespaceIndex(candidateIndex);\n\n\t\tif (candidateTop > verticalOffset) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet candidateHeight = this._whitespaces.getHeightForWhitespaceIndex(candidateIndex);\n\t\tlet candidateId = this._whitespaces.getIdForWhitespaceIndex(candidateIndex);\n\t\tlet candidateAfterLineNumber = this._whitespaces.getAfterLineNumberForWhitespaceIndex(candidateIndex);\n\n\t\treturn {\n\t\t\tid: candidateId,\n\t\t\tafterLineNumber: candidateAfterLineNumber,\n\t\t\tverticalOffset: candidateTop,\n\t\t\theight: candidateHeight\n\t\t};\n\t}\n\n\t/**\n\t * Get a list of whitespaces that are positioned between `verticalOffset1` and `verticalOffset2`.\n\t *\n\t * @param verticalOffset1 The beginning of the viewport.\n\t * @param verticalOffset2 The end of the viewport.\n\t * @return An array with all the whitespaces in the viewport. If no whitespace is in viewport, the array is empty.\n\t */\n\tpublic getWhitespaceViewportData(verticalOffset1: number, verticalOffset2: number): IViewWhitespaceViewportData[] {\n\t\tverticalOffset1 = verticalOffset1 | 0;\n\t\tverticalOffset2 = verticalOffset2 | 0;\n\n\t\tlet startIndex = this.getWhitespaceIndexAtOrAfterVerticallOffset(verticalOffset1);\n\t\tlet endIndex = this._whitespaces.getCount() - 1;\n\n\t\tif (startIndex < 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\tlet result: IViewWhitespaceViewportData[] = [];\n\t\tfor (let i = startIndex; i <= endIndex; i++) {\n\t\t\tlet top = this.getVerticalOffsetForWhitespaceIndex(i);\n\t\t\tlet height = this._whitespaces.getHeightForWhitespaceIndex(i);\n\t\t\tif (top >= verticalOffset2) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tresult.push({\n\t\t\t\tid: this._whitespaces.getIdForWhitespaceIndex(i),\n\t\t\t\tafterLineNumber: this._whitespaces.getAfterLineNumberForWhitespaceIndex(i),\n\t\t\t\tverticalOffset: top,\n\t\t\t\theight: height\n\t\t\t});\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Get all whitespaces.\n\t */\n\tpublic getWhitespaces(): IEditorWhitespace[] {\n\t\treturn this._whitespaces.getWhitespaces(this._lineHeight);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { toUint32 } from 'vs/editor/common/core/uint';\n\nexport class PrefixSumIndexOfResult {\n\t_prefixSumIndexOfResultBrand: void;\n\n\tindex: number;\n\tremainder: number;\n\n\tconstructor(index: number, remainder: number) {\n\t\tthis.index = index;\n\t\tthis.remainder = remainder;\n\t}\n}\n\nexport class PrefixSumComputer {\n\n\t/**\n\t * values[i] is the value at index i\n\t */\n\tprivate values: Uint32Array;\n\n\t/**\n\t * prefixSum[i] = SUM(heights[j]), 0 <= j <= i\n\t */\n\tprivate prefixSum: Uint32Array;\n\n\t/**\n\t * prefixSum[i], 0 <= i <= prefixSumValidIndex can be trusted\n\t */\n\tprivate prefixSumValidIndex: Int32Array;\n\n\tconstructor(values: Uint32Array) {\n\t\tthis.values = values;\n\t\tthis.prefixSum = new Uint32Array(values.length);\n\t\tthis.prefixSumValidIndex = new Int32Array(1);\n\t\tthis.prefixSumValidIndex[0] = -1;\n\t}\n\n\tpublic getCount(): number {\n\t\treturn this.values.length;\n\t}\n\n\tpublic insertValues(insertIndex: number, insertValues: Uint32Array): boolean {\n\t\tinsertIndex = toUint32(insertIndex);\n\t\tconst oldValues = this.values;\n\t\tconst oldPrefixSum = this.prefixSum;\n\t\tconst insertValuesLen = insertValues.length;\n\n\t\tif (insertValuesLen === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.values = new Uint32Array(oldValues.length + insertValuesLen);\n\t\tthis.values.set(oldValues.subarray(0, insertIndex), 0);\n\t\tthis.values.set(oldValues.subarray(insertIndex), insertIndex + insertValuesLen);\n\t\tthis.values.set(insertValues, insertIndex);\n\n\t\tif (insertIndex - 1 < this.prefixSumValidIndex[0]) {\n\t\t\tthis.prefixSumValidIndex[0] = insertIndex - 1;\n\t\t}\n\n\t\tthis.prefixSum = new Uint32Array(this.values.length);\n\t\tif (this.prefixSumValidIndex[0] >= 0) {\n\t\t\tthis.prefixSum.set(oldPrefixSum.subarray(0, this.prefixSumValidIndex[0] + 1));\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic changeValue(index: number, value: number): boolean {\n\t\tindex = toUint32(index);\n\t\tvalue = toUint32(value);\n\n\t\tif (this.values[index] === value) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.values[index] = value;\n\t\tif (index - 1 < this.prefixSumValidIndex[0]) {\n\t\t\tthis.prefixSumValidIndex[0] = index - 1;\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic removeValues(startIndex: number, cnt: number): boolean {\n\t\tstartIndex = toUint32(startIndex);\n\t\tcnt = toUint32(cnt);\n\n\t\tconst oldValues = this.values;\n\t\tconst oldPrefixSum = this.prefixSum;\n\n\t\tif (startIndex >= oldValues.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet maxCnt = oldValues.length - startIndex;\n\t\tif (cnt >= maxCnt) {\n\t\t\tcnt = maxCnt;\n\t\t}\n\n\t\tif (cnt === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.values = new Uint32Array(oldValues.length - cnt);\n\t\tthis.values.set(oldValues.subarray(0, startIndex), 0);\n\t\tthis.values.set(oldValues.subarray(startIndex + cnt), startIndex);\n\n\t\tthis.prefixSum = new Uint32Array(this.values.length);\n\t\tif (startIndex - 1 < this.prefixSumValidIndex[0]) {\n\t\t\tthis.prefixSumValidIndex[0] = startIndex - 1;\n\t\t}\n\t\tif (this.prefixSumValidIndex[0] >= 0) {\n\t\t\tthis.prefixSum.set(oldPrefixSum.subarray(0, this.prefixSumValidIndex[0] + 1));\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic getTotalValue(): number {\n\t\tif (this.values.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn this._getAccumulatedValue(this.values.length - 1);\n\t}\n\n\tpublic getAccumulatedValue(index: number): number {\n\t\tif (index < 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tindex = toUint32(index);\n\t\treturn this._getAccumulatedValue(index);\n\t}\n\n\tprivate _getAccumulatedValue(index: number): number {\n\t\tif (index <= this.prefixSumValidIndex[0]) {\n\t\t\treturn this.prefixSum[index];\n\t\t}\n\n\t\tlet startIndex = this.prefixSumValidIndex[0] + 1;\n\t\tif (startIndex === 0) {\n\t\t\tthis.prefixSum[0] = this.values[0];\n\t\t\tstartIndex++;\n\t\t}\n\n\t\tif (index >= this.values.length) {\n\t\t\tindex = this.values.length - 1;\n\t\t}\n\n\t\tfor (let i = startIndex; i <= index; i++) {\n\t\t\tthis.prefixSum[i] = this.prefixSum[i - 1] + this.values[i];\n\t\t}\n\t\tthis.prefixSumValidIndex[0] = Math.max(this.prefixSumValidIndex[0], index);\n\t\treturn this.prefixSum[index];\n\t}\n\n\tpublic getIndexOf(accumulatedValue: number): PrefixSumIndexOfResult {\n\t\taccumulatedValue = Math.floor(accumulatedValue); //@perf\n\n\t\t// Compute all sums (to get a fully valid prefixSum)\n\t\tthis.getTotalValue();\n\n\t\tlet low = 0;\n\t\tlet high = this.values.length - 1;\n\t\tlet mid: number;\n\t\tlet midStop: number;\n\t\tlet midStart: number;\n\n\t\twhile (low <= high) {\n\t\t\tmid = low + ((high - low) / 2) | 0;\n\n\t\t\tmidStop = this.prefixSum[mid];\n\t\t\tmidStart = midStop - this.values[mid];\n\n\t\t\tif (accumulatedValue < midStart) {\n\t\t\t\thigh = mid - 1;\n\t\t\t} else if (accumulatedValue >= midStop) {\n\t\t\t\tlow = mid + 1;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn new PrefixSumIndexOfResult(mid, accumulatedValue - midStart);\n\t}\n}\n\nexport class PrefixSumComputerWithCache {\n\n\tprivate readonly _actual: PrefixSumComputer;\n\tprivate _cacheAccumulatedValueStart: number = 0;\n\tprivate _cache: PrefixSumIndexOfResult[] = null;\n\n\tconstructor(values: Uint32Array) {\n\t\tthis._actual = new PrefixSumComputer(values);\n\t\tthis._bustCache();\n\t}\n\n\tprivate _bustCache(): void {\n\t\tthis._cacheAccumulatedValueStart = 0;\n\t\tthis._cache = null;\n\t}\n\n\tpublic getCount(): number {\n\t\treturn this._actual.getCount();\n\t}\n\n\tpublic insertValues(insertIndex: number, insertValues: Uint32Array): void {\n\t\tif (this._actual.insertValues(insertIndex, insertValues)) {\n\t\t\tthis._bustCache();\n\t\t}\n\t}\n\n\tpublic changeValue(index: number, value: number): void {\n\t\tif (this._actual.changeValue(index, value)) {\n\t\t\tthis._bustCache();\n\t\t}\n\t}\n\n\tpublic removeValues(startIndex: number, cnt: number): void {\n\t\tif (this._actual.removeValues(startIndex, cnt)) {\n\t\t\tthis._bustCache();\n\t\t}\n\t}\n\n\tpublic getTotalValue(): number {\n\t\treturn this._actual.getTotalValue();\n\t}\n\n\tpublic getAccumulatedValue(index: number): number {\n\t\treturn this._actual.getAccumulatedValue(index);\n\t}\n\n\tpublic getIndexOf(accumulatedValue: number): PrefixSumIndexOfResult {\n\t\taccumulatedValue = Math.floor(accumulatedValue); //@perf\n\n\t\tif (this._cache !== null) {\n\t\t\tlet cacheIndex = accumulatedValue - this._cacheAccumulatedValueStart;\n\t\t\tif (cacheIndex >= 0 && cacheIndex < this._cache.length) {\n\t\t\t\t// Cache hit!\n\t\t\t\treturn this._cache[cacheIndex];\n\t\t\t}\n\t\t}\n\n\t\t// Cache miss!\n\t\treturn this._actual.getIndexOf(accumulatedValue);\n\t}\n\n\t/**\n\t * Gives a hint that a lot of requests are about to come in for these accumulated values.\n\t */\n\tpublic warmUpCache(accumulatedValueStart: number, accumulatedValueEnd: number): void {\n\t\tlet newCache: PrefixSumIndexOfResult[] = [];\n\t\tfor (let accumulatedValue = accumulatedValueStart; accumulatedValue <= accumulatedValueEnd; accumulatedValue++) {\n\t\t\tnewCache[accumulatedValue - accumulatedValueStart] = this.getIndexOf(accumulatedValue);\n\t\t}\n\t\tthis._cache = newCache;\n\t\tthis._cacheAccumulatedValueStart = accumulatedValueStart;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport URI from 'vs/base/common/uri';\nimport { IRange } from 'vs/editor/common/core/range';\nimport { PrefixSumComputer } from 'vs/editor/common/viewModel/prefixSumComputer';\nimport { IModelContentChange } from 'vs/editor/common/model/textModelEvents';\nimport { IPosition } from 'vs/editor/common/core/position';\n\nexport interface IModelChangedEvent {\n\t/**\n\t * The actual changes.\n\t */\n\treadonly changes: IModelContentChange[];\n\t/**\n\t * The (new) end-of-line character.\n\t */\n\treadonly eol: string;\n\t/**\n\t * The new version id the model has transitioned to.\n\t */\n\treadonly versionId: number;\n}\n\nexport class MirrorModel {\n\n\tprotected _uri: URI;\n\tprotected _lines: string[];\n\tprotected _eol: string;\n\tprotected _versionId: number;\n\tprotected _lineStarts: PrefixSumComputer;\n\n\tconstructor(uri: URI, lines: string[], eol: string, versionId: number) {\n\t\tthis._uri = uri;\n\t\tthis._lines = lines;\n\t\tthis._eol = eol;\n\t\tthis._versionId = versionId;\n\t}\n\n\tdispose(): void {\n\t\tthis._lines.length = 0;\n\t}\n\n\tget version(): number {\n\t\treturn this._versionId;\n\t}\n\n\tgetText(): string {\n\t\treturn this._lines.join(this._eol);\n\t}\n\n\tonEvents(e: IModelChangedEvent): void {\n\t\tif (e.eol && e.eol !== this._eol) {\n\t\t\tthis._eol = e.eol;\n\t\t\tthis._lineStarts = null;\n\t\t}\n\n\t\t// Update my lines\n\t\tconst changes = e.changes;\n\t\tfor (let i = 0, len = changes.length; i < len; i++) {\n\t\t\tconst change = changes[i];\n\t\t\tthis._acceptDeleteRange(change.range);\n\t\t\tthis._acceptInsertText({\n\t\t\t\tlineNumber: change.range.startLineNumber,\n\t\t\t\tcolumn: change.range.startColumn\n\t\t\t}, change.text);\n\t\t}\n\n\t\tthis._versionId = e.versionId;\n\t}\n\n\tprotected _ensureLineStarts(): void {\n\t\tif (!this._lineStarts) {\n\t\t\tconst eolLength = this._eol.length;\n\t\t\tconst linesLength = this._lines.length;\n\t\t\tconst lineStartValues = new Uint32Array(linesLength);\n\t\t\tfor (let i = 0; i < linesLength; i++) {\n\t\t\t\tlineStartValues[i] = this._lines[i].length + eolLength;\n\t\t\t}\n\t\t\tthis._lineStarts = new PrefixSumComputer(lineStartValues);\n\t\t}\n\t}\n\n\t/**\n\t * All changes to a line's text go through this method\n\t */\n\tprivate _setLineText(lineIndex: number, newValue: string): void {\n\t\tthis._lines[lineIndex] = newValue;\n\t\tif (this._lineStarts) {\n\t\t\t// update prefix sum\n\t\t\tthis._lineStarts.changeValue(lineIndex, this._lines[lineIndex].length + this._eol.length);\n\t\t}\n\t}\n\n\tprivate _acceptDeleteRange(range: IRange): void {\n\n\t\tif (range.startLineNumber === range.endLineNumber) {\n\t\t\tif (range.startColumn === range.endColumn) {\n\t\t\t\t// Nothing to delete\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Delete text on the affected line\n\t\t\tthis._setLineText(range.startLineNumber - 1,\n\t\t\t\tthis._lines[range.startLineNumber - 1].substring(0, range.startColumn - 1)\n\t\t\t\t+ this._lines[range.startLineNumber - 1].substring(range.endColumn - 1)\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\t// Take remaining text on last line and append it to remaining text on first line\n\t\tthis._setLineText(range.startLineNumber - 1,\n\t\t\tthis._lines[range.startLineNumber - 1].substring(0, range.startColumn - 1)\n\t\t\t+ this._lines[range.endLineNumber - 1].substring(range.endColumn - 1)\n\t\t);\n\n\t\t// Delete middle lines\n\t\tthis._lines.splice(range.startLineNumber, range.endLineNumber - range.startLineNumber);\n\t\tif (this._lineStarts) {\n\t\t\t// update prefix sum\n\t\t\tthis._lineStarts.removeValues(range.startLineNumber, range.endLineNumber - range.startLineNumber);\n\t\t}\n\t}\n\n\tprivate _acceptInsertText(position: IPosition, insertText: string): void {\n\t\tif (insertText.length === 0) {\n\t\t\t// Nothing to insert\n\t\t\treturn;\n\t\t}\n\t\tlet insertLines = insertText.split(/\\r\\n|\\r|\\n/);\n\t\tif (insertLines.length === 1) {\n\t\t\t// Inserting text on one line\n\t\t\tthis._setLineText(position.lineNumber - 1,\n\t\t\t\tthis._lines[position.lineNumber - 1].substring(0, position.column - 1)\n\t\t\t\t+ insertLines[0]\n\t\t\t\t+ this._lines[position.lineNumber - 1].substring(position.column - 1)\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\t// Append overflowing text from first line to the end of text to insert\n\t\tinsertLines[insertLines.length - 1] += this._lines[position.lineNumber - 1].substring(position.column - 1);\n\n\t\t// Delete overflowing text from first line and insert text on first line\n\t\tthis._setLineText(position.lineNumber - 1,\n\t\t\tthis._lines[position.lineNumber - 1].substring(0, position.column - 1)\n\t\t\t+ insertLines[0]\n\t\t);\n\n\t\t// Insert new lines & store lengths\n\t\tlet newLengths = new Uint32Array(insertLines.length - 1);\n\t\tfor (let i = 1; i < insertLines.length; i++) {\n\t\t\tthis._lines.splice(position.lineNumber + i - 1, 0, insertLines[i]);\n\t\t\tnewLengths[i - 1] = insertLines[i].length + this._eol.length;\n\t\t}\n\n\t\tif (this._lineStarts) {\n\t\t\t// update prefix sum\n\t\t\tthis._lineStarts.insertValues(position.lineNumber, newLengths);\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport URI from 'vs/base/common/uri';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { IRequestHandler } from 'vs/base/common/worker/simpleWorker';\nimport { Range, IRange } from 'vs/editor/common/core/range';\nimport { DiffComputer } from 'vs/editor/common/diff/diffComputer';\nimport { stringDiff } from 'vs/base/common/diff/diff';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { Position, IPosition } from 'vs/editor/common/core/position';\nimport { MirrorModel as BaseMirrorModel, IModelChangedEvent } from 'vs/editor/common/model/mirrorModel';\nimport { IInplaceReplaceSupportResult, ILink, ISuggestResult, ISuggestion, TextEdit } from 'vs/editor/common/modes';\nimport { computeLinks } from 'vs/editor/common/modes/linkComputer';\nimport { BasicInplaceReplace } from 'vs/editor/common/modes/supports/inplaceReplaceSupport';\nimport { getWordAtText, ensureValidWordDefinition } from 'vs/editor/common/model/wordHelper';\nimport { createMonacoBaseAPI } from 'vs/editor/common/standalone/standaloneBase';\n\nexport interface IMirrorModel {\n\treadonly uri: URI;\n\treadonly version: number;\n\tgetValue(): string;\n}\n\nexport interface IWorkerContext {\n\t/**\n\t * Get all available mirror models in this worker.\n\t */\n\tgetMirrorModels(): IMirrorModel[];\n}\n\n/**\n * @internal\n */\nexport interface IRawModelData {\n\turl: string;\n\tversionId: number;\n\tlines: string[];\n\tEOL: string;\n}\n\n/**\n * @internal\n */\nexport interface ICommonModel {\n\turi: URI;\n\tversion: number;\n\teol: string;\n\tgetValue(): string;\n\n\tgetLinesContent(): string[];\n\tgetLineCount(): number;\n\tgetLineContent(lineNumber: number): string;\n\tgetWordUntilPosition(position: IPosition, wordDefinition: RegExp): editorCommon.IWordAtPosition;\n\tgetAllUniqueWords(wordDefinition: RegExp, skipWordOnce?: string): string[];\n\tgetValueInRange(range: IRange): string;\n\tgetWordAtPosition(position: IPosition, wordDefinition: RegExp): Range;\n\toffsetAt(position: IPosition): number;\n\tpositionAt(offset: number): IPosition;\n}\n\n/**\n * Range of a word inside a model.\n * @internal\n */\ninterface IWordRange {\n\t/**\n\t * The index where the word starts.\n\t */\n\treadonly start: number;\n\t/**\n\t * The index where the word ends.\n\t */\n\treadonly end: number;\n}\n\n/**\n * @internal\n */\nclass MirrorModel extends BaseMirrorModel implements ICommonModel {\n\n\tpublic get uri(): URI {\n\t\treturn this._uri;\n\t}\n\n\tpublic get version(): number {\n\t\treturn this._versionId;\n\t}\n\n\tpublic get eol(): string {\n\t\treturn this._eol;\n\t}\n\n\tpublic getValue(): string {\n\t\treturn this.getText();\n\t}\n\n\tpublic getLinesContent(): string[] {\n\t\treturn this._lines.slice(0);\n\t}\n\n\tpublic getLineCount(): number {\n\t\treturn this._lines.length;\n\t}\n\n\tpublic getLineContent(lineNumber: number): string {\n\t\treturn this._lines[lineNumber - 1];\n\t}\n\n\tpublic getWordAtPosition(position: IPosition, wordDefinition: RegExp): Range {\n\n\t\tlet wordAtText = getWordAtText(\n\t\t\tposition.column,\n\t\t\tensureValidWordDefinition(wordDefinition),\n\t\t\tthis._lines[position.lineNumber - 1],\n\t\t\t0\n\t\t);\n\n\t\tif (wordAtText) {\n\t\t\treturn new Range(position.lineNumber, wordAtText.startColumn, position.lineNumber, wordAtText.endColumn);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tpublic getWordUntilPosition(position: IPosition, wordDefinition: RegExp): editorCommon.IWordAtPosition {\n\t\tvar wordAtPosition = this.getWordAtPosition(position, wordDefinition);\n\t\tif (!wordAtPosition) {\n\t\t\treturn {\n\t\t\t\tword: '',\n\t\t\t\tstartColumn: position.column,\n\t\t\t\tendColumn: position.column\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tword: this._lines[position.lineNumber - 1].substring(wordAtPosition.startColumn - 1, position.column - 1),\n\t\t\tstartColumn: wordAtPosition.startColumn,\n\t\t\tendColumn: position.column\n\t\t};\n\t}\n\n\tprivate _getAllWords(wordDefinition: RegExp): string[] {\n\t\tvar result: string[] = [];\n\t\tthis._lines.forEach((line) => {\n\t\t\tthis._wordenize(line, wordDefinition).forEach((info) => {\n\t\t\t\tresult.push(line.substring(info.start, info.end));\n\t\t\t});\n\t\t});\n\t\treturn result;\n\t}\n\n\tpublic getAllUniqueWords(wordDefinition: RegExp, skipWordOnce?: string): string[] {\n\t\tvar foundSkipWord = false;\n\t\tvar uniqueWords = Object.create(null);\n\t\treturn this._getAllWords(wordDefinition).filter((word) => {\n\t\t\tif (skipWordOnce && !foundSkipWord && skipWordOnce === word) {\n\t\t\t\tfoundSkipWord = true;\n\t\t\t\treturn false;\n\t\t\t} else if (uniqueWords[word]) {\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tuniqueWords[word] = true;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _wordenize(content: string, wordDefinition: RegExp): IWordRange[] {\n\t\tconst result: IWordRange[] = [];\n\t\tlet match: RegExpExecArray;\n\n\t\twordDefinition.lastIndex = 0; // reset lastIndex just to be sure\n\n\t\twhile (match = wordDefinition.exec(content)) {\n\t\t\tif (match[0].length === 0) {\n\t\t\t\t// it did match the empty string\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tresult.push({ start: match.index, end: match.index + match[0].length });\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic getValueInRange(range: IRange): string {\n\t\trange = this._validateRange(range);\n\n\t\tif (range.startLineNumber === range.endLineNumber) {\n\t\t\treturn this._lines[range.startLineNumber - 1].substring(range.startColumn - 1, range.endColumn - 1);\n\t\t}\n\n\t\tvar lineEnding = this._eol,\n\t\t\tstartLineIndex = range.startLineNumber - 1,\n\t\t\tendLineIndex = range.endLineNumber - 1,\n\t\t\tresultLines: string[] = [];\n\n\t\tresultLines.push(this._lines[startLineIndex].substring(range.startColumn - 1));\n\t\tfor (var i = startLineIndex + 1; i < endLineIndex; i++) {\n\t\t\tresultLines.push(this._lines[i]);\n\t\t}\n\t\tresultLines.push(this._lines[endLineIndex].substring(0, range.endColumn - 1));\n\n\t\treturn resultLines.join(lineEnding);\n\t}\n\n\tpublic offsetAt(position: IPosition): number {\n\t\tposition = this._validatePosition(position);\n\t\tthis._ensureLineStarts();\n\t\treturn this._lineStarts.getAccumulatedValue(position.lineNumber - 2) + (position.column - 1);\n\t}\n\n\tpublic positionAt(offset: number): IPosition {\n\t\toffset = Math.floor(offset);\n\t\toffset = Math.max(0, offset);\n\n\t\tthis._ensureLineStarts();\n\t\tlet out = this._lineStarts.getIndexOf(offset);\n\t\tlet lineLength = this._lines[out.index].length;\n\n\t\t// Ensure we return a valid position\n\t\treturn {\n\t\t\tlineNumber: 1 + out.index,\n\t\t\tcolumn: 1 + Math.min(out.remainder, lineLength)\n\t\t};\n\t}\n\n\tprivate _validateRange(range: IRange): IRange {\n\n\t\tconst start = this._validatePosition({ lineNumber: range.startLineNumber, column: range.startColumn });\n\t\tconst end = this._validatePosition({ lineNumber: range.endLineNumber, column: range.endColumn });\n\n\t\tif (start.lineNumber !== range.startLineNumber\n\t\t\t|| start.column !== range.startColumn\n\t\t\t|| end.lineNumber !== range.endLineNumber\n\t\t\t|| end.column !== range.endColumn) {\n\n\t\t\treturn {\n\t\t\t\tstartLineNumber: start.lineNumber,\n\t\t\t\tstartColumn: start.column,\n\t\t\t\tendLineNumber: end.lineNumber,\n\t\t\t\tendColumn: end.column\n\t\t\t};\n\t\t}\n\n\t\treturn range;\n\t}\n\n\tprivate _validatePosition(position: IPosition): IPosition {\n\t\tif (!Position.isIPosition(position)) {\n\t\t\tthrow new Error('bad position');\n\t\t}\n\t\tlet { lineNumber, column } = position;\n\t\tlet hasChanged = false;\n\n\t\tif (lineNumber < 1) {\n\t\t\tlineNumber = 1;\n\t\t\tcolumn = 1;\n\t\t\thasChanged = true;\n\n\t\t} else if (lineNumber > this._lines.length) {\n\t\t\tlineNumber = this._lines.length;\n\t\t\tcolumn = this._lines[lineNumber - 1].length + 1;\n\t\t\thasChanged = true;\n\n\t\t} else {\n\t\t\tlet maxCharacter = this._lines[lineNumber - 1].length + 1;\n\t\t\tif (column < 1) {\n\t\t\t\tcolumn = 1;\n\t\t\t\thasChanged = true;\n\t\t\t}\n\t\t\telse if (column > maxCharacter) {\n\t\t\t\tcolumn = maxCharacter;\n\t\t\t\thasChanged = true;\n\t\t\t}\n\t\t}\n\n\t\tif (!hasChanged) {\n\t\t\treturn position;\n\t\t} else {\n\t\t\treturn { lineNumber, column };\n\t\t}\n\t}\n}\n\n/**\n * @internal\n */\nexport abstract class BaseEditorSimpleWorker {\n\tprivate _foreignModule: any;\n\n\tconstructor() {\n\t\tthis._foreignModule = null;\n\t}\n\n\tprotected abstract _getModel(uri: string): ICommonModel;\n\tprotected abstract _getModels(): ICommonModel[];\n\n\t// ---- BEGIN diff --------------------------------------------------------------------------\n\n\tpublic computeDiff(originalUrl: string, modifiedUrl: string, ignoreTrimWhitespace: boolean): TPromise {\n\t\tlet original = this._getModel(originalUrl);\n\t\tlet modified = this._getModel(modifiedUrl);\n\t\tif (!original || !modified) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet originalLines = original.getLinesContent();\n\t\tlet modifiedLines = modified.getLinesContent();\n\t\tlet diffComputer = new DiffComputer(originalLines, modifiedLines, {\n\t\t\tshouldPostProcessCharChanges: true,\n\t\t\tshouldIgnoreTrimWhitespace: ignoreTrimWhitespace,\n\t\t\tshouldConsiderTrimWhitespaceInEmptyCase: true\n\t\t});\n\t\treturn TPromise.as(diffComputer.computeDiff());\n\t}\n\n\tpublic computeDirtyDiff(originalUrl: string, modifiedUrl: string, ignoreTrimWhitespace: boolean): TPromise {\n\t\tlet original = this._getModel(originalUrl);\n\t\tlet modified = this._getModel(modifiedUrl);\n\t\tif (!original || !modified) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet originalLines = original.getLinesContent();\n\t\tlet modifiedLines = modified.getLinesContent();\n\t\tlet diffComputer = new DiffComputer(originalLines, modifiedLines, {\n\t\t\tshouldPostProcessCharChanges: false,\n\t\t\tshouldIgnoreTrimWhitespace: ignoreTrimWhitespace,\n\t\t\tshouldConsiderTrimWhitespaceInEmptyCase: false\n\t\t});\n\t\treturn TPromise.as(diffComputer.computeDiff());\n\t}\n\n\t// ---- END diff --------------------------------------------------------------------------\n\n\n\t// ---- BEGIN minimal edits ---------------------------------------------------------------\n\n\tprivate static _diffLimit = 10000;\n\n\tpublic computeMoreMinimalEdits(modelUrl: string, edits: TextEdit[], ranges: IRange[]): TPromise {\n\t\tconst model = this._getModel(modelUrl);\n\t\tif (!model) {\n\t\t\treturn TPromise.as(edits);\n\t\t}\n\n\t\tconst result: TextEdit[] = [];\n\t\tlet lastEol: editorCommon.EndOfLineSequence;\n\n\t\tfor (let { range, text, eol } of edits) {\n\n\t\t\tif (typeof eol === 'number') {\n\t\t\t\tlastEol = eol;\n\t\t\t}\n\n\t\t\tif (!range) {\n\t\t\t\t// eol-change only\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst original = model.getValueInRange(range);\n\t\t\ttext = text.replace(/\\r\\n|\\n|\\r/g, model.eol);\n\n\t\t\tif (original === text) {\n\t\t\t\t// noop\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// make sure diff won't take too long\n\t\t\tif (Math.max(text.length, original.length) > BaseEditorSimpleWorker._diffLimit) {\n\t\t\t\tresult.push({ range, text });\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// compute diff between original and edit.text\n\t\t\tconst changes = stringDiff(original, text);\n\t\t\tconst editOffset = model.offsetAt(Range.lift(range).getStartPosition());\n\n\t\t\tfor (const change of changes) {\n\t\t\t\tconst start = model.positionAt(editOffset + change.originalStart);\n\t\t\t\tconst end = model.positionAt(editOffset + change.originalStart + change.originalLength);\n\t\t\t\tconst newEdit: TextEdit = {\n\t\t\t\t\ttext: text.substr(change.modifiedStart, change.modifiedLength),\n\t\t\t\t\trange: { startLineNumber: start.lineNumber, startColumn: start.column, endLineNumber: end.lineNumber, endColumn: end.column }\n\t\t\t\t};\n\n\t\t\t\tif (model.getValueInRange(newEdit.range) !== newEdit.text) {\n\t\t\t\t\tresult.push(newEdit);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (typeof lastEol === 'number') {\n\t\t\tresult.push({ eol: lastEol, text: undefined, range: undefined });\n\t\t}\n\n\t\treturn TPromise.as(result);\n\t}\n\n\t// ---- END minimal edits ---------------------------------------------------------------\n\n\tpublic computeLinks(modelUrl: string): TPromise {\n\t\tlet model = this._getModel(modelUrl);\n\t\tif (!model) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn TPromise.as(computeLinks(model));\n\t}\n\n\t// ---- BEGIN suggest --------------------------------------------------------------------------\n\n\tpublic textualSuggest(modelUrl: string, position: IPosition, wordDef: string, wordDefFlags: string): TPromise {\n\t\tconst model = this._getModel(modelUrl);\n\t\tif (model) {\n\t\t\tconst suggestions: ISuggestion[] = [];\n\t\t\tconst wordDefRegExp = new RegExp(wordDef, wordDefFlags);\n\t\t\tconst currentWord = model.getWordUntilPosition(position, wordDefRegExp).word;\n\n\t\t\tfor (const word of model.getAllUniqueWords(wordDefRegExp)) {\n\t\t\t\tif (word !== currentWord && isNaN(Number(word))) {\n\t\t\t\t\tsuggestions.push({\n\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\tlabel: word,\n\t\t\t\t\t\tinsertText: word,\n\t\t\t\t\t\tnoAutoAccept: true,\n\t\t\t\t\t\toverwriteBefore: currentWord.length\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn TPromise.as({ suggestions });\n\t\t}\n\t\treturn undefined;\n\t}\n\n\n\t// ---- END suggest --------------------------------------------------------------------------\n\n\tpublic navigateValueSet(modelUrl: string, range: IRange, up: boolean, wordDef: string, wordDefFlags: string): TPromise {\n\t\tlet model = this._getModel(modelUrl);\n\t\tif (!model) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet wordDefRegExp = new RegExp(wordDef, wordDefFlags);\n\n\t\tif (range.startColumn === range.endColumn) {\n\t\t\trange = {\n\t\t\t\tstartLineNumber: range.startLineNumber,\n\t\t\t\tstartColumn: range.startColumn,\n\t\t\t\tendLineNumber: range.endLineNumber,\n\t\t\t\tendColumn: range.endColumn + 1\n\t\t\t};\n\t\t}\n\n\t\tlet selectionText = model.getValueInRange(range);\n\n\t\tlet wordRange = model.getWordAtPosition({ lineNumber: range.startLineNumber, column: range.startColumn }, wordDefRegExp);\n\t\tlet word: string = null;\n\t\tif (wordRange !== null) {\n\t\t\tword = model.getValueInRange(wordRange);\n\t\t}\n\n\t\tlet result = BasicInplaceReplace.INSTANCE.navigateValueSet(range, selectionText, wordRange, word, up);\n\t\treturn TPromise.as(result);\n\t}\n\n\t// ---- BEGIN foreign module support --------------------------------------------------------------------------\n\n\tpublic loadForeignModule(moduleId: string, createData: any): TPromise {\n\t\treturn new TPromise((c, e) => {\n\t\t\t// Use the global require to be sure to get the global config\n\t\t\t(self).require([moduleId], (foreignModule: { create: (ctx: IWorkerContext, createData: any) => any; }) => {\n\t\t\t\tlet ctx: IWorkerContext = {\n\t\t\t\t\tgetMirrorModels: (): IMirrorModel[] => {\n\t\t\t\t\t\treturn this._getModels();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tthis._foreignModule = foreignModule.create(ctx, createData);\n\n\t\t\t\tlet methods: string[] = [];\n\t\t\t\tfor (let prop in this._foreignModule) {\n\t\t\t\t\tif (typeof this._foreignModule[prop] === 'function') {\n\t\t\t\t\t\tmethods.push(prop);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tc(methods);\n\n\t\t\t}, e);\n\t\t});\n\t}\n\n\t// foreign method request\n\tpublic fmr(method: string, args: any[]): TPromise {\n\t\tif (!this._foreignModule || typeof this._foreignModule[method] !== 'function') {\n\t\t\treturn TPromise.wrapError(new Error('Missing requestHandler or method: ' + method));\n\t\t}\n\n\t\ttry {\n\t\t\treturn TPromise.as(this._foreignModule[method].apply(this._foreignModule, args));\n\t\t} catch (e) {\n\t\t\treturn TPromise.wrapError(e);\n\t\t}\n\t}\n\n\t// ---- END foreign module support --------------------------------------------------------------------------\n}\n\n/**\n * @internal\n */\nexport class EditorSimpleWorkerImpl extends BaseEditorSimpleWorker implements IRequestHandler, IDisposable {\n\t_requestHandlerTrait: any;\n\n\tprivate _models: { [uri: string]: MirrorModel; };\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis._models = Object.create(null);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._models = Object.create(null);\n\t}\n\n\tprotected _getModel(uri: string): ICommonModel {\n\t\treturn this._models[uri];\n\t}\n\n\tprotected _getModels(): ICommonModel[] {\n\t\tlet all: MirrorModel[] = [];\n\t\tObject.keys(this._models).forEach((key) => all.push(this._models[key]));\n\t\treturn all;\n\t}\n\n\tpublic acceptNewModel(data: IRawModelData): void {\n\t\tthis._models[data.url] = new MirrorModel(URI.parse(data.url), data.lines, data.EOL, data.versionId);\n\t}\n\n\tpublic acceptModelChanged(strURL: string, e: IModelChangedEvent): void {\n\t\tif (!this._models[strURL]) {\n\t\t\treturn;\n\t\t}\n\t\tlet model = this._models[strURL];\n\t\tmodel.onEvents(e);\n\t}\n\n\tpublic acceptRemovedModel(strURL: string): void {\n\t\tif (!this._models[strURL]) {\n\t\t\treturn;\n\t\t}\n\t\tdelete this._models[strURL];\n\t}\n}\n\n/**\n * Called on the worker side\n * @internal\n */\nexport function create(): IRequestHandler {\n\treturn new EditorSimpleWorkerImpl();\n}\n\nvar global: any = self;\nlet isWebWorker = (typeof global.importScripts === 'function');\nif (isWebWorker) {\n\tglobal.monaco = createMonacoBaseAPI();\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'use strict';\n\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\nimport { Disposable } from 'vs/base/common/lifecycle';\n\nexport class ViewEventHandler extends Disposable {\n\n\tprivate _shouldRender: boolean;\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis._shouldRender = true;\n\t}\n\n\tpublic shouldRender(): boolean {\n\t\treturn this._shouldRender;\n\t}\n\n\tpublic forceShouldRender(): void {\n\t\tthis._shouldRender = true;\n\t}\n\n\tprotected setShouldRender(): void {\n\t\tthis._shouldRender = true;\n\t}\n\n\tpublic onDidRender(): void {\n\t\tthis._shouldRender = false;\n\t}\n\n\t// --- begin event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\treturn false;\n\t}\n\tpublic onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean {\n\t\treturn false;\n\t}\n\tpublic onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean {\n\t\treturn false;\n\t}\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\treturn false;\n\t}\n\tpublic onFocusChanged(e: viewEvents.ViewFocusChangedEvent): boolean {\n\t\treturn false;\n\t}\n\tpublic onLineMappingChanged(e: viewEvents.ViewLineMappingChangedEvent): boolean {\n\t\treturn false;\n\t}\n\tpublic onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn false;\n\t}\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn false;\n\t}\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn false;\n\t}\n\tpublic onRevealRangeRequest(e: viewEvents.ViewRevealRangeRequestEvent): boolean {\n\t\treturn false;\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn false;\n\t}\n\tpublic onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean {\n\t\treturn false;\n\t}\n\tpublic onTokensColorsChanged(e: viewEvents.ViewTokensColorsChangedEvent): boolean {\n\t\treturn false;\n\t}\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn false;\n\t}\n\tpublic onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean {\n\t\treturn false;\n\t}\n\n\t// --- end event handlers\n\n\tpublic handleEvents(events: viewEvents.ViewEvent[]): void {\n\n\t\tlet shouldRender = false;\n\n\t\tfor (let i = 0, len = events.length; i < len; i++) {\n\t\t\tlet e = events[i];\n\n\t\t\tswitch (e.type) {\n\n\t\t\t\tcase viewEvents.ViewEventType.ViewConfigurationChanged:\n\t\t\t\t\tif (this.onConfigurationChanged(e)) {\n\t\t\t\t\t\tshouldRender = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase viewEvents.ViewEventType.ViewCursorStateChanged:\n\t\t\t\t\tif (this.onCursorStateChanged(e)) {\n\t\t\t\t\t\tshouldRender = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase viewEvents.ViewEventType.ViewDecorationsChanged:\n\t\t\t\t\tif (this.onDecorationsChanged(e)) {\n\t\t\t\t\t\tshouldRender = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase viewEvents.ViewEventType.ViewFlushed:\n\t\t\t\t\tif (this.onFlushed(e)) {\n\t\t\t\t\t\tshouldRender = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase viewEvents.ViewEventType.ViewFocusChanged:\n\t\t\t\t\tif (this.onFocusChanged(e)) {\n\t\t\t\t\t\tshouldRender = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase viewEvents.ViewEventType.ViewLineMappingChanged:\n\t\t\t\t\tif (this.onLineMappingChanged(e)) {\n\t\t\t\t\t\tshouldRender = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase viewEvents.ViewEventType.ViewLinesChanged:\n\t\t\t\t\tif (this.onLinesChanged(e)) {\n\t\t\t\t\t\tshouldRender = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase viewEvents.ViewEventType.ViewLinesDeleted:\n\t\t\t\t\tif (this.onLinesDeleted(e)) {\n\t\t\t\t\t\tshouldRender = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase viewEvents.ViewEventType.ViewLinesInserted:\n\t\t\t\t\tif (this.onLinesInserted(e)) {\n\t\t\t\t\t\tshouldRender = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase viewEvents.ViewEventType.ViewRevealRangeRequest:\n\t\t\t\t\tif (this.onRevealRangeRequest(e)) {\n\t\t\t\t\t\tshouldRender = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase viewEvents.ViewEventType.ViewScrollChanged:\n\t\t\t\t\tif (this.onScrollChanged(e)) {\n\t\t\t\t\t\tshouldRender = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase viewEvents.ViewEventType.ViewTokensChanged:\n\t\t\t\t\tif (this.onTokensChanged(e)) {\n\t\t\t\t\t\tshouldRender = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase viewEvents.ViewEventType.ViewTokensColorsChanged:\n\t\t\t\t\tif (this.onTokensColorsChanged(e)) {\n\t\t\t\t\t\tshouldRender = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase viewEvents.ViewEventType.ViewZonesChanged:\n\t\t\t\t\tif (this.onZonesChanged(e)) {\n\t\t\t\t\t\tshouldRender = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\n\t\t\t\tcase viewEvents.ViewEventType.ViewThemeChanged:\n\t\t\t\t\tif (this.onThemeChanged(e)) {\n\t\t\t\t\t\tshouldRender = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.info('View received unknown event: ');\n\t\t\t\t\tconsole.info(e);\n\t\t\t}\n\t\t}\n\n\t\tif (shouldRender) {\n\t\t\tthis._shouldRender = true;\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { ViewEventHandler } from 'vs/editor/common/viewModel/viewEventHandler';\nimport { RenderingContext } from 'vs/editor/common/view/renderingContext';\n\nexport abstract class DynamicViewOverlay extends ViewEventHandler {\n\n\tpublic abstract prepareRender(ctx: RenderingContext): void;\n\n\tpublic abstract render(startLineNumber: number, lineNumber: number): string;\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'use strict';\n\nimport { ViewEventHandler } from 'vs/editor/common/viewModel/viewEventHandler';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/view/renderingContext';\nimport { FastDomNode } from 'vs/base/browser/fastDomNode';\n\nexport abstract class ViewPart extends ViewEventHandler {\n\n\t_context: ViewContext;\n\n\tconstructor(context: ViewContext) {\n\t\tsuper();\n\t\tthis._context = context;\n\t\tthis._context.addEventHandler(this);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._context.removeEventHandler(this);\n\t\tthis._context = null;\n\t\tsuper.dispose();\n\t}\n\n\tpublic abstract prepareRender(ctx: RenderingContext): void;\n\tpublic abstract render(ctx: RestrictedRenderingContext): void;\n}\n\nexport const enum PartFingerprint {\n\tNone,\n\tContentWidgets,\n\tOverflowingContentWidgets,\n\tOverflowGuard,\n\tOverlayWidgets,\n\tScrollableElement,\n\tTextArea,\n\tViewLines,\n\tMinimap\n}\n\nexport class PartFingerprints {\n\n\tpublic static write(target: Element | FastDomNode, partId: PartFingerprint) {\n\t\tif (target instanceof FastDomNode) {\n\t\t\ttarget.setAttribute('data-mprt', String(partId));\n\t\t} else {\n\t\t\ttarget.setAttribute('data-mprt', String(partId));\n\t\t}\n\t}\n\n\tpublic static read(target: Element): PartFingerprint {\n\t\tlet r = target.getAttribute('data-mprt');\n\t\tif (r === null) {\n\t\t\treturn PartFingerprint.None;\n\t\t}\n\t\treturn parseInt(r, 10);\n\t}\n\n\tpublic static collect(child: Element, stopAt: Element): Uint8Array {\n\t\tlet result: PartFingerprint[] = [], resultLen = 0;\n\n\t\twhile (child && child !== document.body) {\n\t\t\tif (child === stopAt) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (child.nodeType === child.ELEMENT_NODE) {\n\t\t\t\tresult[resultLen++] = this.read(child);\n\t\t\t}\n\t\t\tchild = child.parentElement;\n\t\t}\n\n\t\tlet r = new Uint8Array(resultLen);\n\t\tfor (let i = 0; i < resultLen; i++) {\n\t\t\tr[i] = result[resultLen - i - 1];\n\t\t}\n\t\treturn r;\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport * as dom from 'vs/base/browser/dom';\nimport { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';\nimport { ContentWidgetPositionPreference, IContentWidget } from 'vs/editor/browser/editorBrowser';\nimport { ViewPart, PartFingerprint, PartFingerprints } from 'vs/editor/browser/view/viewPart';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/view/renderingContext';\nimport { Position, IPosition } from 'vs/editor/common/core/position';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\n\nclass Coordinate {\n\t_coordinateBrand: void;\n\n\tpublic readonly top: number;\n\tpublic readonly left: number;\n\n\tconstructor(top: number, left: number) {\n\t\tthis.top = top;\n\t\tthis.left = left;\n\t}\n}\n\nexport class ViewContentWidgets extends ViewPart {\n\n\tprivate _viewDomNode: FastDomNode;\n\tprivate _widgets: { [key: string]: Widget; };\n\n\tpublic domNode: FastDomNode;\n\tpublic overflowingContentWidgetsDomNode: FastDomNode;\n\n\tconstructor(context: ViewContext, viewDomNode: FastDomNode) {\n\t\tsuper(context);\n\t\tthis._viewDomNode = viewDomNode;\n\t\tthis._widgets = {};\n\n\t\tthis.domNode = createFastDomNode(document.createElement('div'));\n\t\tPartFingerprints.write(this.domNode, PartFingerprint.ContentWidgets);\n\t\tthis.domNode.setClassName('contentWidgets');\n\t\tthis.domNode.setPosition('absolute');\n\t\tthis.domNode.setTop(0);\n\n\t\tthis.overflowingContentWidgetsDomNode = createFastDomNode(document.createElement('div'));\n\t\tPartFingerprints.write(this.overflowingContentWidgetsDomNode, PartFingerprint.OverflowingContentWidgets);\n\t\tthis.overflowingContentWidgetsDomNode.setClassName('overflowingContentWidgets');\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t\tthis._widgets = null;\n\t\tthis.domNode = null;\n\t}\n\n\t// --- begin event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tlet keys = Object.keys(this._widgets);\n\t\tfor (let i = 0, len = keys.length; i < len; i++) {\n\t\t\tconst widgetId = keys[i];\n\t\t\tthis._widgets[widgetId].onConfigurationChanged(e);\n\t\t}\n\t\treturn true;\n\t}\n\tpublic onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean {\n\t\t// true for inline decorations that can end up relayouting text\n\t\treturn true;\n\t}\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\n\t// ---- end view event handlers\n\n\tpublic addWidget(_widget: IContentWidget): void {\n\t\tconst myWidget = new Widget(this._context, this._viewDomNode, _widget);\n\t\tthis._widgets[myWidget.id] = myWidget;\n\n\t\tif (myWidget.allowEditorOverflow) {\n\t\t\tthis.overflowingContentWidgetsDomNode.appendChild(myWidget.domNode);\n\t\t} else {\n\t\t\tthis.domNode.appendChild(myWidget.domNode);\n\t\t}\n\n\t\tthis.setShouldRender();\n\t}\n\n\tpublic setWidgetPosition(widget: IContentWidget, position: IPosition, preference: ContentWidgetPositionPreference[]): void {\n\t\tconst myWidget = this._widgets[widget.getId()];\n\t\tmyWidget.setPosition(position, preference);\n\n\t\tthis.setShouldRender();\n\t}\n\n\tpublic removeWidget(widget: IContentWidget): void {\n\t\tconst widgetId = widget.getId();\n\t\tif (this._widgets.hasOwnProperty(widgetId)) {\n\t\t\tconst myWidget = this._widgets[widgetId];\n\t\t\tdelete this._widgets[widgetId];\n\n\t\t\tconst domNode = myWidget.domNode.domNode;\n\t\t\tdomNode.parentNode.removeChild(domNode);\n\t\t\tdomNode.removeAttribute('monaco-visible-content-widget');\n\n\t\t\tthis.setShouldRender();\n\t\t}\n\t}\n\n\tpublic shouldSuppressMouseDownOnWidget(widgetId: string): boolean {\n\t\tif (this._widgets.hasOwnProperty(widgetId)) {\n\t\t\treturn this._widgets[widgetId].suppressMouseDown;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\tlet keys = Object.keys(this._widgets);\n\t\tfor (let i = 0, len = keys.length; i < len; i++) {\n\t\t\tconst widgetId = keys[i];\n\t\t\tthis._widgets[widgetId].prepareRender(ctx);\n\t\t}\n\t}\n\n\tpublic render(ctx: RestrictedRenderingContext): void {\n\t\tlet keys = Object.keys(this._widgets);\n\t\tfor (let i = 0, len = keys.length; i < len; i++) {\n\t\t\tconst widgetId = keys[i];\n\t\t\tthis._widgets[widgetId].render(ctx);\n\t\t}\n\t}\n}\n\ninterface IBoxLayoutResult {\n\taboveTop: number;\n\tfitsAbove: boolean;\n\tbelowTop: number;\n\tfitsBelow: boolean;\n\tleft: number;\n}\n\nclass Widget {\n\tprivate readonly _context: ViewContext;\n\tprivate readonly _viewDomNode: FastDomNode;\n\tprivate readonly _actual: IContentWidget;\n\n\tpublic readonly domNode: FastDomNode;\n\tpublic readonly id: string;\n\tpublic readonly allowEditorOverflow: boolean;\n\tpublic readonly suppressMouseDown: boolean;\n\n\tprivate _fixedOverflowWidgets: boolean;\n\tprivate _contentWidth: number;\n\tprivate _contentLeft: number;\n\tprivate _lineHeight: number;\n\n\tprivate _position: IPosition;\n\tprivate _preference: ContentWidgetPositionPreference[];\n\tprivate _isVisible: boolean;\n\tprivate _renderData: Coordinate;\n\n\tconstructor(context: ViewContext, viewDomNode: FastDomNode, actual: IContentWidget) {\n\t\tthis._context = context;\n\t\tthis._viewDomNode = viewDomNode;\n\t\tthis._actual = actual;\n\t\tthis.domNode = createFastDomNode(this._actual.getDomNode());\n\n\t\tthis.id = this._actual.getId();\n\t\tthis.allowEditorOverflow = this._actual.allowEditorOverflow || false;\n\t\tthis.suppressMouseDown = this._actual.suppressMouseDown || false;\n\n\t\tthis._fixedOverflowWidgets = this._context.configuration.editor.viewInfo.fixedOverflowWidgets;\n\t\tthis._contentWidth = this._context.configuration.editor.layoutInfo.contentWidth;\n\t\tthis._contentLeft = this._context.configuration.editor.layoutInfo.contentLeft;\n\t\tthis._lineHeight = this._context.configuration.editor.lineHeight;\n\n\t\tthis._position = null;\n\t\tthis._preference = null;\n\t\tthis._isVisible = false;\n\t\tthis._renderData = null;\n\n\t\tthis.domNode.setPosition((this._fixedOverflowWidgets && this.allowEditorOverflow) ? 'fixed' : 'absolute');\n\t\tthis._updateMaxWidth();\n\t\tthis.domNode.setVisibility('hidden');\n\t\tthis.domNode.setAttribute('widgetId', this.id);\n\t}\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): void {\n\t\tif (e.lineHeight) {\n\t\t\tthis._lineHeight = this._context.configuration.editor.lineHeight;\n\t\t}\n\t\tif (e.layoutInfo) {\n\t\t\tthis._contentLeft = this._context.configuration.editor.layoutInfo.contentLeft;\n\t\t\tthis._contentWidth = this._context.configuration.editor.layoutInfo.contentWidth;\n\n\t\t\tthis._updateMaxWidth();\n\t\t}\n\t}\n\n\tprivate _updateMaxWidth(): void {\n\t\tconst maxWidth = this.allowEditorOverflow\n\t\t\t? window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth\n\t\t\t: this._contentWidth;\n\n\t\tthis.domNode.setMaxWidth(maxWidth);\n\t}\n\n\tpublic setPosition(position: IPosition, preference: ContentWidgetPositionPreference[]): void {\n\t\tthis._position = position;\n\t\tthis._preference = preference;\n\t}\n\n\tprivate _layoutBoxInViewport(topLeft: Coordinate, width: number, height: number, ctx: RenderingContext): IBoxLayoutResult {\n\t\t// Our visible box is split horizontally by the current line => 2 boxes\n\n\t\t// a) the box above the line\n\t\tlet aboveLineTop = topLeft.top;\n\t\tlet heightAboveLine = aboveLineTop;\n\n\t\t// b) the box under the line\n\t\tlet underLineTop = topLeft.top + this._lineHeight;\n\t\tlet heightUnderLine = ctx.viewportHeight - underLineTop;\n\n\t\tlet aboveTop = aboveLineTop - height;\n\t\tlet fitsAbove = (heightAboveLine >= height);\n\t\tlet belowTop = underLineTop;\n\t\tlet fitsBelow = (heightUnderLine >= height);\n\n\t\t// And its left\n\t\tlet actualLeft = topLeft.left;\n\t\tif (actualLeft + width > ctx.scrollLeft + ctx.viewportWidth) {\n\t\t\tactualLeft = ctx.scrollLeft + ctx.viewportWidth - width;\n\t\t}\n\t\tif (actualLeft < ctx.scrollLeft) {\n\t\t\tactualLeft = ctx.scrollLeft;\n\t\t}\n\n\t\treturn {\n\t\t\taboveTop: aboveTop,\n\t\t\tfitsAbove: fitsAbove,\n\t\t\tbelowTop: belowTop,\n\t\t\tfitsBelow: fitsBelow,\n\t\t\tleft: actualLeft\n\t\t};\n\t}\n\n\tprivate _layoutBoxInPage(topLeft: Coordinate, width: number, height: number, ctx: RenderingContext): IBoxLayoutResult {\n\t\tlet left0 = topLeft.left - ctx.scrollLeft;\n\n\t\tif (left0 + width < 0 || left0 > this._contentWidth) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet aboveTop = topLeft.top - height;\n\t\tlet belowTop = topLeft.top + this._lineHeight;\n\t\tlet left = left0 + this._contentLeft;\n\n\t\tlet domNodePosition = dom.getDomNodePagePosition(this._viewDomNode.domNode);\n\t\tlet absoluteAboveTop = domNodePosition.top + aboveTop - dom.StandardWindow.scrollY;\n\t\tlet absoluteBelowTop = domNodePosition.top + belowTop - dom.StandardWindow.scrollY;\n\t\tlet absoluteLeft = domNodePosition.left + left - dom.StandardWindow.scrollX;\n\n\t\tlet INNER_WIDTH = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\n\t\tlet INNER_HEIGHT = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;\n\n\t\t// Leave some clearance to the bottom\n\t\tlet TOP_PADDING = 22;\n\t\tlet BOTTOM_PADDING = 22;\n\n\t\tlet fitsAbove = (absoluteAboveTop >= TOP_PADDING),\n\t\t\tfitsBelow = (absoluteBelowTop + height <= INNER_HEIGHT - BOTTOM_PADDING);\n\n\t\tif (absoluteLeft + width + 20 > INNER_WIDTH) {\n\t\t\tlet delta = absoluteLeft - (INNER_WIDTH - width - 20);\n\t\t\tabsoluteLeft -= delta;\n\t\t\tleft -= delta;\n\t\t}\n\t\tif (absoluteLeft < 0) {\n\t\t\tlet delta = absoluteLeft;\n\t\t\tabsoluteLeft -= delta;\n\t\t\tleft -= delta;\n\t\t}\n\n\t\tif (this._fixedOverflowWidgets) {\n\t\t\taboveTop = absoluteAboveTop;\n\t\t\tbelowTop = absoluteBelowTop;\n\t\t\tleft = absoluteLeft;\n\t\t}\n\n\t\treturn { aboveTop, fitsAbove, belowTop, fitsBelow, left };\n\t}\n\n\tprivate _prepareRenderWidgetAtExactPositionOverflowing(topLeft: Coordinate): Coordinate {\n\t\treturn new Coordinate(topLeft.top, topLeft.left + this._contentLeft);\n\t}\n\n\tprivate _getTopLeft(ctx: RenderingContext, position: Position): Coordinate {\n\t\tconst visibleRange = ctx.visibleRangeForPosition(position);\n\t\tif (!visibleRange) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst top = ctx.getVerticalOffsetForLineNumber(position.lineNumber) - ctx.scrollTop;\n\t\treturn new Coordinate(top, visibleRange.left);\n\t}\n\n\tprivate _prepareRenderWidget(ctx: RenderingContext): Coordinate {\n\t\tif (!this._position || !this._preference) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Do not trust that widgets have a valid position\n\t\tlet validModelPosition = this._context.model.validateModelPosition(this._position);\n\n\t\tif (!this._context.model.coordinatesConverter.modelPositionIsVisible(validModelPosition)) {\n\t\t\t// this position is hidden by the view model\n\t\t\treturn null;\n\t\t}\n\n\t\tlet position = this._context.model.coordinatesConverter.convertModelPositionToViewPosition(validModelPosition);\n\n\t\tlet placement: IBoxLayoutResult = null;\n\t\tlet fetchPlacement = (): void => {\n\t\t\tif (placement) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst topLeft = this._getTopLeft(ctx, position);\n\t\t\tif (!topLeft) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst domNode = this.domNode.domNode;\n\t\t\tconst width = domNode.clientWidth;\n\t\t\tconst height = domNode.clientHeight;\n\n\t\t\tif (this.allowEditorOverflow) {\n\t\t\t\tplacement = this._layoutBoxInPage(topLeft, width, height, ctx);\n\t\t\t} else {\n\t\t\t\tplacement = this._layoutBoxInViewport(topLeft, width, height, ctx);\n\t\t\t}\n\t\t};\n\n\t\t// Do two passes, first for perfect fit, second picks first option\n\t\tfor (let pass = 1; pass <= 2; pass++) {\n\t\t\tfor (let i = 0; i < this._preference.length; i++) {\n\t\t\t\tlet pref = this._preference[i];\n\t\t\t\tif (pref === ContentWidgetPositionPreference.ABOVE) {\n\t\t\t\t\tfetchPlacement();\n\t\t\t\t\tif (!placement) {\n\t\t\t\t\t\t// Widget outside of viewport\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tif (pass === 2 || placement.fitsAbove) {\n\t\t\t\t\t\treturn new Coordinate(placement.aboveTop, placement.left);\n\t\t\t\t\t}\n\t\t\t\t} else if (pref === ContentWidgetPositionPreference.BELOW) {\n\t\t\t\t\tfetchPlacement();\n\t\t\t\t\tif (!placement) {\n\t\t\t\t\t\t// Widget outside of viewport\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tif (pass === 2 || placement.fitsBelow) {\n\t\t\t\t\t\treturn new Coordinate(placement.belowTop, placement.left);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst topLeft = this._getTopLeft(ctx, position);\n\t\t\t\t\tif (!topLeft) {\n\t\t\t\t\t\t// Widget outside of viewport\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tif (this.allowEditorOverflow) {\n\t\t\t\t\t\treturn this._prepareRenderWidgetAtExactPositionOverflowing(topLeft);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn topLeft;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\tthis._renderData = this._prepareRenderWidget(ctx);\n\t}\n\n\tpublic render(ctx: RestrictedRenderingContext): void {\n\t\tif (!this._renderData) {\n\t\t\t// This widget should be invisible\n\t\t\tif (this._isVisible) {\n\t\t\t\tthis.domNode.removeAttribute('monaco-visible-content-widget');\n\t\t\t\tthis._isVisible = false;\n\t\t\t\tthis.domNode.setVisibility('hidden');\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// This widget should be visible\n\t\tif (this.allowEditorOverflow) {\n\t\t\tthis.domNode.setTop(this._renderData.top);\n\t\t\tthis.domNode.setLeft(this._renderData.left);\n\t\t} else {\n\t\t\tthis.domNode.setTop(this._renderData.top + ctx.scrollTop - ctx.bigNumbersDelta);\n\t\t\tthis.domNode.setLeft(this._renderData.left);\n\t\t}\n\n\t\tif (!this._isVisible) {\n\t\t\tthis.domNode.setVisibility('inherit');\n\t\t\tthis.domNode.setAttribute('monaco-visible-content-widget', 'true');\n\t\t\tthis._isVisible = true;\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/css!./decorations';\nimport { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay';\nimport { Range } from 'vs/editor/common/core/range';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { RenderingContext, HorizontalRange } from 'vs/editor/common/view/renderingContext';\nimport { ViewModelDecoration } from 'vs/editor/common/viewModel/viewModel';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\n\nexport class DecorationsOverlay extends DynamicViewOverlay {\n\n\tprivate _context: ViewContext;\n\tprivate _lineHeight: number;\n\tprivate _typicalHalfwidthCharacterWidth: number;\n\tprivate _renderResult: string[];\n\n\tconstructor(context: ViewContext) {\n\t\tsuper();\n\t\tthis._context = context;\n\t\tthis._lineHeight = this._context.configuration.editor.lineHeight;\n\t\tthis._typicalHalfwidthCharacterWidth = this._context.configuration.editor.fontInfo.typicalHalfwidthCharacterWidth;\n\t\tthis._renderResult = null;\n\n\t\tthis._context.addEventHandler(this);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._context.removeEventHandler(this);\n\t\tthis._context = null;\n\t\tthis._renderResult = null;\n\t\tsuper.dispose();\n\t}\n\n\t// --- begin event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tif (e.lineHeight) {\n\t\t\tthis._lineHeight = this._context.configuration.editor.lineHeight;\n\t\t}\n\t\tif (e.fontInfo) {\n\t\t\tthis._typicalHalfwidthCharacterWidth = this._context.configuration.editor.fontInfo.typicalHalfwidthCharacterWidth;\n\t\t}\n\t\treturn true;\n\t}\n\tpublic onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn e.scrollTopChanged || e.scrollWidthChanged;\n\t}\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\t// --- end event handlers\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\tlet _decorations = ctx.getDecorationsInViewport();\n\n\t\t// Keep only decorations with `className`\n\t\tlet decorations: ViewModelDecoration[] = [], decorationsLen = 0;\n\t\tfor (let i = 0, len = _decorations.length; i < len; i++) {\n\t\t\tlet d = _decorations[i];\n\t\t\tif (d.source.options.className) {\n\t\t\t\tdecorations[decorationsLen++] = d;\n\t\t\t}\n\t\t}\n\n\t\t// Sort decorations for consistent render output\n\t\tdecorations = decorations.sort((a, b) => {\n\t\t\tlet aClassName = a.source.options.className;\n\t\t\tlet bClassName = b.source.options.className;\n\n\t\t\tif (aClassName < bClassName) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif (aClassName > bClassName) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn Range.compareRangesUsingStarts(a.range, b.range);\n\t\t});\n\n\t\tlet visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n\t\tlet visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n\t\tlet output: string[] = [];\n\t\tfor (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n\t\t\tlet lineIndex = lineNumber - visibleStartLineNumber;\n\t\t\toutput[lineIndex] = '';\n\t\t}\n\n\t\t// Render first whole line decorations and then regular decorations\n\t\tthis._renderWholeLineDecorations(ctx, decorations, output);\n\t\tthis._renderNormalDecorations(ctx, decorations, output);\n\t\tthis._renderResult = output;\n\t}\n\n\tprivate _renderWholeLineDecorations(ctx: RenderingContext, decorations: ViewModelDecoration[], output: string[]): void {\n\t\tlet lineHeight = String(this._lineHeight);\n\t\tlet visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n\t\tlet visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n\n\t\tfor (let i = 0, lenI = decorations.length; i < lenI; i++) {\n\t\t\tlet d = decorations[i];\n\n\t\t\tif (!d.source.options.isWholeLine) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet decorationOutput = (\n\t\t\t\t'
    '\n\t\t\t);\n\n\t\t\tlet startLineNumber = Math.max(d.range.startLineNumber, visibleStartLineNumber);\n\t\t\tlet endLineNumber = Math.min(d.range.endLineNumber, visibleEndLineNumber);\n\t\t\tfor (let j = startLineNumber; j <= endLineNumber; j++) {\n\t\t\t\tlet lineIndex = j - visibleStartLineNumber;\n\t\t\t\toutput[lineIndex] += decorationOutput;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _renderNormalDecorations(ctx: RenderingContext, decorations: ViewModelDecoration[], output: string[]): void {\n\t\tlet lineHeight = String(this._lineHeight);\n\t\tlet visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n\n\t\tfor (let i = 0, lenI = decorations.length; i < lenI; i++) {\n\t\t\tconst d = decorations[i];\n\n\t\t\tif (d.source.options.isWholeLine) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst className = d.source.options.className;\n\t\t\tconst showIfCollapsed = d.source.options.showIfCollapsed;\n\n\t\t\tlet range = d.range;\n\t\t\tif (showIfCollapsed && range.endColumn === 1 && range.endLineNumber !== range.startLineNumber) {\n\t\t\t\trange = new Range(range.startLineNumber, range.startColumn, range.endLineNumber - 1, this._context.model.getLineMaxColumn(range.endLineNumber - 1));\n\t\t\t}\n\n\t\t\tlet linesVisibleRanges = ctx.linesVisibleRangesForRange(range, /*TODO@Alex*/className === 'findMatch');\n\t\t\tif (!linesVisibleRanges) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tfor (let j = 0, lenJ = linesVisibleRanges.length; j < lenJ; j++) {\n\t\t\t\tlet lineVisibleRanges = linesVisibleRanges[j];\n\t\t\t\tconst lineIndex = lineVisibleRanges.lineNumber - visibleStartLineNumber;\n\n\t\t\t\tif (showIfCollapsed && lineVisibleRanges.ranges.length === 1) {\n\t\t\t\t\tconst singleVisibleRange = lineVisibleRanges.ranges[0];\n\t\t\t\t\tif (singleVisibleRange.width === 0) {\n\t\t\t\t\t\t// collapsed range case => make the decoration visible by faking its width\n\t\t\t\t\t\tlineVisibleRanges.ranges[0] = new HorizontalRange(singleVisibleRange.left, this._typicalHalfwidthCharacterWidth);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (let k = 0, lenK = lineVisibleRanges.ranges.length; k < lenK; k++) {\n\t\t\t\t\tconst visibleRange = lineVisibleRanges.ranges[k];\n\t\t\t\t\tconst decorationOutput = (\n\t\t\t\t\t\t'
    '\n\t\t\t\t\t);\n\t\t\t\t\toutput[lineIndex] += decorationOutput;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic render(startLineNumber: number, lineNumber: number): string {\n\t\tif (!this._renderResult) {\n\t\t\treturn '';\n\t\t}\n\t\tlet lineIndex = lineNumber - startLineNumber;\n\t\tif (lineIndex < 0 || lineIndex >= this._renderResult.length) {\n\t\t\tthrow new Error('Unexpected render request');\n\t\t}\n\t\treturn this._renderResult[lineIndex];\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/css!./glyphMargin';\nimport { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { RenderingContext } from 'vs/editor/common/view/renderingContext';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\n\nexport class DecorationToRender {\n\t_decorationToRenderBrand: void;\n\n\tpublic startLineNumber: number;\n\tpublic endLineNumber: number;\n\tpublic className: string;\n\n\tconstructor(startLineNumber: number, endLineNumber: number, className: string) {\n\t\tthis.startLineNumber = +startLineNumber;\n\t\tthis.endLineNumber = +endLineNumber;\n\t\tthis.className = String(className);\n\t}\n}\n\nexport abstract class DedupOverlay extends DynamicViewOverlay {\n\n\tprotected _render(visibleStartLineNumber: number, visibleEndLineNumber: number, decorations: DecorationToRender[]): string[][] {\n\n\t\tlet output: string[][] = [];\n\t\tfor (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n\t\t\tlet lineIndex = lineNumber - visibleStartLineNumber;\n\t\t\toutput[lineIndex] = [];\n\t\t}\n\n\t\tif (decorations.length === 0) {\n\t\t\treturn output;\n\t\t}\n\n\t\tdecorations.sort((a, b) => {\n\t\t\tif (a.className === b.className) {\n\t\t\t\tif (a.startLineNumber === b.startLineNumber) {\n\t\t\t\t\treturn a.endLineNumber - b.endLineNumber;\n\t\t\t\t}\n\t\t\t\treturn a.startLineNumber - b.startLineNumber;\n\t\t\t}\n\t\t\treturn (a.className < b.className ? -1 : 1);\n\t\t});\n\n\t\tlet prevClassName: string = null;\n\t\tlet prevEndLineIndex = 0;\n\t\tfor (let i = 0, len = decorations.length; i < len; i++) {\n\t\t\tlet d = decorations[i];\n\t\t\tlet className = d.className;\n\t\t\tlet startLineIndex = Math.max(d.startLineNumber, visibleStartLineNumber) - visibleStartLineNumber;\n\t\t\tlet endLineIndex = Math.min(d.endLineNumber, visibleEndLineNumber) - visibleStartLineNumber;\n\n\t\t\tif (prevClassName === className) {\n\t\t\t\tstartLineIndex = Math.max(prevEndLineIndex + 1, startLineIndex);\n\t\t\t\tprevEndLineIndex = Math.max(prevEndLineIndex, endLineIndex);\n\t\t\t} else {\n\t\t\t\tprevClassName = className;\n\t\t\t\tprevEndLineIndex = endLineIndex;\n\t\t\t}\n\n\t\t\tfor (let i = startLineIndex; i <= prevEndLineIndex; i++) {\n\t\t\t\toutput[i].push(prevClassName);\n\t\t\t}\n\t\t}\n\n\t\treturn output;\n\t}\n}\n\nexport class GlyphMarginOverlay extends DedupOverlay {\n\n\tprivate _context: ViewContext;\n\tprivate _lineHeight: number;\n\tprivate _glyphMargin: boolean;\n\tprivate _glyphMarginLeft: number;\n\tprivate _glyphMarginWidth: number;\n\tprivate _renderResult: string[];\n\n\tconstructor(context: ViewContext) {\n\t\tsuper();\n\t\tthis._context = context;\n\t\tthis._lineHeight = this._context.configuration.editor.lineHeight;\n\t\tthis._glyphMargin = this._context.configuration.editor.viewInfo.glyphMargin;\n\t\tthis._glyphMarginLeft = this._context.configuration.editor.layoutInfo.glyphMarginLeft;\n\t\tthis._glyphMarginWidth = this._context.configuration.editor.layoutInfo.glyphMarginWidth;\n\t\tthis._renderResult = null;\n\t\tthis._context.addEventHandler(this);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._context.removeEventHandler(this);\n\t\tthis._context = null;\n\t\tthis._renderResult = null;\n\t\tsuper.dispose();\n\t}\n\n\t// --- begin event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tif (e.lineHeight) {\n\t\t\tthis._lineHeight = this._context.configuration.editor.lineHeight;\n\t\t}\n\t\tif (e.viewInfo) {\n\t\t\tthis._glyphMargin = this._context.configuration.editor.viewInfo.glyphMargin;\n\t\t}\n\t\tif (e.layoutInfo) {\n\t\t\tthis._glyphMarginLeft = this._context.configuration.editor.layoutInfo.glyphMarginLeft;\n\t\t\tthis._glyphMarginWidth = this._context.configuration.editor.layoutInfo.glyphMarginWidth;\n\t\t}\n\t\treturn true;\n\t}\n\tpublic onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn e.scrollTopChanged;\n\t}\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\n\t// --- end event handlers\n\n\tprotected _getDecorations(ctx: RenderingContext): DecorationToRender[] {\n\t\tlet decorations = ctx.getDecorationsInViewport();\n\t\tlet r: DecorationToRender[] = [];\n\t\tfor (let i = 0, len = decorations.length; i < len; i++) {\n\t\t\tlet d = decorations[i];\n\t\t\tlet glyphMarginClassName = d.source.options.glyphMarginClassName;\n\t\t\tif (glyphMarginClassName) {\n\t\t\t\tr.push(new DecorationToRender(d.range.startLineNumber, d.range.endLineNumber, glyphMarginClassName));\n\t\t\t}\n\t\t}\n\t\treturn r;\n\t}\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\tif (!this._glyphMargin) {\n\t\t\tthis._renderResult = null;\n\t\t\treturn;\n\t\t}\n\n\t\tlet visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n\t\tlet visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n\t\tlet toRender = this._render(visibleStartLineNumber, visibleEndLineNumber, this._getDecorations(ctx));\n\n\t\tlet lineHeight = this._lineHeight.toString();\n\t\tlet left = this._glyphMarginLeft.toString();\n\t\tlet width = this._glyphMarginWidth.toString();\n\t\tlet common = '\" style=\"left:' + left + 'px;width:' + width + 'px' + ';height:' + lineHeight + 'px;\">';\n\n\t\tlet output: string[] = [];\n\t\tfor (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n\t\t\tlet lineIndex = lineNumber - visibleStartLineNumber;\n\t\t\tlet classNames = toRender[lineIndex];\n\n\t\t\tif (classNames.length === 0) {\n\t\t\t\toutput[lineIndex] = '';\n\t\t\t} else {\n\t\t\t\toutput[lineIndex] = (\n\t\t\t\t\t'
    = this._renderResult.length) {\n\t\t\tthrow new Error('Unexpected render request');\n\t\t}\n\t\treturn this._renderResult[lineIndex];\n\t}\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'use strict';\n\nimport 'vs/css!./linesDecorations';\nimport { DecorationToRender, DedupOverlay } from 'vs/editor/browser/viewParts/glyphMargin/glyphMargin';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { RenderingContext } from 'vs/editor/common/view/renderingContext';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\n\nexport class LinesDecorationsOverlay extends DedupOverlay {\n\n\tprivate _context: ViewContext;\n\n\tprivate _decorationsLeft: number;\n\tprivate _decorationsWidth: number;\n\tprivate _renderResult: string[];\n\n\tconstructor(context: ViewContext) {\n\t\tsuper();\n\t\tthis._context = context;\n\t\tthis._decorationsLeft = this._context.configuration.editor.layoutInfo.decorationsLeft;\n\t\tthis._decorationsWidth = this._context.configuration.editor.layoutInfo.decorationsWidth;\n\t\tthis._renderResult = null;\n\t\tthis._context.addEventHandler(this);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._context.removeEventHandler(this);\n\t\tthis._context = null;\n\t\tthis._renderResult = null;\n\t\tsuper.dispose();\n\t}\n\n\t// --- begin event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tif (e.layoutInfo) {\n\t\t\tthis._decorationsLeft = this._context.configuration.editor.layoutInfo.decorationsLeft;\n\t\t\tthis._decorationsWidth = this._context.configuration.editor.layoutInfo.decorationsWidth;\n\t\t}\n\t\treturn true;\n\t}\n\tpublic onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn e.scrollTopChanged;\n\t}\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\n\t// --- end event handlers\n\n\tprotected _getDecorations(ctx: RenderingContext): DecorationToRender[] {\n\t\tlet decorations = ctx.getDecorationsInViewport();\n\t\tlet r: DecorationToRender[] = [];\n\t\tfor (let i = 0, len = decorations.length; i < len; i++) {\n\t\t\tlet d = decorations[i];\n\t\t\tlet linesDecorationsClassName = d.source.options.linesDecorationsClassName;\n\t\t\tif (linesDecorationsClassName) {\n\t\t\t\tr.push(new DecorationToRender(d.range.startLineNumber, d.range.endLineNumber, linesDecorationsClassName));\n\t\t\t}\n\t\t}\n\t\treturn r;\n\t}\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\tlet visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n\t\tlet visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n\t\tlet toRender = this._render(visibleStartLineNumber, visibleEndLineNumber, this._getDecorations(ctx));\n\n\t\tlet left = this._decorationsLeft.toString();\n\t\tlet width = this._decorationsWidth.toString();\n\t\tlet common = '\" style=\"left:' + left + 'px;width:' + width + 'px;\">
    ';\n\n\t\tlet output: string[] = [];\n\t\tfor (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n\t\t\tlet lineIndex = lineNumber - visibleStartLineNumber;\n\t\t\tlet classNames = toRender[lineIndex];\n\t\t\tlet lineOutput = '';\n\t\t\tfor (let i = 0, len = classNames.length; i < len; i++) {\n\t\t\t\tlineOutput += '
    ;\n\tprivate _canUseLayerHinting: boolean;\n\tprivate _contentLeft: number;\n\tprivate _glyphMarginLeft: number;\n\tprivate _glyphMarginWidth: number;\n\tprivate _glyphMarginBackgroundDomNode: FastDomNode;\n\n\tconstructor(context: ViewContext) {\n\t\tsuper(context);\n\t\tthis._canUseLayerHinting = this._context.configuration.editor.canUseLayerHinting;\n\t\tthis._contentLeft = this._context.configuration.editor.layoutInfo.contentLeft;\n\t\tthis._glyphMarginLeft = this._context.configuration.editor.layoutInfo.glyphMarginLeft;\n\t\tthis._glyphMarginWidth = this._context.configuration.editor.layoutInfo.glyphMarginWidth;\n\n\t\tthis._domNode = this._createDomNode();\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t}\n\n\tpublic getDomNode(): FastDomNode {\n\t\treturn this._domNode;\n\t}\n\n\tprivate _createDomNode(): FastDomNode {\n\t\tlet domNode = createFastDomNode(document.createElement('div'));\n\t\tdomNode.setClassName('margin');\n\t\tdomNode.setPosition('absolute');\n\t\tdomNode.setAttribute('role', 'presentation');\n\t\tdomNode.setAttribute('aria-hidden', 'true');\n\n\t\tthis._glyphMarginBackgroundDomNode = createFastDomNode(document.createElement('div'));\n\t\tthis._glyphMarginBackgroundDomNode.setClassName(Margin.CLASS_NAME);\n\n\t\tdomNode.appendChild(this._glyphMarginBackgroundDomNode);\n\t\treturn domNode;\n\t}\n\n\t// --- begin event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tif (e.canUseLayerHinting) {\n\t\t\tthis._canUseLayerHinting = this._context.configuration.editor.canUseLayerHinting;\n\t\t}\n\n\t\tif (e.layoutInfo) {\n\t\t\tthis._contentLeft = this._context.configuration.editor.layoutInfo.contentLeft;\n\t\t\tthis._glyphMarginLeft = this._context.configuration.editor.layoutInfo.glyphMarginLeft;\n\t\t\tthis._glyphMarginWidth = this._context.configuration.editor.layoutInfo.glyphMarginWidth;\n\t\t}\n\n\t\treturn true;\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn super.onScrollChanged(e) || e.scrollTopChanged;\n\t}\n\n\t// --- end event handlers\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\t// Nothing to read\n\t}\n\n\tpublic render(ctx: RestrictedRenderingContext): void {\n\t\tthis._domNode.setLayerHinting(this._canUseLayerHinting);\n\t\tconst adjustedScrollTop = ctx.scrollTop - ctx.bigNumbersDelta;\n\t\tthis._domNode.setTop(-adjustedScrollTop);\n\n\t\tlet height = Math.min(ctx.scrollHeight, 1000000);\n\t\tthis._domNode.setHeight(height);\n\t\tthis._domNode.setWidth(this._contentLeft);\n\n\t\tthis._glyphMarginBackgroundDomNode.setLeft(this._glyphMarginLeft);\n\t\tthis._glyphMarginBackgroundDomNode.setWidth(this._glyphMarginWidth);\n\t\tthis._glyphMarginBackgroundDomNode.setHeight(height);\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/css!./marginDecorations';\nimport { DecorationToRender, DedupOverlay } from 'vs/editor/browser/viewParts/glyphMargin/glyphMargin';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { RenderingContext } from 'vs/editor/common/view/renderingContext';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\n\nexport class MarginViewLineDecorationsOverlay extends DedupOverlay {\n\tprivate _context: ViewContext;\n\tprivate _renderResult: string[];\n\n\tconstructor(context: ViewContext) {\n\t\tsuper();\n\t\tthis._context = context;\n\t\tthis._renderResult = null;\n\t\tthis._context.addEventHandler(this);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._context.removeEventHandler(this);\n\t\tthis._context = null;\n\t\tthis._renderResult = null;\n\t\tsuper.dispose();\n\t}\n\n\t// --- begin event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn e.scrollTopChanged;\n\t}\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\n\t// --- end event handlers\n\n\tprotected _getDecorations(ctx: RenderingContext): DecorationToRender[] {\n\t\tlet decorations = ctx.getDecorationsInViewport();\n\t\tlet r: DecorationToRender[] = [];\n\t\tfor (let i = 0, len = decorations.length; i < len; i++) {\n\t\t\tlet d = decorations[i];\n\t\t\tlet marginClassName = d.source.options.marginClassName;\n\t\t\tif (marginClassName) {\n\t\t\t\tr.push(new DecorationToRender(d.range.startLineNumber, d.range.endLineNumber, marginClassName));\n\t\t\t}\n\t\t}\n\t\treturn r;\n\t}\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\tlet visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n\t\tlet visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n\t\tlet toRender = this._render(visibleStartLineNumber, visibleEndLineNumber, this._getDecorations(ctx));\n\n\t\tlet output: string[] = [];\n\t\tfor (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n\t\t\tlet lineIndex = lineNumber - visibleStartLineNumber;\n\t\t\tlet classNames = toRender[lineIndex];\n\t\t\tlet lineOutput = '';\n\t\t\tfor (let i = 0, len = classNames.length; i < len; i++) {\n\t\t\t\tlineOutput += '
    ';\n\t\t\t}\n\t\t\toutput[lineIndex] = lineOutput;\n\t\t}\n\n\t\tthis._renderResult = output;\n\t}\n\n\tpublic render(startLineNumber: number, lineNumber: number): string {\n\t\tif (!this._renderResult) {\n\t\t\treturn '';\n\t\t}\n\t\treturn this._renderResult[lineNumber - startLineNumber];\n\t}\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'use strict';\n\nimport 'vs/css!./overlayWidgets';\nimport { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';\nimport { IOverlayWidget, OverlayWidgetPositionPreference } from 'vs/editor/browser/editorBrowser';\nimport { ViewPart, PartFingerprint, PartFingerprints } from 'vs/editor/browser/view/viewPart';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/view/renderingContext';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\n\ninterface IWidgetData {\n\twidget: IOverlayWidget;\n\tpreference: OverlayWidgetPositionPreference;\n\tdomNode: FastDomNode;\n}\n\ninterface IWidgetMap {\n\t[key: string]: IWidgetData;\n}\n\nexport class ViewOverlayWidgets extends ViewPart {\n\n\tprivate _widgets: IWidgetMap;\n\tprivate _domNode: FastDomNode;\n\n\tprivate _verticalScrollbarWidth: number;\n\tprivate _minimapWidth: number;\n\tprivate _horizontalScrollbarHeight: number;\n\tprivate _editorHeight: number;\n\tprivate _editorWidth: number;\n\n\tconstructor(context: ViewContext) {\n\t\tsuper(context);\n\n\t\tthis._widgets = {};\n\t\tthis._verticalScrollbarWidth = this._context.configuration.editor.layoutInfo.verticalScrollbarWidth;\n\t\tthis._minimapWidth = this._context.configuration.editor.layoutInfo.minimapWidth;\n\t\tthis._horizontalScrollbarHeight = this._context.configuration.editor.layoutInfo.horizontalScrollbarHeight;\n\t\tthis._editorHeight = this._context.configuration.editor.layoutInfo.height;\n\t\tthis._editorWidth = this._context.configuration.editor.layoutInfo.width;\n\n\t\tthis._domNode = createFastDomNode(document.createElement('div'));\n\t\tPartFingerprints.write(this._domNode, PartFingerprint.OverlayWidgets);\n\t\tthis._domNode.setClassName('overlayWidgets');\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t\tthis._widgets = null;\n\t}\n\n\tpublic getDomNode(): FastDomNode {\n\t\treturn this._domNode;\n\t}\n\n\t// ---- begin view event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tif (e.layoutInfo) {\n\t\t\tthis._verticalScrollbarWidth = this._context.configuration.editor.layoutInfo.verticalScrollbarWidth;\n\t\t\tthis._minimapWidth = this._context.configuration.editor.layoutInfo.minimapWidth;\n\t\t\tthis._horizontalScrollbarHeight = this._context.configuration.editor.layoutInfo.horizontalScrollbarHeight;\n\t\t\tthis._editorHeight = this._context.configuration.editor.layoutInfo.height;\n\t\t\tthis._editorWidth = this._context.configuration.editor.layoutInfo.width;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t// ---- end view event handlers\n\n\tpublic addWidget(widget: IOverlayWidget): void {\n\t\tconst domNode = createFastDomNode(widget.getDomNode());\n\n\t\tthis._widgets[widget.getId()] = {\n\t\t\twidget: widget,\n\t\t\tpreference: null,\n\t\t\tdomNode: domNode\n\t\t};\n\n\t\t// This is sync because a widget wants to be in the dom\n\t\tdomNode.setPosition('absolute');\n\t\tdomNode.setAttribute('widgetId', widget.getId());\n\t\tthis._domNode.appendChild(domNode);\n\n\t\tthis.setShouldRender();\n\t}\n\n\tpublic setWidgetPosition(widget: IOverlayWidget, preference: OverlayWidgetPositionPreference): boolean {\n\t\tlet widgetData = this._widgets[widget.getId()];\n\t\tif (widgetData.preference === preference) {\n\t\t\treturn false;\n\t\t}\n\n\t\twidgetData.preference = preference;\n\t\tthis.setShouldRender();\n\n\t\treturn true;\n\t}\n\n\tpublic removeWidget(widget: IOverlayWidget): void {\n\t\tlet widgetId = widget.getId();\n\t\tif (this._widgets.hasOwnProperty(widgetId)) {\n\t\t\tconst widgetData = this._widgets[widgetId];\n\t\t\tconst domNode = widgetData.domNode.domNode;\n\t\t\tdelete this._widgets[widgetId];\n\n\t\t\tdomNode.parentNode.removeChild(domNode);\n\t\t\tthis.setShouldRender();\n\t\t}\n\t}\n\n\tprivate _renderWidget(widgetData: IWidgetData): void {\n\t\tconst domNode = widgetData.domNode;\n\n\t\tif (widgetData.preference === null) {\n\t\t\tdomNode.unsetTop();\n\t\t\treturn;\n\t\t}\n\n\t\tif (widgetData.preference === OverlayWidgetPositionPreference.TOP_RIGHT_CORNER) {\n\t\t\tdomNode.setTop(0);\n\t\t\tdomNode.setRight((2 * this._verticalScrollbarWidth) + this._minimapWidth);\n\t\t} else if (widgetData.preference === OverlayWidgetPositionPreference.BOTTOM_RIGHT_CORNER) {\n\t\t\tlet widgetHeight = domNode.domNode.clientHeight;\n\t\t\tdomNode.setTop((this._editorHeight - widgetHeight - 2 * this._horizontalScrollbarHeight));\n\t\t\tdomNode.setRight((2 * this._verticalScrollbarWidth) + this._minimapWidth);\n\t\t} else if (widgetData.preference === OverlayWidgetPositionPreference.TOP_CENTER) {\n\t\t\tdomNode.setTop(0);\n\t\t\tdomNode.domNode.style.right = '50%';\n\t\t}\n\t}\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\t// Nothing to read\n\t}\n\n\tpublic render(ctx: RestrictedRenderingContext): void {\n\t\tthis._domNode.setWidth(this._editorWidth);\n\n\t\tlet keys = Object.keys(this._widgets);\n\t\tfor (let i = 0, len = keys.length; i < len; i++) {\n\t\t\tlet widgetId = keys[i];\n\t\t\tthis._renderWidget(this._widgets[widgetId]);\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';\nimport { IViewZone } from 'vs/editor/browser/editorBrowser';\nimport { ViewPart } from 'vs/editor/browser/view/viewPart';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { Position } from 'vs/editor/common/core/position';\nimport { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/view/renderingContext';\nimport { IViewWhitespaceViewportData } from 'vs/editor/common/viewModel/viewModel';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\n\nexport interface IMyViewZone {\n\twhitespaceId: number;\n\tdelegate: IViewZone;\n\tisVisible: boolean;\n\tdomNode: FastDomNode;\n\tmarginDomNode: FastDomNode;\n}\n\nexport interface IMyRenderData {\n\tdata: IViewWhitespaceViewportData[];\n}\n\ninterface IComputedViewZoneProps {\n\tafterViewLineNumber: number;\n\theightInPx: number;\n}\n\nexport class ViewZones extends ViewPart {\n\n\tprivate _zones: { [id: string]: IMyViewZone; };\n\tprivate _lineHeight: number;\n\tprivate _contentWidth: number;\n\tprivate _contentLeft: number;\n\n\tpublic domNode: FastDomNode;\n\n\tpublic marginDomNode: FastDomNode;\n\n\tconstructor(context: ViewContext) {\n\t\tsuper(context);\n\t\tthis._lineHeight = this._context.configuration.editor.lineHeight;\n\t\tthis._contentWidth = this._context.configuration.editor.layoutInfo.contentWidth;\n\t\tthis._contentLeft = this._context.configuration.editor.layoutInfo.contentLeft;\n\n\t\tthis.domNode = createFastDomNode(document.createElement('div'));\n\t\tthis.domNode.setClassName('view-zones');\n\t\tthis.domNode.setPosition('absolute');\n\t\tthis.domNode.setAttribute('role', 'presentation');\n\t\tthis.domNode.setAttribute('aria-hidden', 'true');\n\n\t\tthis.marginDomNode = createFastDomNode(document.createElement('div'));\n\t\tthis.marginDomNode.setClassName('margin-view-zones');\n\t\tthis.marginDomNode.setPosition('absolute');\n\t\tthis.marginDomNode.setAttribute('role', 'presentation');\n\t\tthis.marginDomNode.setAttribute('aria-hidden', 'true');\n\n\t\tthis._zones = {};\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t\tthis._zones = {};\n\t}\n\n\t// ---- begin view event handlers\n\n\tprivate _recomputeWhitespacesProps(): boolean {\n\t\tlet hadAChange = false;\n\n\t\tlet keys = Object.keys(this._zones);\n\t\tfor (let i = 0, len = keys.length; i < len; i++) {\n\t\t\tlet id = keys[i];\n\t\t\tlet zone = this._zones[id];\n\t\t\tlet props = this._computeWhitespaceProps(zone.delegate);\n\t\t\tif (this._context.viewLayout.changeWhitespace(parseInt(id, 10), props.afterViewLineNumber, props.heightInPx)) {\n\t\t\t\tthis._safeCallOnComputedHeight(zone.delegate, props.heightInPx);\n\t\t\t\thadAChange = true;\n\t\t\t}\n\t\t}\n\n\t\treturn hadAChange;\n\t}\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\n\t\tif (e.lineHeight) {\n\t\t\tthis._lineHeight = this._context.configuration.editor.lineHeight;\n\t\t\treturn this._recomputeWhitespacesProps();\n\t\t}\n\n\t\tif (e.layoutInfo) {\n\t\t\tthis._contentWidth = this._context.configuration.editor.layoutInfo.contentWidth;\n\t\t\tthis._contentLeft = this._context.configuration.editor.layoutInfo.contentLeft;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic onLineMappingChanged(e: viewEvents.ViewLineMappingChangedEvent): boolean {\n\t\treturn this._recomputeWhitespacesProps();\n\t}\n\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn true;\n\t}\n\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn e.scrollTopChanged || e.scrollWidthChanged;\n\t}\n\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn true;\n\t}\n\n\t// ---- end view event handlers\n\n\tprivate _getZoneOrdinal(zone: IViewZone): number {\n\n\t\tif (typeof zone.afterColumn !== 'undefined') {\n\t\t\treturn zone.afterColumn;\n\t\t}\n\n\t\treturn 10000;\n\t}\n\n\n\tprivate _computeWhitespaceProps(zone: IViewZone): IComputedViewZoneProps {\n\t\tif (zone.afterLineNumber === 0) {\n\t\t\treturn {\n\t\t\t\tafterViewLineNumber: 0,\n\t\t\t\theightInPx: this._heightInPixels(zone)\n\t\t\t};\n\t\t}\n\n\t\tlet zoneAfterModelPosition: Position;\n\t\tif (typeof zone.afterColumn !== 'undefined') {\n\t\t\tzoneAfterModelPosition = this._context.model.validateModelPosition({\n\t\t\t\tlineNumber: zone.afterLineNumber,\n\t\t\t\tcolumn: zone.afterColumn\n\t\t\t});\n\t\t} else {\n\t\t\tlet validAfterLineNumber = this._context.model.validateModelPosition({\n\t\t\t\tlineNumber: zone.afterLineNumber,\n\t\t\t\tcolumn: 1\n\t\t\t}).lineNumber;\n\n\t\t\tzoneAfterModelPosition = new Position(\n\t\t\t\tvalidAfterLineNumber,\n\t\t\t\tthis._context.model.getModelLineMaxColumn(validAfterLineNumber)\n\t\t\t);\n\t\t}\n\n\t\tlet zoneBeforeModelPosition: Position;\n\t\tif (zoneAfterModelPosition.column === this._context.model.getModelLineMaxColumn(zoneAfterModelPosition.lineNumber)) {\n\t\t\tzoneBeforeModelPosition = this._context.model.validateModelPosition({\n\t\t\t\tlineNumber: zoneAfterModelPosition.lineNumber + 1,\n\t\t\t\tcolumn: 1\n\t\t\t});\n\t\t} else {\n\t\t\tzoneBeforeModelPosition = this._context.model.validateModelPosition({\n\t\t\t\tlineNumber: zoneAfterModelPosition.lineNumber,\n\t\t\t\tcolumn: zoneAfterModelPosition.column + 1\n\t\t\t});\n\t\t}\n\n\t\tlet viewPosition = this._context.model.coordinatesConverter.convertModelPositionToViewPosition(zoneAfterModelPosition);\n\t\tlet isVisible = this._context.model.coordinatesConverter.modelPositionIsVisible(zoneBeforeModelPosition);\n\t\treturn {\n\t\t\tafterViewLineNumber: viewPosition.lineNumber,\n\t\t\theightInPx: (isVisible ? this._heightInPixels(zone) : 0)\n\t\t};\n\t}\n\n\tpublic addZone(zone: IViewZone): number {\n\t\tlet props = this._computeWhitespaceProps(zone);\n\t\tlet whitespaceId = this._context.viewLayout.addWhitespace(props.afterViewLineNumber, this._getZoneOrdinal(zone), props.heightInPx);\n\n\t\tlet myZone: IMyViewZone = {\n\t\t\twhitespaceId: whitespaceId,\n\t\t\tdelegate: zone,\n\t\t\tisVisible: false,\n\t\t\tdomNode: createFastDomNode(zone.domNode),\n\t\t\tmarginDomNode: zone.marginDomNode ? createFastDomNode(zone.marginDomNode) : null\n\t\t};\n\n\t\tthis._safeCallOnComputedHeight(myZone.delegate, props.heightInPx);\n\n\t\tmyZone.domNode.setPosition('absolute');\n\t\tmyZone.domNode.domNode.style.width = '100%';\n\t\tmyZone.domNode.setDisplay('none');\n\t\tmyZone.domNode.setAttribute('monaco-view-zone', myZone.whitespaceId.toString());\n\t\tthis.domNode.appendChild(myZone.domNode);\n\n\t\tif (myZone.marginDomNode) {\n\t\t\tmyZone.marginDomNode.setPosition('absolute');\n\t\t\tmyZone.marginDomNode.domNode.style.width = '100%';\n\t\t\tmyZone.marginDomNode.setDisplay('none');\n\t\t\tmyZone.marginDomNode.setAttribute('monaco-view-zone', myZone.whitespaceId.toString());\n\t\t\tthis.marginDomNode.appendChild(myZone.marginDomNode);\n\t\t}\n\n\t\tthis._zones[myZone.whitespaceId.toString()] = myZone;\n\n\n\t\tthis.setShouldRender();\n\n\t\treturn myZone.whitespaceId;\n\t}\n\n\tpublic removeZone(id: number): boolean {\n\t\tif (this._zones.hasOwnProperty(id.toString())) {\n\t\t\tlet zone = this._zones[id.toString()];\n\t\t\tdelete this._zones[id.toString()];\n\t\t\tthis._context.viewLayout.removeWhitespace(zone.whitespaceId);\n\n\t\t\tzone.domNode.removeAttribute('monaco-visible-view-zone');\n\t\t\tzone.domNode.removeAttribute('monaco-view-zone');\n\t\t\tzone.domNode.domNode.parentNode.removeChild(zone.domNode.domNode);\n\n\t\t\tif (zone.marginDomNode) {\n\t\t\t\tzone.marginDomNode.removeAttribute('monaco-visible-view-zone');\n\t\t\t\tzone.marginDomNode.removeAttribute('monaco-view-zone');\n\t\t\t\tzone.marginDomNode.domNode.parentNode.removeChild(zone.marginDomNode.domNode);\n\t\t\t}\n\n\t\t\tthis.setShouldRender();\n\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic layoutZone(id: number): boolean {\n\t\tlet changed = false;\n\t\tif (this._zones.hasOwnProperty(id.toString())) {\n\t\t\tlet zone = this._zones[id.toString()];\n\t\t\tlet props = this._computeWhitespaceProps(zone.delegate);\n\t\t\t// let newOrdinal = this._getZoneOrdinal(zone.delegate);\n\t\t\tchanged = this._context.viewLayout.changeWhitespace(zone.whitespaceId, props.afterViewLineNumber, props.heightInPx) || changed;\n\t\t\t// TODO@Alex: change `newOrdinal` too\n\n\t\t\tif (changed) {\n\t\t\t\tthis._safeCallOnComputedHeight(zone.delegate, props.heightInPx);\n\t\t\t\tthis.setShouldRender();\n\t\t\t}\n\t\t}\n\t\treturn changed;\n\t}\n\n\tpublic shouldSuppressMouseDownOnViewZone(id: number): boolean {\n\t\tif (this._zones.hasOwnProperty(id.toString())) {\n\t\t\tlet zone = this._zones[id.toString()];\n\t\t\treturn zone.delegate.suppressMouseDown;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate _heightInPixels(zone: IViewZone): number {\n\t\tif (typeof zone.heightInPx === 'number') {\n\t\t\treturn zone.heightInPx;\n\t\t}\n\t\tif (typeof zone.heightInLines === 'number') {\n\t\t\treturn this._lineHeight * zone.heightInLines;\n\t\t}\n\t\treturn this._lineHeight;\n\t}\n\n\tprivate _safeCallOnComputedHeight(zone: IViewZone, height: number): void {\n\t\tif (typeof zone.onComputedHeight === 'function') {\n\t\t\ttry {\n\t\t\t\tzone.onComputedHeight(height);\n\t\t\t} catch (e) {\n\t\t\t\tonUnexpectedError(e);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _safeCallOnDomNodeTop(zone: IViewZone, top: number): void {\n\t\tif (typeof zone.onDomNodeTop === 'function') {\n\t\t\ttry {\n\t\t\t\tzone.onDomNodeTop(top);\n\t\t\t} catch (e) {\n\t\t\t\tonUnexpectedError(e);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\t// Nothing to read\n\t}\n\n\tpublic render(ctx: RestrictedRenderingContext): void {\n\t\tconst visibleWhitespaces = ctx.viewportData.whitespaceViewportData;\n\t\tlet visibleZones: { [id: string]: IViewWhitespaceViewportData; } = {};\n\n\t\tlet hasVisibleZone = false;\n\t\tfor (let i = 0, len = visibleWhitespaces.length; i < len; i++) {\n\t\t\tvisibleZones[visibleWhitespaces[i].id.toString()] = visibleWhitespaces[i];\n\t\t\thasVisibleZone = true;\n\t\t}\n\n\t\tlet keys = Object.keys(this._zones);\n\t\tfor (let i = 0, len = keys.length; i < len; i++) {\n\t\t\tlet id = keys[i];\n\t\t\tlet zone = this._zones[id];\n\n\t\t\tlet newTop = 0;\n\t\t\tlet newHeight = 0;\n\t\t\tlet newDisplay = 'none';\n\t\t\tif (visibleZones.hasOwnProperty(id)) {\n\t\t\t\tnewTop = visibleZones[id].verticalOffset - ctx.bigNumbersDelta;\n\t\t\t\tnewHeight = visibleZones[id].height;\n\t\t\t\tnewDisplay = 'block';\n\t\t\t\t// zone is visible\n\t\t\t\tif (!zone.isVisible) {\n\t\t\t\t\tzone.domNode.setAttribute('monaco-visible-view-zone', 'true');\n\t\t\t\t\tzone.isVisible = true;\n\t\t\t\t}\n\t\t\t\tthis._safeCallOnDomNodeTop(zone.delegate, ctx.getScrolledTopFromAbsoluteTop(visibleZones[id].verticalOffset));\n\t\t\t} else {\n\t\t\t\tif (zone.isVisible) {\n\t\t\t\t\tzone.domNode.removeAttribute('monaco-visible-view-zone');\n\t\t\t\t\tzone.isVisible = false;\n\t\t\t\t}\n\t\t\t\tthis._safeCallOnDomNodeTop(zone.delegate, ctx.getScrolledTopFromAbsoluteTop(-1000000));\n\t\t\t}\n\t\t\tzone.domNode.setTop(newTop);\n\t\t\tzone.domNode.setHeight(newHeight);\n\t\t\tzone.domNode.setDisplay(newDisplay);\n\n\t\t\tif (zone.marginDomNode) {\n\t\t\t\tzone.marginDomNode.setTop(newTop);\n\t\t\t\tzone.marginDomNode.setHeight(newHeight);\n\t\t\t\tzone.marginDomNode.setDisplay(newDisplay);\n\t\t\t}\n\t\t}\n\n\t\tif (hasVisibleZone) {\n\t\t\tthis.domNode.setWidth(Math.max(ctx.scrollWidth, this._contentWidth));\n\t\t\tthis.marginDomNode.setWidth(this._contentLeft);\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { INewScrollPosition, IModelDecoration, EndOfLinePreference, IViewState } from 'vs/editor/common/editorCommon';\nimport { ViewLineToken } from 'vs/editor/common/core/viewLineToken';\nimport { Position, IPosition } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { ViewEvent, IViewEventListener } from 'vs/editor/common/view/viewEvents';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { Scrollable } from 'vs/base/common/scrollable';\nimport { IPartialViewLinesViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData';\nimport { IEditorWhitespace } from 'vs/editor/common/viewLayout/whitespaceComputer';\n\nexport interface IViewWhitespaceViewportData {\n\treadonly id: number;\n\treadonly afterLineNumber: number;\n\treadonly verticalOffset: number;\n\treadonly height: number;\n}\n\nexport class Viewport {\n\treadonly _viewportBrand: void;\n\n\treadonly top: number;\n\treadonly left: number;\n\treadonly width: number;\n\treadonly height: number;\n\n\tconstructor(top: number, left: number, width: number, height: number) {\n\t\tthis.top = top | 0;\n\t\tthis.left = left | 0;\n\t\tthis.width = width | 0;\n\t\tthis.height = height | 0;\n\t}\n}\n\nexport interface IViewLayout {\n\n\treadonly scrollable: Scrollable;\n\n\tonMaxLineWidthChanged(width: number): void;\n\n\tgetScrollLeft(): number;\n\tgetScrollWidth(): number;\n\tgetScrollHeight(): number;\n\tgetScrollTop(): number;\n\tgetCurrentViewport(): Viewport;\n\tsetScrollPosition(position: INewScrollPosition): void;\n\n\tgetLinesViewportData(): IPartialViewLinesViewportData;\n\tgetLinesViewportDataAtScrollTop(scrollTop: number): IPartialViewLinesViewportData;\n\tgetWhitespaces(): IEditorWhitespace[];\n\n\tsaveState(): IViewState;\n\trestoreState(state: IViewState): void;\n\n\tisAfterLines(verticalOffset: number): boolean;\n\tgetLineNumberAtVerticalOffset(verticalOffset: number): number;\n\tgetVerticalOffsetForLineNumber(lineNumber: number): number;\n\tgetWhitespaceAtVerticalOffset(verticalOffset: number): IViewWhitespaceViewportData;\n\n\t// --------------- Begin vertical whitespace management\n\n\t/**\n\t * Reserve rendering space.\n\t * @return an identifier that can be later used to remove or change the whitespace.\n\t */\n\taddWhitespace(afterLineNumber: number, ordinal: number, height: number): number;\n\t/**\n\t * Change the properties of a whitespace.\n\t */\n\tchangeWhitespace(id: number, newAfterLineNumber: number, newHeight: number): boolean;\n\t/**\n\t * Remove rendering space\n\t */\n\tremoveWhitespace(id: number): boolean;\n\t/**\n\t * Get the layout information for whitespaces currently in the viewport\n\t */\n\tgetWhitespaceViewportData(): IViewWhitespaceViewportData[];\n\n\t// TODO@Alex whitespace management should work via a change accessor sort of thing\n\tonHeightMaybeChanged(): void;\n\n\t// --------------- End vertical whitespace management\n}\n\nexport interface ICoordinatesConverter {\n\t// View -> Model conversion and related methods\n\tconvertViewPositionToModelPosition(viewPosition: Position): Position;\n\tconvertViewRangeToModelRange(viewRange: Range): Range;\n\tconvertViewSelectionToModelSelection(viewSelection: Selection): Selection;\n\tvalidateViewPosition(viewPosition: Position, expectedModelPosition: Position): Position;\n\tvalidateViewRange(viewRange: Range, expectedModelRange: Range): Range;\n\n\t// Model -> View conversion and related methods\n\tconvertModelPositionToViewPosition(modelPosition: Position): Position;\n\tconvertModelRangeToViewRange(modelRange: Range): Range;\n\tconvertModelSelectionToViewSelection(modelSelection: Selection): Selection;\n\tmodelPositionIsVisible(modelPosition: Position): boolean;\n}\n\nexport interface IViewModel {\n\n\taddEventListener(listener: IViewEventListener): IDisposable;\n\n\treadonly coordinatesConverter: ICoordinatesConverter;\n\n\treadonly viewLayout: IViewLayout;\n\n\t/**\n\t * Gives a hint that a lot of requests are about to come in for these line numbers.\n\t */\n\tsetViewport(startLineNumber: number, endLineNumber: number, centeredLineNumber: number): void;\n\n\tgetDecorationsInViewport(visibleRange: Range): ViewModelDecoration[];\n\tgetViewLineRenderingData(visibleRange: Range, lineNumber: number): ViewLineRenderingData;\n\tgetMinimapLinesRenderingData(startLineNumber: number, endLineNumber: number, needed: boolean[]): MinimapLinesRenderingData;\n\tgetCompletelyVisibleViewRange(): Range;\n\tgetCompletelyVisibleViewRangeAtScrollTop(scrollTop: number): Range;\n\n\tgetTabSize(): number;\n\tgetLineCount(): number;\n\tgetLineContent(lineNumber: number): string;\n\tgetLineIndentGuide(lineNumber: number): number;\n\tgetLineMinColumn(lineNumber: number): number;\n\tgetLineMaxColumn(lineNumber: number): number;\n\tgetLineFirstNonWhitespaceColumn(lineNumber: number): number;\n\tgetLineLastNonWhitespaceColumn(lineNumber: number): number;\n\tgetAllOverviewRulerDecorations(): ViewModelDecoration[];\n\tgetValueInRange(range: Range, eol: EndOfLinePreference): string;\n\n\tgetModelLineMaxColumn(modelLineNumber: number): number;\n\tvalidateModelPosition(modelPosition: IPosition): Position;\n\n\tgetPlainTextToCopy(ranges: Range[], emptySelectionClipboard: boolean): string;\n\tgetHTMLToCopy(ranges: Range[], emptySelectionClipboard: boolean): string;\n}\n\nexport class MinimapLinesRenderingData {\n\tpublic readonly tabSize: number;\n\tpublic readonly data: ViewLineData[];\n\n\tconstructor(\n\t\ttabSize: number,\n\t\tdata: ViewLineData[]\n\t) {\n\t\tthis.tabSize = tabSize;\n\t\tthis.data = data;\n\t}\n}\n\nexport class ViewLineData {\n\t_viewLineDataBrand: void;\n\n\t/**\n\t * The content at this view line.\n\t */\n\tpublic readonly content: string;\n\t/**\n\t * The minimum allowed column at this view line.\n\t */\n\tpublic readonly minColumn: number;\n\t/**\n\t * The maximum allowed column at this view line.\n\t */\n\tpublic readonly maxColumn: number;\n\t/**\n\t * The tokens at this view line.\n\t */\n\tpublic readonly tokens: ViewLineToken[];\n\n\tconstructor(\n\t\tcontent: string,\n\t\tminColumn: number,\n\t\tmaxColumn: number,\n\t\ttokens: ViewLineToken[]\n\t) {\n\t\tthis.content = content;\n\t\tthis.minColumn = minColumn;\n\t\tthis.maxColumn = maxColumn;\n\t\tthis.tokens = tokens;\n\t}\n}\n\nexport class ViewLineRenderingData {\n\t/**\n\t * The minimum allowed column at this view line.\n\t */\n\tpublic readonly minColumn: number;\n\t/**\n\t * The maximum allowed column at this view line.\n\t */\n\tpublic readonly maxColumn: number;\n\t/**\n\t * The content at this view line.\n\t */\n\tpublic readonly content: string;\n\t/**\n\t * If set to false, it is guaranteed that `content` contains only LTR chars.\n\t */\n\tpublic readonly mightContainRTL: boolean;\n\t/**\n\t * If set to false, it is guaranteed that `content` contains only basic ASCII chars.\n\t */\n\tpublic readonly mightContainNonBasicASCII: boolean;\n\t/**\n\t * The tokens at this view line.\n\t */\n\tpublic readonly tokens: ViewLineToken[];\n\t/**\n\t * Inline decorations at this view line.\n\t */\n\tpublic readonly inlineDecorations: InlineDecoration[];\n\t/**\n\t * The tab size for this view model.\n\t */\n\tpublic readonly tabSize: number;\n\n\tconstructor(\n\t\tminColumn: number,\n\t\tmaxColumn: number,\n\t\tcontent: string,\n\t\tmightContainRTL: boolean,\n\t\tmightContainNonBasicASCII: boolean,\n\t\ttokens: ViewLineToken[],\n\t\tinlineDecorations: InlineDecoration[],\n\t\ttabSize: number\n\t) {\n\t\tthis.minColumn = minColumn;\n\t\tthis.maxColumn = maxColumn;\n\t\tthis.content = content;\n\t\tthis.mightContainRTL = mightContainRTL;\n\t\tthis.mightContainNonBasicASCII = mightContainNonBasicASCII;\n\t\tthis.tokens = tokens;\n\t\tthis.inlineDecorations = inlineDecorations;\n\t\tthis.tabSize = tabSize;\n\t}\n}\n\nexport class InlineDecoration {\n\t_inlineDecorationBrand: void;\n\n\treadonly range: Range;\n\treadonly inlineClassName: string;\n\treadonly insertsBeforeOrAfter: boolean;\n\n\tconstructor(range: Range, inlineClassName: string, insertsBeforeOrAfter: boolean) {\n\t\tthis.range = range;\n\t\tthis.inlineClassName = inlineClassName;\n\t\tthis.insertsBeforeOrAfter = insertsBeforeOrAfter;\n\t}\n}\n\nexport class ViewModelDecoration {\n\t_viewModelDecorationBrand: void;\n\n\tpublic range: Range;\n\tpublic readonly source: IModelDecoration;\n\n\tconstructor(source: IModelDecoration) {\n\t\tthis.range = null;\n\t\tthis.source = source;\n\t}\n}\n\nexport class ViewEventsCollector {\n\n\tprivate _events: ViewEvent[];\n\tprivate _eventsLen = 0;\n\n\tconstructor() {\n\t\tthis._events = [];\n\t\tthis._eventsLen = 0;\n\t}\n\n\tpublic emit(event: ViewEvent) {\n\t\tthis._events[this._eventsLen++] = event;\n\t}\n\n\tpublic finalize(): ViewEvent[] {\n\t\tlet result = this._events;\n\t\tthis._events = null;\n\t\treturn result;\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { Scrollable, ScrollState, ScrollEvent, ScrollbarVisibility } from 'vs/base/common/scrollable';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { LinesLayout } from 'vs/editor/common/viewLayout/linesLayout';\nimport { IViewLayout, IViewWhitespaceViewportData, Viewport } from 'vs/editor/common/viewModel/viewModel';\nimport { IPartialViewLinesViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData';\nimport { IEditorWhitespace } from 'vs/editor/common/viewLayout/whitespaceComputer';\nimport Event from 'vs/base/common/event';\nimport { IConfigurationChangedEvent } from 'vs/editor/common/config/editorOptions';\n\nexport class ViewLayout extends Disposable implements IViewLayout {\n\n\tstatic LINES_HORIZONTAL_EXTRA_PX = 30;\n\n\tprivate readonly _configuration: editorCommon.IConfiguration;\n\tprivate readonly _linesLayout: LinesLayout;\n\n\tpublic readonly scrollable: Scrollable;\n\tpublic readonly onDidScroll: Event;\n\n\tconstructor(configuration: editorCommon.IConfiguration, lineCount: number) {\n\t\tsuper();\n\n\t\tthis._configuration = configuration;\n\t\tthis._linesLayout = new LinesLayout(lineCount, this._configuration.editor.lineHeight);\n\n\t\tthis.scrollable = this._register(new Scrollable());\n\t\tthis.scrollable.updateState({\n\t\t\twidth: configuration.editor.layoutInfo.contentWidth,\n\t\t\theight: configuration.editor.layoutInfo.contentHeight\n\t\t});\n\t\tthis.onDidScroll = this.scrollable.onScroll;\n\n\t\tthis._updateHeight();\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t}\n\n\tpublic getScrollable(): Scrollable {\n\t\treturn this.scrollable;\n\t}\n\n\tpublic onHeightMaybeChanged(): void {\n\t\tthis._updateHeight();\n\t}\n\n\t// ---- begin view event handlers\n\n\tpublic onConfigurationChanged(e: IConfigurationChangedEvent): void {\n\t\tif (e.lineHeight) {\n\t\t\tthis._linesLayout.setLineHeight(this._configuration.editor.lineHeight);\n\t\t}\n\t\tif (e.layoutInfo) {\n\t\t\tthis.scrollable.updateState({\n\t\t\t\twidth: this._configuration.editor.layoutInfo.contentWidth,\n\t\t\t\theight: this._configuration.editor.layoutInfo.contentHeight\n\t\t\t});\n\t\t}\n\t\tthis._updateHeight();\n\t}\n\tpublic onFlushed(lineCount: number): void {\n\t\tthis._linesLayout.onFlushed(lineCount);\n\t\tthis._updateHeight();\n\t}\n\tpublic onLinesDeleted(fromLineNumber: number, toLineNumber: number): void {\n\t\tthis._linesLayout.onLinesDeleted(fromLineNumber, toLineNumber);\n\t\tthis._updateHeight();\n\t}\n\tpublic onLinesInserted(fromLineNumber: number, toLineNumber: number): void {\n\t\tthis._linesLayout.onLinesInserted(fromLineNumber, toLineNumber);\n\t\tthis._updateHeight();\n\t}\n\n\t// ---- end view event handlers\n\n\tprivate _getHorizontalScrollbarHeight(scrollState: ScrollState): number {\n\t\tif (this._configuration.editor.viewInfo.scrollbar.horizontal === ScrollbarVisibility.Hidden) {\n\t\t\t// horizontal scrollbar not visible\n\t\t\treturn 0;\n\t\t}\n\t\tif (scrollState.width >= scrollState.scrollWidth) {\n\t\t\t// horizontal scrollbar not visible\n\t\t\treturn 0;\n\t\t}\n\t\treturn this._configuration.editor.viewInfo.scrollbar.horizontalScrollbarSize;\n\t}\n\n\tprivate _getTotalHeight(): number {\n\t\tconst scrollState = this.scrollable.getState();\n\n\t\tlet result = this._linesLayout.getLinesTotalHeight();\n\t\tif (this._configuration.editor.viewInfo.scrollBeyondLastLine) {\n\t\t\tresult += scrollState.height - this._configuration.editor.lineHeight;\n\t\t} else {\n\t\t\tresult += this._getHorizontalScrollbarHeight(scrollState);\n\t\t}\n\n\t\treturn Math.max(scrollState.height, result);\n\t}\n\n\tprivate _updateHeight(): void {\n\t\tthis.scrollable.updateState({\n\t\t\tscrollHeight: this._getTotalHeight()\n\t\t});\n\t}\n\n\t// ---- Layouting logic\n\n\tpublic getCurrentViewport(): Viewport {\n\t\tconst scrollState = this.scrollable.getState();\n\t\treturn new Viewport(\n\t\t\tscrollState.scrollTop,\n\t\t\tscrollState.scrollLeft,\n\t\t\tscrollState.width,\n\t\t\tscrollState.height\n\t\t);\n\t}\n\n\tprivate _computeScrollWidth(maxLineWidth: number, viewportWidth: number): number {\n\t\tlet isViewportWrapping = this._configuration.editor.wrappingInfo.isViewportWrapping;\n\t\tif (!isViewportWrapping) {\n\t\t\treturn Math.max(maxLineWidth + ViewLayout.LINES_HORIZONTAL_EXTRA_PX, viewportWidth);\n\t\t}\n\t\treturn Math.max(maxLineWidth, viewportWidth);\n\t}\n\n\tpublic onMaxLineWidthChanged(maxLineWidth: number): void {\n\t\tlet newScrollWidth = this._computeScrollWidth(maxLineWidth, this.getCurrentViewport().width);\n\t\tthis.scrollable.updateState({\n\t\t\tscrollWidth: newScrollWidth\n\t\t});\n\n\t\t// The height might depend on the fact that there is a horizontal scrollbar or not\n\t\tthis._updateHeight();\n\t}\n\n\t// ---- view state\n\n\tpublic saveState(): editorCommon.IViewState {\n\t\tconst scrollState = this.scrollable.getState();\n\t\tlet scrollTop = scrollState.scrollTop;\n\t\tlet firstLineNumberInViewport = this._linesLayout.getLineNumberAtOrAfterVerticalOffset(scrollTop);\n\t\tlet whitespaceAboveFirstLine = this._linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(firstLineNumberInViewport);\n\t\treturn {\n\t\t\tscrollTop: scrollTop,\n\t\t\tscrollTopWithoutViewZones: scrollTop - whitespaceAboveFirstLine,\n\t\t\tscrollLeft: scrollState.scrollLeft\n\t\t};\n\t}\n\n\tpublic restoreState(state: editorCommon.IViewState): void {\n\t\tlet restoreScrollTop = state.scrollTop;\n\t\tif (typeof state.scrollTopWithoutViewZones === 'number' && !this._linesLayout.hasWhitespace()) {\n\t\t\trestoreScrollTop = state.scrollTopWithoutViewZones;\n\t\t}\n\t\tthis.scrollable.updateState({\n\t\t\tscrollLeft: state.scrollLeft,\n\t\t\tscrollTop: restoreScrollTop\n\t\t});\n\t}\n\n\t// ---- IVerticalLayoutProvider\n\n\tpublic addWhitespace(afterLineNumber: number, ordinal: number, height: number): number {\n\t\treturn this._linesLayout.insertWhitespace(afterLineNumber, ordinal, height);\n\t}\n\tpublic changeWhitespace(id: number, newAfterLineNumber: number, newHeight: number): boolean {\n\t\treturn this._linesLayout.changeWhitespace(id, newAfterLineNumber, newHeight);\n\t}\n\tpublic removeWhitespace(id: number): boolean {\n\t\treturn this._linesLayout.removeWhitespace(id);\n\t}\n\tpublic getVerticalOffsetForLineNumber(lineNumber: number): number {\n\t\treturn this._linesLayout.getVerticalOffsetForLineNumber(lineNumber);\n\t}\n\tpublic isAfterLines(verticalOffset: number): boolean {\n\t\treturn this._linesLayout.isAfterLines(verticalOffset);\n\t}\n\tpublic getLineNumberAtVerticalOffset(verticalOffset: number): number {\n\t\treturn this._linesLayout.getLineNumberAtOrAfterVerticalOffset(verticalOffset);\n\t}\n\n\tpublic getWhitespaceAtVerticalOffset(verticalOffset: number): IViewWhitespaceViewportData {\n\t\treturn this._linesLayout.getWhitespaceAtVerticalOffset(verticalOffset);\n\t}\n\tpublic getLinesViewportData(): IPartialViewLinesViewportData {\n\t\tconst visibleBox = this.getCurrentViewport();\n\t\treturn this._linesLayout.getLinesViewportData(visibleBox.top, visibleBox.top + visibleBox.height);\n\t}\n\tpublic getLinesViewportDataAtScrollTop(scrollTop: number): IPartialViewLinesViewportData {\n\t\t// do some minimal validations on scrollTop\n\t\tconst scrollState = this.scrollable.getState();\n\t\tif (scrollTop + scrollState.height > scrollState.scrollHeight) {\n\t\t\tscrollTop = scrollState.scrollHeight - scrollState.height;\n\t\t}\n\t\tif (scrollTop < 0) {\n\t\t\tscrollTop = 0;\n\t\t}\n\t\treturn this._linesLayout.getLinesViewportData(scrollTop, scrollTop + scrollState.height);\n\t}\n\tpublic getWhitespaceViewportData(): IViewWhitespaceViewportData[] {\n\t\tconst visibleBox = this.getCurrentViewport();\n\t\treturn this._linesLayout.getWhitespaceViewportData(visibleBox.top, visibleBox.top + visibleBox.height);\n\t}\n\tpublic getWhitespaces(): IEditorWhitespace[] {\n\t\treturn this._linesLayout.getWhitespaces();\n\t}\n\n\t// ---- IScrollingProvider\n\n\n\tpublic getScrollWidth(): number {\n\t\tconst scrollState = this.scrollable.getState();\n\t\treturn scrollState.scrollWidth;\n\t}\n\tpublic getScrollLeft(): number {\n\t\tconst scrollState = this.scrollable.getState();\n\t\treturn scrollState.scrollLeft;\n\t}\n\tpublic getScrollHeight(): number {\n\t\tconst scrollState = this.scrollable.getState();\n\t\treturn scrollState.scrollHeight;\n\t}\n\tpublic getScrollTop(): number {\n\t\tconst scrollState = this.scrollable.getState();\n\t\treturn scrollState.scrollTop;\n\t}\n\n\tpublic setScrollPosition(position: editorCommon.INewScrollPosition): void {\n\t\tthis.scrollable.updateState(position);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Position } from 'vs/editor/common/core/position';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { InlineDecoration, ViewModelDecoration, ICoordinatesConverter } from 'vs/editor/common/viewModel/viewModel';\nimport { IModelDecorationsChangedEvent } from 'vs/editor/common/model/textModelEvents';\n\nexport interface IDecorationsViewportData {\n\t/**\n\t * decorations in the viewport.\n\t */\n\treadonly decorations: ViewModelDecoration[];\n\t/**\n\t * inline decorations grouped by each line in the viewport.\n\t */\n\treadonly inlineDecorations: InlineDecoration[][];\n}\n\nexport class ViewModelDecorations implements IDisposable {\n\n\tprivate readonly editorId: number;\n\tprivate readonly model: editorCommon.IModel;\n\tprivate readonly configuration: editorCommon.IConfiguration;\n\tprivate readonly _coordinatesConverter: ICoordinatesConverter;\n\n\tprivate _decorationsCache: { [decorationId: string]: ViewModelDecoration; };\n\n\tprivate _cachedModelDecorationsResolver: IDecorationsViewportData;\n\tprivate _cachedModelDecorationsResolverViewRange: Range;\n\n\tconstructor(editorId: number, model: editorCommon.IModel, configuration: editorCommon.IConfiguration, coordinatesConverter: ICoordinatesConverter) {\n\t\tthis.editorId = editorId;\n\t\tthis.model = model;\n\t\tthis.configuration = configuration;\n\t\tthis._coordinatesConverter = coordinatesConverter;\n\t\tthis._decorationsCache = Object.create(null);\n\t\tthis._clearCachedModelDecorationsResolver();\n\t}\n\n\tprivate _clearCachedModelDecorationsResolver(): void {\n\t\tthis._cachedModelDecorationsResolver = null;\n\t\tthis._cachedModelDecorationsResolverViewRange = null;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._decorationsCache = null;\n\t\tthis._clearCachedModelDecorationsResolver();\n\t}\n\n\tpublic reset(): void {\n\t\tthis._decorationsCache = Object.create(null);\n\t\tthis._clearCachedModelDecorationsResolver();\n\t}\n\n\tpublic onModelDecorationsChanged(e: IModelDecorationsChangedEvent): void {\n\t\tlet changedDecorations = e.changedDecorations;\n\t\tfor (let i = 0, len = changedDecorations.length; i < len; i++) {\n\t\t\tlet changedDecoration = changedDecorations[i];\n\t\t\tlet myDecoration = this._decorationsCache[changedDecoration];\n\t\t\tif (!myDecoration) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tmyDecoration.range = null;\n\t\t}\n\n\t\tlet removedDecorations = e.removedDecorations;\n\t\tif (this._decorationsCache !== null && this._decorationsCache !== undefined) {\n\t\t\tfor (let i = 0, len = removedDecorations.length; i < len; i++) {\n\t\t\t\tlet removedDecoration = removedDecorations[i];\n\t\t\t\tdelete this._decorationsCache[removedDecoration];\n\t\t\t}\n\t\t}\n\n\t\tthis._clearCachedModelDecorationsResolver();\n\t}\n\n\tpublic onLineMappingChanged(): void {\n\t\tthis._decorationsCache = Object.create(null);\n\n\t\tthis._clearCachedModelDecorationsResolver();\n\t}\n\n\tprivate _getOrCreateViewModelDecoration(modelDecoration: editorCommon.IModelDecoration): ViewModelDecoration {\n\t\tlet id = modelDecoration.id;\n\t\tlet r = this._decorationsCache[id];\n\t\tif (!r) {\n\t\t\tr = new ViewModelDecoration(modelDecoration);\n\t\t\tthis._decorationsCache[id] = r;\n\t\t}\n\t\tif (r.range === null) {\n\t\t\tconst modelRange = modelDecoration.range;\n\t\t\tif (modelDecoration.options.isWholeLine) {\n\t\t\t\tlet start = this._coordinatesConverter.convertModelPositionToViewPosition(new Position(modelRange.startLineNumber, 1));\n\t\t\t\tlet end = this._coordinatesConverter.convertModelPositionToViewPosition(new Position(modelRange.endLineNumber, this.model.getLineMaxColumn(modelRange.endLineNumber)));\n\t\t\t\tr.range = new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n\t\t\t} else {\n\t\t\t\tr.range = this._coordinatesConverter.convertModelRangeToViewRange(modelRange);\n\t\t\t}\n\t\t}\n\t\treturn r;\n\t}\n\n\tpublic getAllOverviewRulerDecorations(): ViewModelDecoration[] {\n\t\tlet modelDecorations = this.model.getAllDecorations(this.editorId, this.configuration.editor.readOnly);\n\t\tlet result: ViewModelDecoration[] = [], resultLen = 0;\n\t\tfor (let i = 0, len = modelDecorations.length; i < len; i++) {\n\t\t\tlet modelDecoration = modelDecorations[i];\n\t\t\tlet decorationOptions = modelDecoration.options;\n\n\t\t\tif (!decorationOptions.overviewRuler.color) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet viewModelDecoration = this._getOrCreateViewModelDecoration(modelDecoration);\n\t\t\tresult[resultLen++] = viewModelDecoration;\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic getDecorationsViewportData(viewRange: Range): IDecorationsViewportData {\n\t\tvar cacheIsValid = true;\n\t\tcacheIsValid = cacheIsValid && (this._cachedModelDecorationsResolver !== null);\n\t\tcacheIsValid = cacheIsValid && (viewRange.equalsRange(this._cachedModelDecorationsResolverViewRange));\n\t\tif (!cacheIsValid) {\n\t\t\tthis._cachedModelDecorationsResolver = this._getDecorationsViewportData(viewRange);\n\t\t\tthis._cachedModelDecorationsResolverViewRange = viewRange;\n\t\t}\n\t\treturn this._cachedModelDecorationsResolver;\n\t}\n\n\tprivate _getDecorationsViewportData(viewportRange: Range): IDecorationsViewportData {\n\t\tlet viewportModelRange = this._coordinatesConverter.convertViewRangeToModelRange(viewportRange);\n\t\tlet startLineNumber = viewportRange.startLineNumber;\n\t\tlet endLineNumber = viewportRange.endLineNumber;\n\t\tlet modelDecorations = this.model.getDecorationsInRange(viewportModelRange, this.editorId, this.configuration.editor.readOnly);\n\n\t\tlet decorationsInViewport: ViewModelDecoration[] = [], decorationsInViewportLen = 0;\n\t\tlet inlineDecorations: InlineDecoration[][] = [];\n\t\tfor (let j = startLineNumber; j <= endLineNumber; j++) {\n\t\t\tinlineDecorations[j - startLineNumber] = [];\n\t\t}\n\n\t\tfor (let i = 0, len = modelDecorations.length; i < len; i++) {\n\t\t\tlet modelDecoration = modelDecorations[i];\n\t\t\tlet decorationOptions = modelDecoration.options;\n\n\t\t\tlet viewModelDecoration = this._getOrCreateViewModelDecoration(modelDecoration);\n\t\t\tlet viewRange = viewModelDecoration.range;\n\n\t\t\tdecorationsInViewport[decorationsInViewportLen++] = viewModelDecoration;\n\n\t\t\tif (decorationOptions.inlineClassName) {\n\t\t\t\tlet inlineDecoration = new InlineDecoration(viewRange, decorationOptions.inlineClassName, false);\n\t\t\t\tlet intersectedStartLineNumber = Math.max(startLineNumber, viewRange.startLineNumber);\n\t\t\t\tlet intersectedEndLineNumber = Math.min(endLineNumber, viewRange.endLineNumber);\n\t\t\t\tfor (let j = intersectedStartLineNumber; j <= intersectedEndLineNumber; j++) {\n\t\t\t\t\tinlineDecorations[j - startLineNumber].push(inlineDecoration);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (decorationOptions.beforeContentClassName) {\n\t\t\t\tif (startLineNumber <= viewRange.startLineNumber && viewRange.startLineNumber <= endLineNumber) {\n\t\t\t\t\t// TODO: What happens if the startLineNumber and startColumn is at the end of a line?\n\t\t\t\t\tlet inlineDecoration = new InlineDecoration(\n\t\t\t\t\t\tnew Range(viewRange.startLineNumber, viewRange.startColumn, viewRange.startLineNumber, viewRange.startColumn + 1),\n\t\t\t\t\t\tdecorationOptions.beforeContentClassName,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t\tinlineDecorations[viewRange.startLineNumber - startLineNumber].push(inlineDecoration);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (decorationOptions.afterContentClassName) {\n\t\t\t\tif (startLineNumber <= viewRange.endLineNumber && viewRange.endLineNumber <= endLineNumber && viewRange.endColumn > 1) {\n\t\t\t\t\tlet inlineDecoration = new InlineDecoration(\n\t\t\t\t\t\tnew Range(viewRange.endLineNumber, viewRange.endColumn - 1, viewRange.endLineNumber, viewRange.endColumn),\n\t\t\t\t\t\tdecorationOptions.afterContentClassName,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t\tinlineDecorations[viewRange.endLineNumber - startLineNumber].push(inlineDecoration);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tdecorations: decorationsInViewport,\n\t\t\tinlineDecorations: inlineDecorations\n\t\t};\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { ICommand, ICursorStateComputerData, IEditOperationBuilder, ITokenizedModel } from 'vs/editor/common/editorCommon';\n\nexport class MoveCaretCommand implements ICommand {\n\n\tprivate _selection: Selection;\n\tprivate _isMovingLeft: boolean;\n\n\tprivate _cutStartIndex: number;\n\tprivate _cutEndIndex: number;\n\tprivate _moved: boolean;\n\n\tprivate _selectionId: string;\n\n\tconstructor(selection: Selection, isMovingLeft: boolean) {\n\t\tthis._selection = selection;\n\t\tthis._isMovingLeft = isMovingLeft;\n\t}\n\n\tpublic getEditOperations(model: ITokenizedModel, builder: IEditOperationBuilder): void {\n\t\tvar s = this._selection;\n\t\tthis._selectionId = builder.trackSelection(s);\n\t\tif (s.startLineNumber !== s.endLineNumber) {\n\t\t\treturn;\n\t\t}\n\t\tif (this._isMovingLeft && s.startColumn === 0) {\n\t\t\treturn;\n\t\t} else if (!this._isMovingLeft && s.endColumn === model.getLineMaxColumn(s.startLineNumber)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar lineNumber = s.selectionStartLineNumber;\n\t\tvar lineContent = model.getLineContent(lineNumber);\n\n\t\tvar left;\n\t\tvar middle;\n\t\tvar right;\n\n\t\tif (this._isMovingLeft) {\n\t\t\tleft = lineContent.substring(0, s.startColumn - 2);\n\t\t\tmiddle = lineContent.substring(s.startColumn - 1, s.endColumn - 1);\n\t\t\tright = lineContent.substring(s.startColumn - 2, s.startColumn - 1) + lineContent.substring(s.endColumn - 1);\n\t\t} else {\n\t\t\tleft = lineContent.substring(0, s.startColumn - 1) + lineContent.substring(s.endColumn - 1, s.endColumn);\n\t\t\tmiddle = lineContent.substring(s.startColumn - 1, s.endColumn - 1);\n\t\t\tright = lineContent.substring(s.endColumn);\n\t\t}\n\n\t\tvar newLineContent = left + middle + right;\n\n\t\tbuilder.addEditOperation(new Range(lineNumber, 1, lineNumber, model.getLineMaxColumn(lineNumber)), null);\n\t\tbuilder.addEditOperation(new Range(lineNumber, 1, lineNumber, 1), newLineContent);\n\n\t\tthis._cutStartIndex = s.startColumn + (this._isMovingLeft ? -1 : 1);\n\t\tthis._cutEndIndex = this._cutStartIndex + s.endColumn - s.startColumn;\n\t\tthis._moved = true;\n\t}\n\n\tpublic computeCursorState(model: ITokenizedModel, helper: ICursorStateComputerData): Selection {\n\t\tvar result = helper.getTrackedSelection(this._selectionId);\n\t\tif (this._moved) {\n\t\t\tresult = result.setStartPosition(result.startLineNumber, this._cutStartIndex);\n\t\t\tresult = result.setEndPosition(result.startLineNumber, this._cutEndIndex);\n\t\t}\n\t\treturn result;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { EditOperation } from 'vs/editor/common/core/editOperation';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { ICommentsConfiguration, LanguageConfigurationRegistry } from 'vs/editor/common/modes/languageConfigurationRegistry';\n\nexport class BlockCommentCommand implements editorCommon.ICommand {\n\n\tprivate _selection: Selection;\n\tprivate _usedEndToken: string;\n\n\tconstructor(selection: Selection) {\n\t\tthis._selection = selection;\n\t\tthis._usedEndToken = null;\n\t}\n\n\tpublic static _haystackHasNeedleAtOffset(haystack: string, needle: string, offset: number): boolean {\n\t\tif (offset < 0) {\n\t\t\treturn false;\n\t\t}\n\t\tvar needleLength = needle.length;\n\t\tvar haystackLength = haystack.length;\n\t\tif (offset + needleLength > haystackLength) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (var i = 0; i < needleLength; i++) {\n\t\t\tif (haystack.charCodeAt(offset + i) !== needle.charCodeAt(i)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tprivate _createOperationsForBlockComment(selection: Range, config: ICommentsConfiguration, model: editorCommon.ITokenizedModel, builder: editorCommon.IEditOperationBuilder): void {\n\t\tvar startLineNumber = selection.startLineNumber;\n\t\tvar startColumn = selection.startColumn;\n\t\tvar endLineNumber = selection.endLineNumber;\n\t\tvar endColumn = selection.endColumn;\n\n\t\tvar startToken = config.blockCommentStartToken;\n\t\tvar endToken = config.blockCommentEndToken;\n\n\t\tvar startTokenIndex = model.getLineContent(startLineNumber).lastIndexOf(startToken, startColumn - 1 + startToken.length);\n\t\tvar endTokenIndex = model.getLineContent(endLineNumber).indexOf(endToken, endColumn - 1 - endToken.length);\n\n\t\tvar ops: editorCommon.IIdentifiedSingleEditOperation[];\n\n\t\tif (startTokenIndex !== -1 && endTokenIndex !== -1) {\n\t\t\tops = BlockCommentCommand._createRemoveBlockCommentOperations(\n\t\t\t\tnew Range(startLineNumber, startTokenIndex + 1 + startToken.length, endLineNumber, endTokenIndex + 1), startToken, endToken\n\t\t\t);\n\t\t} else {\n\t\t\tops = BlockCommentCommand._createAddBlockCommentOperations(selection, startToken, endToken);\n\t\t\tthis._usedEndToken = ops.length === 1 ? endToken : null;\n\t\t}\n\n\t\tfor (var i = 0; i < ops.length; i++) {\n\t\t\tbuilder.addTrackedEditOperation(ops[i].range, ops[i].text);\n\t\t}\n\t}\n\n\tpublic static _createRemoveBlockCommentOperations(r: Range, startToken: string, endToken: string): editorCommon.IIdentifiedSingleEditOperation[] {\n\t\tvar res: editorCommon.IIdentifiedSingleEditOperation[] = [];\n\n\t\tif (!Range.isEmpty(r)) {\n\t\t\t// Remove block comment start\n\t\t\tres.push(EditOperation.delete(new Range(\n\t\t\t\tr.startLineNumber, r.startColumn - startToken.length,\n\t\t\t\tr.startLineNumber, r.startColumn\n\t\t\t)));\n\n\t\t\t// Remove block comment end\n\t\t\tres.push(EditOperation.delete(new Range(\n\t\t\t\tr.endLineNumber, r.endColumn,\n\t\t\t\tr.endLineNumber, r.endColumn + endToken.length\n\t\t\t)));\n\t\t} else {\n\t\t\t// Remove both continuously\n\t\t\tres.push(EditOperation.delete(new Range(\n\t\t\t\tr.startLineNumber, r.startColumn - startToken.length,\n\t\t\t\tr.endLineNumber, r.endColumn + endToken.length\n\t\t\t)));\n\t\t}\n\n\t\treturn res;\n\t}\n\n\tpublic static _createAddBlockCommentOperations(r: Range, startToken: string, endToken: string): editorCommon.IIdentifiedSingleEditOperation[] {\n\t\tvar res: editorCommon.IIdentifiedSingleEditOperation[] = [];\n\n\t\tif (!Range.isEmpty(r)) {\n\t\t\t// Insert block comment start\n\t\t\tres.push(EditOperation.insert(new Position(r.startLineNumber, r.startColumn), startToken + ' '));\n\n\t\t\t// Insert block comment end\n\t\t\tres.push(EditOperation.insert(new Position(r.endLineNumber, r.endColumn), ' ' + endToken));\n\t\t} else {\n\t\t\t// Insert both continuously\n\t\t\tres.push(EditOperation.replace(new Range(\n\t\t\t\tr.startLineNumber, r.startColumn,\n\t\t\t\tr.endLineNumber, r.endColumn\n\t\t\t), startToken + ' ' + endToken));\n\t\t}\n\n\t\treturn res;\n\t}\n\n\tpublic getEditOperations(model: editorCommon.ITokenizedModel, builder: editorCommon.IEditOperationBuilder): void {\n\t\tvar startLineNumber = this._selection.startLineNumber;\n\t\tvar startColumn = this._selection.startColumn;\n\t\tvar endLineNumber = this._selection.endLineNumber;\n\t\tvar endColumn = this._selection.endColumn;\n\n\t\tmodel.forceTokenization(startLineNumber);\n\t\tlet languageId = model.getLanguageIdAtPosition(startLineNumber, startColumn);\n\t\tlet config = LanguageConfigurationRegistry.getComments(languageId);\n\t\tif (!config || !config.blockCommentStartToken || !config.blockCommentEndToken) {\n\t\t\t// Mode does not support block comments\n\t\t\treturn;\n\t\t}\n\n\t\tthis._createOperationsForBlockComment(\n\t\t\tnew Range(startLineNumber, startColumn, endLineNumber, endColumn), config, model, builder\n\t\t);\n\t}\n\n\tpublic computeCursorState(model: editorCommon.ITokenizedModel, helper: editorCommon.ICursorStateComputerData): Selection {\n\t\tvar inverseEditOperations = helper.getInverseEditOperations();\n\t\tif (inverseEditOperations.length === 2) {\n\t\t\tvar startTokenEditOperation = inverseEditOperations[0];\n\t\t\tvar endTokenEditOperation = inverseEditOperations[1];\n\n\t\t\treturn new Selection(\n\t\t\t\tstartTokenEditOperation.range.endLineNumber,\n\t\t\t\tstartTokenEditOperation.range.endColumn,\n\t\t\t\tendTokenEditOperation.range.startLineNumber,\n\t\t\t\tendTokenEditOperation.range.startColumn\n\t\t\t);\n\t\t} else {\n\t\t\tvar srcRange = inverseEditOperations[0].range;\n\t\t\tvar deltaColumn = this._usedEndToken ? -this._usedEndToken.length - 1 : 0; // minus 1 space before endToken\n\t\t\treturn new Selection(\n\t\t\t\tsrcRange.endLineNumber,\n\t\t\t\tsrcRange.endColumn + deltaColumn,\n\t\t\t\tsrcRange.endLineNumber,\n\t\t\t\tsrcRange.endColumn + deltaColumn\n\t\t\t);\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as strings from 'vs/base/common/strings';\nimport { EditOperation } from 'vs/editor/common/core/editOperation';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { BlockCommentCommand } from './blockCommentCommand';\nimport { LanguageConfigurationRegistry } from 'vs/editor/common/modes/languageConfigurationRegistry';\nimport { CharCode } from 'vs/base/common/charCode';\n\nexport interface IInsertionPoint {\n\tignore: boolean;\n\tcommentStrOffset: number;\n}\n\nexport interface ILinePreflightData {\n\tignore: boolean;\n\tcommentStr: string;\n\tcommentStrOffset: number;\n\tcommentStrLength: number;\n}\n\nexport interface IPreflightData {\n\tsupported: boolean;\n\tshouldRemoveComments: boolean;\n\tlines: ILinePreflightData[];\n}\n\nexport interface ISimpleModel {\n\tgetLineContent(lineNumber: number): string;\n}\n\nexport const enum Type {\n\tToggle = 0,\n\tForceAdd = 1,\n\tForceRemove = 2\n}\n\nexport class LineCommentCommand implements editorCommon.ICommand {\n\n\tprivate _selection: Selection;\n\tprivate _selectionId: string;\n\tprivate _deltaColumn: number;\n\tprivate _moveEndPositionDown: boolean;\n\tprivate _tabSize: number;\n\tprivate _type: Type;\n\n\tconstructor(selection: Selection, tabSize: number, type: Type) {\n\t\tthis._selection = selection;\n\t\tthis._tabSize = tabSize;\n\t\tthis._type = type;\n\t\tthis._deltaColumn = 0;\n\t}\n\n\t/**\n\t * Do an initial pass over the lines and gather info about the line comment string.\n\t * Returns null if any of the lines doesn't support a line comment string.\n\t */\n\tpublic static _gatherPreflightCommentStrings(model: editorCommon.ITokenizedModel, startLineNumber: number, endLineNumber: number): ILinePreflightData[] {\n\n\t\tmodel.forceTokenization(startLineNumber);\n\t\tconst languageId = model.getLanguageIdAtPosition(startLineNumber, 1);\n\n\t\tconst config = LanguageConfigurationRegistry.getComments(languageId);\n\t\tconst commentStr = (config ? config.lineCommentToken : null);\n\t\tif (!commentStr) {\n\t\t\t// Mode does not support line comments\n\t\t\treturn null;\n\t\t}\n\n\t\tlet lines: ILinePreflightData[] = [];\n\t\tfor (let i = 0, lineCount = endLineNumber - startLineNumber + 1; i < lineCount; i++) {\n\t\t\tlines[i] = {\n\t\t\t\tignore: false,\n\t\t\t\tcommentStr: commentStr,\n\t\t\t\tcommentStrOffset: 0,\n\t\t\t\tcommentStrLength: commentStr.length\n\t\t\t};\n\t\t}\n\n\t\treturn lines;\n\t}\n\n\t/**\n\t * Analyze lines and decide which lines are relevant and what the toggle should do.\n\t * Also, build up several offsets and lengths useful in the generation of editor operations.\n\t */\n\tpublic static _analyzeLines(type: Type, model: ISimpleModel, lines: ILinePreflightData[], startLineNumber: number): IPreflightData {\n\t\tvar lineData: ILinePreflightData,\n\t\t\tlineContentStartOffset: number,\n\t\t\tcommentStrEndOffset: number,\n\t\t\ti: number,\n\t\t\tlineCount: number,\n\t\t\tlineNumber: number,\n\t\t\tshouldRemoveComments: boolean,\n\t\t\tlineContent: string,\n\t\t\tonlyWhitespaceLines = true;\n\n\t\tif (type === Type.Toggle) {\n\t\t\tshouldRemoveComments = true;\n\t\t} else if (type === Type.ForceAdd) {\n\t\t\tshouldRemoveComments = false;\n\t\t} else {\n\t\t\tshouldRemoveComments = true;\n\t\t}\n\n\t\tfor (i = 0, lineCount = lines.length; i < lineCount; i++) {\n\t\t\tlineData = lines[i];\n\t\t\tlineNumber = startLineNumber + i;\n\n\t\t\tlineContent = model.getLineContent(lineNumber);\n\t\t\tlineContentStartOffset = strings.firstNonWhitespaceIndex(lineContent);\n\n\t\t\tif (lineContentStartOffset === -1) {\n\t\t\t\t// Empty or whitespace only line\n\t\t\t\tif (type === Type.Toggle) {\n\t\t\t\t\tlineData.ignore = true;\n\t\t\t\t} else if (type === Type.ForceAdd) {\n\t\t\t\t\tlineData.ignore = true;\n\t\t\t\t} else {\n\t\t\t\t\tlineData.ignore = true;\n\t\t\t\t}\n\t\t\t\tlineData.commentStrOffset = lineContent.length;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tonlyWhitespaceLines = false;\n\t\t\tlineData.ignore = false;\n\t\t\tlineData.commentStrOffset = lineContentStartOffset;\n\n\t\t\tif (shouldRemoveComments && !BlockCommentCommand._haystackHasNeedleAtOffset(lineContent, lineData.commentStr, lineContentStartOffset)) {\n\t\t\t\tif (type === Type.Toggle) {\n\t\t\t\t\t// Every line so far has been a line comment, but this one is not\n\t\t\t\t\tshouldRemoveComments = false;\n\t\t\t\t} else if (type === Type.ForceAdd) {\n\t\t\t\t\t// Will not happen\n\t\t\t\t} else {\n\t\t\t\t\tlineData.ignore = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (shouldRemoveComments) {\n\t\t\t\tcommentStrEndOffset = lineContentStartOffset + lineData.commentStrLength;\n\t\t\t\tif (commentStrEndOffset < lineContent.length && lineContent.charCodeAt(commentStrEndOffset) === CharCode.Space) {\n\t\t\t\t\tlineData.commentStrLength += 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (type === Type.Toggle && onlyWhitespaceLines) {\n\t\t\t// For only whitespace lines, we insert comments\n\t\t\tshouldRemoveComments = false;\n\n\t\t\t// Also, no longer ignore them\n\t\t\tfor (i = 0, lineCount = lines.length; i < lineCount; i++) {\n\t\t\t\tlines[i].ignore = false;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tsupported: true,\n\t\t\tshouldRemoveComments: shouldRemoveComments,\n\t\t\tlines: lines\n\t\t};\n\t}\n\n\t/**\n\t * Analyze all lines and decide exactly what to do => not supported | insert line comments | remove line comments\n\t */\n\tpublic static _gatherPreflightData(type: Type, model: editorCommon.ITokenizedModel, startLineNumber: number, endLineNumber: number): IPreflightData {\n\t\tvar lines = LineCommentCommand._gatherPreflightCommentStrings(model, startLineNumber, endLineNumber);\n\t\tif (lines === null) {\n\t\t\treturn {\n\t\t\t\tsupported: false,\n\t\t\t\tshouldRemoveComments: false,\n\t\t\t\tlines: null\n\t\t\t};\n\t\t}\n\n\t\treturn LineCommentCommand._analyzeLines(type, model, lines, startLineNumber);\n\t}\n\n\t/**\n\t * Given a successful analysis, execute either insert line comments, either remove line comments\n\t */\n\tprivate _executeLineComments(model: ISimpleModel, builder: editorCommon.IEditOperationBuilder, data: IPreflightData, s: Selection): void {\n\n\t\tvar ops: editorCommon.IIdentifiedSingleEditOperation[];\n\n\t\tif (data.shouldRemoveComments) {\n\t\t\tops = LineCommentCommand._createRemoveLineCommentsOperations(data.lines, s.startLineNumber);\n\t\t} else {\n\t\t\tLineCommentCommand._normalizeInsertionPoint(model, data.lines, s.startLineNumber, this._tabSize);\n\t\t\tops = LineCommentCommand._createAddLineCommentsOperations(data.lines, s.startLineNumber);\n\t\t}\n\n\t\tvar cursorPosition = new Position(s.positionLineNumber, s.positionColumn);\n\n\t\tfor (var i = 0, len = ops.length; i < len; i++) {\n\t\t\tbuilder.addEditOperation(ops[i].range, ops[i].text);\n\t\t\tif (ops[i].range.isEmpty() && ops[i].range.getStartPosition().equals(cursorPosition)) {\n\t\t\t\tthis._deltaColumn = ops[i].text.length;\n\t\t\t}\n\t\t}\n\n\t\tthis._selectionId = builder.trackSelection(s);\n\t}\n\n\tprivate _attemptRemoveBlockComment(model: editorCommon.ITokenizedModel, s: Selection, startToken: string, endToken: string): editorCommon.IIdentifiedSingleEditOperation[] {\n\t\tlet startLineNumber = s.startLineNumber;\n\t\tlet endLineNumber = s.endLineNumber;\n\n\t\tlet startTokenAllowedBeforeColumn = endToken.length + Math.max(\n\t\t\tmodel.getLineFirstNonWhitespaceColumn(s.startLineNumber),\n\t\t\ts.startColumn\n\t\t);\n\n\t\tlet startTokenIndex = model.getLineContent(startLineNumber).lastIndexOf(startToken, startTokenAllowedBeforeColumn - 1);\n\t\tlet endTokenIndex = model.getLineContent(endLineNumber).indexOf(endToken, s.endColumn - 1 - startToken.length);\n\n\t\tif (startTokenIndex !== -1 && endTokenIndex === -1) {\n\t\t\tendTokenIndex = model.getLineContent(startLineNumber).indexOf(endToken, startTokenIndex + startToken.length);\n\t\t\tendLineNumber = startLineNumber;\n\t\t}\n\n\t\tif (startTokenIndex === -1 && endTokenIndex !== -1) {\n\t\t\tstartTokenIndex = model.getLineContent(endLineNumber).lastIndexOf(startToken, endTokenIndex);\n\t\t\tstartLineNumber = endLineNumber;\n\t\t}\n\n\t\tif (s.isEmpty() && (startTokenIndex === -1 || endTokenIndex === -1)) {\n\t\t\tstartTokenIndex = model.getLineContent(startLineNumber).indexOf(startToken);\n\t\t\tif (startTokenIndex !== -1) {\n\t\t\t\tendTokenIndex = model.getLineContent(startLineNumber).indexOf(endToken, startTokenIndex + startToken.length);\n\t\t\t}\n\t\t}\n\n\t\tif (startTokenIndex !== -1 && endTokenIndex !== -1) {\n\t\t\treturn BlockCommentCommand._createRemoveBlockCommentOperations(\n\t\t\t\tnew Range(startLineNumber, startTokenIndex + startToken.length + 1, endLineNumber, endTokenIndex + 1), startToken, endToken\n\t\t\t);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Given an unsuccessful analysis, delegate to the block comment command\n\t */\n\tprivate _executeBlockComment(model: editorCommon.ITokenizedModel, builder: editorCommon.IEditOperationBuilder, s: Selection): void {\n\t\tmodel.forceTokenization(s.startLineNumber);\n\t\tlet languageId = model.getLanguageIdAtPosition(s.startLineNumber, s.startColumn);\n\t\tlet config = LanguageConfigurationRegistry.getComments(languageId);\n\t\tif (!config || !config.blockCommentStartToken || !config.blockCommentEndToken) {\n\t\t\t// Mode does not support block comments\n\t\t\treturn;\n\t\t}\n\n\t\tvar startToken = config.blockCommentStartToken;\n\t\tvar endToken = config.blockCommentEndToken;\n\n\t\tvar ops = this._attemptRemoveBlockComment(model, s, startToken, endToken);\n\t\tif (!ops) {\n\t\t\tif (s.isEmpty()) {\n\t\t\t\tvar lineContent = model.getLineContent(s.startLineNumber);\n\t\t\t\tvar firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);\n\t\t\t\tif (firstNonWhitespaceIndex === -1) {\n\t\t\t\t\t// Line is empty or contains only whitespace\n\t\t\t\t\tfirstNonWhitespaceIndex = lineContent.length;\n\t\t\t\t}\n\t\t\t\tops = BlockCommentCommand._createAddBlockCommentOperations(\n\t\t\t\t\tnew Range(s.startLineNumber, firstNonWhitespaceIndex + 1, s.startLineNumber, lineContent.length + 1), startToken, endToken\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tops = BlockCommentCommand._createAddBlockCommentOperations(\n\t\t\t\t\tnew Range(s.startLineNumber, model.getLineFirstNonWhitespaceColumn(s.startLineNumber), s.endLineNumber, model.getLineMaxColumn(s.endLineNumber)), startToken, endToken\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (ops.length === 1) {\n\t\t\t\tthis._deltaColumn = startToken.length;\n\t\t\t}\n\t\t}\n\t\tthis._selectionId = builder.trackSelection(s);\n\t\tfor (var i = 0; i < ops.length; i++) {\n\t\t\tbuilder.addEditOperation(ops[i].range, ops[i].text);\n\t\t}\n\t}\n\n\tpublic getEditOperations(model: editorCommon.ITokenizedModel, builder: editorCommon.IEditOperationBuilder): void {\n\n\t\tvar s = this._selection;\n\t\tthis._moveEndPositionDown = false;\n\n\t\tif (s.startLineNumber < s.endLineNumber && s.endColumn === 1) {\n\t\t\tthis._moveEndPositionDown = true;\n\t\t\ts = s.setEndPosition(s.endLineNumber - 1, model.getLineMaxColumn(s.endLineNumber - 1));\n\t\t}\n\n\t\tvar data = LineCommentCommand._gatherPreflightData(this._type, model, s.startLineNumber, s.endLineNumber);\n\t\tif (data.supported) {\n\t\t\treturn this._executeLineComments(model, builder, data, s);\n\t\t}\n\n\t\treturn this._executeBlockComment(model, builder, s);\n\t}\n\n\tpublic computeCursorState(model: editorCommon.ITokenizedModel, helper: editorCommon.ICursorStateComputerData): Selection {\n\t\tvar result = helper.getTrackedSelection(this._selectionId);\n\n\t\tif (this._moveEndPositionDown) {\n\t\t\tresult = result.setEndPosition(result.endLineNumber + 1, 1);\n\t\t}\n\n\t\treturn new Selection(\n\t\t\tresult.startLineNumber,\n\t\t\tresult.startColumn + this._deltaColumn,\n\t\t\tresult.endLineNumber,\n\t\t\tresult.endColumn + this._deltaColumn\n\t\t);\n\t}\n\n\t/**\n\t * Generate edit operations in the remove line comment case\n\t */\n\tpublic static _createRemoveLineCommentsOperations(lines: ILinePreflightData[], startLineNumber: number): editorCommon.IIdentifiedSingleEditOperation[] {\n\t\tvar i: number,\n\t\t\tlen: number,\n\t\t\tlineData: ILinePreflightData,\n\t\t\tres: editorCommon.IIdentifiedSingleEditOperation[] = [];\n\n\t\tfor (i = 0, len = lines.length; i < len; i++) {\n\t\t\tlineData = lines[i];\n\n\t\t\tif (lineData.ignore) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tres.push(EditOperation.delete(new Range(\n\t\t\t\tstartLineNumber + i, lineData.commentStrOffset + 1,\n\t\t\t\tstartLineNumber + i, lineData.commentStrOffset + lineData.commentStrLength + 1\n\t\t\t)));\n\t\t}\n\n\t\treturn res;\n\t}\n\n\t/**\n\t * Generate edit operations in the add line comment case\n\t */\n\tpublic static _createAddLineCommentsOperations(lines: ILinePreflightData[], startLineNumber: number): editorCommon.IIdentifiedSingleEditOperation[] {\n\t\tvar i: number,\n\t\t\tlen: number,\n\t\t\tlineData: ILinePreflightData,\n\t\t\tres: editorCommon.IIdentifiedSingleEditOperation[] = [];\n\n\t\tfor (i = 0, len = lines.length; i < len; i++) {\n\t\t\tlineData = lines[i];\n\n\t\t\tif (lineData.ignore) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tres.push(EditOperation.insert(new Position(startLineNumber + i, lineData.commentStrOffset + 1), lineData.commentStr + ' '));\n\t\t}\n\n\t\treturn res;\n\t}\n\n\t// TODO@Alex -> duplicated in characterHardWrappingLineMapper\n\tprivate static nextVisibleColumn(currentVisibleColumn: number, tabSize: number, isTab: boolean, columnSize: number): number {\n\t\tif (isTab) {\n\t\t\treturn currentVisibleColumn + (tabSize - (currentVisibleColumn % tabSize));\n\t\t}\n\t\treturn currentVisibleColumn + columnSize;\n\t}\n\n\t/**\n\t * Adjust insertion points to have them vertically aligned in the add line comment case\n\t */\n\tpublic static _normalizeInsertionPoint(model: ISimpleModel, lines: IInsertionPoint[], startLineNumber: number, tabSize: number): void {\n\t\tvar minVisibleColumn = Number.MAX_VALUE,\n\t\t\ti: number,\n\t\t\tlen: number,\n\t\t\tlineContent: string,\n\t\t\tj: number,\n\t\t\tlenJ: number,\n\t\t\tcurrentVisibleColumn: number;\n\n\t\tfor (i = 0, len = lines.length; i < len; i++) {\n\t\t\tif (lines[i].ignore) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlineContent = model.getLineContent(startLineNumber + i);\n\n\t\t\tcurrentVisibleColumn = 0;\n\t\t\tfor (j = 0, lenJ = lines[i].commentStrOffset; currentVisibleColumn < minVisibleColumn && j < lenJ; j++) {\n\t\t\t\tcurrentVisibleColumn = LineCommentCommand.nextVisibleColumn(currentVisibleColumn, tabSize, lineContent.charCodeAt(j) === CharCode.Tab, 1);\n\t\t\t}\n\n\t\t\tif (currentVisibleColumn < minVisibleColumn) {\n\t\t\t\tminVisibleColumn = currentVisibleColumn;\n\t\t\t}\n\t\t}\n\n\t\tminVisibleColumn = Math.floor(minVisibleColumn / tabSize) * tabSize;\n\n\t\tfor (i = 0, len = lines.length; i < len; i++) {\n\t\t\tif (lines[i].ignore) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlineContent = model.getLineContent(startLineNumber + i);\n\n\t\t\tcurrentVisibleColumn = 0;\n\t\t\tfor (j = 0, lenJ = lines[i].commentStrOffset; currentVisibleColumn < minVisibleColumn && j < lenJ; j++) {\n\t\t\t\tcurrentVisibleColumn = LineCommentCommand.nextVisibleColumn(currentVisibleColumn, tabSize, lineContent.charCodeAt(j) === CharCode.Tab, 1);\n\t\t\t}\n\n\t\t\tif (currentVisibleColumn > minVisibleColumn) {\n\t\t\t\tlines[i].commentStrOffset = j - 1;\n\t\t\t} else {\n\t\t\t\tlines[i].commentStrOffset = j;\n\t\t\t}\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\n\n\nexport class DragAndDropCommand implements editorCommon.ICommand {\n\n\tprivate selection: Selection;\n\tprivate targetPosition: Position;\n\tprivate targetSelection: Selection;\n\tprivate copy: boolean;\n\n\tconstructor(selection: Selection, targetPosition: Position, copy: boolean) {\n\t\tthis.selection = selection;\n\t\tthis.targetPosition = targetPosition;\n\t\tthis.copy = copy;\n\t}\n\n\tpublic getEditOperations(model: editorCommon.ITokenizedModel, builder: editorCommon.IEditOperationBuilder): void {\n\t\tlet text = model.getValueInRange(this.selection);\n\t\tif (!this.copy) {\n\t\t\tbuilder.addEditOperation(this.selection, null);\n\t\t}\n\t\tbuilder.addEditOperation(new Range(this.targetPosition.lineNumber, this.targetPosition.column, this.targetPosition.lineNumber, this.targetPosition.column), text);\n\n\t\tif (this.selection.containsPosition(this.targetPosition) && !(\n\t\t\tthis.copy && (\n\t\t\t\tthis.selection.getEndPosition().equals(this.targetPosition) || this.selection.getStartPosition().equals(this.targetPosition)\n\t\t\t) // we allow users to paste content beside the selection\n\t\t)) {\n\t\t\tthis.targetSelection = this.selection;\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.copy) {\n\t\t\tthis.targetSelection = new Selection(\n\t\t\t\tthis.targetPosition.lineNumber,\n\t\t\t\tthis.targetPosition.column,\n\t\t\t\tthis.selection.endLineNumber - this.selection.startLineNumber + this.targetPosition.lineNumber,\n\t\t\t\tthis.selection.startLineNumber === this.selection.endLineNumber ?\n\t\t\t\t\tthis.targetPosition.column + this.selection.endColumn - this.selection.startColumn :\n\t\t\t\t\tthis.selection.endColumn\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.targetPosition.lineNumber > this.selection.endLineNumber) {\n\t\t\t// Drag the selection downwards\n\t\t\tthis.targetSelection = new Selection(\n\t\t\t\tthis.targetPosition.lineNumber - this.selection.endLineNumber + this.selection.startLineNumber,\n\t\t\t\tthis.targetPosition.column,\n\t\t\t\tthis.targetPosition.lineNumber,\n\t\t\t\tthis.selection.startLineNumber === this.selection.endLineNumber ?\n\t\t\t\t\tthis.targetPosition.column + this.selection.endColumn - this.selection.startColumn :\n\t\t\t\t\tthis.selection.endColumn\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.targetPosition.lineNumber < this.selection.endLineNumber) {\n\t\t\t// Drag the selection upwards\n\t\t\tthis.targetSelection = new Selection(\n\t\t\t\tthis.targetPosition.lineNumber,\n\t\t\t\tthis.targetPosition.column,\n\t\t\t\tthis.targetPosition.lineNumber + this.selection.endLineNumber - this.selection.startLineNumber,\n\t\t\t\tthis.selection.startLineNumber === this.selection.endLineNumber ?\n\t\t\t\t\tthis.targetPosition.column + this.selection.endColumn - this.selection.startColumn :\n\t\t\t\t\tthis.selection.endColumn\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\t// The target position is at the same line as the selection's end position.\n\t\tif (this.selection.endColumn <= this.targetPosition.column) {\n\t\t\t// The target position is after the selection's end position\n\t\t\tthis.targetSelection = new Selection(\n\t\t\t\tthis.targetPosition.lineNumber - this.selection.endLineNumber + this.selection.startLineNumber,\n\t\t\t\tthis.selection.startLineNumber === this.selection.endLineNumber ?\n\t\t\t\t\tthis.targetPosition.column - this.selection.endColumn + this.selection.startColumn :\n\t\t\t\t\tthis.targetPosition.column - this.selection.endColumn + this.selection.startColumn,\n\t\t\t\tthis.targetPosition.lineNumber,\n\t\t\t\tthis.selection.startLineNumber === this.selection.endLineNumber ?\n\t\t\t\t\tthis.targetPosition.column :\n\t\t\t\t\tthis.selection.endColumn\n\t\t\t);\n\t\t} else {\n\t\t\t// The target position is before the selection's end postion. Since the selection doesn't contain the target position, the selection is one-line and target position is before this selection.\n\t\t\tthis.targetSelection = new Selection(\n\t\t\t\tthis.targetPosition.lineNumber - this.selection.endLineNumber + this.selection.startLineNumber,\n\t\t\t\tthis.targetPosition.column,\n\t\t\t\tthis.targetPosition.lineNumber,\n\t\t\t\tthis.targetPosition.column + this.selection.endColumn - this.selection.startColumn\n\t\t\t);\n\t\t}\n\t}\n\n\tpublic computeCursorState(model: editorCommon.ITokenizedModel, helper: editorCommon.ICursorStateComputerData): Selection {\n\t\treturn this.targetSelection;\n\t}\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'use strict';\n\nimport { EventEmitter } from 'vs/base/common/eventEmitter';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { Range } from 'vs/editor/common/core/range';\n\nexport interface FindReplaceStateChangedEvent {\n\tmoveCursor: boolean;\n\tupdateHistory: boolean;\n\n\tsearchString: boolean;\n\treplaceString: boolean;\n\tisRevealed: boolean;\n\tisReplaceRevealed: boolean;\n\tisRegex: boolean;\n\twholeWord: boolean;\n\tmatchCase: boolean;\n\tsearchScope: boolean;\n\tmatchesPosition: boolean;\n\tmatchesCount: boolean;\n\tcurrentMatch: boolean;\n}\n\nexport interface INewFindReplaceState {\n\tsearchString?: string;\n\treplaceString?: string;\n\tisRevealed?: boolean;\n\tisReplaceRevealed?: boolean;\n\tisRegex?: boolean;\n\twholeWord?: boolean;\n\tmatchCase?: boolean;\n\tsearchScope?: Range;\n}\n\nexport class FindReplaceState implements IDisposable {\n\n\tprivate static _CHANGED_EVENT = 'changed';\n\n\tprivate _searchString: string;\n\tprivate _replaceString: string;\n\tprivate _isRevealed: boolean;\n\tprivate _isReplaceRevealed: boolean;\n\tprivate _isRegex: boolean;\n\tprivate _wholeWord: boolean;\n\tprivate _matchCase: boolean;\n\tprivate _searchScope: Range;\n\tprivate _matchesPosition: number;\n\tprivate _matchesCount: number;\n\tprivate _currentMatch: Range;\n\tprivate _eventEmitter: EventEmitter;\n\n\tpublic get searchString(): string { return this._searchString; }\n\tpublic get replaceString(): string { return this._replaceString; }\n\tpublic get isRevealed(): boolean { return this._isRevealed; }\n\tpublic get isReplaceRevealed(): boolean { return this._isReplaceRevealed; }\n\tpublic get isRegex(): boolean { return this._isRegex; }\n\tpublic get wholeWord(): boolean { return this._wholeWord; }\n\tpublic get matchCase(): boolean { return this._matchCase; }\n\tpublic get searchScope(): Range { return this._searchScope; }\n\tpublic get matchesPosition(): number { return this._matchesPosition; }\n\tpublic get matchesCount(): number { return this._matchesCount; }\n\tpublic get currentMatch(): Range { return this._currentMatch; }\n\n\tconstructor() {\n\t\tthis._searchString = '';\n\t\tthis._replaceString = '';\n\t\tthis._isRevealed = false;\n\t\tthis._isReplaceRevealed = false;\n\t\tthis._isRegex = false;\n\t\tthis._wholeWord = false;\n\t\tthis._matchCase = false;\n\t\tthis._searchScope = null;\n\t\tthis._matchesPosition = 0;\n\t\tthis._matchesCount = 0;\n\t\tthis._currentMatch = null;\n\t\tthis._eventEmitter = new EventEmitter();\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._eventEmitter.dispose();\n\t}\n\n\tpublic addChangeListener(listener: (e: FindReplaceStateChangedEvent) => void): IDisposable {\n\t\treturn this._eventEmitter.addListener(FindReplaceState._CHANGED_EVENT, listener);\n\t}\n\n\tpublic changeMatchInfo(matchesPosition: number, matchesCount: number, currentMatch: Range): void {\n\t\tlet changeEvent: FindReplaceStateChangedEvent = {\n\t\t\tmoveCursor: false,\n\t\t\tupdateHistory: false,\n\t\t\tsearchString: false,\n\t\t\treplaceString: false,\n\t\t\tisRevealed: false,\n\t\t\tisReplaceRevealed: false,\n\t\t\tisRegex: false,\n\t\t\twholeWord: false,\n\t\t\tmatchCase: false,\n\t\t\tsearchScope: false,\n\t\t\tmatchesPosition: false,\n\t\t\tmatchesCount: false,\n\t\t\tcurrentMatch: false\n\t\t};\n\t\tlet somethingChanged = false;\n\n\t\tif (matchesCount === 0) {\n\t\t\tmatchesPosition = 0;\n\t\t}\n\t\tif (matchesPosition > matchesCount) {\n\t\t\tmatchesPosition = matchesCount;\n\t\t}\n\n\t\tif (this._matchesPosition !== matchesPosition) {\n\t\t\tthis._matchesPosition = matchesPosition;\n\t\t\tchangeEvent.matchesPosition = true;\n\t\t\tsomethingChanged = true;\n\t\t}\n\t\tif (this._matchesCount !== matchesCount) {\n\t\t\tthis._matchesCount = matchesCount;\n\t\t\tchangeEvent.matchesCount = true;\n\t\t\tsomethingChanged = true;\n\t\t}\n\n\t\tif (typeof currentMatch !== 'undefined') {\n\t\t\tif (!Range.equalsRange(this._currentMatch, currentMatch)) {\n\t\t\t\tthis._currentMatch = currentMatch;\n\t\t\t\tchangeEvent.currentMatch = true;\n\t\t\t\tsomethingChanged = true;\n\t\t\t}\n\t\t}\n\n\t\tif (somethingChanged) {\n\t\t\tthis._eventEmitter.emit(FindReplaceState._CHANGED_EVENT, changeEvent);\n\t\t}\n\t}\n\n\tpublic change(newState: INewFindReplaceState, moveCursor: boolean, updateHistory: boolean = true): void {\n\t\tlet changeEvent: FindReplaceStateChangedEvent = {\n\t\t\tmoveCursor: moveCursor,\n\t\t\tupdateHistory: updateHistory,\n\t\t\tsearchString: false,\n\t\t\treplaceString: false,\n\t\t\tisRevealed: false,\n\t\t\tisReplaceRevealed: false,\n\t\t\tisRegex: false,\n\t\t\twholeWord: false,\n\t\t\tmatchCase: false,\n\t\t\tsearchScope: false,\n\t\t\tmatchesPosition: false,\n\t\t\tmatchesCount: false,\n\t\t\tcurrentMatch: false\n\t\t};\n\t\tlet somethingChanged = false;\n\n\t\tif (typeof newState.searchString !== 'undefined') {\n\t\t\tif (this._searchString !== newState.searchString) {\n\t\t\t\tthis._searchString = newState.searchString;\n\t\t\t\tchangeEvent.searchString = true;\n\t\t\t\tsomethingChanged = true;\n\t\t\t}\n\t\t}\n\t\tif (typeof newState.replaceString !== 'undefined') {\n\t\t\tif (this._replaceString !== newState.replaceString) {\n\t\t\t\tthis._replaceString = newState.replaceString;\n\t\t\t\tchangeEvent.replaceString = true;\n\t\t\t\tsomethingChanged = true;\n\t\t\t}\n\t\t}\n\t\tif (typeof newState.isRevealed !== 'undefined') {\n\t\t\tif (this._isRevealed !== newState.isRevealed) {\n\t\t\t\tthis._isRevealed = newState.isRevealed;\n\t\t\t\tchangeEvent.isRevealed = true;\n\t\t\t\tsomethingChanged = true;\n\t\t\t}\n\t\t}\n\t\tif (typeof newState.isReplaceRevealed !== 'undefined') {\n\t\t\tif (this._isReplaceRevealed !== newState.isReplaceRevealed) {\n\t\t\t\tthis._isReplaceRevealed = newState.isReplaceRevealed;\n\t\t\t\tchangeEvent.isReplaceRevealed = true;\n\t\t\t\tsomethingChanged = true;\n\t\t\t}\n\t\t}\n\t\tif (typeof newState.isRegex !== 'undefined') {\n\t\t\tif (this._isRegex !== newState.isRegex) {\n\t\t\t\tthis._isRegex = newState.isRegex;\n\t\t\t\tchangeEvent.isRegex = true;\n\t\t\t\tsomethingChanged = true;\n\t\t\t}\n\t\t}\n\t\tif (typeof newState.wholeWord !== 'undefined') {\n\t\t\tif (this._wholeWord !== newState.wholeWord) {\n\t\t\t\tthis._wholeWord = newState.wholeWord;\n\t\t\t\tchangeEvent.wholeWord = true;\n\t\t\t\tsomethingChanged = true;\n\t\t\t}\n\t\t}\n\t\tif (typeof newState.matchCase !== 'undefined') {\n\t\t\tif (this._matchCase !== newState.matchCase) {\n\t\t\t\tthis._matchCase = newState.matchCase;\n\t\t\t\tchangeEvent.matchCase = true;\n\t\t\t\tsomethingChanged = true;\n\t\t\t}\n\t\t}\n\t\tif (typeof newState.searchScope !== 'undefined') {\n\t\t\tif (!Range.equalsRange(this._searchScope, newState.searchScope)) {\n\t\t\t\tthis._searchScope = newState.searchScope;\n\t\t\t\tchangeEvent.searchScope = true;\n\t\t\t\tsomethingChanged = true;\n\t\t\t}\n\t\t}\n\n\t\tif (somethingChanged) {\n\t\t\tthis._eventEmitter.emit(FindReplaceState._CHANGED_EVENT, changeEvent);\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\n\ninterface IEditOperation {\n\trange: Range;\n\ttext: string;\n}\n\nexport class ReplaceAllCommand implements editorCommon.ICommand {\n\n\tprivate _editorSelection: Selection;\n\tprivate _trackedEditorSelectionId: string;\n\tprivate _ranges: Range[];\n\tprivate _replaceStrings: string[];\n\n\tconstructor(editorSelection: Selection, ranges: Range[], replaceStrings: string[]) {\n\t\tthis._editorSelection = editorSelection;\n\t\tthis._ranges = ranges;\n\t\tthis._replaceStrings = replaceStrings;\n\t}\n\n\tpublic getEditOperations(model: editorCommon.ITokenizedModel, builder: editorCommon.IEditOperationBuilder): void {\n\t\tif (this._ranges.length > 0) {\n\t\t\t// Collect all edit operations\n\t\t\tvar ops: IEditOperation[] = [];\n\t\t\tfor (var i = 0; i < this._ranges.length; i++) {\n\t\t\t\tops.push({\n\t\t\t\t\trange: this._ranges[i],\n\t\t\t\t\ttext: this._replaceStrings[i]\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Sort them in ascending order by range starts\n\t\t\tops.sort((o1, o2) => {\n\t\t\t\treturn Range.compareRangesUsingStarts(o1.range, o2.range);\n\t\t\t});\n\n\t\t\t// Merge operations that touch each other\n\t\t\tvar resultOps: IEditOperation[] = [];\n\t\t\tvar previousOp = ops[0];\n\t\t\tfor (var i = 1; i < ops.length; i++) {\n\t\t\t\tif (previousOp.range.endLineNumber === ops[i].range.startLineNumber && previousOp.range.endColumn === ops[i].range.startColumn) {\n\t\t\t\t\t// These operations are one after another and can be merged\n\t\t\t\t\tpreviousOp.range = previousOp.range.plusRange(ops[i].range);\n\t\t\t\t\tpreviousOp.text = previousOp.text + ops[i].text;\n\t\t\t\t} else {\n\t\t\t\t\tresultOps.push(previousOp);\n\t\t\t\t\tpreviousOp = ops[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\tresultOps.push(previousOp);\n\n\t\t\tfor (var i = 0; i < resultOps.length; i++) {\n\t\t\t\tbuilder.addEditOperation(resultOps[i].range, resultOps[i].text);\n\t\t\t}\n\t\t}\n\n\t\tthis._trackedEditorSelectionId = builder.trackSelection(this._editorSelection);\n\t}\n\n\tpublic computeCursorState(model: editorCommon.ITokenizedModel, helper: editorCommon.ICursorStateComputerData): Selection {\n\t\treturn helper.getTrackedSelection(this._trackedEditorSelectionId);\n\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 *--------------------------------------------------------------------------------------------*/\n\nimport { CharCode } from 'vs/base/common/charCode';\n\nexport class ReplacePattern {\n\n\tpublic static fromStaticValue(value: string): ReplacePattern {\n\t\treturn new ReplacePattern([ReplacePiece.staticValue(value)]);\n\t}\n\n\t/**\n\t * Assigned when the replace pattern is entirely static.\n\t */\n\tprivate readonly _staticValue: string;\n\n\tpublic get hasReplacementPatterns(): boolean {\n\t\treturn this._staticValue === null;\n\t}\n\n\t/**\n\t * Assigned when the replace pattern has replacemend patterns.\n\t */\n\tprivate readonly _pieces: ReplacePiece[];\n\n\tconstructor(pieces: ReplacePiece[]) {\n\t\tif (!pieces || pieces.length === 0) {\n\t\t\tthis._staticValue = '';\n\t\t\tthis._pieces = null;\n\t\t} else if (pieces.length === 1 && pieces[0].staticValue !== null) {\n\t\t\tthis._staticValue = pieces[0].staticValue;\n\t\t\tthis._pieces = null;\n\t\t} else {\n\t\t\tthis._staticValue = null;\n\t\t\tthis._pieces = pieces;\n\t\t}\n\t}\n\n\tpublic buildReplaceString(matches: string[]): string {\n\t\tif (this._staticValue !== null) {\n\t\t\treturn this._staticValue;\n\t\t}\n\n\t\tlet result = '';\n\t\tfor (let i = 0, len = this._pieces.length; i < len; i++) {\n\t\t\tlet piece = this._pieces[i];\n\t\t\tif (piece.staticValue !== null) {\n\t\t\t\t// static value ReplacePiece\n\t\t\t\tresult += piece.staticValue;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// match index ReplacePiece\n\t\t\tresult += ReplacePattern._substitute(piece.matchIndex, matches);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate static _substitute(matchIndex: number, matches: string[]): string {\n\t\tif (matchIndex === 0) {\n\t\t\treturn matches[0];\n\t\t}\n\n\t\tlet remainder = '';\n\t\twhile (matchIndex > 0) {\n\t\t\tif (matchIndex < matches.length) {\n\t\t\t\t// A match can be undefined\n\t\t\t\tlet match = (matches[matchIndex] || '');\n\t\t\t\treturn match + remainder;\n\t\t\t}\n\t\t\tremainder = String(matchIndex % 10) + remainder;\n\t\t\tmatchIndex = Math.floor(matchIndex / 10);\n\t\t}\n\t\treturn '$' + remainder;\n\t}\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\n\tpublic static staticValue(value: string): ReplacePiece {\n\t\treturn new ReplacePiece(value, -1);\n\t}\n\n\tpublic static matchIndex(index: number): ReplacePiece {\n\t\treturn new ReplacePiece(null, index);\n\t}\n\n\tpublic readonly staticValue: string;\n\tpublic readonly matchIndex: number;\n\n\tprivate constructor(staticValue: string, matchIndex: number) {\n\t\tthis.staticValue = staticValue;\n\t\tthis.matchIndex = matchIndex;\n\t}\n}\n\nclass ReplacePieceBuilder {\n\n\tprivate readonly _source: string;\n\tprivate _lastCharIndex: number;\n\tprivate readonly _result: ReplacePiece[];\n\tprivate _resultLen: number;\n\tprivate _currentStaticPiece: string;\n\n\tconstructor(source: string) {\n\t\tthis._source = source;\n\t\tthis._lastCharIndex = 0;\n\t\tthis._result = [];\n\t\tthis._resultLen = 0;\n\t\tthis._currentStaticPiece = '';\n\t}\n\n\tpublic emitUnchanged(toCharIndex: number): void {\n\t\tthis._emitStatic(this._source.substring(this._lastCharIndex, toCharIndex));\n\t\tthis._lastCharIndex = toCharIndex;\n\t}\n\n\tpublic emitStatic(value: string, toCharIndex: number): void {\n\t\tthis._emitStatic(value);\n\t\tthis._lastCharIndex = toCharIndex;\n\t}\n\n\tprivate _emitStatic(value: string): void {\n\t\tif (value.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tthis._currentStaticPiece += value;\n\t}\n\n\tpublic emitMatchIndex(index: number, toCharIndex: number): void {\n\t\tif (this._currentStaticPiece.length !== 0) {\n\t\t\tthis._result[this._resultLen++] = ReplacePiece.staticValue(this._currentStaticPiece);\n\t\t\tthis._currentStaticPiece = '';\n\t\t}\n\t\tthis._result[this._resultLen++] = ReplacePiece.matchIndex(index);\n\t\tthis._lastCharIndex = toCharIndex;\n\t}\n\n\n\tpublic finalize(): ReplacePattern {\n\t\tthis.emitUnchanged(this._source.length);\n\t\tif (this._currentStaticPiece.length !== 0) {\n\t\t\tthis._result[this._resultLen++] = ReplacePiece.staticValue(this._currentStaticPiece);\n\t\t\tthis._currentStaticPiece = '';\n\t\t}\n\t\treturn new ReplacePattern(this._result);\n\t}\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 * $$\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: string): ReplacePattern {\n\tif (!replaceString || replaceString.length === 0) {\n\t\treturn new ReplacePattern(null);\n\t}\n\n\tlet result = new ReplacePieceBuilder(replaceString);\n\n\tfor (let i = 0, len = replaceString.length; i < len; i++) {\n\t\tlet chCode = replaceString.charCodeAt(i);\n\n\t\tif (chCode === CharCode.Backslash) {\n\n\t\t\t// move to next char\n\t\t\ti++;\n\n\t\t\tif (i >= len) {\n\t\t\t\t// string ends with a \\\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tlet nextChCode = replaceString.charCodeAt(i);\n\t\t\t// let replaceWithCharacter: string = null;\n\n\t\t\tswitch (nextChCode) {\n\t\t\t\tcase CharCode.Backslash:\n\t\t\t\t\t// \\\\ => inserts a \"\\\"\n\t\t\t\t\tresult.emitUnchanged(i - 1);\n\t\t\t\t\tresult.emitStatic('\\\\', i + 1);\n\t\t\t\t\tbreak;\n\t\t\t\tcase CharCode.n:\n\t\t\t\t\t// \\n => inserts a LF\n\t\t\t\t\tresult.emitUnchanged(i - 1);\n\t\t\t\t\tresult.emitStatic('\\n', i + 1);\n\t\t\t\t\tbreak;\n\t\t\t\tcase CharCode.t:\n\t\t\t\t\t// \\t => inserts a TAB\n\t\t\t\t\tresult.emitUnchanged(i - 1);\n\t\t\t\t\tresult.emitStatic('\\t', i + 1);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (chCode === CharCode.DollarSign) {\n\n\t\t\t// move to next char\n\t\t\ti++;\n\n\t\t\tif (i >= len) {\n\t\t\t\t// string ends with a $\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tlet nextChCode = replaceString.charCodeAt(i);\n\n\t\t\tif (nextChCode === CharCode.DollarSign) {\n\t\t\t\t// $$ => inserts a \"$\"\n\t\t\t\tresult.emitUnchanged(i - 1);\n\t\t\t\tresult.emitStatic('$', i + 1);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (nextChCode === CharCode.Digit0 || nextChCode === CharCode.Ampersand) {\n\t\t\t\t// $& and $0 => inserts the matched substring.\n\t\t\t\tresult.emitUnchanged(i - 1);\n\t\t\t\tresult.emitMatchIndex(0, i + 1);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (CharCode.Digit1 <= nextChCode && nextChCode <= CharCode.Digit9) {\n\t\t\t\t// $n\n\n\t\t\t\tlet matchIndex = nextChCode - CharCode.Digit0;\n\n\t\t\t\t// peek next char to probe for $nn\n\t\t\t\tif (i + 1 < len) {\n\t\t\t\t\tlet nextNextChCode = replaceString.charCodeAt(i + 1);\n\t\t\t\t\tif (CharCode.Digit0 <= nextNextChCode && nextNextChCode <= CharCode.Digit9) {\n\t\t\t\t\t\t// $nn\n\n\t\t\t\t\t\t// move to next char\n\t\t\t\t\t\ti++;\n\t\t\t\t\t\tmatchIndex = matchIndex * 10 + (nextNextChCode - CharCode.Digit0);\n\n\t\t\t\t\t\tresult.emitUnchanged(i - 2);\n\t\t\t\t\t\tresult.emitMatchIndex(matchIndex, i + 1);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tresult.emitUnchanged(i - 1);\n\t\t\t\tresult.emitMatchIndex(matchIndex, i + 1);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn 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 *--------------------------------------------------------------------------------------------*/\n\nimport { IEditorContribution } from 'vs/editor/common/editorCommon';\n\nexport const ID = 'editor.contrib.folding';\n\nexport interface IFoldingController extends IEditorContribution {\n\n\tfoldAll(): void;\n\tunfoldAll(): void;\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'use strict';\n\nimport { IModel } from 'vs/editor/common/editorCommon';\nimport { IFoldingRange } from 'vs/editor/contrib/folding/common/foldingModel';\n\nexport function computeRanges(model: IModel): IFoldingRange[] {\n\t// we get here a clone of the model's indent ranges\n\treturn model.getIndentRanges();\n}\n\n/**\n * Limits the number of folding ranges by removing ranges with larger indent levels\n */\nexport function limitByIndent(ranges: IFoldingRange[], maxEntries: number): IFoldingRange[] {\n\tif (ranges.length <= maxEntries) {\n\t\treturn ranges;\n\t}\n\n\tlet indentOccurrences: number[] = [];\n\tranges.forEach(r => {\n\t\tif (r.indent < 1000) {\n\t\t\tindentOccurrences[r.indent] = (indentOccurrences[r.indent] || 0) + 1;\n\t\t}\n\t});\n\tlet maxIndent = indentOccurrences.length;\n\tfor (let i = 0; i < indentOccurrences.length; i++) {\n\t\tif (indentOccurrences[i]) {\n\t\t\tmaxEntries -= indentOccurrences[i];\n\t\t\tif (maxEntries < 0) {\n\t\t\t\tmaxIndent = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t}\n\treturn ranges.filter(r => r.indent < maxIndent);\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'use strict';\n\nimport * as strings from 'vs/base/common/strings';\nimport { Range } from 'vs/editor/common/core/range';\nimport { TextEdit } from 'vs/editor/common/modes';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { Selection } from 'vs/editor/common/core/selection';\n\nexport class EditOperationsCommand implements editorCommon.ICommand {\n\n\tstatic execute(editor: editorCommon.ICommonCodeEditor, edits: TextEdit[]) {\n\t\tconst cmd = new EditOperationsCommand(edits, editor.getSelection());\n\t\tif (typeof cmd._newEol === 'number') {\n\t\t\teditor.getModel().setEOL(cmd._newEol);\n\t\t}\n\t\teditor.pushUndoStop();\n\t\teditor.executeCommand('formatEditsCommand', cmd);\n\t\teditor.pushUndoStop();\n\t}\n\n\tprivate _edits: TextEdit[];\n\tprivate _newEol: editorCommon.EndOfLineSequence;\n\n\tprivate _initialSelection: Selection;\n\tprivate _selectionId: string;\n\n\tconstructor(edits: TextEdit[], initialSelection: Selection) {\n\t\tthis._initialSelection = initialSelection;\n\t\tthis._edits = [];\n\t\tthis._newEol = undefined;\n\n\t\tfor (let edit of edits) {\n\t\t\tif (typeof edit.eol === 'number') {\n\t\t\t\tthis._newEol = edit.eol;\n\t\t\t}\n\t\t\tif (edit.range && typeof edit.text === 'string') {\n\t\t\t\tthis._edits.push(edit);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic getEditOperations(model: editorCommon.ITokenizedModel, builder: editorCommon.IEditOperationBuilder): void {\n\n\t\tfor (let edit of this._edits) {\n\t\t\t// We know that this edit.range comes from the mirror model, so it should only contain \\n and no \\r's\n\t\t\tlet trimEdit = EditOperationsCommand.trimEdit(edit, model);\n\t\t\tif (trimEdit !== null) { // produced above in case the edit.text is identical to the existing text\n\t\t\t\tbuilder.addEditOperation(Range.lift(edit.range), edit.text);\n\t\t\t}\n\t\t}\n\n\t\tvar selectionIsSet = false;\n\t\tif (Array.isArray(this._edits) && this._edits.length === 1 && this._initialSelection.isEmpty()) {\n\t\t\tif (this._edits[0].range.startColumn === this._initialSelection.endColumn &&\n\t\t\t\tthis._edits[0].range.startLineNumber === this._initialSelection.endLineNumber) {\n\t\t\t\tselectionIsSet = true;\n\t\t\t\tthis._selectionId = builder.trackSelection(this._initialSelection, true);\n\t\t\t} else if (this._edits[0].range.endColumn === this._initialSelection.startColumn &&\n\t\t\t\tthis._edits[0].range.endLineNumber === this._initialSelection.startLineNumber) {\n\t\t\t\tselectionIsSet = true;\n\t\t\t\tthis._selectionId = builder.trackSelection(this._initialSelection, false);\n\t\t\t}\n\t\t}\n\n\t\tif (!selectionIsSet) {\n\t\t\tthis._selectionId = builder.trackSelection(this._initialSelection);\n\t\t}\n\t}\n\n\tpublic computeCursorState(model: editorCommon.ITokenizedModel, helper: editorCommon.ICursorStateComputerData): Selection {\n\t\treturn helper.getTrackedSelection(this._selectionId);\n\t}\n\n\tstatic fixLineTerminators(edit: editorCommon.ISingleEditOperation, model: editorCommon.ITokenizedModel): void {\n\t\tedit.text = edit.text.replace(/\\r\\n|\\r|\\n/g, model.getEOL());\n\t}\n\n\t/**\n\t * This is used to minimize the edits by removing changes that appear on the edges of the range which are identical\n\t * to the current text.\n\t *\n\t * The reason this was introduced is to allow better selection tracking of the current cursor and solve\n\t * bug #15108. There the cursor was jumping since the tracked selection was in the middle of the range edit\n\t * and was lost.\n\t */\n\tstatic trimEdit(edit: editorCommon.ISingleEditOperation, model: editorCommon.ITokenizedModel): editorCommon.ISingleEditOperation {\n\n\t\tthis.fixLineTerminators(edit, model);\n\n\t\treturn this._trimEdit(model.validateRange(edit.range), edit.text, edit.forceMoveMarkers, model);\n\t}\n\n\tstatic _trimEdit(editRange: Range, editText: string, editForceMoveMarkers: boolean, model: editorCommon.ITokenizedModel): editorCommon.ISingleEditOperation {\n\n\t\tlet currentText = model.getValueInRange(editRange);\n\n\t\t// Find the equal characters in the front\n\t\tlet commonPrefixLength = strings.commonPrefixLength(editText, currentText);\n\n\t\t// If the two strings are identical, return no edit (no-op)\n\t\tif (commonPrefixLength === currentText.length && commonPrefixLength === editText.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (commonPrefixLength > 0) {\n\t\t\t// Apply front trimming\n\t\t\tlet newStartPosition = model.modifyPosition(editRange.getStartPosition(), commonPrefixLength);\n\t\t\teditRange = new Range(newStartPosition.lineNumber, newStartPosition.column, editRange.endLineNumber, editRange.endColumn);\n\t\t\teditText = editText.substring(commonPrefixLength);\n\t\t\tcurrentText = currentText.substr(commonPrefixLength);\n\t\t}\n\n\t\t// Find the equal characters in the rear\n\t\tlet commonSuffixLength = strings.commonSuffixLength(editText, currentText);\n\n\t\tif (commonSuffixLength > 0) {\n\t\t\t// Apply rear trimming\n\t\t\tlet newEndPosition = model.modifyPosition(editRange.getEndPosition(), -commonSuffixLength);\n\t\t\teditRange = new Range(editRange.startLineNumber, editRange.startColumn, newEndPosition.lineNumber, newEndPosition.column);\n\t\t\teditText = editText.substring(0, editText.length - commonSuffixLength);\n\t\t\tcurrentText = currentText.substring(0, currentText.length - commonSuffixLength);\n\t\t}\n\n\t\treturn {\n\t\t\ttext: editText,\n\t\t\trange: editRange,\n\t\t\tforceMoveMarkers: editForceMoveMarkers\n\t\t};\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/css!./goToDeclarationMouse';\nimport { KeyCode } from 'vs/base/common/keyCodes';\nimport * as browser from 'vs/base/browser/browser';\nimport { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport { ICodeEditor, IEditorMouseEvent, IMouseTarget } from 'vs/editor/browser/editorBrowser';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { ICursorSelectionChangedEvent } from 'vs/editor/common/controller/cursorEvents';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport * as platform from 'vs/base/common/platform';\n\nfunction hasModifier(e: { ctrlKey: boolean; shiftKey: boolean; altKey: boolean; metaKey: boolean }, modifier: 'ctrlKey' | 'shiftKey' | 'altKey' | 'metaKey'): boolean {\n\treturn !!e[modifier];\n}\n\n/**\n * An event that encapsulates the various trigger modifiers logic needed for go to definition.\n */\nexport class ClickLinkMouseEvent {\n\n\tpublic readonly target: IMouseTarget;\n\tpublic readonly hasTriggerModifier: boolean;\n\tpublic readonly hasSideBySideModifier: boolean;\n\tpublic readonly isNoneOrSingleMouseDown: boolean;\n\n\tconstructor(source: IEditorMouseEvent, opts: ClickLinkOptions) {\n\t\tthis.target = source.target;\n\t\tthis.hasTriggerModifier = hasModifier(source.event, opts.triggerModifier);\n\t\tthis.hasSideBySideModifier = hasModifier(source.event, opts.triggerSideBySideModifier);\n\t\tthis.isNoneOrSingleMouseDown = (browser.isIE || source.event.detail <= 1); // IE does not support event.detail properly\n\t}\n}\n\n/**\n * An event that encapsulates the various trigger modifiers logic needed for go to definition.\n */\nexport class ClickLinkKeyboardEvent {\n\n\tpublic readonly keyCodeIsTriggerKey: boolean;\n\tpublic readonly keyCodeIsSideBySideKey: boolean;\n\tpublic readonly hasTriggerModifier: boolean;\n\n\tconstructor(source: IKeyboardEvent, opts: ClickLinkOptions) {\n\t\tthis.keyCodeIsTriggerKey = (source.keyCode === opts.triggerKey);\n\t\tthis.keyCodeIsSideBySideKey = (source.keyCode === opts.triggerSideBySideKey);\n\t\tthis.hasTriggerModifier = hasModifier(source, opts.triggerModifier);\n\t}\n}\n\nexport class ClickLinkOptions {\n\n\tpublic readonly triggerKey: KeyCode;\n\tpublic readonly triggerModifier: 'ctrlKey' | 'shiftKey' | 'altKey' | 'metaKey';\n\tpublic readonly triggerSideBySideKey: KeyCode;\n\tpublic readonly triggerSideBySideModifier: 'ctrlKey' | 'shiftKey' | 'altKey' | 'metaKey';\n\n\tconstructor(\n\t\ttriggerKey: KeyCode,\n\t\ttriggerModifier: 'ctrlKey' | 'shiftKey' | 'altKey' | 'metaKey',\n\t\ttriggerSideBySideKey: KeyCode,\n\t\ttriggerSideBySideModifier: 'ctrlKey' | 'shiftKey' | 'altKey' | 'metaKey'\n\t) {\n\t\tthis.triggerKey = triggerKey;\n\t\tthis.triggerModifier = triggerModifier;\n\t\tthis.triggerSideBySideKey = triggerSideBySideKey;\n\t\tthis.triggerSideBySideModifier = triggerSideBySideModifier;\n\t}\n\n\tpublic equals(other: ClickLinkOptions): boolean {\n\t\treturn (\n\t\t\tthis.triggerKey === other.triggerKey\n\t\t\t&& this.triggerModifier === other.triggerModifier\n\t\t\t&& this.triggerSideBySideKey === other.triggerSideBySideKey\n\t\t\t&& this.triggerSideBySideModifier === other.triggerSideBySideModifier\n\t\t);\n\t}\n}\n\nfunction createOptions(multiCursorModifier: 'altKey' | 'ctrlKey' | 'metaKey'): ClickLinkOptions {\n\tif (multiCursorModifier === 'altKey') {\n\t\tif (platform.isMacintosh) {\n\t\t\treturn new ClickLinkOptions(KeyCode.Meta, 'metaKey', KeyCode.Alt, 'altKey');\n\t\t}\n\t\treturn new ClickLinkOptions(KeyCode.Ctrl, 'ctrlKey', KeyCode.Alt, 'altKey');\n\t}\n\n\tif (platform.isMacintosh) {\n\t\treturn new ClickLinkOptions(KeyCode.Alt, 'altKey', KeyCode.Meta, 'metaKey');\n\t}\n\treturn new ClickLinkOptions(KeyCode.Alt, 'altKey', KeyCode.Ctrl, 'ctrlKey');\n}\n\nexport class ClickLinkGesture extends Disposable {\n\n\tprivate readonly _onMouseMoveOrRelevantKeyDown: Emitter<[ClickLinkMouseEvent, ClickLinkKeyboardEvent]> = this._register(new Emitter<[ClickLinkMouseEvent, ClickLinkKeyboardEvent]>());\n\tpublic readonly onMouseMoveOrRelevantKeyDown: Event<[ClickLinkMouseEvent, ClickLinkKeyboardEvent]> = this._onMouseMoveOrRelevantKeyDown.event;\n\n\tprivate readonly _onExecute: Emitter = this._register(new Emitter());\n\tpublic readonly onExecute: Event = this._onExecute.event;\n\n\tprivate readonly _onCancel: Emitter = this._register(new Emitter());\n\tpublic readonly onCancel: Event = this._onCancel.event;\n\n\tprivate readonly _editor: ICodeEditor;\n\tprivate _opts: ClickLinkOptions;\n\n\tprivate lastMouseMoveEvent: ClickLinkMouseEvent;\n\tprivate hasTriggerKeyOnMouseDown: boolean;\n\n\tconstructor(editor: ICodeEditor) {\n\t\tsuper();\n\n\t\tthis._editor = editor;\n\t\tthis._opts = createOptions(this._editor.getConfiguration().multiCursorModifier);\n\n\t\tthis.lastMouseMoveEvent = null;\n\t\tthis.hasTriggerKeyOnMouseDown = false;\n\n\t\tthis._register(this._editor.onDidChangeConfiguration((e) => {\n\t\t\tif (e.multiCursorModifier) {\n\t\t\t\tconst newOpts = createOptions(this._editor.getConfiguration().multiCursorModifier);\n\t\t\t\tif (this._opts.equals(newOpts)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._opts = newOpts;\n\t\t\t\tthis.lastMouseMoveEvent = null;\n\t\t\t\tthis.hasTriggerKeyOnMouseDown = false;\n\t\t\t\tthis._onCancel.fire();\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._editor.onMouseMove((e: IEditorMouseEvent) => this.onEditorMouseMove(new ClickLinkMouseEvent(e, this._opts))));\n\t\tthis._register(this._editor.onMouseDown((e: IEditorMouseEvent) => this.onEditorMouseDown(new ClickLinkMouseEvent(e, this._opts))));\n\t\tthis._register(this._editor.onMouseUp((e: IEditorMouseEvent) => this.onEditorMouseUp(new ClickLinkMouseEvent(e, this._opts))));\n\t\tthis._register(this._editor.onKeyDown((e: IKeyboardEvent) => this.onEditorKeyDown(new ClickLinkKeyboardEvent(e, this._opts))));\n\t\tthis._register(this._editor.onKeyUp((e: IKeyboardEvent) => this.onEditorKeyUp(new ClickLinkKeyboardEvent(e, this._opts))));\n\t\tthis._register(this._editor.onMouseDrag(() => this.resetHandler()));\n\n\t\tthis._register(this._editor.onDidChangeCursorSelection((e) => this.onDidChangeCursorSelection(e)));\n\t\tthis._register(this._editor.onDidChangeModel((e) => this.resetHandler()));\n\t\tthis._register(this._editor.onDidChangeModelContent(() => this.resetHandler()));\n\t\tthis._register(this._editor.onDidScrollChange((e) => {\n\t\t\tif (e.scrollTopChanged || e.scrollLeftChanged) {\n\t\t\t\tthis.resetHandler();\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate onDidChangeCursorSelection(e: ICursorSelectionChangedEvent): void {\n\t\tif (e.selection && e.selection.startColumn !== e.selection.endColumn) {\n\t\t\tthis.resetHandler(); // immediately stop this feature if the user starts to select (https://github.com/Microsoft/vscode/issues/7827)\n\t\t}\n\t}\n\n\tprivate onEditorMouseMove(mouseEvent: ClickLinkMouseEvent): void {\n\t\tthis.lastMouseMoveEvent = mouseEvent;\n\n\t\tthis._onMouseMoveOrRelevantKeyDown.fire([mouseEvent, null]);\n\t}\n\n\tprivate onEditorMouseDown(mouseEvent: ClickLinkMouseEvent): void {\n\t\t// We need to record if we had the trigger key on mouse down because someone might select something in the editor\n\t\t// holding the mouse down and then while mouse is down start to press Ctrl/Cmd to start a copy operation and then\n\t\t// release the mouse button without wanting to do the navigation.\n\t\t// With this flag we prevent goto definition if the mouse was down before the trigger key was pressed.\n\t\tthis.hasTriggerKeyOnMouseDown = mouseEvent.hasTriggerModifier;\n\t}\n\n\tprivate onEditorMouseUp(mouseEvent: ClickLinkMouseEvent): void {\n\t\tif (this.hasTriggerKeyOnMouseDown) {\n\t\t\tthis._onExecute.fire(mouseEvent);\n\t\t}\n\t}\n\n\tprivate onEditorKeyDown(e: ClickLinkKeyboardEvent): void {\n\t\tif (\n\t\t\tthis.lastMouseMoveEvent\n\t\t\t&& (\n\t\t\t\te.keyCodeIsTriggerKey // User just pressed Ctrl/Cmd (normal goto definition)\n\t\t\t\t|| (e.keyCodeIsSideBySideKey && e.hasTriggerModifier) // User pressed Ctrl/Cmd+Alt (goto definition to the side)\n\t\t\t)\n\t\t) {\n\t\t\tthis._onMouseMoveOrRelevantKeyDown.fire([this.lastMouseMoveEvent, e]);\n\t\t} else if (e.hasTriggerModifier) {\n\t\t\tthis._onCancel.fire(); // remove decorations if user holds another key with ctrl/cmd to prevent accident goto declaration\n\t\t}\n\t}\n\n\tprivate onEditorKeyUp(e: ClickLinkKeyboardEvent): void {\n\t\tif (e.keyCodeIsTriggerKey) {\n\t\t\tthis._onCancel.fire();\n\t\t}\n\t}\n\n\tprivate resetHandler(): void {\n\t\tthis.lastMouseMoveEvent = null;\n\t\tthis.hasTriggerKeyOnMouseDown = false;\n\t\tthis._onCancel.fire();\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { RunOnceScheduler } from 'vs/base/common/async';\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { TPromise } from 'vs/base/common/winjs.base';\n\nexport interface IHoverComputer {\n\n\t/**\n\t * Overwrite the default hover time\n\t */\n\tgetHoverTimeMillis?: () => number;\n\n\t/**\n\t * This is called after half the hover time\n\t */\n\tcomputeAsync?: () => TPromise;\n\n\t/**\n\t * This is called after all the hover time\n\t */\n\tcomputeSync?: () => Result;\n\n\t/**\n\t * This is called whenever one of the compute* methods returns a truey value\n\t */\n\tonResult: (result: Result, isFromSynchronousComputation: boolean) => void;\n\n\t/**\n\t * This is what will be sent as progress/complete to the computation promise\n\t */\n\tgetResult: () => Result;\n\n\tgetResultWithLoadingMessage: () => Result;\n\n}\n\nconst enum ComputeHoverOperationState {\n\tIDLE = 0,\n\tFIRST_WAIT = 1,\n\tSECOND_WAIT = 2,\n\tWAITING_FOR_ASYNC_COMPUTATION = 3\n}\n\nexport class HoverOperation {\n\n\tstatic HOVER_TIME = 300;\n\n\tprivate _computer: IHoverComputer;\n\tprivate _state: ComputeHoverOperationState;\n\n\tprivate _firstWaitScheduler: RunOnceScheduler;\n\tprivate _secondWaitScheduler: RunOnceScheduler;\n\tprivate _loadingMessageScheduler: RunOnceScheduler;\n\tprivate _asyncComputationPromise: TPromise;\n\tprivate _asyncComputationPromiseDone: boolean;\n\n\tprivate _completeCallback: (r: Result) => void;\n\tprivate _errorCallback: (err: any) => void;\n\tprivate _progressCallback: (progress: any) => void;\n\n\tconstructor(computer: IHoverComputer, success: (r: Result) => void, error: (err: any) => void, progress: (progress: any) => void) {\n\t\tthis._computer = computer;\n\t\tthis._state = ComputeHoverOperationState.IDLE;\n\n\t\tthis._firstWaitScheduler = new RunOnceScheduler(() => this._triggerAsyncComputation(), this._getHoverTimeMillis() / 2);\n\t\tthis._secondWaitScheduler = new RunOnceScheduler(() => this._triggerSyncComputation(), this._getHoverTimeMillis() / 2);\n\t\tthis._loadingMessageScheduler = new RunOnceScheduler(() => this._showLoadingMessage(), 3 * this._getHoverTimeMillis());\n\n\t\tthis._asyncComputationPromise = null;\n\t\tthis._asyncComputationPromiseDone = false;\n\n\t\tthis._completeCallback = success;\n\t\tthis._errorCallback = error;\n\t\tthis._progressCallback = progress;\n\t}\n\n\tpublic getComputer(): IHoverComputer {\n\t\treturn this._computer;\n\t}\n\n\tprivate _getHoverTimeMillis(): number {\n\t\tif (this._computer.getHoverTimeMillis) {\n\t\t\treturn this._computer.getHoverTimeMillis();\n\t\t}\n\t\treturn HoverOperation.HOVER_TIME;\n\t}\n\n\tprivate _triggerAsyncComputation(): void {\n\t\tthis._state = ComputeHoverOperationState.SECOND_WAIT;\n\t\tthis._secondWaitScheduler.schedule();\n\n\t\tif (this._computer.computeAsync) {\n\t\t\tthis._asyncComputationPromiseDone = false;\n\t\t\tthis._asyncComputationPromise = this._computer.computeAsync().then((asyncResult: Result) => {\n\t\t\t\tthis._asyncComputationPromiseDone = true;\n\t\t\t\tthis._withAsyncResult(asyncResult);\n\t\t\t}, () => this._onError);\n\t\t} else {\n\t\t\tthis._asyncComputationPromiseDone = true;\n\t\t}\n\t}\n\n\tprivate _triggerSyncComputation(): void {\n\t\tif (this._computer.computeSync) {\n\t\t\tthis._computer.onResult(this._computer.computeSync(), true);\n\t\t}\n\n\t\tif (this._asyncComputationPromiseDone) {\n\t\t\tthis._state = ComputeHoverOperationState.IDLE;\n\t\t\tthis._onComplete(this._computer.getResult());\n\t\t} else {\n\t\t\tthis._state = ComputeHoverOperationState.WAITING_FOR_ASYNC_COMPUTATION;\n\t\t\tthis._onProgress(this._computer.getResult());\n\t\t}\n\t}\n\n\tprivate _showLoadingMessage(): void {\n\t\tif (this._state === ComputeHoverOperationState.WAITING_FOR_ASYNC_COMPUTATION) {\n\t\t\tthis._onProgress(this._computer.getResultWithLoadingMessage());\n\t\t}\n\t}\n\n\tprivate _withAsyncResult(asyncResult: Result): void {\n\t\tif (asyncResult) {\n\t\t\tthis._computer.onResult(asyncResult, false);\n\t\t}\n\n\t\tif (this._state === ComputeHoverOperationState.WAITING_FOR_ASYNC_COMPUTATION) {\n\t\t\tthis._state = ComputeHoverOperationState.IDLE;\n\t\t\tthis._onComplete(this._computer.getResult());\n\t\t}\n\t}\n\n\tprivate _onComplete(value: Result): void {\n\t\tif (this._completeCallback) {\n\t\t\tthis._completeCallback(value);\n\t\t}\n\t}\n\n\tprivate _onError(error: any): void {\n\t\tif (this._errorCallback) {\n\t\t\tthis._errorCallback(error);\n\t\t} else {\n\t\t\tonUnexpectedError(error);\n\t\t}\n\t}\n\n\tprivate _onProgress(value: Result): void {\n\t\tif (this._progressCallback) {\n\t\t\tthis._progressCallback(value);\n\t\t}\n\t}\n\n\tpublic start(): void {\n\t\tif (this._state === ComputeHoverOperationState.IDLE) {\n\t\t\tthis._state = ComputeHoverOperationState.FIRST_WAIT;\n\t\t\tthis._firstWaitScheduler.schedule();\n\t\t\tthis._loadingMessageScheduler.schedule();\n\t\t}\n\t}\n\n\tpublic cancel(): void {\n\t\tthis._loadingMessageScheduler.cancel();\n\t\tif (this._state === ComputeHoverOperationState.FIRST_WAIT) {\n\t\t\tthis._firstWaitScheduler.cancel();\n\t\t}\n\t\tif (this._state === ComputeHoverOperationState.SECOND_WAIT) {\n\t\t\tthis._secondWaitScheduler.cancel();\n\t\t\tif (this._asyncComputationPromise) {\n\t\t\t\tthis._asyncComputationPromise.cancel();\n\t\t\t\tthis._asyncComputationPromise = null;\n\t\t\t}\n\t\t}\n\t\tif (this._state === ComputeHoverOperationState.WAITING_FOR_ASYNC_COMPUTATION) {\n\t\t\tif (this._asyncComputationPromise) {\n\t\t\t\tthis._asyncComputationPromise.cancel();\n\t\t\t\tthis._asyncComputationPromise = null;\n\t\t\t}\n\t\t}\n\t\tthis._state = ComputeHoverOperationState.IDLE;\n\t}\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { KeyCode } from 'vs/base/common/keyCodes';\nimport { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport { toggleClass } from 'vs/base/browser/dom';\nimport { Position } from 'vs/editor/common/core/position';\nimport * as editorBrowser from 'vs/editor/browser/editorBrowser';\nimport { Widget } from 'vs/base/browser/ui/widget';\nimport { DomScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { IConfigurationChangedEvent } from 'vs/editor/common/config/editorOptions';\n\nexport class ContentHoverWidget extends Widget implements editorBrowser.IContentWidget {\n\n\tprivate _id: string;\n\tprotected _editor: editorBrowser.ICodeEditor;\n\tprivate _isVisible: boolean;\n\tprivate _containerDomNode: HTMLElement;\n\tprivate _domNode: HTMLElement;\n\tprotected _showAtPosition: Position;\n\tprivate _stoleFocus: boolean;\n\tprivate scrollbar: DomScrollableElement;\n\tprivate disposables: IDisposable[] = [];\n\n\t// Editor.IContentWidget.allowEditorOverflow\n\tpublic allowEditorOverflow = true;\n\n\tprotected get isVisible(): boolean {\n\t\treturn this._isVisible;\n\t}\n\n\tprotected set isVisible(value: boolean) {\n\t\tthis._isVisible = value;\n\t\ttoggleClass(this._containerDomNode, 'hidden', !this._isVisible);\n\t}\n\n\tconstructor(id: string, editor: editorBrowser.ICodeEditor) {\n\t\tsuper();\n\t\tthis._id = id;\n\t\tthis._editor = editor;\n\t\tthis._isVisible = false;\n\n\t\tthis._containerDomNode = document.createElement('div');\n\t\tthis._containerDomNode.className = 'monaco-editor-hover hidden';\n\t\tthis._containerDomNode.tabIndex = 0;\n\n\t\tthis._domNode = document.createElement('div');\n\t\tthis._domNode.className = 'monaco-editor-hover-content';\n\n\t\tthis.scrollbar = new DomScrollableElement(this._domNode, {});\n\t\tthis.disposables.push(this.scrollbar);\n\t\tthis._containerDomNode.appendChild(this.scrollbar.getDomNode());\n\n\t\tthis.onkeydown(this._containerDomNode, (e: IKeyboardEvent) => {\n\t\t\tif (e.equals(KeyCode.Escape)) {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t});\n\n\t\tthis._register(this._editor.onDidChangeConfiguration((e: IConfigurationChangedEvent) => {\n\t\t\tif (e.fontInfo) {\n\t\t\t\tthis.updateFont();\n\t\t\t}\n\t\t}));\n\n\t\tthis._editor.onDidLayoutChange(e => this.updateMaxHeight());\n\n\t\tthis.updateMaxHeight();\n\t\tthis._editor.addContentWidget(this);\n\t\tthis._showAtPosition = null;\n\t}\n\n\tpublic getId(): string {\n\t\treturn this._id;\n\t}\n\n\tpublic getDomNode(): HTMLElement {\n\t\treturn this._containerDomNode;\n\t}\n\n\tpublic showAt(position: Position, focus: boolean): void {\n\t\t// Position has changed\n\t\tthis._showAtPosition = new Position(position.lineNumber, position.column);\n\t\tthis.isVisible = true;\n\n\t\tthis._editor.layoutContentWidget(this);\n\t\t// Simply force a synchronous render on the editor\n\t\t// such that the widget does not really render with left = '0px'\n\t\tthis._editor.render();\n\t\tthis._stoleFocus = focus;\n\t\tif (focus) {\n\t\t\tthis._containerDomNode.focus();\n\t\t}\n\t}\n\n\tpublic hide(): void {\n\t\tif (!this.isVisible) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isVisible = false;\n\n\t\tthis._editor.layoutContentWidget(this);\n\t\tif (this._stoleFocus) {\n\t\t\tthis._editor.focus();\n\t\t}\n\t}\n\n\tpublic getPosition(): editorBrowser.IContentWidgetPosition {\n\t\tif (this.isVisible) {\n\t\t\treturn {\n\t\t\t\tposition: this._showAtPosition,\n\t\t\t\tpreference: [\n\t\t\t\t\teditorBrowser.ContentWidgetPositionPreference.ABOVE,\n\t\t\t\t\teditorBrowser.ContentWidgetPositionPreference.BELOW\n\t\t\t\t]\n\t\t\t};\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._editor.removeContentWidget(this);\n\t\tthis.disposables = dispose(this.disposables);\n\t\tsuper.dispose();\n\t}\n\n\tprivate updateFont(): void {\n\t\tconst codeTags: HTMLElement[] = Array.prototype.slice.call(this._domNode.getElementsByTagName('code'));\n\t\tconst codeClasses: HTMLElement[] = Array.prototype.slice.call(this._domNode.getElementsByClassName('code'));\n\n\t\t[...codeTags, ...codeClasses].forEach(node => this._editor.applyFontInfo(node));\n\t}\n\n\tprotected updateContents(node: Node): void {\n\t\tthis._domNode.textContent = '';\n\t\tthis._domNode.appendChild(node);\n\t\tthis.updateFont();\n\n\t\tthis._editor.layoutContentWidget(this);\n\t\tthis.scrollbar.scanDomNode();\n\t}\n\n\tprivate updateMaxHeight(): void {\n\t\tconst height = Math.max(this._editor.getLayoutInfo().height / 4, 250);\n\t\tconst { fontSize, lineHeight } = this._editor.getConfiguration().fontInfo;\n\n\t\tthis._domNode.style.fontSize = `${fontSize}px`;\n\t\tthis._domNode.style.lineHeight = `${lineHeight}px`;\n\t\tthis._domNode.style.maxHeight = `${height}px`;\n\t}\n}\n\nexport class GlyphHoverWidget extends Widget implements editorBrowser.IOverlayWidget {\n\n\tprivate _id: string;\n\tprotected _editor: editorBrowser.ICodeEditor;\n\tprivate _isVisible: boolean;\n\tprivate _domNode: HTMLElement;\n\tprotected _showAtLineNumber: number;\n\n\tconstructor(id: string, editor: editorBrowser.ICodeEditor) {\n\t\tsuper();\n\t\tthis._id = id;\n\t\tthis._editor = editor;\n\t\tthis._isVisible = false;\n\n\t\tthis._domNode = document.createElement('div');\n\t\tthis._domNode.className = 'monaco-editor-hover hidden';\n\t\tthis._domNode.setAttribute('aria-hidden', 'true');\n\t\tthis._domNode.setAttribute('role', 'presentation');\n\n\t\tthis._showAtLineNumber = -1;\n\n\t\tthis._register(this._editor.onDidChangeConfiguration((e: IConfigurationChangedEvent) => {\n\t\t\tif (e.fontInfo) {\n\t\t\t\tthis.updateFont();\n\t\t\t}\n\t\t}));\n\n\t\tthis._editor.addOverlayWidget(this);\n\t}\n\n\tprotected get isVisible(): boolean {\n\t\treturn this._isVisible;\n\t}\n\n\tprotected set isVisible(value: boolean) {\n\t\tthis._isVisible = value;\n\t\ttoggleClass(this._domNode, 'hidden', !this._isVisible);\n\t}\n\n\tpublic getId(): string {\n\t\treturn this._id;\n\t}\n\n\tpublic getDomNode(): HTMLElement {\n\t\treturn this._domNode;\n\t}\n\n\tpublic showAt(lineNumber: number): void {\n\t\tthis._showAtLineNumber = lineNumber;\n\n\t\tif (!this.isVisible) {\n\t\t\tthis.isVisible = true;\n\t\t}\n\n\t\tconst editorLayout = this._editor.getLayoutInfo();\n\t\tconst topForLineNumber = this._editor.getTopForLineNumber(this._showAtLineNumber);\n\t\tconst editorScrollTop = this._editor.getScrollTop();\n\t\tconst lineHeight = this._editor.getConfiguration().lineHeight;\n\t\tconst nodeHeight = this._domNode.clientHeight;\n\t\tconst top = topForLineNumber - editorScrollTop - ((nodeHeight - lineHeight) / 2);\n\n\t\tthis._domNode.style.left = `${editorLayout.glyphMarginLeft + editorLayout.glyphMarginWidth}px`;\n\t\tthis._domNode.style.top = `${Math.max(Math.round(top), 0)}px`;\n\t}\n\n\tpublic hide(): void {\n\t\tif (!this.isVisible) {\n\t\t\treturn;\n\t\t}\n\t\tthis.isVisible = false;\n\t}\n\n\tpublic getPosition(): editorBrowser.IOverlayWidgetPosition {\n\t\treturn null;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._editor.removeOverlayWidget(this);\n\t\tsuper.dispose();\n\t}\n\n\tprivate updateFont(): void {\n\t\tconst codeTags: HTMLElement[] = Array.prototype.slice.call(this._domNode.getElementsByTagName('code'));\n\t\tconst codeClasses: HTMLElement[] = Array.prototype.slice.call(this._domNode.getElementsByClassName('code'));\n\n\t\t[...codeTags, ...codeClasses].forEach(node => this._editor.applyFontInfo(node));\n\t}\n\n\tprotected updateContents(node: Node): void {\n\t\tthis._domNode.textContent = '';\n\t\tthis._domNode.appendChild(node);\n\t\tthis.updateFont();\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Selection } from 'vs/editor/common/core/selection';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { Range } from 'vs/editor/common/core/range';\n\nexport class InPlaceReplaceCommand implements editorCommon.ICommand {\n\n\tprivate _editRange: Range;\n\tprivate _originalSelection: Selection;\n\tprivate _text: string;\n\n\tconstructor(editRange: Range, originalSelection: Selection, text: string) {\n\t\tthis._editRange = editRange;\n\t\tthis._originalSelection = originalSelection;\n\t\tthis._text = text;\n\t}\n\n\tpublic getEditOperations(model: editorCommon.ITokenizedModel, builder: editorCommon.IEditOperationBuilder): void {\n\t\tbuilder.addTrackedEditOperation(this._editRange, this._text);\n\t}\n\n\tpublic computeCursorState(model: editorCommon.ITokenizedModel, helper: editorCommon.ICursorStateComputerData): Selection {\n\t\tvar inverseEditOperations = helper.getInverseEditOperations();\n\t\tvar srcRange = inverseEditOperations[0].range;\n\n\t\tif (!this._originalSelection.isEmpty()) {\n\t\t\t// Preserve selection and extends to typed text\n\t\t\treturn new Selection(\n\t\t\t\tsrcRange.endLineNumber,\n\t\t\t\tsrcRange.endColumn - this._text.length,\n\t\t\t\tsrcRange.endLineNumber,\n\t\t\t\tsrcRange.endColumn\n\t\t\t);\n\t\t}\n\n\t\treturn new Selection(\n\t\t\tsrcRange.endLineNumber,\n\t\t\tMath.min(this._originalSelection.positionColumn, srcRange.endColumn),\n\t\t\tsrcRange.endLineNumber,\n\t\t\tMath.min(this._originalSelection.positionColumn, srcRange.endColumn)\n\t\t);\n\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 *--------------------------------------------------------------------------------------------*/\n\nexport function getSpaceCnt(str, tabSize) {\n\tlet spacesCnt = 0;\n\n\tfor (let i = 0; i < str.length; i++) {\n\t\tif (str.charAt(i) === '\\t') {\n\t\t\tspacesCnt += tabSize;\n\t\t} else {\n\t\t\tspacesCnt++;\n\t\t}\n\t}\n\n\treturn spacesCnt;\n}\n\nexport function generateIndent(spacesCnt: number, tabSize, insertSpaces) {\n\tspacesCnt = spacesCnt < 0 ? 0 : spacesCnt;\n\n\tlet result = '';\n\tif (!insertSpaces) {\n\t\tlet tabsCnt = Math.floor(spacesCnt / tabSize);\n\t\tspacesCnt = spacesCnt % tabSize;\n\t\tfor (let i = 0; i < tabsCnt; i++) {\n\t\t\tresult += '\\t';\n\t\t}\n\t}\n\n\tfor (let i = 0; i < spacesCnt; i++) {\n\t\tresult += ' ';\n\t}\n\n\treturn result;\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'use strict';\n\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection, SelectionDirection } from 'vs/editor/common/core/selection';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\n\nexport class CopyLinesCommand implements editorCommon.ICommand {\n\n\tprivate _selection: Selection;\n\tprivate _isCopyingDown: boolean;\n\n\tprivate _selectionDirection: SelectionDirection;\n\tprivate _selectionId: string;\n\tprivate _startLineNumberDelta: number;\n\tprivate _endLineNumberDelta: number;\n\n\tconstructor(selection: Selection, isCopyingDown: boolean) {\n\t\tthis._selection = selection;\n\t\tthis._isCopyingDown = isCopyingDown;\n\t}\n\n\tpublic getEditOperations(model: editorCommon.ITokenizedModel, builder: editorCommon.IEditOperationBuilder): void {\n\t\tvar s = this._selection;\n\n\t\tthis._startLineNumberDelta = 0;\n\t\tthis._endLineNumberDelta = 0;\n\t\tif (s.startLineNumber < s.endLineNumber && s.endColumn === 1) {\n\t\t\tthis._endLineNumberDelta = 1;\n\t\t\ts = s.setEndPosition(s.endLineNumber - 1, model.getLineMaxColumn(s.endLineNumber - 1));\n\t\t}\n\n\t\tvar sourceLines: string[] = [];\n\t\tfor (var i = s.startLineNumber; i <= s.endLineNumber; i++) {\n\t\t\tsourceLines.push(model.getLineContent(i));\n\t\t}\n\t\tvar sourceText = sourceLines.join('\\n');\n\n\t\tif (sourceText === '') {\n\t\t\t// Duplicating empty line\n\t\t\tif (this._isCopyingDown) {\n\t\t\t\tthis._startLineNumberDelta++;\n\t\t\t\tthis._endLineNumberDelta++;\n\t\t\t}\n\t\t}\n\n\t\tif (!this._isCopyingDown) {\n\t\t\tbuilder.addEditOperation(new Range(s.endLineNumber, model.getLineMaxColumn(s.endLineNumber), s.endLineNumber, model.getLineMaxColumn(s.endLineNumber)), '\\n' + sourceText);\n\t\t} else {\n\t\t\tbuilder.addEditOperation(new Range(s.startLineNumber, 1, s.startLineNumber, 1), sourceText + '\\n');\n\t\t}\n\n\t\tthis._selectionId = builder.trackSelection(s);\n\t\tthis._selectionDirection = this._selection.getDirection();\n\t}\n\n\tpublic computeCursorState(model: editorCommon.ITokenizedModel, helper: editorCommon.ICursorStateComputerData): Selection {\n\t\tvar result = helper.getTrackedSelection(this._selectionId);\n\n\t\tif (this._startLineNumberDelta !== 0 || this._endLineNumberDelta !== 0) {\n\t\t\tvar startLineNumber = result.startLineNumber,\n\t\t\t\tstartColumn = result.startColumn,\n\t\t\t\tendLineNumber = result.endLineNumber,\n\t\t\t\tendColumn = result.endColumn;\n\n\t\t\tif (this._startLineNumberDelta !== 0) {\n\t\t\t\tstartLineNumber = startLineNumber + this._startLineNumberDelta;\n\t\t\t\tstartColumn = 1;\n\t\t\t}\n\n\t\t\tif (this._endLineNumberDelta !== 0) {\n\t\t\t\tendLineNumber = endLineNumber + this._endLineNumberDelta;\n\t\t\t\tendColumn = 1;\n\t\t\t}\n\n\t\t\tresult = Selection.createWithDirection(startLineNumber, startColumn, endLineNumber, endColumn, this._selectionDirection);\n\t\t}\n\n\t\treturn result;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { ICommand, ICursorStateComputerData, IEditOperationBuilder, ITokenizedModel } from 'vs/editor/common/editorCommon';\n\n\nexport class DeleteLinesCommand implements ICommand {\n\n\tpublic static createFromSelection(selection: Selection): DeleteLinesCommand {\n\t\tvar endLineNumber = selection.endLineNumber;\n\t\tif (selection.startLineNumber < selection.endLineNumber && selection.endColumn === 1) {\n\t\t\tendLineNumber -= 1;\n\t\t}\n\t\treturn new DeleteLinesCommand(selection.startLineNumber, endLineNumber, selection.positionColumn);\n\t}\n\n\tprivate startLineNumber: number;\n\tprivate endLineNumber: number;\n\tprivate restoreCursorToColumn: number;\n\n\tconstructor(startLineNumber: number, endLineNumber: number, restoreCursorToColumn: number) {\n\t\tthis.startLineNumber = startLineNumber;\n\t\tthis.endLineNumber = endLineNumber;\n\t\tthis.restoreCursorToColumn = restoreCursorToColumn;\n\t}\n\n\tpublic getEditOperations(model: ITokenizedModel, builder: IEditOperationBuilder): void {\n\t\tif (model.getLineCount() === 1 && model.getLineMaxColumn(1) === 1) {\n\t\t\t// Model is empty\n\t\t\treturn;\n\t\t}\n\n\t\tvar startLineNumber = this.startLineNumber;\n\t\tvar endLineNumber = this.endLineNumber;\n\n\t\tvar startColumn = 1;\n\t\tvar endColumn = model.getLineMaxColumn(endLineNumber);\n\t\tif (endLineNumber < model.getLineCount()) {\n\t\t\tendLineNumber += 1;\n\t\t\tendColumn = 1;\n\t\t} else if (startLineNumber > 1) {\n\t\t\tstartLineNumber -= 1;\n\t\t\tstartColumn = model.getLineMaxColumn(startLineNumber);\n\t\t}\n\n\t\tbuilder.addTrackedEditOperation(new Range(startLineNumber, startColumn, endLineNumber, endColumn), null);\n\t}\n\n\tpublic computeCursorState(model: ITokenizedModel, helper: ICursorStateComputerData): Selection {\n\t\tvar inverseEditOperations = helper.getInverseEditOperations();\n\t\tvar srcRange = inverseEditOperations[0].range;\n\t\treturn new Selection(\n\t\t\tsrcRange.endLineNumber,\n\t\t\tthis.restoreCursorToColumn,\n\t\t\tsrcRange.endLineNumber,\n\t\t\tthis.restoreCursorToColumn\n\t\t);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { EditOperation } from 'vs/editor/common/core/editOperation';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection } from 'vs/editor/common/core/selection';\n\nexport class SortLinesCommand implements editorCommon.ICommand {\n\n\tprivate selection: Selection;\n\tprivate selectionId: string;\n\tprivate descending: boolean;\n\n\tconstructor(selection: Selection, descending: boolean) {\n\t\tthis.selection = selection;\n\t\tthis.descending = descending;\n\t}\n\n\tpublic getEditOperations(model: editorCommon.ITokenizedModel, builder: editorCommon.IEditOperationBuilder): void {\n\t\tlet op = sortLines(model, this.selection, this.descending);\n\t\tif (op) {\n\t\t\tbuilder.addEditOperation(op.range, op.text);\n\t\t}\n\n\t\tthis.selectionId = builder.trackSelection(this.selection);\n\t}\n\n\tpublic computeCursorState(model: editorCommon.ITokenizedModel, helper: editorCommon.ICursorStateComputerData): Selection {\n\t\treturn helper.getTrackedSelection(this.selectionId);\n\t}\n\n\tpublic static canRun(model: editorCommon.ITextModel, selection: Selection, descending: boolean): boolean {\n\t\tlet data = getSortData(model, selection, descending);\n\n\t\tif (!data) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (let i = 0, len = data.before.length; i < len; i++) {\n\t\t\tif (data.before[i] !== data.after[i]) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n}\n\nfunction getSortData(model: editorCommon.ITextModel, selection: Selection, descending: boolean) {\n\tlet startLineNumber = selection.startLineNumber;\n\tlet endLineNumber = selection.endLineNumber;\n\n\tif (selection.endColumn === 1) {\n\t\tendLineNumber--;\n\t}\n\n\t// Nothing to sort if user didn't select anything.\n\tif (startLineNumber >= endLineNumber) {\n\t\treturn null;\n\t}\n\n\tlet linesToSort = [];\n\n\t// Get the contents of the selection to be sorted.\n\tfor (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n\t\tlinesToSort.push(model.getLineContent(lineNumber));\n\t}\n\n\tlet sorted = linesToSort.slice(0);\n\tsorted.sort((a, b) => {\n\t\treturn a.toLowerCase().localeCompare(b.toLowerCase());\n\t});\n\n\t// If descending, reverse the order.\n\tif (descending === true) {\n\t\tsorted = sorted.reverse();\n\t}\n\n\treturn {\n\t\tstartLineNumber: startLineNumber,\n\t\tendLineNumber: endLineNumber,\n\t\tbefore: linesToSort,\n\t\tafter: sorted\n\t};\n}\n\n/**\n * Generate commands for sorting lines on a model.\n */\nfunction sortLines(model: editorCommon.ITextModel, selection: Selection, descending: boolean): editorCommon.IIdentifiedSingleEditOperation {\n\tlet data = getSortData(model, selection, descending);\n\n\tif (!data) {\n\t\treturn null;\n\t}\n\n\treturn EditOperation.replace(\n\t\tnew Range(data.startLineNumber, 1, data.endLineNumber, model.getLineMaxColumn(data.endLineNumber)),\n\t\tdata.after.join('\\n')\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport 'vs/css!./lightBulbWidget';\nimport { CancellationTokenSource } from 'vs/base/common/cancellation';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport * as dom from 'vs/base/browser/dom';\nimport { TrackedRangeStickiness } from 'vs/editor/common/editorCommon';\nimport { ICodeEditor, MouseTargetType } from 'vs/editor/browser/editorBrowser';\nimport { QuickFixComputeEvent } from './quickFixModel';\n\nexport class LightBulbWidget implements IDisposable {\n\n\tprivate readonly _options = {\n\t\tstickiness: TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\tglyphMarginClassName: 'lightbulb-glyph',\n\t\tglyphMarginHoverMessage: undefined\n\t};\n\n\tprivate readonly _editor: ICodeEditor;\n\tprivate readonly _onClick = new Emitter<{ x: number, y: number }>();\n\tprivate readonly _mouseDownSubscription: IDisposable;\n\n\tprivate _decorationIds: string[] = [];\n\tprivate _currentLine: number;\n\tprivate _model: QuickFixComputeEvent;\n\tprivate _futureFixes = new CancellationTokenSource();\n\n\tconstructor(editor: ICodeEditor) {\n\t\tthis._editor = editor;\n\t\tthis._mouseDownSubscription = this._editor.onMouseDown(e => {\n\n\t\t\t// not on glyh margin or not on 💡\n\t\t\tif (e.target.type !== MouseTargetType.GUTTER_GLYPH_MARGIN\n\t\t\t\t|| this._currentLine === undefined\n\t\t\t\t|| this._currentLine !== e.target.position.lineNumber\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// a bit of extra work to make sure the menu\n\t\t\t// doesn't cover the line-text\n\t\t\tconst { top, height } = dom.getDomNodePagePosition(e.target.element);\n\t\t\tconst { lineHeight } = this._editor.getConfiguration();\n\t\t\tthis._onClick.fire({\n\t\t\t\tx: e.event.posx,\n\t\t\t\ty: top + height + Math.floor(lineHeight / 3)\n\t\t\t});\n\t\t});\n\t}\n\n\tdispose(): void {\n\t\tthis._mouseDownSubscription.dispose();\n\t\tthis.hide();\n\t}\n\n\tget onClick(): Event<{ x: number, y: number }> {\n\t\treturn this._onClick.event;\n\t}\n\n\tset model(e: QuickFixComputeEvent) {\n\t\tthis._model = e;\n\t\tthis.hide();\n\t\tthis._futureFixes = new CancellationTokenSource();\n\t\tconst { token } = this._futureFixes;\n\n\t\te.fixes.done(fixes => {\n\t\t\tif (!token.isCancellationRequested && fixes && fixes.length > 0) {\n\t\t\t\tthis.show(e);\n\t\t\t} else {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t}, err => {\n\t\t\tthis.hide();\n\t\t});\n\t}\n\n\tget model(): QuickFixComputeEvent {\n\t\treturn this._model;\n\t}\n\n\tset title(value: string) {\n\t\t// TODO(joh,alex) this isn't working well because the hover hover\n\t\t// message sticks around after clicking the light bulb\n\t\t// this._options.glyphMarginHoverMessage = value;\n\t}\n\n\tget title() {\n\t\treturn this._options.glyphMarginHoverMessage;\n\t}\n\n\tshow(e: QuickFixComputeEvent): void {\n\t\tthis._currentLine = e.range.startLineNumber;\n\t\tthis._decorationIds = this._editor.deltaDecorations(this._decorationIds, [{\n\t\t\toptions: this._options,\n\t\t\trange: { ...e.range, endLineNumber: e.range.startLineNumber }\n\t\t}]);\n\t}\n\n\thide(): void {\n\t\tthis._decorationIds = this._editor.deltaDecorations(this._decorationIds, []);\n\t\tthis._futureFixes.cancel();\n\t\tthis._currentLine = undefined;\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { always } from 'vs/base/common/async';\nimport { getDomNodePagePosition } from 'vs/base/browser/dom';\nimport { Position } from 'vs/editor/common/core/position';\nimport { ICodeEditor } from 'vs/editor/browser/editorBrowser';\nimport { CodeAction } from 'vs/editor/common/modes';\nimport { IContextMenuService } from 'vs/platform/contextview/browser/contextView';\nimport { ICommandService } from 'vs/platform/commands/common/commands';\nimport { Action } from 'vs/base/common/actions';\nimport Event, { Emitter } from 'vs/base/common/event';\n\nexport class QuickFixContextMenu {\n\n\tprivate _editor: ICodeEditor;\n\tprivate _contextMenuService: IContextMenuService;\n\tprivate _commandService: ICommandService;\n\tprivate _visible: boolean;\n\tprivate _onDidExecuteCodeAction = new Emitter();\n\n\treadonly onDidExecuteCodeAction: Event = this._onDidExecuteCodeAction.event;\n\n\tconstructor(editor: ICodeEditor, contextMenuService: IContextMenuService, commandService: ICommandService) {\n\t\tthis._editor = editor;\n\t\tthis._contextMenuService = contextMenuService;\n\t\tthis._commandService = commandService;\n\t}\n\n\tshow(fixes: TPromise, at: { x: number; y: number } | Position) {\n\n\t\tconst actions = fixes.then(value => {\n\t\t\treturn value.map(({ command }) => {\n\t\t\t\treturn new Action(command.id, command.title, undefined, true, () => {\n\t\t\t\t\treturn always(\n\t\t\t\t\t\tthis._commandService.executeCommand(command.id, ...command.arguments),\n\t\t\t\t\t\t() => this._onDidExecuteCodeAction.fire(undefined)\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tthis._contextMenuService.showContextMenu({\n\t\t\tgetAnchor: () => {\n\t\t\t\tif (Position.isIPosition(at)) {\n\t\t\t\t\tat = this._toCoords(at);\n\t\t\t\t}\n\t\t\t\treturn at;\n\t\t\t},\n\t\t\tgetActions: () => actions,\n\t\t\tonHide: () => { this._visible = false; }\n\t\t});\n\t}\n\n\tget isVisible(): boolean {\n\t\treturn this._visible;\n\t}\n\n\tprivate _toCoords(position: Position): { x: number, y: number } {\n\n\t\tthis._editor.revealPosition(position);\n\t\tthis._editor.render();\n\n\t\t// Translate to absolute editor position\n\t\tconst cursorCoords = this._editor.getScrolledVisiblePosition(this._editor.getPosition());\n\t\tconst editorCoords = getDomNodePagePosition(this._editor.getDomNode());\n\t\tconst x = editorCoords.left + cursorCoords.left;\n\t\tconst y = editorCoords.top + cursorCoords.top + cursorCoords.height;\n\n\t\treturn { x, y };\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport { IModel } from 'vs/editor/common/editorCommon';\nimport { LineToken } from 'vs/editor/common/core/lineTokens';\nimport { ignoreBracketsInToken } from 'vs/editor/common/modes/supports';\nimport { BracketsUtils, RichEditBrackets } from 'vs/editor/common/modes/supports/richEditBrackets';\nimport { LanguageConfigurationRegistry } from 'vs/editor/common/modes/languageConfigurationRegistry';\nimport { LanguageId, StandardTokenType } from 'vs/editor/common/modes';\n\nexport const enum TokenTreeBracket {\n\tNone = 0,\n\tOpen = 1,\n\tClose = -1\n}\n\nexport class Node {\n\n\tstart: Position;\n\n\tend: Position;\n\n\tget range(): Range {\n\t\treturn new Range(\n\t\t\tthis.start.lineNumber,\n\t\t\tthis.start.column,\n\t\t\tthis.end.lineNumber,\n\t\t\tthis.end.column\n\t\t);\n\t}\n\n\tparent: Node;\n}\n\nexport class NodeList extends Node {\n\n\tchildren: Node[];\n\n\tget start(): Position {\n\t\treturn this.hasChildren\n\t\t\t? this.children[0].start\n\t\t\t: this.parent.start;\n\t}\n\n\tget end(): Position {\n\t\treturn this.hasChildren\n\t\t\t? this.children[this.children.length - 1].end\n\t\t\t: this.parent.end;\n\t}\n\n\tget hasChildren() {\n\t\treturn this.children && this.children.length > 0;\n\t}\n\n\tget isEmpty() {\n\t\treturn !this.hasChildren && !this.parent;\n\t}\n\n\tpublic append(node: Node): boolean {\n\t\tif (!node) {\n\t\t\treturn false;\n\t\t}\n\t\tnode.parent = this;\n\t\tif (!this.children) {\n\t\t\tthis.children = [];\n\t\t}\n\t\tif (node instanceof NodeList) {\n\t\t\tif (node.children) {\n\t\t\t\tthis.children.push.apply(this.children, node.children);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.children.push(node);\n\t\t}\n\t\treturn true;\n\t}\n}\n\nexport class Block extends Node {\n\n\topen: Node;\n\tclose: Node;\n\telements: NodeList;\n\n\tget start(): Position {\n\t\treturn this.open.start;\n\t}\n\n\tget end(): Position {\n\t\treturn this.close.end;\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.elements = new NodeList();\n\t\tthis.elements.parent = this;\n\t}\n}\n\nclass Token {\n\t_tokenBrand: void;\n\n\treadonly range: Range;\n\treadonly bracket: TokenTreeBracket;\n\treadonly bracketType: string;\n\n\tconstructor(range: Range, bracket: TokenTreeBracket, bracketType: string) {\n\t\tthis.range = range;\n\t\tthis.bracket = bracket;\n\t\tthis.bracketType = bracketType;\n\t}\n}\n\nfunction newNode(token: Token): Node {\n\tvar node = new Node();\n\tnode.start = token.range.getStartPosition();\n\tnode.end = token.range.getEndPosition();\n\treturn node;\n}\n\nclass RawToken {\n\t_basicTokenBrand: void;\n\n\tpublic lineNumber: number;\n\tpublic lineText: string;\n\tpublic startOffset: number;\n\tpublic endOffset: number;\n\tpublic type: StandardTokenType;\n\tpublic languageId: LanguageId;\n\n\tconstructor(source: LineToken, lineNumber: number, lineText: string) {\n\t\tthis.lineNumber = lineNumber;\n\t\tthis.lineText = lineText;\n\t\tthis.startOffset = source.startOffset;\n\t\tthis.endOffset = source.endOffset;\n\t\tthis.type = source.tokenType;\n\t\tthis.languageId = source.languageId;\n\t}\n}\n\nclass ModelRawTokenScanner {\n\n\tprivate _model: IModel;\n\tprivate _lineCount: number;\n\tprivate _versionId: number;\n\tprivate _lineNumber: number;\n\tprivate _lineText: string;\n\tprivate _next: LineToken;\n\n\tconstructor(model: IModel) {\n\t\tthis._model = model;\n\t\tthis._lineCount = this._model.getLineCount();\n\t\tthis._versionId = this._model.getVersionId();\n\t\tthis._lineNumber = 0;\n\t\tthis._lineText = null;\n\t\tthis._advance();\n\t}\n\n\tprivate _advance(): void {\n\t\tthis._next = (this._next ? this._next.next() : null);\n\t\twhile (!this._next && this._lineNumber < this._lineCount) {\n\t\t\tthis._lineNumber++;\n\t\t\tthis._lineText = this._model.getLineContent(this._lineNumber);\n\t\t\tthis._model.forceTokenization(this._lineNumber);\n\t\t\tlet currentLineTokens = this._model.getLineTokens(this._lineNumber);\n\t\t\tthis._next = currentLineTokens.firstToken();\n\t\t}\n\t}\n\n\tpublic next(): RawToken {\n\t\tif (!this._next) {\n\t\t\treturn null;\n\t\t}\n\t\tif (this._model.getVersionId() !== this._versionId) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet result = new RawToken(this._next, this._lineNumber, this._lineText);\n\t\tthis._advance();\n\t\treturn result;\n\t}\n}\n\nclass TokenScanner {\n\n\tprivate _rawTokenScanner: ModelRawTokenScanner;\n\tprivate _nextBuff: Token[];\n\n\tprivate _cachedLanguageBrackets: RichEditBrackets;\n\tprivate _cachedLanguageId: LanguageId;\n\n\tconstructor(model: IModel) {\n\t\tthis._rawTokenScanner = new ModelRawTokenScanner(model);\n\t\tthis._nextBuff = [];\n\t\tthis._cachedLanguageBrackets = null;\n\t\tthis._cachedLanguageId = -1;\n\t}\n\n\tnext(): Token {\n\t\tif (this._nextBuff.length > 0) {\n\t\t\treturn this._nextBuff.shift();\n\t\t}\n\n\t\tconst token = this._rawTokenScanner.next();\n\t\tif (!token) {\n\t\t\treturn null;\n\t\t}\n\t\tconst lineNumber = token.lineNumber;\n\t\tconst lineText = token.lineText;\n\t\tconst tokenType = token.type;\n\t\tlet startOffset = token.startOffset;\n\t\tconst endOffset = token.endOffset;\n\n\t\tif (this._cachedLanguageId !== token.languageId) {\n\t\t\tthis._cachedLanguageId = token.languageId;\n\t\t\tthis._cachedLanguageBrackets = LanguageConfigurationRegistry.getBracketsSupport(this._cachedLanguageId);\n\t\t}\n\t\tconst modeBrackets = this._cachedLanguageBrackets;\n\n\t\tif (!modeBrackets || ignoreBracketsInToken(tokenType)) {\n\t\t\treturn new Token(\n\t\t\t\tnew Range(lineNumber, startOffset + 1, lineNumber, endOffset + 1),\n\t\t\t\tTokenTreeBracket.None,\n\t\t\t\tnull\n\t\t\t);\n\t\t}\n\n\t\tlet foundBracket: Range;\n\t\tdo {\n\t\t\tfoundBracket = BracketsUtils.findNextBracketInToken(modeBrackets.forwardRegex, lineNumber, lineText, startOffset, endOffset);\n\t\t\tif (foundBracket) {\n\t\t\t\tconst foundBracketStartOffset = foundBracket.startColumn - 1;\n\t\t\t\tconst foundBracketEndOffset = foundBracket.endColumn - 1;\n\n\t\t\t\tif (startOffset < foundBracketStartOffset) {\n\t\t\t\t\t// there is some text before this bracket in this token\n\t\t\t\t\tthis._nextBuff.push(new Token(\n\t\t\t\t\t\tnew Range(lineNumber, startOffset + 1, lineNumber, foundBracketStartOffset + 1),\n\t\t\t\t\t\tTokenTreeBracket.None,\n\t\t\t\t\t\tnull\n\t\t\t\t\t));\n\t\t\t\t}\n\n\t\t\t\tlet bracketText = lineText.substring(foundBracketStartOffset, foundBracketEndOffset);\n\t\t\t\tbracketText = bracketText.toLowerCase();\n\n\t\t\t\tconst bracketData = modeBrackets.textIsBracket[bracketText];\n\t\t\t\tconst bracketIsOpen = modeBrackets.textIsOpenBracket[bracketText];\n\n\t\t\t\tthis._nextBuff.push(new Token(\n\t\t\t\t\tnew Range(lineNumber, foundBracketStartOffset + 1, lineNumber, foundBracketEndOffset + 1),\n\t\t\t\t\tbracketIsOpen ? TokenTreeBracket.Open : TokenTreeBracket.Close,\n\t\t\t\t\t`${bracketData.languageIdentifier.language};${bracketData.open};${bracketData.close}`\n\t\t\t\t));\n\n\t\t\t\tstartOffset = foundBracketEndOffset;\n\t\t\t}\n\t\t} while (foundBracket);\n\n\t\tif (startOffset < endOffset) {\n\t\t\t// there is some remaining none-bracket text in this token\n\t\t\tthis._nextBuff.push(new Token(\n\t\t\t\tnew Range(lineNumber, startOffset + 1, lineNumber, endOffset + 1),\n\t\t\t\tTokenTreeBracket.None,\n\t\t\t\tnull\n\t\t\t));\n\t\t}\n\n\t\treturn this._nextBuff.shift();\n\t}\n}\n\nclass TokenTreeBuilder {\n\n\tprivate _scanner: TokenScanner;\n\tprivate _stack: Token[] = [];\n\tprivate _currentToken: Token;\n\n\tconstructor(model: IModel) {\n\t\tthis._scanner = new TokenScanner(model);\n\t}\n\n\tpublic build(): Node {\n\t\tvar node = new NodeList();\n\t\twhile (node.append(this._line() || this._any())) {\n\t\t\t// accept all\n\t\t}\n\t\treturn node;\n\t}\n\n\tprivate _accept(condt: (info: Token) => boolean): boolean {\n\t\tvar token = this._stack.pop() || this._scanner.next();\n\t\tif (!token) {\n\t\t\treturn false;\n\t\t}\n\t\tvar accepted = condt(token);\n\t\tif (!accepted) {\n\t\t\tthis._stack.push(token);\n\t\t\tthis._currentToken = null;\n\t\t} else {\n\t\t\tthis._currentToken = token;\n\t\t\t//\t\t\tconsole.log('accepted: ' + token.__debugContent);\n\t\t}\n\t\treturn accepted;\n\t}\n\n\tprivate _peek(condt: (info: Token) => boolean): boolean {\n\t\tvar ret = false;\n\t\tthis._accept(info => {\n\t\t\tret = condt(info);\n\t\t\treturn false;\n\t\t});\n\t\treturn ret;\n\t}\n\n\tprivate _line(): Node {\n\t\tvar node = new NodeList(),\n\t\t\tlineNumber: number;\n\n\t\t// capture current linenumber\n\t\tthis._peek(info => {\n\t\t\tlineNumber = info.range.startLineNumber;\n\t\t\treturn false;\n\t\t});\n\n\t\twhile (this._peek(info => info.range.startLineNumber === lineNumber)\n\t\t\t&& node.append(this._token() || this._block())) {\n\n\t\t\t// all children that started on this line\n\t\t}\n\n\t\tif (!node.children || node.children.length === 0) {\n\t\t\treturn null;\n\t\t} else if (node.children.length === 1) {\n\t\t\treturn node.children[0];\n\t\t} else {\n\t\t\treturn node;\n\t\t}\n\t}\n\n\tprivate _token(): Node {\n\t\tif (!this._accept(token => token.bracket === TokenTreeBracket.None)) {\n\t\t\treturn null;\n\t\t}\n\t\treturn newNode(this._currentToken);\n\t}\n\n\tprivate _block(): Node {\n\n\t\tvar bracketType: string,\n\t\t\taccepted: boolean;\n\n\t\taccepted = this._accept(token => {\n\t\t\tbracketType = token.bracketType;\n\t\t\treturn token.bracket === TokenTreeBracket.Open;\n\t\t});\n\t\tif (!accepted) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar bracket = new Block();\n\t\tbracket.open = newNode(this._currentToken);\n\t\twhile (bracket.elements.append(this._line())) {\n\t\t\t// inside brackets\n\t\t}\n\n\t\tif (!this._accept(token => token.bracket === TokenTreeBracket.Close && token.bracketType === bracketType)) {\n\t\t\t// missing closing bracket -> return just a node list\n\t\t\tvar nodelist = new NodeList();\n\t\t\tnodelist.append(bracket.open);\n\t\t\tnodelist.append(bracket.elements);\n\t\t\treturn nodelist;\n\t\t}\n\n\t\tbracket.close = newNode(this._currentToken);\n\t\treturn bracket;\n\t}\n\n\tprivate _any(): Node {\n\t\tif (!this._accept(_ => true)) {\n\t\t\treturn null;\n\t\t}\n\t\treturn newNode(this._currentToken);\n\t}\n}\n\n/**\n * Parses this grammar:\n *\tgrammer = { line }\n *\tline = { block | \"token\" }\n *\tblock = \"open_bracket\" { line } \"close_bracket\"\n */\nexport function build(model: IModel): Node {\n\tvar node = new TokenTreeBuilder(model).build();\n\treturn node;\n}\n\nexport function find(node: Node, position: Position): Node {\n\tif (node instanceof NodeList && node.isEmpty) {\n\t\treturn null;\n\t}\n\n\tif (!Range.containsPosition(node.range, position)) {\n\t\treturn null;\n\t}\n\n\tvar result: Node;\n\n\tif (node instanceof NodeList) {\n\t\tif (node.hasChildren) {\n\t\t\tfor (var i = 0, len = node.children.length; i < len && !result; i++) {\n\t\t\t\tresult = find(node.children[i], position);\n\t\t\t}\n\t\t}\n\n\t} else if (node instanceof Block) {\n\t\tresult = find(node.open, position) || find(node.elements, position) || find(node.close, position);\n\t}\n\n\treturn result || 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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { CharCode } from 'vs/base/common/charCode';\n\nexport enum TokenType {\n\tDollar,\n\tColon,\n\tCurlyOpen,\n\tCurlyClose,\n\tBackslash,\n\tInt,\n\tVariableName,\n\tFormat,\n\tEOF\n}\n\nexport interface Token {\n\ttype: TokenType;\n\tpos: number;\n\tlen: number;\n}\n\n\nexport class Scanner {\n\n\tprivate static _table: { [ch: number]: TokenType } = {\n\t\t[CharCode.DollarSign]: TokenType.Dollar,\n\t\t[CharCode.Colon]: TokenType.Colon,\n\t\t[CharCode.OpenCurlyBrace]: TokenType.CurlyOpen,\n\t\t[CharCode.CloseCurlyBrace]: TokenType.CurlyClose,\n\t\t[CharCode.Backslash]: TokenType.Backslash,\n\t};\n\n\tstatic isDigitCharacter(ch: number): boolean {\n\t\treturn ch >= CharCode.Digit0 && ch <= CharCode.Digit9;\n\t}\n\n\tstatic isVariableCharacter(ch: number): boolean {\n\t\treturn ch === CharCode.Underline\n\t\t\t|| (ch >= CharCode.a && ch <= CharCode.z)\n\t\t\t|| (ch >= CharCode.A && ch <= CharCode.Z);\n\t}\n\n\tvalue: string;\n\tpos: number;\n\n\tconstructor() {\n\t\tthis.text('');\n\t}\n\n\ttext(value: string) {\n\t\tthis.value = value;\n\t\tthis.pos = 0;\n\t}\n\n\ttokenText(token: Token): string {\n\t\treturn this.value.substr(token.pos, token.len);\n\t}\n\n\tnext(): Token {\n\n\t\tif (this.pos >= this.value.length) {\n\t\t\treturn { type: TokenType.EOF, pos: this.pos, len: 0 };\n\t\t}\n\n\t\tlet pos = this.pos;\n\t\tlet len = 0;\n\t\tlet ch = this.value.charCodeAt(pos);\n\t\tlet type: TokenType;\n\n\t\t// static types\n\t\ttype = Scanner._table[ch];\n\t\tif (typeof type === 'number') {\n\t\t\tthis.pos += 1;\n\t\t\treturn { type, pos, len: 1 };\n\t\t}\n\n\t\t// number\n\t\tif (Scanner.isDigitCharacter(ch)) {\n\t\t\ttype = TokenType.Int;\n\t\t\tdo {\n\t\t\t\tlen += 1;\n\t\t\t\tch = this.value.charCodeAt(pos + len);\n\t\t\t} while (Scanner.isDigitCharacter(ch));\n\n\t\t\tthis.pos += len;\n\t\t\treturn { type, pos, len };\n\t\t}\n\n\t\t// variable name\n\t\tif (Scanner.isVariableCharacter(ch)) {\n\t\t\ttype = TokenType.VariableName;\n\t\t\tdo {\n\t\t\t\tch = this.value.charCodeAt(pos + (++len));\n\t\t\t} while (Scanner.isVariableCharacter(ch) || Scanner.isDigitCharacter(ch));\n\n\t\t\tthis.pos += len;\n\t\t\treturn { type, pos, len };\n\t\t}\n\n\n\t\t// format\n\t\ttype = TokenType.Format;\n\t\tdo {\n\t\t\tlen += 1;\n\t\t\tch = this.value.charCodeAt(pos + len);\n\t\t} while (\n\t\t\t!isNaN(ch)\n\t\t\t&& typeof Scanner._table[ch] === 'undefined' // not static token\n\t\t\t&& !Scanner.isDigitCharacter(ch) // not number\n\t\t\t&& !Scanner.isVariableCharacter(ch) // not variable\n\t\t);\n\n\t\tthis.pos += len;\n\t\treturn { type, pos, len };\n\t}\n}\n\nexport abstract class Marker {\n\t_markerBrand: any;\n\n\tstatic toString(marker?: Marker[]): string {\n\t\tlet result = '';\n\t\tfor (const m of marker) {\n\t\t\tresult += m.toString();\n\t\t}\n\t\treturn result;\n\t}\n\n\tparent: Marker;\n\n\tprivate _children: Marker[] = [];\n\n\tset children(marker: Marker[]) {\n\t\tthis._children = [];\n\t\tfor (const m of marker) {\n\t\t\tm.parent = this;\n\t\t\tthis._children.push(m);\n\t\t}\n\t\t// Object.freeze(this._children);\n\t}\n\n\tget children(): Marker[] {\n\t\treturn this._children;\n\t}\n\n\ttoString() {\n\t\treturn '';\n\t}\n\tlen(): number {\n\t\treturn 0;\n\t}\n}\n\nexport class Text extends Marker {\n\tconstructor(public string: string) {\n\t\tsuper();\n\t}\n\ttoString() {\n\t\treturn this.string;\n\t}\n\tlen(): number {\n\t\treturn this.string.length;\n\t}\n}\n\nexport class Placeholder extends Marker {\n\n\tstatic compareByIndex(a: Placeholder, b: Placeholder): number {\n\t\tif (a.index === b.index) {\n\t\t\treturn 0;\n\t\t} else if (a.isFinalTabstop) {\n\t\t\treturn 1;\n\t\t} else if (b.isFinalTabstop) {\n\t\t\treturn -1;\n\t\t} else if (a.index < b.index) {\n\t\t\treturn -1;\n\t\t} else if (a.index > b.index) {\n\t\t\treturn 1;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tconstructor(public index: number, children: Marker[]) {\n\t\tsuper();\n\t\tthis.children = children;\n\t}\n\tget isFinalTabstop() {\n\t\treturn this.index === 0;\n\t}\n\ttoString() {\n\t\treturn Marker.toString(this.children);\n\t}\n}\n\nexport class Variable extends Marker {\n\n\tresolvedValue: string;\n\n\tconstructor(public name: string = '', children: Marker[]) {\n\t\tsuper();\n\t\tthis.children = children;\n\t}\n\tget isDefined(): boolean {\n\t\treturn this.resolvedValue !== undefined;\n\t}\n\tlen(): number {\n\t\tif (this.isDefined) {\n\t\t\treturn this.resolvedValue.length;\n\t\t} else {\n\t\t\treturn super.len();\n\t\t}\n\t}\n\ttoString() {\n\t\treturn this.isDefined ? this.resolvedValue : Marker.toString(this.children);\n\t}\n}\nexport function walk(marker: Marker[], visitor: (marker: Marker) => boolean): void {\n\tconst stack = [...marker];\n\twhile (stack.length > 0) {\n\t\tconst marker = stack.shift();\n\t\tconst recurse = visitor(marker);\n\t\tif (!recurse) {\n\t\t\tbreak;\n\t\t}\n\t\tstack.unshift(...marker.children);\n\t}\n}\n\nexport class TextmateSnippet extends Marker {\n\n\tprivate _placeholders: Placeholder[];\n\n\tconstructor(marker: Marker[]) {\n\t\tsuper();\n\t\tthis.children = marker;\n\t}\n\n\tget placeholders(): Placeholder[] {\n\t\tif (!this._placeholders) {\n\t\t\t// fill in placeholders\n\t\t\tthis._placeholders = [];\n\t\t\twalk(this.children, candidate => {\n\t\t\t\tif (candidate instanceof Placeholder) {\n\t\t\t\t\tthis.placeholders.push(candidate);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t});\n\t\t}\n\t\treturn this._placeholders;\n\t}\n\n\toffset(marker: Marker): number {\n\t\tlet pos = 0;\n\t\tlet found = false;\n\t\twalk(this.children, candidate => {\n\t\t\tif (candidate === marker) {\n\t\t\t\tfound = true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tpos += candidate.len();\n\t\t\treturn true;\n\t\t});\n\n\t\tif (!found) {\n\t\t\treturn -1;\n\t\t}\n\t\treturn pos;\n\t}\n\n\tfullLen(marker: Marker): number {\n\t\tlet ret = 0;\n\t\twalk([marker], marker => {\n\t\t\tret += marker.len();\n\t\t\treturn true;\n\t\t});\n\t\treturn ret;\n\t}\n\n\tenclosingPlaceholders(placeholder: Placeholder): Placeholder[] {\n\t\tlet ret: Placeholder[] = [];\n\t\tlet { parent } = placeholder;\n\t\twhile (parent) {\n\t\t\tif (parent instanceof Placeholder) {\n\t\t\t\tret.push(parent);\n\t\t\t}\n\t\t\tparent = parent.parent;\n\t\t}\n\t\treturn ret;\n\t}\n\n\tget text() {\n\t\treturn Marker.toString(this.children);\n\t}\n\n\tresolveVariables(resolver: { resolve(name: string): string }): this {\n\t\twalk(this.children, candidate => {\n\t\t\tif (candidate instanceof Variable) {\n\t\t\t\tcandidate.resolvedValue = resolver.resolve(candidate.name);\n\t\t\t\tif (candidate.isDefined) {\n\t\t\t\t\t// remove default value from resolved variable\n\t\t\t\t\tcandidate.children = [];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\t\treturn this;\n\t}\n\n\treplace(marker: Marker, others: Marker[]): void {\n\t\tconst { parent } = marker;\n\t\tconst idx = parent.children.indexOf(marker);\n\t\tconst newChildren = parent.children.slice(0);\n\t\tnewChildren.splice(idx, 1, ...others);\n\t\tparent.children = newChildren;\n\t\tthis._placeholders = undefined;\n\t}\n}\n\nexport class SnippetParser {\n\n\tstatic escape(value: string): string {\n\t\treturn value.replace(/\\$|}|\\\\/g, '\\\\$&');\n\t}\n\n\tstatic parse(template: string, enforceFinalTabstop?: boolean): TextmateSnippet {\n\t\tconst marker = new SnippetParser().parse(template, true, enforceFinalTabstop);\n\t\treturn new TextmateSnippet(marker);\n\t}\n\n\tprivate _scanner = new Scanner();\n\tprivate _token: Token;\n\tprivate _prevToken: Token;\n\n\n\ttext(value: string): string {\n\t\treturn Marker.toString(this.parse(value));\n\t}\n\n\tparse(value: string, insertFinalTabstop?: boolean, enforceFinalTabstop?: boolean): Marker[] {\n\t\tconst marker: Marker[] = [];\n\n\t\tthis._scanner.text(value);\n\t\tthis._token = this._scanner.next();\n\t\twhile (this._parseAny(marker) || this._parseText(marker)) {\n\t\t\t// nothing\n\t\t}\n\n\t\t// * fill in default for empty placeHolders\n\t\t// * compact sibling Text markers\n\t\tfunction walk(marker: Marker[], placeholderDefaultValues: Map) {\n\n\t\t\tfor (let i = 0; i < marker.length; i++) {\n\t\t\t\tconst thisMarker = marker[i];\n\n\t\t\t\tif (thisMarker instanceof Placeholder) {\n\t\t\t\t\t// fill in default values for repeated placeholders\n\t\t\t\t\t// like `${1:foo}and$1` becomes ${1:foo}and${1:foo}\n\t\t\t\t\tif (!placeholderDefaultValues.has(thisMarker.index)) {\n\t\t\t\t\t\tplaceholderDefaultValues.set(thisMarker.index, thisMarker.children);\n\t\t\t\t\t\twalk(thisMarker.children, placeholderDefaultValues);\n\n\t\t\t\t\t} else if (thisMarker.children.length === 0) {\n\t\t\t\t\t\t// copy children from first placeholder definition, no need to\n\t\t\t\t\t\t// recurse on them because they have been visited already\n\t\t\t\t\t\tthisMarker.children = placeholderDefaultValues.get(thisMarker.index).slice(0);\n\t\t\t\t\t}\n\n\n\t\t\t\t} else if (thisMarker instanceof Variable) {\n\t\t\t\t\twalk(thisMarker.children, placeholderDefaultValues);\n\n\t\t\t\t} else if (i > 0 && thisMarker instanceof Text && marker[i - 1] instanceof Text) {\n\t\t\t\t\t(marker[i - 1]).string += (marker[i]).string;\n\t\t\t\t\tmarker.splice(i, 1);\n\t\t\t\t\ti--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst placeholderDefaultValues = new Map();\n\t\twalk(marker, placeholderDefaultValues);\n\n\t\tif (\n\t\t\t!placeholderDefaultValues.has(0) && // there is no final tabstop\n\t\t\t(insertFinalTabstop && placeholderDefaultValues.size > 0 || enforceFinalTabstop)\n\t\t) {\n\t\t\t// the snippet uses placeholders but has no\n\t\t\t// final tabstop defined -> insert at the end\n\t\t\tmarker.push(new Placeholder(0, []));\n\t\t}\n\n\t\treturn marker;\n\t}\n\n\tprivate _accept(type: TokenType): boolean {\n\t\tif (type === undefined || this._token.type === type) {\n\t\t\tthis._prevToken = this._token;\n\t\t\tthis._token = this._scanner.next();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate _parseAny(marker: Marker[]): boolean {\n\t\tif (this._parseEscaped(marker)) {\n\t\t\treturn true;\n\t\t} else if (this._parseTM(marker)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate _parseText(marker: Marker[]): boolean {\n\t\tif (this._token.type !== TokenType.EOF) {\n\t\t\tmarker.push(new Text(this._scanner.tokenText(this._token)));\n\t\t\tthis._accept(undefined);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate _parseTM(marker: Marker[]): boolean {\n\t\tif (this._accept(TokenType.Dollar)) {\n\n\t\t\tif (this._accept(TokenType.VariableName) || this._accept(TokenType.Int)) {\n\t\t\t\t// $FOO, $123\n\t\t\t\tconst idOrName = this._scanner.tokenText(this._prevToken);\n\t\t\t\tmarker.push(/^\\d+$/.test(idOrName) ? new Placeholder(Number(idOrName), []) : new Variable(idOrName, []));\n\t\t\t\treturn true;\n\n\t\t\t} else if (this._accept(TokenType.CurlyOpen)) {\n\t\t\t\t// ${name:children}\n\t\t\t\tlet name: Marker[] = [];\n\t\t\t\tlet children: Marker[] = [];\n\t\t\t\tlet target = name;\n\n\t\t\t\twhile (true) {\n\n\t\t\t\t\tif (target !== children && this._accept(TokenType.Colon)) {\n\t\t\t\t\t\ttarget = children;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._accept(TokenType.CurlyClose)) {\n\t\t\t\t\t\tconst idOrName = Marker.toString(name);\n\t\t\t\t\t\tmarker.push(/^\\d+$/.test(idOrName) ? new Placeholder(Number(idOrName), children) : new Variable(idOrName, children));\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._parseAny(target) || this._parseText(target)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// fallback\n\t\t\t\t\tif (children.length > 0) {\n\t\t\t\t\t\tmarker.push(new Text('${' + Marker.toString(name) + ':'));\n\t\t\t\t\t\tmarker.push(...children);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmarker.push(new Text('${'));\n\t\t\t\t\t\tmarker.push(...name);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmarker.push(new Text('$'));\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate _parseEscaped(marker: Marker[]): boolean {\n\t\tif (this._accept(TokenType.Backslash)) {\n\t\t\tif (this._accept(TokenType.Dollar) || this._accept(TokenType.CurlyClose) || this._accept(TokenType.Backslash)) {\n\t\t\t\t// just consume them\n\t\t\t}\n\t\t\tmarker.push(new Text(this._scanner.tokenText(this._prevToken)));\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { basename, dirname } from 'vs/base/common/paths';\nimport { IModel } from 'vs/editor/common/editorCommon';\nimport { Selection } from 'vs/editor/common/core/selection';\n\nexport class EditorSnippetVariableResolver {\n\n\tstatic readonly VariableNames = Object.freeze({\n\t\t'SELECTION': true,\n\t\t'TM_SELECTED_TEXT': true,\n\t\t'TM_CURRENT_LINE': true,\n\t\t'TM_CURRENT_WORD': true,\n\t\t'TM_LINE_INDEX': true,\n\t\t'TM_LINE_NUMBER': true,\n\t\t'TM_FILENAME': true,\n\t\t'TM_DIRECTORY': true,\n\t\t'TM_FILEPATH': true,\n\t});\n\n\tconstructor(\n\t\tprivate readonly _model: IModel,\n\t\tprivate readonly _selection: Selection\n\t) {\n\t\t//\n\t}\n\n\tresolve(name: string): string {\n\t\tif (name === 'SELECTION' || name === 'TM_SELECTED_TEXT') {\n\t\t\treturn this._model.getValueInRange(this._selection) || undefined;\n\n\t\t} else if (name === 'TM_CURRENT_LINE') {\n\t\t\treturn this._model.getLineContent(this._selection.positionLineNumber);\n\n\t\t} else if (name === 'TM_CURRENT_WORD') {\n\t\t\tconst info = this._model.getWordAtPosition({\n\t\t\t\tlineNumber: this._selection.positionLineNumber,\n\t\t\t\tcolumn: this._selection.positionColumn\n\t\t\t});\n\t\t\treturn info && info.word || undefined;\n\n\t\t} else if (name === 'TM_LINE_INDEX') {\n\t\t\treturn String(this._selection.positionLineNumber - 1);\n\n\t\t} else if (name === 'TM_LINE_NUMBER') {\n\t\t\treturn String(this._selection.positionLineNumber);\n\n\t\t} else if (name === 'TM_FILENAME') {\n\t\t\treturn basename(this._model.uri.fsPath);\n\n\t\t} else if (name === 'TM_DIRECTORY') {\n\t\t\tconst dir = dirname(this._model.uri.fsPath);\n\t\t\treturn dir !== '.' ? dir : '';\n\n\t\t} else if (name === 'TM_FILEPATH') {\n\t\t\treturn this._model.uri.fsPath;\n\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { fuzzyScore } from 'vs/base/common/filters';\nimport { ISuggestSupport } from 'vs/editor/common/modes';\nimport { ISuggestionItem, SnippetConfig } from './suggest';\n\nexport interface ICompletionItem extends ISuggestionItem {\n\tmatches?: number[];\n\tscore?: number;\n\tidx?: number;\n}\n\nexport interface ICompletionStats {\n\tsuggestionCount: number;\n\tsnippetCount: number;\n\ttextCount: number;\n\t[name: string]: any;\n}\n\nexport class LineContext {\n\tleadingLineContent: string;\n\tcharacterCountDelta: number;\n}\n\nexport class CompletionModel {\n\n\tprivate readonly _column: number;\n\tprivate readonly _items: ISuggestionItem[];\n\tprivate readonly _snippetCompareFn = CompletionModel._compareCompletionItems;\n\n\tprivate _lineContext: LineContext;\n\tprivate _filteredItems: ICompletionItem[];\n\tprivate _isIncomplete: boolean;\n\tprivate _stats: ICompletionStats;\n\n\tconstructor(items: ISuggestionItem[], column: number, lineContext: LineContext, snippetConfig?: SnippetConfig) {\n\t\tthis._items = items;\n\t\tthis._column = column;\n\t\tthis._lineContext = lineContext;\n\n\t\tif (snippetConfig === 'top') {\n\t\t\tthis._snippetCompareFn = CompletionModel._compareCompletionItemsSnippetsUp;\n\t\t} else if (snippetConfig === 'bottom') {\n\t\t\tthis._snippetCompareFn = CompletionModel._compareCompletionItemsSnippetsDown;\n\t\t}\n\t}\n\n\tget lineContext(): LineContext {\n\t\treturn this._lineContext;\n\t}\n\n\tset lineContext(value: LineContext) {\n\t\tif (this._lineContext.leadingLineContent !== value.leadingLineContent\n\t\t\t|| this._lineContext.characterCountDelta !== value.characterCountDelta) {\n\n\t\t\tthis._lineContext = value;\n\t\t\tthis._filteredItems = undefined;\n\t\t}\n\t}\n\n\tget items(): ICompletionItem[] {\n\t\tthis._ensureCachedState();\n\t\treturn this._filteredItems;\n\t}\n\n\tget incomplete(): boolean {\n\t\tthis._ensureCachedState();\n\t\treturn this._isIncomplete;\n\t}\n\n\tresolveIncompleteInfo(): { incomplete: ISuggestSupport[], complete: ISuggestionItem[] } {\n\t\tconst incomplete: ISuggestSupport[] = [];\n\t\tconst complete: ISuggestionItem[] = [];\n\n\t\tfor (const item of this._items) {\n\t\t\tif (!item.container.incomplete) {\n\t\t\t\tcomplete.push(item);\n\t\t\t} else if (incomplete.indexOf(item.support) < 0) {\n\t\t\t\tincomplete.push(item.support);\n\t\t\t}\n\t\t}\n\n\t\treturn { incomplete, complete };\n\t}\n\n\tget stats(): ICompletionStats {\n\t\tthis._ensureCachedState();\n\t\treturn this._stats;\n\t}\n\n\tprivate _ensureCachedState(): void {\n\t\tif (!this._filteredItems) {\n\t\t\tthis._createCachedState();\n\t\t}\n\t}\n\n\tprivate _createCachedState(): void {\n\t\tthis._filteredItems = [];\n\t\tthis._isIncomplete = false;\n\t\tthis._stats = { suggestionCount: 0, snippetCount: 0, textCount: 0 };\n\n\t\tconst { leadingLineContent, characterCountDelta } = this._lineContext;\n\t\tlet word = '';\n\n\t\tfor (let i = 0; i < this._items.length; i++) {\n\n\t\t\tconst item = this._items[i];\n\t\t\tconst { suggestion, container } = item;\n\n\t\t\t// collect those supports that signaled having\n\t\t\t// an incomplete result\n\t\t\tthis._isIncomplete = this._isIncomplete || container.incomplete;\n\n\t\t\t// 'word' is that remainder of the current line that we\n\t\t\t// filter and score against. In theory each suggestion uses a\n\t\t\t// differnet word, but in practice not - that's why we cache\n\t\t\tconst wordLen = suggestion.overwriteBefore + characterCountDelta - (item.position.column - this._column);\n\t\t\tif (word.length !== wordLen) {\n\t\t\t\tword = wordLen === 0 ? '' : leadingLineContent.slice(-wordLen);\n\t\t\t}\n\n\t\t\tif (wordLen === 0) {\n\t\t\t\t// when there is nothing to score against, don't\n\t\t\t\t// event try to do. Use a const rank and rely on\n\t\t\t\t// the fallback-sort using the initial sort order.\n\t\t\t\t// use a score of `-100` because that is out of the\n\t\t\t\t// bound of values `fuzzyScore` will return\n\t\t\t\titem.score = -100;\n\n\t\t\t} else if (typeof suggestion.filterText === 'string') {\n\t\t\t\t// when there is a `filterText` it must match the `word`.\n\t\t\t\t// if it matches we check with the label to compute highlights\n\t\t\t\t// and if that doesn't yield a result we have no highlights,\n\t\t\t\t// despite having the match\n\t\t\t\tlet match = fuzzyScore(word, suggestion.filterText, suggestion.overwriteBefore);\n\t\t\t\tif (!match) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\titem.score = match[0];\n\t\t\t\titem.matches = [];\n\t\t\t\tmatch = fuzzyScore(word, suggestion.label, suggestion.overwriteBefore);\n\t\t\t\tif (match) {\n\t\t\t\t\titem.matches = match[1];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// by default match `word` against the `label`\n\t\t\t\tlet match = fuzzyScore(word, suggestion.label, suggestion.overwriteBefore);\n\t\t\t\tif (match) {\n\t\t\t\t\titem.score = match[0];\n\t\t\t\t\titem.matches = match[1];\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\titem.idx = i;\n\n\t\t\tthis._filteredItems.push(item);\n\n\t\t\t// update stats\n\t\t\tthis._stats.suggestionCount++;\n\t\t\tswitch (suggestion.type) {\n\t\t\t\tcase 'snippet': this._stats.snippetCount++; break;\n\t\t\t\tcase 'text': this._stats.textCount++; break;\n\t\t\t}\n\t\t}\n\n\t\tthis._filteredItems.sort(this._snippetCompareFn);\n\t}\n\n\tprivate static _compareCompletionItems(a: ICompletionItem, b: ICompletionItem): number {\n\t\tif (a.score > b.score) {\n\t\t\treturn -1;\n\t\t} else if (a.score < b.score) {\n\t\t\treturn 1;\n\t\t} else if (a.idx < b.idx) {\n\t\t\treturn -1;\n\t\t} else if (a.idx > b.idx) {\n\t\t\treturn 1;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tprivate static _compareCompletionItemsSnippetsDown(a: ICompletionItem, b: ICompletionItem): number {\n\t\tif (a.suggestion.type !== b.suggestion.type) {\n\t\t\tif (a.suggestion.type === 'snippet') {\n\t\t\t\treturn 1;\n\t\t\t} else if (b.suggestion.type === 'snippet') {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t\treturn CompletionModel._compareCompletionItems(a, b);\n\t}\n\n\tprivate static _compareCompletionItemsSnippetsUp(a: ICompletionItem, b: ICompletionItem): number {\n\t\tif (a.suggestion.type !== b.suggestion.type) {\n\t\t\tif (a.suggestion.type === 'snippet') {\n\t\t\t\treturn -1;\n\t\t\t} else if (b.suggestion.type === 'snippet') {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t}\n\t\treturn CompletionModel._compareCompletionItems(a, b);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IModel } from 'vs/editor/common/editorCommon';\nimport { ColorId, MetadataConsts, FontStyle, TokenizationRegistry, ITokenizationSupport } from 'vs/editor/common/modes';\nimport { IModeService } from 'vs/editor/common/services/modeService';\nimport { renderViewLine, RenderLineInput } from 'vs/editor/common/viewLayout/viewLineRenderer';\nimport { ViewLineToken } from 'vs/editor/common/core/viewLineToken';\nimport { LineTokens } from 'vs/editor/common/core/lineTokens';\nimport * as strings from 'vs/base/common/strings';\nimport { IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneThemeService';\n\nexport interface IColorizerOptions {\n\ttabSize?: number;\n}\n\nexport interface IColorizerElementOptions extends IColorizerOptions {\n\ttheme?: string;\n\tmimeType?: string;\n}\n\nexport class Colorizer {\n\n\tpublic static colorizeElement(themeService: IStandaloneThemeService, modeService: IModeService, domNode: HTMLElement, options: IColorizerElementOptions): TPromise {\n\t\toptions = options || {};\n\t\tlet theme = options.theme || 'vs';\n\t\tlet mimeType = options.mimeType || domNode.getAttribute('lang') || domNode.getAttribute('data-lang');\n\t\tif (!mimeType) {\n\t\t\tconsole.error('Mode not detected');\n\t\t\treturn undefined;\n\t\t}\n\n\t\tthemeService.setTheme(theme);\n\n\t\tlet text = domNode.firstChild.nodeValue;\n\t\tdomNode.className += 'monaco-editor ' + theme;\n\t\tlet render = (str: string) => {\n\t\t\tdomNode.innerHTML = str;\n\t\t};\n\t\treturn this.colorize(modeService, text, mimeType, options).then(render, (err) => console.error(err), render);\n\t}\n\n\tprivate static _tokenizationSupportChangedPromise(language: string): TPromise {\n\t\tlet listener: IDisposable = null;\n\t\tlet stopListening = () => {\n\t\t\tif (listener) {\n\t\t\t\tlistener.dispose();\n\t\t\t\tlistener = null;\n\t\t\t}\n\t\t};\n\n\t\treturn new TPromise((c, e, p) => {\n\t\t\tlistener = TokenizationRegistry.onDidChange((e) => {\n\t\t\t\tif (e.changedLanguages.indexOf(language) >= 0) {\n\t\t\t\t\tstopListening();\n\t\t\t\t\tc(void 0);\n\t\t\t\t}\n\t\t\t});\n\t\t}, stopListening);\n\t}\n\n\tpublic static colorize(modeService: IModeService, text: string, mimeType: string, options: IColorizerOptions): TPromise {\n\t\tif (strings.startsWithUTF8BOM(text)) {\n\t\t\ttext = text.substr(1);\n\t\t}\n\t\tlet lines = text.split(/\\r\\n|\\r|\\n/);\n\t\tlet language = modeService.getModeId(mimeType);\n\n\t\toptions = options || {};\n\t\tif (typeof options.tabSize === 'undefined') {\n\t\t\toptions.tabSize = 4;\n\t\t}\n\n\t\t// Send out the event to create the mode\n\t\tmodeService.getOrCreateMode(language);\n\n\t\tlet tokenizationSupport = TokenizationRegistry.get(language);\n\t\tif (tokenizationSupport) {\n\t\t\treturn TPromise.as(_colorize(lines, options.tabSize, tokenizationSupport));\n\t\t}\n\n\t\t// wait 500ms for mode to load, then give up\n\t\treturn TPromise.any([this._tokenizationSupportChangedPromise(language), TPromise.timeout(500)]).then(_ => {\n\t\t\tlet tokenizationSupport = TokenizationRegistry.get(language);\n\t\t\tif (tokenizationSupport) {\n\t\t\t\treturn _colorize(lines, options.tabSize, tokenizationSupport);\n\t\t\t}\n\t\t\treturn _fakeColorize(lines, options.tabSize);\n\t\t});\n\t}\n\n\tpublic static colorizeLine(line: string, mightContainRTL: boolean, tokens: ViewLineToken[], tabSize: number = 4): string {\n\t\tlet renderResult = renderViewLine(new RenderLineInput(\n\t\t\tfalse,\n\t\t\tline,\n\t\t\tmightContainRTL,\n\t\t\t0,\n\t\t\ttokens,\n\t\t\t[],\n\t\t\ttabSize,\n\t\t\t0,\n\t\t\t-1,\n\t\t\t'none',\n\t\t\tfalse,\n\t\t\tfalse\n\t\t));\n\t\treturn renderResult.html;\n\t}\n\n\tpublic static colorizeModelLine(model: IModel, lineNumber: number, tabSize: number = 4): string {\n\t\tlet content = model.getLineContent(lineNumber);\n\t\tmodel.forceTokenization(lineNumber);\n\t\tlet tokens = model.getLineTokens(lineNumber);\n\t\tlet inflatedTokens = tokens.inflate();\n\t\treturn this.colorizeLine(content, model.mightContainRTL(), inflatedTokens, tabSize);\n\t}\n}\n\nfunction _colorize(lines: string[], tabSize: number, tokenizationSupport: ITokenizationSupport): string {\n\treturn _actualColorize(lines, tabSize, tokenizationSupport);\n}\n\nfunction _fakeColorize(lines: string[], tabSize: number): string {\n\tlet html: string[] = [];\n\n\tconst defaultMetadata = (\n\t\t(FontStyle.None << MetadataConsts.FONT_STYLE_OFFSET)\n\t\t| (ColorId.DefaultForeground << MetadataConsts.FOREGROUND_OFFSET)\n\t\t| (ColorId.DefaultBackground << MetadataConsts.BACKGROUND_OFFSET)\n\t) >>> 0;\n\n\tfor (let i = 0, length = lines.length; i < length; i++) {\n\t\tlet line = lines[i];\n\n\t\tlet renderResult = renderViewLine(new RenderLineInput(\n\t\t\tfalse,\n\t\t\tline,\n\t\t\tfalse,\n\t\t\t0,\n\t\t\t[new ViewLineToken(line.length, defaultMetadata)],\n\t\t\t[],\n\t\t\ttabSize,\n\t\t\t0,\n\t\t\t-1,\n\t\t\t'none',\n\t\t\tfalse,\n\t\t\tfalse\n\t\t));\n\n\t\thtml = html.concat(renderResult.html);\n\t\thtml.push('
    ');\n\t}\n\n\treturn html.join('');\n}\n\nfunction _actualColorize(lines: string[], tabSize: number, tokenizationSupport: ITokenizationSupport): string {\n\tlet html: string[] = [];\n\tlet state = tokenizationSupport.getInitialState();\n\n\tfor (let i = 0, length = lines.length; i < length; i++) {\n\t\tlet line = lines[i];\n\t\tlet tokenizeResult = tokenizationSupport.tokenize2(line, state, 0);\n\t\tlet lineTokens = new LineTokens(tokenizeResult.tokens, line);\n\t\tlet renderResult = renderViewLine(new RenderLineInput(\n\t\t\tfalse,\n\t\t\tline,\n\t\t\ttrue/* check for RTL */,\n\t\t\t0,\n\t\t\tlineTokens.inflate(),\n\t\t\t[],\n\t\t\ttabSize,\n\t\t\t0,\n\t\t\t-1,\n\t\t\t'none',\n\t\t\tfalse,\n\t\t\tfalse\n\t\t));\n\n\t\thtml = html.concat(renderResult.html);\n\t\thtml.push('
    ');\n\n\t\tstate = tokenizeResult.endState;\n\t}\n\n\treturn 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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\n/*\n * This module exports common types and functionality shared between\n * the Monarch compiler that compiles JSON to ILexer, and the Monarch\n * Tokenizer (that highlights at runtime)\n */\n\n/*\n * Type definitions to be used internally to Monarch.\n * Inside monarch we use fully typed definitions and compiled versions of the more abstract JSON descriptions.\n */\n\nexport const enum MonarchBracket {\n\tNone = 0,\n\tOpen = 1,\n\tClose = -1\n}\n\nexport interface ILexerMin {\n\tlanguageId: string;\n\tnoThrow: boolean;\n\tignoreCase: boolean;\n\tusesEmbedded: boolean;\n\tdefaultToken: string;\n\tstateNames: Object;\n}\n\nexport interface ILexer extends ILexerMin {\n\tmaxStack: number;\n\tstart: string;\n\tignoreCase: boolean;\n\ttokenPostfix: string;\n\n\ttokenizer: IRule[][];\n\tbrackets: IBracket[];\n}\n\nexport interface IBracket {\n\ttoken: string;\n\topen: string;\n\tclose: string;\n}\n\nexport type FuzzyAction = IAction | string;\n\nexport function isFuzzyActionArr(what: FuzzyAction | FuzzyAction[]): what is FuzzyAction[] {\n\treturn (Array.isArray(what));\n}\n\nexport function isFuzzyAction(what: FuzzyAction | FuzzyAction[]): what is FuzzyAction {\n\treturn !isFuzzyActionArr(what);\n}\n\nexport function isString(what: FuzzyAction): what is string {\n\treturn (typeof what === 'string');\n}\n\nexport function isIAction(what: FuzzyAction): what is IAction {\n\treturn !isString(what);\n}\n\nexport interface IRule {\n\tregex: RegExp;\n\taction: FuzzyAction;\n\tmatchOnlyAtLineStart: boolean;\n\tname: string;\n}\n\nexport interface IAction {\n\t// an action is either a group of actions\n\tgroup?: FuzzyAction[];\n\n\t// or a function that returns a fresh action\n\ttest?: (id: string, matches: string[], state: string, eos: boolean) => FuzzyAction;\n\n\t// or it is a declarative action with a token value and various other attributes\n\ttoken?: string;\n\ttokenSubst?: boolean;\n\tnext?: string;\n\tnextEmbedded?: string;\n\tbracket?: MonarchBracket;\n\tlog?: string;\n\tswitchTo?: string;\n\tgoBack?: number;\n\ttransform?: (states: string[]) => string[];\n}\n\nexport interface IBranch {\n\tname: string;\n\tvalue: FuzzyAction;\n\ttest: (id: string, matches: string[], state: string, eos: boolean) => boolean;\n}\n\n// Small helper functions\n\n/**\n * Is a string null, undefined, or empty?\n */\nexport function empty(s: string): boolean {\n\treturn (s ? false : true);\n}\n\n/**\n * Puts a string to lower case if 'ignoreCase' is set.\n */\nexport function fixCase(lexer: ILexerMin, str: string): string {\n\treturn (lexer.ignoreCase && str ? str.toLowerCase() : str);\n}\n\n/**\n * Ensures there are no bad characters in a CSS token class.\n */\nexport function sanitize(s: string) {\n\treturn s.replace(/[&<>'\"_]/g, '-'); // used on all output token CSS classes\n}\n\n// Logging\n\n/**\n * Logs a message.\n */\nexport function log(lexer: ILexerMin, msg: string) {\n\tconsole.log(`${lexer.languageId}: ${msg}`);\n}\n\n// Throwing errors\n\n/**\n * Throws error. May actually just log the error and continue.\n */\nexport function throwError(lexer: ILexerMin, msg: string) {\n\tthrow new Error(`${lexer.languageId}: ${msg}`);\n}\n\n// Helper functions for rule finding and substitution\n\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: ILexerMin, str: string, id: string, matches: string[], state: string) {\n\tvar re = /\\$((\\$)|(#)|(\\d\\d?)|[sS](\\d\\d?)|@(\\w+))/g;\n\tvar stateMatches: string[] = null;\n\treturn str.replace(re, function (full, sub?, dollar?, hash?, n?, s?, attr?, ofs?, total?) {\n\t\tif (!empty(dollar)) {\n\t\t\treturn '$'; // $$\n\t\t}\n\t\tif (!empty(hash)) {\n\t\t\treturn fixCase(lexer, id); // default $#\n\t\t}\n\t\tif (!empty(n) && n < matches.length) {\n\t\t\treturn fixCase(lexer, matches[n]); // $n\n\t\t}\n\t\tif (!empty(attr) && lexer && typeof (lexer[attr]) === 'string') {\n\t\t\treturn lexer[attr]; //@attribute\n\t\t}\n\t\tif (stateMatches === null) { // split state on demand\n\t\t\tstateMatches = state.split('.');\n\t\t\tstateMatches.unshift(state);\n\t\t}\n\t\tif (!empty(s) && s < stateMatches.length) {\n\t\t\treturn fixCase(lexer, stateMatches[s]); //$Sn\n\t\t}\n\t\treturn '';\n\t});\n}\n\n/**\n * Find the tokenizer rules for a specific state (i.e. next action)\n */\nexport function findRules(lexer: ILexer, state: string): IRule[] {\n\twhile (state && state.length > 0) {\n\t\tvar rules = lexer.tokenizer[state];\n\t\tif (rules) {\n\t\t\treturn rules;\n\t\t}\n\n\t\tvar idx = state.lastIndexOf('.');\n\t\tif (idx < 0) {\n\t\t\tstate = null; // no further parent\n\t\t} else {\n\t\t\tstate = state.substr(0, idx);\n\t\t}\n\t}\n\treturn null;\n}\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: ILexerMin, state: string): boolean {\n\twhile (state && state.length > 0) {\n\t\tvar exist = lexer.stateNames[state];\n\t\tif (exist) {\n\t\t\treturn true;\n\t\t}\n\n\t\tvar idx = state.lastIndexOf('.');\n\t\tif (idx < 0) {\n\t\t\tstate = null; // no further parent\n\t\t} else {\n\t\t\tstate = state.substr(0, idx);\n\t\t}\n\t}\n\treturn 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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\n/*\n * This module only exports 'compile' which compiles a JSON langauge definition\n * into a typed and checked ILexer definition.\n */\n\nimport * as objects from 'vs/base/common/objects';\nimport * as monarchCommon from 'vs/editor/standalone/common/monarch/monarchCommon';\nimport { IMonarchLanguage, IMonarchLanguageBracket } from 'vs/editor/standalone/common/monarch/monarchTypes';\n\n/*\n * Type helpers\n *\n * Note: this is just for sanity checks on the JSON description which is\n * helpful for the programmer. No checks are done anymore once the lexer is\n * already 'compiled and checked'.\n *\n */\n\nfunction isArrayOf(elemType: (x: any) => boolean, obj: any): boolean {\n\tif (!obj) {\n\t\treturn false;\n\t}\n\tif (!(Array.isArray(obj))) {\n\t\treturn false;\n\t}\n\tvar idx: any;\n\tfor (idx in obj) {\n\t\tif (obj.hasOwnProperty(idx)) {\n\t\t\tif (!(elemType(obj[idx]))) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn true;\n}\n\nfunction bool(prop: any, def?: boolean, onerr?: () => void): boolean {\n\tif (typeof (prop) === 'boolean') {\n\t\treturn prop;\n\t}\n\tif (onerr && (prop || def === undefined)) {\n\t\tonerr(); // type is wrong, or there is no default\n\t}\n\treturn (def === undefined ? null : def);\n}\n\nfunction string(prop: any, def?: string, onerr?: () => void): string {\n\tif (typeof (prop) === 'string') {\n\t\treturn prop;\n\t}\n\tif (onerr && (prop || def === undefined)) {\n\t\tonerr(); // type is wrong, or there is no default\n\t}\n\treturn (def === undefined ? null : def);\n\n}\n\n// Lexer helpers\n\n/**\n * Compiles a regular expression string, adding the 'i' flag if 'ignoreCase' is set.\n * Also replaces @\\w+ or sequences with the content of the specified attribute\n */\nfunction compileRegExp(lexer: monarchCommon.ILexerMin, str: string): RegExp {\n\tif (typeof (str) !== 'string') {\n\t\treturn null;\n\t}\n\n\tvar n = 0;\n\twhile (str.indexOf('@') >= 0 && n < 5) { // at most 5 expansions\n\t\tn++;\n\t\tstr = str.replace(/@(\\w+)/g, function (s, attr?) {\n\t\t\tvar sub = '';\n\t\t\tif (typeof (lexer[attr]) === 'string') {\n\t\t\t\tsub = lexer[attr];\n\t\t\t} else if (lexer[attr] && lexer[attr] instanceof RegExp) {\n\t\t\t\tsub = lexer[attr].source;\n\t\t\t} else {\n\t\t\t\tif (lexer[attr] === undefined) {\n\t\t\t\t\tmonarchCommon.throwError(lexer, 'language definition does not contain attribute \\'' + attr + '\\', used at: ' + str);\n\t\t\t\t} else {\n\t\t\t\t\tmonarchCommon.throwError(lexer, 'attribute reference \\'' + attr + '\\' must be a string, used at: ' + str);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn (monarchCommon.empty(sub) ? '' : '(?:' + sub + ')');\n\t\t});\n\t}\n\n\treturn new RegExp(str, (lexer.ignoreCase ? 'i' : ''));\n}\n\n/**\n * Compiles guard functions for case matches.\n * This compiles 'cases' attributes into efficient match functions.\n *\n */\nfunction selectScrutinee(id: string, matches: string[], state: string, num: number): string {\n\tif (num < 0) {\n\t\treturn id;\n\t}\n\tif (num < matches.length) {\n\t\treturn matches[num];\n\t}\n\tif (num >= 100) {\n\t\tnum = num - 100;\n\t\tvar parts = state.split('.');\n\t\tparts.unshift(state);\n\t\tif (num < parts.length) {\n\t\t\treturn parts[num];\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction createGuard(lexer: monarchCommon.ILexerMin, ruleName: string, tkey: string, val: monarchCommon.FuzzyAction): monarchCommon.IBranch {\n\t// get the scrutinee and pattern\n\tvar scrut = -1; // -1: $!, 0-99: $n, 100+n: $Sn\n\tvar oppat = tkey;\n\tvar matches: string[] = tkey.match(/^\\$(([sS]?)(\\d\\d?)|#)(.*)$/);\n\tif (matches) {\n\t\tif (matches[3]) { // if digits\n\t\t\tscrut = parseInt(matches[3]);\n\t\t\tif (matches[2]) {\n\t\t\t\tscrut = scrut + 100; // if [sS] present\n\t\t\t}\n\t\t}\n\t\toppat = matches[4];\n\t}\n\t// get operator\n\tvar op = '~';\n\tvar pat = oppat;\n\tif (!oppat || oppat.length === 0) {\n\t\top = '!=';\n\t\tpat = '';\n\t}\n\telse if (/^\\w*$/.test(pat)) { // just a word\n\t\top = '==';\n\t}\n\telse {\n\t\tmatches = oppat.match(/^(@|!@|~|!~|==|!=)(.*)$/);\n\t\tif (matches) {\n\t\t\top = matches[1];\n\t\t\tpat = matches[2];\n\t\t}\n\t}\n\n\t// set the tester function\n\tvar tester: (s: string, id: string, matches: string[], state: string, eos: boolean) => boolean;\n\n\t// special case a regexp that matches just words\n\tif ((op === '~' || op === '!~') && /^(\\w|\\|)*$/.test(pat)) {\n\t\tvar inWords = objects.createKeywordMatcher(pat.split('|'), lexer.ignoreCase);\n\t\ttester = function (s) { return (op === '~' ? inWords(s) : !inWords(s)); };\n\t}\n\telse if (op === '@' || op === '!@') {\n\t\tvar words = lexer[pat];\n\t\tif (!words) {\n\t\t\tmonarchCommon.throwError(lexer, 'the @ match target \\'' + pat + '\\' is not defined, in rule: ' + ruleName);\n\t\t}\n\t\tif (!(isArrayOf(function (elem) { return (typeof (elem) === 'string'); }, words))) {\n\t\t\tmonarchCommon.throwError(lexer, 'the @ match target \\'' + pat + '\\' must be an array of strings, in rule: ' + ruleName);\n\t\t}\n\t\tvar inWords = objects.createKeywordMatcher(words, lexer.ignoreCase);\n\t\ttester = function (s) { return (op === '@' ? inWords(s) : !inWords(s)); };\n\t}\n\telse if (op === '~' || op === '!~') {\n\t\tif (pat.indexOf('$') < 0) {\n\t\t\t// precompile regular expression\n\t\t\tvar re = compileRegExp(lexer, '^' + pat + '$');\n\t\t\ttester = function (s) { return (op === '~' ? re.test(s) : !re.test(s)); };\n\t\t}\n\t\telse {\n\t\t\ttester = function (s, id, matches, state) {\n\t\t\t\tvar re = compileRegExp(lexer, '^' + monarchCommon.substituteMatches(lexer, pat, id, matches, state) + '$');\n\t\t\t\treturn re.test(s);\n\t\t\t};\n\t\t}\n\t}\n\telse { // if (op==='==' || op==='!=') {\n\t\tif (pat.indexOf('$') < 0) {\n\t\t\tvar patx = monarchCommon.fixCase(lexer, pat);\n\t\t\ttester = function (s) { return (op === '==' ? s === patx : s !== patx); };\n\t\t}\n\t\telse {\n\t\t\tvar patx = monarchCommon.fixCase(lexer, pat);\n\t\t\ttester = function (s, id, matches, state, eos) {\n\t\t\t\tvar patexp = monarchCommon.substituteMatches(lexer, patx, id, matches, state);\n\t\t\t\treturn (op === '==' ? s === patexp : s !== patexp);\n\t\t\t};\n\t\t}\n\t}\n\n\t// return the branch object\n\tif (scrut === -1) {\n\t\treturn {\n\t\t\tname: tkey, value: val, test: function (id, matches, state, eos) {\n\t\t\t\treturn tester(id, id, matches, state, eos);\n\t\t\t}\n\t\t};\n\t}\n\telse {\n\t\treturn {\n\t\t\tname: tkey, value: val, test: function (id, matches, state, eos) {\n\t\t\t\tvar scrutinee = selectScrutinee(id, matches, state, scrut);\n\t\t\t\treturn tester(!scrutinee ? '' : scrutinee, id, matches, state, eos);\n\t\t\t}\n\t\t};\n\t}\n}\n\n/**\n * Compiles an action: i.e. optimize regular expressions and case matches\n * and do many sanity checks.\n *\n * This is called only during compilation but if the lexer definition\n * contains user functions as actions (which is usually not allowed), then this\n * may be called during lexing. It is important therefore to compile common cases efficiently\n */\nfunction compileAction(lexer: monarchCommon.ILexerMin, ruleName: string, action: any): monarchCommon.FuzzyAction {\n\tif (!action) {\n\t\treturn { token: '' };\n\t}\n\telse if (typeof (action) === 'string') {\n\t\treturn action; // { token: action };\n\t}\n\telse if (action.token || action.token === '') {\n\t\tif (typeof (action.token) !== 'string') {\n\t\t\tmonarchCommon.throwError(lexer, 'a \\'token\\' attribute must be of type string, in rule: ' + ruleName);\n\t\t\treturn { token: '' };\n\t\t}\n\t\telse {\n\t\t\t// only copy specific typed fields (only happens once during compile Lexer)\n\t\t\tvar newAction: monarchCommon.IAction = { token: action.token };\n\t\t\tif (action.token.indexOf('$') >= 0) {\n\t\t\t\tnewAction.tokenSubst = true;\n\t\t\t}\n\t\t\tif (typeof (action.bracket) === 'string') {\n\t\t\t\tif (action.bracket === '@open') {\n\t\t\t\t\tnewAction.bracket = monarchCommon.MonarchBracket.Open;\n\t\t\t\t} else if (action.bracket === '@close') {\n\t\t\t\t\tnewAction.bracket = monarchCommon.MonarchBracket.Close;\n\t\t\t\t} else {\n\t\t\t\t\tmonarchCommon.throwError(lexer, 'a \\'bracket\\' attribute must be either \\'@open\\' or \\'@close\\', in rule: ' + ruleName);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (action.next) {\n\t\t\t\tif (typeof (action.next) !== 'string') {\n\t\t\t\t\tmonarchCommon.throwError(lexer, 'the next state must be a string value in rule: ' + ruleName);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvar next: string = action.next;\n\t\t\t\t\tif (!/^(@pop|@push|@popall)$/.test(next)) {\n\t\t\t\t\t\tif (next[0] === '@') {\n\t\t\t\t\t\t\tnext = next.substr(1); // peel off starting @ sign\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (next.indexOf('$') < 0) { // no dollar substitution, we can check if the state exists\n\t\t\t\t\t\t\tif (!monarchCommon.stateExists(lexer, monarchCommon.substituteMatches(lexer, next, '', [], ''))) {\n\t\t\t\t\t\t\t\tmonarchCommon.throwError(lexer, 'the next state \\'' + action.next + '\\' is not defined in rule: ' + ruleName);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tnewAction.next = next;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (typeof (action.goBack) === 'number') {\n\t\t\t\tnewAction.goBack = action.goBack;\n\t\t\t}\n\t\t\tif (typeof (action.switchTo) === 'string') {\n\t\t\t\tnewAction.switchTo = action.switchTo;\n\t\t\t}\n\t\t\tif (typeof (action.log) === 'string') {\n\t\t\t\tnewAction.log = action.log;\n\t\t\t}\n\t\t\tif (typeof (action.nextEmbedded) === 'string') {\n\t\t\t\tnewAction.nextEmbedded = action.nextEmbedded;\n\t\t\t\tlexer.usesEmbedded = true;\n\t\t\t}\n\t\t\treturn newAction;\n\t\t}\n\t}\n\telse if (Array.isArray(action)) {\n\t\tvar results: monarchCommon.FuzzyAction[] = [];\n\t\tvar idx: string;\n\t\tfor (idx in action) {\n\t\t\tif (action.hasOwnProperty(idx)) {\n\t\t\t\tresults[idx] = compileAction(lexer, ruleName, action[idx]);\n\t\t\t}\n\t\t}\n\t\treturn { group: results };\n\t}\n\telse if (action.cases) {\n\t\t// build an array of test cases\n\t\tvar cases: monarchCommon.IBranch[] = [];\n\n\t\t// for each case, push a test function and result value\n\t\tvar tkey: string;\n\t\tfor (tkey in action.cases) {\n\t\t\tif (action.cases.hasOwnProperty(tkey)) {\n\t\t\t\tvar val = compileAction(lexer, ruleName, action.cases[tkey]);\n\n\t\t\t\t// what kind of case\n\t\t\t\tif (tkey === '@default' || tkey === '@' || tkey === '') {\n\t\t\t\t\tcases.push({ test: null, value: val, name: tkey });\n\t\t\t\t}\n\t\t\t\telse if (tkey === '@eos') {\n\t\t\t\t\tcases.push({ test: function (id, matches, state, eos) { return eos; }, value: val, name: tkey });\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcases.push(createGuard(lexer, ruleName, tkey, val)); // call separate function to avoid local variable capture\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// create a matching function\n\t\tvar def = lexer.defaultToken;\n\t\treturn {\n\t\t\ttest: function (id, matches, state, eos) {\n\t\t\t\tvar idx: string;\n\t\t\t\tfor (idx in cases) {\n\t\t\t\t\tif (cases.hasOwnProperty(idx)) {\n\t\t\t\t\t\tvar didmatch = (!cases[idx].test || cases[idx].test(id, matches, state, eos));\n\t\t\t\t\t\tif (didmatch) {\n\t\t\t\t\t\t\treturn cases[idx].value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn def;\n\t\t\t}\n\t\t};\n\t}\n\telse {\n\t\tmonarchCommon.throwError(lexer, 'an action must be a string, an object with a \\'token\\' or \\'cases\\' attribute, or an array of actions; in rule: ' + ruleName);\n\t\treturn '';\n\t}\n}\n\n/**\n * Helper class for creating matching rules\n */\nclass Rule implements monarchCommon.IRule {\n\tpublic regex: RegExp = new RegExp('');\n\tpublic action: monarchCommon.FuzzyAction = { token: '' };\n\tpublic matchOnlyAtLineStart: boolean = false;\n\tpublic name: string = '';\n\n\tconstructor(name: string) {\n\t\tthis.name = name;\n\t}\n\n\tpublic setRegex(lexer: monarchCommon.ILexerMin, re: string);\n\tpublic setRegex(lexer: monarchCommon.ILexerMin, re: RegExp);\n\tpublic setRegex(lexer: monarchCommon.ILexerMin, re: any) {\n\t\tvar sregex: string;\n\t\tif (typeof (re) === 'string') {\n\t\t\tsregex = re;\n\t\t}\n\t\telse if (re instanceof RegExp) {\n\t\t\tsregex = (re).source;\n\t\t}\n\t\telse {\n\t\t\tmonarchCommon.throwError(lexer, 'rules must start with a match string or regular expression: ' + this.name);\n\t\t}\n\n\t\tthis.matchOnlyAtLineStart = (sregex.length > 0 && sregex[0] === '^');\n\t\tthis.name = this.name + ': ' + sregex;\n\t\tthis.regex = compileRegExp(lexer, '^(?:' + (this.matchOnlyAtLineStart ? sregex.substr(1) : sregex) + ')');\n\t}\n\n\tpublic setAction(lexer: monarchCommon.ILexerMin, act: monarchCommon.IAction) {\n\t\tthis.action = compileAction(lexer, this.name, act);\n\t}\n}\n\n/**\n * Compiles a json description function into json where all regular expressions,\n * case matches etc, are compiled and all include rules are expanded.\n * We also compile the bracket definitions, supply defaults, and do many sanity checks.\n * If the 'jsonStrict' parameter is 'false', we allow at certain locations\n * regular expression objects and functions that get called during lexing.\n * (Currently we have no samples that need this so perhaps we should always have\n * jsonStrict to true).\n */\nexport function compile(languageId: string, json: IMonarchLanguage): monarchCommon.ILexer {\n\tif (!json || typeof (json) !== 'object') {\n\t\tthrow new Error('Monarch: expecting a language definition object');\n\t}\n\n\t// Create our lexer\n\tvar lexer: monarchCommon.ILexer = {};\n\tlexer.languageId = languageId;\n\tlexer.noThrow = false; // raise exceptions during compilation\n\tlexer.maxStack = 100;\n\n\t// Set standard fields: be defensive about types\n\tlexer.start = string(json.start);\n\tlexer.ignoreCase = bool(json.ignoreCase, false);\n\n\tlexer.tokenPostfix = string(json.tokenPostfix, '.' + lexer.languageId);\n\tlexer.defaultToken = string(json.defaultToken, 'source', function () { monarchCommon.throwError(lexer, 'the \\'defaultToken\\' must be a string'); });\n\n\tlexer.usesEmbedded = false; // becomes true if we find a nextEmbedded action\n\n\t// For calling compileAction later on\n\tvar lexerMin: monarchCommon.ILexerMin = json;\n\tlexerMin.languageId = languageId;\n\tlexerMin.ignoreCase = lexer.ignoreCase;\n\tlexerMin.noThrow = lexer.noThrow;\n\tlexerMin.usesEmbedded = lexer.usesEmbedded;\n\tlexerMin.stateNames = json.tokenizer;\n\tlexerMin.defaultToken = lexer.defaultToken;\n\n\n\t// Compile an array of rules into newrules where RegExp objects are created.\n\tfunction addRules(state: string, newrules: monarchCommon.IRule[], rules: any[]) {\n\t\tvar idx: string;\n\t\tfor (idx in rules) {\n\t\t\tif (rules.hasOwnProperty(idx)) {\n\t\t\t\tvar rule = rules[idx];\n\t\t\t\tvar include = rule.include;\n\t\t\t\tif (include) {\n\t\t\t\t\tif (typeof (include) !== 'string') {\n\t\t\t\t\t\tmonarchCommon.throwError(lexer, 'an \\'include\\' attribute must be a string at: ' + state);\n\t\t\t\t\t}\n\t\t\t\t\tif (include[0] === '@') {\n\t\t\t\t\t\tinclude = include.substr(1); // peel off starting @\n\t\t\t\t\t}\n\t\t\t\t\tif (!json.tokenizer[include]) {\n\t\t\t\t\t\tmonarchCommon.throwError(lexer, 'include target \\'' + include + '\\' is not defined at: ' + state);\n\t\t\t\t\t}\n\t\t\t\t\taddRules(state + '.' + include, newrules, json.tokenizer[include]);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvar newrule = new Rule(state);\n\n\n\t\t\t\t\t// Set up new rule attributes\n\t\t\t\t\tif (Array.isArray(rule) && rule.length >= 1 && rule.length <= 3) {\n\t\t\t\t\t\tnewrule.setRegex(lexerMin, rule[0]);\n\t\t\t\t\t\tif (rule.length >= 3) {\n\t\t\t\t\t\t\tif (typeof (rule[1]) === 'string') {\n\t\t\t\t\t\t\t\tnewrule.setAction(lexerMin, { token: rule[1], next: rule[2] });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (typeof (rule[1]) === 'object') {\n\t\t\t\t\t\t\t\tvar rule1 = rule[1];\n\t\t\t\t\t\t\t\trule1.next = rule[2];\n\t\t\t\t\t\t\t\tnewrule.setAction(lexerMin, rule1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tmonarchCommon.throwError(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);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tnewrule.setAction(lexerMin, rule[1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (!rule.regex) {\n\t\t\t\t\t\t\tmonarchCommon.throwError(lexer, 'a rule must either be an array, or an object with a \\'regex\\' or \\'include\\' field at: ' + state);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (rule.name) {\n\t\t\t\t\t\t\tnewrule.name = string(rule.name);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (rule.matchOnlyAtStart) {\n\t\t\t\t\t\t\tnewrule.matchOnlyAtLineStart = bool(rule.matchOnlyAtLineStart);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnewrule.setRegex(lexerMin, rule.regex);\n\t\t\t\t\t\tnewrule.setAction(lexerMin, rule.action);\n\t\t\t\t\t}\n\n\t\t\t\t\tnewrules.push(newrule);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// compile the tokenizer rules\n\tif (!json.tokenizer || typeof (json.tokenizer) !== 'object') {\n\t\tmonarchCommon.throwError(lexer, 'a language definition must define the \\'tokenizer\\' attribute as an object');\n\t}\n\n\tlexer.tokenizer = [];\n\tvar key: string;\n\tfor (key in json.tokenizer) {\n\t\tif (json.tokenizer.hasOwnProperty(key)) {\n\t\t\tif (!lexer.start) {\n\t\t\t\tlexer.start = key;\n\t\t\t}\n\n\t\t\tvar rules = json.tokenizer[key];\n\t\t\tlexer.tokenizer[key] = new Array();\n\t\t\taddRules('tokenizer.' + key, lexer.tokenizer[key], rules);\n\t\t}\n\t}\n\tlexer.usesEmbedded = lexerMin.usesEmbedded; // can be set during compileAction\n\n\t// Set simple brackets\n\tif (json.brackets) {\n\t\tif (!(Array.isArray(json.brackets))) {\n\t\t\tmonarchCommon.throwError(lexer, 'the \\'brackets\\' attribute must be defined as an array');\n\t\t}\n\t}\n\telse {\n\t\tjson.brackets = [\n\t\t\t{ open: '{', close: '}', token: 'delimiter.curly' },\n\t\t\t{ open: '[', close: ']', token: 'delimiter.square' },\n\t\t\t{ open: '(', close: ')', token: 'delimiter.parenthesis' },\n\t\t\t{ open: '<', close: '>', token: 'delimiter.angle' }];\n\t}\n\tvar brackets: IMonarchLanguageBracket[] = [];\n\tfor (var bracketIdx in json.brackets) {\n\t\tif (json.brackets.hasOwnProperty(bracketIdx)) {\n\t\t\tvar desc = json.brackets[bracketIdx];\n\t\t\tif (desc && Array.isArray(desc) && desc.length === 3) {\n\t\t\t\tdesc = { token: desc[2], open: desc[0], close: desc[1] };\n\t\t\t}\n\t\t\tif (desc.open === desc.close) {\n\t\t\t\tmonarchCommon.throwError(lexer, 'open and close brackets in a \\'brackets\\' attribute must be different: ' + desc.open +\n\t\t\t\t\t'\\n hint: use the \\'bracket\\' attribute if matching on equal brackets is required.');\n\t\t\t}\n\t\t\tif (typeof (desc.open) === 'string' && typeof (desc.token) === 'string') {\n\t\t\t\tbrackets.push({\n\t\t\t\t\ttoken: string(desc.token) + lexer.tokenPostfix\n\t\t\t\t\t, open: monarchCommon.fixCase(lexer, string(desc.open))\n\t\t\t\t\t, close: monarchCommon.fixCase(lexer, string(desc.close))\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tmonarchCommon.throwError(lexer, 'every element in the \\'brackets\\' array must be a \\'{open,close,token}\\' object or array');\n\t\t\t}\n\t\t}\n\t}\n\tlexer.brackets = brackets;\n\n\t// Disable throw so the syntax highlighter goes, no matter what\n\tlexer.noThrow = true;\n\treturn 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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\n/**\n * Create a syntax highighter with a fully declarative JSON style lexer description\n * using regular expressions.\n */\n\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport * as modes from 'vs/editor/common/modes';\nimport * as monarchCommon from 'vs/editor/standalone/common/monarch/monarchCommon';\nimport { IModeService } from 'vs/editor/common/services/modeService';\nimport { Token, TokenizationResult, TokenizationResult2 } from 'vs/editor/common/core/token';\nimport { NULL_STATE, NULL_MODE_ID } from 'vs/editor/common/modes/nullMode';\nimport { IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneThemeService';\nimport { TokenTheme } from 'vs/editor/common/modes/supports/tokenization';\n\nconst CACHE_STACK_DEPTH = 5;\n\n/**\n * Reuse the same stack elements up to a certain depth.\n */\nclass MonarchStackElementFactory {\n\n\tprivate static _INSTANCE = new MonarchStackElementFactory(CACHE_STACK_DEPTH);\n\tpublic static create(parent: MonarchStackElement, state: string): MonarchStackElement {\n\t\treturn this._INSTANCE.create(parent, state);\n\t}\n\n\tprivate readonly _maxCacheDepth: number;\n\tprivate readonly _entries: { [stackElementId: string]: MonarchStackElement; };\n\n\tconstructor(maxCacheDepth: number) {\n\t\tthis._maxCacheDepth = maxCacheDepth;\n\t\tthis._entries = Object.create(null);\n\t}\n\n\tpublic create(parent: MonarchStackElement, state: string): MonarchStackElement {\n\t\tif (parent !== null && parent.depth >= this._maxCacheDepth) {\n\t\t\t// no caching above a certain depth\n\t\t\treturn new MonarchStackElement(parent, state);\n\t\t}\n\t\tlet stackElementId = MonarchStackElement.getStackElementId(parent);\n\t\tif (stackElementId.length > 0) {\n\t\t\tstackElementId += '|';\n\t\t}\n\t\tstackElementId += state;\n\n\t\tlet result = this._entries[stackElementId];\n\t\tif (result) {\n\t\t\treturn result;\n\t\t}\n\t\tresult = new MonarchStackElement(parent, state);\n\t\tthis._entries[stackElementId] = result;\n\t\treturn result;\n\t}\n}\n\nclass MonarchStackElement {\n\n\tpublic readonly parent: MonarchStackElement;\n\tpublic readonly state: string;\n\tpublic readonly depth: number;\n\n\tconstructor(parent: MonarchStackElement, state: string) {\n\t\tthis.parent = parent;\n\t\tthis.state = state;\n\t\tthis.depth = (this.parent ? this.parent.depth : 0) + 1;\n\t}\n\n\tpublic static getStackElementId(element: MonarchStackElement): string {\n\t\tlet result = '';\n\t\twhile (element !== null) {\n\t\t\tif (result.length > 0) {\n\t\t\t\tresult += '|';\n\t\t\t}\n\t\t\tresult += element.state;\n\t\t\telement = element.parent;\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _equals(a: MonarchStackElement, b: MonarchStackElement): boolean {\n\t\twhile (a !== null && b !== null) {\n\t\t\tif (a === b) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (a.state !== b.state) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\ta = a.parent;\n\t\t\tb = b.parent;\n\t\t}\n\t\tif (a === null && b === null) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic equals(other: MonarchStackElement): boolean {\n\t\treturn MonarchStackElement._equals(this, other);\n\t}\n\n\tpublic push(state: string): MonarchStackElement {\n\t\treturn MonarchStackElementFactory.create(this, state);\n\t}\n\n\tpublic pop(): MonarchStackElement {\n\t\treturn this.parent;\n\t}\n\n\tpublic popall(): MonarchStackElement {\n\t\tlet result: MonarchStackElement = this;\n\t\twhile (result.parent) {\n\t\t\tresult = result.parent;\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic switchTo(state: string): MonarchStackElement {\n\t\treturn MonarchStackElementFactory.create(this.parent, state);\n\t}\n}\n\nclass EmbeddedModeData {\n\tpublic readonly modeId: string;\n\tpublic readonly state: modes.IState;\n\n\tconstructor(modeId: string, state: modes.IState) {\n\t\tthis.modeId = modeId;\n\t\tthis.state = state;\n\t}\n\n\tpublic equals(other: EmbeddedModeData): boolean {\n\t\treturn (\n\t\t\tthis.modeId === other.modeId\n\t\t\t&& this.state.equals(other.state)\n\t\t);\n\t}\n\n\tpublic clone(): EmbeddedModeData {\n\t\tlet stateClone = this.state.clone();\n\t\t// save an object\n\t\tif (stateClone === this.state) {\n\t\t\treturn this;\n\t\t}\n\t\treturn new EmbeddedModeData(this.modeId, this.state);\n\t}\n}\n\n/**\n * Reuse the same line states up to a certain depth.\n */\nclass MonarchLineStateFactory {\n\n\tprivate static _INSTANCE = new MonarchLineStateFactory(CACHE_STACK_DEPTH);\n\tpublic static create(stack: MonarchStackElement, embeddedModeData: EmbeddedModeData): MonarchLineState {\n\t\treturn this._INSTANCE.create(stack, embeddedModeData);\n\t}\n\n\tprivate readonly _maxCacheDepth: number;\n\tprivate readonly _entries: { [stackElementId: string]: MonarchLineState; };\n\n\tconstructor(maxCacheDepth: number) {\n\t\tthis._maxCacheDepth = maxCacheDepth;\n\t\tthis._entries = Object.create(null);\n\t}\n\n\tpublic create(stack: MonarchStackElement, embeddedModeData: EmbeddedModeData): MonarchLineState {\n\t\tif (embeddedModeData !== null) {\n\t\t\t// no caching when embedding\n\t\t\treturn new MonarchLineState(stack, embeddedModeData);\n\t\t}\n\t\tif (stack !== null && stack.depth >= this._maxCacheDepth) {\n\t\t\t// no caching above a certain depth\n\t\t\treturn new MonarchLineState(stack, embeddedModeData);\n\t\t}\n\t\tlet stackElementId = MonarchStackElement.getStackElementId(stack);\n\n\t\tlet result = this._entries[stackElementId];\n\t\tif (result) {\n\t\t\treturn result;\n\t\t}\n\t\tresult = new MonarchLineState(stack, null);\n\t\tthis._entries[stackElementId] = result;\n\t\treturn result;\n\t}\n}\n\nclass MonarchLineState implements modes.IState {\n\n\tpublic readonly stack: MonarchStackElement;\n\tpublic readonly embeddedModeData: EmbeddedModeData;\n\n\tconstructor(\n\t\tstack: MonarchStackElement,\n\t\tembeddedModeData: EmbeddedModeData\n\t) {\n\t\tthis.stack = stack;\n\t\tthis.embeddedModeData = embeddedModeData;\n\t}\n\n\tpublic clone(): modes.IState {\n\t\tlet embeddedModeDataClone = this.embeddedModeData ? this.embeddedModeData.clone() : null;\n\t\t// save an object\n\t\tif (embeddedModeDataClone === this.embeddedModeData) {\n\t\t\treturn this;\n\t\t}\n\t\treturn MonarchLineStateFactory.create(this.stack, this.embeddedModeData);\n\t}\n\n\tpublic equals(other: modes.IState): boolean {\n\t\tif (!(other instanceof MonarchLineState)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!this.stack.equals(other.stack)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (this.embeddedModeData === null && other.embeddedModeData === null) {\n\t\t\treturn true;\n\t\t}\n\t\tif (this.embeddedModeData === null || other.embeddedModeData === null) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.embeddedModeData.equals(other.embeddedModeData);\n\t}\n}\n\nconst hasOwnProperty = Object.hasOwnProperty;\n\ninterface IMonarchTokensCollector {\n\tenterMode(startOffset: number, modeId: string): void;\n\temit(startOffset: number, type: string): void;\n\tnestedModeTokenize(embeddedModeLine: string, embeddedModeData: EmbeddedModeData, offsetDelta: number): modes.IState;\n}\n\nclass MonarchClassicTokensCollector implements IMonarchTokensCollector {\n\n\tprivate _tokens: Token[];\n\tprivate _language: string;\n\tprivate _lastTokenType: string;\n\tprivate _lastTokenLanguage: string;\n\n\tconstructor() {\n\t\tthis._tokens = [];\n\t\tthis._language = null;\n\t\tthis._lastTokenType = null;\n\t\tthis._lastTokenLanguage = null;\n\t}\n\n\tpublic enterMode(startOffset: number, modeId: string): void {\n\t\tthis._language = modeId;\n\t}\n\n\tpublic emit(startOffset: number, type: string): void {\n\t\tif (this._lastTokenType === type && this._lastTokenLanguage === this._language) {\n\t\t\treturn;\n\t\t}\n\t\tthis._lastTokenType = type;\n\t\tthis._lastTokenLanguage = this._language;\n\t\tthis._tokens.push(new Token(startOffset, type, this._language));\n\t}\n\n\tpublic nestedModeTokenize(embeddedModeLine: string, embeddedModeData: EmbeddedModeData, offsetDelta: number): modes.IState {\n\t\tconst nestedModeId = embeddedModeData.modeId;\n\t\tconst embeddedModeState = embeddedModeData.state;\n\n\t\tconst nestedModeTokenizationSupport = modes.TokenizationRegistry.get(nestedModeId);\n\t\tif (!nestedModeTokenizationSupport) {\n\t\t\tthis.enterMode(offsetDelta, nestedModeId);\n\t\t\tthis.emit(offsetDelta, '');\n\t\t\treturn embeddedModeState;\n\t\t}\n\n\t\tlet nestedResult = nestedModeTokenizationSupport.tokenize(embeddedModeLine, embeddedModeState, offsetDelta);\n\t\tthis._tokens = this._tokens.concat(nestedResult.tokens);\n\t\tthis._lastTokenType = null;\n\t\tthis._lastTokenLanguage = null;\n\t\tthis._language = null;\n\t\treturn nestedResult.endState;\n\t}\n\n\tpublic finalize(endState: MonarchLineState): TokenizationResult {\n\t\treturn new TokenizationResult(this._tokens, endState);\n\t}\n}\n\nclass MonarchModernTokensCollector implements IMonarchTokensCollector {\n\n\tprivate _modeService: IModeService;\n\tprivate _theme: TokenTheme;\n\tprivate _prependTokens: Uint32Array;\n\tprivate _tokens: number[];\n\tprivate _currentLanguageId: modes.LanguageId;\n\tprivate _lastTokenMetadata: number;\n\n\tconstructor(modeService: IModeService, theme: TokenTheme) {\n\t\tthis._modeService = modeService;\n\t\tthis._theme = theme;\n\t\tthis._prependTokens = null;\n\t\tthis._tokens = [];\n\t\tthis._currentLanguageId = modes.LanguageId.Null;\n\t\tthis._lastTokenMetadata = 0;\n\t}\n\n\tpublic enterMode(startOffset: number, modeId: string): void {\n\t\tthis._currentLanguageId = this._modeService.getLanguageIdentifier(modeId).id;\n\t}\n\n\tpublic emit(startOffset: number, type: string): void {\n\t\tlet metadata = this._theme.match(this._currentLanguageId, type);\n\t\tif (this._lastTokenMetadata === metadata) {\n\t\t\treturn;\n\t\t}\n\t\tthis._lastTokenMetadata = metadata;\n\t\tthis._tokens.push(startOffset);\n\t\tthis._tokens.push(metadata);\n\t}\n\n\tprivate static _merge(a: Uint32Array, b: number[], c: Uint32Array): Uint32Array {\n\t\tlet aLen = (a !== null ? a.length : 0);\n\t\tlet bLen = b.length;\n\t\tlet cLen = (c !== null ? c.length : 0);\n\n\t\tif (aLen === 0 && bLen === 0 && cLen === 0) {\n\t\t\treturn new Uint32Array(0);\n\t\t}\n\t\tif (aLen === 0 && bLen === 0) {\n\t\t\treturn c;\n\t\t}\n\t\tif (bLen === 0 && cLen === 0) {\n\t\t\treturn a;\n\t\t}\n\n\t\tlet result = new Uint32Array(aLen + bLen + cLen);\n\t\tif (a !== null) {\n\t\t\tresult.set(a);\n\t\t}\n\t\tfor (let i = 0; i < bLen; i++) {\n\t\t\tresult[aLen + i] = b[i];\n\t\t}\n\t\tif (c !== null) {\n\t\t\tresult.set(c, aLen + bLen);\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic nestedModeTokenize(embeddedModeLine: string, embeddedModeData: EmbeddedModeData, offsetDelta: number): modes.IState {\n\t\tconst nestedModeId = embeddedModeData.modeId;\n\t\tconst embeddedModeState = embeddedModeData.state;\n\n\t\tconst nestedModeTokenizationSupport = modes.TokenizationRegistry.get(nestedModeId);\n\t\tif (!nestedModeTokenizationSupport) {\n\t\t\tthis.enterMode(offsetDelta, nestedModeId);\n\t\t\tthis.emit(offsetDelta, '');\n\t\t\treturn embeddedModeState;\n\t\t}\n\n\t\tlet nestedResult = nestedModeTokenizationSupport.tokenize2(embeddedModeLine, embeddedModeState, offsetDelta);\n\t\tthis._prependTokens = MonarchModernTokensCollector._merge(this._prependTokens, this._tokens, nestedResult.tokens);\n\t\tthis._tokens = [];\n\t\tthis._currentLanguageId = 0;\n\t\tthis._lastTokenMetadata = 0;\n\t\treturn nestedResult.endState;\n\t}\n\n\tpublic finalize(endState: MonarchLineState): TokenizationResult2 {\n\t\treturn new TokenizationResult2(\n\t\t\tMonarchModernTokensCollector._merge(this._prependTokens, this._tokens, null),\n\t\t\tendState\n\t\t);\n\t}\n}\n\nclass MonarchTokenizer implements modes.ITokenizationSupport {\n\n\tprivate readonly _modeService: IModeService;\n\tprivate readonly _standaloneThemeService: IStandaloneThemeService;\n\tprivate readonly _modeId: string;\n\tprivate readonly _lexer: monarchCommon.ILexer;\n\tprivate _embeddedModes: { [modeId: string]: boolean; };\n\tprivate _tokenizationRegistryListener: IDisposable;\n\n\tconstructor(modeService: IModeService, standaloneThemeService: IStandaloneThemeService, modeId: string, lexer: monarchCommon.ILexer) {\n\t\tthis._modeService = modeService;\n\t\tthis._standaloneThemeService = standaloneThemeService;\n\t\tthis._modeId = modeId;\n\t\tthis._lexer = lexer;\n\t\tthis._embeddedModes = Object.create(null);\n\n\t\t// Set up listening for embedded modes\n\t\tlet emitting = false;\n\t\tthis._tokenizationRegistryListener = modes.TokenizationRegistry.onDidChange((e) => {\n\t\t\tif (emitting) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet isOneOfMyEmbeddedModes = false;\n\t\t\tfor (let i = 0, len = e.changedLanguages.length; i < len; i++) {\n\t\t\t\tlet language = e.changedLanguages[i];\n\t\t\t\tif (this._embeddedModes[language]) {\n\t\t\t\t\tisOneOfMyEmbeddedModes = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isOneOfMyEmbeddedModes) {\n\t\t\t\temitting = true;\n\t\t\t\tmodes.TokenizationRegistry.fire([this._modeId]);\n\t\t\t\temitting = false;\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._tokenizationRegistryListener.dispose();\n\t}\n\n\tpublic getInitialState(): modes.IState {\n\t\tlet rootState = MonarchStackElementFactory.create(null, this._lexer.start);\n\t\treturn MonarchLineStateFactory.create(rootState, null);\n\t}\n\n\tpublic tokenize(line: string, lineState: modes.IState, offsetDelta: number): TokenizationResult {\n\t\tlet tokensCollector = new MonarchClassicTokensCollector();\n\t\tlet endLineState = this._tokenize(line, lineState, offsetDelta, tokensCollector);\n\t\treturn tokensCollector.finalize(endLineState);\n\t}\n\n\tpublic tokenize2(line: string, lineState: modes.IState, offsetDelta: number): TokenizationResult2 {\n\t\tlet tokensCollector = new MonarchModernTokensCollector(this._modeService, this._standaloneThemeService.getTheme().tokenTheme);\n\t\tlet endLineState = this._tokenize(line, lineState, offsetDelta, tokensCollector);\n\t\treturn tokensCollector.finalize(endLineState);\n\t}\n\n\tprivate _tokenize(line: string, lineState: MonarchLineState, offsetDelta: number, collector: IMonarchTokensCollector): MonarchLineState {\n\t\tif (lineState.embeddedModeData) {\n\t\t\treturn this._nestedTokenize(line, lineState, offsetDelta, collector);\n\t\t} else {\n\t\t\treturn this._myTokenize(line, lineState, offsetDelta, collector);\n\t\t}\n\t}\n\n\tprivate _findLeavingNestedModeOffset(line: string, state: MonarchLineState): number {\n\t\tlet rules = this._lexer.tokenizer[state.stack.state];\n\t\tif (!rules) {\n\t\t\trules = monarchCommon.findRules(this._lexer, state.stack.state); // do parent matching\n\t\t\tif (!rules) {\n\t\t\t\tmonarchCommon.throwError(this._lexer, 'tokenizer state is not defined: ' + state.stack.state);\n\t\t\t}\n\t\t}\n\n\t\tlet popOffset = -1;\n\t\tlet hasEmbeddedPopRule = false;\n\n\t\tfor (let idx in rules) {\n\t\t\tif (!hasOwnProperty.call(rules, idx)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet rule: monarchCommon.IRule = rules[idx];\n\t\t\tif (monarchCommon.isIAction(rule.action) && rule.action.nextEmbedded !== '@pop') {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\thasEmbeddedPopRule = true;\n\n\t\t\tlet regex = rule.regex;\n\t\t\tlet regexSource = rule.regex.source;\n\t\t\tif (regexSource.substr(0, 4) === '^(?:' && regexSource.substr(regexSource.length - 1, 1) === ')') {\n\t\t\t\tregex = new RegExp(regexSource.substr(4, regexSource.length - 5), regex.ignoreCase ? 'i' : '');\n\t\t\t}\n\n\t\t\tlet result = line.search(regex);\n\t\t\tif (result === -1) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (popOffset === -1 || result < popOffset) {\n\t\t\t\tpopOffset = result;\n\t\t\t}\n\t\t}\n\n\t\tif (!hasEmbeddedPopRule) {\n\t\t\tmonarchCommon.throwError(this._lexer, 'no rule containing nextEmbedded: \"@pop\" in tokenizer embedded state: ' + state.stack.state);\n\t\t}\n\n\t\treturn popOffset;\n\t}\n\n\tprivate _nestedTokenize(line: string, lineState: MonarchLineState, offsetDelta: number, tokensCollector: IMonarchTokensCollector): MonarchLineState {\n\n\t\tlet popOffset = this._findLeavingNestedModeOffset(line, lineState);\n\n\t\tif (popOffset === -1) {\n\t\t\t// tokenization will not leave nested mode\n\t\t\tlet nestedEndState = tokensCollector.nestedModeTokenize(line, lineState.embeddedModeData, offsetDelta);\n\t\t\treturn MonarchLineStateFactory.create(lineState.stack, new EmbeddedModeData(lineState.embeddedModeData.modeId, nestedEndState));\n\t\t}\n\n\t\tlet nestedModeLine = line.substring(0, popOffset);\n\t\tif (nestedModeLine.length > 0) {\n\t\t\t// tokenize with the nested mode\n\t\t\ttokensCollector.nestedModeTokenize(nestedModeLine, lineState.embeddedModeData, offsetDelta);\n\t\t}\n\n\t\tlet restOfTheLine = line.substring(popOffset);\n\t\treturn this._myTokenize(restOfTheLine, lineState, offsetDelta + popOffset, tokensCollector);\n\t}\n\n\tprivate _myTokenize(line: string, lineState: MonarchLineState, offsetDelta: number, tokensCollector: IMonarchTokensCollector): MonarchLineState {\n\t\ttokensCollector.enterMode(offsetDelta, this._modeId);\n\n\t\tconst lineLength = line.length;\n\n\t\tlet embeddedModeData = lineState.embeddedModeData;\n\t\tlet stack = lineState.stack;\n\t\tlet pos = 0;\n\n\t\t// regular expression group matching\n\t\t// these never need cloning or equality since they are only used within a line match\n\t\tlet groupActions: monarchCommon.FuzzyAction[] = null;\n\t\tlet groupMatches: string[] = null;\n\t\tlet groupMatched: string[] = null;\n\t\tlet groupRule: monarchCommon.IRule = null;\n\n\t\twhile (pos < lineLength) {\n\t\t\tconst pos0 = pos;\n\t\t\tconst stackLen0 = stack.depth;\n\t\t\tconst groupLen0 = groupActions ? groupActions.length : 0;\n\t\t\tconst state = stack.state;\n\n\t\t\tlet matches: string[] = null;\n\t\t\tlet matched: string = null;\n\t\t\tlet action: monarchCommon.FuzzyAction | monarchCommon.FuzzyAction[] = null;\n\t\t\tlet rule: monarchCommon.IRule = null;\n\n\t\t\tlet enteringEmbeddedMode: string = null;\n\n\t\t\t// check if we need to process group matches first\n\t\t\tif (groupActions) {\n\t\t\t\tmatches = groupMatches;\n\t\t\t\tmatched = groupMatched.shift();\n\t\t\t\taction = groupActions.shift();\n\t\t\t\trule = groupRule;\n\n\t\t\t\t// cleanup if necessary\n\t\t\t\tif (groupActions.length === 0) {\n\t\t\t\t\tgroupActions = null;\n\t\t\t\t\tgroupMatches = null;\n\t\t\t\t\tgroupMatched = null;\n\t\t\t\t\tgroupRule = null;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// otherwise we match on the token stream\n\n\t\t\t\tif (pos >= lineLength) {\n\t\t\t\t\t// nothing to do\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// get the rules for this state\n\t\t\t\tlet rules = this._lexer.tokenizer[state];\n\t\t\t\tif (!rules) {\n\t\t\t\t\trules = monarchCommon.findRules(this._lexer, state); // do parent matching\n\t\t\t\t\tif (!rules) {\n\t\t\t\t\t\tmonarchCommon.throwError(this._lexer, 'tokenizer state is not defined: ' + state);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// try each rule until we match\n\t\t\t\tlet restOfLine = line.substr(pos);\n\t\t\t\tfor (let idx in rules) {\n\t\t\t\t\tif (hasOwnProperty.call(rules, idx)) {\n\t\t\t\t\t\tlet rule: monarchCommon.IRule = rules[idx];\n\t\t\t\t\t\tif (pos === 0 || !rule.matchOnlyAtLineStart) {\n\t\t\t\t\t\t\tmatches = restOfLine.match(rule.regex);\n\t\t\t\t\t\t\tif (matches) {\n\t\t\t\t\t\t\t\tmatched = matches[0];\n\t\t\t\t\t\t\t\taction = rule.action;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// We matched 'rule' with 'matches' and 'action'\n\t\t\tif (!matches) {\n\t\t\t\tmatches = [''];\n\t\t\t\tmatched = '';\n\t\t\t}\n\n\t\t\tif (!action) {\n\t\t\t\t// bad: we didn't match anything, and there is no action to take\n\t\t\t\t// we need to advance the stream or we get progress trouble\n\t\t\t\tif (pos < lineLength) {\n\t\t\t\t\tmatches = [line.charAt(pos)];\n\t\t\t\t\tmatched = matches[0];\n\t\t\t\t}\n\t\t\t\taction = this._lexer.defaultToken;\n\t\t\t}\n\n\t\t\t// advance stream\n\t\t\tpos += matched.length;\n\n\t\t\t// maybe call action function (used for 'cases')\n\t\t\twhile (monarchCommon.isFuzzyAction(action) && monarchCommon.isIAction(action) && action.test) {\n\t\t\t\taction = action.test(matched, matches, state, pos === lineLength);\n\t\t\t}\n\n\t\t\tlet result: monarchCommon.FuzzyAction | monarchCommon.FuzzyAction[] = null;\n\t\t\t// set the result: either a string or an array of actions\n\t\t\tif (typeof action === 'string' || Array.isArray(action)) {\n\t\t\t\tresult = action;\n\t\t\t} else if (action.group) {\n\t\t\t\tresult = action.group;\n\t\t\t} else if (action.token !== null && action.token !== undefined) {\n\n\t\t\t\t// do $n replacements?\n\t\t\t\tif (action.tokenSubst) {\n\t\t\t\t\tresult = monarchCommon.substituteMatches(this._lexer, action.token, matched, matches, state);\n\t\t\t\t} else {\n\t\t\t\t\tresult = action.token;\n\t\t\t\t}\n\n\t\t\t\t// enter embedded mode?\n\t\t\t\tif (action.nextEmbedded) {\n\t\t\t\t\tif (action.nextEmbedded === '@pop') {\n\t\t\t\t\t\tif (!embeddedModeData) {\n\t\t\t\t\t\t\tmonarchCommon.throwError(this._lexer, 'cannot pop embedded mode if not inside one');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tembeddedModeData = null;\n\t\t\t\t\t} else if (embeddedModeData) {\n\t\t\t\t\t\tmonarchCommon.throwError(this._lexer, 'cannot enter embedded mode from within an embedded mode');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tenteringEmbeddedMode = monarchCommon.substituteMatches(this._lexer, action.nextEmbedded, matched, matches, state);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// state transformations\n\t\t\t\tif (action.goBack) { // back up the stream..\n\t\t\t\t\tpos = Math.max(0, pos - action.goBack);\n\t\t\t\t}\n\n\t\t\t\tif (action.switchTo && typeof action.switchTo === 'string') {\n\t\t\t\t\tlet nextState = monarchCommon.substituteMatches(this._lexer, action.switchTo, matched, matches, state); // switch state without a push...\n\t\t\t\t\tif (nextState[0] === '@') {\n\t\t\t\t\t\tnextState = nextState.substr(1); // peel off starting '@'\n\t\t\t\t\t}\n\t\t\t\t\tif (!monarchCommon.findRules(this._lexer, nextState)) {\n\t\t\t\t\t\tmonarchCommon.throwError(this._lexer, 'trying to switch to a state \\'' + nextState + '\\' that is undefined in rule: ' + rule.name);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstack = stack.switchTo(nextState);\n\t\t\t\t\t}\n\t\t\t\t} else if (action.transform && typeof action.transform === 'function') {\n\t\t\t\t\tmonarchCommon.throwError(this._lexer, 'action.transform not supported');\n\t\t\t\t} else if (action.next) {\n\t\t\t\t\tif (action.next === '@push') {\n\t\t\t\t\t\tif (stack.depth >= this._lexer.maxStack) {\n\t\t\t\t\t\t\tmonarchCommon.throwError(this._lexer, 'maximum tokenizer stack size reached: [' +\n\t\t\t\t\t\t\t\tstack.state + ',' + stack.parent.state + ',...]');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstack = stack.push(state);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (action.next === '@pop') {\n\t\t\t\t\t\tif (stack.depth <= 1) {\n\t\t\t\t\t\t\tmonarchCommon.throwError(this._lexer, 'trying to pop an empty stack in rule: ' + rule.name);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstack = stack.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (action.next === '@popall') {\n\t\t\t\t\t\tstack = stack.popall();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet nextState = monarchCommon.substituteMatches(this._lexer, action.next, matched, matches, state);\n\t\t\t\t\t\tif (nextState[0] === '@') {\n\t\t\t\t\t\t\tnextState = nextState.substr(1); // peel off starting '@'\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!monarchCommon.findRules(this._lexer, nextState)) {\n\t\t\t\t\t\t\tmonarchCommon.throwError(this._lexer, 'trying to set a next state \\'' + nextState + '\\' that is undefined in rule: ' + rule.name);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstack = stack.push(nextState);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (action.log && typeof (action.log) === 'string') {\n\t\t\t\t\tmonarchCommon.log(this._lexer, this._lexer.languageId + ': ' + monarchCommon.substituteMatches(this._lexer, action.log, matched, matches, state));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// check result\n\t\t\tif (result === null) {\n\t\t\t\tmonarchCommon.throwError(this._lexer, 'lexer rule has no well-defined action in rule: ' + rule.name);\n\t\t\t}\n\n\t\t\t// is the result a group match?\n\t\t\tif (Array.isArray(result)) {\n\t\t\t\tif (groupActions && groupActions.length > 0) {\n\t\t\t\t\tmonarchCommon.throwError(this._lexer, 'groups cannot be nested: ' + rule.name);\n\t\t\t\t}\n\t\t\t\tif (matches.length !== result.length + 1) {\n\t\t\t\t\tmonarchCommon.throwError(this._lexer, 'matched number of groups does not match the number of actions in rule: ' + rule.name);\n\t\t\t\t}\n\t\t\t\tlet totalLen = 0;\n\t\t\t\tfor (let i = 1; i < matches.length; i++) {\n\t\t\t\t\ttotalLen += matches[i].length;\n\t\t\t\t}\n\t\t\t\tif (totalLen !== matched.length) {\n\t\t\t\t\tmonarchCommon.throwError(this._lexer, 'with groups, all characters should be matched in consecutive groups in rule: ' + rule.name);\n\t\t\t\t}\n\t\t\t\tgroupMatches = matches;\n\t\t\t\tgroupMatched = matches.slice(1);\n\t\t\t\tgroupActions = result.slice(0);\n\t\t\t\tgroupRule = rule;\n\t\t\t\tpos -= matched.length;\n\t\t\t\t// call recursively to initiate first result match\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\t// regular result\n\n\t\t\t\t// check for '@rematch'\n\t\t\t\tif (result === '@rematch') {\n\t\t\t\t\tpos -= matched.length;\n\t\t\t\t\tmatched = ''; // better set the next state too..\n\t\t\t\t\tmatches = null;\n\t\t\t\t\tresult = '';\n\t\t\t\t}\n\n\t\t\t\t// check progress\n\t\t\t\tif (matched.length === 0) {\n\t\t\t\t\tif (stackLen0 !== stack.depth || state !== stack.state || (!groupActions ? 0 : groupActions.length) !== groupLen0) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmonarchCommon.throwError(this._lexer, 'no progress in tokenizer in rule: ' + rule.name);\n\t\t\t\t\t\tpos = lineLength; // must make progress or editor loops\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// return the result (and check for brace matching)\n\t\t\t\t// todo: for efficiency we could pre-sanitize tokenPostfix and substitutions\n\t\t\t\tlet tokenType: string = null;\n\t\t\t\tif (monarchCommon.isString(result) && result.indexOf('@brackets') === 0) {\n\t\t\t\t\tlet rest = result.substr('@brackets'.length);\n\t\t\t\t\tlet bracket = findBracket(this._lexer, matched);\n\t\t\t\t\tif (!bracket) {\n\t\t\t\t\t\tmonarchCommon.throwError(this._lexer, '@brackets token returned but no bracket defined as: ' + matched);\n\t\t\t\t\t\tbracket = { token: '', bracketType: monarchCommon.MonarchBracket.None };\n\t\t\t\t\t}\n\t\t\t\t\ttokenType = monarchCommon.sanitize(bracket.token + rest);\n\t\t\t\t} else {\n\t\t\t\t\tlet token = (result === '' ? '' : result + this._lexer.tokenPostfix);\n\t\t\t\t\ttokenType = monarchCommon.sanitize(token);\n\t\t\t\t}\n\n\t\t\t\ttokensCollector.emit(pos0 + offsetDelta, tokenType);\n\t\t\t}\n\n\t\t\tif (enteringEmbeddedMode !== null) {\n\t\t\t\t// substitute language alias to known modes to support syntax highlighting\n\t\t\t\tlet enteringEmbeddedModeId = this._modeService.getModeIdForLanguageName(enteringEmbeddedMode);\n\t\t\t\tif (enteringEmbeddedModeId) {\n\t\t\t\t\tenteringEmbeddedMode = enteringEmbeddedModeId;\n\t\t\t\t}\n\n\t\t\t\tlet embeddedModeData = this._getNestedEmbeddedModeData(enteringEmbeddedMode);\n\n\t\t\t\tif (pos < lineLength) {\n\t\t\t\t\t// there is content from the embedded mode on this line\n\t\t\t\t\tlet restOfLine = line.substr(pos);\n\t\t\t\t\treturn this._nestedTokenize(restOfLine, MonarchLineStateFactory.create(stack, embeddedModeData), offsetDelta + pos, tokensCollector);\n\t\t\t\t} else {\n\t\t\t\t\treturn MonarchLineStateFactory.create(stack, embeddedModeData);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn MonarchLineStateFactory.create(stack, embeddedModeData);\n\t}\n\n\tprivate _getNestedEmbeddedModeData(mimetypeOrModeId: string): EmbeddedModeData {\n\t\tlet nestedMode = this._locateMode(mimetypeOrModeId);\n\t\tif (nestedMode) {\n\t\t\tlet tokenizationSupport = modes.TokenizationRegistry.get(nestedMode.getId());\n\t\t\tif (tokenizationSupport) {\n\t\t\t\treturn new EmbeddedModeData(nestedMode.getId(), tokenizationSupport.getInitialState());\n\t\t\t}\n\t\t}\n\n\t\tlet nestedModeId = nestedMode ? nestedMode.getId() : NULL_MODE_ID;\n\t\treturn new EmbeddedModeData(nestedModeId, NULL_STATE);\n\t}\n\n\tprivate _locateMode(mimetypeOrModeId: string): modes.IMode {\n\t\tif (!mimetypeOrModeId || !this._modeService.isRegisteredMode(mimetypeOrModeId)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet modeId = this._modeService.getModeId(mimetypeOrModeId);\n\n\t\t// Fire mode loading event\n\t\tthis._modeService.getOrCreateMode(modeId);\n\n\t\tlet mode = this._modeService.getMode(modeId);\n\t\tif (mode) {\n\t\t\t// Re-emit tokenizationSupport change events from all modes that I ever embedded\n\t\t\tthis._embeddedModes[modeId] = true;\n\t\t\treturn mode;\n\t\t}\n\n\t\tthis._embeddedModes[modeId] = true;\n\n\t\treturn null;\n\t}\n\n}\n\n/**\n * Searches for a bracket in the 'brackets' attribute that matches the input.\n */\nfunction findBracket(lexer: monarchCommon.ILexer, matched: string) {\n\tif (!matched) {\n\t\treturn null;\n\t}\n\tmatched = monarchCommon.fixCase(lexer, matched);\n\n\tvar brackets = lexer.brackets;\n\tfor (var i = 0; i < brackets.length; i++) {\n\t\tvar bracket = brackets[i];\n\t\tif (bracket.open === matched) {\n\t\t\treturn { token: bracket.token, bracketType: monarchCommon.MonarchBracket.Open };\n\t\t}\n\t\telse if (bracket.close === matched) {\n\t\t\treturn { token: bracket.token, bracketType: monarchCommon.MonarchBracket.Close };\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function createTokenizationSupport(modeService: IModeService, standaloneThemeService: IStandaloneThemeService, modeId: string, lexer: monarchCommon.ILexer): modes.ITokenizationSupport {\n\treturn new MonarchTokenizer(modeService, standaloneThemeService, modeId, 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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/css!./actionbar';\nimport nls = require('vs/nls');\nimport lifecycle = require('vs/base/common/lifecycle');\nimport { Promise } from 'vs/base/common/winjs.base';\nimport { Builder, $ } from 'vs/base/browser/builder';\nimport { SelectBox } from 'vs/base/browser/ui/selectBox/selectBox';\nimport { IAction, IActionRunner, Action, IActionChangeEvent, ActionRunner } from 'vs/base/common/actions';\nimport DOM = require('vs/base/browser/dom');\nimport { EventType as CommonEventType } from 'vs/base/common/events';\nimport types = require('vs/base/common/types');\nimport { IEventEmitter, EventEmitter } from 'vs/base/common/eventEmitter';\nimport { Gesture, EventType } from 'vs/base/browser/touch';\nimport { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\n\nexport interface IActionItem extends IEventEmitter {\n\tactionRunner: IActionRunner;\n\tsetActionContext(context: any): void;\n\trender(element: HTMLElement): void;\n\tisEnabled(): boolean;\n\tfocus(fromRight?: boolean): void;\n\tblur(): void;\n\tdispose(): void;\n}\n\nexport interface IBaseActionItemOptions {\n\tdraggable?: boolean;\n\tisMenu?: boolean;\n}\n\nexport class BaseActionItem extends EventEmitter implements IActionItem {\n\n\tpublic builder: Builder;\n\tpublic _callOnDispose: lifecycle.IDisposable[];\n\tpublic _context: any;\n\tpublic _action: IAction;\n\n\tprivate gesture: Gesture;\n\tprivate _actionRunner: IActionRunner;\n\n\tconstructor(context: any, action: IAction, protected options?: IBaseActionItemOptions) {\n\t\tsuper();\n\n\t\tthis._callOnDispose = [];\n\t\tthis._context = context || this;\n\t\tthis._action = action;\n\n\t\tif (action instanceof Action) {\n\t\t\tthis._callOnDispose.push(action.onDidChange(event => {\n\t\t\t\tif (!this.builder) {\n\t\t\t\t\t// we have not been rendered yet, so there\n\t\t\t\t\t// is no point in updating the UI\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._handleActionChangeEvent(event);\n\t\t\t}));\n\t\t}\n\t}\n\n\tprotected _handleActionChangeEvent(event: IActionChangeEvent): void {\n\t\tif (event.enabled !== void 0) {\n\t\t\tthis._updateEnabled();\n\t\t}\n\t\tif (event.checked !== void 0) {\n\t\t\tthis._updateChecked();\n\t\t}\n\t\tif (event.class !== void 0) {\n\t\t\tthis._updateClass();\n\t\t}\n\t\tif (event.label !== void 0) {\n\t\t\tthis._updateLabel();\n\t\t\tthis._updateTooltip();\n\t\t}\n\t\tif (event.tooltip !== void 0) {\n\t\t\tthis._updateTooltip();\n\t\t}\n\t}\n\n\tpublic get callOnDispose() {\n\t\treturn this._callOnDispose;\n\t}\n\n\tpublic set actionRunner(actionRunner: IActionRunner) {\n\t\tthis._actionRunner = actionRunner;\n\t}\n\n\tpublic get actionRunner(): IActionRunner {\n\t\treturn this._actionRunner;\n\t}\n\n\tpublic getAction(): IAction {\n\t\treturn this._action;\n\t}\n\n\tpublic isEnabled(): boolean {\n\t\treturn this._action.enabled;\n\t}\n\n\tpublic setActionContext(newContext: any): void {\n\t\tthis._context = newContext;\n\t}\n\n\tpublic render(container: HTMLElement): void {\n\t\tthis.builder = $(container);\n\t\tthis.gesture = new Gesture(container);\n\n\t\tconst enableDragging = this.options && this.options.draggable;\n\t\tif (enableDragging) {\n\t\t\tcontainer.draggable = true;\n\t\t}\n\n\t\tthis.builder.on(EventType.Tap, e => this.onClick(e));\n\n\t\tthis.builder.on(DOM.EventType.MOUSE_DOWN, (e: MouseEvent) => {\n\t\t\tif (!enableDragging) {\n\t\t\t\tDOM.EventHelper.stop(e); // do not run when dragging is on because that would disable it\n\t\t\t}\n\n\t\t\tif (this._action.enabled && e.button === 0) {\n\t\t\t\tthis.builder.addClass('active');\n\t\t\t}\n\t\t});\n\n\t\tthis.builder.on(DOM.EventType.CLICK, (e: MouseEvent) => {\n\t\t\tDOM.EventHelper.stop(e, true);\n\t\t\t// See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Interact_with_the_clipboard\n\t\t\t// > Writing to the clipboard\n\t\t\t// > You can use the \"cut\" and \"copy\" commands without any special\n\t\t\t// permission if you are using them in a short-lived event handler\n\t\t\t// for a user action (for example, a click handler).\n\n\t\t\t// => to get the Copy and Paste context menu actions working on Firefox,\n\t\t\t// there should be no timeout here\n\t\t\tif (this.options && this.options.isMenu) {\n\t\t\t\tthis.onClick(e);\n\t\t\t} else {\n\t\t\t\tsetTimeout(() => this.onClick(e), 50);\n\t\t\t}\n\t\t});\n\n\t\tthis.builder.on([DOM.EventType.MOUSE_UP, DOM.EventType.MOUSE_OUT], (e: MouseEvent) => {\n\t\t\tDOM.EventHelper.stop(e);\n\t\t\tthis.builder.removeClass('active');\n\t\t});\n\t}\n\n\tpublic onClick(event: Event): void {\n\t\tDOM.EventHelper.stop(event, true);\n\n\t\tlet context: any;\n\t\tif (types.isUndefinedOrNull(this._context)) {\n\t\t\tcontext = event;\n\t\t} else {\n\t\t\tcontext = this._context;\n\t\t\tcontext.event = event;\n\t\t}\n\n\t\tthis._actionRunner.run(this._action, context);\n\t}\n\n\tpublic focus(): void {\n\t\tif (this.builder) {\n\t\t\tthis.builder.domFocus();\n\t\t}\n\t}\n\n\tpublic blur(): void {\n\t\tif (this.builder) {\n\t\t\tthis.builder.domBlur();\n\t\t}\n\t}\n\n\tprotected _updateEnabled(): void {\n\t\t// implement in subclass\n\t}\n\n\tprotected _updateLabel(): void {\n\t\t// implement in subclass\n\t}\n\n\tprotected _updateTooltip(): void {\n\t\t// implement in subclass\n\t}\n\n\tprotected _updateClass(): void {\n\t\t// implement in subclass\n\t}\n\n\tprotected _updateChecked(): void {\n\t\t// implement in subclass\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\n\t\tif (this.builder) {\n\t\t\tthis.builder.destroy();\n\t\t\tthis.builder = null;\n\t\t}\n\n\t\tif (this.gesture) {\n\t\t\tthis.gesture.dispose();\n\t\t\tthis.gesture = null;\n\t\t}\n\n\t\tthis._callOnDispose = lifecycle.dispose(this._callOnDispose);\n\t}\n}\n\nexport class Separator extends Action {\n\n\tpublic static ID = 'vs.actions.separator';\n\n\tconstructor(label?: string, order?: number) {\n\t\tsuper(Separator.ID, label, label ? 'separator text' : 'separator');\n\t\tthis.checked = false;\n\t\tthis.radio = false;\n\t\tthis.enabled = false;\n\t\tthis.order = order;\n\t}\n}\n\nexport interface IActionItemOptions extends IBaseActionItemOptions {\n\ticon?: boolean;\n\tlabel?: boolean;\n\tkeybinding?: string;\n}\n\nexport class ActionItem extends BaseActionItem {\n\n\tprotected $e: Builder;\n\tprotected options: IActionItemOptions;\n\tprivate cssClass: string;\n\n\tconstructor(context: any, action: IAction, options: IActionItemOptions = {}) {\n\t\tsuper(context, action, options);\n\n\t\tthis.options = options;\n\t\tthis.options.icon = options.icon !== undefined ? options.icon : false;\n\t\tthis.options.label = options.label !== undefined ? options.label : true;\n\t\tthis.cssClass = '';\n\t}\n\n\tpublic render(container: HTMLElement): void {\n\t\tsuper.render(container);\n\n\t\tthis.$e = $('a.action-label').appendTo(this.builder);\n\t\tif (this._action.id === Separator.ID) {\n\t\t\t// A separator is a presentation item\n\t\t\tthis.$e.attr({ role: 'presentation' });\n\t\t} else {\n\t\t\tif (this.options.isMenu) {\n\t\t\t\tthis.$e.attr({ role: 'menuitem' });\n\t\t\t} else {\n\t\t\t\tthis.$e.attr({ role: 'button' });\n\t\t\t}\n\t\t}\n\n\t\tif (this.options.label && this.options.keybinding) {\n\t\t\t$('span.keybinding').text(this.options.keybinding).appendTo(this.builder);\n\t\t}\n\n\t\tthis._updateClass();\n\t\tthis._updateLabel();\n\t\tthis._updateTooltip();\n\t\tthis._updateEnabled();\n\t\tthis._updateChecked();\n\t}\n\n\tpublic focus(): void {\n\t\tsuper.focus();\n\t\tthis.$e.domFocus();\n\t}\n\n\tpublic _updateLabel(): void {\n\t\tif (this.options.label) {\n\t\t\tthis.$e.text(this.getAction().label);\n\t\t}\n\t}\n\n\tpublic _updateTooltip(): void {\n\t\tlet title: string = null;\n\n\t\tif (this.getAction().tooltip) {\n\t\t\ttitle = this.getAction().tooltip;\n\n\t\t} else if (!this.options.label && this.getAction().label && this.options.icon) {\n\t\t\ttitle = this.getAction().label;\n\n\t\t\tif (this.options.keybinding) {\n\t\t\t\ttitle = nls.localize({ key: 'titleLabel', comment: ['action title', 'action keybinding'] }, \"{0} ({1})\", title, this.options.keybinding);\n\t\t\t}\n\t\t}\n\n\t\tif (title) {\n\t\t\tthis.$e.attr({ title: title });\n\t\t}\n\t}\n\n\tpublic _updateClass(): void {\n\t\tif (this.cssClass) {\n\t\t\tthis.$e.removeClass(this.cssClass);\n\t\t}\n\t\tif (this.options.icon) {\n\t\t\tthis.cssClass = this.getAction().class;\n\t\t\tthis.$e.addClass('icon');\n\t\t\tif (this.cssClass) {\n\t\t\t\tthis.$e.addClass(this.cssClass);\n\t\t\t}\n\t\t\tthis._updateEnabled();\n\t\t} else {\n\t\t\tthis.$e.removeClass('icon');\n\t\t}\n\t}\n\n\tpublic _updateEnabled(): void {\n\t\tif (this.getAction().enabled) {\n\t\t\tthis.builder.removeClass('disabled');\n\t\t\tthis.$e.removeClass('disabled');\n\t\t\tthis.$e.attr({ tabindex: 0 });\n\t\t} else {\n\t\t\tthis.builder.addClass('disabled');\n\t\t\tthis.$e.addClass('disabled');\n\t\t\tDOM.removeTabIndexAndUpdateFocus(this.$e.getHTMLElement());\n\t\t}\n\t}\n\n\tpublic _updateChecked(): void {\n\t\tif (this.getAction().checked) {\n\t\t\tthis.$e.addClass('checked');\n\t\t} else {\n\t\t\tthis.$e.removeClass('checked');\n\t\t}\n\t}\n\n\tpublic _updateRadio(): void {\n\t\tif (this.getAction().radio) {\n\t\t\tthis.$e.addClass('radio');\n\t\t} else {\n\t\t\tthis.$e.removeClass('radio');\n\t\t}\n\t}\n}\n\nexport enum ActionsOrientation {\n\tHORIZONTAL = 1,\n\tVERTICAL = 2\n}\n\nexport interface IActionItemProvider {\n\t(action: IAction): IActionItem;\n}\n\nexport interface IActionBarOptions {\n\torientation?: ActionsOrientation;\n\tcontext?: any;\n\tactionItemProvider?: IActionItemProvider;\n\tactionRunner?: IActionRunner;\n\tariaLabel?: string;\n\tanimated?: boolean;\n\tisMenu?: boolean;\n}\n\nlet defaultOptions: IActionBarOptions = {\n\torientation: ActionsOrientation.HORIZONTAL,\n\tcontext: null\n};\n\nexport interface IActionOptions extends IActionItemOptions {\n\tindex?: number;\n}\n\nexport class ActionBar extends EventEmitter implements IActionRunner {\n\n\tpublic options: IActionBarOptions;\n\n\tprivate _actionRunner: IActionRunner;\n\tprivate _context: any;\n\n\t// Items\n\tpublic items: IActionItem[];\n\n\tprivate focusedItem: number;\n\tprivate focusTracker: DOM.IFocusTracker;\n\n\t// Elements\n\tpublic domNode: HTMLElement;\n\tprivate actionsList: HTMLElement;\n\n\tprivate toDispose: lifecycle.IDisposable[];\n\n\tconstructor(container: HTMLElement | Builder, options: IActionBarOptions = defaultOptions) {\n\t\tsuper();\n\t\tthis.options = options;\n\t\tthis._context = options.context;\n\t\tthis.toDispose = [];\n\t\tthis._actionRunner = this.options.actionRunner;\n\n\t\tif (!this._actionRunner) {\n\t\t\tthis._actionRunner = new ActionRunner();\n\t\t\tthis.toDispose.push(this._actionRunner);\n\t\t}\n\n\t\tthis.toDispose.push(this.addEmitter(this._actionRunner));\n\n\t\tthis.items = [];\n\t\tthis.focusedItem = undefined;\n\n\t\tthis.domNode = document.createElement('div');\n\t\tthis.domNode.className = 'monaco-action-bar';\n\n\t\tif (options.animated !== false) {\n\t\t\tDOM.addClass(this.domNode, 'animated');\n\t\t}\n\n\t\tlet isVertical = this.options.orientation === ActionsOrientation.VERTICAL;\n\t\tif (isVertical) {\n\t\t\tthis.domNode.className += ' vertical';\n\t\t}\n\n\t\t$(this.domNode).on(DOM.EventType.KEY_DOWN, (e: KeyboardEvent) => {\n\t\t\tlet event = new StandardKeyboardEvent(e);\n\t\t\tlet eventHandled = true;\n\n\t\t\tif (event.equals(isVertical ? KeyCode.UpArrow : KeyCode.LeftArrow)) {\n\t\t\t\tthis.focusPrevious();\n\t\t\t} else if (event.equals(isVertical ? KeyCode.DownArrow : KeyCode.RightArrow)) {\n\t\t\t\tthis.focusNext();\n\t\t\t} else if (event.equals(KeyCode.Escape)) {\n\t\t\t\tthis.cancel();\n\t\t\t} else if (event.equals(KeyCode.Enter) || event.equals(KeyCode.Space)) {\n\t\t\t\t// Nothing, just staying out of the else branch\n\t\t\t} else {\n\t\t\t\teventHandled = false;\n\t\t\t}\n\n\t\t\tif (eventHandled) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t});\n\n\t\t// Prevent native context menu on actions\n\t\t$(this.domNode).on(DOM.EventType.CONTEXT_MENU, (e: Event) => {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\t$(this.domNode).on(DOM.EventType.KEY_UP, (e: KeyboardEvent) => {\n\t\t\tlet event = new StandardKeyboardEvent(e);\n\n\t\t\t// Run action on Enter/Space\n\t\t\tif (event.equals(KeyCode.Enter) || event.equals(KeyCode.Space)) {\n\t\t\t\tthis.doTrigger(event);\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\n\t\t\t// Recompute focused item\n\t\t\telse if (event.equals(KeyCode.Tab) || event.equals(KeyMod.Shift | KeyCode.Tab)) {\n\t\t\t\tthis.updateFocusedItem();\n\t\t\t}\n\t\t});\n\n\t\tthis.focusTracker = DOM.trackFocus(this.domNode);\n\t\tthis.focusTracker.addBlurListener(() => {\n\t\t\tif (document.activeElement === this.domNode || !DOM.isAncestor(document.activeElement, this.domNode)) {\n\t\t\t\tthis.emit(DOM.EventType.BLUR, {});\n\t\t\t\tthis.focusedItem = undefined;\n\t\t\t}\n\t\t});\n\n\t\tthis.focusTracker.addFocusListener(() => this.updateFocusedItem());\n\n\t\tthis.actionsList = document.createElement('ul');\n\t\tthis.actionsList.className = 'actions-container';\n\t\tif (this.options.isMenu) {\n\t\t\tthis.actionsList.setAttribute('role', 'menubar');\n\t\t} else {\n\t\t\tthis.actionsList.setAttribute('role', 'toolbar');\n\t\t}\n\t\tif (this.options.ariaLabel) {\n\t\t\tthis.actionsList.setAttribute('aria-label', this.options.ariaLabel);\n\t\t}\n\n\t\tthis.domNode.appendChild(this.actionsList);\n\n\t\t((container instanceof Builder) ? container.getHTMLElement() : container).appendChild(this.domNode);\n\t}\n\n\tpublic setAriaLabel(label: string): void {\n\t\tif (label) {\n\t\t\tthis.actionsList.setAttribute('aria-label', label);\n\t\t} else {\n\t\t\tthis.actionsList.removeAttribute('aria-label');\n\t\t}\n\t}\n\n\tprivate updateFocusedItem(): void {\n\t\tfor (let i = 0; i < this.actionsList.children.length; i++) {\n\t\t\tlet elem = this.actionsList.children[i];\n\t\t\tif (DOM.isAncestor(document.activeElement, elem)) {\n\t\t\t\tthis.focusedItem = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic get context(): any {\n\t\treturn this._context;\n\t}\n\n\tpublic set context(context: any) {\n\t\tthis._context = context;\n\t\tthis.items.forEach(i => i.setActionContext(context));\n\t}\n\n\tpublic get actionRunner(): IActionRunner {\n\t\treturn this._actionRunner;\n\t}\n\n\tpublic set actionRunner(actionRunner: IActionRunner) {\n\t\tif (actionRunner) {\n\t\t\tthis._actionRunner = actionRunner;\n\t\t\tthis.items.forEach(item => item.actionRunner = actionRunner);\n\t\t}\n\t}\n\n\tpublic getContainer(): Builder {\n\t\treturn $(this.domNode);\n\t}\n\n\tpublic push(arg: IAction | IAction[], options: IActionOptions = {}): void {\n\n\t\tconst actions: IAction[] = !Array.isArray(arg) ? [arg] : arg;\n\n\t\tlet index = types.isNumber(options.index) ? options.index : null;\n\n\t\tactions.forEach((action: IAction) => {\n\t\t\tconst actionItemElement = document.createElement('li');\n\t\t\tactionItemElement.className = 'action-item';\n\t\t\tactionItemElement.setAttribute('role', 'presentation');\n\n\t\t\tlet item: IActionItem = null;\n\n\t\t\tif (this.options.actionItemProvider) {\n\t\t\t\titem = this.options.actionItemProvider(action);\n\t\t\t}\n\n\t\t\tif (!item) {\n\t\t\t\titem = new ActionItem(this.context, action, options);\n\t\t\t}\n\n\t\t\titem.actionRunner = this._actionRunner;\n\t\t\titem.setActionContext(this.context);\n\t\t\tthis.addEmitter(item);\n\t\t\titem.render(actionItemElement);\n\n\t\t\tif (index === null || index < 0 || index >= this.actionsList.children.length) {\n\t\t\t\tthis.actionsList.appendChild(actionItemElement);\n\t\t\t} else {\n\t\t\t\tthis.actionsList.insertBefore(actionItemElement, this.actionsList.children[index++]);\n\t\t\t}\n\n\t\t\tthis.items.push(item);\n\t\t});\n\t}\n\n\tpublic pull(index: number): void {\n\t\tif (index >= 0 && index < this.items.length) {\n\t\t\tthis.items.splice(index, 1);\n\t\t\tthis.actionsList.removeChild(this.actionsList.childNodes[index]);\n\t\t}\n\t}\n\n\tpublic clear(): void {\n\t\tthis.items = lifecycle.dispose(this.items);\n\t\t$(this.actionsList).empty();\n\t}\n\n\tpublic length(): number {\n\t\treturn this.items.length;\n\t}\n\n\tpublic isEmpty(): boolean {\n\t\treturn this.items.length === 0;\n\t}\n\n\tpublic focus(selectFirst?: boolean): void {\n\t\tif (selectFirst && typeof this.focusedItem === 'undefined') {\n\t\t\tthis.focusedItem = 0;\n\t\t}\n\n\t\tthis.updateFocus();\n\t}\n\n\tprivate focusNext(): void {\n\t\tif (typeof this.focusedItem === 'undefined') {\n\t\t\tthis.focusedItem = this.items.length - 1;\n\t\t}\n\n\t\tlet startIndex = this.focusedItem;\n\t\tlet item: IActionItem;\n\n\t\tdo {\n\t\t\tthis.focusedItem = (this.focusedItem + 1) % this.items.length;\n\t\t\titem = this.items[this.focusedItem];\n\t\t} while (this.focusedItem !== startIndex && !item.isEnabled());\n\n\t\tif (this.focusedItem === startIndex && !item.isEnabled()) {\n\t\t\tthis.focusedItem = undefined;\n\t\t}\n\n\t\tthis.updateFocus();\n\t}\n\n\tprivate focusPrevious(): void {\n\t\tif (typeof this.focusedItem === 'undefined') {\n\t\t\tthis.focusedItem = 0;\n\t\t}\n\n\t\tlet startIndex = this.focusedItem;\n\t\tlet item: IActionItem;\n\n\t\tdo {\n\t\t\tthis.focusedItem = this.focusedItem - 1;\n\n\t\t\tif (this.focusedItem < 0) {\n\t\t\t\tthis.focusedItem = this.items.length - 1;\n\t\t\t}\n\n\t\t\titem = this.items[this.focusedItem];\n\t\t} while (this.focusedItem !== startIndex && !item.isEnabled());\n\n\t\tif (this.focusedItem === startIndex && !item.isEnabled()) {\n\t\t\tthis.focusedItem = undefined;\n\t\t}\n\n\t\tthis.updateFocus(true);\n\t}\n\n\tprivate updateFocus(fromRight?: boolean): void {\n\t\tif (typeof this.focusedItem === 'undefined') {\n\t\t\tthis.domNode.focus();\n\t\t\treturn;\n\t\t}\n\n\t\tfor (let i = 0; i < this.items.length; i++) {\n\t\t\tlet item = this.items[i];\n\n\t\t\tlet actionItem = item;\n\n\t\t\tif (i === this.focusedItem) {\n\t\t\t\tif (types.isFunction(actionItem.focus)) {\n\t\t\t\t\tactionItem.focus(fromRight);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (types.isFunction(actionItem.blur)) {\n\t\t\t\t\tactionItem.blur();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate doTrigger(event: StandardKeyboardEvent): void {\n\t\tif (typeof this.focusedItem === 'undefined') {\n\t\t\treturn; //nothing to focus\n\t\t}\n\n\t\t// trigger action\n\t\tlet actionItem = this.items[this.focusedItem];\n\t\tif (actionItem instanceof BaseActionItem) {\n\t\t\tconst context = (actionItem._context === null || actionItem._context === undefined) ? event : actionItem._context;\n\t\t\tthis.run(actionItem._action, context).done();\n\t\t}\n\t}\n\n\tprivate cancel(): void {\n\t\tif (document.activeElement instanceof HTMLElement) {\n\t\t\t(document.activeElement).blur(); // remove focus from focussed action\n\t\t}\n\n\t\tthis.emit(CommonEventType.CANCEL);\n\t}\n\n\tpublic run(action: IAction, context?: any): Promise {\n\t\treturn this._actionRunner.run(action, context);\n\t}\n\n\tpublic dispose(): void {\n\t\tif (this.items !== null) {\n\t\t\tlifecycle.dispose(this.items);\n\t\t}\n\t\tthis.items = null;\n\n\t\tif (this.focusTracker) {\n\t\t\tthis.focusTracker.dispose();\n\t\t\tthis.focusTracker = null;\n\t\t}\n\n\t\tthis.toDispose = lifecycle.dispose(this.toDispose);\n\n\t\tthis.getContainer().destroy();\n\n\t\tsuper.dispose();\n\t}\n}\n\nexport class SelectActionItem extends BaseActionItem {\n\tprotected selectBox: SelectBox;\n\tprotected toDispose: lifecycle.IDisposable[];\n\n\tconstructor(ctx: any, action: IAction, options: string[], selected: number) {\n\t\tsuper(ctx, action);\n\t\tthis.selectBox = new SelectBox(options, selected);\n\n\t\tthis.toDispose = [];\n\t\tthis.toDispose.push(this.selectBox);\n\t\tthis.registerListeners();\n\t}\n\n\tpublic setOptions(options: string[], selected?: number): void {\n\t\tthis.selectBox.setOptions(options, selected);\n\t}\n\n\tpublic select(index: number): void {\n\t\tthis.selectBox.select(index);\n\t}\n\n\tprivate registerListeners(): void {\n\t\tthis.toDispose.push(this.selectBox.onDidSelect(selected => {\n\t\t\tthis.actionRunner.run(this._action, this.getActionContext(selected)).done();\n\t\t}));\n\t}\n\n\tprotected getActionContext(option: string) {\n\t\treturn option;\n\t}\n\n\tpublic focus(): void {\n\t\tif (this.selectBox) {\n\t\t\tthis.selectBox.focus();\n\t\t}\n\t}\n\n\tpublic blur(): void {\n\t\tif (this.selectBox) {\n\t\t\tthis.selectBox.blur();\n\t\t}\n\t}\n\n\tpublic render(container: HTMLElement): void {\n\t\tthis.selectBox.render(container);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.toDispose = lifecycle.dispose(this.toDispose);\n\n\t\tsuper.dispose();\n\t}\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'use strict';\n\nimport 'vs/css!./menu';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { $ } from 'vs/base/browser/builder';\nimport { IActionRunner, IAction } from 'vs/base/common/actions';\nimport { ActionBar, IActionItemProvider, ActionsOrientation } from 'vs/base/browser/ui/actionbar/actionbar';\nimport { EventEmitter } from 'vs/base/common/eventEmitter';\nimport { ResolvedKeybinding } from 'vs/base/common/keyCodes';\n\nexport interface IMenuOptions {\n\tcontext?: any;\n\tactionItemProvider?: IActionItemProvider;\n\tactionRunner?: IActionRunner;\n\tgetKeyBinding?: (action: IAction) => ResolvedKeybinding;\n}\n\nexport class Menu extends EventEmitter {\n\n\tprivate actionBar: ActionBar;\n\tprivate listener: IDisposable;\n\n\tconstructor(container: HTMLElement, actions: IAction[], options: IMenuOptions = {}) {\n\t\tsuper();\n\n\t\t$(container).addClass('monaco-menu-container');\n\n\t\tlet $menu = $('.monaco-menu').appendTo(container);\n\n\t\tthis.actionBar = new ActionBar($menu, {\n\t\t\torientation: ActionsOrientation.VERTICAL,\n\t\t\tactionItemProvider: options.actionItemProvider,\n\t\t\tcontext: options.context,\n\t\t\tactionRunner: options.actionRunner,\n\t\t\tisMenu: true\n\t\t});\n\n\t\tthis.listener = this.addEmitter(this.actionBar);\n\n\t\tthis.actionBar.push(actions, { icon: true, label: true });\n\t}\n\n\tpublic focus() {\n\t\tthis.actionBar.focus(true);\n\t}\n\n\tpublic dispose() {\n\t\tsuper.dispose();\n\n\t\tif (this.actionBar) {\n\t\t\tthis.actionBar.dispose();\n\t\t\tthis.actionBar = null;\n\t\t}\n\n\t\tif (this.listener) {\n\t\t\tthis.listener.dispose();\n\t\t\tthis.listener = null;\n\t\t}\n\t}\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'use strict';\n\nimport 'vs/css!./aria';\nimport nls = require('vs/nls');\nimport { isMacintosh } from 'vs/base/common/platform';\nimport * as dom from 'vs/base/browser/dom';\n\nlet ariaContainer: HTMLElement;\nlet alertContainer: HTMLElement;\nlet statusContainer: HTMLElement;\nexport function setARIAContainer(parent: HTMLElement) {\n\tariaContainer = document.createElement('div');\n\tariaContainer.className = 'monaco-aria-container';\n\n\talertContainer = document.createElement('div');\n\talertContainer.className = 'monaco-alert';\n\talertContainer.setAttribute('role', 'alert');\n\talertContainer.setAttribute('aria-atomic', 'true');\n\tariaContainer.appendChild(alertContainer);\n\n\tstatusContainer = document.createElement('div');\n\tstatusContainer.className = 'monaco-status';\n\tstatusContainer.setAttribute('role', 'status');\n\tstatusContainer.setAttribute('aria-atomic', 'true');\n\tariaContainer.appendChild(statusContainer);\n\n\tparent.appendChild(ariaContainer);\n}\n\n/**\n * Given the provided message, will make sure that it is read as alert to screen readers.\n */\nexport function alert(msg: string): void {\n\tinsertMessage(alertContainer, 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: string): void {\n\tif (isMacintosh) {\n\t\talert(msg); // VoiceOver does not seem to support status role\n\t} else {\n\t\tinsertMessage(statusContainer, msg);\n\t}\n}\n\nfunction insertMessage(target: HTMLElement, msg: string): void {\n\tif (!ariaContainer) {\n\t\t// console.warn('ARIA support needs a container. Call setARIAContainer() first.');\n\t\treturn;\n\t}\n\tif (target.textContent === msg) {\n\t\tmsg = nls.localize('repeated', \"{0} (occurred again)\", msg);\n\t}\n\n\tdom.clearNode(target);\n\ttarget.textContent = msg;\n\n\n\t// See https://www.paciellogroup.com/blog/2012/06/html5-accessibility-chops-aria-rolealert-browser-support/\n\ttarget.style.visibility = 'hidden';\n\ttarget.style.visibility = 'visible';\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'use strict';\n\nimport 'vs/css!./findInputCheckboxes';\n\nimport * as nls from 'vs/nls';\nimport { Checkbox } from 'vs/base/browser/ui/checkbox/checkbox';\nimport { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport { Color } from 'vs/base/common/color';\n\nexport interface IFindInputCheckboxOpts {\n\tappendTitle: string;\n\tisChecked: boolean;\n\tonChange: (viaKeyboard: boolean) => void;\n\tonKeyDown?: (e: IKeyboardEvent) => void;\n\tinputActiveOptionBorder?: Color;\n}\n\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\");\n\nexport class CaseSensitiveCheckbox extends Checkbox {\n\tconstructor(opts: IFindInputCheckboxOpts) {\n\t\tsuper({\n\t\t\tactionClassName: 'monaco-case-sensitive',\n\t\t\ttitle: NLS_CASE_SENSITIVE_CHECKBOX_LABEL + opts.appendTitle,\n\t\t\tisChecked: opts.isChecked,\n\t\t\tonChange: opts.onChange,\n\t\t\tonKeyDown: opts.onKeyDown,\n\t\t\tinputActiveOptionBorder: opts.inputActiveOptionBorder\n\t\t});\n\t}\n}\n\nexport class WholeWordsCheckbox extends Checkbox {\n\tconstructor(opts: IFindInputCheckboxOpts) {\n\t\tsuper({\n\t\t\tactionClassName: 'monaco-whole-word',\n\t\t\ttitle: NLS_WHOLE_WORD_CHECKBOX_LABEL + opts.appendTitle,\n\t\t\tisChecked: opts.isChecked,\n\t\t\tonChange: opts.onChange,\n\t\t\tonKeyDown: opts.onKeyDown,\n\t\t\tinputActiveOptionBorder: opts.inputActiveOptionBorder\n\t\t});\n\t}\n}\n\nexport class RegexCheckbox extends Checkbox {\n\tconstructor(opts: IFindInputCheckboxOpts) {\n\t\tsuper({\n\t\t\tactionClassName: 'monaco-regex',\n\t\t\ttitle: NLS_REGEX_CHECKBOX_LABEL + opts.appendTitle,\n\t\t\tisChecked: opts.isChecked,\n\t\t\tonChange: opts.onChange,\n\t\t\tonKeyDown: opts.onKeyDown,\n\t\t\tinputActiveOptionBorder: opts.inputActiveOptionBorder\n\t\t});\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport 'vs/css!./inputBox';\n\nimport nls = require('vs/nls');\nimport * as Bal from 'vs/base/browser/browser';\nimport * as dom from 'vs/base/browser/dom';\nimport { RenderOptions, renderFormattedText, renderText } from 'vs/base/browser/htmlContentRenderer';\nimport aria = require('vs/base/browser/ui/aria/aria');\nimport { IAction } from 'vs/base/common/actions';\nimport { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';\nimport { IContextViewProvider, AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { Widget } from 'vs/base/browser/ui/widget';\nimport { Color } from 'vs/base/common/color';\nimport { mixin } from 'vs/base/common/objects';\n\nconst $ = dom.$;\n\nexport interface IInputOptions extends IInputBoxStyles {\n\tplaceholder?: string;\n\tariaLabel?: string;\n\ttype?: string;\n\tvalidationOptions?: IInputValidationOptions;\n\tflexibleHeight?: boolean;\n\tactions?: IAction[];\n}\n\nexport interface IInputBoxStyles {\n\tinputBackground?: Color;\n\tinputForeground?: Color;\n\tinputBorder?: Color;\n\tinputValidationInfoBorder?: Color;\n\tinputValidationInfoBackground?: Color;\n\tinputValidationWarningBorder?: Color;\n\tinputValidationWarningBackground?: Color;\n\tinputValidationErrorBorder?: Color;\n\tinputValidationErrorBackground?: Color;\n}\n\nexport interface IInputValidator {\n\t(value: string): IMessage;\n}\n\nexport interface IMessage {\n\tcontent: string;\n\tformatContent?: boolean; // defaults to false\n\ttype?: MessageType;\n}\n\nexport interface IInputValidationOptions {\n\tvalidation: IInputValidator;\n\tshowMessage?: boolean;\n}\n\nexport enum MessageType {\n\tINFO = 1,\n\tWARNING = 2,\n\tERROR = 3\n}\n\nexport interface IRange {\n\tstart: number;\n\tend: number;\n}\n\nconst defaultOpts = {\n\tinputBackground: Color.fromHex('#3C3C3C'),\n\tinputForeground: Color.fromHex('#CCCCCC'),\n\tinputValidationInfoBorder: Color.fromHex('#55AAFF'),\n\tinputValidationInfoBackground: Color.fromHex('#063B49'),\n\tinputValidationWarningBorder: Color.fromHex('#B89500'),\n\tinputValidationWarningBackground: Color.fromHex('#352A05'),\n\tinputValidationErrorBorder: Color.fromHex('#BE1100'),\n\tinputValidationErrorBackground: Color.fromHex('#5A1D1D')\n};\n\nexport class InputBox extends Widget {\n\tprivate contextViewProvider: IContextViewProvider;\n\tprivate element: HTMLElement;\n\tprivate input: HTMLInputElement;\n\tprivate mirror: HTMLElement;\n\tprivate actionbar: ActionBar;\n\tprivate options: IInputOptions;\n\tprivate message: IMessage;\n\tprivate placeholder: string;\n\tprivate ariaLabel: string;\n\tprivate validation: IInputValidator;\n\tprivate showValidationMessage: boolean;\n\tprivate state = 'idle';\n\tprivate cachedHeight: number;\n\n\tprivate inputBackground: Color;\n\tprivate inputForeground: Color;\n\tprivate inputBorder: Color;\n\n\tprivate inputValidationInfoBorder: Color;\n\tprivate inputValidationInfoBackground: Color;\n\tprivate inputValidationWarningBorder: Color;\n\tprivate inputValidationWarningBackground: Color;\n\tprivate inputValidationErrorBorder: Color;\n\tprivate inputValidationErrorBackground: Color;\n\n\tprivate _onDidChange = this._register(new Emitter());\n\tpublic onDidChange: Event = this._onDidChange.event;\n\n\tprivate _onDidHeightChange = this._register(new Emitter());\n\tpublic onDidHeightChange: Event = this._onDidHeightChange.event;\n\n\tconstructor(container: HTMLElement, contextViewProvider: IContextViewProvider, options?: IInputOptions) {\n\t\tsuper();\n\n\t\tthis.contextViewProvider = contextViewProvider;\n\t\tthis.options = options || Object.create(null);\n\t\tmixin(this.options, defaultOpts, false);\n\t\tthis.message = null;\n\t\tthis.cachedHeight = null;\n\t\tthis.placeholder = this.options.placeholder || '';\n\t\tthis.ariaLabel = this.options.ariaLabel || '';\n\n\t\tthis.inputBackground = this.options.inputBackground;\n\t\tthis.inputForeground = this.options.inputForeground;\n\t\tthis.inputBorder = this.options.inputBorder;\n\n\t\tthis.inputValidationInfoBorder = this.options.inputValidationInfoBorder;\n\t\tthis.inputValidationInfoBackground = this.options.inputValidationInfoBackground;\n\t\tthis.inputValidationWarningBorder = this.options.inputValidationWarningBorder;\n\t\tthis.inputValidationWarningBackground = this.options.inputValidationWarningBackground;\n\t\tthis.inputValidationErrorBorder = this.options.inputValidationErrorBorder;\n\t\tthis.inputValidationErrorBackground = this.options.inputValidationErrorBackground;\n\n\t\tif (this.options.validationOptions) {\n\t\t\tthis.validation = this.options.validationOptions.validation;\n\t\t\tthis.showValidationMessage = this.options.validationOptions.showMessage || false;\n\t\t}\n\n\t\tthis.element = dom.append(container, $('.monaco-inputbox.idle'));\n\n\t\tlet tagName = this.options.flexibleHeight ? 'textarea' : 'input';\n\n\t\tlet wrapper = dom.append(this.element, $('.wrapper'));\n\t\tthis.input = dom.append(wrapper, $(tagName + '.input'));\n\t\tthis.input.setAttribute('autocorrect', 'off');\n\t\tthis.input.setAttribute('autocapitalize', 'off');\n\t\tthis.input.setAttribute('spellcheck', 'false');\n\n\t\tthis.onfocus(this.input, () => dom.addClass(this.element, 'synthetic-focus'));\n\t\tthis.onblur(this.input, () => dom.removeClass(this.element, 'synthetic-focus'));\n\n\t\tif (this.options.flexibleHeight) {\n\t\t\tthis.mirror = dom.append(wrapper, $('div.mirror'));\n\t\t} else {\n\t\t\tthis.input.type = this.options.type || 'text';\n\t\t\tthis.input.setAttribute('wrap', 'off');\n\t\t}\n\n\t\tif (this.ariaLabel) {\n\t\t\tthis.input.setAttribute('aria-label', this.ariaLabel);\n\t\t}\n\n\t\tif (this.placeholder) {\n\t\t\tthis.input.setAttribute('placeholder', this.placeholder);\n\t\t\tthis.input.title = this.placeholder;\n\t\t}\n\n\t\tthis.oninput(this.input, () => this.onValueChange());\n\t\tthis.onblur(this.input, () => this.onBlur());\n\t\tthis.onfocus(this.input, () => this.onFocus());\n\n\t\t// Add placeholder shim for IE because IE decides to hide the placeholder on focus (we dont want that!)\n\t\tif (this.placeholder && Bal.isIE) {\n\t\t\tthis.onclick(this.input, (e) => {\n\t\t\t\tdom.EventHelper.stop(e, true);\n\t\t\t\tthis.input.focus();\n\t\t\t});\n\t\t}\n\n\t\tsetTimeout(() => this.updateMirror(), 0);\n\n\t\t// Support actions\n\t\tif (this.options.actions) {\n\t\t\tthis.actionbar = this._register(new ActionBar(this.element));\n\t\t\tthis.actionbar.push(this.options.actions, { icon: true, label: false });\n\t\t}\n\n\t\tthis.applyStyles();\n\t}\n\n\tprivate onBlur(): void {\n\t\tthis._hideMessage();\n\t}\n\n\tprivate onFocus(): void {\n\t\tthis._showMessage();\n\t}\n\n\tpublic setPlaceHolder(placeHolder: string): void {\n\t\tif (this.input) {\n\t\t\tthis.input.setAttribute('placeholder', placeHolder);\n\t\t}\n\t}\n\n\tpublic setAriaLabel(label: string): void {\n\t\tthis.ariaLabel = label;\n\n\t\tif (this.input) {\n\t\t\tif (label) {\n\t\t\t\tthis.input.setAttribute('aria-label', this.ariaLabel);\n\t\t\t} else {\n\t\t\t\tthis.input.removeAttribute('aria-label');\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic setContextViewProvider(contextViewProvider: IContextViewProvider): void {\n\t\tthis.contextViewProvider = contextViewProvider;\n\t}\n\n\tpublic get inputElement(): HTMLInputElement {\n\t\treturn this.input;\n\t}\n\n\tpublic get value(): string {\n\t\treturn this.input.value;\n\t}\n\n\tpublic set value(newValue: string) {\n\t\tif (this.input.value !== newValue) {\n\t\t\tthis.input.value = newValue;\n\t\t\tthis.onValueChange();\n\t\t}\n\t}\n\n\tpublic get height(): number {\n\t\treturn this.cachedHeight === null ? dom.getTotalHeight(this.element) : this.cachedHeight;\n\t}\n\n\tpublic focus(): void {\n\t\tthis.input.focus();\n\t}\n\n\tpublic blur(): void {\n\t\tthis.input.blur();\n\t}\n\n\tpublic hasFocus(): boolean {\n\t\treturn document.activeElement === this.input;\n\t}\n\n\tpublic select(range: IRange = null): void {\n\t\tthis.input.select();\n\n\t\tif (range) {\n\t\t\tthis.input.setSelectionRange(range.start, range.end);\n\t\t}\n\t}\n\n\tpublic enable(): void {\n\t\tthis.input.removeAttribute('disabled');\n\t}\n\n\tpublic disable(): void {\n\t\tthis.input.disabled = true;\n\t\tthis._hideMessage();\n\t}\n\n\tpublic setEnabled(enabled: boolean): void {\n\t\tif (enabled) {\n\t\t\tthis.enable();\n\t\t} else {\n\t\t\tthis.disable();\n\t\t}\n\t}\n\n\tpublic get width(): number {\n\t\treturn dom.getTotalWidth(this.input);\n\t}\n\n\tpublic set width(width: number) {\n\t\tthis.input.style.width = width + 'px';\n\t}\n\n\tpublic showMessage(message: IMessage, force?: boolean): void {\n\t\tthis.message = message;\n\n\t\tdom.removeClass(this.element, 'idle');\n\t\tdom.removeClass(this.element, 'info');\n\t\tdom.removeClass(this.element, 'warning');\n\t\tdom.removeClass(this.element, 'error');\n\t\tdom.addClass(this.element, this.classForType(message.type));\n\n\t\tconst styles = this.stylesForType(this.message.type);\n\t\tthis.element.style.border = styles.border ? `1px solid ${styles.border}` : null;\n\n\t\t// ARIA Support\n\t\tlet alertText: string;\n\t\tif (message.type === MessageType.ERROR) {\n\t\t\talertText = nls.localize('alertErrorMessage', \"Error: {0}\", message.content);\n\t\t} else if (message.type === MessageType.WARNING) {\n\t\t\talertText = nls.localize('alertWarningMessage', \"Warning: {0}\", message.content);\n\t\t} else {\n\t\t\talertText = nls.localize('alertInfoMessage', \"Info: {0}\", message.content);\n\t\t}\n\n\t\taria.alert(alertText);\n\n\t\tif (this.hasFocus() || force) {\n\t\t\tthis._showMessage();\n\t\t}\n\t}\n\n\tpublic hideMessage(): void {\n\t\tthis.message = null;\n\n\t\tdom.removeClass(this.element, 'info');\n\t\tdom.removeClass(this.element, 'warning');\n\t\tdom.removeClass(this.element, 'error');\n\t\tdom.addClass(this.element, 'idle');\n\n\t\tthis._hideMessage();\n\t\tthis.applyStyles();\n\t}\n\n\tpublic isInputValid(): boolean {\n\t\treturn !!this.validation && !this.validation(this.value);\n\t}\n\n\tpublic validate(): boolean {\n\t\tlet result: IMessage = null;\n\n\t\tif (this.validation) {\n\t\t\tresult = this.validation(this.value);\n\n\t\t\tif (!result) {\n\t\t\t\tthis.inputElement.removeAttribute('aria-invalid');\n\t\t\t\tthis.hideMessage();\n\t\t\t} else {\n\t\t\t\tthis.inputElement.setAttribute('aria-invalid', 'true');\n\t\t\t\tthis.showMessage(result);\n\t\t\t}\n\t\t}\n\n\t\treturn !result;\n\t}\n\n\tprivate stylesForType(type: MessageType): { border: Color; background: Color } {\n\t\tswitch (type) {\n\t\t\tcase MessageType.INFO: return { border: this.inputValidationInfoBorder, background: this.inputValidationInfoBackground };\n\t\t\tcase MessageType.WARNING: return { border: this.inputValidationWarningBorder, background: this.inputValidationWarningBackground };\n\t\t\tdefault: return { border: this.inputValidationErrorBorder, background: this.inputValidationErrorBackground };\n\t\t}\n\t}\n\n\tprivate classForType(type: MessageType): string {\n\t\tswitch (type) {\n\t\t\tcase MessageType.INFO: return 'info';\n\t\t\tcase MessageType.WARNING: return 'warning';\n\t\t\tdefault: return 'error';\n\t\t}\n\t}\n\n\tprivate _showMessage(): void {\n\t\tif (!this.contextViewProvider || !this.message) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet div: HTMLElement;\n\t\tlet layout = () => div.style.width = dom.getTotalWidth(this.element) + 'px';\n\n\t\tthis.state = 'open';\n\n\t\tthis.contextViewProvider.showContextView({\n\t\t\tgetAnchor: () => this.element,\n\t\t\tanchorAlignment: AnchorAlignment.RIGHT,\n\t\t\trender: (container: HTMLElement) => {\n\t\t\t\tdiv = dom.append(container, $('.monaco-inputbox-container'));\n\t\t\t\tlayout();\n\n\t\t\t\tconst renderOptions: RenderOptions = {\n\t\t\t\t\tinline: true,\n\t\t\t\t\tclassName: 'monaco-inputbox-message'\n\t\t\t\t};\n\n\t\t\t\tlet spanElement: HTMLElement = (this.message.formatContent\n\t\t\t\t\t? renderFormattedText(this.message.content, renderOptions)\n\t\t\t\t\t: renderText(this.message.content, renderOptions)) as any;\n\t\t\t\tdom.addClass(spanElement, this.classForType(this.message.type));\n\n\t\t\t\tconst styles = this.stylesForType(this.message.type);\n\t\t\t\tspanElement.style.backgroundColor = styles.background ? styles.background.toString() : null;\n\t\t\t\tspanElement.style.border = styles.border ? `1px solid ${styles.border}` : null;\n\n\t\t\t\tdom.append(div, spanElement);\n\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tlayout: layout\n\t\t});\n\t}\n\n\tprivate _hideMessage(): void {\n\t\tif (!this.contextViewProvider || this.state !== 'open') {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.state = 'idle';\n\n\t\tthis.contextViewProvider.hideContextView();\n\t}\n\n\tprivate onValueChange(): void {\n\t\tthis._onDidChange.fire(this.value);\n\n\t\tthis.validate();\n\t\tthis.updateMirror();\n\n\t\tif (this.state === 'open') {\n\t\t\tthis.contextViewProvider.layout();\n\t\t}\n\t}\n\n\tprivate updateMirror(): void {\n\t\tif (!this.mirror) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = this.value || this.placeholder;\n\t\tlet lastCharCode = value.charCodeAt(value.length - 1);\n\t\tlet suffix = lastCharCode === 10 ? ' ' : '';\n\t\tthis.mirror.textContent = value + suffix;\n\t\tthis.layout();\n\t}\n\n\tpublic style(styles: IInputBoxStyles): void {\n\t\tthis.inputBackground = styles.inputBackground;\n\t\tthis.inputForeground = styles.inputForeground;\n\t\tthis.inputBorder = styles.inputBorder;\n\n\t\tthis.inputValidationInfoBackground = styles.inputValidationInfoBackground;\n\t\tthis.inputValidationInfoBorder = styles.inputValidationInfoBorder;\n\t\tthis.inputValidationWarningBackground = styles.inputValidationWarningBackground;\n\t\tthis.inputValidationWarningBorder = styles.inputValidationWarningBorder;\n\t\tthis.inputValidationErrorBackground = styles.inputValidationErrorBackground;\n\t\tthis.inputValidationErrorBorder = styles.inputValidationErrorBorder;\n\n\t\tthis.applyStyles();\n\t}\n\n\tprotected applyStyles(): void {\n\t\tif (this.element) {\n\t\t\tconst background = this.inputBackground ? this.inputBackground.toString() : null;\n\t\t\tconst foreground = this.inputForeground ? this.inputForeground.toString() : null;\n\t\t\tconst border = this.inputBorder ? this.inputBorder.toString() : null;\n\n\t\t\tthis.element.style.backgroundColor = background;\n\t\t\tthis.element.style.color = foreground;\n\t\t\tthis.input.style.backgroundColor = background;\n\t\t\tthis.input.style.color = foreground;\n\n\t\t\tthis.element.style.borderWidth = border ? '1px' : null;\n\t\t\tthis.element.style.borderStyle = border ? 'solid' : null;\n\t\t\tthis.element.style.borderColor = border;\n\t\t}\n\t}\n\n\tpublic layout(): void {\n\t\tif (!this.mirror) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst previousHeight = this.cachedHeight;\n\t\tthis.cachedHeight = dom.getTotalHeight(this.mirror);\n\n\t\tif (previousHeight !== this.cachedHeight) {\n\t\t\tthis.input.style.height = this.cachedHeight + 'px';\n\t\t\tthis._onDidHeightChange.fire(this.cachedHeight);\n\t\t}\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._hideMessage();\n\n\t\tthis.element = null;\n\t\tthis.input = null;\n\t\tthis.contextViewProvider = null;\n\t\tthis.message = null;\n\t\tthis.placeholder = null;\n\t\tthis.ariaLabel = null;\n\t\tthis.validation = null;\n\t\tthis.showValidationMessage = null;\n\t\tthis.state = null;\n\t\tthis.actionbar = null;\n\n\t\tsuper.dispose();\n\t}\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'use strict';\n\nimport 'vs/css!./findInput';\n\nimport * as nls from 'vs/nls';\nimport * as dom from 'vs/base/browser/dom';\nimport { IMessage as InputBoxMessage, IInputValidator, InputBox, IInputBoxStyles } from 'vs/base/browser/ui/inputbox/inputBox';\nimport { IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview';\nimport { Widget } from 'vs/base/browser/ui/widget';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport { IMouseEvent } from 'vs/base/browser/mouseEvent';\nimport { KeyCode } from 'vs/base/common/keyCodes';\nimport { CaseSensitiveCheckbox, WholeWordsCheckbox, RegexCheckbox } from 'vs/base/browser/ui/findinput/findInputCheckboxes';\nimport { Color } from 'vs/base/common/color';\nimport { ICheckboxStyles } from 'vs/base/browser/ui/checkbox/checkbox';\n\nexport interface IFindInputOptions extends IFindInputStyles {\n\tplaceholder?: string;\n\twidth?: number;\n\tvalidation?: IInputValidator;\n\tlabel: string;\n\n\tappendCaseSensitiveLabel?: string;\n\tappendWholeWordsLabel?: string;\n\tappendRegexLabel?: string;\n}\n\nexport interface IFindInputStyles extends IInputBoxStyles {\n\tinputActiveOptionBorder?: Color;\n}\n\nconst NLS_DEFAULT_LABEL = nls.localize('defaultLabel', \"input\");\n\nexport class FindInput extends Widget {\n\n\tstatic OPTION_CHANGE: string = 'optionChange';\n\n\tprivate contextViewProvider: IContextViewProvider;\n\tprivate width: number;\n\tprivate placeholder: string;\n\tprivate validation: IInputValidator;\n\tprivate label: string;\n\n\tprivate inputActiveOptionBorder: Color;\n\tprivate inputBackground: Color;\n\tprivate inputForeground: Color;\n\tprivate inputBorder: Color;\n\n\tprivate inputValidationInfoBorder: Color;\n\tprivate inputValidationInfoBackground: Color;\n\tprivate inputValidationWarningBorder: Color;\n\tprivate inputValidationWarningBackground: Color;\n\tprivate inputValidationErrorBorder: Color;\n\tprivate inputValidationErrorBackground: Color;\n\n\tprivate regex: RegexCheckbox;\n\tprivate wholeWords: WholeWordsCheckbox;\n\tprivate caseSensitive: CaseSensitiveCheckbox;\n\tpublic domNode: HTMLElement;\n\tpublic inputBox: InputBox;\n\n\tprivate _onDidOptionChange = this._register(new Emitter());\n\tpublic onDidOptionChange: Event = this._onDidOptionChange.event;\n\n\tprivate _onKeyDown = this._register(new Emitter());\n\tpublic onKeyDown: Event = this._onKeyDown.event;\n\n\tprivate _onMouseDown = this._register(new Emitter());\n\tpublic onMouseDown: Event = this._onMouseDown.event;\n\n\tprivate _onInput = this._register(new Emitter());\n\tpublic onInput: Event = this._onInput.event;\n\n\tprivate _onKeyUp = this._register(new Emitter());\n\tpublic onKeyUp: Event = this._onKeyUp.event;\n\n\tprivate _onCaseSensitiveKeyDown = this._register(new Emitter());\n\tpublic onCaseSensitiveKeyDown: Event = this._onCaseSensitiveKeyDown.event;\n\n\tconstructor(parent: HTMLElement, contextViewProvider: IContextViewProvider, options?: IFindInputOptions) {\n\t\tsuper();\n\t\tthis.contextViewProvider = contextViewProvider;\n\t\tthis.width = options.width || 100;\n\t\tthis.placeholder = options.placeholder || '';\n\t\tthis.validation = options.validation;\n\t\tthis.label = options.label || NLS_DEFAULT_LABEL;\n\n\t\tthis.inputActiveOptionBorder = options.inputActiveOptionBorder;\n\t\tthis.inputBackground = options.inputBackground;\n\t\tthis.inputForeground = options.inputForeground;\n\t\tthis.inputBorder = options.inputBorder;\n\n\t\tthis.inputValidationInfoBorder = options.inputValidationInfoBorder;\n\t\tthis.inputValidationInfoBackground = options.inputValidationInfoBackground;\n\t\tthis.inputValidationWarningBorder = options.inputValidationWarningBorder;\n\t\tthis.inputValidationWarningBackground = options.inputValidationWarningBackground;\n\t\tthis.inputValidationErrorBorder = options.inputValidationErrorBorder;\n\t\tthis.inputValidationErrorBackground = options.inputValidationErrorBackground;\n\n\t\tthis.regex = null;\n\t\tthis.wholeWords = null;\n\t\tthis.caseSensitive = null;\n\t\tthis.domNode = null;\n\t\tthis.inputBox = null;\n\n\t\tthis.buildDomNode(options.appendCaseSensitiveLabel || '', options.appendWholeWordsLabel || '', options.appendRegexLabel || '');\n\n\t\tif (Boolean(parent)) {\n\t\t\tparent.appendChild(this.domNode);\n\t\t}\n\n\t\tthis.onkeydown(this.inputBox.inputElement, (e) => this._onKeyDown.fire(e));\n\t\tthis.onkeyup(this.inputBox.inputElement, (e) => this._onKeyUp.fire(e));\n\t\tthis.oninput(this.inputBox.inputElement, (e) => this._onInput.fire());\n\t\tthis.onmousedown(this.inputBox.inputElement, (e) => this._onMouseDown.fire(e));\n\t}\n\n\tpublic enable(): void {\n\t\tdom.removeClass(this.domNode, 'disabled');\n\t\tthis.inputBox.enable();\n\t\tthis.regex.enable();\n\t\tthis.wholeWords.enable();\n\t\tthis.caseSensitive.enable();\n\t}\n\n\tpublic disable(): void {\n\t\tdom.addClass(this.domNode, 'disabled');\n\t\tthis.inputBox.disable();\n\t\tthis.regex.disable();\n\t\tthis.wholeWords.disable();\n\t\tthis.caseSensitive.disable();\n\t}\n\n\tpublic setEnabled(enabled: boolean): void {\n\t\tif (enabled) {\n\t\t\tthis.enable();\n\t\t} else {\n\t\t\tthis.disable();\n\t\t}\n\t}\n\n\tpublic clear(): void {\n\t\tthis.clearValidation();\n\t\tthis.setValue('');\n\t\tthis.focus();\n\t}\n\n\tpublic setWidth(newWidth: number): void {\n\t\tthis.width = newWidth;\n\t\tthis.domNode.style.width = this.width + 'px';\n\t\tthis.contextViewProvider.layout();\n\t\tthis.setInputWidth();\n\t}\n\n\tpublic getValue(): string {\n\t\treturn this.inputBox.value;\n\t}\n\n\tpublic setValue(value: string): void {\n\t\tif (this.inputBox.value !== value) {\n\t\t\tthis.inputBox.value = value;\n\t\t}\n\t}\n\n\tpublic style(styles: IFindInputStyles): void {\n\t\tthis.inputActiveOptionBorder = styles.inputActiveOptionBorder;\n\t\tthis.inputBackground = styles.inputBackground;\n\t\tthis.inputForeground = styles.inputForeground;\n\t\tthis.inputBorder = styles.inputBorder;\n\n\t\tthis.inputValidationInfoBackground = styles.inputValidationInfoBackground;\n\t\tthis.inputValidationInfoBorder = styles.inputValidationInfoBorder;\n\t\tthis.inputValidationWarningBackground = styles.inputValidationWarningBackground;\n\t\tthis.inputValidationWarningBorder = styles.inputValidationWarningBorder;\n\t\tthis.inputValidationErrorBackground = styles.inputValidationErrorBackground;\n\t\tthis.inputValidationErrorBorder = styles.inputValidationErrorBorder;\n\n\t\tthis.applyStyles();\n\t}\n\n\tprotected applyStyles(): void {\n\t\tif (this.domNode) {\n\t\t\tconst checkBoxStyles: ICheckboxStyles = {\n\t\t\t\tinputActiveOptionBorder: this.inputActiveOptionBorder,\n\t\t\t};\n\t\t\tthis.regex.style(checkBoxStyles);\n\t\t\tthis.wholeWords.style(checkBoxStyles);\n\t\t\tthis.caseSensitive.style(checkBoxStyles);\n\n\t\t\tconst inputBoxStyles: IInputBoxStyles = {\n\t\t\t\tinputBackground: this.inputBackground,\n\t\t\t\tinputForeground: this.inputForeground,\n\t\t\t\tinputBorder: this.inputBorder,\n\t\t\t\tinputValidationInfoBackground: this.inputValidationInfoBackground,\n\t\t\t\tinputValidationInfoBorder: this.inputValidationInfoBorder,\n\t\t\t\tinputValidationWarningBackground: this.inputValidationWarningBackground,\n\t\t\t\tinputValidationWarningBorder: this.inputValidationWarningBorder,\n\t\t\t\tinputValidationErrorBackground: this.inputValidationErrorBackground,\n\t\t\t\tinputValidationErrorBorder: this.inputValidationErrorBorder\n\t\t\t};\n\t\t\tthis.inputBox.style(inputBoxStyles);\n\t\t}\n\t}\n\n\tpublic select(): void {\n\t\tthis.inputBox.select();\n\t}\n\n\tpublic focus(): void {\n\t\tthis.inputBox.focus();\n\t}\n\n\tpublic getCaseSensitive(): boolean {\n\t\treturn this.caseSensitive.checked;\n\t}\n\n\tpublic setCaseSensitive(value: boolean): void {\n\t\tthis.caseSensitive.checked = value;\n\t\tthis.setInputWidth();\n\t}\n\n\tpublic getWholeWords(): boolean {\n\t\treturn this.wholeWords.checked;\n\t}\n\n\tpublic setWholeWords(value: boolean): void {\n\t\tthis.wholeWords.checked = value;\n\t\tthis.setInputWidth();\n\t}\n\n\tpublic getRegex(): boolean {\n\t\treturn this.regex.checked;\n\t}\n\n\tpublic setRegex(value: boolean): void {\n\t\tthis.regex.checked = value;\n\t\tthis.setInputWidth();\n\t}\n\n\tpublic focusOnCaseSensitive(): void {\n\t\tthis.caseSensitive.focus();\n\t}\n\n\tprivate _lastHighlightFindOptions: number = 0;\n\tpublic highlightFindOptions(): void {\n\t\tdom.removeClass(this.domNode, 'highlight-' + (this._lastHighlightFindOptions));\n\t\tthis._lastHighlightFindOptions = 1 - this._lastHighlightFindOptions;\n\t\tdom.addClass(this.domNode, 'highlight-' + (this._lastHighlightFindOptions));\n\t}\n\n\tprivate setInputWidth(): void {\n\t\tlet w = this.width - this.caseSensitive.width() - this.wholeWords.width() - this.regex.width();\n\t\tthis.inputBox.width = w;\n\t}\n\n\tprivate buildDomNode(appendCaseSensitiveLabel: string, appendWholeWordsLabel: string, appendRegexLabel: string): void {\n\t\tthis.domNode = document.createElement('div');\n\t\tthis.domNode.style.width = this.width + 'px';\n\t\tdom.addClass(this.domNode, 'monaco-findInput');\n\n\t\tthis.inputBox = this._register(new InputBox(this.domNode, this.contextViewProvider, {\n\t\t\tplaceholder: this.placeholder || '',\n\t\t\tariaLabel: this.label || '',\n\t\t\tvalidationOptions: {\n\t\t\t\tvalidation: this.validation || null,\n\t\t\t\tshowMessage: true\n\t\t\t},\n\t\t\tinputBackground: this.inputBackground,\n\t\t\tinputForeground: this.inputForeground,\n\t\t\tinputBorder: this.inputBorder,\n\t\t\tinputValidationInfoBackground: this.inputValidationInfoBackground,\n\t\t\tinputValidationInfoBorder: this.inputValidationInfoBorder,\n\t\t\tinputValidationWarningBackground: this.inputValidationWarningBackground,\n\t\t\tinputValidationWarningBorder: this.inputValidationWarningBorder,\n\t\t\tinputValidationErrorBackground: this.inputValidationErrorBackground,\n\t\t\tinputValidationErrorBorder: this.inputValidationErrorBorder\n\t\t}));\n\n\t\tthis.regex = this._register(new RegexCheckbox({\n\t\t\tappendTitle: appendRegexLabel,\n\t\t\tisChecked: false,\n\t\t\tonChange: (viaKeyboard) => {\n\t\t\t\tthis._onDidOptionChange.fire(viaKeyboard);\n\t\t\t\tif (!viaKeyboard) {\n\t\t\t\t\tthis.inputBox.focus();\n\t\t\t\t}\n\t\t\t\tthis.setInputWidth();\n\t\t\t\tthis.validate();\n\t\t\t},\n\t\t\tinputActiveOptionBorder: this.inputActiveOptionBorder\n\t\t}));\n\t\tthis.wholeWords = this._register(new WholeWordsCheckbox({\n\t\t\tappendTitle: appendWholeWordsLabel,\n\t\t\tisChecked: false,\n\t\t\tonChange: (viaKeyboard) => {\n\t\t\t\tthis._onDidOptionChange.fire(viaKeyboard);\n\t\t\t\tif (!viaKeyboard) {\n\t\t\t\t\tthis.inputBox.focus();\n\t\t\t\t}\n\t\t\t\tthis.setInputWidth();\n\t\t\t\tthis.validate();\n\t\t\t},\n\t\t\tinputActiveOptionBorder: this.inputActiveOptionBorder\n\t\t}));\n\t\tthis.caseSensitive = this._register(new CaseSensitiveCheckbox({\n\t\t\tappendTitle: appendCaseSensitiveLabel,\n\t\t\tisChecked: false,\n\t\t\tonChange: (viaKeyboard) => {\n\t\t\t\tthis._onDidOptionChange.fire(viaKeyboard);\n\t\t\t\tif (!viaKeyboard) {\n\t\t\t\t\tthis.inputBox.focus();\n\t\t\t\t}\n\t\t\t\tthis.setInputWidth();\n\t\t\t\tthis.validate();\n\t\t\t},\n\t\t\tonKeyDown: (e) => {\n\t\t\t\tthis._onCaseSensitiveKeyDown.fire(e);\n\t\t\t},\n\t\t\tinputActiveOptionBorder: this.inputActiveOptionBorder\n\t\t}));\n\n\t\t// Arrow-Key support to navigate between options\n\t\tlet indexes = [this.caseSensitive.domNode, this.wholeWords.domNode, this.regex.domNode];\n\t\tthis.onkeydown(this.domNode, (event: IKeyboardEvent) => {\n\t\t\tif (event.equals(KeyCode.LeftArrow) || event.equals(KeyCode.RightArrow) || event.equals(KeyCode.Escape)) {\n\t\t\t\tlet index = indexes.indexOf(document.activeElement);\n\t\t\t\tif (index >= 0) {\n\t\t\t\t\tlet newIndex: number;\n\t\t\t\t\tif (event.equals(KeyCode.RightArrow)) {\n\t\t\t\t\t\tnewIndex = (index + 1) % indexes.length;\n\t\t\t\t\t} else if (event.equals(KeyCode.LeftArrow)) {\n\t\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t\tnewIndex = indexes.length - 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnewIndex = index - 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (event.equals(KeyCode.Escape)) {\n\t\t\t\t\t\tindexes[index].blur();\n\t\t\t\t\t} else if (newIndex >= 0) {\n\t\t\t\t\t\tindexes[newIndex].focus();\n\t\t\t\t\t}\n\n\t\t\t\t\tdom.EventHelper.stop(event, true);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.setInputWidth();\n\n\t\tlet controls = document.createElement('div');\n\t\tcontrols.className = 'controls';\n\t\tcontrols.appendChild(this.caseSensitive.domNode);\n\t\tcontrols.appendChild(this.wholeWords.domNode);\n\t\tcontrols.appendChild(this.regex.domNode);\n\n\t\tthis.domNode.appendChild(controls);\n\t}\n\n\tpublic validate(): void {\n\t\tthis.inputBox.validate();\n\t}\n\n\tpublic showMessage(message: InputBoxMessage): void {\n\t\tthis.inputBox.showMessage(message);\n\t}\n\n\tpublic clearMessage(): void {\n\t\tthis.inputBox.hideMessage();\n\t}\n\n\tprivate clearValidation(): void {\n\t\tthis.inputBox.hideMessage();\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport { OperatingSystem } from 'vs/base/common/platform';\n\nexport interface ModifierLabels {\n\treadonly ctrlKey: string;\n\treadonly shiftKey: string;\n\treadonly altKey: string;\n\treadonly metaKey: string;\n\treadonly separator: string;\n}\n\nexport interface Modifiers {\n\treadonly ctrlKey: boolean;\n\treadonly shiftKey: boolean;\n\treadonly altKey: boolean;\n\treadonly metaKey: boolean;\n}\n\nexport class ModifierLabelProvider {\n\n\tpublic readonly modifierLabels: ModifierLabels[];\n\n\tconstructor(mac: ModifierLabels, windows: ModifierLabels, linux: ModifierLabels = windows) {\n\t\tthis.modifierLabels = [null];\n\t\tthis.modifierLabels[OperatingSystem.Macintosh] = mac;\n\t\tthis.modifierLabels[OperatingSystem.Windows] = windows;\n\t\tthis.modifierLabels[OperatingSystem.Linux] = linux;\n\t}\n\n\tpublic toLabel(firstPartMod: Modifiers, firstPartKey: string, chordPartMod: Modifiers, chordPartKey: string, OS: OperatingSystem): string {\n\t\tif (firstPartKey === null && chordPartKey === null) {\n\t\t\treturn null;\n\t\t}\n\t\treturn _asString(firstPartMod, firstPartKey, chordPartMod, chordPartKey, this.modifierLabels[OS]);\n\t}\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\t{\n\t\tctrlKey: '⌃',\n\t\tshiftKey: '⇧',\n\t\taltKey: '⌥',\n\t\tmetaKey: '⌘',\n\t\tseparator: '',\n\t},\n\t{\n\t\tctrlKey: nls.localize('ctrlKey', \"Ctrl\"),\n\t\tshiftKey: nls.localize('shiftKey', \"Shift\"),\n\t\taltKey: nls.localize('altKey', \"Alt\"),\n\t\tmetaKey: nls.localize('windowsKey', \"Windows\"),\n\t\tseparator: '+',\n\t}\n);\n\n/**\n * A label provider that prints modifiers in a suitable format for ARIA.\n */\nexport const AriaLabelProvider = new ModifierLabelProvider(\n\t{\n\t\tctrlKey: nls.localize('ctrlKey.long', \"Control\"),\n\t\tshiftKey: nls.localize('shiftKey.long', \"Shift\"),\n\t\taltKey: nls.localize('altKey.long', \"Alt\"),\n\t\tmetaKey: nls.localize('cmdKey.long', \"Command\"),\n\t\tseparator: '+',\n\t},\n\t{\n\t\tctrlKey: nls.localize('ctrlKey.long', \"Control\"),\n\t\tshiftKey: nls.localize('shiftKey.long', \"Shift\"),\n\t\taltKey: nls.localize('altKey.long', \"Alt\"),\n\t\tmetaKey: nls.localize('windowsKey.long', \"Windows\"),\n\t\tseparator: '+',\n\t}\n);\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\t{\n\t\tctrlKey: 'Ctrl',\n\t\tshiftKey: 'Shift',\n\t\taltKey: 'Alt',\n\t\tmetaKey: 'Cmd',\n\t\tseparator: '+',\n\t},\n\t{\n\t\tctrlKey: 'Ctrl',\n\t\tshiftKey: 'Shift',\n\t\taltKey: 'Alt',\n\t\tmetaKey: 'Super',\n\t\tseparator: '+',\n\t}\n);\n\n/**\n * A label provider that prints modifiers in a suitable format for user settings.\n */\nexport const UserSettingsLabelProvider = new ModifierLabelProvider(\n\t{\n\t\tctrlKey: 'ctrl',\n\t\tshiftKey: 'shift',\n\t\taltKey: 'alt',\n\t\tmetaKey: 'cmd',\n\t\tseparator: '+',\n\t},\n\t{\n\t\tctrlKey: 'ctrl',\n\t\tshiftKey: 'shift',\n\t\taltKey: 'alt',\n\t\tmetaKey: 'win',\n\t\tseparator: '+',\n\t},\n\t{\n\t\tctrlKey: 'ctrl',\n\t\tshiftKey: 'shift',\n\t\taltKey: 'alt',\n\t\tmetaKey: 'meta',\n\t\tseparator: '+',\n\t}\n);\n\nfunction _simpleAsString(modifiers: Modifiers, key: string, labels: ModifierLabels): string {\n\tif (key === null) {\n\t\treturn '';\n\t}\n\n\tlet result: string[] = [];\n\n\t// translate modifier keys: Ctrl-Shift-Alt-Meta\n\tif (modifiers.ctrlKey) {\n\t\tresult.push(labels.ctrlKey);\n\t}\n\n\tif (modifiers.shiftKey) {\n\t\tresult.push(labels.shiftKey);\n\t}\n\n\tif (modifiers.altKey) {\n\t\tresult.push(labels.altKey);\n\t}\n\n\tif (modifiers.metaKey) {\n\t\tresult.push(labels.metaKey);\n\t}\n\n\t// the actual key\n\tresult.push(key);\n\n\treturn result.join(labels.separator);\n}\n\nfunction _asString(firstPartMod: Modifiers, firstPartKey: string, chordPartMod: Modifiers, chordPartKey: string, labels: ModifierLabels): string {\n\tlet result = _simpleAsString(firstPartMod, firstPartKey, labels);\n\n\tif (chordPartKey !== null) {\n\t\tresult += ' ';\n\t\tresult += _simpleAsString(chordPartMod, chordPartKey, labels);\n\t}\n\n\treturn result;\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'use strict';\n\nimport 'vs/css!./keybindingLabel';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { equals } from 'vs/base/common/objects';\nimport { OperatingSystem } from 'vs/base/common/platform';\nimport { ResolvedKeybinding, ResolvedKeybindingPart } from 'vs/base/common/keyCodes';\nimport { UILabelProvider } from 'vs/base/common/keybindingLabels';\nimport * as dom from 'vs/base/browser/dom';\n\nconst $ = dom.$;\n\nexport interface PartMatches {\n\tctrlKey?: boolean;\n\tshiftKey?: boolean;\n\taltKey?: boolean;\n\tmetaKey?: boolean;\n\tkeyCode?: boolean;\n}\n\nexport interface Matches {\n\tfirstPart: PartMatches;\n\tchordPart: PartMatches;\n}\n\nexport class KeybindingLabel implements IDisposable {\n\n\tprivate domNode: HTMLElement;\n\tprivate keybinding: ResolvedKeybinding;\n\tprivate matches: Matches;\n\tprivate didEverRender: boolean;\n\n\tconstructor(container: HTMLElement, private os: OperatingSystem) {\n\t\tthis.domNode = dom.append(container, $('.htmlkb'));\n\t\tthis.didEverRender = false;\n\t\tcontainer.appendChild(this.domNode);\n\t}\n\n\tget element(): HTMLElement {\n\t\treturn this.domNode;\n\t}\n\n\tset(keybinding: ResolvedKeybinding, matches: Matches) {\n\t\tif (this.didEverRender && this.keybinding === keybinding && KeybindingLabel.areSame(this.matches, matches)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.keybinding = keybinding;\n\t\tthis.matches = matches;\n\t\tthis.render();\n\t}\n\n\tprivate render() {\n\t\tdom.clearNode(this.domNode);\n\n\t\tif (this.keybinding) {\n\t\t\tlet [firstPart, chordPart] = this.keybinding.getParts();\n\t\t\tif (firstPart) {\n\t\t\t\tthis.renderPart(this.domNode, firstPart, this.matches ? this.matches.firstPart : null);\n\t\t\t}\n\t\t\tif (chordPart) {\n\t\t\t\tdom.append(this.domNode, $('span', null, ' '));\n\t\t\t\tthis.renderPart(this.domNode, chordPart, this.matches ? this.matches.chordPart : null);\n\t\t\t}\n\t\t\tthis.domNode.title = this.keybinding.getAriaLabel();\n\t\t}\n\n\t\tthis.didEverRender = true;\n\t}\n\n\tprivate renderPart(parent: HTMLElement, part: ResolvedKeybindingPart, match: PartMatches) {\n\t\tconst modifierLabels = UILabelProvider.modifierLabels[this.os];\n\t\tif (part.ctrlKey) {\n\t\t\tthis.renderKey(parent, modifierLabels.ctrlKey, match && match.ctrlKey, modifierLabels.separator);\n\t\t}\n\t\tif (part.shiftKey) {\n\t\t\tthis.renderKey(parent, modifierLabels.shiftKey, match && match.shiftKey, modifierLabels.separator);\n\t\t}\n\t\tif (part.altKey) {\n\t\t\tthis.renderKey(parent, modifierLabels.altKey, match && match.altKey, modifierLabels.separator);\n\t\t}\n\t\tif (part.metaKey) {\n\t\t\tthis.renderKey(parent, modifierLabels.metaKey, match && match.metaKey, modifierLabels.separator);\n\t\t}\n\t\tconst keyLabel = part.keyLabel;\n\t\tif (keyLabel) {\n\t\t\tthis.renderKey(parent, keyLabel, match && match.keyCode, '');\n\t\t}\n\t}\n\n\tprivate renderKey(parent: HTMLElement, label: string, highlight: boolean, separator: string): void {\n\t\tdom.append(parent, $('span.monaco-kbkey' + (highlight ? '.highlight' : ''), null, label));\n\t\tif (separator) {\n\t\t\tdom.append(parent, $('span', null, separator));\n\t\t}\n\t}\n\n\tdispose() {\n\t\tthis.keybinding = null;\n\t}\n\n\tprivate static areSame(a: Matches, b: Matches): boolean {\n\t\tif (a === b || (!a && !b)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn !!a && !!b && equals(a.firstPart, b.firstPart) && equals(a.chordPart, b.chordPart);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport nls = require('vs/nls');\nimport strings = require('vs/base/common/strings');\n\nenum Severity {\n\tIgnore = 0,\n\tInfo = 1,\n\tWarning = 2,\n\tError = 3\n}\n\nnamespace Severity {\n\n\tvar _error = 'error',\n\t\t_warning = 'warning',\n\t\t_warn = 'warn',\n\t\t_info = 'info';\n\n\tvar _displayStrings: { [value: number]: string; } = Object.create(null);\n\t_displayStrings[Severity.Error] = nls.localize('sev.error', \"Error\");\n\t_displayStrings[Severity.Warning] = nls.localize('sev.warning', \"Warning\");\n\t_displayStrings[Severity.Info] = nls.localize('sev.info', \"Info\");\n\n\t/**\n\t * Parses 'error', 'warning', 'warn', 'info' in call casings\n\t * and falls back to ignore.\n\t */\n\texport function fromValue(value: string): Severity {\n\t\tif (!value) {\n\t\t\treturn Severity.Ignore;\n\t\t}\n\n\t\tif (strings.equalsIgnoreCase(_error, value)) {\n\t\t\treturn Severity.Error;\n\t\t}\n\n\t\tif (strings.equalsIgnoreCase(_warning, value) || strings.equalsIgnoreCase(_warn, value)) {\n\t\t\treturn Severity.Warning;\n\t\t}\n\n\t\tif (strings.equalsIgnoreCase(_info, value)) {\n\t\t\treturn Severity.Info;\n\t\t}\n\n\t\treturn Severity.Ignore;\n\t}\n\n\texport function toString(value: Severity): string {\n\t\treturn _displayStrings[value] || strings.empty;\n\t}\n\n\texport function compare(a: Severity, b: Severity): number {\n\t\treturn b - a;\n\t}\n}\n\nexport default Severity;","/*---------------------------------------------------------------------------------------------\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'use strict';\n\nimport nls = require('vs/nls');\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport types = require('vs/base/common/types');\nimport URI from 'vs/base/common/uri';\nimport { ITree, IActionProvider } from 'vs/base/parts/tree/browser/tree';\nimport filters = require('vs/base/common/filters');\nimport strings = require('vs/base/common/strings');\nimport paths = require('vs/base/common/paths');\nimport { IconLabel, IIconLabelOptions } from 'vs/base/browser/ui/iconLabel/iconLabel';\nimport { IQuickNavigateConfiguration, IModel, IDataSource, IFilter, IAccessiblityProvider, IRenderer, IRunner, Mode } from 'vs/base/parts/quickopen/common/quickOpen';\nimport { Action, IAction, IActionRunner } from 'vs/base/common/actions';\nimport { compareAnything, compareByScore as doCompareByScore } from 'vs/base/common/comparers';\nimport { ActionBar, IActionItem } from 'vs/base/browser/ui/actionbar/actionbar';\nimport { HighlightedLabel } from 'vs/base/browser/ui/highlightedlabel/highlightedLabel';\nimport DOM = require('vs/base/browser/dom');\nimport { IQuickOpenStyles } from 'vs/base/parts/quickopen/browser/quickOpenWidget';\nimport { KeybindingLabel } from 'vs/base/browser/ui/keybindingLabel/keybindingLabel';\nimport { OS } from 'vs/base/common/platform';\nimport { ResolvedKeybinding } from 'vs/base/common/keyCodes';\n\nexport interface IContext {\n\tevent: any;\n\tquickNavigateConfiguration: IQuickNavigateConfiguration;\n}\n\nexport interface IHighlight {\n\tstart: number;\n\tend: number;\n}\n\nlet IDS = 0;\n\nclass EntryAccessor {\n\n\tpublic static getLabel(entry: QuickOpenEntry) {\n\t\treturn entry.getLabel();\n\t}\n\n\tpublic static getResourcePath(entry: QuickOpenEntry) {\n\t\tconst resource = entry.getResource();\n\t\treturn resource && resource.fsPath;\n\t}\n}\n\nexport class QuickOpenEntry {\n\tprivate id: string;\n\tprivate labelHighlights: IHighlight[];\n\tprivate descriptionHighlights: IHighlight[];\n\tprivate detailHighlights: IHighlight[];\n\tprivate hidden: boolean;\n\n\tconstructor(highlights: IHighlight[] = []) {\n\t\tthis.id = (IDS++).toString();\n\t\tthis.labelHighlights = highlights;\n\t\tthis.descriptionHighlights = [];\n\t}\n\n\t/**\n\t * A unique identifier for the entry\n\t */\n\tpublic getId(): string {\n\t\treturn this.id;\n\t}\n\n\t/**\n\t * The label of the entry to identify it from others in the list\n\t */\n\tpublic getLabel(): string {\n\t\treturn null;\n\t}\n\n\t/**\n\t * The options for the label to use for this entry\n\t */\n\tpublic getLabelOptions(): IIconLabelOptions {\n\t\treturn null;\n\t}\n\n\t/**\n\t * The label of the entry to use when a screen reader wants to read about the entry\n\t */\n\tpublic getAriaLabel(): string {\n\t\treturn this.getLabel();\n\t}\n\n\t/**\n\t * Detail information about the entry that is optional and can be shown below the label\n\t */\n\tpublic getDetail(): string {\n\t\treturn null;\n\t}\n\n\t/**\n\t * The icon of the entry to identify it from others in the list\n\t */\n\tpublic getIcon(): string {\n\t\treturn null;\n\t}\n\n\t/**\n\t * A secondary description that is optional and can be shown right to the label\n\t */\n\tpublic getDescription(): string {\n\t\treturn null;\n\t}\n\n\t/**\n\t * An optional keybinding to show for an entry.\n\t */\n\tpublic getKeybinding(): ResolvedKeybinding {\n\t\treturn null;\n\t}\n\n\t/**\n\t * A resource for this entry. Resource URIs can be used to compare different kinds of entries and group\n\t * them together.\n\t */\n\tpublic getResource(): URI {\n\t\treturn null;\n\t}\n\n\t/**\n\t * Allows to reuse the same model while filtering. Hidden entries will not show up in the viewer.\n\t */\n\tpublic isHidden(): boolean {\n\t\treturn this.hidden;\n\t}\n\n\t/**\n\t * Allows to reuse the same model while filtering. Hidden entries will not show up in the viewer.\n\t */\n\tpublic setHidden(hidden: boolean): void {\n\t\tthis.hidden = hidden;\n\t}\n\n\t/**\n\t * Allows to set highlight ranges that should show up for the entry label and optionally description if set.\n\t */\n\tpublic setHighlights(labelHighlights: IHighlight[], descriptionHighlights?: IHighlight[], detailHighlights?: IHighlight[]): void {\n\t\tthis.labelHighlights = labelHighlights;\n\t\tthis.descriptionHighlights = descriptionHighlights;\n\t\tthis.detailHighlights = detailHighlights;\n\t}\n\n\t/**\n\t * Allows to return highlight ranges that should show up for the entry label and description.\n\t */\n\tpublic getHighlights(): [IHighlight[] /* Label */, IHighlight[] /* Description */, IHighlight[] /* Detail */] {\n\t\treturn [this.labelHighlights, this.descriptionHighlights, this.detailHighlights];\n\t}\n\n\t/**\n\t * Called when the entry is selected for opening. Returns a boolean value indicating if an action was performed or not.\n\t * The mode parameter gives an indication if the element is previewed (using arrow keys) or opened.\n\t *\n\t * The context parameter provides additional context information how the run was triggered.\n\t */\n\tpublic run(mode: Mode, context: IContext): boolean {\n\t\treturn false;\n\t}\n\n\t/**\n\t * A good default sort implementation for quick open entries respecting highlight information\n\t * as well as associated resources.\n\t */\n\tpublic static compare(elementA: QuickOpenEntry, elementB: QuickOpenEntry, lookFor: string): number {\n\n\t\t// Give matches with label highlights higher priority over\n\t\t// those with only description highlights\n\t\tconst labelHighlightsA = elementA.getHighlights()[0] || [];\n\t\tconst labelHighlightsB = elementB.getHighlights()[0] || [];\n\t\tif (labelHighlightsA.length && !labelHighlightsB.length) {\n\t\t\treturn -1;\n\t\t} else if (!labelHighlightsA.length && labelHighlightsB.length) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Fallback to the full path if labels are identical and we have associated resources\n\t\tlet nameA = elementA.getLabel();\n\t\tlet nameB = elementB.getLabel();\n\t\tif (nameA === nameB) {\n\t\t\tconst resourceA = elementA.getResource();\n\t\t\tconst resourceB = elementB.getResource();\n\n\t\t\tif (resourceA && resourceB) {\n\t\t\t\tnameA = resourceA.fsPath;\n\t\t\t\tnameB = resourceB.fsPath;\n\t\t\t}\n\t\t}\n\n\t\treturn compareAnything(nameA, nameB, lookFor);\n\t}\n\n\tpublic static compareByScore(elementA: QuickOpenEntry, elementB: QuickOpenEntry, lookFor: string, lookForNormalizedLower: string, scorerCache?: { [key: string]: number }): number {\n\t\treturn doCompareByScore(elementA, elementB, EntryAccessor, lookFor, lookForNormalizedLower, scorerCache);\n\t}\n\n\t/**\n\t * A good default highlight implementation for an entry with label and description.\n\t */\n\tpublic static highlight(entry: QuickOpenEntry, lookFor: string, fuzzyHighlight = false): { labelHighlights: IHighlight[], descriptionHighlights: IHighlight[] } {\n\t\tlet labelHighlights: IHighlight[] = [];\n\t\tconst descriptionHighlights: IHighlight[] = [];\n\n\t\tconst normalizedLookFor = strings.stripWildcards(lookFor);\n\t\tconst label = entry.getLabel();\n\t\tconst description = entry.getDescription();\n\n\t\t// Highlight file aware\n\t\tif (entry.getResource()) {\n\n\t\t\t// Highlight entire label and description if searching for full absolute path\n\t\t\tconst fsPath = entry.getResource().fsPath;\n\t\t\tif (lookFor.length === fsPath.length && lookFor.toLowerCase() === fsPath.toLowerCase()) {\n\t\t\t\tlabelHighlights.push({ start: 0, end: label.length });\n\t\t\t\tdescriptionHighlights.push({ start: 0, end: description.length });\n\t\t\t}\n\n\t\t\t// Fuzzy/Full-Path: Highlight is special\n\t\t\telse if (fuzzyHighlight || lookFor.indexOf(paths.nativeSep) >= 0) {\n\t\t\t\tconst candidateLabelHighlights = filters.matchesFuzzy(lookFor, label, fuzzyHighlight);\n\t\t\t\tif (!candidateLabelHighlights) {\n\t\t\t\t\tconst pathPrefix = description ? (description + paths.nativeSep) : '';\n\t\t\t\t\tconst pathPrefixLength = pathPrefix.length;\n\n\t\t\t\t\t// If there are no highlights in the label, build a path out of description and highlight and match on both,\n\t\t\t\t\t// then extract the individual label and description highlights back to the original positions\n\t\t\t\t\tlet pathHighlights = filters.matchesFuzzy(lookFor, pathPrefix + label, fuzzyHighlight);\n\t\t\t\t\tif (!pathHighlights && lookFor !== normalizedLookFor) {\n\t\t\t\t\t\tpathHighlights = filters.matchesFuzzy(normalizedLookFor, pathPrefix + label, fuzzyHighlight);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (pathHighlights) {\n\t\t\t\t\t\tpathHighlights.forEach(h => {\n\n\t\t\t\t\t\t\t// Match overlaps label and description part, we need to split it up\n\t\t\t\t\t\t\tif (h.start < pathPrefixLength && h.end > pathPrefixLength) {\n\t\t\t\t\t\t\t\tlabelHighlights.push({ start: 0, end: h.end - pathPrefixLength });\n\t\t\t\t\t\t\t\tdescriptionHighlights.push({ start: h.start, end: pathPrefixLength });\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Match on label part\n\t\t\t\t\t\t\telse if (h.start >= pathPrefixLength) {\n\t\t\t\t\t\t\t\tlabelHighlights.push({ start: h.start - pathPrefixLength, end: h.end - pathPrefixLength });\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Match on description part\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tdescriptionHighlights.push(h);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlabelHighlights = candidateLabelHighlights;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Highlight only inside label\n\t\t\telse {\n\t\t\t\tlabelHighlights = filters.matchesFuzzy(lookFor, label);\n\t\t\t}\n\t\t}\n\n\t\t// Highlight by label otherwise\n\t\telse {\n\t\t\tlabelHighlights = filters.matchesFuzzy(lookFor, label);\n\t\t}\n\n\t\treturn { labelHighlights, descriptionHighlights };\n\t}\n\n\tpublic isFile(): boolean {\n\t\treturn false; // TODO@Ben debt with editor history merging\n\t}\n}\n\nexport class QuickOpenEntryGroup extends QuickOpenEntry {\n\tprivate entry: QuickOpenEntry;\n\tprivate groupLabel: string;\n\tprivate withBorder: boolean;\n\n\tconstructor(entry?: QuickOpenEntry, groupLabel?: string, withBorder?: boolean) {\n\t\tsuper();\n\n\t\tthis.entry = entry;\n\t\tthis.groupLabel = groupLabel;\n\t\tthis.withBorder = withBorder;\n\t}\n\n\t/**\n\t * The label of the group or null if none.\n\t */\n\tpublic getGroupLabel(): string {\n\t\treturn this.groupLabel;\n\t}\n\n\tpublic setGroupLabel(groupLabel: string): void {\n\t\tthis.groupLabel = groupLabel;\n\t}\n\n\t/**\n\t * Whether to show a border on top of the group entry or not.\n\t */\n\tpublic showBorder(): boolean {\n\t\treturn this.withBorder;\n\t}\n\n\tpublic setShowBorder(showBorder: boolean): void {\n\t\tthis.withBorder = showBorder;\n\t}\n\n\tpublic getLabel(): string {\n\t\treturn this.entry ? this.entry.getLabel() : super.getLabel();\n\t}\n\n\tpublic getLabelOptions(): IIconLabelOptions {\n\t\treturn this.entry ? this.entry.getLabelOptions() : super.getLabelOptions();\n\t}\n\n\tpublic getAriaLabel(): string {\n\t\treturn this.entry ? this.entry.getAriaLabel() : super.getAriaLabel();\n\t}\n\n\tpublic getDetail(): string {\n\t\treturn this.entry ? this.entry.getDetail() : super.getDetail();\n\t}\n\n\tpublic getResource(): URI {\n\t\treturn this.entry ? this.entry.getResource() : super.getResource();\n\t}\n\n\tpublic getIcon(): string {\n\t\treturn this.entry ? this.entry.getIcon() : super.getIcon();\n\t}\n\n\tpublic getDescription(): string {\n\t\treturn this.entry ? this.entry.getDescription() : super.getDescription();\n\t}\n\n\tpublic getEntry(): QuickOpenEntry {\n\t\treturn this.entry;\n\t}\n\n\tpublic getHighlights(): [IHighlight[], IHighlight[], IHighlight[]] {\n\t\treturn this.entry ? this.entry.getHighlights() : super.getHighlights();\n\t}\n\n\tpublic isHidden(): boolean {\n\t\treturn this.entry ? this.entry.isHidden() : super.isHidden();\n\t}\n\n\tpublic setHighlights(labelHighlights: IHighlight[], descriptionHighlights?: IHighlight[], detailHighlights?: IHighlight[]): void {\n\t\tthis.entry ? this.entry.setHighlights(labelHighlights, descriptionHighlights, detailHighlights) : super.setHighlights(labelHighlights, descriptionHighlights, detailHighlights);\n\t}\n\n\tpublic setHidden(hidden: boolean): void {\n\t\tthis.entry ? this.entry.setHidden(hidden) : super.setHidden(hidden);\n\t}\n\n\tpublic run(mode: Mode, context: IContext): boolean {\n\t\treturn this.entry ? this.entry.run(mode, context) : super.run(mode, context);\n\t}\n}\n\nclass NoActionProvider implements IActionProvider {\n\n\tpublic hasActions(tree: ITree, element: any): boolean {\n\t\treturn false;\n\t}\n\n\tpublic getActions(tree: ITree, element: any): TPromise {\n\t\treturn TPromise.as(null);\n\t}\n\n\tpublic hasSecondaryActions(tree: ITree, element: any): boolean {\n\t\treturn false;\n\t}\n\n\tpublic getSecondaryActions(tree: ITree, element: any): TPromise {\n\t\treturn TPromise.as(null);\n\t}\n\n\tpublic getActionItem(tree: ITree, element: any, action: Action): IActionItem {\n\t\treturn null;\n\t}\n}\n\nexport interface IQuickOpenEntryTemplateData {\n\tcontainer: HTMLElement;\n\tentry: HTMLElement;\n\ticon: HTMLSpanElement;\n\tlabel: IconLabel;\n\tdetail: HighlightedLabel;\n\tdescription: HighlightedLabel;\n\tkeybinding: KeybindingLabel;\n\tactionBar: ActionBar;\n}\n\nexport interface IQuickOpenEntryGroupTemplateData extends IQuickOpenEntryTemplateData {\n\tgroup: HTMLDivElement;\n}\n\nconst templateEntry = 'quickOpenEntry';\nconst templateEntryGroup = 'quickOpenEntryGroup';\n\nclass Renderer implements IRenderer {\n\n\tprivate actionProvider: IActionProvider;\n\tprivate actionRunner: IActionRunner;\n\n\tconstructor(actionProvider: IActionProvider = new NoActionProvider(), actionRunner: IActionRunner = null) {\n\t\tthis.actionProvider = actionProvider;\n\t\tthis.actionRunner = actionRunner;\n\t}\n\n\tpublic getHeight(entry: QuickOpenEntry): number {\n\t\tif (entry.getDetail()) {\n\t\t\treturn 44;\n\t\t}\n\n\t\treturn 22;\n\t}\n\n\tpublic getTemplateId(entry: QuickOpenEntry): string {\n\t\tif (entry instanceof QuickOpenEntryGroup) {\n\t\t\treturn templateEntryGroup;\n\t\t}\n\n\t\treturn templateEntry;\n\t}\n\n\tpublic renderTemplate(templateId: string, container: HTMLElement, styles: IQuickOpenStyles): IQuickOpenEntryGroupTemplateData {\n\t\tconst entryContainer = document.createElement('div');\n\t\tDOM.addClass(entryContainer, 'sub-content');\n\t\tcontainer.appendChild(entryContainer);\n\n\t\t// Entry\n\t\tconst row1 = DOM.$('.row');\n\t\tconst row2 = DOM.$('.row');\n\t\tconst entry = DOM.$('.quick-open-entry', null, row1, row2);\n\t\tentryContainer.appendChild(entry);\n\n\t\t// Icon\n\t\tconst icon = document.createElement('span');\n\t\trow1.appendChild(icon);\n\n\t\t// Label\n\t\tconst label = new IconLabel(row1, { supportHighlights: true });\n\n\t\t// Description\n\t\tconst descriptionContainer = document.createElement('span');\n\t\trow1.appendChild(descriptionContainer);\n\t\tDOM.addClass(descriptionContainer, 'quick-open-entry-description');\n\t\tconst description = new HighlightedLabel(descriptionContainer);\n\n\t\t// Keybinding\n\t\tconst keybindingContainer = document.createElement('span');\n\t\trow1.appendChild(keybindingContainer);\n\t\tDOM.addClass(keybindingContainer, 'quick-open-entry-keybinding');\n\t\tconst keybinding = new KeybindingLabel(keybindingContainer, OS);\n\n\t\t// Detail\n\t\tconst detailContainer = document.createElement('div');\n\t\trow2.appendChild(detailContainer);\n\t\tDOM.addClass(detailContainer, 'quick-open-entry-meta');\n\t\tconst detail = new HighlightedLabel(detailContainer);\n\n\t\t// Entry Group\n\t\tlet group: HTMLDivElement;\n\t\tif (templateId === templateEntryGroup) {\n\t\t\tgroup = document.createElement('div');\n\t\t\tDOM.addClass(group, 'results-group');\n\t\t\tcontainer.appendChild(group);\n\t\t}\n\n\t\t// Actions\n\t\tDOM.addClass(container, 'actions');\n\n\t\tconst actionBarContainer = document.createElement('div');\n\t\tDOM.addClass(actionBarContainer, 'primary-action-bar');\n\t\tcontainer.appendChild(actionBarContainer);\n\n\t\tconst actionBar = new ActionBar(actionBarContainer, {\n\t\t\tactionRunner: this.actionRunner\n\t\t});\n\n\t\treturn {\n\t\t\tcontainer,\n\t\t\tentry,\n\t\t\ticon,\n\t\t\tlabel,\n\t\t\tdetail,\n\t\t\tdescription,\n\t\t\tkeybinding,\n\t\t\tgroup,\n\t\t\tactionBar\n\t\t};\n\t}\n\n\tpublic renderElement(entry: QuickOpenEntry, templateId: string, templateData: any, styles: IQuickOpenStyles): void {\n\t\tconst data: IQuickOpenEntryTemplateData = templateData;\n\n\t\t// Action Bar\n\t\tif (this.actionProvider.hasActions(null, entry)) {\n\t\t\tDOM.addClass(data.container, 'has-actions');\n\t\t} else {\n\t\t\tDOM.removeClass(data.container, 'has-actions');\n\t\t}\n\n\t\tdata.actionBar.context = entry; // make sure the context is the current element\n\n\t\tthis.actionProvider.getActions(null, entry).then((actions) => {\n\t\t\t// TODO@Ben this will not work anymore as soon as quick open has more actions\n\t\t\t// but as long as there is only one are ok\n\t\t\tif (data.actionBar.isEmpty() && actions && actions.length > 0) {\n\t\t\t\tdata.actionBar.push(actions, { icon: true, label: false });\n\t\t\t} else if (!data.actionBar.isEmpty() && (!actions || actions.length === 0)) {\n\t\t\t\tdata.actionBar.clear();\n\t\t\t}\n\t\t});\n\n\t\t// Entry group class\n\t\tif (entry instanceof QuickOpenEntryGroup && entry.getGroupLabel()) {\n\t\t\tDOM.addClass(data.container, 'has-group-label');\n\t\t} else {\n\t\t\tDOM.removeClass(data.container, 'has-group-label');\n\t\t}\n\n\t\t// Entry group\n\t\tif (entry instanceof QuickOpenEntryGroup) {\n\t\t\tconst group = entry;\n\t\t\tconst groupData = templateData;\n\n\t\t\t// Border\n\t\t\tif (group.showBorder()) {\n\t\t\t\tDOM.addClass(groupData.container, 'results-group-separator');\n\t\t\t\tgroupData.container.style.borderTopColor = styles.pickerGroupBorder.toString();\n\t\t\t} else {\n\t\t\t\tDOM.removeClass(groupData.container, 'results-group-separator');\n\t\t\t\tgroupData.container.style.borderTopColor = null;\n\t\t\t}\n\n\t\t\t// Group Label\n\t\t\tconst groupLabel = group.getGroupLabel() || '';\n\t\t\tgroupData.group.textContent = groupLabel;\n\t\t\tgroupData.group.style.color = styles.pickerGroupForeground.toString();\n\t\t}\n\n\t\t// Normal Entry\n\t\tif (entry instanceof QuickOpenEntry) {\n\t\t\tconst [labelHighlights, descriptionHighlights, detailHighlights] = entry.getHighlights();\n\n\t\t\t// Icon\n\t\t\tconst iconClass = entry.getIcon() ? ('quick-open-entry-icon ' + entry.getIcon()) : '';\n\t\t\tdata.icon.className = iconClass;\n\n\t\t\t// Label\n\t\t\tconst options: IIconLabelOptions = entry.getLabelOptions() || Object.create(null);\n\t\t\toptions.matches = labelHighlights || [];\n\t\t\tdata.label.setValue(entry.getLabel(), null, options);\n\n\t\t\t// Meta\n\t\t\tdata.detail.set(entry.getDetail(), detailHighlights);\n\n\t\t\t// Description\n\t\t\tdata.description.set(entry.getDescription(), descriptionHighlights || []);\n\t\t\tdata.description.element.title = entry.getDescription();\n\n\t\t\t// Keybinding\n\t\t\tdata.keybinding.set(entry.getKeybinding(), null);\n\t\t}\n\t}\n\n\tpublic disposeTemplate(templateId: string, templateData: any): void {\n\t\tconst data = templateData as IQuickOpenEntryGroupTemplateData;\n\t\tdata.actionBar.dispose();\n\t\tdata.actionBar = null;\n\t\tdata.container = null;\n\t\tdata.entry = null;\n\t\tdata.description.dispose();\n\t\tdata.description = null;\n\t\tdata.keybinding.dispose();\n\t\tdata.keybinding = null;\n\t\tdata.detail.dispose();\n\t\tdata.detail = null;\n\t\tdata.group = null;\n\t\tdata.icon = null;\n\t\tdata.label.dispose();\n\t\tdata.label = null;\n\t}\n}\n\nexport class QuickOpenModel implements\n\tIModel,\n\tIDataSource,\n\tIFilter,\n\tIRunner\n{\n\tprivate _entries: QuickOpenEntry[];\n\tprivate _dataSource: IDataSource;\n\tprivate _renderer: IRenderer;\n\tprivate _filter: IFilter;\n\tprivate _runner: IRunner;\n\tprivate _accessibilityProvider: IAccessiblityProvider;\n\n\tconstructor(entries: QuickOpenEntry[] = [], actionProvider: IActionProvider = new NoActionProvider()) {\n\t\tthis._entries = entries;\n\t\tthis._dataSource = this;\n\t\tthis._renderer = new Renderer(actionProvider);\n\t\tthis._filter = this;\n\t\tthis._runner = this;\n\t\tthis._accessibilityProvider = this;\n\t}\n\n\tpublic get entries() { return this._entries; }\n\tpublic get dataSource() { return this._dataSource; }\n\tpublic get renderer() { return this._renderer; }\n\tpublic get filter() { return this._filter; }\n\tpublic get runner() { return this._runner; }\n\tpublic get accessibilityProvider() { return this._accessibilityProvider; }\n\n\tpublic set entries(entries: QuickOpenEntry[]) {\n\t\tthis._entries = entries;\n\t}\n\n\t/**\n\t * Adds entries that should show up in the quick open viewer.\n\t */\n\tpublic addEntries(entries: QuickOpenEntry[]): void {\n\t\tif (types.isArray(entries)) {\n\t\t\tthis._entries = this._entries.concat(entries);\n\t\t}\n\t}\n\n\t/**\n\t * Set the entries that should show up in the quick open viewer.\n\t */\n\tpublic setEntries(entries: QuickOpenEntry[]): void {\n\t\tif (types.isArray(entries)) {\n\t\t\tthis._entries = entries;\n\t\t}\n\t}\n\n\t/**\n\t * Get the entries that should show up in the quick open viewer.\n\t *\n\t * @visibleOnly optional parameter to only return visible entries\n\t */\n\tpublic getEntries(visibleOnly?: boolean): QuickOpenEntry[] {\n\t\tif (visibleOnly) {\n\t\t\treturn this._entries.filter((e) => !e.isHidden());\n\t\t}\n\n\t\treturn this._entries;\n\t}\n\n\tpublic getId(entry: QuickOpenEntry): string {\n\t\treturn entry.getId();\n\t}\n\n\tpublic getLabel(entry: QuickOpenEntry): string {\n\t\treturn entry.getLabel();\n\t}\n\n\tpublic getAriaLabel(entry: QuickOpenEntry): string {\n\t\tconst ariaLabel = entry.getAriaLabel();\n\t\tif (ariaLabel) {\n\t\t\treturn nls.localize('quickOpenAriaLabelEntry', \"{0}, picker\", entry.getAriaLabel());\n\t\t}\n\n\t\treturn nls.localize('quickOpenAriaLabel', \"picker\");\n\t}\n\n\tpublic isVisible(entry: QuickOpenEntry): boolean {\n\t\treturn !entry.isHidden();\n\t}\n\n\tpublic run(entry: QuickOpenEntry, mode: Mode, context: IContext): boolean {\n\t\treturn entry.run(mode, context);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport nls = require('vs/nls');\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { Action } from 'vs/base/common/actions';\nimport platform = require('vs/base/common/platform');\nimport touch = require('vs/base/browser/touch');\nimport errors = require('vs/base/common/errors');\nimport dom = require('vs/base/browser/dom');\nimport mouse = require('vs/base/browser/mouseEvent');\nimport { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport _ = require('vs/base/parts/tree/browser/tree');\nimport { KeyCode, KeyMod, Keybinding, createKeybinding, SimpleKeybinding } from 'vs/base/common/keyCodes';\n\nexport interface IKeyBindingCallback {\n\t(tree: _.ITree, event: IKeyboardEvent): void;\n}\n\nexport interface ICancelableEvent {\n\tpreventDefault(): void;\n\tstopPropagation(): void;\n}\n\nexport enum ClickBehavior {\n\n\t/**\n\t * Handle the click when the mouse button is pressed but not released yet.\n\t */\n\tON_MOUSE_DOWN,\n\n\t/**\n\t * Handle the click when the mouse button is released.\n\t */\n\tON_MOUSE_UP\n}\n\nexport interface IControllerOptions {\n\tclickBehavior?: ClickBehavior;\n\tkeyboardSupport?: boolean;\n}\n\ninterface IKeybindingDispatcherItem {\n\tkeybinding: Keybinding;\n\tcallback: IKeyBindingCallback;\n}\n\nexport class KeybindingDispatcher {\n\n\tprivate _arr: IKeybindingDispatcherItem[];\n\n\tconstructor() {\n\t\tthis._arr = [];\n\t}\n\n\tpublic set(keybinding: number, callback: IKeyBindingCallback) {\n\t\tthis._arr.push({\n\t\t\tkeybinding: createKeybinding(keybinding, platform.OS),\n\t\t\tcallback: callback\n\t\t});\n\t}\n\n\tpublic dispatch(keybinding: SimpleKeybinding): IKeyBindingCallback {\n\t\t// Loop from the last to the first to handle overwrites\n\t\tfor (let i = this._arr.length - 1; i >= 0; i--) {\n\t\t\tlet item = this._arr[i];\n\t\t\tif (keybinding.equals(item.keybinding)) {\n\t\t\t\treturn item.callback;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n}\n\nexport class DefaultController implements _.IController {\n\n\tprotected downKeyBindingDispatcher: KeybindingDispatcher;\n\tprotected upKeyBindingDispatcher: KeybindingDispatcher;\n\n\tprivate options: IControllerOptions;\n\n\tconstructor(options: IControllerOptions = { clickBehavior: ClickBehavior.ON_MOUSE_UP, keyboardSupport: true }) {\n\t\tthis.options = options;\n\n\t\tthis.downKeyBindingDispatcher = new KeybindingDispatcher();\n\t\tthis.upKeyBindingDispatcher = new KeybindingDispatcher();\n\n\t\tif (typeof options.keyboardSupport !== 'boolean' || options.keyboardSupport) {\n\t\t\tthis.downKeyBindingDispatcher.set(KeyCode.UpArrow, (t, e) => this.onUp(t, e));\n\t\t\tthis.downKeyBindingDispatcher.set(KeyCode.DownArrow, (t, e) => this.onDown(t, e));\n\t\t\tthis.downKeyBindingDispatcher.set(KeyCode.LeftArrow, (t, e) => this.onLeft(t, e));\n\t\t\tthis.downKeyBindingDispatcher.set(KeyCode.RightArrow, (t, e) => this.onRight(t, e));\n\t\t\tif (platform.isMacintosh) {\n\t\t\t\tthis.downKeyBindingDispatcher.set(KeyMod.CtrlCmd | KeyCode.UpArrow, (t, e) => this.onLeft(t, e));\n\t\t\t\tthis.downKeyBindingDispatcher.set(KeyMod.WinCtrl | KeyCode.KEY_N, (t, e) => this.onDown(t, e));\n\t\t\t\tthis.downKeyBindingDispatcher.set(KeyMod.WinCtrl | KeyCode.KEY_P, (t, e) => this.onUp(t, e));\n\t\t\t}\n\t\t\tthis.downKeyBindingDispatcher.set(KeyCode.PageUp, (t, e) => this.onPageUp(t, e));\n\t\t\tthis.downKeyBindingDispatcher.set(KeyCode.PageDown, (t, e) => this.onPageDown(t, e));\n\t\t\tthis.downKeyBindingDispatcher.set(KeyCode.Home, (t, e) => this.onHome(t, e));\n\t\t\tthis.downKeyBindingDispatcher.set(KeyCode.End, (t, e) => this.onEnd(t, e));\n\n\t\t\tthis.downKeyBindingDispatcher.set(KeyCode.Space, (t, e) => this.onSpace(t, e));\n\t\t\tthis.downKeyBindingDispatcher.set(KeyCode.Escape, (t, e) => this.onEscape(t, e));\n\n\t\t\tthis.upKeyBindingDispatcher.set(KeyCode.Enter, this.onEnter.bind(this));\n\t\t\tthis.upKeyBindingDispatcher.set(KeyMod.CtrlCmd | KeyCode.Enter, this.onEnter.bind(this));\n\t\t}\n\t}\n\n\tpublic onMouseDown(tree: _.ITree, element: any, event: mouse.IMouseEvent, origin: string = 'mouse'): boolean {\n\t\tif (this.options.clickBehavior === ClickBehavior.ON_MOUSE_DOWN && (event.leftButton || event.middleButton)) {\n\t\t\tif (event.target) {\n\t\t\t\tif (event.target.tagName && event.target.tagName.toLowerCase() === 'input') {\n\t\t\t\t\treturn false; // Ignore event if target is a form input field (avoids browser specific issues)\n\t\t\t\t}\n\n\t\t\t\tif (dom.findParentWithClass(event.target, 'monaco-action-bar', 'row')) { // TODO@Joao not very nice way of checking for the action bar (implicit knowledge)\n\t\t\t\t\treturn false; // Ignore event if target is over an action bar of the row\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Propagate to onLeftClick now\n\t\t\treturn this.onLeftClick(tree, element, event, origin);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tpublic onClick(tree: _.ITree, element: any, event: mouse.IMouseEvent): boolean {\n\t\tvar isMac = platform.isMacintosh;\n\n\t\t// A Ctrl click on the Mac is a context menu event\n\t\tif (isMac && event.ctrlKey) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn false;\n\t\t}\n\n\t\tif (event.target && event.target.tagName && event.target.tagName.toLowerCase() === 'input') {\n\t\t\treturn false; // Ignore event if target is a form input field (avoids browser specific issues)\n\t\t}\n\n\t\tif (this.options.clickBehavior === ClickBehavior.ON_MOUSE_DOWN && (event.leftButton || event.middleButton)) {\n\t\t\treturn false; // Already handled by onMouseDown\n\t\t}\n\n\t\treturn this.onLeftClick(tree, element, event);\n\t}\n\n\tprotected onLeftClick(tree: _.ITree, element: any, eventish: ICancelableEvent, origin: string = 'mouse'): boolean {\n\t\tvar payload = { origin: origin, originalEvent: eventish };\n\n\t\tif (tree.getInput() === element) {\n\t\t\ttree.clearFocus(payload);\n\t\t\ttree.clearSelection(payload);\n\t\t} else {\n\t\t\tvar isMouseDown = eventish && (eventish).browserEvent && (eventish).browserEvent.type === 'mousedown';\n\t\t\tif (!isMouseDown) {\n\t\t\t\teventish.preventDefault(); // we cannot preventDefault onMouseDown because this would break DND otherwise\n\t\t\t}\n\t\t\teventish.stopPropagation();\n\n\t\t\ttree.DOMFocus();\n\t\t\ttree.setSelection([element], payload);\n\t\t\ttree.setFocus(element, payload);\n\n\t\t\tif (tree.isExpanded(element)) {\n\t\t\t\ttree.collapse(element).done(null, errors.onUnexpectedError);\n\t\t\t} else {\n\t\t\t\ttree.expand(element).done(null, errors.onUnexpectedError);\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic onContextMenu(tree: _.ITree, element: any, event: _.ContextMenuEvent): boolean {\n\t\tif (event.target && event.target.tagName && event.target.tagName.toLowerCase() === 'input') {\n\t\t\treturn false; // allow context menu on input fields\n\t\t}\n\n\t\t// Prevent native context menu from showing up\n\t\tif (event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tpublic onTap(tree: _.ITree, element: any, event: touch.GestureEvent): boolean {\n\t\tvar target = event.initialTarget;\n\n\t\tif (target && target.tagName && target.tagName.toLowerCase() === 'input') {\n\t\t\treturn false; // Ignore event if target is a form input field (avoids browser specific issues)\n\t\t}\n\n\t\treturn this.onLeftClick(tree, element, event, 'touch');\n\t}\n\n\tpublic onKeyDown(tree: _.ITree, event: IKeyboardEvent): boolean {\n\t\treturn this.onKey(this.downKeyBindingDispatcher, tree, event);\n\t}\n\n\tpublic onKeyUp(tree: _.ITree, event: IKeyboardEvent): boolean {\n\t\treturn this.onKey(this.upKeyBindingDispatcher, tree, event);\n\t}\n\n\tprivate onKey(bindings: KeybindingDispatcher, tree: _.ITree, event: IKeyboardEvent): boolean {\n\t\tvar handler = bindings.dispatch(event.toKeybinding());\n\t\tif (handler) {\n\t\t\tif (handler(tree, event)) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tprotected onUp(tree: _.ITree, event: IKeyboardEvent): boolean {\n\t\tvar payload = { origin: 'keyboard', originalEvent: event };\n\n\t\tif (tree.getHighlight()) {\n\t\t\ttree.clearHighlight(payload);\n\t\t} else {\n\t\t\ttree.focusPrevious(1, payload);\n\t\t\ttree.reveal(tree.getFocus()).done(null, errors.onUnexpectedError);\n\t\t}\n\t\treturn true;\n\t}\n\n\tprotected onPageUp(tree: _.ITree, event: IKeyboardEvent): boolean {\n\t\tvar payload = { origin: 'keyboard', originalEvent: event };\n\n\t\tif (tree.getHighlight()) {\n\t\t\ttree.clearHighlight(payload);\n\t\t} else {\n\t\t\ttree.focusPreviousPage(payload);\n\t\t\ttree.reveal(tree.getFocus()).done(null, errors.onUnexpectedError);\n\t\t}\n\t\treturn true;\n\t}\n\n\tprotected onDown(tree: _.ITree, event: IKeyboardEvent): boolean {\n\t\tvar payload = { origin: 'keyboard', originalEvent: event };\n\n\t\tif (tree.getHighlight()) {\n\t\t\ttree.clearHighlight(payload);\n\t\t} else {\n\t\t\ttree.focusNext(1, payload);\n\t\t\ttree.reveal(tree.getFocus()).done(null, errors.onUnexpectedError);\n\t\t}\n\t\treturn true;\n\t}\n\n\tprotected onPageDown(tree: _.ITree, event: IKeyboardEvent): boolean {\n\t\tvar payload = { origin: 'keyboard', originalEvent: event };\n\n\t\tif (tree.getHighlight()) {\n\t\t\ttree.clearHighlight(payload);\n\t\t} else {\n\t\t\ttree.focusNextPage(payload);\n\t\t\ttree.reveal(tree.getFocus()).done(null, errors.onUnexpectedError);\n\t\t}\n\t\treturn true;\n\t}\n\n\tprotected onHome(tree: _.ITree, event: IKeyboardEvent): boolean {\n\t\tvar payload = { origin: 'keyboard', originalEvent: event };\n\n\t\tif (tree.getHighlight()) {\n\t\t\ttree.clearHighlight(payload);\n\t\t} else {\n\t\t\ttree.focusFirst(payload);\n\t\t\ttree.reveal(tree.getFocus()).done(null, errors.onUnexpectedError);\n\t\t}\n\t\treturn true;\n\t}\n\n\tprotected onEnd(tree: _.ITree, event: IKeyboardEvent): boolean {\n\t\tvar payload = { origin: 'keyboard', originalEvent: event };\n\n\t\tif (tree.getHighlight()) {\n\t\t\ttree.clearHighlight(payload);\n\t\t} else {\n\t\t\ttree.focusLast(payload);\n\t\t\ttree.reveal(tree.getFocus()).done(null, errors.onUnexpectedError);\n\t\t}\n\t\treturn true;\n\t}\n\n\tprotected onLeft(tree: _.ITree, event: IKeyboardEvent): boolean {\n\t\tvar payload = { origin: 'keyboard', originalEvent: event };\n\n\t\tif (tree.getHighlight()) {\n\t\t\ttree.clearHighlight(payload);\n\t\t} else {\n\t\t\tvar focus = tree.getFocus();\n\t\t\ttree.collapse(focus).then(didCollapse => {\n\t\t\t\tif (focus && !didCollapse) {\n\t\t\t\t\ttree.focusParent(payload);\n\t\t\t\t\treturn tree.reveal(tree.getFocus());\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t}).done(null, errors.onUnexpectedError);\n\t\t}\n\t\treturn true;\n\t}\n\n\tprotected onRight(tree: _.ITree, event: IKeyboardEvent): boolean {\n\t\tvar payload = { origin: 'keyboard', originalEvent: event };\n\n\t\tif (tree.getHighlight()) {\n\t\t\ttree.clearHighlight(payload);\n\t\t} else {\n\t\t\tvar focus = tree.getFocus();\n\t\t\ttree.expand(focus).then(didExpand => {\n\t\t\t\tif (focus && !didExpand) {\n\t\t\t\t\ttree.focusFirstChild(payload);\n\t\t\t\t\treturn tree.reveal(tree.getFocus());\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t}).done(null, errors.onUnexpectedError);\n\t\t}\n\t\treturn true;\n\t}\n\n\tprotected onEnter(tree: _.ITree, event: IKeyboardEvent): boolean {\n\t\tvar payload = { origin: 'keyboard', originalEvent: event };\n\n\t\tif (tree.getHighlight()) {\n\t\t\treturn false;\n\t\t}\n\t\tvar focus = tree.getFocus();\n\t\tif (focus) {\n\t\t\ttree.setSelection([focus], payload);\n\t\t}\n\t\treturn true;\n\t}\n\n\tprotected onSpace(tree: _.ITree, event: IKeyboardEvent): boolean {\n\t\tif (tree.getHighlight()) {\n\t\t\treturn false;\n\t\t}\n\t\tvar focus = tree.getFocus();\n\t\tif (focus) {\n\t\t\ttree.toggleExpansion(focus);\n\t\t}\n\t\treturn true;\n\t}\n\n\tprotected onEscape(tree: _.ITree, event: IKeyboardEvent): boolean {\n\t\tvar payload = { origin: 'keyboard', originalEvent: event };\n\n\t\tif (tree.getHighlight()) {\n\t\t\ttree.clearHighlight(payload);\n\t\t\treturn true;\n\t\t}\n\n\t\tif (tree.getSelection().length) {\n\t\t\ttree.clearSelection(payload);\n\t\t\treturn true;\n\t\t}\n\n\t\tif (tree.getFocus()) {\n\t\t\ttree.clearFocus(payload);\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n}\n\nexport class DefaultDragAndDrop implements _.IDragAndDrop {\n\n\tpublic getDragURI(tree: _.ITree, element: any): string {\n\t\treturn null;\n\t}\n\n\tpublic onDragStart(tree: _.ITree, data: _.IDragAndDropData, originalEvent: mouse.DragMouseEvent): void {\n\t\treturn;\n\t}\n\n\tpublic onDragOver(tree: _.ITree, data: _.IDragAndDropData, targetElement: any, originalEvent: mouse.DragMouseEvent): _.IDragOverReaction {\n\t\treturn null;\n\t}\n\n\tpublic drop(tree: _.ITree, data: _.IDragAndDropData, targetElement: any, originalEvent: mouse.DragMouseEvent): void {\n\t\treturn;\n\t}\n}\n\nexport class DefaultFilter implements _.IFilter {\n\n\tpublic isVisible(tree: _.ITree, element: any): boolean {\n\t\treturn true;\n\t}\n}\n\nexport class DefaultSorter implements _.ISorter {\n\n\tpublic compare(tree: _.ITree, element: any, otherElement: any): number {\n\t\treturn 0;\n\t}\n}\n\nexport class DefaultAccessibilityProvider implements _.IAccessibilityProvider {\n\n\tgetAriaLabel(tree: _.ITree, element: any): string {\n\t\treturn null;\n\t}\n}\n\nexport class CollapseAllAction extends Action {\n\n\tconstructor(private viewer: _.ITree, enabled: boolean) {\n\t\tsuper('vs.tree.collapse', nls.localize('collapse', \"Collapse\"), 'monaco-tree-action collapse-all', enabled);\n\t}\n\n\tpublic run(context?: any): TPromise {\n\t\tif (this.viewer.getHighlight()) {\n\t\t\treturn TPromise.as(null); // Global action disabled if user is in edit mode from another action\n\t\t}\n\n\t\tthis.viewer.collapseAll();\n\t\tthis.viewer.clearSelection();\n\t\tthis.viewer.clearFocus();\n\t\tthis.viewer.DOMFocus();\n\t\tthis.viewer.focusFirst();\n\n\t\treturn TPromise.as(null);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport 'vs/css!./tree';\nimport WinJS = require('vs/base/common/winjs.base');\nimport TreeDefaults = require('vs/base/parts/tree/browser/treeDefaults');\nimport Events = require('vs/base/common/eventEmitter');\nimport Model = require('vs/base/parts/tree/browser/treeModel');\nimport View = require('./treeView');\nimport _ = require('vs/base/parts/tree/browser/tree');\nimport { INavigator, MappedNavigator } from 'vs/base/common/iterator';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport Lifecycle = require('vs/base/common/lifecycle');\nimport { Color } from 'vs/base/common/color';\nimport { mixin } from 'vs/base/common/objects';\n\nexport class TreeContext implements _.ITreeContext {\n\n\tpublic tree: _.ITree;\n\tpublic configuration: _.ITreeConfiguration;\n\tpublic options: _.ITreeOptions;\n\n\tpublic dataSource: _.IDataSource;\n\tpublic renderer: _.IRenderer;\n\tpublic controller: _.IController;\n\tpublic dnd: _.IDragAndDrop;\n\tpublic filter: _.IFilter;\n\tpublic sorter: _.ISorter;\n\tpublic accessibilityProvider: _.IAccessibilityProvider;\n\n\tconstructor(tree: _.ITree, configuration: _.ITreeConfiguration, options: _.ITreeOptions = {}) {\n\t\tthis.tree = tree;\n\t\tthis.configuration = configuration;\n\t\tthis.options = options;\n\n\t\tif (!configuration.dataSource) {\n\t\t\tthrow new Error('You must provide a Data Source to the tree.');\n\t\t}\n\n\t\tthis.dataSource = configuration.dataSource;\n\t\tthis.renderer = configuration.renderer;\n\t\tthis.controller = configuration.controller || new TreeDefaults.DefaultController({ clickBehavior: TreeDefaults.ClickBehavior.ON_MOUSE_UP, keyboardSupport: typeof options.keyboardSupport !== 'boolean' || options.keyboardSupport });\n\t\tthis.dnd = configuration.dnd || new TreeDefaults.DefaultDragAndDrop();\n\t\tthis.filter = configuration.filter || new TreeDefaults.DefaultFilter();\n\t\tthis.sorter = configuration.sorter || null;\n\t\tthis.accessibilityProvider = configuration.accessibilityProvider || new TreeDefaults.DefaultAccessibilityProvider();\n\t}\n}\n\nconst defaultStyles: _.ITreeStyles = {\n\tlistFocusBackground: Color.fromHex('#073655'),\n\tlistActiveSelectionBackground: Color.fromHex('#0E639C'),\n\tlistActiveSelectionForeground: Color.fromHex('#FFFFFF'),\n\tlistFocusAndSelectionBackground: Color.fromHex('#094771'),\n\tlistFocusAndSelectionForeground: Color.fromHex('#FFFFFF'),\n\tlistInactiveSelectionBackground: Color.fromHex('#3F3F46'),\n\tlistHoverBackground: Color.fromHex('#2A2D2E'),\n\tlistDropBackground: Color.fromHex('#383B3D')\n};\n\nexport class Tree extends Events.EventEmitter implements _.ITree {\n\n\tprivate container: HTMLElement;\n\tprivate configuration: _.ITreeConfiguration;\n\tprivate options: _.ITreeOptions;\n\n\tprivate context: _.ITreeContext;\n\tprivate model: Model.TreeModel;\n\tprivate view: View.TreeView;\n\n\tprivate _onDispose: Emitter;\n\tprivate _onHighlightChange: Emitter;\n\n\tprivate toDispose: Lifecycle.IDisposable[];\n\n\tconstructor(container: HTMLElement, configuration: _.ITreeConfiguration, options: _.ITreeOptions = {}) {\n\t\tsuper();\n\n\t\tthis.toDispose = [];\n\n\t\tthis._onDispose = new Emitter();\n\t\tthis._onHighlightChange = new Emitter();\n\n\t\tthis.toDispose.push(this._onDispose, this._onHighlightChange);\n\n\t\tthis.container = container;\n\t\tthis.configuration = configuration;\n\t\tthis.options = options;\n\t\tmixin(this.options, defaultStyles, false);\n\n\t\tthis.options.twistiePixels = typeof this.options.twistiePixels === 'number' ? this.options.twistiePixels : 32;\n\t\tthis.options.showTwistie = this.options.showTwistie === false ? false : true;\n\t\tthis.options.indentPixels = typeof this.options.indentPixels === 'number' ? this.options.indentPixels : 12;\n\t\tthis.options.alwaysFocused = this.options.alwaysFocused === true ? true : false;\n\t\tthis.options.useShadows = this.options.useShadows === false ? false : true;\n\t\tthis.options.paddingOnRow = this.options.paddingOnRow === false ? false : true;\n\n\t\tthis.context = new TreeContext(this, configuration, options);\n\t\tthis.model = new Model.TreeModel(this.context);\n\t\tthis.view = new View.TreeView(this.context, this.container);\n\n\t\tthis.view.setModel(this.model);\n\n\t\tthis.addEmitter(this.model);\n\t\tthis.addEmitter(this.view);\n\n\t\tthis.toDispose.push(this.model.addListener('highlight', () => this._onHighlightChange.fire()));\n\t}\n\n\tpublic style(styles: _.ITreeStyles): void {\n\t\tthis.view.applyStyles(styles);\n\t}\n\n\tget onDOMFocus(): Event {\n\t\treturn this.view && this.view.onDOMFocus;\n\t}\n\n\tget onDOMBlur(): Event {\n\t\treturn this.view && this.view.onDOMBlur;\n\t}\n\n\tget onHighlightChange(): Event {\n\t\treturn this._onHighlightChange && this._onHighlightChange.event;\n\t}\n\n\tget onDispose(): Event {\n\t\treturn this._onDispose && this._onDispose.event;\n\t}\n\n\tpublic getHTMLElement(): HTMLElement {\n\t\treturn this.view.getHTMLElement();\n\t}\n\n\tpublic layout(height?: number): void {\n\t\tthis.view.layout(height);\n\t}\n\n\tpublic DOMFocus(): void {\n\t\tthis.view.focus();\n\t}\n\n\tpublic isDOMFocused(): boolean {\n\t\treturn this.view.isFocused();\n\t}\n\n\tpublic DOMBlur(): void {\n\t\tthis.view.blur();\n\t}\n\n\tpublic onVisible(): void {\n\t\tthis.view.onVisible();\n\t}\n\n\tpublic onHidden(): void {\n\t\tthis.view.onHidden();\n\t}\n\n\tpublic setInput(element: any): WinJS.Promise {\n\t\treturn this.model.setInput(element);\n\t}\n\n\tpublic getInput(): any {\n\t\treturn this.model.getInput();\n\t}\n\n\tpublic refresh(element: any = null, recursive = true): WinJS.Promise {\n\t\treturn this.model.refresh(element, recursive);\n\t}\n\n\tpublic expand(element: any): WinJS.Promise {\n\t\treturn this.model.expand(element);\n\t}\n\n\tpublic expandAll(elements: any[]): WinJS.Promise {\n\t\treturn this.model.expandAll(elements);\n\t}\n\n\tpublic collapse(element: any, recursive: boolean = false): WinJS.Promise {\n\t\treturn this.model.collapse(element, recursive);\n\t}\n\n\tpublic collapseAll(elements: any[] = null, recursive: boolean = false): WinJS.Promise {\n\t\treturn this.model.collapseAll(elements, recursive);\n\t}\n\n\tpublic toggleExpansion(element: any): WinJS.Promise {\n\t\treturn this.model.toggleExpansion(element);\n\t}\n\n\tpublic toggleExpansionAll(elements: any[]): WinJS.Promise {\n\t\treturn this.model.toggleExpansionAll(elements);\n\t}\n\n\tpublic isExpanded(element: any): boolean {\n\t\treturn this.model.isExpanded(element);\n\t}\n\n\tpublic getExpandedElements(): any[] {\n\t\treturn this.model.getExpandedElements();\n\t}\n\n\tpublic reveal(element: any, relativeTop: number = null): WinJS.Promise {\n\t\treturn this.model.reveal(element, relativeTop);\n\t}\n\n\tpublic getRelativeTop(element: any): number {\n\t\tlet item = this.model.getItem(element);\n\t\treturn this.view.getRelativeTop(item);\n\t}\n\n\tpublic getScrollPosition(): number {\n\t\treturn this.view.getScrollPosition();\n\t}\n\n\tpublic setScrollPosition(pos: number): void {\n\t\tthis.view.setScrollPosition(pos);\n\t}\n\n\tgetContentHeight(): number {\n\t\treturn this.view.getTotalHeight();\n\t}\n\n\tpublic setHighlight(element?: any, eventPayload?: any): void {\n\t\tthis.model.setHighlight(element, eventPayload);\n\t}\n\n\tpublic getHighlight(): any {\n\t\treturn this.model.getHighlight();\n\t}\n\n\tpublic isHighlighted(element: any): boolean {\n\t\treturn this.model.isFocused(element);\n\t}\n\n\tpublic clearHighlight(eventPayload?: any): void {\n\t\tthis.model.setHighlight(null, eventPayload);\n\t}\n\n\tpublic select(element: any, eventPayload?: any): void {\n\t\tthis.model.select(element, eventPayload);\n\t}\n\n\tpublic selectRange(fromElement: any, toElement: any, eventPayload?: any): void {\n\t\tthis.model.selectRange(fromElement, toElement, eventPayload);\n\t}\n\n\tpublic deselectRange(fromElement: any, toElement: any, eventPayload?: any): void {\n\t\tthis.model.deselectRange(fromElement, toElement, eventPayload);\n\t}\n\n\tpublic selectAll(elements: any[], eventPayload?: any): void {\n\t\tthis.model.selectAll(elements, eventPayload);\n\t}\n\n\tpublic deselect(element: any, eventPayload?: any): void {\n\t\tthis.model.deselect(element, eventPayload);\n\t}\n\n\tpublic deselectAll(elements: any[], eventPayload?: any): void {\n\t\tthis.model.deselectAll(elements, eventPayload);\n\t}\n\n\tpublic setSelection(elements: any[], eventPayload?: any): void {\n\t\tthis.model.setSelection(elements, eventPayload);\n\t}\n\n\tpublic toggleSelection(element: any, eventPayload?: any): void {\n\t\tthis.model.toggleSelection(element, eventPayload);\n\t}\n\n\tpublic isSelected(element: any): boolean {\n\t\treturn this.model.isSelected(element);\n\t}\n\n\tpublic getSelection(): any[] {\n\t\treturn this.model.getSelection();\n\t}\n\n\tpublic clearSelection(eventPayload?: any): void {\n\t\tthis.model.setSelection([], eventPayload);\n\t}\n\n\tpublic selectNext(count?: number, clearSelection?: boolean, eventPayload?: any): void {\n\t\tthis.model.selectNext(count, clearSelection, eventPayload);\n\t}\n\n\tpublic selectPrevious(count?: number, clearSelection?: boolean, eventPayload?: any): void {\n\t\tthis.model.selectPrevious(count, clearSelection, eventPayload);\n\t}\n\n\tpublic selectParent(clearSelection?: boolean, eventPayload?: any): void {\n\t\tthis.model.selectParent(clearSelection, eventPayload);\n\t}\n\n\tpublic setFocus(element?: any, eventPayload?: any): void {\n\t\tthis.model.setFocus(element, eventPayload);\n\t}\n\n\tpublic isFocused(element: any): boolean {\n\t\treturn this.model.isFocused(element);\n\t}\n\n\tpublic getFocus(): any {\n\t\treturn this.model.getFocus();\n\t}\n\n\tpublic focusNext(count?: number, eventPayload?: any): void {\n\t\tthis.model.focusNext(count, eventPayload);\n\t}\n\n\tpublic focusPrevious(count?: number, eventPayload?: any): void {\n\t\tthis.model.focusPrevious(count, eventPayload);\n\t}\n\n\tpublic focusParent(eventPayload?: any): void {\n\t\tthis.model.focusParent(eventPayload);\n\t}\n\n\tpublic focusFirstChild(eventPayload?: any): void {\n\t\tthis.model.focusFirstChild(eventPayload);\n\t}\n\n\tpublic focusFirst(eventPayload?: any, from?: any): void {\n\t\tthis.model.focusFirst(eventPayload, from);\n\t}\n\n\tpublic focusNth(index: number, eventPayload?: any): void {\n\t\tthis.model.focusNth(index, eventPayload);\n\t}\n\n\tpublic focusLast(eventPayload?: any, from?: any): void {\n\t\tthis.model.focusLast(eventPayload, from);\n\t}\n\n\tpublic focusNextPage(eventPayload?: any): void {\n\t\tthis.view.focusNextPage(eventPayload);\n\t}\n\n\tpublic focusPreviousPage(eventPayload?: any): void {\n\t\tthis.view.focusPreviousPage(eventPayload);\n\t}\n\n\tpublic clearFocus(eventPayload?: any): void {\n\t\tthis.model.setFocus(null, eventPayload);\n\t}\n\n\tpublic addTraits(trait: string, elements: any[]): void {\n\t\tthis.model.addTraits(trait, elements);\n\t}\n\n\tpublic removeTraits(trait: string, elements: any[]): void {\n\t\tthis.model.removeTraits(trait, elements);\n\t}\n\n\tpublic toggleTrait(trait: string, element: any): void {\n\t\tthis.model.hasTrait(trait, element) ? this.model.removeTraits(trait, [element])\n\t\t\t: this.model.addTraits(trait, [element]);\n\t}\n\n\tpublic hasTrait(trait: string, element: any): boolean {\n\t\treturn this.model.hasTrait(trait, element);\n\t}\n\n\tgetNavigator(fromElement?: any, subTreeOnly?: boolean): INavigator {\n\t\treturn new MappedNavigator(this.model.getNavigator(fromElement, subTreeOnly), i => i && i.getElement());\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._onDispose.fire();\n\n\t\tif (this.model !== null) {\n\t\t\tthis.model.dispose();\n\t\t\tthis.model = null;\n\t\t}\n\t\tif (this.view !== null) {\n\t\t\tthis.view.dispose();\n\t\t\tthis.view = null;\n\t\t}\n\n\t\tthis.toDispose = Lifecycle.dispose(this.toDispose);\n\n\t\tsuper.dispose();\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport 'vs/css!./quickopen';\nimport nls = require('vs/nls');\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport platform = require('vs/base/common/platform');\nimport { EventType } from 'vs/base/common/events';\nimport types = require('vs/base/common/types');\nimport errors = require('vs/base/common/errors');\nimport { IQuickNavigateConfiguration, IAutoFocus, IEntryRunContext, IModel, Mode } from 'vs/base/parts/quickopen/common/quickOpen';\nimport { Filter, Renderer, DataSource, IModelProvider, AccessibilityProvider } from 'vs/base/parts/quickopen/browser/quickOpenViewer';\nimport { Dimension, Builder, $ } from 'vs/base/browser/builder';\nimport { ISelectionEvent, IFocusEvent, ITree, ContextMenuEvent, IActionProvider, ITreeStyles } from 'vs/base/parts/tree/browser/tree';\nimport { InputBox, MessageType, IInputBoxStyles, IRange } from 'vs/base/browser/ui/inputbox/inputBox';\nimport Severity from 'vs/base/common/severity';\nimport { Tree } from 'vs/base/parts/tree/browser/treeImpl';\nimport { ProgressBar } from 'vs/base/browser/ui/progressbar/progressbar';\nimport { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport { DefaultController, ClickBehavior } from 'vs/base/parts/tree/browser/treeDefaults';\nimport DOM = require('vs/base/browser/dom');\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { ScrollbarVisibility } from 'vs/base/common/scrollable';\nimport { Color } from 'vs/base/common/color';\nimport { mixin } from 'vs/base/common/objects';\n\nexport interface IQuickOpenCallbacks {\n\tonOk: () => void;\n\tonCancel: () => void;\n\tonType: (value: string) => void;\n\tonShow?: () => void;\n\tonHide?: (reason: HideReason) => void;\n\tonFocusLost?: () => boolean /* veto close */;\n}\n\nexport interface IQuickOpenOptions extends IQuickOpenStyles {\n\tminItemsToShow?: number;\n\tmaxItemsToShow?: number;\n\tinputPlaceHolder: string;\n\tinputAriaLabel?: string;\n\tactionProvider?: IActionProvider;\n\tkeyboardSupport?: boolean;\n}\n\nexport interface IQuickOpenStyles extends IInputBoxStyles, ITreeStyles {\n\tbackground?: Color;\n\tforeground?: Color;\n\tborderColor?: Color;\n\tpickerGroupForeground?: Color;\n\tpickerGroupBorder?: Color;\n\twidgetShadow?: Color;\n\tprogressBarBackground?: Color;\n}\n\nexport interface IShowOptions {\n\tquickNavigateConfiguration?: IQuickNavigateConfiguration;\n\tautoFocus?: IAutoFocus;\n\tinputSelection?: IRange;\n}\n\nexport interface IQuickOpenUsageLogger {\n\tpublicLog(eventName: string, data?: any): void;\n}\n\nexport class QuickOpenController extends DefaultController {\n\n\tpublic onContextMenu(tree: ITree, element: any, event: ContextMenuEvent): boolean {\n\t\tif (platform.isMacintosh) {\n\t\t\treturn this.onLeftClick(tree, element, event); // https://github.com/Microsoft/vscode/issues/1011\n\t\t}\n\n\t\treturn super.onContextMenu(tree, element, event);\n\t}\n}\n\nexport enum HideReason {\n\tELEMENT_SELECTED,\n\tFOCUS_LOST,\n\tCANCELED\n}\n\nconst defaultStyles = {\n\tbackground: Color.fromHex('#1E1E1E'),\n\tforeground: Color.fromHex('#CCCCCC'),\n\tpickerGroupForeground: Color.fromHex('#0097FB'),\n\tpickerGroupBorder: Color.fromHex('#3F3F46'),\n\twidgetShadow: Color.fromHex('#000000'),\n\tprogressBarBackground: Color.fromHex('#0E70C0')\n};\n\nconst DEFAULT_INPUT_ARIA_LABEL = nls.localize('quickOpenAriaLabel', \"Quick picker. Type to narrow down results.\");\n\nexport class QuickOpenWidget implements IModelProvider {\n\n\tprivate static MAX_WIDTH = 600;\t\t\t\t// Max total width of quick open widget\n\tprivate static MAX_ITEMS_HEIGHT = 20 * 22;\t// Max height of item list below input field\n\n\tprivate isDisposed: boolean;\n\tprivate options: IQuickOpenOptions;\n\tprivate builder: Builder;\n\tprivate tree: ITree;\n\tprivate inputBox: InputBox;\n\tprivate inputContainer: Builder;\n\tprivate helpText: Builder;\n\tprivate treeContainer: Builder;\n\tprivate progressBar: ProgressBar;\n\tprivate visible: boolean;\n\tprivate isLoosingFocus: boolean;\n\tprivate callbacks: IQuickOpenCallbacks;\n\tprivate toUnbind: IDisposable[];\n\tprivate quickNavigateConfiguration: IQuickNavigateConfiguration;\n\tprivate container: HTMLElement;\n\tprivate treeElement: HTMLElement;\n\tprivate inputElement: HTMLElement;\n\tprivate usageLogger: IQuickOpenUsageLogger;\n\tprivate layoutDimensions: Dimension;\n\tprivate model: IModel;\n\tprivate inputChangingTimeoutHandle: number;\n\tprivate styles: IQuickOpenStyles;\n\tprivate renderer: Renderer;\n\n\tconstructor(container: HTMLElement, callbacks: IQuickOpenCallbacks, options: IQuickOpenOptions, usageLogger?: IQuickOpenUsageLogger) {\n\t\tthis.isDisposed = false;\n\t\tthis.toUnbind = [];\n\t\tthis.container = container;\n\t\tthis.callbacks = callbacks;\n\t\tthis.options = options;\n\t\tthis.styles = options || Object.create(null);\n\t\tmixin(this.styles, defaultStyles, false);\n\t\tthis.usageLogger = usageLogger;\n\t\tthis.model = null;\n\t}\n\n\tpublic getElement(): Builder {\n\t\treturn $(this.builder);\n\t}\n\n\tpublic getModel(): IModel {\n\t\treturn this.model;\n\t}\n\n\tpublic setCallbacks(callbacks: IQuickOpenCallbacks): void {\n\t\tthis.callbacks = callbacks;\n\t}\n\n\tpublic create(): HTMLElement {\n\t\tthis.builder = $().div((div: Builder) => {\n\n\t\t\t// Eventing\n\t\t\tdiv.on(DOM.EventType.KEY_DOWN, (e: KeyboardEvent) => {\n\t\t\t\tconst keyboardEvent: StandardKeyboardEvent = new StandardKeyboardEvent(e);\n\t\t\t\tif (keyboardEvent.keyCode === KeyCode.Escape) {\n\t\t\t\t\tDOM.EventHelper.stop(e, true);\n\n\t\t\t\t\tthis.hide(HideReason.CANCELED);\n\t\t\t\t}\n\t\t\t})\n\t\t\t\t.on(DOM.EventType.CONTEXT_MENU, (e: Event) => DOM.EventHelper.stop(e, true)) // Do this to fix an issue on Mac where the menu goes into the way\n\t\t\t\t.on(DOM.EventType.FOCUS, (e: Event) => this.gainingFocus(), null, true)\n\t\t\t\t.on(DOM.EventType.BLUR, (e: Event) => this.loosingFocus(e), null, true);\n\n\t\t\t// Progress Bar\n\t\t\tthis.progressBar = new ProgressBar(div.clone(), { progressBarBackground: this.styles.progressBarBackground });\n\t\t\tthis.progressBar.getContainer().hide();\n\n\t\t\t// Input Field\n\t\t\tdiv.div({ 'class': 'quick-open-input' }, (inputContainer) => {\n\t\t\t\tthis.inputContainer = inputContainer;\n\t\t\t\tthis.inputBox = new InputBox(inputContainer.getHTMLElement(), null, {\n\t\t\t\t\tplaceholder: this.options.inputPlaceHolder || '',\n\t\t\t\t\tariaLabel: DEFAULT_INPUT_ARIA_LABEL,\n\t\t\t\t\tinputBackground: this.styles.inputBackground,\n\t\t\t\t\tinputForeground: this.styles.inputForeground,\n\t\t\t\t\tinputBorder: this.styles.inputBorder,\n\t\t\t\t\tinputValidationInfoBackground: this.styles.inputValidationInfoBackground,\n\t\t\t\t\tinputValidationInfoBorder: this.styles.inputValidationInfoBorder,\n\t\t\t\t\tinputValidationWarningBackground: this.styles.inputValidationWarningBackground,\n\t\t\t\t\tinputValidationWarningBorder: this.styles.inputValidationWarningBorder,\n\t\t\t\t\tinputValidationErrorBackground: this.styles.inputValidationErrorBackground,\n\t\t\t\t\tinputValidationErrorBorder: this.styles.inputValidationErrorBorder\n\t\t\t\t});\n\n\t\t\t\t// ARIA\n\t\t\t\tthis.inputElement = this.inputBox.inputElement;\n\t\t\t\tthis.inputElement.setAttribute('role', 'combobox');\n\t\t\t\tthis.inputElement.setAttribute('aria-haspopup', 'false');\n\t\t\t\tthis.inputElement.setAttribute('aria-autocomplete', 'list');\n\n\t\t\t\tDOM.addDisposableListener(this.inputBox.inputElement, DOM.EventType.KEY_DOWN, (e: KeyboardEvent) => {\n\t\t\t\t\tconst keyboardEvent: StandardKeyboardEvent = new StandardKeyboardEvent(e);\n\t\t\t\t\tconst shouldOpenInBackground = this.shouldOpenInBackground(keyboardEvent);\n\n\t\t\t\t\t// Do not handle Tab: It is used to navigate between elements without mouse\n\t\t\t\t\tif (keyboardEvent.keyCode === KeyCode.Tab) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Pass tree navigation keys to the tree but leave focus in input field\n\t\t\t\t\telse if (keyboardEvent.keyCode === KeyCode.DownArrow || keyboardEvent.keyCode === KeyCode.UpArrow || keyboardEvent.keyCode === KeyCode.PageDown || keyboardEvent.keyCode === KeyCode.PageUp) {\n\t\t\t\t\t\tDOM.EventHelper.stop(e, true);\n\n\t\t\t\t\t\tthis.navigateInTree(keyboardEvent.keyCode, keyboardEvent.shiftKey);\n\n\t\t\t\t\t\t// Position cursor at the end of input to allow right arrow (open in background)\n\t\t\t\t\t\t// to function immediately unless the user has made a selection\n\t\t\t\t\t\tif (this.inputBox.inputElement.selectionStart === this.inputBox.inputElement.selectionEnd) {\n\t\t\t\t\t\t\tthis.inputBox.inputElement.selectionStart = this.inputBox.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Select element on Enter or on Arrow-Right if we are at the end of the input\n\t\t\t\t\telse if (keyboardEvent.keyCode === KeyCode.Enter || shouldOpenInBackground) {\n\t\t\t\t\t\tDOM.EventHelper.stop(e, true);\n\n\t\t\t\t\t\tconst focus = this.tree.getFocus();\n\t\t\t\t\t\tif (focus) {\n\t\t\t\t\t\t\tthis.elementSelected(focus, e, shouldOpenInBackground ? Mode.OPEN_IN_BACKGROUND : Mode.OPEN);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tDOM.addDisposableListener(this.inputBox.inputElement, DOM.EventType.INPUT, (e: Event) => {\n\t\t\t\t\tthis.onType();\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// Tree\n\t\t\tthis.treeContainer = div.div({\n\t\t\t\t'class': 'quick-open-tree'\n\t\t\t}, (div: Builder) => {\n\t\t\t\tthis.tree = new Tree(div.getHTMLElement(), {\n\t\t\t\t\tdataSource: new DataSource(this),\n\t\t\t\t\tcontroller: new QuickOpenController({ clickBehavior: ClickBehavior.ON_MOUSE_UP, keyboardSupport: this.options.keyboardSupport }),\n\t\t\t\t\trenderer: (this.renderer = new Renderer(this, this.styles)),\n\t\t\t\t\tfilter: new Filter(this),\n\t\t\t\t\taccessibilityProvider: new AccessibilityProvider(this)\n\t\t\t\t}, {\n\t\t\t\t\t\ttwistiePixels: 11,\n\t\t\t\t\t\tindentPixels: 0,\n\t\t\t\t\t\talwaysFocused: true,\n\t\t\t\t\t\tverticalScrollMode: ScrollbarVisibility.Visible,\n\t\t\t\t\t\tariaLabel: nls.localize('treeAriaLabel', \"Quick Picker\"),\n\t\t\t\t\t\tkeyboardSupport: this.options.keyboardSupport\n\t\t\t\t\t});\n\n\t\t\t\tthis.treeElement = this.tree.getHTMLElement();\n\n\t\t\t\t// Handle Focus and Selection event\n\t\t\t\tthis.toUnbind.push(this.tree.addListener(EventType.FOCUS, (event: IFocusEvent) => {\n\t\t\t\t\tthis.elementFocused(event.focus, event);\n\t\t\t\t}));\n\n\t\t\t\tthis.toUnbind.push(this.tree.addListener(EventType.SELECTION, (event: ISelectionEvent) => {\n\t\t\t\t\tif (event.selection && event.selection.length > 0) {\n\t\t\t\t\t\tthis.elementSelected(event.selection[0], event);\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}).\n\t\t\t\ton(DOM.EventType.KEY_DOWN, (e: KeyboardEvent) => {\n\t\t\t\t\tconst keyboardEvent: StandardKeyboardEvent = new StandardKeyboardEvent(e);\n\n\t\t\t\t\t// Only handle when in quick navigation mode\n\t\t\t\t\tif (!this.quickNavigateConfiguration) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support keyboard navigation in quick navigation mode\n\t\t\t\t\tif (keyboardEvent.keyCode === KeyCode.DownArrow || keyboardEvent.keyCode === KeyCode.UpArrow || keyboardEvent.keyCode === KeyCode.PageDown || keyboardEvent.keyCode === KeyCode.PageUp) {\n\t\t\t\t\t\tDOM.EventHelper.stop(e, true);\n\n\t\t\t\t\t\tthis.navigateInTree(keyboardEvent.keyCode);\n\t\t\t\t\t}\n\t\t\t\t}).\n\t\t\t\ton(DOM.EventType.KEY_UP, (e: KeyboardEvent) => {\n\t\t\t\t\tconst keyboardEvent: StandardKeyboardEvent = new StandardKeyboardEvent(e);\n\t\t\t\t\tconst keyCode = keyboardEvent.keyCode;\n\n\t\t\t\t\t// Only handle when in quick navigation mode\n\t\t\t\t\tif (!this.quickNavigateConfiguration) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Select element when keys are pressed that signal it\n\t\t\t\t\tconst quickNavKeys = this.quickNavigateConfiguration.keybindings;\n\t\t\t\t\tconst wasTriggerKeyPressed = keyCode === KeyCode.Enter || quickNavKeys.some((k) => {\n\t\t\t\t\t\tconst [firstPart, chordPart] = k.getParts();\n\t\t\t\t\t\tif (chordPart) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (firstPart.shiftKey && keyCode === KeyCode.Shift) {\n\t\t\t\t\t\t\tif (keyboardEvent.ctrlKey || keyboardEvent.altKey || keyboardEvent.metaKey) {\n\t\t\t\t\t\t\t\treturn false; // this is an optimistic check for the shift key being used to navigate back in quick open\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (firstPart.altKey && keyCode === KeyCode.Alt) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (firstPart.ctrlKey && keyCode === KeyCode.Ctrl) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (firstPart.metaKey && keyCode === KeyCode.Meta) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\n\t\t\t\t\tif (wasTriggerKeyPressed) {\n\t\t\t\t\t\tconst focus = this.tree.getFocus();\n\t\t\t\t\t\tif (focus) {\n\t\t\t\t\t\t\tthis.elementSelected(focus, e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}).\n\t\t\t\tclone();\n\t\t})\n\n\t\t\t// Widget Attributes\n\t\t\t.addClass('quick-open-widget')\n\t\t\t.build(this.container);\n\n\t\t// Support layout\n\t\tif (this.layoutDimensions) {\n\t\t\tthis.layout(this.layoutDimensions);\n\t\t}\n\n\t\tthis.applyStyles();\n\n\t\treturn this.builder.getHTMLElement();\n\t}\n\n\tpublic style(styles: IQuickOpenStyles): void {\n\t\tthis.styles = styles;\n\n\t\tthis.applyStyles();\n\t}\n\n\tprotected applyStyles(): void {\n\t\tif (this.builder) {\n\t\t\tconst foreground = this.styles.foreground ? this.styles.foreground.toString() : null;\n\t\t\tconst background = this.styles.background ? this.styles.background.toString() : null;\n\t\t\tconst borderColor = this.styles.borderColor ? this.styles.borderColor.toString() : null;\n\t\t\tconst widgetShadow = this.styles.widgetShadow ? this.styles.widgetShadow.toString() : null;\n\n\t\t\tthis.builder.style('color', foreground);\n\t\t\tthis.builder.style('background-color', background);\n\t\t\tthis.builder.style('border-color', borderColor);\n\t\t\tthis.builder.style('border-width', borderColor ? '1px' : null);\n\t\t\tthis.builder.style('border-style', borderColor ? 'solid' : null);\n\t\t\tthis.builder.style('box-shadow', widgetShadow ? `0 5px 8px ${widgetShadow}` : null);\n\t\t}\n\n\t\tif (this.progressBar) {\n\t\t\tthis.progressBar.style({\n\t\t\t\tprogressBarBackground: this.styles.progressBarBackground\n\t\t\t});\n\t\t}\n\n\t\tif (this.inputBox) {\n\t\t\tthis.inputBox.style({\n\t\t\t\tinputBackground: this.styles.inputBackground,\n\t\t\t\tinputForeground: this.styles.inputForeground,\n\t\t\t\tinputBorder: this.styles.inputBorder,\n\t\t\t\tinputValidationInfoBackground: this.styles.inputValidationInfoBackground,\n\t\t\t\tinputValidationInfoBorder: this.styles.inputValidationInfoBorder,\n\t\t\t\tinputValidationWarningBackground: this.styles.inputValidationWarningBackground,\n\t\t\t\tinputValidationWarningBorder: this.styles.inputValidationWarningBorder,\n\t\t\t\tinputValidationErrorBackground: this.styles.inputValidationErrorBackground,\n\t\t\t\tinputValidationErrorBorder: this.styles.inputValidationErrorBorder\n\t\t\t});\n\t\t}\n\n\t\tif (this.tree) {\n\t\t\tthis.tree.style(this.styles);\n\t\t}\n\n\t\tif (this.renderer) {\n\t\t\tthis.renderer.updateStyles(this.styles);\n\t\t}\n\t}\n\n\tprivate shouldOpenInBackground(e: StandardKeyboardEvent): boolean {\n\t\tif (e.keyCode !== KeyCode.RightArrow) {\n\t\t\treturn false; // only for right arrow\n\t\t}\n\n\t\tif (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) {\n\t\t\treturn false; // no modifiers allowed\n\t\t}\n\n\t\t// validate the cursor is at the end of the input, and if not prevent\n\t\t// opening in the background such as the selection can be changed\n\t\treturn this.inputBox.inputElement.selectionEnd === this.inputBox.value.length;\n\t}\n\n\tprivate onType(): void {\n\t\tconst value = this.inputBox.value;\n\n\t\t// Adjust help text as needed if present\n\t\tif (this.helpText) {\n\t\t\tif (value) {\n\t\t\t\tthis.helpText.hide();\n\t\t\t} else {\n\t\t\t\tthis.helpText.show();\n\t\t\t}\n\t\t}\n\n\t\t// Send to callbacks\n\t\tthis.callbacks.onType(value);\n\t}\n\n\tpublic navigate(next: boolean, quickNavigate?: IQuickNavigateConfiguration): void {\n\t\tif (this.isVisible()) {\n\n\t\t\t// Transition into quick navigate mode if not yet done\n\t\t\tif (!this.quickNavigateConfiguration && quickNavigate) {\n\t\t\t\tthis.quickNavigateConfiguration = quickNavigate;\n\t\t\t\tthis.tree.DOMFocus();\n\t\t\t}\n\n\t\t\t// Navigate\n\t\t\tthis.navigateInTree(next ? KeyCode.DownArrow : KeyCode.UpArrow);\n\t\t}\n\t}\n\n\tprivate navigateInTree(keyCode: KeyCode, isShift?: boolean): void {\n\t\tconst model: IModel = this.tree.getInput();\n\t\tconst entries = model ? model.entries : [];\n\t\tconst oldFocus = this.tree.getFocus();\n\n\t\t// Normal Navigation\n\t\tswitch (keyCode) {\n\t\t\tcase KeyCode.DownArrow:\n\t\t\t\tthis.tree.focusNext();\n\t\t\t\tbreak;\n\n\t\t\tcase KeyCode.UpArrow:\n\t\t\t\tthis.tree.focusPrevious();\n\t\t\t\tbreak;\n\n\t\t\tcase KeyCode.PageDown:\n\t\t\t\tthis.tree.focusNextPage();\n\t\t\t\tbreak;\n\n\t\t\tcase KeyCode.PageUp:\n\t\t\t\tthis.tree.focusPreviousPage();\n\t\t\t\tbreak;\n\n\t\t\tcase KeyCode.Tab:\n\t\t\t\tif (isShift) {\n\t\t\t\t\tthis.tree.focusPrevious();\n\t\t\t\t} else {\n\t\t\t\t\tthis.tree.focusNext();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\tlet newFocus = this.tree.getFocus();\n\n\t\t// Support cycle-through navigation if focus did not change\n\t\tif (entries.length > 1 && oldFocus === newFocus) {\n\n\t\t\t// Up from no entry or first entry goes down to last\n\t\t\tif (keyCode === KeyCode.UpArrow || (keyCode === KeyCode.Tab && isShift)) {\n\t\t\t\tthis.tree.focusLast();\n\t\t\t}\n\n\t\t\t// Down from last entry goes to up to first\n\t\t\telse if (keyCode === KeyCode.DownArrow || keyCode === KeyCode.Tab && !isShift) {\n\t\t\t\tthis.tree.focusFirst();\n\t\t\t}\n\t\t}\n\n\t\t// Reveal\n\t\tnewFocus = this.tree.getFocus();\n\t\tif (newFocus) {\n\t\t\tthis.tree.reveal(newFocus).done(null, errors.onUnexpectedError);\n\t\t}\n\t}\n\n\tprivate elementFocused(value: any, event?: any): void {\n\t\tif (!value || !this.isVisible()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// ARIA\n\t\tthis.inputElement.setAttribute('aria-activedescendant', this.treeElement.getAttribute('aria-activedescendant'));\n\n\t\tconst context: IEntryRunContext = { event: event, keymods: this.extractKeyMods(event), quickNavigateConfiguration: this.quickNavigateConfiguration };\n\t\tthis.model.runner.run(value, Mode.PREVIEW, context);\n\t}\n\n\tprivate elementSelected(value: any, event?: any, preferredMode?: Mode): void {\n\t\tlet hide = true;\n\n\t\t// Trigger open of element on selection\n\t\tif (this.isVisible()) {\n\t\t\tlet mode = preferredMode || Mode.OPEN;\n\n\t\t\tconst context: IEntryRunContext = { event, keymods: this.extractKeyMods(event), quickNavigateConfiguration: this.quickNavigateConfiguration };\n\n\t\t\thide = this.model.runner.run(value, mode, context);\n\t\t}\n\n\t\t// add telemetry when an item is accepted, logging the index of the item in the list and the length of the list\n\t\t// to measure the rate of the success and the relevance of the order\n\t\tif (this.usageLogger) {\n\t\t\tconst indexOfAcceptedElement = this.model.entries.indexOf(value);\n\t\t\tconst entriesCount = this.model.entries.length;\n\t\t\tthis.usageLogger.publicLog('quickOpenWidgetItemAccepted', { index: indexOfAcceptedElement, count: entriesCount, isQuickNavigate: this.quickNavigateConfiguration ? true : false });\n\t\t}\n\n\t\t// Hide if command was run successfully\n\t\tif (hide) {\n\t\t\tthis.hide(HideReason.ELEMENT_SELECTED);\n\t\t}\n\t}\n\n\tprivate extractKeyMods(event: any): number[] {\n\t\tconst isCtrlCmd = event && (event.ctrlKey || event.metaKey || (event.payload && event.payload.originalEvent && (event.payload.originalEvent.ctrlKey || event.payload.originalEvent.metaKey)));\n\n\t\treturn isCtrlCmd ? [KeyMod.CtrlCmd] : [];\n\t}\n\n\tpublic show(prefix: string, options?: IShowOptions): void;\n\tpublic show(input: IModel, options?: IShowOptions): void;\n\tpublic show(param: any, options?: IShowOptions): void {\n\t\tthis.visible = true;\n\t\tthis.isLoosingFocus = false;\n\t\tthis.quickNavigateConfiguration = options ? options.quickNavigateConfiguration : void 0;\n\n\t\t// Adjust UI for quick navigate mode\n\t\tif (this.quickNavigateConfiguration) {\n\t\t\tthis.inputContainer.hide();\n\t\t\tthis.builder.show();\n\t\t\tthis.tree.DOMFocus();\n\t\t}\n\n\t\t// Otherwise use normal UI\n\t\telse {\n\t\t\tthis.inputContainer.show();\n\t\t\tthis.builder.show();\n\t\t\tthis.inputBox.focus();\n\t\t}\n\n\t\t// Adjust Help text for IE\n\t\tif (this.helpText) {\n\t\t\tif (this.quickNavigateConfiguration || types.isString(param)) {\n\t\t\t\tthis.helpText.hide();\n\t\t\t} else {\n\t\t\t\tthis.helpText.show();\n\t\t\t}\n\t\t}\n\n\t\t// Show based on param\n\t\tif (types.isString(param)) {\n\t\t\tthis.doShowWithPrefix(param);\n\t\t} else {\n\t\t\tthis.doShowWithInput(param, options && options.autoFocus ? options.autoFocus : {});\n\t\t}\n\n\t\t// Respect selectAll option\n\t\tif (options && options.inputSelection && !this.quickNavigateConfiguration) {\n\t\t\tthis.inputBox.select(options.inputSelection);\n\t\t}\n\n\t\tif (this.callbacks.onShow) {\n\t\t\tthis.callbacks.onShow();\n\t\t}\n\t}\n\n\tprivate doShowWithPrefix(prefix: string): void {\n\t\tthis.inputBox.value = prefix;\n\t\tthis.callbacks.onType(prefix);\n\t}\n\n\tprivate doShowWithInput(input: IModel, autoFocus: IAutoFocus): void {\n\t\tthis.setInput(input, autoFocus);\n\t}\n\n\tprivate setInputAndLayout(input: IModel, autoFocus: IAutoFocus): void {\n\t\tthis.treeContainer.style({ height: `${this.getHeight(input)}px` });\n\n\t\tthis.tree.setInput(null).then(() => {\n\t\t\tthis.model = input;\n\n\t\t\t// ARIA\n\t\t\tthis.inputElement.setAttribute('aria-haspopup', String(input && input.entries && input.entries.length > 0));\n\n\t\t\treturn this.tree.setInput(input);\n\t\t}).done(() => {\n\n\t\t\t// Indicate entries to tree\n\t\t\tthis.tree.layout();\n\n\t\t\t// Handle auto focus\n\t\t\tif (input && input.entries.some(e => this.isElementVisible(input, e))) {\n\t\t\t\tthis.autoFocus(input, autoFocus);\n\t\t\t}\n\t\t}, errors.onUnexpectedError);\n\t}\n\n\tprivate isElementVisible(input: IModel, e: T): boolean {\n\t\tif (!input.filter) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn input.filter.isVisible(e);\n\t}\n\n\tprivate autoFocus(input: IModel, autoFocus: IAutoFocus = {}): void {\n\t\tconst entries = input.entries.filter(e => this.isElementVisible(input, e));\n\n\t\t// First check for auto focus of prefix matches\n\t\tif (autoFocus.autoFocusPrefixMatch) {\n\t\t\tlet caseSensitiveMatch: any;\n\t\t\tlet caseInsensitiveMatch: any;\n\t\t\tconst prefix = autoFocus.autoFocusPrefixMatch;\n\t\t\tconst lowerCasePrefix = prefix.toLowerCase();\n\t\t\tfor (let i = 0; i < entries.length; i++) {\n\t\t\t\tconst entry = entries[i];\n\t\t\t\tconst label = input.dataSource.getLabel(entry);\n\n\t\t\t\tif (!caseSensitiveMatch && label.indexOf(prefix) === 0) {\n\t\t\t\t\tcaseSensitiveMatch = entry;\n\t\t\t\t} else if (!caseInsensitiveMatch && label.toLowerCase().indexOf(lowerCasePrefix) === 0) {\n\t\t\t\t\tcaseInsensitiveMatch = entry;\n\t\t\t\t}\n\n\t\t\t\tif (caseSensitiveMatch && caseInsensitiveMatch) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst entryToFocus = caseSensitiveMatch || caseInsensitiveMatch;\n\t\t\tif (entryToFocus) {\n\t\t\t\tthis.tree.setFocus(entryToFocus);\n\t\t\t\tthis.tree.reveal(entryToFocus, 0.5).done(null, errors.onUnexpectedError);\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Second check for auto focus of first entry\n\t\tif (autoFocus.autoFocusFirstEntry) {\n\t\t\tthis.tree.focusFirst();\n\t\t\tthis.tree.reveal(this.tree.getFocus()).done(null, errors.onUnexpectedError);\n\t\t}\n\n\t\t// Third check for specific index option\n\t\telse if (typeof autoFocus.autoFocusIndex === 'number') {\n\t\t\tif (entries.length > autoFocus.autoFocusIndex) {\n\t\t\t\tthis.tree.focusNth(autoFocus.autoFocusIndex);\n\t\t\t\tthis.tree.reveal(this.tree.getFocus()).done(null, errors.onUnexpectedError);\n\t\t\t}\n\t\t}\n\n\t\t// Check for auto focus of second entry\n\t\telse if (autoFocus.autoFocusSecondEntry) {\n\t\t\tif (entries.length > 1) {\n\t\t\t\tthis.tree.focusNth(1);\n\t\t\t}\n\t\t}\n\n\t\t// Finally check for auto focus of last entry\n\t\telse if (autoFocus.autoFocusLastEntry) {\n\t\t\tif (entries.length > 1) {\n\t\t\t\tthis.tree.focusLast();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic refresh(input: IModel, autoFocus: IAutoFocus): void {\n\t\tif (!this.isVisible()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Apply height & Refresh\n\t\tthis.treeContainer.style({ height: `${this.getHeight(input)}px` });\n\t\tthis.tree.refresh().done(() => {\n\n\t\t\t// Indicate entries to tree\n\t\t\tthis.tree.layout();\n\n\t\t\t// Handle auto focus\n\t\t\tlet doAutoFocus = autoFocus && input && input.entries.some(e => this.isElementVisible(input, e));\n\t\t\tif (doAutoFocus) {\n\t\t\t\tthis.autoFocus(input, autoFocus);\n\t\t\t}\n\t\t}, errors.onUnexpectedError);\n\t}\n\n\tprivate getHeight(input: IModel): number {\n\t\tconst renderer = input.renderer;\n\n\t\tif (!input) {\n\t\t\tconst itemHeight = renderer.getHeight(null);\n\n\t\t\treturn this.options.minItemsToShow ? this.options.minItemsToShow * itemHeight : 0;\n\t\t}\n\n\t\tlet height = 0;\n\n\t\tlet preferredItemsHeight: number;\n\t\tif (this.layoutDimensions && this.layoutDimensions.height) {\n\t\t\tpreferredItemsHeight = (this.layoutDimensions.height - 50 /* subtract height of input field (30px) and some spacing (drop shadow) to fit */) * 0.40 /* max 40% of screen */;\n\t\t}\n\n\t\tif (!preferredItemsHeight || preferredItemsHeight > QuickOpenWidget.MAX_ITEMS_HEIGHT) {\n\t\t\tpreferredItemsHeight = QuickOpenWidget.MAX_ITEMS_HEIGHT;\n\t\t}\n\n\t\tconst entries = input.entries.filter(e => this.isElementVisible(input, e));\n\t\tconst maxEntries = this.options.maxItemsToShow || entries.length;\n\t\tfor (let i = 0; i < maxEntries && i < entries.length; i++) {\n\t\t\tconst entryHeight = renderer.getHeight(entries[i]);\n\t\t\tif (height + entryHeight <= preferredItemsHeight) {\n\t\t\t\theight += entryHeight;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn height;\n\t}\n\n\tpublic hide(reason?: HideReason): void {\n\t\tif (!this.isVisible()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.visible = false;\n\t\tthis.builder.hide();\n\t\tthis.builder.domBlur();\n\n\t\t// report failure cases\n\t\tif (reason === HideReason.CANCELED) {\n\t\t\tif (this.model) {\n\t\t\t\tconst entriesCount = this.model.entries.filter(e => this.isElementVisible(this.model, e)).length;\n\t\t\t\tif (this.usageLogger) {\n\t\t\t\t\tthis.usageLogger.publicLog('quickOpenWidgetCancelled', { count: entriesCount, isQuickNavigate: this.quickNavigateConfiguration ? true : false });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Clear input field and clear tree\n\t\tthis.inputBox.value = '';\n\t\tthis.tree.setInput(null);\n\n\t\t// ARIA\n\t\tthis.inputElement.setAttribute('aria-haspopup', 'false');\n\n\t\t// Reset Tree Height\n\t\tthis.treeContainer.style({ height: (this.options.minItemsToShow ? this.options.minItemsToShow * 22 : 0) + 'px' });\n\n\t\t// Clear any running Progress\n\t\tthis.progressBar.stop().getContainer().hide();\n\n\t\t// Clear Focus\n\t\tif (this.tree.isDOMFocused()) {\n\t\t\tthis.tree.DOMBlur();\n\t\t} else if (this.inputBox.hasFocus()) {\n\t\t\tthis.inputBox.blur();\n\t\t}\n\n\t\t// Callbacks\n\t\tif (reason === HideReason.ELEMENT_SELECTED) {\n\t\t\tthis.callbacks.onOk();\n\t\t} else {\n\t\t\tthis.callbacks.onCancel();\n\t\t}\n\n\t\tif (this.callbacks.onHide) {\n\t\t\tthis.callbacks.onHide(reason);\n\t\t}\n\t}\n\n\tpublic getQuickNavigateConfiguration(): IQuickNavigateConfiguration {\n\t\treturn this.quickNavigateConfiguration;\n\t}\n\n\tpublic setPlaceHolder(placeHolder: string): void {\n\t\tif (this.inputBox) {\n\t\t\tthis.inputBox.setPlaceHolder(placeHolder);\n\t\t}\n\t}\n\n\tpublic setValue(value: string, selection?: [number, number]): void {\n\t\tif (this.inputBox) {\n\t\t\tthis.inputBox.value = value;\n\t\t\tif (Array.isArray(selection)) {\n\t\t\t\tconst [start, end] = selection;\n\t\t\t\tthis.inputBox.select({ start, end });\n\t\t\t} else {\n\t\t\t\tthis.inputBox.select();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic setPassword(isPassword: boolean): void {\n\t\tif (this.inputBox) {\n\t\t\tthis.inputBox.inputElement.type = isPassword ? 'password' : 'text';\n\t\t}\n\t}\n\n\tpublic setInput(input: IModel, autoFocus: IAutoFocus, ariaLabel?: string): void {\n\t\tif (!this.isVisible()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If the input changes, indicate this to the tree\n\t\tif (!!this.getInput()) {\n\t\t\tthis.onInputChanging();\n\t\t}\n\n\t\t// Adapt tree height to entries and apply input\n\t\tthis.setInputAndLayout(input, autoFocus);\n\n\t\t// Apply ARIA\n\t\tif (this.inputBox) {\n\t\t\tthis.inputBox.setAriaLabel(ariaLabel || DEFAULT_INPUT_ARIA_LABEL);\n\t\t}\n\t}\n\n\tprivate onInputChanging(): void {\n\t\tif (this.inputChangingTimeoutHandle) {\n\t\t\tclearTimeout(this.inputChangingTimeoutHandle);\n\t\t\tthis.inputChangingTimeoutHandle = null;\n\t\t}\n\n\t\t// when the input is changing in quick open, we indicate this as CSS class to the widget\n\t\t// for a certain timeout. this helps reducing some hectic UI updates when input changes quickly\n\t\tthis.builder.addClass('content-changing');\n\t\tthis.inputChangingTimeoutHandle = setTimeout(() => {\n\t\t\tthis.builder.removeClass('content-changing');\n\t\t}, 500);\n\t}\n\n\tpublic getInput(): IModel {\n\t\treturn this.tree.getInput();\n\t}\n\n\tpublic getTree(): ITree {\n\t\treturn this.tree;\n\t}\n\n\tpublic showInputDecoration(decoration: Severity): void {\n\t\tif (this.inputBox) {\n\t\t\tthis.inputBox.showMessage({ type: decoration === Severity.Info ? MessageType.INFO : decoration === Severity.Warning ? MessageType.WARNING : MessageType.ERROR, content: '' });\n\t\t}\n\t}\n\n\tpublic clearInputDecoration(): void {\n\t\tif (this.inputBox) {\n\t\t\tthis.inputBox.hideMessage();\n\t\t}\n\t}\n\n\tpublic focus(): void {\n\t\tif (this.isVisible() && this.inputBox) {\n\t\t\tthis.inputBox.focus();\n\t\t}\n\t}\n\n\tpublic accept(): void {\n\t\tif (this.isVisible()) {\n\t\t\tconst focus = this.tree.getFocus();\n\t\t\tif (focus) {\n\t\t\t\tthis.elementSelected(focus);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic getProgressBar(): ProgressBar {\n\t\treturn this.progressBar;\n\t}\n\n\tpublic getInputBox(): InputBox {\n\t\treturn this.inputBox;\n\t}\n\n\tpublic setExtraClass(clazz: string): void {\n\t\tconst previousClass = this.builder.getProperty('extra-class');\n\t\tif (previousClass) {\n\t\t\tthis.builder.removeClass(previousClass);\n\t\t}\n\n\t\tif (clazz) {\n\t\t\tthis.builder.addClass(clazz);\n\t\t\tthis.builder.setProperty('extra-class', clazz);\n\t\t} else if (previousClass) {\n\t\t\tthis.builder.removeProperty('extra-class');\n\t\t}\n\t}\n\n\tpublic isVisible(): boolean {\n\t\treturn this.visible;\n\t}\n\n\tpublic layout(dimension: Dimension): void {\n\t\tthis.layoutDimensions = dimension;\n\n\t\t// Apply to quick open width (height is dynamic by number of items to show)\n\t\tconst quickOpenWidth = Math.min(this.layoutDimensions.width * 0.62 /* golden cut */, QuickOpenWidget.MAX_WIDTH);\n\t\tif (this.builder) {\n\n\t\t\t// quick open\n\t\t\tthis.builder.style({\n\t\t\t\twidth: quickOpenWidth + 'px',\n\t\t\t\tmarginLeft: '-' + (quickOpenWidth / 2) + 'px'\n\t\t\t});\n\n\t\t\t// input field\n\t\t\tthis.inputContainer.style({\n\t\t\t\twidth: (quickOpenWidth - 12) + 'px'\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate gainingFocus(): void {\n\t\tthis.isLoosingFocus = false;\n\t}\n\n\tprivate loosingFocus(e: Event): void {\n\t\tif (!this.isVisible()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst relatedTarget = (e).relatedTarget;\n\t\tif (!this.quickNavigateConfiguration && DOM.isAncestor(relatedTarget, this.builder.getHTMLElement())) {\n\t\t\treturn; // user clicked somewhere into quick open widget, do not close thereby\n\t\t}\n\n\t\tthis.isLoosingFocus = true;\n\t\tTPromise.timeout(0).then(() => {\n\t\t\tif (!this.isLoosingFocus) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.isDisposed) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst veto = this.callbacks.onFocusLost && this.callbacks.onFocusLost();\n\t\t\tif (!veto) {\n\t\t\t\tthis.hide(HideReason.FOCUS_LOST);\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.isDisposed = true;\n\t\tthis.toUnbind = dispose(this.toUnbind);\n\n\t\tthis.progressBar.dispose();\n\t\tthis.inputBox.dispose();\n\t\tthis.tree.dispose();\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport * as platform from 'vs/base/common/platform';\nimport { ScrollbarVisibility } from 'vs/base/common/scrollable';\nimport { FontInfo } from 'vs/editor/common/config/fontInfo';\nimport { Constants } from 'vs/editor/common/core/uint';\nimport { USUAL_WORD_SEPARATORS } from 'vs/editor/common/model/wordHelper';\n\n/**\n * Configuration options for editor scrollbars\n */\nexport interface IEditorScrollbarOptions {\n\t/**\n\t * The size of arrows (if displayed).\n\t * Defaults to 11.\n\t */\n\tarrowSize?: number;\n\t/**\n\t * Render vertical scrollbar.\n\t * Accepted values: 'auto', 'visible', 'hidden'.\n\t * Defaults to 'auto'.\n\t */\n\tvertical?: string;\n\t/**\n\t * Render horizontal scrollbar.\n\t * Accepted values: 'auto', 'visible', 'hidden'.\n\t * Defaults to 'auto'.\n\t */\n\thorizontal?: string;\n\t/**\n\t * Cast horizontal and vertical shadows when the content is scrolled.\n\t * Defaults to true.\n\t */\n\tuseShadows?: boolean;\n\t/**\n\t * Render arrows at the top and bottom of the vertical scrollbar.\n\t * Defaults to false.\n\t */\n\tverticalHasArrows?: boolean;\n\t/**\n\t * Render arrows at the left and right of the horizontal scrollbar.\n\t * Defaults to false.\n\t */\n\thorizontalHasArrows?: boolean;\n\t/**\n\t * Listen to mouse wheel events and react to them by scrolling.\n\t * Defaults to true.\n\t */\n\thandleMouseWheel?: boolean;\n\t/**\n\t * Height in pixels for the horizontal scrollbar.\n\t * Defaults to 10 (px).\n\t */\n\thorizontalScrollbarSize?: number;\n\t/**\n\t * Width in pixels for the vertical scrollbar.\n\t * Defaults to 10 (px).\n\t */\n\tverticalScrollbarSize?: number;\n\t/**\n\t * Width in pixels for the vertical slider.\n\t * Defaults to `verticalScrollbarSize`.\n\t */\n\tverticalSliderSize?: number;\n\t/**\n\t * Height in pixels for the horizontal slider.\n\t * Defaults to `horizontalScrollbarSize`.\n\t */\n\thorizontalSliderSize?: number;\n}\n\n/**\n * Configuration options for editor find widget\n */\nexport interface IEditorFindOptions {\n\t/**\n\t * Controls if we seed search string in the Find Widget with editor selection.\n\t */\n\tseedSearchStringFromSelection?: boolean;\n\t/**\n\t * Controls if Find in Selection flag is turned on when multiple lines of text are selected in the editor.\n\t */\n\tautoFindInSelection: boolean;\n}\n\n/**\n * Configuration options for editor minimap\n */\nexport interface IEditorMinimapOptions {\n\t/**\n\t * Enable the rendering of the minimap.\n\t * Defaults to false.\n\t */\n\tenabled?: boolean;\n\t/**\n\t * Control the rendering of the minimap slider.\n\t * Defaults to 'mouseover'.\n\t */\n\tshowSlider?: 'always' | 'mouseover';\n\t/**\n\t * Render the actual text on a line (as opposed to color blocks).\n\t * Defaults to true.\n\t */\n\trenderCharacters?: boolean;\n\t/**\n\t * Limit the width of the minimap to render at most a certain number of columns.\n\t * Defaults to 120.\n\t */\n\tmaxColumn?: number;\n}\n\n/**\n * Configuration options for the editor.\n */\nexport interface IEditorOptions {\n\t/**\n\t * This editor is used inside a diff editor.\n\t * @internal\n\t */\n\tinDiffEditor?: boolean;\n\t/**\n\t * The aria label for the editor's textarea (when it is focused).\n\t */\n\tariaLabel?: string;\n\t/**\n\t * Render vertical lines at the specified columns.\n\t * Defaults to empty array.\n\t */\n\trulers?: number[];\n\t/**\n\t * A string containing the word separators used when doing word navigation.\n\t * Defaults to `~!@#$%^&*()-=+[{]}\\\\|;:\\'\",.<>/?\n\t */\n\twordSeparators?: string;\n\t/**\n\t * Enable Linux primary clipboard.\n\t * Defaults to true.\n\t */\n\tselectionClipboard?: boolean;\n\t/**\n\t * Control the rendering of line numbers.\n\t * If it is a function, it will be invoked when rendering a line number and the return value will be rendered.\n\t * Otherwise, if it is a truey, line numbers will be rendered normally (equivalent of using an identity function).\n\t * Otherwise, line numbers will not be rendered.\n\t * Defaults to true.\n\t */\n\tlineNumbers?: 'on' | 'off' | 'relative' | ((lineNumber: number) => string);\n\t/**\n\t * Should the corresponding line be selected when clicking on the line number?\n\t * Defaults to true.\n\t */\n\tselectOnLineNumbers?: boolean;\n\t/**\n\t * Control the width of line numbers, by reserving horizontal space for rendering at least an amount of digits.\n\t * Defaults to 5.\n\t */\n\tlineNumbersMinChars?: number;\n\t/**\n\t * Enable the rendering of the glyph margin.\n\t * Defaults to true in vscode and to false in monaco-editor.\n\t */\n\tglyphMargin?: boolean;\n\t/**\n\t * The width reserved for line decorations (in px).\n\t * Line decorations are placed between line numbers and the editor content.\n\t * You can pass in a string in the format floating point followed by \"ch\". e.g. 1.3ch.\n\t * Defaults to 10.\n\t */\n\tlineDecorationsWidth?: number | string;\n\t/**\n\t * When revealing the cursor, a virtual padding (px) is added to the cursor, turning it into a rectangle.\n\t * This virtual padding ensures that the cursor gets revealed before hitting the edge of the viewport.\n\t * Defaults to 30 (px).\n\t */\n\trevealHorizontalRightPadding?: number;\n\t/**\n\t * Render the editor selection with rounded borders.\n\t * Defaults to true.\n\t */\n\troundedSelection?: boolean;\n\t/**\n\t * Class name to be added to the editor.\n\t */\n\textraEditorClassName?: string;\n\t/**\n\t * Should the editor be read only.\n\t * Defaults to false.\n\t */\n\treadOnly?: boolean;\n\t/**\n\t * Control the behavior and rendering of the scrollbars.\n\t */\n\tscrollbar?: IEditorScrollbarOptions;\n\t/**\n\t * Control the behavior and rendering of the minimap.\n\t */\n\tminimap?: IEditorMinimapOptions;\n\t/**\n\t * Control the behavior of the find widget.\n\t */\n\tfind?: IEditorFindOptions;\n\t/**\n\t * Display overflow widgets as `fixed`.\n\t * Defaults to `false`.\n\t */\n\tfixedOverflowWidgets?: boolean;\n\t/**\n\t * The number of vertical lanes the overview ruler should render.\n\t * Defaults to 2.\n\t */\n\toverviewRulerLanes?: number;\n\t/**\n\t * Controls if a border should be drawn around the overview ruler.\n\t * Defaults to `true`.\n\t */\n\toverviewRulerBorder?: boolean;\n\t/**\n\t * Control the cursor animation style, possible values are 'blink', 'smooth', 'phase', 'expand' and 'solid'.\n\t * Defaults to 'blink'.\n\t */\n\tcursorBlinking?: string;\n\t/**\n\t * Zoom the font in the editor when using the mouse wheel in combination with holding Ctrl.\n\t * Defaults to false.\n\t */\n\tmouseWheelZoom?: boolean;\n\t/**\n\t * Control the mouse pointer style, either 'text' or 'default' or 'copy'\n\t * Defaults to 'text'\n\t * @internal\n\t */\n\tmouseStyle?: 'text' | 'default' | 'copy';\n\t/**\n\t * Control the cursor style, either 'block' or 'line'.\n\t * Defaults to 'line'.\n\t */\n\tcursorStyle?: string;\n\t/**\n\t * Enable font ligatures.\n\t * Defaults to false.\n\t */\n\tfontLigatures?: boolean;\n\t/**\n\t * Disable the use of `will-change` for the editor margin and lines layers.\n\t * The usage of `will-change` acts as a hint for browsers to create an extra layer.\n\t * Defaults to false.\n\t */\n\tdisableLayerHinting?: boolean;\n\t/**\n\t * Disable the optimizations for monospace fonts.\n\t * Defaults to false.\n\t */\n\tdisableMonospaceOptimizations?: boolean;\n\t/**\n\t * Should the cursor be hidden in the overview ruler.\n\t * Defaults to false.\n\t */\n\thideCursorInOverviewRuler?: boolean;\n\t/**\n\t * Enable that scrolling can go one screen size after the last line.\n\t * Defaults to true.\n\t */\n\tscrollBeyondLastLine?: boolean;\n\t/**\n\t * Enable that the editor will install an interval to check if its container dom node size has changed.\n\t * Enabling this might have a severe performance impact.\n\t * Defaults to false.\n\t */\n\tautomaticLayout?: boolean;\n\t/**\n\t * Control the wrapping of the editor.\n\t * When `wordWrap` = \"off\", the lines will never wrap.\n\t * When `wordWrap` = \"on\", the lines will wrap at the viewport width.\n\t * When `wordWrap` = \"wordWrapColumn\", the lines will wrap at `wordWrapColumn`.\n\t * When `wordWrap` = \"bounded\", the lines will wrap at min(viewport width, wordWrapColumn).\n\t * Defaults to \"off\".\n\t */\n\twordWrap?: 'off' | 'on' | 'wordWrapColumn' | 'bounded';\n\t/**\n\t * Control the wrapping of the editor.\n\t * When `wordWrap` = \"off\", the lines will never wrap.\n\t * When `wordWrap` = \"on\", the lines will wrap at the viewport width.\n\t * When `wordWrap` = \"wordWrapColumn\", the lines will wrap at `wordWrapColumn`.\n\t * When `wordWrap` = \"bounded\", the lines will wrap at min(viewport width, wordWrapColumn).\n\t * Defaults to 80.\n\t */\n\twordWrapColumn?: number;\n\t/**\n\t * Force word wrapping when the text appears to be of a minified/generated file.\n\t * Defaults to true.\n\t */\n\twordWrapMinified?: boolean;\n\t/**\n\t * Control indentation of wrapped lines. Can be: 'none', 'same' or 'indent'.\n\t * Defaults to 'same' in vscode and to 'none' in monaco-editor.\n\t */\n\twrappingIndent?: string;\n\t/**\n\t * Configure word wrapping characters. A break will be introduced before these characters.\n\t * Defaults to '{([+'.\n\t */\n\twordWrapBreakBeforeCharacters?: string;\n\t/**\n\t * Configure word wrapping characters. A break will be introduced after these characters.\n\t * Defaults to ' \\t})]?|&,;'.\n\t */\n\twordWrapBreakAfterCharacters?: string;\n\t/**\n\t * Configure word wrapping characters. A break will be introduced after these characters only if no `wordWrapBreakBeforeCharacters` or `wordWrapBreakAfterCharacters` were found.\n\t * Defaults to '.'.\n\t */\n\twordWrapBreakObtrusiveCharacters?: string;\n\n\t/**\n\t * Performance guard: Stop rendering a line after x characters.\n\t * Defaults to 10000.\n\t * Use -1 to never stop rendering\n\t */\n\tstopRenderingLineAfter?: number;\n\t/**\n\t * Enable hover.\n\t * Defaults to true.\n\t */\n\thover?: boolean;\n\t/**\n\t * Enable detecting links and making them clickable.\n\t * Defaults to true.\n\t */\n\tlinks?: boolean;\n\t/**\n\t * Enable custom contextmenu.\n\t * Defaults to true.\n\t */\n\tcontextmenu?: boolean;\n\t/**\n\t * A multiplier to be used on the `deltaX` and `deltaY` of mouse wheel scroll events.\n\t * Defaults to 1.\n\t */\n\tmouseWheelScrollSensitivity?: number;\n\t/**\n\t * The modifier to be used to add multiple cursors with the mouse.\n\t * Defaults to 'alt'\n\t */\n\tmultiCursorModifier?: 'ctrlCmd' | 'alt';\n\t/**\n\t * Configure the editor's accessibility support.\n\t * Defaults to 'auto'. It is best to leave this to 'auto'.\n\t */\n\taccessibilitySupport?: 'auto' | 'off' | 'on';\n\t/**\n\t * Enable quick suggestions (shadow suggestions)\n\t * Defaults to true.\n\t */\n\tquickSuggestions?: boolean | { other: boolean, comments: boolean, strings: boolean };\n\t/**\n\t * Quick suggestions show delay (in ms)\n\t * Defaults to 500 (ms)\n\t */\n\tquickSuggestionsDelay?: number;\n\t/**\n\t * Enables parameter hints\n\t */\n\tparameterHints?: boolean;\n\t/**\n\t * Render icons in suggestions box.\n\t * Defaults to true.\n\t */\n\ticonsInSuggestions?: boolean;\n\t/**\n\t * Enable auto closing brackets.\n\t * Defaults to true.\n\t */\n\tautoClosingBrackets?: boolean;\n\t/**\n\t * Enable auto indentation adjustment.\n\t * Defaults to false.\n\t */\n\tautoIndent?: boolean;\n\t/**\n\t * Enable format on type.\n\t * Defaults to false.\n\t */\n\tformatOnType?: boolean;\n\t/**\n\t * Enable format on paste.\n\t * Defaults to false.\n\t */\n\tformatOnPaste?: boolean;\n\t/**\n\t * Controls if the editor should allow to move selections via drag and drop.\n\t * Defaults to false.\n\t */\n\tdragAndDrop?: boolean;\n\t/**\n\t * Enable the suggestion box to pop-up on trigger characters.\n\t * Defaults to true.\n\t */\n\tsuggestOnTriggerCharacters?: boolean;\n\t/**\n\t * Accept suggestions on ENTER.\n\t * Defaults to 'on'.\n\t */\n\tacceptSuggestionOnEnter?: 'on' | 'smart' | 'off';\n\t/**\n\t * Accept suggestions on provider defined characters.\n\t * Defaults to true.\n\t */\n\tacceptSuggestionOnCommitCharacter?: boolean;\n\t/**\n\t * Enable snippet suggestions. Default to 'true'.\n\t */\n\tsnippetSuggestions?: 'top' | 'bottom' | 'inline' | 'none';\n\t/**\n\t * Copying without a selection copies the current line.\n\t */\n\temptySelectionClipboard?: boolean;\n\t/**\n\t * Enable word based suggestions. Defaults to 'true'\n\t */\n\twordBasedSuggestions?: boolean;\n\t/**\n\t * The font size for the suggest widget.\n\t * Defaults to the editor font size.\n\t */\n\tsuggestFontSize?: number;\n\t/**\n\t * The line height for the suggest widget.\n\t * Defaults to the editor line height.\n\t */\n\tsuggestLineHeight?: number;\n\t/**\n\t * Enable selection highlight.\n\t * Defaults to true.\n\t */\n\tselectionHighlight?: boolean;\n\t/**\n\t * Enable semantic occurrences highlight.\n\t * Defaults to true.\n\t */\n\toccurrencesHighlight?: boolean;\n\t/**\n\t * Show code lens\n\t * Defaults to true.\n\t */\n\tcodeLens?: boolean;\n\t/**\n\t * @deprecated - use codeLens instead\n\t * @internal\n\t */\n\treferenceInfos?: boolean;\n\t/**\n\t * Enable code folding\n\t * Defaults to true in vscode and to false in monaco-editor.\n\t */\n\tfolding?: boolean;\n\t/**\n\t * Controls whether the fold actions in the gutter stay always visible or hide unless the mouse is over the gutter.\n\t * Defaults to 'mouseover'.\n\t */\n\tshowFoldingControls?: 'always' | 'mouseover';\n\t/**\n\t * Enable highlighting of matching brackets.\n\t * Defaults to true.\n\t */\n\tmatchBrackets?: boolean;\n\t/**\n\t * Enable rendering of whitespace.\n\t * Defaults to none.\n\t */\n\trenderWhitespace?: 'none' | 'boundary' | 'all';\n\t/**\n\t * Enable rendering of control characters.\n\t * Defaults to false.\n\t */\n\trenderControlCharacters?: boolean;\n\t/**\n\t * Enable rendering of indent guides.\n\t * Defaults to false.\n\t */\n\trenderIndentGuides?: boolean;\n\t/**\n\t * Enable rendering of current line highlight.\n\t * Defaults to all.\n\t */\n\trenderLineHighlight?: 'none' | 'gutter' | 'line' | 'all';\n\t/**\n\t * Inserting and deleting whitespace follows tab stops.\n\t */\n\tuseTabStops?: boolean;\n\t/**\n\t * The font family\n\t */\n\tfontFamily?: string;\n\t/**\n\t * The font weight\n\t */\n\tfontWeight?: 'normal' | 'bold' | 'bolder' | 'lighter' | 'initial' | 'inherit' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900';\n\t/**\n\t * The font size\n\t */\n\tfontSize?: number;\n\t/**\n\t * The line height\n\t */\n\tlineHeight?: number;\n\t/**\n\t * The letter spacing\n\t */\n\tletterSpacing?: number;\n}\n\n/**\n * Configuration options for the diff editor.\n */\nexport interface IDiffEditorOptions extends IEditorOptions {\n\t/**\n\t * Allow the user to resize the diff editor split view.\n\t * Defaults to true.\n\t */\n\tenableSplitViewResizing?: boolean;\n\t/**\n\t * Render the differences in two side-by-side editors.\n\t * Defaults to true.\n\t */\n\trenderSideBySide?: boolean;\n\t/**\n\t * Compute the diff by ignoring leading/trailing whitespace\n\t * Defaults to true.\n\t */\n\tignoreTrimWhitespace?: boolean;\n\t/**\n\t * Render +/- indicators for added/deleted changes.\n\t * Defaults to true.\n\t */\n\trenderIndicators?: boolean;\n\t/**\n\t * Original model should be editable?\n\t * Defaults to false.\n\t */\n\toriginalEditable?: boolean;\n}\n\nexport enum RenderMinimap {\n\tNone = 0,\n\tSmall = 1,\n\tLarge = 2,\n\tSmallBlocks = 3,\n\tLargeBlocks = 4,\n}\n\n/**\n * Describes how to indent wrapped lines.\n */\nexport enum WrappingIndent {\n\t/**\n\t * No indentation => wrapped lines begin at column 1.\n\t */\n\tNone = 0,\n\t/**\n\t * Same => wrapped lines get the same indentation as the parent.\n\t */\n\tSame = 1,\n\t/**\n\t * Indent => wrapped lines get +1 indentation as the parent.\n\t */\n\tIndent = 2\n}\n\n/**\n * The kind of animation in which the editor's cursor should be rendered.\n */\nexport enum TextEditorCursorBlinkingStyle {\n\t/**\n\t * Hidden\n\t */\n\tHidden = 0,\n\t/**\n\t * Blinking\n\t */\n\tBlink = 1,\n\t/**\n\t * Blinking with smooth fading\n\t */\n\tSmooth = 2,\n\t/**\n\t * Blinking with prolonged filled state and smooth fading\n\t */\n\tPhase = 3,\n\t/**\n\t * Expand collapse animation on the y axis\n\t */\n\tExpand = 4,\n\t/**\n\t * No-Blinking\n\t */\n\tSolid = 5\n}\n/**\n * @internal\n */\nexport function blinkingStyleToString(blinkingStyle: TextEditorCursorBlinkingStyle): string {\n\tif (blinkingStyle === TextEditorCursorBlinkingStyle.Blink) {\n\t\treturn 'blink';\n\t} else if (blinkingStyle === TextEditorCursorBlinkingStyle.Expand) {\n\t\treturn 'expand';\n\t} else if (blinkingStyle === TextEditorCursorBlinkingStyle.Phase) {\n\t\treturn 'phase';\n\t} else if (blinkingStyle === TextEditorCursorBlinkingStyle.Smooth) {\n\t\treturn 'smooth';\n\t} else if (blinkingStyle === TextEditorCursorBlinkingStyle.Solid) {\n\t\treturn 'solid';\n\t} else {\n\t\tthrow new Error('blinkingStyleToString: Unknown blinkingStyle');\n\t}\n}\n\n/**\n * The style in which the editor's cursor should be rendered.\n */\nexport enum TextEditorCursorStyle {\n\t/**\n\t * As a vertical line (sitting between two characters).\n\t */\n\tLine = 1,\n\t/**\n\t * As a block (sitting on top of a character).\n\t */\n\tBlock = 2,\n\t/**\n\t * As a horizontal line (sitting under a character).\n\t */\n\tUnderline = 3,\n\t/**\n\t * As a thin vertical line (sitting between two characters).\n\t */\n\tLineThin = 4,\n\t/**\n\t * As an outlined block (sitting on top of a character).\n\t */\n\tBlockOutline = 5,\n\t/**\n\t * As a thin horizontal line (sitting under a character).\n\t */\n\tUnderlineThin = 6\n}\n\n/**\n * @internal\n */\nexport function cursorStyleToString(cursorStyle: TextEditorCursorStyle): string {\n\tif (cursorStyle === TextEditorCursorStyle.Line) {\n\t\treturn 'line';\n\t} else if (cursorStyle === TextEditorCursorStyle.Block) {\n\t\treturn 'block';\n\t} else if (cursorStyle === TextEditorCursorStyle.Underline) {\n\t\treturn 'underline';\n\t} else if (cursorStyle === TextEditorCursorStyle.LineThin) {\n\t\treturn 'line-thin';\n\t} else if (cursorStyle === TextEditorCursorStyle.BlockOutline) {\n\t\treturn 'block-outline';\n\t} else if (cursorStyle === TextEditorCursorStyle.UnderlineThin) {\n\t\treturn 'underline-thin';\n\t} else {\n\t\tthrow new Error('cursorStyleToString: Unknown cursorStyle');\n\t}\n}\n\nfunction _cursorStyleFromString(cursorStyle: string, defaultValue: TextEditorCursorStyle): TextEditorCursorStyle {\n\tif (typeof cursorStyle !== 'string') {\n\t\treturn defaultValue;\n\t}\n\tif (cursorStyle === 'line') {\n\t\treturn TextEditorCursorStyle.Line;\n\t} else if (cursorStyle === 'block') {\n\t\treturn TextEditorCursorStyle.Block;\n\t} else if (cursorStyle === 'underline') {\n\t\treturn TextEditorCursorStyle.Underline;\n\t} else if (cursorStyle === 'line-thin') {\n\t\treturn TextEditorCursorStyle.LineThin;\n\t} else if (cursorStyle === 'block-outline') {\n\t\treturn TextEditorCursorStyle.BlockOutline;\n\t} else if (cursorStyle === 'underline-thin') {\n\t\treturn TextEditorCursorStyle.UnderlineThin;\n\t}\n\treturn TextEditorCursorStyle.Line;\n}\n\nexport interface InternalEditorScrollbarOptions {\n\treadonly arrowSize: number;\n\treadonly vertical: ScrollbarVisibility;\n\treadonly horizontal: ScrollbarVisibility;\n\treadonly useShadows: boolean;\n\treadonly verticalHasArrows: boolean;\n\treadonly horizontalHasArrows: boolean;\n\treadonly handleMouseWheel: boolean;\n\treadonly horizontalScrollbarSize: number;\n\treadonly horizontalSliderSize: number;\n\treadonly verticalScrollbarSize: number;\n\treadonly verticalSliderSize: number;\n\treadonly mouseWheelScrollSensitivity: number;\n}\n\nexport interface InternalEditorMinimapOptions {\n\treadonly enabled: boolean;\n\treadonly showSlider: 'always' | 'mouseover';\n\treadonly renderCharacters: boolean;\n\treadonly maxColumn: number;\n}\n\nexport interface InternalEditorFindOptions {\n\treadonly seedSearchStringFromSelection: boolean;\n\treadonly autoFindInSelection: boolean;\n}\n\nexport interface EditorWrappingInfo {\n\treadonly inDiffEditor: boolean;\n\treadonly isDominatedByLongLines: boolean;\n\treadonly isWordWrapMinified: boolean;\n\treadonly isViewportWrapping: boolean;\n\treadonly wrappingColumn: number;\n\treadonly wrappingIndent: WrappingIndent;\n\treadonly wordWrapBreakBeforeCharacters: string;\n\treadonly wordWrapBreakAfterCharacters: string;\n\treadonly wordWrapBreakObtrusiveCharacters: string;\n}\n\nexport interface InternalEditorViewOptions {\n\treadonly extraEditorClassName: string;\n\treadonly disableMonospaceOptimizations: boolean;\n\treadonly rulers: number[];\n\treadonly ariaLabel: string;\n\treadonly renderLineNumbers: boolean;\n\treadonly renderCustomLineNumbers: (lineNumber: number) => string;\n\treadonly renderRelativeLineNumbers: boolean;\n\treadonly selectOnLineNumbers: boolean;\n\treadonly glyphMargin: boolean;\n\treadonly revealHorizontalRightPadding: number;\n\treadonly roundedSelection: boolean;\n\treadonly overviewRulerLanes: number;\n\treadonly overviewRulerBorder: boolean;\n\treadonly cursorBlinking: TextEditorCursorBlinkingStyle;\n\treadonly mouseWheelZoom: boolean;\n\treadonly cursorStyle: TextEditorCursorStyle;\n\treadonly hideCursorInOverviewRuler: boolean;\n\treadonly scrollBeyondLastLine: boolean;\n\treadonly stopRenderingLineAfter: number;\n\treadonly renderWhitespace: 'none' | 'boundary' | 'all';\n\treadonly renderControlCharacters: boolean;\n\treadonly fontLigatures: boolean;\n\treadonly renderIndentGuides: boolean;\n\treadonly renderLineHighlight: 'none' | 'gutter' | 'line' | 'all';\n\treadonly scrollbar: InternalEditorScrollbarOptions;\n\treadonly minimap: InternalEditorMinimapOptions;\n\treadonly fixedOverflowWidgets: boolean;\n}\n\nexport interface EditorContribOptions {\n\treadonly selectionClipboard: boolean;\n\treadonly hover: boolean;\n\treadonly links: boolean;\n\treadonly contextmenu: boolean;\n\treadonly quickSuggestions: boolean | { other: boolean, comments: boolean, strings: boolean };\n\treadonly quickSuggestionsDelay: number;\n\treadonly parameterHints: boolean;\n\treadonly iconsInSuggestions: boolean;\n\treadonly formatOnType: boolean;\n\treadonly formatOnPaste: boolean;\n\treadonly suggestOnTriggerCharacters: boolean;\n\treadonly acceptSuggestionOnEnter: 'on' | 'smart' | 'off';\n\treadonly acceptSuggestionOnCommitCharacter: boolean;\n\treadonly snippetSuggestions: 'top' | 'bottom' | 'inline' | 'none';\n\treadonly wordBasedSuggestions: boolean;\n\treadonly suggestFontSize: number;\n\treadonly suggestLineHeight: number;\n\treadonly selectionHighlight: boolean;\n\treadonly occurrencesHighlight: boolean;\n\treadonly codeLens: boolean;\n\treadonly folding: boolean;\n\treadonly showFoldingControls: 'always' | 'mouseover';\n\treadonly matchBrackets: boolean;\n\treadonly find: InternalEditorFindOptions;\n}\n\n/**\n * Validated configuration options for the editor.\n * This is a 1 to 1 validated/parsed version of IEditorOptions merged on top of the defaults.\n * @internal\n */\nexport interface IValidatedEditorOptions {\n\treadonly inDiffEditor: boolean;\n\treadonly wordSeparators: string;\n\treadonly lineNumbersMinChars: number;\n\treadonly lineDecorationsWidth: number | string;\n\treadonly readOnly: boolean;\n\treadonly mouseStyle: 'text' | 'default' | 'copy';\n\treadonly disableLayerHinting: boolean;\n\treadonly automaticLayout: boolean;\n\treadonly wordWrap: 'off' | 'on' | 'wordWrapColumn' | 'bounded';\n\treadonly wordWrapColumn: number;\n\treadonly wordWrapMinified: boolean;\n\treadonly wrappingIndent: WrappingIndent;\n\treadonly wordWrapBreakBeforeCharacters: string;\n\treadonly wordWrapBreakAfterCharacters: string;\n\treadonly wordWrapBreakObtrusiveCharacters: string;\n\treadonly autoClosingBrackets: boolean;\n\treadonly autoIndent: boolean;\n\treadonly dragAndDrop: boolean;\n\treadonly emptySelectionClipboard: boolean;\n\treadonly useTabStops: boolean;\n\treadonly multiCursorModifier: 'altKey' | 'ctrlKey' | 'metaKey';\n\treadonly accessibilitySupport: 'auto' | 'off' | 'on';\n\n\treadonly viewInfo: InternalEditorViewOptions;\n\treadonly contribInfo: EditorContribOptions;\n}\n\n/**\n * Internal configuration options (transformed or computed) for the editor.\n */\nexport class InternalEditorOptions {\n\treadonly _internalEditorOptionsBrand: void;\n\n\treadonly canUseLayerHinting: boolean;\n\treadonly pixelRatio: number;\n\treadonly editorClassName: string;\n\treadonly lineHeight: number;\n\treadonly readOnly: boolean;\n\t/**\n\t * @internal\n\t */\n\treadonly accessibilitySupport: platform.AccessibilitySupport;\n\treadonly multiCursorModifier: 'altKey' | 'ctrlKey' | 'metaKey';\n\n\t// ---- cursor options\n\treadonly wordSeparators: string;\n\treadonly autoClosingBrackets: boolean;\n\treadonly autoIndent: boolean;\n\treadonly useTabStops: boolean;\n\treadonly tabFocusMode: boolean;\n\treadonly dragAndDrop: boolean;\n\treadonly emptySelectionClipboard: boolean;\n\n\t// ---- grouped options\n\treadonly layoutInfo: EditorLayoutInfo;\n\treadonly fontInfo: FontInfo;\n\treadonly viewInfo: InternalEditorViewOptions;\n\treadonly wrappingInfo: EditorWrappingInfo;\n\treadonly contribInfo: EditorContribOptions;\n\n\t/**\n\t * @internal\n\t */\n\tconstructor(source: {\n\t\tcanUseLayerHinting: boolean;\n\t\tpixelRatio: number;\n\t\teditorClassName: string;\n\t\tlineHeight: number;\n\t\treadOnly: boolean;\n\t\taccessibilitySupport: platform.AccessibilitySupport;\n\t\tmultiCursorModifier: 'altKey' | 'ctrlKey' | 'metaKey';\n\t\twordSeparators: string;\n\t\tautoClosingBrackets: boolean;\n\t\tautoIndent: boolean;\n\t\tuseTabStops: boolean;\n\t\ttabFocusMode: boolean;\n\t\tdragAndDrop: boolean;\n\t\temptySelectionClipboard: boolean;\n\t\tlayoutInfo: EditorLayoutInfo;\n\t\tfontInfo: FontInfo;\n\t\tviewInfo: InternalEditorViewOptions;\n\t\twrappingInfo: EditorWrappingInfo;\n\t\tcontribInfo: EditorContribOptions;\n\t}) {\n\t\tthis.canUseLayerHinting = source.canUseLayerHinting;\n\t\tthis.pixelRatio = source.pixelRatio;\n\t\tthis.editorClassName = source.editorClassName;\n\t\tthis.lineHeight = source.lineHeight | 0;\n\t\tthis.readOnly = source.readOnly;\n\t\tthis.accessibilitySupport = source.accessibilitySupport;\n\t\tthis.multiCursorModifier = source.multiCursorModifier;\n\t\tthis.wordSeparators = source.wordSeparators;\n\t\tthis.autoClosingBrackets = source.autoClosingBrackets;\n\t\tthis.autoIndent = source.autoIndent;\n\t\tthis.useTabStops = source.useTabStops;\n\t\tthis.tabFocusMode = source.tabFocusMode;\n\t\tthis.dragAndDrop = source.dragAndDrop;\n\t\tthis.emptySelectionClipboard = source.emptySelectionClipboard;\n\t\tthis.layoutInfo = source.layoutInfo;\n\t\tthis.fontInfo = source.fontInfo;\n\t\tthis.viewInfo = source.viewInfo;\n\t\tthis.wrappingInfo = source.wrappingInfo;\n\t\tthis.contribInfo = source.contribInfo;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic equals(other: InternalEditorOptions): boolean {\n\t\treturn (\n\t\t\tthis.canUseLayerHinting === other.canUseLayerHinting\n\t\t\t&& this.pixelRatio === other.pixelRatio\n\t\t\t&& this.editorClassName === other.editorClassName\n\t\t\t&& this.lineHeight === other.lineHeight\n\t\t\t&& this.readOnly === other.readOnly\n\t\t\t&& this.accessibilitySupport === other.accessibilitySupport\n\t\t\t&& this.multiCursorModifier === other.multiCursorModifier\n\t\t\t&& this.wordSeparators === other.wordSeparators\n\t\t\t&& this.autoClosingBrackets === other.autoClosingBrackets\n\t\t\t&& this.autoIndent === other.autoIndent\n\t\t\t&& this.useTabStops === other.useTabStops\n\t\t\t&& this.tabFocusMode === other.tabFocusMode\n\t\t\t&& this.dragAndDrop === other.dragAndDrop\n\t\t\t&& this.emptySelectionClipboard === other.emptySelectionClipboard\n\t\t\t&& InternalEditorOptions._equalsLayoutInfo(this.layoutInfo, other.layoutInfo)\n\t\t\t&& this.fontInfo.equals(other.fontInfo)\n\t\t\t&& InternalEditorOptions._equalsViewOptions(this.viewInfo, other.viewInfo)\n\t\t\t&& InternalEditorOptions._equalsWrappingInfo(this.wrappingInfo, other.wrappingInfo)\n\t\t\t&& InternalEditorOptions._equalsContribOptions(this.contribInfo, other.contribInfo)\n\t\t);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic createChangeEvent(newOpts: InternalEditorOptions): IConfigurationChangedEvent {\n\t\treturn {\n\t\t\tcanUseLayerHinting: (this.canUseLayerHinting !== newOpts.canUseLayerHinting),\n\t\t\tpixelRatio: (this.pixelRatio !== newOpts.pixelRatio),\n\t\t\teditorClassName: (this.editorClassName !== newOpts.editorClassName),\n\t\t\tlineHeight: (this.lineHeight !== newOpts.lineHeight),\n\t\t\treadOnly: (this.readOnly !== newOpts.readOnly),\n\t\t\taccessibilitySupport: (this.accessibilitySupport !== newOpts.accessibilitySupport),\n\t\t\tmultiCursorModifier: (this.multiCursorModifier !== newOpts.multiCursorModifier),\n\t\t\twordSeparators: (this.wordSeparators !== newOpts.wordSeparators),\n\t\t\tautoClosingBrackets: (this.autoClosingBrackets !== newOpts.autoClosingBrackets),\n\t\t\tautoIndent: (this.autoIndent !== newOpts.autoIndent),\n\t\t\tuseTabStops: (this.useTabStops !== newOpts.useTabStops),\n\t\t\ttabFocusMode: (this.tabFocusMode !== newOpts.tabFocusMode),\n\t\t\tdragAndDrop: (this.dragAndDrop !== newOpts.dragAndDrop),\n\t\t\temptySelectionClipboard: (this.emptySelectionClipboard !== newOpts.emptySelectionClipboard),\n\t\t\tlayoutInfo: (!InternalEditorOptions._equalsLayoutInfo(this.layoutInfo, newOpts.layoutInfo)),\n\t\t\tfontInfo: (!this.fontInfo.equals(newOpts.fontInfo)),\n\t\t\tviewInfo: (!InternalEditorOptions._equalsViewOptions(this.viewInfo, newOpts.viewInfo)),\n\t\t\twrappingInfo: (!InternalEditorOptions._equalsWrappingInfo(this.wrappingInfo, newOpts.wrappingInfo)),\n\t\t\tcontribInfo: (!InternalEditorOptions._equalsContribOptions(this.contribInfo, newOpts.contribInfo))\n\t\t};\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate static _equalsLayoutInfo(a: EditorLayoutInfo, b: EditorLayoutInfo): boolean {\n\t\treturn (\n\t\t\ta.width === b.width\n\t\t\t&& a.height === b.height\n\t\t\t&& a.glyphMarginLeft === b.glyphMarginLeft\n\t\t\t&& a.glyphMarginWidth === b.glyphMarginWidth\n\t\t\t&& a.glyphMarginHeight === b.glyphMarginHeight\n\t\t\t&& a.lineNumbersLeft === b.lineNumbersLeft\n\t\t\t&& a.lineNumbersWidth === b.lineNumbersWidth\n\t\t\t&& a.lineNumbersHeight === b.lineNumbersHeight\n\t\t\t&& a.decorationsLeft === b.decorationsLeft\n\t\t\t&& a.decorationsWidth === b.decorationsWidth\n\t\t\t&& a.decorationsHeight === b.decorationsHeight\n\t\t\t&& a.contentLeft === b.contentLeft\n\t\t\t&& a.contentWidth === b.contentWidth\n\t\t\t&& a.contentHeight === b.contentHeight\n\t\t\t&& a.renderMinimap === b.renderMinimap\n\t\t\t&& a.minimapWidth === b.minimapWidth\n\t\t\t&& a.viewportColumn === b.viewportColumn\n\t\t\t&& a.verticalScrollbarWidth === b.verticalScrollbarWidth\n\t\t\t&& a.horizontalScrollbarHeight === b.horizontalScrollbarHeight\n\t\t\t&& this._equalsOverviewRuler(a.overviewRuler, b.overviewRuler)\n\t\t);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate static _equalsOverviewRuler(a: OverviewRulerPosition, b: OverviewRulerPosition): boolean {\n\t\treturn (\n\t\t\ta.width === b.width\n\t\t\t&& a.height === b.height\n\t\t\t&& a.top === b.top\n\t\t\t&& a.right === b.right\n\t\t);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate static _equalsViewOptions(a: InternalEditorViewOptions, b: InternalEditorViewOptions): boolean {\n\t\treturn (\n\t\t\ta.extraEditorClassName === b.extraEditorClassName\n\t\t\t&& a.disableMonospaceOptimizations === b.disableMonospaceOptimizations\n\t\t\t&& this._equalsNumberArrays(a.rulers, b.rulers)\n\t\t\t&& a.ariaLabel === b.ariaLabel\n\t\t\t&& a.renderLineNumbers === b.renderLineNumbers\n\t\t\t&& a.renderCustomLineNumbers === b.renderCustomLineNumbers\n\t\t\t&& a.renderRelativeLineNumbers === b.renderRelativeLineNumbers\n\t\t\t&& a.selectOnLineNumbers === b.selectOnLineNumbers\n\t\t\t&& a.glyphMargin === b.glyphMargin\n\t\t\t&& a.revealHorizontalRightPadding === b.revealHorizontalRightPadding\n\t\t\t&& a.roundedSelection === b.roundedSelection\n\t\t\t&& a.overviewRulerLanes === b.overviewRulerLanes\n\t\t\t&& a.overviewRulerBorder === b.overviewRulerBorder\n\t\t\t&& a.cursorBlinking === b.cursorBlinking\n\t\t\t&& a.mouseWheelZoom === b.mouseWheelZoom\n\t\t\t&& a.cursorStyle === b.cursorStyle\n\t\t\t&& a.hideCursorInOverviewRuler === b.hideCursorInOverviewRuler\n\t\t\t&& a.scrollBeyondLastLine === b.scrollBeyondLastLine\n\t\t\t&& a.stopRenderingLineAfter === b.stopRenderingLineAfter\n\t\t\t&& a.renderWhitespace === b.renderWhitespace\n\t\t\t&& a.renderControlCharacters === b.renderControlCharacters\n\t\t\t&& a.fontLigatures === b.fontLigatures\n\t\t\t&& a.renderIndentGuides === b.renderIndentGuides\n\t\t\t&& a.renderLineHighlight === b.renderLineHighlight\n\t\t\t&& this._equalsScrollbarOptions(a.scrollbar, b.scrollbar)\n\t\t\t&& this._equalsMinimapOptions(a.minimap, b.minimap)\n\t\t\t&& a.fixedOverflowWidgets === b.fixedOverflowWidgets\n\t\t);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate static _equalsScrollbarOptions(a: InternalEditorScrollbarOptions, b: InternalEditorScrollbarOptions): boolean {\n\t\treturn (\n\t\t\ta.arrowSize === b.arrowSize\n\t\t\t&& a.vertical === b.vertical\n\t\t\t&& a.horizontal === b.horizontal\n\t\t\t&& a.useShadows === b.useShadows\n\t\t\t&& a.verticalHasArrows === b.verticalHasArrows\n\t\t\t&& a.horizontalHasArrows === b.horizontalHasArrows\n\t\t\t&& a.handleMouseWheel === b.handleMouseWheel\n\t\t\t&& a.horizontalScrollbarSize === b.horizontalScrollbarSize\n\t\t\t&& a.horizontalSliderSize === b.horizontalSliderSize\n\t\t\t&& a.verticalScrollbarSize === b.verticalScrollbarSize\n\t\t\t&& a.verticalSliderSize === b.verticalSliderSize\n\t\t\t&& a.mouseWheelScrollSensitivity === b.mouseWheelScrollSensitivity\n\t\t);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate static _equalsMinimapOptions(a: InternalEditorMinimapOptions, b: InternalEditorMinimapOptions): boolean {\n\t\treturn (\n\t\t\ta.enabled === b.enabled\n\t\t\t&& a.showSlider === b.showSlider\n\t\t\t&& a.renderCharacters === b.renderCharacters\n\t\t\t&& a.maxColumn === b.maxColumn\n\t\t);\n\t}\n\n\tprivate static _equalsNumberArrays(a: number[], b: number[]): boolean {\n\t\tif (a.length !== b.length) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (let i = 0; i < a.length; i++) {\n\t\t\tif (a[i] !== b[i]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\n\tprivate static _equalFindOptions(a: InternalEditorFindOptions, b: InternalEditorFindOptions): boolean {\n\t\treturn (\n\t\t\ta.seedSearchStringFromSelection === b.seedSearchStringFromSelection\n\t\t\t&& a.autoFindInSelection === b.autoFindInSelection\n\t\t);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate static _equalsWrappingInfo(a: EditorWrappingInfo, b: EditorWrappingInfo): boolean {\n\t\treturn (\n\t\t\ta.inDiffEditor === b.inDiffEditor\n\t\t\t&& a.isDominatedByLongLines === b.isDominatedByLongLines\n\t\t\t&& a.isWordWrapMinified === b.isWordWrapMinified\n\t\t\t&& a.isViewportWrapping === b.isViewportWrapping\n\t\t\t&& a.wrappingColumn === b.wrappingColumn\n\t\t\t&& a.wrappingIndent === b.wrappingIndent\n\t\t\t&& a.wordWrapBreakBeforeCharacters === b.wordWrapBreakBeforeCharacters\n\t\t\t&& a.wordWrapBreakAfterCharacters === b.wordWrapBreakAfterCharacters\n\t\t\t&& a.wordWrapBreakObtrusiveCharacters === b.wordWrapBreakObtrusiveCharacters\n\t\t);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate static _equalsContribOptions(a: EditorContribOptions, b: EditorContribOptions): boolean {\n\t\treturn (\n\t\t\ta.selectionClipboard === b.selectionClipboard\n\t\t\t&& a.hover === b.hover\n\t\t\t&& a.links === b.links\n\t\t\t&& a.contextmenu === b.contextmenu\n\t\t\t&& InternalEditorOptions._equalsQuickSuggestions(a.quickSuggestions, b.quickSuggestions)\n\t\t\t&& a.quickSuggestionsDelay === b.quickSuggestionsDelay\n\t\t\t&& a.parameterHints === b.parameterHints\n\t\t\t&& a.iconsInSuggestions === b.iconsInSuggestions\n\t\t\t&& a.formatOnType === b.formatOnType\n\t\t\t&& a.formatOnPaste === b.formatOnPaste\n\t\t\t&& a.suggestOnTriggerCharacters === b.suggestOnTriggerCharacters\n\t\t\t&& a.acceptSuggestionOnEnter === b.acceptSuggestionOnEnter\n\t\t\t&& a.acceptSuggestionOnCommitCharacter === b.acceptSuggestionOnCommitCharacter\n\t\t\t&& a.snippetSuggestions === b.snippetSuggestions\n\t\t\t&& a.wordBasedSuggestions === b.wordBasedSuggestions\n\t\t\t&& a.suggestFontSize === b.suggestFontSize\n\t\t\t&& a.suggestLineHeight === b.suggestLineHeight\n\t\t\t&& a.selectionHighlight === b.selectionHighlight\n\t\t\t&& a.occurrencesHighlight === b.occurrencesHighlight\n\t\t\t&& a.codeLens === b.codeLens\n\t\t\t&& a.folding === b.folding\n\t\t\t&& a.showFoldingControls === b.showFoldingControls\n\t\t\t&& a.matchBrackets === b.matchBrackets\n\t\t\t&& this._equalFindOptions(a.find, b.find)\n\t\t);\n\t}\n\n\tprivate static _equalsQuickSuggestions(a: boolean | { other: boolean, comments: boolean, strings: boolean }, b: boolean | { other: boolean, comments: boolean, strings: boolean }): boolean {\n\t\tif (typeof a === 'boolean') {\n\t\t\tif (typeof b !== 'boolean') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn a === b;\n\t\t}\n\t\tif (typeof b === 'boolean') {\n\t\t\treturn false;\n\t\t}\n\t\treturn (\n\t\t\ta.comments === b.comments\n\t\t\t&& a.other === b.other\n\t\t\t&& a.strings === b.strings\n\t\t);\n\t}\n}\n\n/**\n * A description for the overview ruler position.\n */\nexport interface OverviewRulerPosition {\n\t/**\n\t * Width of the overview ruler\n\t */\n\treadonly width: number;\n\t/**\n\t * Height of the overview ruler\n\t */\n\treadonly height: number;\n\t/**\n\t * Top position for the overview ruler\n\t */\n\treadonly top: number;\n\t/**\n\t * Right position for the overview ruler\n\t */\n\treadonly right: number;\n}\n\n/**\n * The internal layout details of the editor.\n */\nexport interface EditorLayoutInfo {\n\n\t/**\n\t * Full editor width.\n\t */\n\treadonly width: number;\n\t/**\n\t * Full editor height.\n\t */\n\treadonly height: number;\n\n\t/**\n\t * Left position for the glyph margin.\n\t */\n\treadonly glyphMarginLeft: number;\n\t/**\n\t * The width of the glyph margin.\n\t */\n\treadonly glyphMarginWidth: number;\n\t/**\n\t * The height of the glyph margin.\n\t */\n\treadonly glyphMarginHeight: number;\n\n\t/**\n\t * Left position for the line numbers.\n\t */\n\treadonly lineNumbersLeft: number;\n\t/**\n\t * The width of the line numbers.\n\t */\n\treadonly lineNumbersWidth: number;\n\t/**\n\t * The height of the line numbers.\n\t */\n\treadonly lineNumbersHeight: number;\n\n\t/**\n\t * Left position for the line decorations.\n\t */\n\treadonly decorationsLeft: number;\n\t/**\n\t * The width of the line decorations.\n\t */\n\treadonly decorationsWidth: number;\n\t/**\n\t * The height of the line decorations.\n\t */\n\treadonly decorationsHeight: number;\n\n\t/**\n\t * Left position for the content (actual text)\n\t */\n\treadonly contentLeft: number;\n\t/**\n\t * The width of the content (actual text)\n\t */\n\treadonly contentWidth: number;\n\t/**\n\t * The height of the content (actual height)\n\t */\n\treadonly contentHeight: number;\n\n\t/**\n\t * The width of the minimap\n\t */\n\treadonly minimapWidth: number;\n\n\t/**\n\t * Minimap render type\n\t */\n\treadonly renderMinimap: RenderMinimap;\n\n\t/**\n\t * The number of columns (of typical characters) fitting on a viewport line.\n\t */\n\treadonly viewportColumn: number;\n\n\t/**\n\t * The width of the vertical scrollbar.\n\t */\n\treadonly verticalScrollbarWidth: number;\n\t/**\n\t * The height of the horizontal scrollbar.\n\t */\n\treadonly horizontalScrollbarHeight: number;\n\n\t/**\n\t * The position of the overview ruler.\n\t */\n\treadonly overviewRuler: OverviewRulerPosition;\n}\n\n/**\n * An event describing that the configuration of the editor has changed.\n */\nexport interface IConfigurationChangedEvent {\n\treadonly canUseLayerHinting: boolean;\n\treadonly pixelRatio: boolean;\n\treadonly editorClassName: boolean;\n\treadonly lineHeight: boolean;\n\treadonly readOnly: boolean;\n\treadonly accessibilitySupport: boolean;\n\treadonly multiCursorModifier: boolean;\n\treadonly wordSeparators: boolean;\n\treadonly autoClosingBrackets: boolean;\n\treadonly autoIndent: boolean;\n\treadonly useTabStops: boolean;\n\treadonly tabFocusMode: boolean;\n\treadonly dragAndDrop: boolean;\n\treadonly emptySelectionClipboard: boolean;\n\treadonly layoutInfo: boolean;\n\treadonly fontInfo: boolean;\n\treadonly viewInfo: boolean;\n\treadonly wrappingInfo: boolean;\n\treadonly contribInfo: boolean;\n}\n\n/**\n * @internal\n */\nexport interface IEnvironmentalOptions {\n\treadonly outerWidth: number;\n\treadonly outerHeight: number;\n\treadonly fontInfo: FontInfo;\n\treadonly extraEditorClassName: string;\n\treadonly isDominatedByLongLines: boolean;\n\treadonly lineNumbersDigitCount: number;\n\treadonly emptySelectionClipboard: boolean;\n\treadonly pixelRatio: number;\n\treadonly tabFocusMode: boolean;\n\treadonly accessibilitySupport: platform.AccessibilitySupport;\n}\n\nfunction _boolean(value: any, defaultValue: T): boolean | T {\n\tif (typeof value === 'undefined') {\n\t\treturn defaultValue;\n\t}\n\tif (value === 'false') {\n\t\t// treat the string 'false' as false\n\t\treturn false;\n\t}\n\treturn Boolean(value);\n}\n\nfunction _string(value: any, defaultValue: string): string {\n\tif (typeof value !== 'string') {\n\t\treturn defaultValue;\n\t}\n\treturn value;\n}\n\nfunction _stringSet(value: any, defaultValue: T, allowedValues: string[]): T {\n\tif (typeof value !== 'string') {\n\t\treturn defaultValue;\n\t}\n\tif (allowedValues.indexOf(value) === -1) {\n\t\treturn defaultValue;\n\t}\n\treturn value;\n}\n\nfunction _clampedInt(value: any, defaultValue: number, minimum: number, maximum: number): number {\n\tlet r: number;\n\tif (typeof value === 'undefined') {\n\t\tr = defaultValue;\n\t} else {\n\t\tr = parseInt(value, 10);\n\t\tif (isNaN(r)) {\n\t\t\tr = defaultValue;\n\t\t}\n\t}\n\tr = Math.max(minimum, r);\n\tr = Math.min(maximum, r);\n\treturn r | 0;\n}\n\nfunction _float(value: any, defaultValue: number): number {\n\tlet r = parseFloat(value);\n\tif (isNaN(r)) {\n\t\tr = defaultValue;\n\t}\n\treturn r;\n}\n\nfunction _wrappingIndentFromString(wrappingIndent: string, defaultValue: WrappingIndent): WrappingIndent {\n\tif (typeof wrappingIndent !== 'string') {\n\t\treturn defaultValue;\n\t}\n\tif (wrappingIndent === 'indent') {\n\t\treturn WrappingIndent.Indent;\n\t} else if (wrappingIndent === 'same') {\n\t\treturn WrappingIndent.Same;\n\t} else {\n\t\treturn WrappingIndent.None;\n\t}\n}\n\nfunction _cursorBlinkingStyleFromString(cursorBlinkingStyle: string, defaultValue: TextEditorCursorBlinkingStyle): TextEditorCursorBlinkingStyle {\n\tif (typeof cursorBlinkingStyle !== 'string') {\n\t\treturn defaultValue;\n\t}\n\tswitch (cursorBlinkingStyle) {\n\t\tcase 'blink':\n\t\t\treturn TextEditorCursorBlinkingStyle.Blink;\n\t\tcase 'smooth':\n\t\t\treturn TextEditorCursorBlinkingStyle.Smooth;\n\t\tcase 'phase':\n\t\t\treturn TextEditorCursorBlinkingStyle.Phase;\n\t\tcase 'expand':\n\t\t\treturn TextEditorCursorBlinkingStyle.Expand;\n\t\tcase 'visible': // maintain compatibility\n\t\tcase 'solid':\n\t\t\treturn TextEditorCursorBlinkingStyle.Solid;\n\t}\n\treturn TextEditorCursorBlinkingStyle.Blink;\n}\n\nfunction _scrollbarVisibilityFromString(visibility: string, defaultValue: ScrollbarVisibility): ScrollbarVisibility {\n\tif (typeof visibility !== 'string') {\n\t\treturn defaultValue;\n\t}\n\tswitch (visibility) {\n\t\tcase 'hidden':\n\t\t\treturn ScrollbarVisibility.Hidden;\n\t\tcase 'visible':\n\t\t\treturn ScrollbarVisibility.Visible;\n\t\tdefault:\n\t\t\treturn ScrollbarVisibility.Auto;\n\t}\n}\n\n/**\n * @internal\n */\nexport class EditorOptionsValidator {\n\n\t/**\n\t * Validate raw editor options.\n\t * i.e. since they can be defined by the user, they might be invalid.\n\t */\n\tpublic static validate(opts: IEditorOptions, defaults: IValidatedEditorOptions): IValidatedEditorOptions {\n\t\tlet wordWrap = opts.wordWrap;\n\t\t{\n\t\t\t// Compatibility with old true or false values\n\t\t\tif (wordWrap === true) {\n\t\t\t\twordWrap = 'on';\n\t\t\t} else if (wordWrap === false) {\n\t\t\t\twordWrap = 'off';\n\t\t\t}\n\n\t\t\twordWrap = _stringSet<'off' | 'on' | 'wordWrapColumn' | 'bounded'>(wordWrap, defaults.wordWrap, ['off', 'on', 'wordWrapColumn', 'bounded']);\n\t\t}\n\n\t\tconst viewInfo = this._sanitizeViewInfo(opts, defaults.viewInfo);\n\t\tconst contribInfo = this._sanitizeContribInfo(opts, defaults.contribInfo);\n\n\t\tlet configuredMulticursorModifier: 'altKey' | 'metaKey' | 'ctrlKey';\n\t\tif (typeof opts.multiCursorModifier === 'string') {\n\t\t\tif (opts.multiCursorModifier === 'ctrlCmd') {\n\t\t\t\tconfiguredMulticursorModifier = platform.isMacintosh ? 'metaKey' : 'ctrlKey';\n\t\t\t} else {\n\t\t\t\tconfiguredMulticursorModifier = 'altKey';\n\t\t\t}\n\t\t}\n\t\tconst multiCursorModifier = _stringSet<'altKey' | 'metaKey' | 'ctrlKey'>(configuredMulticursorModifier, defaults.multiCursorModifier, ['altKey', 'metaKey', 'ctrlKey']);\n\n\t\treturn {\n\t\t\tinDiffEditor: _boolean(opts.inDiffEditor, defaults.inDiffEditor),\n\t\t\twordSeparators: _string(opts.wordSeparators, defaults.wordSeparators),\n\t\t\tlineNumbersMinChars: _clampedInt(opts.lineNumbersMinChars, defaults.lineNumbersMinChars, 1, 10),\n\t\t\tlineDecorationsWidth: (typeof opts.lineDecorationsWidth === 'undefined' ? defaults.lineDecorationsWidth : opts.lineDecorationsWidth),\n\t\t\treadOnly: _boolean(opts.readOnly, defaults.readOnly),\n\t\t\tmouseStyle: _stringSet<'text' | 'default' | 'copy'>(opts.mouseStyle, defaults.mouseStyle, ['text', 'default', 'copy']),\n\t\t\tdisableLayerHinting: _boolean(opts.disableLayerHinting, defaults.disableLayerHinting),\n\t\t\tautomaticLayout: _boolean(opts.automaticLayout, defaults.automaticLayout),\n\t\t\twordWrap: wordWrap,\n\t\t\twordWrapColumn: _clampedInt(opts.wordWrapColumn, defaults.wordWrapColumn, 1, Constants.MAX_SAFE_SMALL_INTEGER),\n\t\t\twordWrapMinified: _boolean(opts.wordWrapMinified, defaults.wordWrapMinified),\n\t\t\twrappingIndent: _wrappingIndentFromString(opts.wrappingIndent, defaults.wrappingIndent),\n\t\t\twordWrapBreakBeforeCharacters: _string(opts.wordWrapBreakBeforeCharacters, defaults.wordWrapBreakBeforeCharacters),\n\t\t\twordWrapBreakAfterCharacters: _string(opts.wordWrapBreakAfterCharacters, defaults.wordWrapBreakAfterCharacters),\n\t\t\twordWrapBreakObtrusiveCharacters: _string(opts.wordWrapBreakObtrusiveCharacters, defaults.wordWrapBreakObtrusiveCharacters),\n\t\t\tautoClosingBrackets: _boolean(opts.autoClosingBrackets, defaults.autoClosingBrackets),\n\t\t\tautoIndent: _boolean(opts.autoIndent, defaults.autoIndent),\n\t\t\tdragAndDrop: _boolean(opts.dragAndDrop, defaults.dragAndDrop),\n\t\t\temptySelectionClipboard: _boolean(opts.emptySelectionClipboard, defaults.emptySelectionClipboard),\n\t\t\tuseTabStops: _boolean(opts.useTabStops, defaults.useTabStops),\n\t\t\tmultiCursorModifier: multiCursorModifier,\n\t\t\taccessibilitySupport: _stringSet<'auto' | 'on' | 'off'>(opts.accessibilitySupport, defaults.accessibilitySupport, ['auto', 'on', 'off']),\n\t\t\tviewInfo: viewInfo,\n\t\t\tcontribInfo: contribInfo,\n\t\t};\n\t}\n\n\tprivate static _sanitizeScrollbarOpts(opts: IEditorScrollbarOptions, defaults: InternalEditorScrollbarOptions, mouseWheelScrollSensitivity: number): InternalEditorScrollbarOptions {\n\t\tif (typeof opts !== 'object') {\n\t\t\treturn defaults;\n\t\t}\n\t\tconst horizontalScrollbarSize = _clampedInt(opts.horizontalScrollbarSize, defaults.horizontalScrollbarSize, 0, 1000);\n\t\tconst verticalScrollbarSize = _clampedInt(opts.verticalScrollbarSize, defaults.verticalScrollbarSize, 0, 1000);\n\t\treturn {\n\t\t\tvertical: _scrollbarVisibilityFromString(opts.vertical, defaults.vertical),\n\t\t\thorizontal: _scrollbarVisibilityFromString(opts.horizontal, defaults.horizontal),\n\n\t\t\tarrowSize: _clampedInt(opts.arrowSize, defaults.arrowSize, 0, 1000),\n\t\t\tuseShadows: _boolean(opts.useShadows, defaults.useShadows),\n\n\t\t\tverticalHasArrows: _boolean(opts.verticalHasArrows, defaults.verticalHasArrows),\n\t\t\thorizontalHasArrows: _boolean(opts.horizontalHasArrows, defaults.horizontalHasArrows),\n\n\t\t\thorizontalScrollbarSize: horizontalScrollbarSize,\n\t\t\thorizontalSliderSize: _clampedInt(opts.horizontalSliderSize, horizontalScrollbarSize, 0, 1000),\n\n\t\t\tverticalScrollbarSize: verticalScrollbarSize,\n\t\t\tverticalSliderSize: _clampedInt(opts.verticalSliderSize, verticalScrollbarSize, 0, 1000),\n\n\t\t\thandleMouseWheel: _boolean(opts.handleMouseWheel, defaults.handleMouseWheel),\n\t\t\tmouseWheelScrollSensitivity: mouseWheelScrollSensitivity\n\t\t};\n\t}\n\n\tprivate static _sanitizeMinimapOpts(opts: IEditorMinimapOptions, defaults: InternalEditorMinimapOptions): InternalEditorMinimapOptions {\n\t\tif (typeof opts !== 'object') {\n\t\t\treturn defaults;\n\t\t}\n\t\treturn {\n\t\t\tenabled: _boolean(opts.enabled, defaults.enabled),\n\t\t\tshowSlider: _stringSet<'always' | 'mouseover'>(opts.showSlider, defaults.showSlider, ['always', 'mouseover']),\n\t\t\trenderCharacters: _boolean(opts.renderCharacters, defaults.renderCharacters),\n\t\t\tmaxColumn: _clampedInt(opts.maxColumn, defaults.maxColumn, 1, 10000),\n\t\t};\n\t}\n\n\tprivate static _santizeFindOpts(opts: IEditorFindOptions, defaults: InternalEditorFindOptions): InternalEditorFindOptions {\n\t\tif (typeof opts !== 'object') {\n\t\t\treturn defaults;\n\t\t}\n\n\t\treturn {\n\t\t\tseedSearchStringFromSelection: _boolean(opts.seedSearchStringFromSelection, defaults.seedSearchStringFromSelection),\n\t\t\tautoFindInSelection: _boolean(opts.autoFindInSelection, defaults.autoFindInSelection)\n\t\t};\n\t}\n\n\tprivate static _sanitizeViewInfo(opts: IEditorOptions, defaults: InternalEditorViewOptions): InternalEditorViewOptions {\n\n\t\tlet rulers: number[] = [];\n\t\tif (Array.isArray(opts.rulers)) {\n\t\t\tfor (let i = 0, len = opts.rulers.length; i < len; i++) {\n\t\t\t\trulers.push(_clampedInt(opts.rulers[i], 0, 0, 10000));\n\t\t\t}\n\t\t\trulers.sort();\n\t\t}\n\n\t\tlet renderLineNumbers: boolean = defaults.renderLineNumbers;\n\t\tlet renderCustomLineNumbers: (lineNumber: number) => string = defaults.renderCustomLineNumbers;\n\t\tlet renderRelativeLineNumbers: boolean = defaults.renderRelativeLineNumbers;\n\n\t\tif (typeof opts.lineNumbers !== 'undefined') {\n\t\t\tlet lineNumbers = opts.lineNumbers;\n\n\t\t\t// Compatibility with old true or false values\n\t\t\tif (lineNumbers === true) {\n\t\t\t\tlineNumbers = 'on';\n\t\t\t} else if (lineNumbers === false) {\n\t\t\t\tlineNumbers = 'off';\n\t\t\t}\n\n\t\t\tif (typeof lineNumbers === 'function') {\n\t\t\t\trenderLineNumbers = true;\n\t\t\t\trenderCustomLineNumbers = lineNumbers;\n\t\t\t\trenderRelativeLineNumbers = false;\n\t\t\t} else if (lineNumbers === 'relative') {\n\t\t\t\trenderLineNumbers = true;\n\t\t\t\trenderCustomLineNumbers = null;\n\t\t\t\trenderRelativeLineNumbers = true;\n\t\t\t} else if (lineNumbers === 'on') {\n\t\t\t\trenderLineNumbers = true;\n\t\t\t\trenderCustomLineNumbers = null;\n\t\t\t\trenderRelativeLineNumbers = false;\n\t\t\t} else {\n\t\t\t\trenderLineNumbers = false;\n\t\t\t\trenderCustomLineNumbers = null;\n\t\t\t\trenderRelativeLineNumbers = false;\n\t\t\t}\n\t\t}\n\n\t\tconst fontLigatures = _boolean(opts.fontLigatures, defaults.fontLigatures);\n\t\tconst disableMonospaceOptimizations = _boolean(opts.disableMonospaceOptimizations, defaults.disableMonospaceOptimizations) || fontLigatures;\n\n\t\tlet renderWhitespace = opts.renderWhitespace;\n\t\t{\n\t\t\t// Compatibility with old true or false values\n\t\t\tif (renderWhitespace === true) {\n\t\t\t\trenderWhitespace = 'boundary';\n\t\t\t} else if (renderWhitespace === false) {\n\t\t\t\trenderWhitespace = 'none';\n\t\t\t}\n\t\t\trenderWhitespace = _stringSet<'none' | 'boundary' | 'all'>(opts.renderWhitespace, defaults.renderWhitespace, ['none', 'boundary', 'all']);\n\t\t}\n\n\t\tlet renderLineHighlight = opts.renderLineHighlight;\n\t\t{\n\t\t\t// Compatibility with old true or false values\n\t\t\tif (renderLineHighlight === true) {\n\t\t\t\trenderLineHighlight = 'line';\n\t\t\t} else if (renderLineHighlight === false) {\n\t\t\t\trenderLineHighlight = 'none';\n\t\t\t}\n\t\t\trenderLineHighlight = _stringSet<'none' | 'gutter' | 'line' | 'all'>(opts.renderLineHighlight, defaults.renderLineHighlight, ['none', 'gutter', 'line', 'all']);\n\t\t}\n\n\t\tconst mouseWheelScrollSensitivity = _float(opts.mouseWheelScrollSensitivity, defaults.scrollbar.mouseWheelScrollSensitivity);\n\t\tconst scrollbar = this._sanitizeScrollbarOpts(opts.scrollbar, defaults.scrollbar, mouseWheelScrollSensitivity);\n\t\tconst minimap = this._sanitizeMinimapOpts(opts.minimap, defaults.minimap);\n\n\t\treturn {\n\t\t\textraEditorClassName: _string(opts.extraEditorClassName, defaults.extraEditorClassName),\n\t\t\tdisableMonospaceOptimizations: disableMonospaceOptimizations,\n\t\t\trulers: rulers,\n\t\t\tariaLabel: _string(opts.ariaLabel, defaults.ariaLabel),\n\t\t\trenderLineNumbers: renderLineNumbers,\n\t\t\trenderCustomLineNumbers: renderCustomLineNumbers,\n\t\t\trenderRelativeLineNumbers: renderRelativeLineNumbers,\n\t\t\tselectOnLineNumbers: _boolean(opts.selectOnLineNumbers, defaults.selectOnLineNumbers),\n\t\t\tglyphMargin: _boolean(opts.glyphMargin, defaults.glyphMargin),\n\t\t\trevealHorizontalRightPadding: _clampedInt(opts.revealHorizontalRightPadding, defaults.revealHorizontalRightPadding, 0, 1000),\n\t\t\troundedSelection: _boolean(opts.roundedSelection, defaults.roundedSelection),\n\t\t\toverviewRulerLanes: _clampedInt(opts.overviewRulerLanes, defaults.overviewRulerLanes, 0, 3),\n\t\t\toverviewRulerBorder: _boolean(opts.overviewRulerBorder, defaults.overviewRulerBorder),\n\t\t\tcursorBlinking: _cursorBlinkingStyleFromString(opts.cursorBlinking, defaults.cursorBlinking),\n\t\t\tmouseWheelZoom: _boolean(opts.mouseWheelZoom, defaults.mouseWheelZoom),\n\t\t\tcursorStyle: _cursorStyleFromString(opts.cursorStyle, defaults.cursorStyle),\n\t\t\thideCursorInOverviewRuler: _boolean(opts.hideCursorInOverviewRuler, defaults.hideCursorInOverviewRuler),\n\t\t\tscrollBeyondLastLine: _boolean(opts.scrollBeyondLastLine, defaults.scrollBeyondLastLine),\n\t\t\tstopRenderingLineAfter: _clampedInt(opts.stopRenderingLineAfter, defaults.stopRenderingLineAfter, -1, Constants.MAX_SAFE_SMALL_INTEGER),\n\t\t\trenderWhitespace: renderWhitespace,\n\t\t\trenderControlCharacters: _boolean(opts.renderControlCharacters, defaults.renderControlCharacters),\n\t\t\tfontLigatures: fontLigatures,\n\t\t\trenderIndentGuides: _boolean(opts.renderIndentGuides, defaults.renderIndentGuides),\n\t\t\trenderLineHighlight: renderLineHighlight,\n\t\t\tscrollbar: scrollbar,\n\t\t\tminimap: minimap,\n\t\t\tfixedOverflowWidgets: _boolean(opts.fixedOverflowWidgets, defaults.fixedOverflowWidgets),\n\t\t};\n\t}\n\n\tprivate static _sanitizeContribInfo(opts: IEditorOptions, defaults: EditorContribOptions): EditorContribOptions {\n\t\tlet quickSuggestions: boolean | { other: boolean, comments: boolean, strings: boolean };\n\t\tif (typeof opts.quickSuggestions === 'object') {\n\t\t\tquickSuggestions = { other: true, ...opts.quickSuggestions };\n\t\t} else {\n\t\t\tquickSuggestions = _boolean(opts.quickSuggestions, defaults.quickSuggestions);\n\t\t}\n\t\tconst find = this._santizeFindOpts(opts.find, defaults.find);\n\t\treturn {\n\t\t\tselectionClipboard: _boolean(opts.selectionClipboard, defaults.selectionClipboard),\n\t\t\thover: _boolean(opts.hover, defaults.hover),\n\t\t\tlinks: _boolean(opts.links, defaults.links),\n\t\t\tcontextmenu: _boolean(opts.contextmenu, defaults.contextmenu),\n\t\t\tquickSuggestions: quickSuggestions,\n\t\t\tquickSuggestionsDelay: _clampedInt(opts.quickSuggestionsDelay, defaults.quickSuggestionsDelay, Constants.MIN_SAFE_SMALL_INTEGER, Constants.MAX_SAFE_SMALL_INTEGER),\n\t\t\tparameterHints: _boolean(opts.parameterHints, defaults.parameterHints),\n\t\t\ticonsInSuggestions: _boolean(opts.iconsInSuggestions, defaults.iconsInSuggestions),\n\t\t\tformatOnType: _boolean(opts.formatOnType, defaults.formatOnType),\n\t\t\tformatOnPaste: _boolean(opts.formatOnPaste, defaults.formatOnPaste),\n\t\t\tsuggestOnTriggerCharacters: _boolean(opts.suggestOnTriggerCharacters, defaults.suggestOnTriggerCharacters),\n\t\t\tacceptSuggestionOnEnter: _stringSet<'on' | 'smart' | 'off'>(opts.acceptSuggestionOnEnter, defaults.acceptSuggestionOnEnter, ['on', 'smart', 'off']),\n\t\t\tacceptSuggestionOnCommitCharacter: _boolean(opts.acceptSuggestionOnCommitCharacter, defaults.acceptSuggestionOnCommitCharacter),\n\t\t\tsnippetSuggestions: _stringSet<'top' | 'bottom' | 'inline' | 'none'>(opts.snippetSuggestions, defaults.snippetSuggestions, ['top', 'bottom', 'inline', 'none']),\n\t\t\twordBasedSuggestions: _boolean(opts.wordBasedSuggestions, defaults.wordBasedSuggestions),\n\t\t\tsuggestFontSize: _clampedInt(opts.suggestFontSize, defaults.suggestFontSize, 0, 1000),\n\t\t\tsuggestLineHeight: _clampedInt(opts.suggestLineHeight, defaults.suggestLineHeight, 0, 1000),\n\t\t\tselectionHighlight: _boolean(opts.selectionHighlight, defaults.selectionHighlight),\n\t\t\toccurrencesHighlight: _boolean(opts.occurrencesHighlight, defaults.occurrencesHighlight),\n\t\t\tcodeLens: _boolean(opts.codeLens, defaults.codeLens) && _boolean(opts.referenceInfos, true),\n\t\t\tfolding: _boolean(opts.folding, defaults.folding),\n\t\t\tshowFoldingControls: _stringSet<'always' | 'mouseover'>(opts.showFoldingControls, defaults.showFoldingControls, ['always', 'mouseover']),\n\t\t\tmatchBrackets: _boolean(opts.matchBrackets, defaults.matchBrackets),\n\t\t\tfind: find\n\t\t};\n\t}\n}\n\n/**\n * @internal\n */\nexport class InternalEditorOptionsFactory {\n\n\tprivate static _tweakValidatedOptions(opts: IValidatedEditorOptions, accessibilitySupport: platform.AccessibilitySupport): IValidatedEditorOptions {\n\t\tconst accessibilityIsOn = (accessibilitySupport === platform.AccessibilitySupport.Enabled);\n\t\tconst accessibilityIsOff = (accessibilitySupport === platform.AccessibilitySupport.Disabled);\n\t\treturn {\n\t\t\tinDiffEditor: opts.inDiffEditor,\n\t\t\twordSeparators: opts.wordSeparators,\n\t\t\tlineNumbersMinChars: opts.lineNumbersMinChars,\n\t\t\tlineDecorationsWidth: opts.lineDecorationsWidth,\n\t\t\treadOnly: opts.readOnly,\n\t\t\tmouseStyle: opts.mouseStyle,\n\t\t\tdisableLayerHinting: opts.disableLayerHinting,\n\t\t\tautomaticLayout: opts.automaticLayout,\n\t\t\twordWrap: opts.wordWrap,\n\t\t\twordWrapColumn: opts.wordWrapColumn,\n\t\t\twordWrapMinified: opts.wordWrapMinified,\n\t\t\twrappingIndent: opts.wrappingIndent,\n\t\t\twordWrapBreakBeforeCharacters: opts.wordWrapBreakBeforeCharacters,\n\t\t\twordWrapBreakAfterCharacters: opts.wordWrapBreakAfterCharacters,\n\t\t\twordWrapBreakObtrusiveCharacters: opts.wordWrapBreakObtrusiveCharacters,\n\t\t\tautoClosingBrackets: opts.autoClosingBrackets,\n\t\t\tautoIndent: opts.autoIndent,\n\t\t\tdragAndDrop: opts.dragAndDrop,\n\t\t\temptySelectionClipboard: opts.emptySelectionClipboard,\n\t\t\tuseTabStops: opts.useTabStops,\n\t\t\tmultiCursorModifier: opts.multiCursorModifier,\n\t\t\taccessibilitySupport: opts.accessibilitySupport,\n\n\t\t\tviewInfo: {\n\t\t\t\textraEditorClassName: opts.viewInfo.extraEditorClassName,\n\t\t\t\tdisableMonospaceOptimizations: opts.viewInfo.disableMonospaceOptimizations,\n\t\t\t\trulers: opts.viewInfo.rulers,\n\t\t\t\tariaLabel: (accessibilityIsOff ? nls.localize('accessibilityOffAriaLabel', \"The editor is not accessible at this time. Press Alt+F1 for options.\") : opts.viewInfo.ariaLabel),\n\t\t\t\trenderLineNumbers: opts.viewInfo.renderLineNumbers,\n\t\t\t\trenderCustomLineNumbers: opts.viewInfo.renderCustomLineNumbers,\n\t\t\t\trenderRelativeLineNumbers: opts.viewInfo.renderRelativeLineNumbers,\n\t\t\t\tselectOnLineNumbers: opts.viewInfo.selectOnLineNumbers,\n\t\t\t\tglyphMargin: opts.viewInfo.glyphMargin,\n\t\t\t\trevealHorizontalRightPadding: opts.viewInfo.revealHorizontalRightPadding,\n\t\t\t\troundedSelection: (accessibilityIsOn ? false : opts.viewInfo.roundedSelection), // DISABLED WHEN SCREEN READER IS ATTACHED\n\t\t\t\toverviewRulerLanes: opts.viewInfo.overviewRulerLanes,\n\t\t\t\toverviewRulerBorder: opts.viewInfo.overviewRulerBorder,\n\t\t\t\tcursorBlinking: opts.viewInfo.cursorBlinking,\n\t\t\t\tmouseWheelZoom: opts.viewInfo.mouseWheelZoom,\n\t\t\t\tcursorStyle: opts.viewInfo.cursorStyle,\n\t\t\t\thideCursorInOverviewRuler: opts.viewInfo.hideCursorInOverviewRuler,\n\t\t\t\tscrollBeyondLastLine: opts.viewInfo.scrollBeyondLastLine,\n\t\t\t\tstopRenderingLineAfter: opts.viewInfo.stopRenderingLineAfter,\n\t\t\t\trenderWhitespace: (accessibilityIsOn ? 'none' : opts.viewInfo.renderWhitespace), // DISABLED WHEN SCREEN READER IS ATTACHED\n\t\t\t\trenderControlCharacters: (accessibilityIsOn ? false : opts.viewInfo.renderControlCharacters), // DISABLED WHEN SCREEN READER IS ATTACHED\n\t\t\t\tfontLigatures: (accessibilityIsOn ? false : opts.viewInfo.fontLigatures), // DISABLED WHEN SCREEN READER IS ATTACHED\n\t\t\t\trenderIndentGuides: (accessibilityIsOn ? false : opts.viewInfo.renderIndentGuides), // DISABLED WHEN SCREEN READER IS ATTACHED\n\t\t\t\trenderLineHighlight: (accessibilityIsOn ? 'none' : opts.viewInfo.renderLineHighlight), // DISABLED WHEN SCREEN READER IS ATTACHED\n\t\t\t\tscrollbar: opts.viewInfo.scrollbar,\n\t\t\t\tminimap: {\n\t\t\t\t\tenabled: (accessibilityIsOn ? false : opts.viewInfo.minimap.enabled), // DISABLED WHEN SCREEN READER IS ATTACHED\n\t\t\t\t\trenderCharacters: opts.viewInfo.minimap.renderCharacters,\n\t\t\t\t\tshowSlider: opts.viewInfo.minimap.showSlider,\n\t\t\t\t\tmaxColumn: opts.viewInfo.minimap.maxColumn\n\t\t\t\t},\n\t\t\t\tfixedOverflowWidgets: opts.viewInfo.fixedOverflowWidgets\n\t\t\t},\n\n\t\t\tcontribInfo: {\n\t\t\t\tselectionClipboard: opts.contribInfo.selectionClipboard,\n\t\t\t\thover: opts.contribInfo.hover,\n\t\t\t\tlinks: (accessibilityIsOn ? false : opts.contribInfo.links), // DISABLED WHEN SCREEN READER IS ATTACHED\n\t\t\t\tcontextmenu: opts.contribInfo.contextmenu,\n\t\t\t\tquickSuggestions: opts.contribInfo.quickSuggestions,\n\t\t\t\tquickSuggestionsDelay: opts.contribInfo.quickSuggestionsDelay,\n\t\t\t\tparameterHints: opts.contribInfo.parameterHints,\n\t\t\t\ticonsInSuggestions: opts.contribInfo.iconsInSuggestions,\n\t\t\t\tformatOnType: opts.contribInfo.formatOnType,\n\t\t\t\tformatOnPaste: opts.contribInfo.formatOnPaste,\n\t\t\t\tsuggestOnTriggerCharacters: opts.contribInfo.suggestOnTriggerCharacters,\n\t\t\t\tacceptSuggestionOnEnter: opts.contribInfo.acceptSuggestionOnEnter,\n\t\t\t\tacceptSuggestionOnCommitCharacter: opts.contribInfo.acceptSuggestionOnCommitCharacter,\n\t\t\t\tsnippetSuggestions: opts.contribInfo.snippetSuggestions,\n\t\t\t\twordBasedSuggestions: opts.contribInfo.wordBasedSuggestions,\n\t\t\t\tsuggestFontSize: opts.contribInfo.suggestFontSize,\n\t\t\t\tsuggestLineHeight: opts.contribInfo.suggestLineHeight,\n\t\t\t\tselectionHighlight: (accessibilityIsOn ? false : opts.contribInfo.selectionHighlight), // DISABLED WHEN SCREEN READER IS ATTACHED\n\t\t\t\toccurrencesHighlight: (accessibilityIsOn ? false : opts.contribInfo.occurrencesHighlight), // DISABLED WHEN SCREEN READER IS ATTACHED\n\t\t\t\tcodeLens: (accessibilityIsOn ? false : opts.contribInfo.codeLens), // DISABLED WHEN SCREEN READER IS ATTACHED\n\t\t\t\tfolding: (accessibilityIsOn ? false : opts.contribInfo.folding), // DISABLED WHEN SCREEN READER IS ATTACHED\n\t\t\t\tshowFoldingControls: opts.contribInfo.showFoldingControls,\n\t\t\t\tmatchBrackets: (accessibilityIsOn ? false : opts.contribInfo.matchBrackets), // DISABLED WHEN SCREEN READER IS ATTACHED\n\t\t\t\tfind: opts.contribInfo.find\n\t\t\t}\n\t\t};\n\t}\n\n\tpublic static createInternalEditorOptions(env: IEnvironmentalOptions, _opts: IValidatedEditorOptions) {\n\n\t\tlet accessibilitySupport: platform.AccessibilitySupport;\n\t\tif (_opts.accessibilitySupport === 'auto') {\n\t\t\t// The editor reads the `accessibilitySupport` from the environment\n\t\t\taccessibilitySupport = env.accessibilitySupport;\n\t\t} else if (_opts.accessibilitySupport === 'on') {\n\t\t\taccessibilitySupport = platform.AccessibilitySupport.Enabled;\n\t\t} else {\n\t\t\taccessibilitySupport = platform.AccessibilitySupport.Disabled;\n\t\t}\n\n\t\t// Disable some non critical features to get as best performance as possible\n\t\t// See https://github.com/Microsoft/vscode/issues/26730\n\t\tconst opts = this._tweakValidatedOptions(_opts, accessibilitySupport);\n\n\t\tlet lineDecorationsWidth: number;\n\t\tif (typeof opts.lineDecorationsWidth === 'string' && /^\\d+(\\.\\d+)?ch$/.test(opts.lineDecorationsWidth)) {\n\t\t\tconst multiple = parseFloat(opts.lineDecorationsWidth.substr(0, opts.lineDecorationsWidth.length - 2));\n\t\t\tlineDecorationsWidth = multiple * env.fontInfo.typicalHalfwidthCharacterWidth;\n\t\t} else {\n\t\t\tlineDecorationsWidth = _clampedInt(opts.lineDecorationsWidth, 0, 0, 1000);\n\t\t}\n\t\tif (opts.contribInfo.folding) {\n\t\t\tlineDecorationsWidth += 16;\n\t\t}\n\n\t\tconst layoutInfo = EditorLayoutProvider.compute({\n\t\t\touterWidth: env.outerWidth,\n\t\t\touterHeight: env.outerHeight,\n\t\t\tshowGlyphMargin: opts.viewInfo.glyphMargin,\n\t\t\tlineHeight: env.fontInfo.lineHeight,\n\t\t\tshowLineNumbers: opts.viewInfo.renderLineNumbers,\n\t\t\tlineNumbersMinChars: opts.lineNumbersMinChars,\n\t\t\tlineNumbersDigitCount: env.lineNumbersDigitCount,\n\t\t\tlineDecorationsWidth: lineDecorationsWidth,\n\t\t\ttypicalHalfwidthCharacterWidth: env.fontInfo.typicalHalfwidthCharacterWidth,\n\t\t\tmaxDigitWidth: env.fontInfo.maxDigitWidth,\n\t\t\tverticalScrollbarWidth: opts.viewInfo.scrollbar.verticalScrollbarSize,\n\t\t\thorizontalScrollbarHeight: opts.viewInfo.scrollbar.horizontalScrollbarSize,\n\t\t\tscrollbarArrowSize: opts.viewInfo.scrollbar.arrowSize,\n\t\t\tverticalScrollbarHasArrows: opts.viewInfo.scrollbar.verticalHasArrows,\n\t\t\tminimap: opts.viewInfo.minimap.enabled,\n\t\t\tminimapRenderCharacters: opts.viewInfo.minimap.renderCharacters,\n\t\t\tminimapMaxColumn: opts.viewInfo.minimap.maxColumn,\n\t\t\tpixelRatio: env.pixelRatio\n\t\t});\n\n\t\tlet bareWrappingInfo: { isWordWrapMinified: boolean; isViewportWrapping: boolean; wrappingColumn: number; } = null;\n\t\t{\n\t\t\tconst wordWrap = opts.wordWrap;\n\t\t\tconst wordWrapColumn = opts.wordWrapColumn;\n\t\t\tconst wordWrapMinified = opts.wordWrapMinified;\n\n\t\t\tif (accessibilitySupport === platform.AccessibilitySupport.Enabled) {\n\t\t\t\t// See https://github.com/Microsoft/vscode/issues/27766\n\t\t\t\t// Never enable wrapping when a screen reader is attached\n\t\t\t\t// because arrow down etc. will not move the cursor in the way\n\t\t\t\t// a screen reader expects.\n\t\t\t\tbareWrappingInfo = {\n\t\t\t\t\tisWordWrapMinified: false,\n\t\t\t\t\tisViewportWrapping: false,\n\t\t\t\t\twrappingColumn: -1\n\t\t\t\t};\n\t\t\t} else if (wordWrapMinified && env.isDominatedByLongLines) {\n\t\t\t\t// Force viewport width wrapping if model is dominated by long lines\n\t\t\t\tbareWrappingInfo = {\n\t\t\t\t\tisWordWrapMinified: true,\n\t\t\t\t\tisViewportWrapping: true,\n\t\t\t\t\twrappingColumn: Math.max(1, layoutInfo.viewportColumn)\n\t\t\t\t};\n\t\t\t} else if (wordWrap === 'on') {\n\t\t\t\tbareWrappingInfo = {\n\t\t\t\t\tisWordWrapMinified: false,\n\t\t\t\t\tisViewportWrapping: true,\n\t\t\t\t\twrappingColumn: Math.max(1, layoutInfo.viewportColumn)\n\t\t\t\t};\n\t\t\t} else if (wordWrap === 'bounded') {\n\t\t\t\tbareWrappingInfo = {\n\t\t\t\t\tisWordWrapMinified: false,\n\t\t\t\t\tisViewportWrapping: true,\n\t\t\t\t\twrappingColumn: Math.min(Math.max(1, layoutInfo.viewportColumn), wordWrapColumn)\n\t\t\t\t};\n\t\t\t} else if (wordWrap === 'wordWrapColumn') {\n\t\t\t\tbareWrappingInfo = {\n\t\t\t\t\tisWordWrapMinified: false,\n\t\t\t\t\tisViewportWrapping: false,\n\t\t\t\t\twrappingColumn: wordWrapColumn\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tbareWrappingInfo = {\n\t\t\t\t\tisWordWrapMinified: false,\n\t\t\t\t\tisViewportWrapping: false,\n\t\t\t\t\twrappingColumn: -1\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tconst wrappingInfo: EditorWrappingInfo = {\n\t\t\tinDiffEditor: opts.inDiffEditor,\n\t\t\tisDominatedByLongLines: env.isDominatedByLongLines,\n\t\t\tisWordWrapMinified: bareWrappingInfo.isWordWrapMinified,\n\t\t\tisViewportWrapping: bareWrappingInfo.isViewportWrapping,\n\t\t\twrappingColumn: bareWrappingInfo.wrappingColumn,\n\t\t\twrappingIndent: opts.wrappingIndent,\n\t\t\twordWrapBreakBeforeCharacters: opts.wordWrapBreakBeforeCharacters,\n\t\t\twordWrapBreakAfterCharacters: opts.wordWrapBreakAfterCharacters,\n\t\t\twordWrapBreakObtrusiveCharacters: opts.wordWrapBreakObtrusiveCharacters,\n\t\t};\n\n\t\tlet className = 'monaco-editor';\n\t\tif (opts.viewInfo.extraEditorClassName) {\n\t\t\tclassName += ' ' + opts.viewInfo.extraEditorClassName;\n\t\t}\n\t\tif (env.extraEditorClassName) {\n\t\t\tclassName += ' ' + env.extraEditorClassName;\n\t\t}\n\t\tif (opts.viewInfo.fontLigatures) {\n\t\t\tclassName += ' enable-ligatures';\n\t\t}\n\t\tif (opts.mouseStyle === 'default') {\n\t\t\tclassName += ' mouse-default';\n\t\t} else if (opts.mouseStyle === 'copy') {\n\t\t\tclassName += ' mouse-copy';\n\t\t}\n\n\t\treturn new InternalEditorOptions({\n\t\t\tcanUseLayerHinting: opts.disableLayerHinting ? false : true,\n\t\t\tpixelRatio: env.pixelRatio,\n\t\t\teditorClassName: className,\n\t\t\tlineHeight: env.fontInfo.lineHeight,\n\t\t\treadOnly: opts.readOnly,\n\t\t\taccessibilitySupport: accessibilitySupport,\n\t\t\tmultiCursorModifier: opts.multiCursorModifier,\n\t\t\twordSeparators: opts.wordSeparators,\n\t\t\tautoClosingBrackets: opts.autoClosingBrackets,\n\t\t\tautoIndent: opts.autoIndent,\n\t\t\tuseTabStops: opts.useTabStops,\n\t\t\ttabFocusMode: opts.readOnly ? true : env.tabFocusMode,\n\t\t\tdragAndDrop: opts.dragAndDrop,\n\t\t\temptySelectionClipboard: opts.emptySelectionClipboard && env.emptySelectionClipboard,\n\t\t\tlayoutInfo: layoutInfo,\n\t\t\tfontInfo: env.fontInfo,\n\t\t\tviewInfo: opts.viewInfo,\n\t\t\twrappingInfo: wrappingInfo,\n\t\t\tcontribInfo: opts.contribInfo\n\t\t});\n\t}\n}\n\n/**\n * @internal\n */\nexport interface IEditorLayoutProviderOpts {\n\touterWidth: number;\n\touterHeight: number;\n\n\tshowGlyphMargin: boolean;\n\tlineHeight: number;\n\n\tshowLineNumbers: boolean;\n\tlineNumbersMinChars: number;\n\tlineNumbersDigitCount: number;\n\n\tlineDecorationsWidth: number;\n\n\ttypicalHalfwidthCharacterWidth: number;\n\tmaxDigitWidth: number;\n\n\tverticalScrollbarWidth: number;\n\tverticalScrollbarHasArrows: boolean;\n\tscrollbarArrowSize: number;\n\thorizontalScrollbarHeight: number;\n\n\tminimap: boolean;\n\tminimapRenderCharacters: boolean;\n\tminimapMaxColumn: number;\n\tpixelRatio: number;\n}\n\n/**\n * @internal\n */\nexport class EditorLayoutProvider {\n\tpublic static compute(_opts: IEditorLayoutProviderOpts): EditorLayoutInfo {\n\t\tconst outerWidth = _opts.outerWidth | 0;\n\t\tconst outerHeight = _opts.outerHeight | 0;\n\t\tconst showGlyphMargin = _opts.showGlyphMargin;\n\t\tconst lineHeight = _opts.lineHeight | 0;\n\t\tconst showLineNumbers = _opts.showLineNumbers;\n\t\tconst lineNumbersMinChars = _opts.lineNumbersMinChars | 0;\n\t\tconst lineNumbersDigitCount = _opts.lineNumbersDigitCount | 0;\n\t\tconst lineDecorationsWidth = _opts.lineDecorationsWidth | 0;\n\t\tconst typicalHalfwidthCharacterWidth = _opts.typicalHalfwidthCharacterWidth;\n\t\tconst maxDigitWidth = _opts.maxDigitWidth;\n\t\tconst verticalScrollbarWidth = _opts.verticalScrollbarWidth | 0;\n\t\tconst verticalScrollbarHasArrows = _opts.verticalScrollbarHasArrows;\n\t\tconst scrollbarArrowSize = _opts.scrollbarArrowSize | 0;\n\t\tconst horizontalScrollbarHeight = _opts.horizontalScrollbarHeight | 0;\n\t\tconst minimap = _opts.minimap;\n\t\tconst minimapRenderCharacters = _opts.minimapRenderCharacters;\n\t\tconst minimapMaxColumn = _opts.minimapMaxColumn | 0;\n\t\tconst pixelRatio = _opts.pixelRatio;\n\n\t\tlet lineNumbersWidth = 0;\n\t\tif (showLineNumbers) {\n\t\t\tconst digitCount = Math.max(lineNumbersDigitCount, lineNumbersMinChars);\n\t\t\tlineNumbersWidth = Math.round(digitCount * maxDigitWidth);\n\t\t}\n\n\t\tlet glyphMarginWidth = 0;\n\t\tif (showGlyphMargin) {\n\t\t\tglyphMarginWidth = lineHeight;\n\t\t}\n\n\t\tconst glyphMarginLeft = 0;\n\t\tconst lineNumbersLeft = glyphMarginLeft + glyphMarginWidth;\n\t\tconst decorationsLeft = lineNumbersLeft + lineNumbersWidth;\n\t\tconst contentLeft = decorationsLeft + lineDecorationsWidth;\n\n\t\tconst remainingWidth = outerWidth - glyphMarginWidth - lineNumbersWidth - lineDecorationsWidth;\n\n\t\tlet renderMinimap: RenderMinimap;\n\t\tlet minimapWidth: number;\n\t\tlet contentWidth: number;\n\t\tif (!minimap) {\n\t\t\tminimapWidth = 0;\n\t\t\trenderMinimap = RenderMinimap.None;\n\t\t\tcontentWidth = remainingWidth;\n\t\t} else {\n\t\t\tlet minimapCharWidth: number;\n\t\t\tif (pixelRatio >= 2) {\n\t\t\t\trenderMinimap = minimapRenderCharacters ? RenderMinimap.Large : RenderMinimap.LargeBlocks;\n\t\t\t\tminimapCharWidth = 2 / pixelRatio;\n\t\t\t} else {\n\t\t\t\trenderMinimap = minimapRenderCharacters ? RenderMinimap.Small : RenderMinimap.SmallBlocks;\n\t\t\t\tminimapCharWidth = 1 / pixelRatio;\n\t\t\t}\n\n\t\t\t// Given:\n\t\t\t// viewportColumn = (contentWidth - verticalScrollbarWidth) / typicalHalfwidthCharacterWidth\n\t\t\t// minimapWidth = viewportColumn * minimapCharWidth\n\t\t\t// contentWidth = remainingWidth - minimapWidth\n\t\t\t// What are good values for contentWidth and minimapWidth ?\n\n\t\t\t// minimapWidth = ((contentWidth - verticalScrollbarWidth) / typicalHalfwidthCharacterWidth) * minimapCharWidth\n\t\t\t// typicalHalfwidthCharacterWidth * minimapWidth = (contentWidth - verticalScrollbarWidth) * minimapCharWidth\n\t\t\t// typicalHalfwidthCharacterWidth * minimapWidth = (remainingWidth - minimapWidth - verticalScrollbarWidth) * minimapCharWidth\n\t\t\t// (typicalHalfwidthCharacterWidth + minimapCharWidth) * minimapWidth = (remainingWidth - verticalScrollbarWidth) * minimapCharWidth\n\t\t\t// minimapWidth = ((remainingWidth - verticalScrollbarWidth) * minimapCharWidth) / (typicalHalfwidthCharacterWidth + minimapCharWidth)\n\n\t\t\tminimapWidth = Math.max(0, Math.floor(((remainingWidth - verticalScrollbarWidth) * minimapCharWidth) / (typicalHalfwidthCharacterWidth + minimapCharWidth)));\n\t\t\tlet minimapColumns = minimapWidth / minimapCharWidth;\n\t\t\tif (minimapColumns > minimapMaxColumn) {\n\t\t\t\tminimapWidth = Math.floor(minimapMaxColumn * minimapCharWidth);\n\t\t\t}\n\t\t\tcontentWidth = remainingWidth - minimapWidth;\n\t\t}\n\n\t\tconst viewportColumn = Math.max(1, Math.floor((contentWidth - verticalScrollbarWidth) / typicalHalfwidthCharacterWidth));\n\n\t\tconst verticalArrowSize = (verticalScrollbarHasArrows ? scrollbarArrowSize : 0);\n\n\t\treturn {\n\t\t\twidth: outerWidth,\n\t\t\theight: outerHeight,\n\n\t\t\tglyphMarginLeft: glyphMarginLeft,\n\t\t\tglyphMarginWidth: glyphMarginWidth,\n\t\t\tglyphMarginHeight: outerHeight,\n\n\t\t\tlineNumbersLeft: lineNumbersLeft,\n\t\t\tlineNumbersWidth: lineNumbersWidth,\n\t\t\tlineNumbersHeight: outerHeight,\n\n\t\t\tdecorationsLeft: decorationsLeft,\n\t\t\tdecorationsWidth: lineDecorationsWidth,\n\t\t\tdecorationsHeight: outerHeight,\n\n\t\t\tcontentLeft: contentLeft,\n\t\t\tcontentWidth: contentWidth,\n\t\t\tcontentHeight: outerHeight,\n\n\t\t\trenderMinimap: renderMinimap,\n\t\t\tminimapWidth: minimapWidth,\n\n\t\t\tviewportColumn: viewportColumn,\n\n\t\t\tverticalScrollbarWidth: verticalScrollbarWidth,\n\t\t\thorizontalScrollbarHeight: horizontalScrollbarHeight,\n\n\t\t\toverviewRuler: {\n\t\t\t\ttop: verticalArrowSize,\n\t\t\t\twidth: verticalScrollbarWidth,\n\t\t\t\theight: (outerHeight - 2 * verticalArrowSize),\n\t\t\t\tright: 0\n\t\t\t}\n\t\t};\n\t}\n}\n\nconst DEFAULT_WINDOWS_FONT_FAMILY = 'Consolas, \\'Courier New\\', monospace';\nconst DEFAULT_MAC_FONT_FAMILY = 'Menlo, Monaco, \\'Courier New\\', monospace';\nconst DEFAULT_LINUX_FONT_FAMILY = '\\'Droid Sans Mono\\', \\'Courier New\\', monospace, \\'Droid Sans Fallback\\'';\n\n/**\n * @internal\n */\nexport const EDITOR_FONT_DEFAULTS = {\n\tfontFamily: (\n\t\tplatform.isMacintosh ? DEFAULT_MAC_FONT_FAMILY : (platform.isLinux ? DEFAULT_LINUX_FONT_FAMILY : DEFAULT_WINDOWS_FONT_FAMILY)\n\t),\n\tfontWeight: 'normal',\n\tfontSize: (\n\t\tplatform.isMacintosh ? 12 : 14\n\t),\n\tlineHeight: 0,\n\tletterSpacing: 0,\n};\n\n/**\n * @internal\n */\nexport const EDITOR_MODEL_DEFAULTS = {\n\ttabSize: 4,\n\tinsertSpaces: true,\n\tdetectIndentation: true,\n\ttrimAutoWhitespace: true\n};\n\n/**\n * @internal\n */\nexport const EDITOR_DEFAULTS: IValidatedEditorOptions = {\n\tinDiffEditor: false,\n\twordSeparators: USUAL_WORD_SEPARATORS,\n\tlineNumbersMinChars: 5,\n\tlineDecorationsWidth: 10,\n\treadOnly: false,\n\tmouseStyle: 'text',\n\tdisableLayerHinting: false,\n\tautomaticLayout: false,\n\twordWrap: 'off',\n\twordWrapColumn: 80,\n\twordWrapMinified: true,\n\twrappingIndent: WrappingIndent.Same,\n\twordWrapBreakBeforeCharacters: '([{‘“〈《「『【〔([{「£¥$£¥++',\n\twordWrapBreakAfterCharacters: ' \\t})]?|&,;¢°′″‰℃、。。、¢,.:;?!%・・ゝゞヽヾーァィゥェォッャュョヮヵヶぁぃぅぇぉっゃゅょゎゕゖㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ々〻ァィゥェォャュョッー”〉》」』】〕)]}」',\n\twordWrapBreakObtrusiveCharacters: '.',\n\tautoClosingBrackets: true,\n\tautoIndent: true,\n\tdragAndDrop: true,\n\temptySelectionClipboard: true,\n\tuseTabStops: true,\n\tmultiCursorModifier: 'altKey',\n\taccessibilitySupport: 'auto',\n\n\tviewInfo: {\n\t\textraEditorClassName: '',\n\t\tdisableMonospaceOptimizations: false,\n\t\trulers: [],\n\t\tariaLabel: nls.localize('editorViewAccessibleLabel', \"Editor content\"),\n\t\trenderLineNumbers: true,\n\t\trenderCustomLineNumbers: null,\n\t\trenderRelativeLineNumbers: false,\n\t\tselectOnLineNumbers: true,\n\t\tglyphMargin: true,\n\t\trevealHorizontalRightPadding: 30,\n\t\troundedSelection: true,\n\t\toverviewRulerLanes: 2,\n\t\toverviewRulerBorder: true,\n\t\tcursorBlinking: TextEditorCursorBlinkingStyle.Blink,\n\t\tmouseWheelZoom: false,\n\t\tcursorStyle: TextEditorCursorStyle.Line,\n\t\thideCursorInOverviewRuler: false,\n\t\tscrollBeyondLastLine: true,\n\t\tstopRenderingLineAfter: 10000,\n\t\trenderWhitespace: 'none',\n\t\trenderControlCharacters: false,\n\t\tfontLigatures: false,\n\t\trenderIndentGuides: true,\n\t\trenderLineHighlight: 'line',\n\t\tscrollbar: {\n\t\t\tvertical: ScrollbarVisibility.Auto,\n\t\t\thorizontal: ScrollbarVisibility.Auto,\n\t\t\tarrowSize: 11,\n\t\t\tuseShadows: true,\n\t\t\tverticalHasArrows: false,\n\t\t\thorizontalHasArrows: false,\n\t\t\thorizontalScrollbarSize: 10,\n\t\t\thorizontalSliderSize: 10,\n\t\t\tverticalScrollbarSize: 14,\n\t\t\tverticalSliderSize: 14,\n\t\t\thandleMouseWheel: true,\n\t\t\tmouseWheelScrollSensitivity: 1,\n\t\t},\n\t\tminimap: {\n\t\t\tenabled: true,\n\t\t\tshowSlider: 'mouseover',\n\t\t\trenderCharacters: true,\n\t\t\tmaxColumn: 120\n\t\t},\n\t\tfixedOverflowWidgets: false,\n\t},\n\n\tcontribInfo: {\n\t\tselectionClipboard: true,\n\t\thover: true,\n\t\tlinks: true,\n\t\tcontextmenu: true,\n\t\tquickSuggestions: { other: true, comments: false, strings: false },\n\t\tquickSuggestionsDelay: 10,\n\t\tparameterHints: true,\n\t\ticonsInSuggestions: true,\n\t\tformatOnType: false,\n\t\tformatOnPaste: false,\n\t\tsuggestOnTriggerCharacters: true,\n\t\tacceptSuggestionOnEnter: 'on',\n\t\tacceptSuggestionOnCommitCharacter: true,\n\t\tsnippetSuggestions: 'inline',\n\t\twordBasedSuggestions: true,\n\t\tsuggestFontSize: 0,\n\t\tsuggestLineHeight: 0,\n\t\tselectionHighlight: true,\n\t\toccurrencesHighlight: true,\n\t\tcodeLens: true,\n\t\tfolding: true,\n\t\tshowFoldingControls: 'mouseover',\n\t\tmatchBrackets: true,\n\t\tfind: {\n\t\t\tseedSearchStringFromSelection: true,\n\t\t\tautoFindInSelection: false\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as platform from 'vs/base/common/platform';\nimport { EditorZoom } from 'vs/editor/common/config/editorZoom';\nimport { EDITOR_FONT_DEFAULTS } from 'vs/editor/common/config/editorOptions';\n\n/**\n * Determined from empirical observations.\n * @internal\n */\nconst GOLDEN_LINE_HEIGHT_RATIO = platform.isMacintosh ? 1.5 : 1.35;\n\nfunction safeParseFloat(n: number | string, defaultValue: number): number {\n\tif (typeof n === 'number') {\n\t\treturn n;\n\t}\n\tlet r = parseFloat(n);\n\tif (isNaN(r)) {\n\t\treturn defaultValue;\n\t}\n\treturn r;\n}\n\nfunction safeParseInt(n: number | string, defaultValue: number): number {\n\tif (typeof n === 'number') {\n\t\treturn Math.round(n);\n\t}\n\tlet r = parseInt(n);\n\tif (isNaN(r)) {\n\t\treturn defaultValue;\n\t}\n\treturn r;\n}\n\nfunction clamp(n: number, min: number, max: number): number {\n\tif (n < min) {\n\t\treturn min;\n\t}\n\tif (n > max) {\n\t\treturn max;\n\t}\n\treturn n;\n}\n\nfunction _string(value: any, defaultValue: string): string {\n\tif (typeof value !== 'string') {\n\t\treturn defaultValue;\n\t}\n\treturn value;\n}\n\nexport class BareFontInfo {\n\treadonly _bareFontInfoBrand: void;\n\n\t/**\n\t * @internal\n\t */\n\tpublic static createFromRawSettings(opts: {\n\t\tfontFamily?: string;\n\t\tfontWeight?: string;\n\t\tfontSize?: number | string;\n\t\tlineHeight?: number | string;\n\t\tletterSpacing?: number | string;\n\t}, zoomLevel: number): BareFontInfo {\n\n\t\tlet fontFamily = _string(opts.fontFamily, EDITOR_FONT_DEFAULTS.fontFamily);\n\t\tlet fontWeight = _string(opts.fontWeight, EDITOR_FONT_DEFAULTS.fontWeight);\n\n\t\tlet fontSize = safeParseFloat(opts.fontSize, EDITOR_FONT_DEFAULTS.fontSize);\n\t\tfontSize = clamp(fontSize, 0, 100);\n\t\tif (fontSize === 0) {\n\t\t\tfontSize = EDITOR_FONT_DEFAULTS.fontSize;\n\t\t} else if (fontSize < 8) {\n\t\t\tfontSize = 8;\n\t\t}\n\n\t\tlet lineHeight = safeParseInt(opts.lineHeight, 0);\n\t\tlineHeight = clamp(lineHeight, 0, 150);\n\t\tif (lineHeight === 0) {\n\t\t\tlineHeight = Math.round(GOLDEN_LINE_HEIGHT_RATIO * fontSize);\n\t\t} else if (lineHeight < 8) {\n\t\t\tlineHeight = 8;\n\t\t}\n\n\t\tlet letterSpacing = safeParseFloat(opts.letterSpacing, 0);\n\t\tletterSpacing = clamp(letterSpacing, -20, 20);\n\n\t\tlet editorZoomLevelMultiplier = 1 + (EditorZoom.getZoomLevel() * 0.1);\n\t\tfontSize *= editorZoomLevelMultiplier;\n\t\tlineHeight *= editorZoomLevelMultiplier;\n\n\t\treturn new BareFontInfo({\n\t\t\tzoomLevel: zoomLevel,\n\t\t\tfontFamily: fontFamily,\n\t\t\tfontWeight: fontWeight,\n\t\t\tfontSize: fontSize,\n\t\t\tlineHeight: lineHeight,\n\t\t\tletterSpacing: letterSpacing\n\t\t});\n\t}\n\n\treadonly zoomLevel: number;\n\treadonly fontFamily: string;\n\treadonly fontWeight: string;\n\treadonly fontSize: number;\n\treadonly lineHeight: number;\n\treadonly letterSpacing: number;\n\n\t/**\n\t * @internal\n\t */\n\tprotected constructor(opts: {\n\t\tzoomLevel: number;\n\t\tfontFamily: string;\n\t\tfontWeight: string;\n\t\tfontSize: number;\n\t\tlineHeight: number;\n\t\tletterSpacing: number;\n\t}) {\n\t\tthis.zoomLevel = opts.zoomLevel;\n\t\tthis.fontFamily = String(opts.fontFamily);\n\t\tthis.fontWeight = String(opts.fontWeight);\n\t\tthis.fontSize = opts.fontSize;\n\t\tthis.lineHeight = opts.lineHeight | 0;\n\t\tthis.letterSpacing = opts.letterSpacing;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic getId(): string {\n\t\treturn this.zoomLevel + '-' + this.fontFamily + '-' + this.fontWeight + '-' + this.fontSize + '-' + this.lineHeight + '-' + this.letterSpacing;\n\t}\n}\n\nexport class FontInfo extends BareFontInfo {\n\treadonly _editorStylingBrand: void;\n\n\treadonly isTrusted: boolean;\n\treadonly isMonospace: boolean;\n\treadonly typicalHalfwidthCharacterWidth: number;\n\treadonly typicalFullwidthCharacterWidth: number;\n\treadonly spaceWidth: number;\n\treadonly maxDigitWidth: number;\n\n\t/**\n\t * @internal\n\t */\n\tconstructor(opts: {\n\t\tzoomLevel: number;\n\t\tfontFamily: string;\n\t\tfontWeight: string;\n\t\tfontSize: number;\n\t\tlineHeight: number;\n\t\tletterSpacing: number;\n\t\tisMonospace: boolean;\n\t\ttypicalHalfwidthCharacterWidth: number;\n\t\ttypicalFullwidthCharacterWidth: number;\n\t\tspaceWidth: number;\n\t\tmaxDigitWidth: number;\n\t}, isTrusted: boolean) {\n\t\tsuper(opts);\n\t\tthis.isTrusted = isTrusted;\n\t\tthis.isMonospace = opts.isMonospace;\n\t\tthis.typicalHalfwidthCharacterWidth = opts.typicalHalfwidthCharacterWidth;\n\t\tthis.typicalFullwidthCharacterWidth = opts.typicalFullwidthCharacterWidth;\n\t\tthis.spaceWidth = opts.spaceWidth;\n\t\tthis.maxDigitWidth = opts.maxDigitWidth;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic equals(other: FontInfo): boolean {\n\t\treturn (\n\t\t\tthis.fontFamily === other.fontFamily\n\t\t\t&& this.fontWeight === other.fontWeight\n\t\t\t&& this.fontSize === other.fontSize\n\t\t\t&& this.lineHeight === other.lineHeight\n\t\t\t&& this.letterSpacing === other.letterSpacing\n\t\t\t&& this.typicalHalfwidthCharacterWidth === other.typicalHalfwidthCharacterWidth\n\t\t\t&& this.typicalFullwidthCharacterWidth === other.typicalFullwidthCharacterWidth\n\t\t\t&& this.spaceWidth === other.spaceWidth\n\t\t\t&& this.maxDigitWidth === other.maxDigitWidth\n\t\t);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { OrderGuaranteeEventEmitter, BulkListenerCallback } from 'vs/base/common/eventEmitter';\nimport * as strings from 'vs/base/common/strings';\nimport { Position, IPosition } from 'vs/editor/common/core/position';\nimport { Range, IRange } from 'vs/editor/common/core/range';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { ModelLine } from 'vs/editor/common/model/modelLine';\nimport { guessIndentation } from 'vs/editor/common/model/indentationGuesser';\nimport { EDITOR_MODEL_DEFAULTS } from 'vs/editor/common/config/editorOptions';\nimport { PrefixSumComputer } from 'vs/editor/common/viewModel/prefixSumComputer';\nimport { IndentRange, computeRanges } from 'vs/editor/common/model/indentRanges';\nimport { TextModelSearch, SearchParams } from 'vs/editor/common/model/textModelSearch';\nimport { TextSource, ITextSource, IRawTextSource, RawTextSource } from 'vs/editor/common/model/textSource';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport * as textModelEvents from 'vs/editor/common/model/textModelEvents';\n\nconst LIMIT_FIND_COUNT = 999;\nexport const LONG_LINE_BOUNDARY = 10000;\n\nexport interface ITextModelCreationData {\n\treadonly text: ITextSource;\n\treadonly options: editorCommon.TextModelResolvedOptions;\n}\n\nexport class TextModel implements editorCommon.ITextModel {\n\tprivate static MODEL_SYNC_LIMIT = 5 * 1024 * 1024; // 5 MB\n\tprivate static MODEL_TOKENIZATION_LIMIT = 20 * 1024 * 1024; // 20 MB\n\n\tpublic static DEFAULT_CREATION_OPTIONS: editorCommon.ITextModelCreationOptions = {\n\t\ttabSize: EDITOR_MODEL_DEFAULTS.tabSize,\n\t\tinsertSpaces: EDITOR_MODEL_DEFAULTS.insertSpaces,\n\t\tdetectIndentation: false,\n\t\tdefaultEOL: editorCommon.DefaultEndOfLine.LF,\n\t\ttrimAutoWhitespace: EDITOR_MODEL_DEFAULTS.trimAutoWhitespace,\n\t};\n\n\tpublic static createFromString(text: string, options: editorCommon.ITextModelCreationOptions = TextModel.DEFAULT_CREATION_OPTIONS): TextModel {\n\t\treturn new TextModel(RawTextSource.fromString(text), options);\n\t}\n\n\tpublic static resolveCreationData(rawTextSource: IRawTextSource, options: editorCommon.ITextModelCreationOptions): ITextModelCreationData {\n\t\tconst textSource = TextSource.fromRawTextSource(rawTextSource, options.defaultEOL);\n\n\t\tlet resolvedOpts: editorCommon.TextModelResolvedOptions;\n\t\tif (options.detectIndentation) {\n\t\t\tconst guessedIndentation = guessIndentation(textSource.lines, options.tabSize, options.insertSpaces);\n\t\t\tresolvedOpts = new editorCommon.TextModelResolvedOptions({\n\t\t\t\ttabSize: guessedIndentation.tabSize,\n\t\t\t\tinsertSpaces: guessedIndentation.insertSpaces,\n\t\t\t\ttrimAutoWhitespace: options.trimAutoWhitespace,\n\t\t\t\tdefaultEOL: options.defaultEOL\n\t\t\t});\n\t\t} else {\n\t\t\tresolvedOpts = new editorCommon.TextModelResolvedOptions({\n\t\t\t\ttabSize: options.tabSize,\n\t\t\t\tinsertSpaces: options.insertSpaces,\n\t\t\t\ttrimAutoWhitespace: options.trimAutoWhitespace,\n\t\t\t\tdefaultEOL: options.defaultEOL\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\ttext: textSource,\n\t\t\toptions: resolvedOpts\n\t\t};\n\t}\n\n\tpublic addBulkListener(listener: BulkListenerCallback): IDisposable {\n\t\treturn this._eventEmitter.addBulkListener(listener);\n\t}\n\n\tprotected readonly _eventEmitter: OrderGuaranteeEventEmitter;\n\n\t/*protected*/ _lines: ModelLine[];\n\tprotected _EOL: string;\n\tprotected _isDisposed: boolean;\n\tprotected _isDisposing: boolean;\n\tprotected _options: editorCommon.TextModelResolvedOptions;\n\tprotected _lineStarts: PrefixSumComputer;\n\tprivate _indentRanges: IndentRange[];\n\n\tprivate _versionId: number;\n\t/**\n\t * Unlike, versionId, this can go down (via undo) or go to previous values (via redo)\n\t */\n\tprivate _alternativeVersionId: number;\n\tprivate _BOM: string;\n\tprotected _mightContainRTL: boolean;\n\tprotected _mightContainNonBasicASCII: boolean;\n\n\tprivate _shouldSimplifyMode: boolean;\n\tprivate _shouldDenyMode: boolean;\n\n\tconstructor(rawTextSource: IRawTextSource, creationOptions: editorCommon.ITextModelCreationOptions) {\n\t\tthis._eventEmitter = new OrderGuaranteeEventEmitter();\n\n\t\tconst textModelData = TextModel.resolveCreationData(rawTextSource, creationOptions);\n\n\t\tthis._shouldSimplifyMode = (textModelData.text.length > TextModel.MODEL_SYNC_LIMIT);\n\t\tthis._shouldDenyMode = (textModelData.text.length > TextModel.MODEL_TOKENIZATION_LIMIT);\n\n\t\tthis._options = new editorCommon.TextModelResolvedOptions(textModelData.options);\n\t\tthis._constructLines(textModelData.text);\n\t\tthis._setVersionId(1);\n\t\tthis._isDisposed = false;\n\t\tthis._isDisposing = false;\n\t}\n\n\tprotected _assertNotDisposed(): void {\n\t\tif (this._isDisposed) {\n\t\t\tthrow new Error('Model is disposed!');\n\t\t}\n\t}\n\n\tpublic isTooLargeForHavingAMode(): boolean {\n\t\tthis._assertNotDisposed();\n\t\treturn this._shouldDenyMode;\n\t}\n\n\tpublic isTooLargeForHavingARichMode(): boolean {\n\t\tthis._assertNotDisposed();\n\t\treturn this._shouldSimplifyMode;\n\t}\n\n\tpublic getOptions(): editorCommon.TextModelResolvedOptions {\n\t\tthis._assertNotDisposed();\n\t\treturn this._options;\n\t}\n\n\tpublic updateOptions(_newOpts: editorCommon.ITextModelUpdateOptions): void {\n\t\tthis._assertNotDisposed();\n\t\tlet tabSize = (typeof _newOpts.tabSize !== 'undefined') ? _newOpts.tabSize : this._options.tabSize;\n\t\tlet insertSpaces = (typeof _newOpts.insertSpaces !== 'undefined') ? _newOpts.insertSpaces : this._options.insertSpaces;\n\t\tlet trimAutoWhitespace = (typeof _newOpts.trimAutoWhitespace !== 'undefined') ? _newOpts.trimAutoWhitespace : this._options.trimAutoWhitespace;\n\n\t\tlet newOpts = new editorCommon.TextModelResolvedOptions({\n\t\t\ttabSize: tabSize,\n\t\t\tinsertSpaces: insertSpaces,\n\t\t\tdefaultEOL: this._options.defaultEOL,\n\t\t\ttrimAutoWhitespace: trimAutoWhitespace\n\t\t});\n\n\t\tif (this._options.equals(newOpts)) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet e = this._options.createChangeEvent(newOpts);\n\t\tthis._options = newOpts;\n\n\t\tif (e.tabSize) {\n\t\t\tlet newTabSize = this._options.tabSize;\n\t\t\tfor (let i = 0, len = this._lines.length; i < len; i++) {\n\t\t\t\tthis._lines[i].updateTabSize(newTabSize);\n\t\t\t}\n\t\t}\n\n\t\tthis._eventEmitter.emit(textModelEvents.TextModelEventType.ModelOptionsChanged, e);\n\t}\n\n\tpublic detectIndentation(defaultInsertSpaces: boolean, defaultTabSize: number): void {\n\t\tthis._assertNotDisposed();\n\t\tlet lines = this._lines.map(line => line.text);\n\t\tlet guessedIndentation = guessIndentation(lines, defaultTabSize, defaultInsertSpaces);\n\t\tthis.updateOptions({\n\t\t\tinsertSpaces: guessedIndentation.insertSpaces,\n\t\t\ttabSize: guessedIndentation.tabSize\n\t\t});\n\t}\n\n\tprivate static _normalizeIndentationFromWhitespace(str: string, tabSize: number, insertSpaces: boolean): string {\n\t\tlet spacesCnt = 0;\n\t\tfor (let i = 0; i < str.length; i++) {\n\t\t\tif (str.charAt(i) === '\\t') {\n\t\t\t\tspacesCnt += tabSize;\n\t\t\t} else {\n\t\t\t\tspacesCnt++;\n\t\t\t}\n\t\t}\n\n\t\tlet result = '';\n\t\tif (!insertSpaces) {\n\t\t\tlet tabsCnt = Math.floor(spacesCnt / tabSize);\n\t\t\tspacesCnt = spacesCnt % tabSize;\n\t\t\tfor (let i = 0; i < tabsCnt; i++) {\n\t\t\t\tresult += '\\t';\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = 0; i < spacesCnt; i++) {\n\t\t\tresult += ' ';\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic static normalizeIndentation(str: string, tabSize: number, insertSpaces: boolean): string {\n\t\tlet firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(str);\n\t\tif (firstNonWhitespaceIndex === -1) {\n\t\t\tfirstNonWhitespaceIndex = str.length;\n\t\t}\n\t\treturn TextModel._normalizeIndentationFromWhitespace(str.substring(0, firstNonWhitespaceIndex), tabSize, insertSpaces) + str.substring(firstNonWhitespaceIndex);\n\t}\n\n\tpublic normalizeIndentation(str: string): string {\n\t\tthis._assertNotDisposed();\n\t\treturn TextModel.normalizeIndentation(str, this._options.tabSize, this._options.insertSpaces);\n\t}\n\n\tpublic getOneIndent(): string {\n\t\tthis._assertNotDisposed();\n\t\tlet tabSize = this._options.tabSize;\n\t\tlet insertSpaces = this._options.insertSpaces;\n\n\t\tif (insertSpaces) {\n\t\t\tlet result = '';\n\t\t\tfor (let i = 0; i < tabSize; i++) {\n\t\t\t\tresult += ' ';\n\t\t\t}\n\t\t\treturn result;\n\t\t} else {\n\t\t\treturn '\\t';\n\t\t}\n\t}\n\n\tpublic getVersionId(): number {\n\t\tthis._assertNotDisposed();\n\t\treturn this._versionId;\n\t}\n\n\tpublic mightContainRTL(): boolean {\n\t\treturn this._mightContainRTL;\n\t}\n\n\tpublic mightContainNonBasicASCII(): boolean {\n\t\treturn this._mightContainNonBasicASCII;\n\t}\n\n\tpublic getAlternativeVersionId(): number {\n\t\tthis._assertNotDisposed();\n\t\treturn this._alternativeVersionId;\n\t}\n\n\tprivate _ensureLineStarts(): void {\n\t\tif (!this._lineStarts) {\n\t\t\tconst eolLength = this._EOL.length;\n\t\t\tconst linesLength = this._lines.length;\n\t\t\tconst lineStartValues = new Uint32Array(linesLength);\n\t\t\tfor (let i = 0; i < linesLength; i++) {\n\t\t\t\tlineStartValues[i] = this._lines[i].text.length + eolLength;\n\t\t\t}\n\t\t\tthis._lineStarts = new PrefixSumComputer(lineStartValues);\n\t\t}\n\t}\n\n\tpublic getOffsetAt(rawPosition: IPosition): number {\n\t\tthis._assertNotDisposed();\n\t\tlet position = this._validatePosition(rawPosition.lineNumber, rawPosition.column, false);\n\t\tthis._ensureLineStarts();\n\t\treturn this._lineStarts.getAccumulatedValue(position.lineNumber - 2) + position.column - 1;\n\t}\n\n\tpublic getPositionAt(offset: number): Position {\n\t\tthis._assertNotDisposed();\n\t\toffset = Math.floor(offset);\n\t\toffset = Math.max(0, offset);\n\n\t\tthis._ensureLineStarts();\n\t\tlet out = this._lineStarts.getIndexOf(offset);\n\n\t\tlet lineLength = this._lines[out.index].text.length;\n\n\t\t// Ensure we return a valid position\n\t\treturn new Position(out.index + 1, Math.min(out.remainder + 1, lineLength + 1));\n\t}\n\n\tprotected _increaseVersionId(): void {\n\t\tthis._setVersionId(this._versionId + 1);\n\t}\n\n\tprivate _setVersionId(newVersionId: number): void {\n\t\tthis._versionId = newVersionId;\n\t\tthis._alternativeVersionId = this._versionId;\n\t}\n\n\tprotected _overwriteAlternativeVersionId(newAlternativeVersionId: number): void {\n\t\tthis._alternativeVersionId = newAlternativeVersionId;\n\t}\n\n\tpublic isDisposed(): boolean {\n\t\treturn this._isDisposed;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._isDisposed = true;\n\t\t// Null out members, such that any use of a disposed model will throw exceptions sooner rather than later\n\t\tthis._lines = null;\n\t\tthis._EOL = null;\n\t\tthis._BOM = null;\n\n\t\tthis._eventEmitter.dispose();\n\t}\n\n\tprivate _emitContentChanged2(startLineNumber: number, startColumn: number, endLineNumber: number, endColumn: number, rangeLength: number, text: string, isUndoing: boolean, isRedoing: boolean, isFlush: boolean): void {\n\t\tconst e: textModelEvents.IModelContentChangedEvent = {\n\t\t\tchanges: [{\n\t\t\t\trange: new Range(startLineNumber, startColumn, endLineNumber, endColumn),\n\t\t\t\trangeLength: rangeLength,\n\t\t\t\ttext: text,\n\t\t\t}],\n\t\t\teol: this._EOL,\n\t\t\tversionId: this.getVersionId(),\n\t\t\tisUndoing: isUndoing,\n\t\t\tisRedoing: isRedoing,\n\t\t\tisFlush: isFlush\n\t\t};\n\t\tif (!this._isDisposing) {\n\t\t\tthis._eventEmitter.emit(textModelEvents.TextModelEventType.ModelContentChanged, e);\n\t\t}\n\t}\n\n\tprotected _resetValue(newValue: ITextSource): void {\n\t\tthis._constructLines(newValue);\n\t\tthis._increaseVersionId();\n\t}\n\n\tpublic equals(other: ITextSource): boolean {\n\t\tthis._assertNotDisposed();\n\t\tif (this._BOM !== other.BOM) {\n\t\t\treturn false;\n\t\t}\n\t\tif (this._EOL !== other.EOL) {\n\t\t\treturn false;\n\t\t}\n\t\tif (this._lines.length !== other.lines.length) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (let i = 0, len = this._lines.length; i < len; i++) {\n\t\t\tif (this._lines[i].text !== other.lines[i]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic setValue(value: string): void {\n\t\tthis._assertNotDisposed();\n\t\tif (value === null) {\n\t\t\t// There's nothing to do\n\t\t\treturn;\n\t\t}\n\t\tconst textSource = TextSource.fromString(value, this._options.defaultEOL);\n\t\tthis.setValueFromTextSource(textSource);\n\t}\n\n\tpublic setValueFromTextSource(newValue: ITextSource): void {\n\t\tthis._assertNotDisposed();\n\t\tif (newValue === null) {\n\t\t\t// There's nothing to do\n\t\t\treturn;\n\t\t}\n\t\tvar oldFullModelRange = this.getFullModelRange();\n\t\tvar oldModelValueLength = this.getValueLengthInRange(oldFullModelRange);\n\t\tvar endLineNumber = this.getLineCount();\n\t\tvar endColumn = this.getLineMaxColumn(endLineNumber);\n\n\t\tthis._resetValue(newValue);\n\n\t\tthis._emitModelRawContentChangedEvent(\n\t\t\tnew textModelEvents.ModelRawContentChangedEvent(\n\t\t\t\t[\n\t\t\t\t\tnew textModelEvents.ModelRawFlush()\n\t\t\t\t],\n\t\t\t\tthis._versionId,\n\t\t\t\tfalse,\n\t\t\t\tfalse\n\t\t\t)\n\t\t);\n\n\t\tthis._emitContentChanged2(1, 1, endLineNumber, endColumn, oldModelValueLength, this.getValue(), false, false, true);\n\t}\n\n\tpublic getValue(eol?: editorCommon.EndOfLinePreference, preserveBOM: boolean = false): string {\n\t\tthis._assertNotDisposed();\n\t\tvar fullModelRange = this.getFullModelRange();\n\t\tvar fullModelValue = this.getValueInRange(fullModelRange, eol);\n\n\t\tif (preserveBOM) {\n\t\t\treturn this._BOM + fullModelValue;\n\t\t}\n\n\t\treturn fullModelValue;\n\t}\n\n\tpublic getValueLength(eol?: editorCommon.EndOfLinePreference, preserveBOM: boolean = false): number {\n\t\tthis._assertNotDisposed();\n\t\tvar fullModelRange = this.getFullModelRange();\n\t\tvar fullModelValue = this.getValueLengthInRange(fullModelRange, eol);\n\n\t\tif (preserveBOM) {\n\t\t\treturn this._BOM.length + fullModelValue;\n\t\t}\n\n\t\treturn fullModelValue;\n\t}\n\n\tpublic getValueInRange(rawRange: IRange, eol: editorCommon.EndOfLinePreference = editorCommon.EndOfLinePreference.TextDefined): string {\n\t\tthis._assertNotDisposed();\n\t\tvar range = this.validateRange(rawRange);\n\n\t\tif (range.isEmpty()) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (range.startLineNumber === range.endLineNumber) {\n\t\t\treturn this._lines[range.startLineNumber - 1].text.substring(range.startColumn - 1, range.endColumn - 1);\n\t\t}\n\n\t\tvar lineEnding = this._getEndOfLine(eol),\n\t\t\tstartLineIndex = range.startLineNumber - 1,\n\t\t\tendLineIndex = range.endLineNumber - 1,\n\t\t\tresultLines: string[] = [];\n\n\t\tresultLines.push(this._lines[startLineIndex].text.substring(range.startColumn - 1));\n\t\tfor (var i = startLineIndex + 1; i < endLineIndex; i++) {\n\t\t\tresultLines.push(this._lines[i].text);\n\t\t}\n\t\tresultLines.push(this._lines[endLineIndex].text.substring(0, range.endColumn - 1));\n\n\t\treturn resultLines.join(lineEnding);\n\t}\n\n\tpublic getValueLengthInRange(rawRange: IRange, eol: editorCommon.EndOfLinePreference = editorCommon.EndOfLinePreference.TextDefined): number {\n\t\tthis._assertNotDisposed();\n\t\tvar range = this.validateRange(rawRange);\n\n\t\tif (range.isEmpty()) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tif (range.startLineNumber === range.endLineNumber) {\n\t\t\treturn (range.endColumn - range.startColumn);\n\t\t}\n\n\t\tlet startOffset = this.getOffsetAt(new Position(range.startLineNumber, range.startColumn));\n\t\tlet endOffset = this.getOffsetAt(new Position(range.endLineNumber, range.endColumn));\n\t\treturn endOffset - startOffset;\n\t}\n\n\tpublic isDominatedByLongLines(): boolean {\n\t\tthis._assertNotDisposed();\n\t\tvar smallLineCharCount = 0,\n\t\t\tlongLineCharCount = 0,\n\t\t\ti: number,\n\t\t\tlen: number,\n\t\t\tlines = this._lines,\n\t\t\tlineLength: number;\n\n\t\tfor (i = 0, len = this._lines.length; i < len; i++) {\n\t\t\tlineLength = lines[i].text.length;\n\t\t\tif (lineLength >= LONG_LINE_BOUNDARY) {\n\t\t\t\tlongLineCharCount += lineLength;\n\t\t\t} else {\n\t\t\t\tsmallLineCharCount += lineLength;\n\t\t\t}\n\t\t}\n\n\t\treturn (longLineCharCount > smallLineCharCount);\n\t}\n\n\tpublic getLineCount(): number {\n\t\tthis._assertNotDisposed();\n\t\treturn this._lines.length;\n\t}\n\n\tpublic getLineContent(lineNumber: number): string {\n\t\tthis._assertNotDisposed();\n\t\tif (lineNumber < 1 || lineNumber > this.getLineCount()) {\n\t\t\tthrow new Error('Illegal value ' + lineNumber + ' for `lineNumber`');\n\t\t}\n\n\t\treturn this._lines[lineNumber - 1].text;\n\t}\n\n\tpublic getIndentLevel(lineNumber: number): number {\n\t\tthis._assertNotDisposed();\n\t\tif (lineNumber < 1 || lineNumber > this.getLineCount()) {\n\t\t\tthrow new Error('Illegal value ' + lineNumber + ' for `lineNumber`');\n\t\t}\n\n\t\treturn this._lines[lineNumber - 1].getIndentLevel();\n\t}\n\n\tprotected _resetIndentRanges(): void {\n\t\tthis._indentRanges = null;\n\t}\n\n\tprivate _getIndentRanges(): IndentRange[] {\n\t\tif (!this._indentRanges) {\n\t\t\tthis._indentRanges = computeRanges(this);\n\t\t}\n\t\treturn this._indentRanges;\n\t}\n\n\tpublic getIndentRanges(): IndentRange[] {\n\t\tthis._assertNotDisposed();\n\t\tlet indentRanges = this._getIndentRanges();\n\t\treturn IndentRange.deepCloneArr(indentRanges);\n\t}\n\n\tprivate _toValidLineIndentGuide(lineNumber: number, indentGuide: number): number {\n\t\tlet lineIndentLevel = this._lines[lineNumber - 1].getIndentLevel();\n\t\tif (lineIndentLevel === -1) {\n\t\t\treturn indentGuide;\n\t\t}\n\t\tlet maxIndentGuide = Math.ceil(lineIndentLevel / this._options.tabSize);\n\t\treturn Math.min(maxIndentGuide, indentGuide);\n\t}\n\n\tpublic getLineIndentGuide(lineNumber: number): number {\n\t\tthis._assertNotDisposed();\n\t\tif (lineNumber < 1 || lineNumber > this.getLineCount()) {\n\t\t\tthrow new Error('Illegal value ' + lineNumber + ' for `lineNumber`');\n\t\t}\n\n\t\tlet indentRanges = this._getIndentRanges();\n\n\t\tfor (let i = indentRanges.length - 1; i >= 0; i--) {\n\t\t\tlet rng = indentRanges[i];\n\n\t\t\tif (rng.startLineNumber === lineNumber) {\n\t\t\t\treturn this._toValidLineIndentGuide(lineNumber, Math.ceil(rng.indent / this._options.tabSize));\n\t\t\t}\n\t\t\tif (rng.startLineNumber < lineNumber && lineNumber <= rng.endLineNumber) {\n\t\t\t\treturn this._toValidLineIndentGuide(lineNumber, 1 + Math.floor(rng.indent / this._options.tabSize));\n\t\t\t}\n\t\t\tif (rng.endLineNumber + 1 === lineNumber) {\n\t\t\t\tlet bestIndent = rng.indent;\n\t\t\t\twhile (i > 0) {\n\t\t\t\t\ti--;\n\t\t\t\t\trng = indentRanges[i];\n\t\t\t\t\tif (rng.endLineNumber + 1 === lineNumber) {\n\t\t\t\t\t\tbestIndent = rng.indent;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this._toValidLineIndentGuide(lineNumber, Math.ceil(bestIndent / this._options.tabSize));\n\t\t\t}\n\t\t}\n\n\t\treturn 0;\n\t}\n\n\tpublic getLinesContent(): string[] {\n\t\tthis._assertNotDisposed();\n\t\tvar r: string[] = [];\n\t\tfor (var i = 0, len = this._lines.length; i < len; i++) {\n\t\t\tr[i] = this._lines[i].text;\n\t\t}\n\t\treturn r;\n\t}\n\n\tpublic getEOL(): string {\n\t\tthis._assertNotDisposed();\n\t\treturn this._EOL;\n\t}\n\n\tpublic setEOL(eol: editorCommon.EndOfLineSequence): void {\n\t\tthis._assertNotDisposed();\n\t\tconst newEOL = (eol === editorCommon.EndOfLineSequence.CRLF ? '\\r\\n' : '\\n');\n\t\tif (this._EOL === newEOL) {\n\t\t\t// Nothing to do\n\t\t\treturn;\n\t\t}\n\n\t\tconst oldFullModelRange = this.getFullModelRange();\n\t\tconst oldModelValueLength = this.getValueLengthInRange(oldFullModelRange);\n\t\tconst endLineNumber = this.getLineCount();\n\t\tconst endColumn = this.getLineMaxColumn(endLineNumber);\n\n\t\tthis._EOL = newEOL;\n\t\tthis._lineStarts = null;\n\t\tthis._increaseVersionId();\n\n\t\tthis._emitModelRawContentChangedEvent(\n\t\t\tnew textModelEvents.ModelRawContentChangedEvent(\n\t\t\t\t[\n\t\t\t\t\tnew textModelEvents.ModelRawEOLChanged()\n\t\t\t\t],\n\t\t\t\tthis._versionId,\n\t\t\t\tfalse,\n\t\t\t\tfalse\n\t\t\t)\n\t\t);\n\n\t\tthis._emitContentChanged2(1, 1, endLineNumber, endColumn, oldModelValueLength, this.getValue(), false, false, false);\n\t}\n\n\tpublic getLineMinColumn(lineNumber: number): number {\n\t\tthis._assertNotDisposed();\n\t\treturn 1;\n\t}\n\n\tpublic getLineMaxColumn(lineNumber: number): number {\n\t\tthis._assertNotDisposed();\n\t\tif (lineNumber < 1 || lineNumber > this.getLineCount()) {\n\t\t\tthrow new Error('Illegal value ' + lineNumber + ' for `lineNumber`');\n\t\t}\n\n\t\treturn this._lines[lineNumber - 1].text.length + 1;\n\t}\n\n\tpublic getLineFirstNonWhitespaceColumn(lineNumber: number): number {\n\t\tthis._assertNotDisposed();\n\t\tif (lineNumber < 1 || lineNumber > this.getLineCount()) {\n\t\t\tthrow new Error('Illegal value ' + lineNumber + ' for `lineNumber`');\n\t\t}\n\n\t\tvar result = strings.firstNonWhitespaceIndex(this._lines[lineNumber - 1].text);\n\t\tif (result === -1) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn result + 1;\n\t}\n\n\tpublic getLineLastNonWhitespaceColumn(lineNumber: number): number {\n\t\tthis._assertNotDisposed();\n\t\tif (lineNumber < 1 || lineNumber > this.getLineCount()) {\n\t\t\tthrow new Error('Illegal value ' + lineNumber + ' for `lineNumber`');\n\t\t}\n\n\t\tvar result = strings.lastNonWhitespaceIndex(this._lines[lineNumber - 1].text);\n\t\tif (result === -1) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn result + 2;\n\t}\n\n\tpublic validateLineNumber(lineNumber: number): number {\n\t\tthis._assertNotDisposed();\n\t\tif (lineNumber < 1) {\n\t\t\tlineNumber = 1;\n\t\t}\n\t\tif (lineNumber > this._lines.length) {\n\t\t\tlineNumber = this._lines.length;\n\t\t}\n\t\treturn lineNumber;\n\t}\n\n\t/**\n\t * @param strict Do NOT allow a position inside a high-low surrogate pair\n\t */\n\tprivate _validatePosition(_lineNumber: number, _column: number, strict: boolean): Position {\n\t\tconst lineNumber = Math.floor(typeof _lineNumber === 'number' ? _lineNumber : 1);\n\t\tconst column = Math.floor(typeof _column === 'number' ? _column : 1);\n\n\t\tif (lineNumber < 1) {\n\t\t\treturn new Position(1, 1);\n\t\t}\n\n\t\tif (lineNumber > this._lines.length) {\n\t\t\treturn new Position(this._lines.length, this.getLineMaxColumn(this._lines.length));\n\t\t}\n\n\t\tif (column <= 1) {\n\t\t\treturn new Position(lineNumber, 1);\n\t\t}\n\n\t\tconst maxColumn = this.getLineMaxColumn(lineNumber);\n\t\tif (column >= maxColumn) {\n\t\t\treturn new Position(lineNumber, maxColumn);\n\t\t}\n\n\t\tif (strict) {\n\t\t\t// If the position would end up in the middle of a high-low surrogate pair,\n\t\t\t// we move it to before the pair\n\t\t\t// !!At this point, column > 1\n\t\t\tconst charCodeBefore = this._lines[lineNumber - 1].text.charCodeAt(column - 2);\n\t\t\tif (strings.isHighSurrogate(charCodeBefore)) {\n\t\t\t\treturn new Position(lineNumber, column - 1);\n\t\t\t}\n\t\t}\n\n\t\treturn new Position(lineNumber, column);\n\t}\n\n\tpublic validatePosition(position: IPosition): Position {\n\t\tthis._assertNotDisposed();\n\t\treturn this._validatePosition(position.lineNumber, position.column, true);\n\t}\n\n\tpublic validateRange(_range: IRange): Range {\n\t\tthis._assertNotDisposed();\n\t\tconst start = this._validatePosition(_range.startLineNumber, _range.startColumn, false);\n\t\tconst end = this._validatePosition(_range.endLineNumber, _range.endColumn, false);\n\n\t\tconst startLineNumber = start.lineNumber;\n\t\tconst startColumn = start.column;\n\t\tconst endLineNumber = end.lineNumber;\n\t\tconst endColumn = end.column;\n\n\t\tconst startLineText = this._lines[startLineNumber - 1].text;\n\t\tconst endLineText = this._lines[endLineNumber - 1].text;\n\n\t\tconst charCodeBeforeStart = (startColumn > 1 ? startLineText.charCodeAt(startColumn - 2) : 0);\n\t\tconst charCodeBeforeEnd = (endColumn > 1 && endColumn <= endLineText.length ? endLineText.charCodeAt(endColumn - 2) : 0);\n\n\t\tconst startInsideSurrogatePair = strings.isHighSurrogate(charCodeBeforeStart);\n\t\tconst endInsideSurrogatePair = strings.isHighSurrogate(charCodeBeforeEnd);\n\n\t\tif (!startInsideSurrogatePair && !endInsideSurrogatePair) {\n\t\t\treturn new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n\t\t}\n\n\t\tif (startLineNumber === endLineNumber && startColumn === endColumn) {\n\t\t\t// do not expand a collapsed range, simply move it to a valid location\n\t\t\treturn new Range(startLineNumber, startColumn - 1, endLineNumber, endColumn - 1);\n\t\t}\n\n\t\tif (startInsideSurrogatePair && endInsideSurrogatePair) {\n\t\t\t// expand range at both ends\n\t\t\treturn new Range(startLineNumber, startColumn - 1, endLineNumber, endColumn + 1);\n\t\t}\n\n\t\tif (startInsideSurrogatePair) {\n\t\t\t// only expand range at the start\n\t\t\treturn new Range(startLineNumber, startColumn - 1, endLineNumber, endColumn);\n\t\t}\n\n\t\t// only expand range at the end\n\t\treturn new Range(startLineNumber, startColumn, endLineNumber, endColumn + 1);\n\t}\n\n\tpublic modifyPosition(rawPosition: IPosition, offset: number): Position {\n\t\tthis._assertNotDisposed();\n\t\treturn this.getPositionAt(this.getOffsetAt(rawPosition) + offset);\n\t}\n\n\tpublic getFullModelRange(): Range {\n\t\tthis._assertNotDisposed();\n\t\tvar lineCount = this.getLineCount();\n\t\treturn new Range(1, 1, lineCount, this.getLineMaxColumn(lineCount));\n\t}\n\n\tprotected _emitModelRawContentChangedEvent(e: textModelEvents.ModelRawContentChangedEvent): void {\n\t\tif (this._isDisposing) {\n\t\t\t// Do not confuse listeners by emitting any event after disposing\n\t\t\treturn;\n\t\t}\n\t\tthis._eventEmitter.emit(textModelEvents.TextModelEventType.ModelRawContentChanged2, e);\n\t}\n\n\tprivate _constructLines(textSource: ITextSource): void {\n\t\tconst tabSize = this._options.tabSize;\n\t\tlet rawLines = textSource.lines;\n\t\tlet modelLines: ModelLine[] = [];\n\n\t\tfor (let i = 0, len = rawLines.length; i < len; i++) {\n\t\t\tmodelLines[i] = new ModelLine(i + 1, rawLines[i], tabSize);\n\t\t}\n\t\tthis._BOM = textSource.BOM;\n\t\tthis._mightContainRTL = textSource.containsRTL;\n\t\tthis._mightContainNonBasicASCII = !textSource.isBasicASCII;\n\t\tthis._EOL = textSource.EOL;\n\t\tthis._lines = modelLines;\n\t\tthis._lineStarts = null;\n\t\tthis._resetIndentRanges();\n\t}\n\n\tprivate _getEndOfLine(eol: editorCommon.EndOfLinePreference): string {\n\t\tswitch (eol) {\n\t\t\tcase editorCommon.EndOfLinePreference.LF:\n\t\t\t\treturn '\\n';\n\t\t\tcase editorCommon.EndOfLinePreference.CRLF:\n\t\t\t\treturn '\\r\\n';\n\t\t\tcase editorCommon.EndOfLinePreference.TextDefined:\n\t\t\t\treturn this.getEOL();\n\t\t}\n\t\tthrow new Error('Unknown EOL preference');\n\t}\n\n\tpublic findMatches(searchString: string, rawSearchScope: any, isRegex: boolean, matchCase: boolean, wordSeparators: string, captureMatches: boolean, limitResultCount: number = LIMIT_FIND_COUNT): editorCommon.FindMatch[] {\n\t\tthis._assertNotDisposed();\n\n\t\tlet searchRange: Range;\n\t\tif (Range.isIRange(rawSearchScope)) {\n\t\t\tsearchRange = this.validateRange(rawSearchScope);\n\t\t} else {\n\t\t\tsearchRange = this.getFullModelRange();\n\t\t}\n\n\t\treturn TextModelSearch.findMatches(this, new SearchParams(searchString, isRegex, matchCase, wordSeparators), searchRange, captureMatches, limitResultCount);\n\t}\n\n\tpublic findNextMatch(searchString: string, rawSearchStart: IPosition, isRegex: boolean, matchCase: boolean, wordSeparators: string, captureMatches: boolean): editorCommon.FindMatch {\n\t\tthis._assertNotDisposed();\n\t\tconst searchStart = this.validatePosition(rawSearchStart);\n\t\treturn TextModelSearch.findNextMatch(this, new SearchParams(searchString, isRegex, matchCase, wordSeparators), searchStart, captureMatches);\n\t}\n\n\tpublic findPreviousMatch(searchString: string, rawSearchStart: IPosition, isRegex: boolean, matchCase: boolean, wordSeparators: string, captureMatches: boolean): editorCommon.FindMatch {\n\t\tthis._assertNotDisposed();\n\t\tconst searchStart = this.validatePosition(rawSearchStart);\n\t\treturn TextModelSearch.findPreviousMatch(this, new SearchParams(searchString, isRegex, matchCase, wordSeparators), searchStart, captureMatches);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Position } from 'vs/editor/common/core/position';\nimport { CharCode } from 'vs/base/common/charCode';\nimport * as strings from 'vs/base/common/strings';\nimport { ICommand, TextModelResolvedOptions, IConfiguration, IModel } from 'vs/editor/common/editorCommon';\nimport { TextModel } from 'vs/editor/common/model/textModel';\nimport { Selection, ISelection } from 'vs/editor/common/core/selection';\nimport { Range } from 'vs/editor/common/core/range';\nimport { LanguageConfigurationRegistry } from 'vs/editor/common/modes/languageConfigurationRegistry';\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { LanguageIdentifier } from 'vs/editor/common/modes';\nimport { IAutoClosingPair } from 'vs/editor/common/modes/languageConfiguration';\nimport { IConfigurationChangedEvent } from 'vs/editor/common/config/editorOptions';\nimport { IViewModel } from 'vs/editor/common/viewModel/viewModel';\nimport { CursorChangeReason } from 'vs/editor/common/controller/cursorEvents';\nimport { VerticalRevealType } from 'vs/editor/common/view/viewEvents';\n\nexport interface IColumnSelectData {\n\ttoViewLineNumber: number;\n\ttoViewVisualColumn: number;\n}\n\nexport const enum RevealTarget {\n\tPrimary = 0,\n\tTopMost = 1,\n\tBottomMost = 2\n}\n\nexport interface ICursors {\n\treadonly context: CursorContext;\n\tgetPrimaryCursor(): CursorState;\n\tgetLastAddedCursorIndex(): number;\n\tgetAll(): CursorState[];\n\n\tgetColumnSelectData(): IColumnSelectData;\n\tsetColumnSelectData(columnSelectData: IColumnSelectData): void;\n\n\tsetStates(source: string, reason: CursorChangeReason, states: CursorState[]): void;\n\treveal(horizontal: boolean, target: RevealTarget): void;\n\trevealRange(revealHorizontal: boolean, viewRange: Range, verticalType: VerticalRevealType): void;\n\n\tscrollTo(desiredScrollTop: number): void;\n}\n\nexport interface CharacterMap {\n\t[char: string]: string;\n}\n\nexport class CursorConfiguration {\n\t_cursorMoveConfigurationBrand: void;\n\n\tpublic readonly readOnly: boolean;\n\tpublic readonly tabSize: number;\n\tpublic readonly insertSpaces: boolean;\n\tpublic readonly oneIndent: string;\n\tpublic readonly pageSize: number;\n\tpublic readonly lineHeight: number;\n\tpublic readonly useTabStops: boolean;\n\tpublic readonly wordSeparators: string;\n\tpublic readonly emptySelectionClipboard: boolean;\n\tpublic readonly autoClosingBrackets: boolean;\n\tpublic readonly autoIndent: boolean;\n\tpublic readonly autoClosingPairsOpen: CharacterMap;\n\tpublic readonly autoClosingPairsClose: CharacterMap;\n\tpublic readonly surroundingPairs: CharacterMap;\n\tpublic readonly electricChars: { [key: string]: boolean; };\n\n\tpublic static shouldRecreate(e: IConfigurationChangedEvent): boolean {\n\t\treturn (\n\t\t\te.layoutInfo\n\t\t\t|| e.wordSeparators\n\t\t\t|| e.emptySelectionClipboard\n\t\t\t|| e.autoClosingBrackets\n\t\t\t|| e.useTabStops\n\t\t\t|| e.lineHeight\n\t\t\t|| e.readOnly\n\t\t);\n\t}\n\n\tconstructor(\n\t\tlanguageIdentifier: LanguageIdentifier,\n\t\toneIndent: string,\n\t\tmodelOptions: TextModelResolvedOptions,\n\t\tconfiguration: IConfiguration\n\t) {\n\t\tlet c = configuration.editor;\n\n\t\tthis.readOnly = c.readOnly;\n\t\tthis.tabSize = modelOptions.tabSize;\n\t\tthis.insertSpaces = modelOptions.insertSpaces;\n\t\tthis.oneIndent = oneIndent;\n\t\tthis.pageSize = Math.floor(c.layoutInfo.height / c.fontInfo.lineHeight) - 2;\n\t\tthis.lineHeight = c.lineHeight;\n\t\tthis.useTabStops = c.useTabStops;\n\t\tthis.wordSeparators = c.wordSeparators;\n\t\tthis.emptySelectionClipboard = c.emptySelectionClipboard;\n\t\tthis.autoClosingBrackets = c.autoClosingBrackets;\n\t\tthis.autoIndent = c.autoIndent;\n\n\t\tthis.autoClosingPairsOpen = {};\n\t\tthis.autoClosingPairsClose = {};\n\t\tthis.surroundingPairs = {};\n\t\tthis.electricChars = {};\n\n\t\tlet electricChars = CursorConfiguration._getElectricCharacters(languageIdentifier);\n\t\tif (electricChars) {\n\t\t\tfor (let i = 0; i < electricChars.length; i++) {\n\t\t\t\tthis.electricChars[electricChars[i]] = true;\n\t\t\t}\n\t\t}\n\n\t\tlet autoClosingPairs = CursorConfiguration._getAutoClosingPairs(languageIdentifier);\n\t\tif (autoClosingPairs) {\n\t\t\tfor (let i = 0; i < autoClosingPairs.length; i++) {\n\t\t\t\tthis.autoClosingPairsOpen[autoClosingPairs[i].open] = autoClosingPairs[i].close;\n\t\t\t\tthis.autoClosingPairsClose[autoClosingPairs[i].close] = autoClosingPairs[i].open;\n\t\t\t}\n\t\t}\n\n\t\tlet surroundingPairs = CursorConfiguration._getSurroundingPairs(languageIdentifier);\n\t\tif (surroundingPairs) {\n\t\t\tfor (let i = 0; i < surroundingPairs.length; i++) {\n\t\t\t\tthis.surroundingPairs[surroundingPairs[i].open] = surroundingPairs[i].close;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic normalizeIndentation(str: string): string {\n\t\treturn TextModel.normalizeIndentation(str, this.tabSize, this.insertSpaces);\n\t}\n\n\tprivate static _getElectricCharacters(languageIdentifier: LanguageIdentifier): string[] {\n\t\ttry {\n\t\t\treturn LanguageConfigurationRegistry.getElectricCharacters(languageIdentifier.id);\n\t\t} catch (e) {\n\t\t\tonUnexpectedError(e);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate static _getAutoClosingPairs(languageIdentifier: LanguageIdentifier): IAutoClosingPair[] {\n\t\ttry {\n\t\t\treturn LanguageConfigurationRegistry.getAutoClosingPairs(languageIdentifier.id);\n\t\t} catch (e) {\n\t\t\tonUnexpectedError(e);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate static _getSurroundingPairs(languageIdentifier: LanguageIdentifier): IAutoClosingPair[] {\n\t\ttry {\n\t\t\treturn LanguageConfigurationRegistry.getSurroundingPairs(languageIdentifier.id);\n\t\t} catch (e) {\n\t\t\tonUnexpectedError(e);\n\t\t\treturn null;\n\t\t}\n\t}\n}\n\n/**\n * Represents a simple model (either the model or the view model).\n */\nexport interface ICursorSimpleModel {\n\tgetLineCount(): number;\n\tgetLineContent(lineNumber: number): string;\n\tgetLineMinColumn(lineNumber: number): number;\n\tgetLineMaxColumn(lineNumber: number): number;\n\tgetLineFirstNonWhitespaceColumn(lineNumber: number): number;\n\tgetLineLastNonWhitespaceColumn(lineNumber: number): number;\n}\n\n/**\n * Represents the cursor state on either the model or on the view model.\n */\nexport class SingleCursorState {\n\t_singleCursorStateBrand: void;\n\n\t// --- selection can start as a range (think double click and drag)\n\tpublic readonly selectionStart: Range;\n\tpublic readonly selectionStartLeftoverVisibleColumns: number;\n\tpublic readonly position: Position;\n\tpublic readonly leftoverVisibleColumns: number;\n\tpublic readonly selection: Selection;\n\n\tconstructor(\n\t\tselectionStart: Range,\n\t\tselectionStartLeftoverVisibleColumns: number,\n\t\tposition: Position,\n\t\tleftoverVisibleColumns: number,\n\t) {\n\t\tthis.selectionStart = selectionStart;\n\t\tthis.selectionStartLeftoverVisibleColumns = selectionStartLeftoverVisibleColumns;\n\t\tthis.position = position;\n\t\tthis.leftoverVisibleColumns = leftoverVisibleColumns;\n\t\tthis.selection = SingleCursorState._computeSelection(this.selectionStart, this.position);\n\t}\n\n\tpublic equals(other: SingleCursorState) {\n\t\treturn (\n\t\t\tthis.selectionStartLeftoverVisibleColumns === other.selectionStartLeftoverVisibleColumns\n\t\t\t&& this.leftoverVisibleColumns === other.leftoverVisibleColumns\n\t\t\t&& this.position.equals(other.position)\n\t\t\t&& this.selectionStart.equalsRange(other.selectionStart)\n\t\t);\n\t}\n\n\tpublic hasSelection(): boolean {\n\t\treturn (!this.selection.isEmpty() || !this.selectionStart.isEmpty());\n\t}\n\n\tpublic move(inSelectionMode: boolean, lineNumber: number, column: number, leftoverVisibleColumns: number): SingleCursorState {\n\t\tif (inSelectionMode) {\n\t\t\t// move just position\n\t\t\treturn new SingleCursorState(\n\t\t\t\tthis.selectionStart,\n\t\t\t\tthis.selectionStartLeftoverVisibleColumns,\n\t\t\t\tnew Position(lineNumber, column),\n\t\t\t\tleftoverVisibleColumns\n\t\t\t);\n\t\t} else {\n\t\t\t// move everything\n\t\t\treturn new SingleCursorState(\n\t\t\t\tnew Range(lineNumber, column, lineNumber, column),\n\t\t\t\tleftoverVisibleColumns,\n\t\t\t\tnew Position(lineNumber, column),\n\t\t\t\tleftoverVisibleColumns\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate static _computeSelection(selectionStart: Range, position: Position): Selection {\n\t\tlet startLineNumber: number, startColumn: number, endLineNumber: number, endColumn: number;\n\t\tif (selectionStart.isEmpty()) {\n\t\t\tstartLineNumber = selectionStart.startLineNumber;\n\t\t\tstartColumn = selectionStart.startColumn;\n\t\t\tendLineNumber = position.lineNumber;\n\t\t\tendColumn = position.column;\n\t\t} else {\n\t\t\tif (position.isBeforeOrEqual(selectionStart.getStartPosition())) {\n\t\t\t\tstartLineNumber = selectionStart.endLineNumber;\n\t\t\t\tstartColumn = selectionStart.endColumn;\n\t\t\t\tendLineNumber = position.lineNumber;\n\t\t\t\tendColumn = position.column;\n\t\t\t} else {\n\t\t\t\tstartLineNumber = selectionStart.startLineNumber;\n\t\t\t\tstartColumn = selectionStart.startColumn;\n\t\t\t\tendLineNumber = position.lineNumber;\n\t\t\t\tendColumn = position.column;\n\t\t\t}\n\t\t}\n\t\treturn new Selection(\n\t\t\tstartLineNumber,\n\t\t\tstartColumn,\n\t\t\tendLineNumber,\n\t\t\tendColumn\n\t\t);\n\t}\n}\n\nexport class CursorContext {\n\t_cursorContextBrand: void;\n\n\tpublic readonly model: IModel;\n\tpublic readonly viewModel: IViewModel;\n\tpublic readonly config: CursorConfiguration;\n\n\tconstructor(configuration: IConfiguration, model: IModel, viewModel: IViewModel) {\n\t\tthis.model = model;\n\t\tthis.viewModel = viewModel;\n\t\tthis.config = new CursorConfiguration(\n\t\t\tthis.model.getLanguageIdentifier(),\n\t\t\tthis.model.getOneIndent(),\n\t\t\tthis.model.getOptions(),\n\t\t\tconfiguration\n\t\t);\n\t}\n\n\tpublic validateViewPosition(viewPosition: Position, modelPosition: Position): Position {\n\t\treturn this.viewModel.coordinatesConverter.validateViewPosition(viewPosition, modelPosition);\n\t}\n\n\tpublic validateViewRange(viewRange: Range, expectedModelRange: Range): Range {\n\t\treturn this.viewModel.coordinatesConverter.validateViewRange(viewRange, expectedModelRange);\n\t}\n\n\tpublic convertViewRangeToModelRange(viewRange: Range): Range {\n\t\treturn this.viewModel.coordinatesConverter.convertViewRangeToModelRange(viewRange);\n\t}\n\n\tpublic convertViewPositionToModelPosition(lineNumber: number, column: number): Position {\n\t\treturn this.viewModel.coordinatesConverter.convertViewPositionToModelPosition(new Position(lineNumber, column));\n\t}\n\n\tpublic convertModelPositionToViewPosition(modelPosition: Position): Position {\n\t\treturn this.viewModel.coordinatesConverter.convertModelPositionToViewPosition(modelPosition);\n\t}\n\n\tpublic convertModelRangeToViewRange(modelRange: Range): Range {\n\t\treturn this.viewModel.coordinatesConverter.convertModelRangeToViewRange(modelRange);\n\t}\n\n\tpublic getScrollTop(): number {\n\t\treturn this.viewModel.viewLayout.getScrollTop();\n\t}\n\n\tpublic getCompletelyVisibleViewRange(): Range {\n\t\treturn this.viewModel.getCompletelyVisibleViewRange();\n\t}\n\n\tpublic getCompletelyVisibleModelRange(): Range {\n\t\tconst viewRange = this.viewModel.getCompletelyVisibleViewRange();\n\t\treturn this.viewModel.coordinatesConverter.convertViewRangeToModelRange(viewRange);\n\t}\n\n\tpublic getCompletelyVisibleViewRangeAtScrollTop(scrollTop: number): Range {\n\t\treturn this.viewModel.getCompletelyVisibleViewRangeAtScrollTop(scrollTop);\n\t}\n\n\tpublic getCompletelyVisibleModelRangeAtScrollTop(scrollTop: number): Range {\n\t\tconst viewRange = this.viewModel.getCompletelyVisibleViewRangeAtScrollTop(scrollTop);\n\t\treturn this.viewModel.coordinatesConverter.convertViewRangeToModelRange(viewRange);\n\t}\n\n\tpublic getVerticalOffsetForViewLine(viewLineNumber: number): number {\n\t\treturn this.viewModel.viewLayout.getVerticalOffsetForLineNumber(viewLineNumber);\n\t}\n}\n\nexport class CursorState {\n\t_cursorStateBrand: void;\n\n\tpublic static fromModelState(modelState: SingleCursorState): CursorState {\n\t\treturn new CursorState(modelState, null);\n\t}\n\n\tpublic static fromViewState(viewState: SingleCursorState): CursorState {\n\t\treturn new CursorState(null, viewState);\n\t}\n\n\tpublic static fromModelSelection(modelSelection: ISelection): CursorState {\n\t\tconst selectionStartLineNumber = modelSelection.selectionStartLineNumber;\n\t\tconst selectionStartColumn = modelSelection.selectionStartColumn;\n\t\tconst positionLineNumber = modelSelection.positionLineNumber;\n\t\tconst positionColumn = modelSelection.positionColumn;\n\t\tconst modelState = new SingleCursorState(\n\t\t\tnew Range(selectionStartLineNumber, selectionStartColumn, selectionStartLineNumber, selectionStartColumn), 0,\n\t\t\tnew Position(positionLineNumber, positionColumn), 0\n\t\t);\n\t\treturn CursorState.fromModelState(modelState);\n\t}\n\n\tpublic static fromModelSelections(modelSelections: ISelection[]): CursorState[] {\n\t\tlet states: CursorState[] = [];\n\t\tfor (let i = 0, len = modelSelections.length; i < len; i++) {\n\t\t\tstates[i] = this.fromModelSelection(modelSelections[i]);\n\t\t}\n\t\treturn states;\n\t}\n\n\tpublic static ensureInEditableRange(context: CursorContext, states: CursorState[]): CursorState[] {\n\t\tconst model = context.model;\n\t\tif (!model.hasEditableRange()) {\n\t\t\treturn states;\n\t\t}\n\n\t\tconst modelEditableRange = model.getEditableRange();\n\t\tconst viewEditableRange = context.convertModelRangeToViewRange(modelEditableRange);\n\n\t\tlet result: CursorState[] = [];\n\t\tfor (let i = 0, len = states.length; i < len; i++) {\n\t\t\tconst state = states[i];\n\n\t\t\tif (state.modelState) {\n\t\t\t\tconst newModelState = CursorState._ensureInEditableRange(state.modelState, modelEditableRange);\n\t\t\t\tresult[i] = newModelState ? CursorState.fromModelState(newModelState) : state;\n\t\t\t} else {\n\t\t\t\tconst newViewState = CursorState._ensureInEditableRange(state.viewState, viewEditableRange);\n\t\t\t\tresult[i] = newViewState ? CursorState.fromViewState(newViewState) : state;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _ensureInEditableRange(state: SingleCursorState, editableRange: Range): SingleCursorState {\n\t\tconst position = state.position;\n\n\t\tif (position.lineNumber < editableRange.startLineNumber || (position.lineNumber === editableRange.startLineNumber && position.column < editableRange.startColumn)) {\n\t\t\treturn new SingleCursorState(\n\t\t\t\tstate.selectionStart, state.selectionStartLeftoverVisibleColumns,\n\t\t\t\tnew Position(editableRange.startLineNumber, editableRange.startColumn), 0\n\t\t\t);\n\t\t}\n\n\t\tif (position.lineNumber > editableRange.endLineNumber || (position.lineNumber === editableRange.endLineNumber && position.column > editableRange.endColumn)) {\n\t\t\treturn new SingleCursorState(\n\t\t\t\tstate.selectionStart, state.selectionStartLeftoverVisibleColumns,\n\t\t\t\tnew Position(editableRange.endLineNumber, editableRange.endColumn), 0\n\t\t\t);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\treadonly modelState: SingleCursorState;\n\treadonly viewState: SingleCursorState;\n\n\tconstructor(modelState: SingleCursorState, viewState: SingleCursorState) {\n\t\tthis.modelState = modelState;\n\t\tthis.viewState = viewState;\n\t}\n\n\tpublic equals(other: CursorState): boolean {\n\t\treturn (this.viewState.equals(other.viewState) && this.modelState.equals(other.viewState));\n\t}\n}\n\nexport class EditOperationResult {\n\t_editOperationResultBrand: void;\n\n\treadonly commands: ICommand[];\n\treadonly shouldPushStackElementBefore: boolean;\n\treadonly shouldPushStackElementAfter: boolean;\n\n\tconstructor(\n\t\tcommands: ICommand[],\n\t\topts: {\n\t\t\tshouldPushStackElementBefore: boolean;\n\t\t\tshouldPushStackElementAfter: boolean;\n\t\t}\n\t) {\n\t\tthis.commands = commands;\n\t\tthis.shouldPushStackElementBefore = opts.shouldPushStackElementBefore;\n\t\tthis.shouldPushStackElementAfter = opts.shouldPushStackElementAfter;\n\t}\n}\n\n/**\n * Common operations that work and make sense both on the model and on the view model.\n */\nexport class CursorColumns {\n\n\tpublic static isLowSurrogate(model: ICursorSimpleModel, lineNumber: number, charOffset: number): boolean {\n\t\tlet lineContent = model.getLineContent(lineNumber);\n\t\tif (charOffset < 0 || charOffset >= lineContent.length) {\n\t\t\treturn false;\n\t\t}\n\t\treturn strings.isLowSurrogate(lineContent.charCodeAt(charOffset));\n\t}\n\n\tpublic static isHighSurrogate(model: ICursorSimpleModel, lineNumber: number, charOffset: number): boolean {\n\t\tlet lineContent = model.getLineContent(lineNumber);\n\t\tif (charOffset < 0 || charOffset >= lineContent.length) {\n\t\t\treturn false;\n\t\t}\n\t\treturn strings.isHighSurrogate(lineContent.charCodeAt(charOffset));\n\t}\n\n\tpublic static isInsideSurrogatePair(model: ICursorSimpleModel, lineNumber: number, column: number): boolean {\n\t\treturn this.isHighSurrogate(model, lineNumber, column - 2);\n\t}\n\n\tpublic static visibleColumnFromColumn(lineContent: string, column: number, tabSize: number): number {\n\t\tlet endOffset = lineContent.length;\n\t\tif (endOffset > column - 1) {\n\t\t\tendOffset = column - 1;\n\t\t}\n\n\t\tlet result = 0;\n\t\tfor (let i = 0; i < endOffset; i++) {\n\t\t\tlet charCode = lineContent.charCodeAt(i);\n\t\t\tif (charCode === CharCode.Tab) {\n\t\t\t\tresult = this.nextTabStop(result, tabSize);\n\t\t\t} else {\n\t\t\t\tresult = result + 1;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic static visibleColumnFromColumn2(config: CursorConfiguration, model: ICursorSimpleModel, position: Position): number {\n\t\treturn this.visibleColumnFromColumn(model.getLineContent(position.lineNumber), position.column, config.tabSize);\n\t}\n\n\tpublic static columnFromVisibleColumn(lineContent: string, visibleColumn: number, tabSize: number): number {\n\t\tif (visibleColumn <= 0) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst lineLength = lineContent.length;\n\n\t\tlet beforeVisibleColumn = 0;\n\t\tfor (let i = 0; i < lineLength; i++) {\n\t\t\tlet charCode = lineContent.charCodeAt(i);\n\n\t\t\tlet afterVisibleColumn: number;\n\t\t\tif (charCode === CharCode.Tab) {\n\t\t\t\tafterVisibleColumn = this.nextTabStop(beforeVisibleColumn, tabSize);\n\t\t\t} else {\n\t\t\t\tafterVisibleColumn = beforeVisibleColumn + 1;\n\t\t\t}\n\n\t\t\tif (afterVisibleColumn >= visibleColumn) {\n\t\t\t\tlet prevDelta = visibleColumn - beforeVisibleColumn;\n\t\t\t\tlet afterDelta = afterVisibleColumn - visibleColumn;\n\t\t\t\tif (afterDelta < prevDelta) {\n\t\t\t\t\treturn i + 2;\n\t\t\t\t} else {\n\t\t\t\t\treturn i + 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbeforeVisibleColumn = afterVisibleColumn;\n\t\t}\n\n\t\t// walked the entire string\n\t\treturn lineLength + 1;\n\t}\n\n\tpublic static columnFromVisibleColumn2(config: CursorConfiguration, model: ICursorSimpleModel, lineNumber: number, visibleColumn: number): number {\n\t\tlet result = this.columnFromVisibleColumn(model.getLineContent(lineNumber), visibleColumn, config.tabSize);\n\n\t\tlet minColumn = model.getLineMinColumn(lineNumber);\n\t\tif (result < minColumn) {\n\t\t\treturn minColumn;\n\t\t}\n\n\t\tlet maxColumn = model.getLineMaxColumn(lineNumber);\n\t\tif (result > maxColumn) {\n\t\t\treturn maxColumn;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * ATTENTION: This works with 0-based columns (as oposed to the regular 1-based columns)\n\t */\n\tpublic static nextTabStop(visibleColumn: number, tabSize: number): number {\n\t\treturn visibleColumn + tabSize - visibleColumn % tabSize;\n\t}\n\n\t/**\n\t * ATTENTION: This works with 0-based columns (as oposed to the regular 1-based columns)\n\t */\n\tpublic static prevTabStop(column: number, tabSize: number): number {\n\t\treturn column - 1 - (column - 1) % tabSize;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as strings from 'vs/base/common/strings';\nimport { CursorColumns } from 'vs/editor/common/controller/cursorCommon';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection, SelectionDirection } from 'vs/editor/common/core/selection';\nimport { ICommand, ICursorStateComputerData, IEditOperationBuilder, ITokenizedModel } from 'vs/editor/common/editorCommon';\nimport { LanguageConfigurationRegistry } from 'vs/editor/common/modes/languageConfigurationRegistry';\nimport { CharCode } from 'vs/base/common/charCode';\n\nexport interface IShiftCommandOpts {\n\tisUnshift: boolean;\n\ttabSize: number;\n\toneIndent: string;\n\tuseTabStops: boolean;\n}\n\nexport class ShiftCommand implements ICommand {\n\n\tpublic static unshiftIndentCount(line: string, column: number, tabSize: number): number {\n\t\t// Determine the visible column where the content starts\n\t\tlet contentStartVisibleColumn = CursorColumns.visibleColumnFromColumn(line, column, tabSize);\n\n\t\tlet desiredTabStop = CursorColumns.prevTabStop(contentStartVisibleColumn, tabSize);\n\n\t\t// The `desiredTabStop` is a multiple of `tabSize` => determine the number of indents\n\t\treturn desiredTabStop / tabSize;\n\t}\n\n\tpublic static shiftIndentCount(line: string, column: number, tabSize: number): number {\n\t\t// Determine the visible column where the content starts\n\t\tlet contentStartVisibleColumn = CursorColumns.visibleColumnFromColumn(line, column, tabSize);\n\n\t\tlet desiredTabStop = CursorColumns.nextTabStop(contentStartVisibleColumn, tabSize);\n\n\t\t// The `desiredTabStop` is a multiple of `tabSize` => determine the number of indents\n\t\treturn desiredTabStop / tabSize;\n\t}\n\n\tprivate _opts: IShiftCommandOpts;\n\tprivate _selection: Selection;\n\tprivate _selectionId: string;\n\tprivate _useLastEditRangeForCursorEndPosition: boolean;\n\tprivate _selectionStartColumnStaysPut: boolean;\n\n\tconstructor(range: Selection, opts: IShiftCommandOpts) {\n\t\tthis._opts = opts;\n\t\tthis._selection = range;\n\t\tthis._useLastEditRangeForCursorEndPosition = false;\n\t\tthis._selectionStartColumnStaysPut = false;\n\t}\n\n\tprivate _addEditOperation(builder: IEditOperationBuilder, range: Range, text: string) {\n\t\tif (this._useLastEditRangeForCursorEndPosition) {\n\t\t\tbuilder.addTrackedEditOperation(range, text);\n\t\t} else {\n\t\t\tbuilder.addEditOperation(range, text);\n\t\t}\n\t}\n\n\tpublic getEditOperations(model: ITokenizedModel, builder: IEditOperationBuilder): void {\n\t\tconst startLine = this._selection.startLineNumber;\n\n\t\tlet endLine = this._selection.endLineNumber;\n\t\tif (this._selection.endColumn === 1 && startLine !== endLine) {\n\t\t\tendLine = endLine - 1;\n\t\t}\n\n\t\tconst tabSize = this._opts.tabSize;\n\t\tconst oneIndent = this._opts.oneIndent;\n\t\tconst shouldIndentEmptyLines = (startLine === endLine);\n\n\t\t// if indenting or outdenting on a whitespace only line\n\t\tif (this._selection.isEmpty()) {\n\t\t\tif (/^\\s*$/.test(model.getLineContent(startLine))) {\n\t\t\t\tthis._useLastEditRangeForCursorEndPosition = true;\n\t\t\t}\n\t\t}\n\n\t\tif (this._opts.useTabStops) {\n\t\t\t// indents[i] represents i * oneIndent\n\t\t\tlet indents: string[] = ['', oneIndent];\n\n\t\t\t// keep track of previous line's \"miss-alignment\"\n\t\t\tlet previousLineExtraSpaces = 0, extraSpaces = 0;\n\t\t\tfor (let lineNumber = startLine; lineNumber <= endLine; lineNumber++ , previousLineExtraSpaces = extraSpaces) {\n\t\t\t\textraSpaces = 0;\n\t\t\t\tlet lineText = model.getLineContent(lineNumber);\n\t\t\t\tlet indentationEndIndex = strings.firstNonWhitespaceIndex(lineText);\n\n\t\t\t\tif (this._opts.isUnshift && (lineText.length === 0 || indentationEndIndex === 0)) {\n\t\t\t\t\t// empty line or line with no leading whitespace => nothing to do\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!shouldIndentEmptyLines && !this._opts.isUnshift && lineText.length === 0) {\n\t\t\t\t\t// do not indent empty lines => nothing to do\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (indentationEndIndex === -1) {\n\t\t\t\t\t// the entire line is whitespace\n\t\t\t\t\tindentationEndIndex = lineText.length;\n\t\t\t\t}\n\n\t\t\t\tif (lineNumber > 1) {\n\t\t\t\t\tlet contentStartVisibleColumn = CursorColumns.visibleColumnFromColumn(lineText, indentationEndIndex + 1, tabSize);\n\t\t\t\t\tif (contentStartVisibleColumn % tabSize !== 0) {\n\t\t\t\t\t\t// The current line is \"miss-aligned\", so let's see if this is expected...\n\t\t\t\t\t\t// This can only happen when it has trailing commas in the indent\n\t\t\t\t\t\tlet enterAction = LanguageConfigurationRegistry.getRawEnterActionAtPosition(model, lineNumber - 1, model.getLineMaxColumn(lineNumber - 1));\n\t\t\t\t\t\tif (enterAction) {\n\t\t\t\t\t\t\textraSpaces = previousLineExtraSpaces;\n\t\t\t\t\t\t\tif (enterAction.appendText) {\n\t\t\t\t\t\t\t\tfor (let j = 0, lenJ = enterAction.appendText.length; j < lenJ && extraSpaces < tabSize; j++) {\n\t\t\t\t\t\t\t\t\tif (enterAction.appendText.charCodeAt(j) === CharCode.Space) {\n\t\t\t\t\t\t\t\t\t\textraSpaces++;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (enterAction.removeText) {\n\t\t\t\t\t\t\t\textraSpaces = Math.max(0, extraSpaces - enterAction.removeText);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Act as if `prefixSpaces` is not part of the indentation\n\t\t\t\t\t\t\tfor (let j = 0; j < extraSpaces; j++) {\n\t\t\t\t\t\t\t\tif (indentationEndIndex === 0 || lineText.charCodeAt(indentationEndIndex - 1) !== CharCode.Space) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tindentationEndIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\n\t\t\t\tif (this._opts.isUnshift && indentationEndIndex === 0) {\n\t\t\t\t\t// line with no leading whitespace => nothing to do\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet desiredIndentCount: number;\n\t\t\t\tif (this._opts.isUnshift) {\n\t\t\t\t\tdesiredIndentCount = ShiftCommand.unshiftIndentCount(lineText, indentationEndIndex + 1, tabSize);\n\t\t\t\t} else {\n\t\t\t\t\tdesiredIndentCount = ShiftCommand.shiftIndentCount(lineText, indentationEndIndex + 1, tabSize);\n\t\t\t\t}\n\n\t\t\t\t// Fill `indents`, as needed\n\t\t\t\tfor (let j = indents.length; j <= desiredIndentCount; j++) {\n\t\t\t\t\tindents[j] = indents[j - 1] + oneIndent;\n\t\t\t\t}\n\n\t\t\t\tthis._addEditOperation(builder, new Range(lineNumber, 1, lineNumber, indentationEndIndex + 1), indents[desiredIndentCount]);\n\t\t\t\tif (lineNumber === startLine) {\n\t\t\t\t\t// Force the startColumn to stay put because we're inserting after it\n\t\t\t\t\tthis._selectionStartColumnStaysPut = (this._selection.startColumn <= indentationEndIndex + 1);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\n\t\t\tfor (let lineNumber = startLine; lineNumber <= endLine; lineNumber++) {\n\t\t\t\tconst lineText = model.getLineContent(lineNumber);\n\t\t\t\tlet indentationEndIndex = strings.firstNonWhitespaceIndex(lineText);\n\n\t\t\t\tif (this._opts.isUnshift && (lineText.length === 0 || indentationEndIndex === 0)) {\n\t\t\t\t\t// empty line or line with no leading whitespace => nothing to do\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!shouldIndentEmptyLines && !this._opts.isUnshift && lineText.length === 0) {\n\t\t\t\t\t// do not indent empty lines => nothing to do\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (indentationEndIndex === -1) {\n\t\t\t\t\t// the entire line is whitespace\n\t\t\t\t\tindentationEndIndex = lineText.length;\n\t\t\t\t}\n\n\t\t\t\tif (this._opts.isUnshift && indentationEndIndex === 0) {\n\t\t\t\t\t// line with no leading whitespace => nothing to do\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (this._opts.isUnshift) {\n\n\t\t\t\t\tindentationEndIndex = Math.min(indentationEndIndex, tabSize);\n\t\t\t\t\tfor (let i = 0; i < indentationEndIndex; i++) {\n\t\t\t\t\t\tconst chr = lineText.charCodeAt(i);\n\t\t\t\t\t\tif (chr === CharCode.Tab) {\n\t\t\t\t\t\t\tindentationEndIndex = i + 1;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._addEditOperation(builder, new Range(lineNumber, 1, lineNumber, indentationEndIndex + 1), '');\n\t\t\t\t} else {\n\t\t\t\t\tthis._addEditOperation(builder, new Range(lineNumber, 1, lineNumber, 1), oneIndent);\n\t\t\t\t\tif (lineNumber === startLine) {\n\t\t\t\t\t\t// Force the startColumn to stay put because we're inserting after it\n\t\t\t\t\t\tthis._selectionStartColumnStaysPut = (this._selection.startColumn === 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._selectionId = builder.trackSelection(this._selection);\n\t}\n\n\tpublic computeCursorState(model: ITokenizedModel, helper: ICursorStateComputerData): Selection {\n\t\tif (this._useLastEditRangeForCursorEndPosition) {\n\t\t\tlet lastOp = helper.getInverseEditOperations()[0];\n\t\t\treturn new Selection(lastOp.range.endLineNumber, lastOp.range.endColumn, lastOp.range.endLineNumber, lastOp.range.endColumn);\n\t\t}\n\t\tconst result = helper.getTrackedSelection(this._selectionId);\n\n\t\tif (this._selectionStartColumnStaysPut) {\n\t\t\t// The selection start should not move\n\t\t\tlet initialStartColumn = this._selection.startColumn;\n\t\t\tlet resultStartColumn = result.startColumn;\n\t\t\tif (resultStartColumn <= initialStartColumn) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tif (result.getDirection() === SelectionDirection.LTR) {\n\t\t\t\treturn new Selection(result.startLineNumber, initialStartColumn, result.endLineNumber, result.endColumn);\n\t\t\t}\n\t\t\treturn new Selection(result.endLineNumber, result.endColumn, result.startLineNumber, initialStartColumn);\n\t\t}\n\n\t\treturn result;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport { SingleCursorState, CursorColumns, CursorConfiguration, ICursorSimpleModel } from 'vs/editor/common/controller/cursorCommon';\n\nexport interface IColumnSelectResult {\n\tviewStates: SingleCursorState[];\n\treversed: boolean;\n\ttoLineNumber: number;\n\ttoVisualColumn: number;\n}\n\nexport class ColumnSelection {\n\n\tprivate static _columnSelect(config: CursorConfiguration, model: ICursorSimpleModel, fromLineNumber: number, fromVisibleColumn: number, toLineNumber: number, toVisibleColumn: number): IColumnSelectResult {\n\t\tlet lineCount = Math.abs(toLineNumber - fromLineNumber) + 1;\n\t\tlet reversed = (fromLineNumber > toLineNumber);\n\t\tlet isRTL = (fromVisibleColumn > toVisibleColumn);\n\t\tlet isLTR = (fromVisibleColumn < toVisibleColumn);\n\n\t\tlet result: SingleCursorState[] = [];\n\n\t\t// console.log(`fromVisibleColumn: ${fromVisibleColumn}, toVisibleColumn: ${toVisibleColumn}`);\n\n\t\tfor (let i = 0; i < lineCount; i++) {\n\t\t\tlet lineNumber = fromLineNumber + (reversed ? -i : i);\n\n\t\t\tlet startColumn = CursorColumns.columnFromVisibleColumn2(config, model, lineNumber, fromVisibleColumn);\n\t\t\tlet endColumn = CursorColumns.columnFromVisibleColumn2(config, model, lineNumber, toVisibleColumn);\n\t\t\tlet visibleStartColumn = CursorColumns.visibleColumnFromColumn2(config, model, new Position(lineNumber, startColumn));\n\t\t\tlet visibleEndColumn = CursorColumns.visibleColumnFromColumn2(config, model, new Position(lineNumber, endColumn));\n\n\t\t\t// console.log(`lineNumber: ${lineNumber}: visibleStartColumn: ${visibleStartColumn}, visibleEndColumn: ${visibleEndColumn}`);\n\n\t\t\tif (isLTR) {\n\t\t\t\tif (visibleStartColumn > toVisibleColumn) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (visibleEndColumn < fromVisibleColumn) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (isRTL) {\n\t\t\t\tif (visibleEndColumn > fromVisibleColumn) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (visibleStartColumn < toVisibleColumn) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tresult.push(new SingleCursorState(\n\t\t\t\tnew Range(lineNumber, startColumn, lineNumber, startColumn), 0,\n\t\t\t\tnew Position(lineNumber, endColumn), 0\n\t\t\t));\n\t\t}\n\n\t\treturn {\n\t\t\tviewStates: result,\n\t\t\treversed: reversed,\n\t\t\ttoLineNumber: toLineNumber,\n\t\t\ttoVisualColumn: toVisibleColumn\n\t\t};\n\t}\n\n\tpublic static columnSelect(config: CursorConfiguration, model: ICursorSimpleModel, fromViewSelection: Selection, toViewLineNumber: number, toViewVisualColumn: number): IColumnSelectResult {\n\t\tconst fromViewPosition = new Position(fromViewSelection.selectionStartLineNumber, fromViewSelection.selectionStartColumn);\n\t\tconst fromViewVisibleColumn = CursorColumns.visibleColumnFromColumn2(config, model, fromViewPosition);\n\t\treturn ColumnSelection._columnSelect(config, model, fromViewPosition.lineNumber, fromViewVisibleColumn, toViewLineNumber, toViewVisualColumn);\n\t}\n\n\tpublic static columnSelectLeft(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, toViewLineNumber: number, toViewVisualColumn: number): IColumnSelectResult {\n\t\tif (toViewVisualColumn > 1) {\n\t\t\ttoViewVisualColumn--;\n\t\t}\n\n\t\treturn this.columnSelect(config, model, cursor.selection, toViewLineNumber, toViewVisualColumn);\n\t}\n\n\tpublic static columnSelectRight(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, toViewLineNumber: number, toViewVisualColumn: number): IColumnSelectResult {\n\t\tlet maxVisualViewColumn = 0;\n\t\tlet minViewLineNumber = Math.min(cursor.position.lineNumber, toViewLineNumber);\n\t\tlet maxViewLineNumber = Math.max(cursor.position.lineNumber, toViewLineNumber);\n\t\tfor (let lineNumber = minViewLineNumber; lineNumber <= maxViewLineNumber; lineNumber++) {\n\t\t\tlet lineMaxViewColumn = model.getLineMaxColumn(lineNumber);\n\t\t\tlet lineMaxVisualViewColumn = CursorColumns.visibleColumnFromColumn2(config, model, new Position(lineNumber, lineMaxViewColumn));\n\t\t\tmaxVisualViewColumn = Math.max(maxVisualViewColumn, lineMaxVisualViewColumn);\n\t\t}\n\n\t\tif (toViewVisualColumn < maxVisualViewColumn) {\n\t\t\ttoViewVisualColumn++;\n\t\t}\n\n\t\treturn this.columnSelect(config, model, cursor.selection, toViewLineNumber, toViewVisualColumn);\n\t}\n\n\tpublic static columnSelectUp(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, isPaged: boolean, toViewLineNumber: number, toViewVisualColumn: number): IColumnSelectResult {\n\t\tlet linesCount = isPaged ? config.pageSize : 1;\n\n\t\ttoViewLineNumber -= linesCount;\n\t\tif (toViewLineNumber < 1) {\n\t\t\ttoViewLineNumber = 1;\n\t\t}\n\n\t\treturn this.columnSelect(config, model, cursor.selection, toViewLineNumber, toViewVisualColumn);\n\t}\n\n\tpublic static columnSelectDown(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, isPaged: boolean, toViewLineNumber: number, toViewVisualColumn: number): IColumnSelectResult {\n\t\tlet linesCount = isPaged ? config.pageSize : 1;\n\n\t\ttoViewLineNumber += linesCount;\n\t\tif (toViewLineNumber > model.getLineCount()) {\n\t\t\ttoViewLineNumber = model.getLineCount();\n\t\t}\n\n\t\treturn this.columnSelect(config, model, cursor.selection, toViewLineNumber, toViewVisualColumn);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { SingleCursorState, CursorColumns, CursorConfiguration, ICursorSimpleModel } from 'vs/editor/common/controller/cursorCommon';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\n\nexport class CursorPosition {\n\t_cursorPositionBrand: void;\n\n\tpublic readonly lineNumber: number;\n\tpublic readonly column: number;\n\tpublic readonly leftoverVisibleColumns: number;\n\n\tconstructor(lineNumber: number, column: number, leftoverVisibleColumns: number) {\n\t\tthis.lineNumber = lineNumber;\n\t\tthis.column = column;\n\t\tthis.leftoverVisibleColumns = leftoverVisibleColumns;\n\t}\n}\n\nexport class MoveOperations {\n\n\tpublic static left(config: CursorConfiguration, model: ICursorSimpleModel, lineNumber: number, column: number): CursorPosition {\n\n\t\tif (column > model.getLineMinColumn(lineNumber)) {\n\t\t\tif (CursorColumns.isLowSurrogate(model, lineNumber, column - 2)) {\n\t\t\t\t// character before column is a low surrogate\n\t\t\t\tcolumn = column - 2;\n\t\t\t} else {\n\t\t\t\tcolumn = column - 1;\n\t\t\t}\n\t\t} else if (lineNumber > 1) {\n\t\t\tlineNumber = lineNumber - 1;\n\t\t\tcolumn = model.getLineMaxColumn(lineNumber);\n\t\t}\n\n\t\treturn new CursorPosition(lineNumber, column, 0);\n\t}\n\n\tpublic static moveLeft(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean, noOfColumns: number): SingleCursorState {\n\t\tlet lineNumber: number,\n\t\t\tcolumn: number;\n\n\t\tif (cursor.hasSelection() && !inSelectionMode) {\n\t\t\t// If we are in selection mode, move left without selection cancels selection and puts cursor at the beginning of the selection\n\t\t\tlineNumber = cursor.selection.startLineNumber;\n\t\t\tcolumn = cursor.selection.startColumn;\n\t\t} else {\n\t\t\tlet r = MoveOperations.left(config, model, cursor.position.lineNumber, cursor.position.column - (noOfColumns - 1));\n\t\t\tlineNumber = r.lineNumber;\n\t\t\tcolumn = r.column;\n\t\t}\n\n\t\treturn cursor.move(inSelectionMode, lineNumber, column, 0);\n\t}\n\n\tpublic static right(config: CursorConfiguration, model: ICursorSimpleModel, lineNumber: number, column: number): CursorPosition {\n\n\t\tif (column < model.getLineMaxColumn(lineNumber)) {\n\t\t\tif (CursorColumns.isHighSurrogate(model, lineNumber, column - 1)) {\n\t\t\t\t// character after column is a high surrogate\n\t\t\t\tcolumn = column + 2;\n\t\t\t} else {\n\t\t\t\tcolumn = column + 1;\n\t\t\t}\n\t\t} else if (lineNumber < model.getLineCount()) {\n\t\t\tlineNumber = lineNumber + 1;\n\t\t\tcolumn = model.getLineMinColumn(lineNumber);\n\t\t}\n\n\t\treturn new CursorPosition(lineNumber, column, 0);\n\t}\n\n\tpublic static moveRight(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean, noOfColumns: number): SingleCursorState {\n\t\tlet lineNumber: number,\n\t\t\tcolumn: number;\n\n\t\tif (cursor.hasSelection() && !inSelectionMode) {\n\t\t\t// If we are in selection mode, move right without selection cancels selection and puts cursor at the end of the selection\n\t\t\tlineNumber = cursor.selection.endLineNumber;\n\t\t\tcolumn = cursor.selection.endColumn;\n\t\t} else {\n\t\t\tlet r = MoveOperations.right(config, model, cursor.position.lineNumber, cursor.position.column + (noOfColumns - 1));\n\t\t\tlineNumber = r.lineNumber;\n\t\t\tcolumn = r.column;\n\t\t}\n\n\t\treturn cursor.move(inSelectionMode, lineNumber, column, 0);\n\t}\n\n\tpublic static down(config: CursorConfiguration, model: ICursorSimpleModel, lineNumber: number, column: number, leftoverVisibleColumns: number, count: number, allowMoveOnLastLine: boolean): CursorPosition {\n\t\tconst currentVisibleColumn = CursorColumns.visibleColumnFromColumn(model.getLineContent(lineNumber), column, config.tabSize) + leftoverVisibleColumns;\n\n\t\tlineNumber = lineNumber + count;\n\t\tvar lineCount = model.getLineCount();\n\t\tif (lineNumber > lineCount) {\n\t\t\tlineNumber = lineCount;\n\t\t\tif (allowMoveOnLastLine) {\n\t\t\t\tcolumn = model.getLineMaxColumn(lineNumber);\n\t\t\t} else {\n\t\t\t\tcolumn = Math.min(model.getLineMaxColumn(lineNumber), column);\n\t\t\t\tif (CursorColumns.isInsideSurrogatePair(model, lineNumber, column)) {\n\t\t\t\t\tcolumn = column - 1;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tcolumn = CursorColumns.columnFromVisibleColumn2(config, model, lineNumber, currentVisibleColumn);\n\t\t\tif (CursorColumns.isInsideSurrogatePair(model, lineNumber, column)) {\n\t\t\t\tcolumn = column - 1;\n\t\t\t}\n\t\t}\n\n\t\tleftoverVisibleColumns = currentVisibleColumn - CursorColumns.visibleColumnFromColumn(model.getLineContent(lineNumber), column, config.tabSize);\n\n\t\treturn new CursorPosition(lineNumber, column, leftoverVisibleColumns);\n\t}\n\n\tpublic static moveDown(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean, linesCount: number): SingleCursorState {\n\t\tlet lineNumber: number,\n\t\t\tcolumn: number;\n\n\t\tif (cursor.hasSelection() && !inSelectionMode) {\n\t\t\t// If we are in selection mode, move down acts relative to the end of selection\n\t\t\tlineNumber = cursor.selection.endLineNumber;\n\t\t\tcolumn = cursor.selection.endColumn;\n\t\t} else {\n\t\t\tlineNumber = cursor.position.lineNumber;\n\t\t\tcolumn = cursor.position.column;\n\t\t}\n\n\t\tlet r = MoveOperations.down(config, model, lineNumber, column, cursor.leftoverVisibleColumns, linesCount, true);\n\n\t\treturn cursor.move(inSelectionMode, r.lineNumber, r.column, r.leftoverVisibleColumns);\n\t}\n\n\tpublic static translateDown(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState): SingleCursorState {\n\t\tlet selection = cursor.selection;\n\n\t\tlet selectionStart = MoveOperations.down(config, model, selection.selectionStartLineNumber, selection.selectionStartColumn, cursor.selectionStartLeftoverVisibleColumns, 1, false);\n\t\tlet position = MoveOperations.down(config, model, selection.positionLineNumber, selection.positionColumn, cursor.leftoverVisibleColumns, 1, false);\n\n\t\treturn new SingleCursorState(\n\t\t\tnew Range(selectionStart.lineNumber, selectionStart.column, selectionStart.lineNumber, selectionStart.column),\n\t\t\tselectionStart.leftoverVisibleColumns,\n\t\t\tnew Position(position.lineNumber, position.column),\n\t\t\tposition.leftoverVisibleColumns\n\t\t);\n\t}\n\n\tpublic static up(config: CursorConfiguration, model: ICursorSimpleModel, lineNumber: number, column: number, leftoverVisibleColumns: number, count: number, allowMoveOnFirstLine: boolean): CursorPosition {\n\t\tconst currentVisibleColumn = CursorColumns.visibleColumnFromColumn(model.getLineContent(lineNumber), column, config.tabSize) + leftoverVisibleColumns;\n\n\t\tlineNumber = lineNumber - count;\n\t\tif (lineNumber < 1) {\n\t\t\tlineNumber = 1;\n\t\t\tif (allowMoveOnFirstLine) {\n\t\t\t\tcolumn = model.getLineMinColumn(lineNumber);\n\t\t\t} else {\n\t\t\t\tcolumn = Math.min(model.getLineMaxColumn(lineNumber), column);\n\t\t\t\tif (CursorColumns.isInsideSurrogatePair(model, lineNumber, column)) {\n\t\t\t\t\tcolumn = column - 1;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tcolumn = CursorColumns.columnFromVisibleColumn2(config, model, lineNumber, currentVisibleColumn);\n\t\t\tif (CursorColumns.isInsideSurrogatePair(model, lineNumber, column)) {\n\t\t\t\tcolumn = column - 1;\n\t\t\t}\n\t\t}\n\n\t\tleftoverVisibleColumns = currentVisibleColumn - CursorColumns.visibleColumnFromColumn(model.getLineContent(lineNumber), column, config.tabSize);\n\n\t\treturn new CursorPosition(lineNumber, column, leftoverVisibleColumns);\n\t}\n\n\tpublic static moveUp(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean, linesCount: number): SingleCursorState {\n\t\tlet lineNumber: number,\n\t\t\tcolumn: number;\n\n\t\tif (cursor.hasSelection() && !inSelectionMode) {\n\t\t\t// If we are in selection mode, move up acts relative to the beginning of selection\n\t\t\tlineNumber = cursor.selection.startLineNumber;\n\t\t\tcolumn = cursor.selection.startColumn;\n\t\t} else {\n\t\t\tlineNumber = cursor.position.lineNumber;\n\t\t\tcolumn = cursor.position.column;\n\t\t}\n\n\t\tlet r = MoveOperations.up(config, model, lineNumber, column, cursor.leftoverVisibleColumns, linesCount, true);\n\n\t\treturn cursor.move(inSelectionMode, r.lineNumber, r.column, r.leftoverVisibleColumns);\n\t}\n\n\tpublic static translateUp(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState): SingleCursorState {\n\n\t\tlet selection = cursor.selection;\n\n\t\tlet selectionStart = MoveOperations.up(config, model, selection.selectionStartLineNumber, selection.selectionStartColumn, cursor.selectionStartLeftoverVisibleColumns, 1, false);\n\t\tlet position = MoveOperations.up(config, model, selection.positionLineNumber, selection.positionColumn, cursor.leftoverVisibleColumns, 1, false);\n\n\t\treturn new SingleCursorState(\n\t\t\tnew Range(selectionStart.lineNumber, selectionStart.column, selectionStart.lineNumber, selectionStart.column),\n\t\t\tselectionStart.leftoverVisibleColumns,\n\t\t\tnew Position(position.lineNumber, position.column),\n\t\t\tposition.leftoverVisibleColumns\n\t\t);\n\t}\n\n\tpublic static moveToBeginningOfLine(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean): SingleCursorState {\n\t\tlet lineNumber = cursor.position.lineNumber;\n\t\tlet minColumn = model.getLineMinColumn(lineNumber);\n\t\tlet firstNonBlankColumn = model.getLineFirstNonWhitespaceColumn(lineNumber) || minColumn;\n\n\t\tlet column: number;\n\n\t\tlet relevantColumnNumber = cursor.position.column;\n\t\tif (relevantColumnNumber === firstNonBlankColumn) {\n\t\t\tcolumn = minColumn;\n\t\t} else {\n\t\t\tcolumn = firstNonBlankColumn;\n\t\t}\n\n\t\treturn cursor.move(inSelectionMode, lineNumber, column, 0);\n\t}\n\n\tpublic static moveToEndOfLine(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean): SingleCursorState {\n\t\tlet lineNumber = cursor.position.lineNumber;\n\t\tlet maxColumn = model.getLineMaxColumn(lineNumber);\n\t\treturn cursor.move(inSelectionMode, lineNumber, maxColumn, 0);\n\t}\n\n\tpublic static moveToBeginningOfBuffer(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean): SingleCursorState {\n\t\treturn cursor.move(inSelectionMode, 1, 1, 0);\n\t}\n\n\tpublic static moveToEndOfBuffer(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean): SingleCursorState {\n\t\tlet lastLineNumber = model.getLineCount();\n\t\tlet lastColumn = model.getLineMaxColumn(lastLineNumber);\n\n\t\treturn cursor.move(inSelectionMode, lastLineNumber, lastColumn, 0);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { ReplaceCommand } from 'vs/editor/common/commands/replaceCommand';\nimport { CursorColumns, CursorConfiguration, ICursorSimpleModel, EditOperationResult } from 'vs/editor/common/controller/cursorCommon';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { MoveOperations } from 'vs/editor/common/controller/cursorMoveOperations';\nimport * as strings from 'vs/base/common/strings';\nimport { ICommand } from 'vs/editor/common/editorCommon';\n\nexport class DeleteOperations {\n\n\tpublic static deleteRight(config: CursorConfiguration, model: ICursorSimpleModel, selections: Selection[]): [boolean, ICommand[]] {\n\t\tlet commands: ICommand[] = [];\n\t\tlet shouldPushStackElementBefore = false;\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tconst selection = selections[i];\n\n\t\t\tlet deleteSelection: Range = selection;\n\n\t\t\tif (deleteSelection.isEmpty()) {\n\t\t\t\tlet position = selection.getPosition();\n\t\t\t\tlet rightOfPosition = MoveOperations.right(config, model, position.lineNumber, position.column);\n\t\t\t\tdeleteSelection = new Range(\n\t\t\t\t\trightOfPosition.lineNumber,\n\t\t\t\t\trightOfPosition.column,\n\t\t\t\t\tposition.lineNumber,\n\t\t\t\t\tposition.column\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (deleteSelection.isEmpty()) {\n\t\t\t\t// Probably at end of file => ignore\n\t\t\t\tcommands[i] = null;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (deleteSelection.startLineNumber !== deleteSelection.endLineNumber) {\n\t\t\t\tshouldPushStackElementBefore = true;\n\t\t\t}\n\n\t\t\tcommands[i] = new ReplaceCommand(deleteSelection, '');\n\t\t}\n\t\treturn [shouldPushStackElementBefore, commands];\n\t}\n\n\tprivate static _isAutoClosingPairDelete(config: CursorConfiguration, model: ICursorSimpleModel, selections: Selection[]): boolean {\n\t\tif (!config.autoClosingBrackets) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tconst selection = selections[i];\n\t\t\tconst position = selection.getPosition();\n\n\t\t\tif (!selection.isEmpty()) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst lineText = model.getLineContent(position.lineNumber);\n\t\t\tconst character = lineText[position.column - 2];\n\n\t\t\tif (!config.autoClosingPairsOpen.hasOwnProperty(character)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst afterCharacter = lineText[position.column - 1];\n\t\t\tconst closeCharacter = config.autoClosingPairsOpen[character];\n\n\t\t\tif (afterCharacter !== closeCharacter) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate static _runAutoClosingPairDelete(config: CursorConfiguration, model: ICursorSimpleModel, selections: Selection[]): [boolean, ICommand[]] {\n\t\tlet commands: ICommand[] = [];\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tconst position = selections[i].getPosition();\n\t\t\tconst deleteSelection = new Range(\n\t\t\t\tposition.lineNumber,\n\t\t\t\tposition.column - 1,\n\t\t\t\tposition.lineNumber,\n\t\t\t\tposition.column + 1\n\t\t\t);\n\t\t\tcommands[i] = new ReplaceCommand(deleteSelection, '');\n\t\t}\n\t\treturn [true, commands];\n\t}\n\n\tpublic static deleteLeft(config: CursorConfiguration, model: ICursorSimpleModel, selections: Selection[]): [boolean, ICommand[]] {\n\n\t\tif (this._isAutoClosingPairDelete(config, model, selections)) {\n\t\t\treturn this._runAutoClosingPairDelete(config, model, selections);\n\t\t}\n\n\t\tlet commands: ICommand[] = [];\n\t\tlet shouldPushStackElementBefore = false;\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tconst selection = selections[i];\n\n\t\t\tlet deleteSelection: Range = selection;\n\n\t\t\tif (deleteSelection.isEmpty()) {\n\t\t\t\tlet position = selection.getPosition();\n\n\t\t\t\tif (config.useTabStops && position.column > 1) {\n\t\t\t\t\tlet lineContent = model.getLineContent(position.lineNumber);\n\n\t\t\t\t\tlet firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);\n\t\t\t\t\tlet lastIndentationColumn = (\n\t\t\t\t\t\tfirstNonWhitespaceIndex === -1\n\t\t\t\t\t\t\t? /* entire string is whitespace */lineContent.length + 1\n\t\t\t\t\t\t\t: firstNonWhitespaceIndex + 1\n\t\t\t\t\t);\n\n\t\t\t\t\tif (position.column <= lastIndentationColumn) {\n\t\t\t\t\t\tlet fromVisibleColumn = CursorColumns.visibleColumnFromColumn2(config, model, position);\n\t\t\t\t\t\tlet toVisibleColumn = CursorColumns.prevTabStop(fromVisibleColumn, config.tabSize);\n\t\t\t\t\t\tlet toColumn = CursorColumns.columnFromVisibleColumn2(config, model, position.lineNumber, toVisibleColumn);\n\t\t\t\t\t\tdeleteSelection = new Range(position.lineNumber, toColumn, position.lineNumber, position.column);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeleteSelection = new Range(position.lineNumber, position.column - 1, position.lineNumber, position.column);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlet leftOfPosition = MoveOperations.left(config, model, position.lineNumber, position.column);\n\t\t\t\t\tdeleteSelection = new Range(\n\t\t\t\t\t\tleftOfPosition.lineNumber,\n\t\t\t\t\t\tleftOfPosition.column,\n\t\t\t\t\t\tposition.lineNumber,\n\t\t\t\t\t\tposition.column\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (deleteSelection.isEmpty()) {\n\t\t\t\t// Probably at beginning of file => ignore\n\t\t\t\tcommands[i] = null;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (deleteSelection.startLineNumber !== deleteSelection.endLineNumber) {\n\t\t\t\tshouldPushStackElementBefore = true;\n\t\t\t}\n\n\t\t\tcommands[i] = new ReplaceCommand(deleteSelection, '');\n\t\t}\n\t\treturn [shouldPushStackElementBefore, commands];\n\t}\n\n\tpublic static cut(config: CursorConfiguration, model: ICursorSimpleModel, selections: Selection[]): EditOperationResult {\n\t\tlet commands: ICommand[] = [];\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tconst selection = selections[i];\n\n\t\t\tif (selection.isEmpty()) {\n\t\t\t\tif (config.emptySelectionClipboard) {\n\t\t\t\t\t// This is a full line cut\n\n\t\t\t\t\tlet position = selection.getPosition();\n\n\t\t\t\t\tlet startLineNumber: number,\n\t\t\t\t\t\tstartColumn: number,\n\t\t\t\t\t\tendLineNumber: number,\n\t\t\t\t\t\tendColumn: number;\n\n\t\t\t\t\tif (position.lineNumber < model.getLineCount()) {\n\t\t\t\t\t\t// Cutting a line in the middle of the model\n\t\t\t\t\t\tstartLineNumber = position.lineNumber;\n\t\t\t\t\t\tstartColumn = 1;\n\t\t\t\t\t\tendLineNumber = position.lineNumber + 1;\n\t\t\t\t\t\tendColumn = 1;\n\t\t\t\t\t} else if (position.lineNumber > 1) {\n\t\t\t\t\t\t// Cutting the last line & there are more than 1 lines in the model\n\t\t\t\t\t\tstartLineNumber = position.lineNumber - 1;\n\t\t\t\t\t\tstartColumn = model.getLineMaxColumn(position.lineNumber - 1);\n\t\t\t\t\t\tendLineNumber = position.lineNumber;\n\t\t\t\t\t\tendColumn = model.getLineMaxColumn(position.lineNumber);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Cutting the single line that the model contains\n\t\t\t\t\t\tstartLineNumber = position.lineNumber;\n\t\t\t\t\t\tstartColumn = 1;\n\t\t\t\t\t\tendLineNumber = position.lineNumber;\n\t\t\t\t\t\tendColumn = model.getLineMaxColumn(position.lineNumber);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet deleteSelection = new Range(\n\t\t\t\t\t\tstartLineNumber,\n\t\t\t\t\t\tstartColumn,\n\t\t\t\t\t\tendLineNumber,\n\t\t\t\t\t\tendColumn\n\t\t\t\t\t);\n\n\t\t\t\t\tif (!deleteSelection.isEmpty()) {\n\t\t\t\t\t\tcommands[i] = new ReplaceCommand(deleteSelection, '');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcommands[i] = null;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Cannot cut empty selection\n\t\t\t\t\tcommands[i] = null;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcommands[i] = new ReplaceCommand(selection, '');\n\t\t\t}\n\t\t}\n\t\treturn new EditOperationResult(commands, {\n\t\t\tshouldPushStackElementBefore: true,\n\t\t\tshouldPushStackElementAfter: true\n\t\t});\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { ReplaceCommand, ReplaceCommandWithoutChangingPosition, ReplaceCommandWithOffsetCursorState } from 'vs/editor/common/commands/replaceCommand';\nimport { CursorColumns, CursorConfiguration, ICursorSimpleModel, EditOperationResult } from 'vs/editor/common/controller/cursorCommon';\nimport { Range } from 'vs/editor/common/core/range';\nimport { ICommand, ITokenizedModel } from 'vs/editor/common/editorCommon';\nimport * as strings from 'vs/base/common/strings';\nimport { ShiftCommand } from 'vs/editor/common/commands/shiftCommand';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { LanguageConfigurationRegistry } from 'vs/editor/common/modes/languageConfigurationRegistry';\nimport { IndentAction } from 'vs/editor/common/modes/languageConfiguration';\nimport { SurroundSelectionCommand } from 'vs/editor/common/commands/surroundSelectionCommand';\nimport { IElectricAction } from 'vs/editor/common/modes/supports/electricCharacter';\nimport { getMapForWordSeparators, WordCharacterClass } from 'vs/editor/common/controller/wordCharacterClassifier';\n\nexport class TypeOperations {\n\n\tpublic static indent(config: CursorConfiguration, model: ICursorSimpleModel, selections: Selection[]): ICommand[] {\n\t\tlet commands: ICommand[] = [];\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tcommands[i] = new ShiftCommand(selections[i], {\n\t\t\t\tisUnshift: false,\n\t\t\t\ttabSize: config.tabSize,\n\t\t\t\toneIndent: config.oneIndent,\n\t\t\t\tuseTabStops: config.useTabStops\n\t\t\t});\n\t\t}\n\t\treturn commands;\n\t}\n\n\tpublic static outdent(config: CursorConfiguration, model: ICursorSimpleModel, selections: Selection[]): ICommand[] {\n\t\tlet commands: ICommand[] = [];\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tcommands[i] = new ShiftCommand(selections[i], {\n\t\t\t\tisUnshift: true,\n\t\t\t\ttabSize: config.tabSize,\n\t\t\t\toneIndent: config.oneIndent,\n\t\t\t\tuseTabStops: config.useTabStops\n\t\t\t});\n\t\t}\n\t\treturn commands;\n\t}\n\n\tpublic static shiftIndent(config: CursorConfiguration, indentation: string, count?: number): string {\n\t\tcount = count || 1;\n\t\tlet desiredIndentCount = ShiftCommand.shiftIndentCount(indentation, indentation.length + count, config.tabSize);\n\t\tlet newIndentation = '';\n\t\tfor (let i = 0; i < desiredIndentCount; i++) {\n\t\t\tnewIndentation += '\\t';\n\t\t}\n\n\t\treturn newIndentation;\n\t}\n\n\tpublic static unshiftIndent(config: CursorConfiguration, indentation: string, count?: number): string {\n\t\tcount = count || 1;\n\t\tlet desiredIndentCount = ShiftCommand.unshiftIndentCount(indentation, indentation.length + count, config.tabSize);\n\t\tlet newIndentation = '';\n\t\tfor (let i = 0; i < desiredIndentCount; i++) {\n\t\t\tnewIndentation += '\\t';\n\t\t}\n\n\t\treturn newIndentation;\n\t}\n\n\tprivate static _distributedPaste(config: CursorConfiguration, model: ICursorSimpleModel, selections: Selection[], text: string[]): EditOperationResult {\n\t\tlet commands: ICommand[] = [];\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tcommands[i] = new ReplaceCommand(selections[i], text[i]);\n\t\t}\n\t\treturn new EditOperationResult(commands, {\n\t\t\tshouldPushStackElementBefore: true,\n\t\t\tshouldPushStackElementAfter: true\n\t\t});\n\t}\n\n\tprivate static _simplePaste(config: CursorConfiguration, model: ICursorSimpleModel, selections: Selection[], text: string, pasteOnNewLine: boolean): EditOperationResult {\n\t\tlet commands: ICommand[] = [];\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tconst selection = selections[i];\n\t\t\tlet position = selection.getPosition();\n\n\t\t\tif (pasteOnNewLine && text.indexOf('\\n') !== text.length - 1) {\n\t\t\t\tpasteOnNewLine = false;\n\t\t\t}\n\t\t\tif (pasteOnNewLine && selection.startLineNumber !== selection.endLineNumber) {\n\t\t\t\tpasteOnNewLine = false;\n\t\t\t}\n\t\t\tif (pasteOnNewLine && selection.startColumn === model.getLineMinColumn(selection.startLineNumber) && selection.endColumn === model.getLineMaxColumn(selection.startLineNumber)) {\n\t\t\t\tpasteOnNewLine = false;\n\t\t\t}\n\n\t\t\tif (pasteOnNewLine) {\n\t\t\t\t// Paste entire line at the beginning of line\n\t\t\t\tlet typeSelection = new Range(position.lineNumber, 1, position.lineNumber, 1);\n\t\t\t\tcommands[i] = new ReplaceCommand(typeSelection, text);\n\t\t\t} else {\n\t\t\t\tcommands[i] = new ReplaceCommand(selection, text);\n\t\t\t}\n\t\t}\n\t\treturn new EditOperationResult(commands, {\n\t\t\tshouldPushStackElementBefore: true,\n\t\t\tshouldPushStackElementAfter: true\n\t\t});\n\t}\n\n\tprivate static _distributePasteToCursors(selections: Selection[], pasteOnNewLine: boolean, text: string): string[] {\n\t\tif (pasteOnNewLine) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (selections.length === 1) {\n\t\t\treturn null;\n\t\t}\n\n\t\tfor (let i = 0; i < selections.length; i++) {\n\t\t\tif (selections[i].startLineNumber !== selections[i].endLineNumber) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tlet pastePieces = text.split(/\\r\\n|\\r|\\n/);\n\t\tif (pastePieces.length !== selections.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn pastePieces;\n\t}\n\n\tpublic static paste(config: CursorConfiguration, model: ICursorSimpleModel, selections: Selection[], pasteOnNewLine: boolean, text: string): EditOperationResult {\n\t\tconst distributedPaste = this._distributePasteToCursors(selections, pasteOnNewLine, text);\n\n\t\tif (distributedPaste) {\n\t\t\tselections = selections.sort(Range.compareRangesUsingStarts);\n\t\t\treturn this._distributedPaste(config, model, selections, distributedPaste);\n\t\t} else {\n\t\t\treturn this._simplePaste(config, model, selections, text, pasteOnNewLine);\n\t\t}\n\t}\n\n\tprivate static _goodIndentForLine(config: CursorConfiguration, model: ITokenizedModel, lineNumber: number): string {\n\t\tlet expectedIndentAction = LanguageConfigurationRegistry.getInheritIndentForLine(model, lineNumber, false);\n\n\t\tif (expectedIndentAction) {\n\t\t\tif (expectedIndentAction.action) {\n\t\t\t\tlet indentation = expectedIndentAction.indentation;\n\n\t\t\t\tif (expectedIndentAction.action === IndentAction.Indent) {\n\t\t\t\t\tindentation = TypeOperations.shiftIndent(config, indentation);\n\t\t\t\t}\n\n\t\t\t\tif (expectedIndentAction.action === IndentAction.Outdent) {\n\t\t\t\t\tindentation = TypeOperations.unshiftIndent(config, indentation);\n\t\t\t\t}\n\n\t\t\t\tindentation = config.normalizeIndentation(indentation);\n\n\t\t\t\tif (indentation.length === 0) {\n\t\t\t\t\treturn '';\n\t\t\t\t} else {\n\t\t\t\t\treturn indentation;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn expectedIndentAction.indentation;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate static _replaceJumpToNextIndent(config: CursorConfiguration, model: ICursorSimpleModel, selection: Selection, insertsAutoWhitespace: boolean): ReplaceCommand {\n\t\tlet typeText = '';\n\n\t\tlet position = selection.getStartPosition();\n\t\tif (config.insertSpaces) {\n\t\t\tlet visibleColumnFromColumn = CursorColumns.visibleColumnFromColumn2(config, model, position);\n\t\t\tlet tabSize = config.tabSize;\n\t\t\tlet spacesCnt = tabSize - (visibleColumnFromColumn % tabSize);\n\t\t\tfor (let i = 0; i < spacesCnt; i++) {\n\t\t\t\ttypeText += ' ';\n\t\t\t}\n\t\t} else {\n\t\t\ttypeText = '\\t';\n\t\t}\n\n\t\treturn new ReplaceCommand(selection, typeText, insertsAutoWhitespace);\n\t}\n\n\tpublic static tab(config: CursorConfiguration, model: ITokenizedModel, selections: Selection[]): ICommand[] {\n\t\tlet commands: ICommand[] = [];\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tconst selection = selections[i];\n\n\t\t\tif (selection.isEmpty()) {\n\n\t\t\t\tlet lineText = model.getLineContent(selection.startLineNumber);\n\n\t\t\t\tif (/^\\s*$/.test(lineText)) {\n\t\t\t\t\tlet goodIndent = this._goodIndentForLine(config, model, selection.startLineNumber);\n\t\t\t\t\tgoodIndent = goodIndent || '\\t';\n\t\t\t\t\tlet possibleTypeText = config.normalizeIndentation(goodIndent);\n\t\t\t\t\tif (!strings.startsWith(lineText, possibleTypeText)) {\n\t\t\t\t\t\tcommands[i] = new ReplaceCommand(new Range(selection.startLineNumber, 1, selection.startLineNumber, lineText.length + 1), possibleTypeText, true);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcommands[i] = this._replaceJumpToNextIndent(config, model, selection, true);\n\t\t\t} else {\n\t\t\t\tif (selection.startLineNumber === selection.endLineNumber) {\n\t\t\t\t\tlet lineMaxColumn = model.getLineMaxColumn(selection.startLineNumber);\n\t\t\t\t\tif (selection.startColumn !== 1 || selection.endColumn !== lineMaxColumn) {\n\t\t\t\t\t\t// This is a single line selection that is not the entire line\n\t\t\t\t\t\tcommands[i] = this._replaceJumpToNextIndent(config, model, selection, false);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcommands[i] = new ShiftCommand(selection, {\n\t\t\t\t\tisUnshift: false,\n\t\t\t\t\ttabSize: config.tabSize,\n\t\t\t\t\toneIndent: config.oneIndent,\n\t\t\t\t\tuseTabStops: config.useTabStops\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn commands;\n\t}\n\n\tpublic static replacePreviousChar(config: CursorConfiguration, model: ITokenizedModel, selections: Selection[], txt: string, replaceCharCnt: number): EditOperationResult {\n\t\tlet commands: ICommand[] = [];\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tconst selection = selections[i];\n\t\t\tif (!selection.isEmpty()) {\n\t\t\t\t// looks like https://github.com/Microsoft/vscode/issues/2773\n\t\t\t\t// where a cursor operation occurred before a canceled composition\n\t\t\t\t// => ignore composition\n\t\t\t\tcommands[i] = null;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet pos = selection.getPosition();\n\t\t\tlet startColumn = Math.max(1, pos.column - replaceCharCnt);\n\t\t\tlet range = new Range(pos.lineNumber, startColumn, pos.lineNumber, pos.column);\n\t\t\tcommands[i] = new ReplaceCommand(range, txt);\n\t\t}\n\t\treturn new EditOperationResult(commands, {\n\t\t\tshouldPushStackElementBefore: false,\n\t\t\tshouldPushStackElementAfter: false\n\t\t});\n\t}\n\n\tprivate static _typeCommand(range: Range, text: string, keepPosition: boolean): ICommand {\n\t\tif (keepPosition) {\n\t\t\treturn new ReplaceCommandWithoutChangingPosition(range, text, true);\n\t\t} else {\n\t\t\treturn new ReplaceCommand(range, text, true);\n\t\t}\n\t}\n\n\tprivate static _enter(config: CursorConfiguration, model: ITokenizedModel, keepPosition: boolean, range: Range): ICommand {\n\t\tlet r = LanguageConfigurationRegistry.getEnterAction(model, range);\n\t\tif (r) {\n\t\t\tlet enterAction = r.enterAction;\n\t\t\tlet indentation = r.indentation;\n\n\t\t\tif (enterAction.indentAction === IndentAction.None) {\n\t\t\t\t// Nothing special\n\t\t\t\treturn TypeOperations._typeCommand(range, '\\n' + config.normalizeIndentation(indentation + enterAction.appendText), keepPosition);\n\n\t\t\t} else if (enterAction.indentAction === IndentAction.Indent) {\n\t\t\t\t// Indent once\n\t\t\t\treturn TypeOperations._typeCommand(range, '\\n' + config.normalizeIndentation(indentation + enterAction.appendText), keepPosition);\n\n\t\t\t} else if (enterAction.indentAction === IndentAction.IndentOutdent) {\n\t\t\t\t// Ultra special\n\t\t\t\tlet normalIndent = config.normalizeIndentation(indentation);\n\t\t\t\tlet increasedIndent = config.normalizeIndentation(indentation + enterAction.appendText);\n\n\t\t\t\tlet typeText = '\\n' + increasedIndent + '\\n' + normalIndent;\n\n\t\t\t\tif (keepPosition) {\n\t\t\t\t\treturn new ReplaceCommandWithoutChangingPosition(range, typeText, true);\n\t\t\t\t} else {\n\t\t\t\t\treturn new ReplaceCommandWithOffsetCursorState(range, typeText, -1, increasedIndent.length - normalIndent.length, true);\n\t\t\t\t}\n\t\t\t} else if (enterAction.indentAction === IndentAction.Outdent) {\n\t\t\t\tlet actualIndentation = TypeOperations.unshiftIndent(config, indentation);\n\t\t\t\treturn TypeOperations._typeCommand(range, '\\n' + config.normalizeIndentation(actualIndentation + enterAction.appendText), keepPosition);\n\t\t\t}\n\t\t}\n\n\t\t// no enter rules applied, we should check indentation rules then.\n\t\tlet ir = LanguageConfigurationRegistry.getIndentForEnter(model, range, {\n\t\t\tunshiftIndent: (indent) => {\n\t\t\t\treturn TypeOperations.unshiftIndent(config, indent);\n\t\t\t},\n\t\t\tshiftIndent: (indent) => {\n\t\t\t\treturn TypeOperations.shiftIndent(config, indent);\n\t\t\t},\n\t\t\tnormalizeIndentation: (indent) => {\n\t\t\t\treturn config.normalizeIndentation(indent);\n\t\t\t}\n\t\t}, config.autoIndent);\n\n\t\tlet lineText = model.getLineContent(range.startLineNumber);\n\t\tlet indentation = strings.getLeadingWhitespace(lineText).substring(0, range.startColumn - 1);\n\n\t\tif (ir) {\n\t\t\tlet oldEndViewColumn = CursorColumns.visibleColumnFromColumn2(config, model, range.getEndPosition());\n\t\t\tlet oldEndColumn = range.endColumn;\n\n\t\t\tlet beforeText = '\\n';\n\t\t\tif (indentation !== config.normalizeIndentation(ir.beforeEnter)) {\n\t\t\t\tbeforeText = config.normalizeIndentation(ir.beforeEnter) + lineText.substring(indentation.length, range.startColumn - 1) + '\\n';\n\t\t\t\trange = new Range(range.startLineNumber, 1, range.endLineNumber, range.endColumn);\n\t\t\t}\n\n\t\t\tlet newLineContent = model.getLineContent(range.endLineNumber);\n\t\t\tlet firstNonWhitespace = strings.firstNonWhitespaceIndex(newLineContent);\n\t\t\tif (firstNonWhitespace >= 0) {\n\t\t\t\trange = range.setEndPosition(range.endLineNumber, Math.max(range.endColumn, firstNonWhitespace + 1));\n\t\t\t} else {\n\t\t\t\trange = range.setEndPosition(range.endLineNumber, model.getLineMaxColumn(range.endLineNumber));\n\t\t\t}\n\n\t\t\tif (keepPosition) {\n\t\t\t\treturn new ReplaceCommandWithoutChangingPosition(range, beforeText + config.normalizeIndentation(ir.afterEnter), true);\n\t\t\t} else {\n\t\t\t\tlet offset = 0;\n\t\t\t\tif (oldEndColumn <= firstNonWhitespace + 1) {\n\t\t\t\t\tif (!config.insertSpaces) {\n\t\t\t\t\t\toldEndViewColumn = Math.ceil(oldEndViewColumn / config.tabSize);\n\t\t\t\t\t}\n\t\t\t\t\toffset = Math.min(oldEndViewColumn + 1 - config.normalizeIndentation(ir.afterEnter).length - 1, 0);\n\t\t\t\t}\n\t\t\t\treturn new ReplaceCommandWithOffsetCursorState(range, beforeText + config.normalizeIndentation(ir.afterEnter), 0, offset, true);\n\t\t\t}\n\n\t\t} else {\n\t\t\treturn TypeOperations._typeCommand(range, '\\n' + config.normalizeIndentation(indentation), keepPosition);\n\t\t}\n\t}\n\n\tprivate static _runAutoIndentType(config: CursorConfiguration, model: ITokenizedModel, range: Range, ch: string): ICommand {\n\t\tlet currentIndentation = LanguageConfigurationRegistry.getIndentationAtPosition(model, range.startLineNumber, range.startColumn);\n\t\tlet actualIndentation = LanguageConfigurationRegistry.getIndentActionForType(model, range, ch, {\n\t\t\tshiftIndent: (indentation) => {\n\t\t\t\treturn TypeOperations.shiftIndent(config, indentation);\n\t\t\t},\n\t\t\tunshiftIndent: (indentation) => {\n\t\t\t\treturn TypeOperations.unshiftIndent(config, indentation);\n\t\t\t},\n\t\t});\n\n\t\tif (actualIndentation === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (actualIndentation !== config.normalizeIndentation(currentIndentation)) {\n\t\t\tlet firstNonWhitespace = model.getLineFirstNonWhitespaceColumn(range.startLineNumber);\n\t\t\tif (firstNonWhitespace === 0) {\n\t\t\t\treturn TypeOperations._typeCommand(\n\t\t\t\t\tnew Range(range.startLineNumber, 0, range.endLineNumber, range.endColumn),\n\t\t\t\t\tconfig.normalizeIndentation(actualIndentation) + ch,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn TypeOperations._typeCommand(\n\t\t\t\t\tnew Range(range.startLineNumber, 0, range.endLineNumber, range.endColumn),\n\t\t\t\t\tconfig.normalizeIndentation(actualIndentation) +\n\t\t\t\t\tmodel.getLineContent(range.startLineNumber).substring(firstNonWhitespace - 1, range.startColumn - 1) + ch,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate static _isAutoClosingCloseCharType(config: CursorConfiguration, model: ITokenizedModel, selections: Selection[], ch: string): boolean {\n\t\tif (!config.autoClosingBrackets || !config.autoClosingPairsClose.hasOwnProperty(ch)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tconst selection = selections[i];\n\n\t\t\tif (!selection.isEmpty()) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst position = selection.getPosition();\n\t\t\tconst lineText = model.getLineContent(position.lineNumber);\n\t\t\tconst afterCharacter = lineText.charAt(position.column - 1);\n\n\t\t\tif (afterCharacter !== ch) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate static _runAutoClosingCloseCharType(config: CursorConfiguration, model: ITokenizedModel, selections: Selection[], ch: string): EditOperationResult {\n\t\tlet commands: ICommand[] = [];\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tconst selection = selections[i];\n\t\t\tconst position = selection.getPosition();\n\t\t\tconst typeSelection = new Range(position.lineNumber, position.column, position.lineNumber, position.column + 1);\n\t\t\tcommands[i] = new ReplaceCommand(typeSelection, ch);\n\t\t}\n\t\treturn new EditOperationResult(commands, {\n\t\t\tshouldPushStackElementBefore: false,\n\t\t\tshouldPushStackElementAfter: false\n\t\t});\n\t}\n\n\tprivate static _isAutoClosingOpenCharType(config: CursorConfiguration, model: ITokenizedModel, selections: Selection[], ch: string): boolean {\n\t\tif (!config.autoClosingBrackets || !config.autoClosingPairsOpen.hasOwnProperty(ch)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tconst selection = selections[i];\n\t\t\tif (!selection.isEmpty()) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst position = selection.getPosition();\n\t\t\tconst lineText = model.getLineContent(position.lineNumber);\n\n\t\t\t// Do not auto-close ' or \" after a word character\n\t\t\tif ((ch === '\\'' || ch === '\"') && position.column > 1) {\n\t\t\t\tconst wordSeparators = getMapForWordSeparators(config.wordSeparators);\n\t\t\t\tconst characterBeforeCode = lineText.charCodeAt(position.column - 2);\n\t\t\t\tconst characterBeforeType = wordSeparators.get(characterBeforeCode);\n\t\t\t\tif (characterBeforeType === WordCharacterClass.Regular) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Only consider auto closing the pair if a space follows or if another autoclosed pair follows\n\t\t\tconst characterAfter = lineText.charAt(position.column - 1);\n\t\t\tif (characterAfter) {\n\t\t\t\tconst thisBraceIsSymmetric = (config.autoClosingPairsOpen[ch] === ch);\n\n\t\t\t\tlet isBeforeCloseBrace = false;\n\t\t\t\tfor (let otherCloseBrace in config.autoClosingPairsClose) {\n\t\t\t\t\tconst otherBraceIsSymmetric = (config.autoClosingPairsOpen[otherCloseBrace] === otherCloseBrace);\n\t\t\t\t\tif (!thisBraceIsSymmetric && otherBraceIsSymmetric) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (characterAfter === otherCloseBrace) {\n\t\t\t\t\t\tisBeforeCloseBrace = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!isBeforeCloseBrace && !/\\s/.test(characterAfter)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmodel.forceTokenization(position.lineNumber);\n\t\t\tconst lineTokens = model.getLineTokens(position.lineNumber);\n\n\t\t\tlet shouldAutoClosePair = false;\n\t\t\ttry {\n\t\t\t\tshouldAutoClosePair = LanguageConfigurationRegistry.shouldAutoClosePair(ch, lineTokens, position.column);\n\t\t\t} catch (e) {\n\t\t\t\tonUnexpectedError(e);\n\t\t\t}\n\n\t\t\tif (!shouldAutoClosePair) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate static _runAutoClosingOpenCharType(config: CursorConfiguration, model: ITokenizedModel, selections: Selection[], ch: string): EditOperationResult {\n\t\tlet commands: ICommand[] = [];\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tconst selection = selections[i];\n\t\t\tconst closeCharacter = config.autoClosingPairsOpen[ch];\n\t\t\tcommands[i] = new ReplaceCommandWithOffsetCursorState(selection, ch + closeCharacter, 0, -closeCharacter.length);\n\t\t}\n\t\treturn new EditOperationResult(commands, {\n\t\t\tshouldPushStackElementBefore: true,\n\t\t\tshouldPushStackElementAfter: false\n\t\t});\n\t}\n\n\tprivate static _isSurroundSelectionType(config: CursorConfiguration, model: ITokenizedModel, selections: Selection[], ch: string): boolean {\n\t\tif (!config.autoClosingBrackets || !config.surroundingPairs.hasOwnProperty(ch)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tconst selection = selections[i];\n\n\t\t\tif (selection.isEmpty()) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tlet selectionContainsOnlyWhitespace = true;\n\n\t\t\tfor (let lineNumber = selection.startLineNumber; lineNumber <= selection.endLineNumber; lineNumber++) {\n\t\t\t\tconst lineText = model.getLineContent(lineNumber);\n\t\t\t\tconst startIndex = (lineNumber === selection.startLineNumber ? selection.startColumn - 1 : 0);\n\t\t\t\tconst endIndex = (lineNumber === selection.endLineNumber ? selection.endColumn - 1 : lineText.length);\n\t\t\t\tconst selectedText = lineText.substring(startIndex, endIndex);\n\t\t\t\tif (/[^ \\t]/.test(selectedText)) {\n\t\t\t\t\t// this selected text contains something other than whitespace\n\t\t\t\t\tselectionContainsOnlyWhitespace = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (selectionContainsOnlyWhitespace) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate static _runSurroundSelectionType(config: CursorConfiguration, model: ITokenizedModel, selections: Selection[], ch: string): EditOperationResult {\n\t\tlet commands: ICommand[] = [];\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tconst selection = selections[i];\n\t\t\tconst closeCharacter = config.surroundingPairs[ch];\n\t\t\tcommands[i] = new SurroundSelectionCommand(selection, ch, closeCharacter);\n\t\t}\n\t\treturn new EditOperationResult(commands, {\n\t\t\tshouldPushStackElementBefore: true,\n\t\t\tshouldPushStackElementAfter: true\n\t\t});\n\t}\n\n\tprivate static _typeInterceptorElectricChar(config: CursorConfiguration, model: ITokenizedModel, selections: Selection, ch: string): EditOperationResult {\n\t\tif (!config.electricChars.hasOwnProperty(ch) || !selections.isEmpty()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet position = selections.getPosition();\n\t\tmodel.forceTokenization(position.lineNumber);\n\t\tlet lineTokens = model.getLineTokens(position.lineNumber);\n\n\t\tlet electricAction: IElectricAction;\n\t\ttry {\n\t\t\telectricAction = LanguageConfigurationRegistry.onElectricCharacter(ch, lineTokens, position.column);\n\t\t} catch (e) {\n\t\t\tonUnexpectedError(e);\n\t\t}\n\n\t\tif (!electricAction) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (electricAction.appendText) {\n\t\t\tconst command = new ReplaceCommandWithOffsetCursorState(selections, ch + electricAction.appendText, 0, -electricAction.appendText.length);\n\t\t\treturn new EditOperationResult([command], {\n\t\t\t\tshouldPushStackElementBefore: false,\n\t\t\t\tshouldPushStackElementAfter: true\n\t\t\t});\n\t\t}\n\n\t\tif (electricAction.matchOpenBracket) {\n\t\t\tlet endColumn = (lineTokens.getLineContent() + ch).lastIndexOf(electricAction.matchOpenBracket) + 1;\n\t\t\tlet match = model.findMatchingBracketUp(electricAction.matchOpenBracket, {\n\t\t\t\tlineNumber: position.lineNumber,\n\t\t\t\tcolumn: endColumn\n\t\t\t});\n\n\t\t\tif (match) {\n\t\t\t\tif (match.startLineNumber === position.lineNumber) {\n\t\t\t\t\t// matched something on the same line => no change in indentation\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tlet matchLine = model.getLineContent(match.startLineNumber);\n\t\t\t\tlet matchLineIndentation = strings.getLeadingWhitespace(matchLine);\n\t\t\t\tlet newIndentation = config.normalizeIndentation(matchLineIndentation);\n\n\t\t\t\tlet lineText = model.getLineContent(position.lineNumber);\n\t\t\t\tlet lineFirstNonBlankColumn = model.getLineFirstNonWhitespaceColumn(position.lineNumber) || position.column;\n\n\t\t\t\tlet prefix = lineText.substring(lineFirstNonBlankColumn - 1, position.column - 1);\n\t\t\t\tlet typeText = newIndentation + prefix + ch;\n\n\t\t\t\tlet typeSelection = new Range(position.lineNumber, 1, position.lineNumber, position.column);\n\n\t\t\t\tconst command = new ReplaceCommand(typeSelection, typeText);\n\t\t\t\treturn new EditOperationResult([command], {\n\t\t\t\t\tshouldPushStackElementBefore: false,\n\t\t\t\t\tshouldPushStackElementAfter: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tpublic static typeWithInterceptors(config: CursorConfiguration, model: ITokenizedModel, selections: Selection[], ch: string): EditOperationResult {\n\n\t\tif (ch === '\\n') {\n\t\t\tlet commands: ICommand[] = [];\n\t\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\t\tcommands[i] = TypeOperations._enter(config, model, false, selections[i]);\n\t\t\t}\n\t\t\treturn new EditOperationResult(commands, {\n\t\t\t\tshouldPushStackElementBefore: true,\n\t\t\t\tshouldPushStackElementAfter: false,\n\t\t\t});\n\t\t}\n\n\t\tif (config.autoIndent) {\n\t\t\tlet indentCommand = this._runAutoIndentType(config, model, selections[0], ch);\n\t\t\tif (indentCommand) {\n\t\t\t\treturn new EditOperationResult([indentCommand], {\n\t\t\t\t\tshouldPushStackElementBefore: true,\n\t\t\t\t\tshouldPushStackElementAfter: false,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (this._isAutoClosingCloseCharType(config, model, selections, ch)) {\n\t\t\treturn this._runAutoClosingCloseCharType(config, model, selections, ch);\n\t\t}\n\n\t\tif (this._isAutoClosingOpenCharType(config, model, selections, ch)) {\n\t\t\treturn this._runAutoClosingOpenCharType(config, model, selections, ch);\n\t\t}\n\n\t\tif (this._isSurroundSelectionType(config, model, selections, ch)) {\n\t\t\treturn this._runSurroundSelectionType(config, model, selections, ch);\n\t\t}\n\n\t\t// Electric characters make sense only when dealing with a single cursor,\n\t\t// as multiple cursors typing brackets for example would interfer with bracket matching\n\t\tif (selections.length === 1) {\n\t\t\tconst r = this._typeInterceptorElectricChar(config, model, selections[0], ch);\n\t\t\tif (r) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t}\n\n\t\treturn this.typeWithoutInterceptors(config, model, selections, ch);\n\t}\n\n\tpublic static typeWithoutInterceptors(config: CursorConfiguration, model: ITokenizedModel, selections: Selection[], str: string): EditOperationResult {\n\t\tlet commands: ICommand[] = [];\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tcommands[i] = new ReplaceCommand(selections[i], str);\n\t\t}\n\t\treturn new EditOperationResult(commands, {\n\t\t\tshouldPushStackElementBefore: false,\n\t\t\tshouldPushStackElementAfter: false\n\t\t});\n\t}\n\n\tpublic static lineInsertBefore(config: CursorConfiguration, model: ITokenizedModel, selections: Selection[]): ICommand[] {\n\t\tlet commands: ICommand[] = [];\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tlet lineNumber = selections[i].positionLineNumber;\n\n\t\t\tif (lineNumber === 1) {\n\t\t\t\tcommands[i] = new ReplaceCommandWithoutChangingPosition(new Range(1, 1, 1, 1), '\\n');\n\t\t\t} else {\n\t\t\t\tlineNumber--;\n\t\t\t\tlet column = model.getLineMaxColumn(lineNumber);\n\n\t\t\t\tcommands[i] = this._enter(config, model, false, new Range(lineNumber, column, lineNumber, column));\n\t\t\t}\n\t\t}\n\t\treturn commands;\n\t}\n\n\tpublic static lineInsertAfter(config: CursorConfiguration, model: ITokenizedModel, selections: Selection[]): ICommand[] {\n\t\tlet commands: ICommand[] = [];\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tconst lineNumber = selections[i].positionLineNumber;\n\t\t\tlet column = model.getLineMaxColumn(lineNumber);\n\t\t\tcommands[i] = this._enter(config, model, false, new Range(lineNumber, column, lineNumber, column));\n\t\t}\n\t\treturn commands;\n\t}\n\n\tpublic static lineBreakInsert(config: CursorConfiguration, model: ITokenizedModel, selections: Selection[]): ICommand[] {\n\t\tlet commands: ICommand[] = [];\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tcommands[i] = this._enter(config, model, true, selections[i]);\n\t\t}\n\t\treturn commands;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { SingleCursorState, CursorConfiguration, ICursorSimpleModel } from 'vs/editor/common/controller/cursorCommon';\nimport { Position } from 'vs/editor/common/core/position';\nimport { WordCharacterClassifier, WordCharacterClass, getMapForWordSeparators } from 'vs/editor/common/controller/wordCharacterClassifier';\nimport * as strings from 'vs/base/common/strings';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection } from 'vs/editor/common/core/selection';\n\ninterface IFindWordResult {\n\t/**\n\t * The index where the word starts.\n\t */\n\tstart: number;\n\t/**\n\t * The index where the word ends.\n\t */\n\tend: number;\n\t/**\n\t * The word type.\n\t */\n\twordType: WordType;\n}\n\nconst enum WordType {\n\tNone = 0,\n\tRegular = 1,\n\tSeparator = 2\n}\n\nexport const enum WordNavigationType {\n\tWordStart = 0,\n\tWordEnd = 1\n}\n\nexport class WordOperations {\n\n\tprivate static _createWord(lineContent: string, wordType: WordType, start: number, end: number): IFindWordResult {\n\t\t// console.log('WORD ==> ' + start + ' => ' + end + ':::: <<<' + lineContent.substring(start, end) + '>>>');\n\t\treturn { start: start, end: end, wordType: wordType };\n\t}\n\n\tprivate static _findPreviousWordOnLine(wordSeparators: WordCharacterClassifier, model: ICursorSimpleModel, position: Position): IFindWordResult {\n\t\tlet lineContent = model.getLineContent(position.lineNumber);\n\t\treturn this._doFindPreviousWordOnLine(lineContent, wordSeparators, position);\n\t}\n\n\tprivate static _doFindPreviousWordOnLine(lineContent: string, wordSeparators: WordCharacterClassifier, position: Position): IFindWordResult {\n\t\tlet wordType = WordType.None;\n\t\tfor (let chIndex = position.column - 2; chIndex >= 0; chIndex--) {\n\t\t\tlet chCode = lineContent.charCodeAt(chIndex);\n\t\t\tlet chClass = wordSeparators.get(chCode);\n\n\t\t\tif (chClass === WordCharacterClass.Regular) {\n\t\t\t\tif (wordType === WordType.Separator) {\n\t\t\t\t\treturn this._createWord(lineContent, wordType, chIndex + 1, this._findEndOfWord(lineContent, wordSeparators, wordType, chIndex + 1));\n\t\t\t\t}\n\t\t\t\twordType = WordType.Regular;\n\t\t\t} else if (chClass === WordCharacterClass.WordSeparator) {\n\t\t\t\tif (wordType === WordType.Regular) {\n\t\t\t\t\treturn this._createWord(lineContent, wordType, chIndex + 1, this._findEndOfWord(lineContent, wordSeparators, wordType, chIndex + 1));\n\t\t\t\t}\n\t\t\t\twordType = WordType.Separator;\n\t\t\t} else if (chClass === WordCharacterClass.Whitespace) {\n\t\t\t\tif (wordType !== WordType.None) {\n\t\t\t\t\treturn this._createWord(lineContent, wordType, chIndex + 1, this._findEndOfWord(lineContent, wordSeparators, wordType, chIndex + 1));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (wordType !== WordType.None) {\n\t\t\treturn this._createWord(lineContent, wordType, 0, this._findEndOfWord(lineContent, wordSeparators, wordType, 0));\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate static _findEndOfWord(lineContent: string, wordSeparators: WordCharacterClassifier, wordType: WordType, startIndex: number): number {\n\t\tlet len = lineContent.length;\n\t\tfor (let chIndex = startIndex; chIndex < len; chIndex++) {\n\t\t\tlet chCode = lineContent.charCodeAt(chIndex);\n\t\t\tlet chClass = wordSeparators.get(chCode);\n\n\t\t\tif (chClass === WordCharacterClass.Whitespace) {\n\t\t\t\treturn chIndex;\n\t\t\t}\n\t\t\tif (wordType === WordType.Regular && chClass === WordCharacterClass.WordSeparator) {\n\t\t\t\treturn chIndex;\n\t\t\t}\n\t\t\tif (wordType === WordType.Separator && chClass === WordCharacterClass.Regular) {\n\t\t\t\treturn chIndex;\n\t\t\t}\n\t\t}\n\t\treturn len;\n\t}\n\n\tprivate static _findNextWordOnLine(wordSeparators: WordCharacterClassifier, model: ICursorSimpleModel, position: Position): IFindWordResult {\n\t\tlet lineContent = model.getLineContent(position.lineNumber);\n\t\treturn this._doFindNextWordOnLine(lineContent, wordSeparators, position);\n\t}\n\n\tprivate static _doFindNextWordOnLine(lineContent: string, wordSeparators: WordCharacterClassifier, position: Position): IFindWordResult {\n\t\tlet wordType = WordType.None;\n\t\tlet len = lineContent.length;\n\n\t\tfor (let chIndex = position.column - 1; chIndex < len; chIndex++) {\n\t\t\tlet chCode = lineContent.charCodeAt(chIndex);\n\t\t\tlet chClass = wordSeparators.get(chCode);\n\n\t\t\tif (chClass === WordCharacterClass.Regular) {\n\t\t\t\tif (wordType === WordType.Separator) {\n\t\t\t\t\treturn this._createWord(lineContent, wordType, this._findStartOfWord(lineContent, wordSeparators, wordType, chIndex - 1), chIndex);\n\t\t\t\t}\n\t\t\t\twordType = WordType.Regular;\n\t\t\t} else if (chClass === WordCharacterClass.WordSeparator) {\n\t\t\t\tif (wordType === WordType.Regular) {\n\t\t\t\t\treturn this._createWord(lineContent, wordType, this._findStartOfWord(lineContent, wordSeparators, wordType, chIndex - 1), chIndex);\n\t\t\t\t}\n\t\t\t\twordType = WordType.Separator;\n\t\t\t} else if (chClass === WordCharacterClass.Whitespace) {\n\t\t\t\tif (wordType !== WordType.None) {\n\t\t\t\t\treturn this._createWord(lineContent, wordType, this._findStartOfWord(lineContent, wordSeparators, wordType, chIndex - 1), chIndex);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (wordType !== WordType.None) {\n\t\t\treturn this._createWord(lineContent, wordType, this._findStartOfWord(lineContent, wordSeparators, wordType, len - 1), len);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate static _findStartOfWord(lineContent: string, wordSeparators: WordCharacterClassifier, wordType: WordType, startIndex: number): number {\n\t\tfor (let chIndex = startIndex; chIndex >= 0; chIndex--) {\n\t\t\tlet chCode = lineContent.charCodeAt(chIndex);\n\t\t\tlet chClass = wordSeparators.get(chCode);\n\n\t\t\tif (chClass === WordCharacterClass.Whitespace) {\n\t\t\t\treturn chIndex + 1;\n\t\t\t}\n\t\t\tif (wordType === WordType.Regular && chClass === WordCharacterClass.WordSeparator) {\n\t\t\t\treturn chIndex + 1;\n\t\t\t}\n\t\t\tif (wordType === WordType.Separator && chClass === WordCharacterClass.Regular) {\n\t\t\t\treturn chIndex + 1;\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t}\n\n\tpublic static moveWordLeft(wordSeparators: WordCharacterClassifier, model: ICursorSimpleModel, position: Position, wordNavigationType: WordNavigationType): Position {\n\t\tlet lineNumber = position.lineNumber;\n\t\tlet column = position.column;\n\n\t\tif (column === 1) {\n\t\t\tif (lineNumber > 1) {\n\t\t\t\tlineNumber = lineNumber - 1;\n\t\t\t\tcolumn = model.getLineMaxColumn(lineNumber);\n\t\t\t}\n\t\t}\n\n\t\tlet prevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, new Position(lineNumber, column));\n\n\t\tif (wordNavigationType === WordNavigationType.WordStart) {\n\t\t\tif (prevWordOnLine) {\n\t\t\t\tcolumn = prevWordOnLine.start + 1;\n\t\t\t} else {\n\t\t\t\tcolumn = 1;\n\t\t\t}\n\t\t} else {\n\t\t\tif (prevWordOnLine && column <= prevWordOnLine.end + 1) {\n\t\t\t\tprevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, new Position(lineNumber, prevWordOnLine.start + 1));\n\t\t\t}\n\t\t\tif (prevWordOnLine) {\n\t\t\t\tcolumn = prevWordOnLine.end + 1;\n\t\t\t} else {\n\t\t\t\tcolumn = 1;\n\t\t\t}\n\t\t}\n\n\t\treturn new Position(lineNumber, column);\n\t}\n\n\tpublic static moveWordRight(wordSeparators: WordCharacterClassifier, model: ICursorSimpleModel, position: Position, wordNavigationType: WordNavigationType): Position {\n\t\tlet lineNumber = position.lineNumber;\n\t\tlet column = position.column;\n\n\t\tif (column === model.getLineMaxColumn(lineNumber)) {\n\t\t\tif (lineNumber < model.getLineCount()) {\n\t\t\t\tlineNumber = lineNumber + 1;\n\t\t\t\tcolumn = 1;\n\t\t\t}\n\t\t}\n\n\t\tlet nextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, new Position(lineNumber, column));\n\n\t\tif (wordNavigationType === WordNavigationType.WordEnd) {\n\t\t\tif (nextWordOnLine) {\n\t\t\t\tcolumn = nextWordOnLine.end + 1;\n\t\t\t} else {\n\t\t\t\tcolumn = model.getLineMaxColumn(lineNumber);\n\t\t\t}\n\t\t} else {\n\t\t\tif (nextWordOnLine && column >= nextWordOnLine.start + 1) {\n\t\t\t\tnextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, new Position(lineNumber, nextWordOnLine.end + 1));\n\t\t\t}\n\t\t\tif (nextWordOnLine) {\n\t\t\t\tcolumn = nextWordOnLine.start + 1;\n\t\t\t} else {\n\t\t\t\tcolumn = model.getLineMaxColumn(lineNumber);\n\t\t\t}\n\t\t}\n\n\t\treturn new Position(lineNumber, column);\n\t}\n\n\tprivate static _deleteWordLeftWhitespace(model: ICursorSimpleModel, position: Position): Range {\n\t\tconst lineContent = model.getLineContent(position.lineNumber);\n\t\tconst startIndex = position.column - 2;\n\t\tconst lastNonWhitespace = strings.lastNonWhitespaceIndex(lineContent, startIndex);\n\t\tif (lastNonWhitespace + 1 < startIndex) {\n\t\t\treturn new Range(position.lineNumber, lastNonWhitespace + 2, position.lineNumber, position.column);\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic static deleteWordLeft(wordSeparators: WordCharacterClassifier, model: ICursorSimpleModel, selection: Selection, whitespaceHeuristics: boolean, wordNavigationType: WordNavigationType): Range {\n\t\tif (!selection.isEmpty()) {\n\t\t\treturn selection;\n\t\t}\n\n\t\tconst position = new Position(selection.positionLineNumber, selection.positionColumn);\n\n\t\tlet lineNumber = position.lineNumber;\n\t\tlet column = position.column;\n\n\t\tif (lineNumber === 1 && column === 1) {\n\t\t\t// Ignore deleting at beginning of file\n\t\t\treturn null;\n\t\t}\n\n\t\tif (whitespaceHeuristics) {\n\t\t\tlet r = this._deleteWordLeftWhitespace(model, position);\n\t\t\tif (r) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t}\n\n\t\tlet prevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, position);\n\n\t\tif (wordNavigationType === WordNavigationType.WordStart) {\n\t\t\tif (prevWordOnLine) {\n\t\t\t\tcolumn = prevWordOnLine.start + 1;\n\t\t\t} else {\n\t\t\t\tif (column > 1) {\n\t\t\t\t\tcolumn = 1;\n\t\t\t\t} else {\n\t\t\t\t\tlineNumber--;\n\t\t\t\t\tcolumn = model.getLineMaxColumn(lineNumber);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (prevWordOnLine && column <= prevWordOnLine.end + 1) {\n\t\t\t\tprevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, new Position(lineNumber, prevWordOnLine.start + 1));\n\t\t\t}\n\t\t\tif (prevWordOnLine) {\n\t\t\t\tcolumn = prevWordOnLine.end + 1;\n\t\t\t} else {\n\t\t\t\tif (column > 1) {\n\t\t\t\t\tcolumn = 1;\n\t\t\t\t} else {\n\t\t\t\t\tlineNumber--;\n\t\t\t\t\tcolumn = model.getLineMaxColumn(lineNumber);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn new Range(lineNumber, column, position.lineNumber, position.column);\n\t}\n\n\tprivate static _findFirstNonWhitespaceChar(str: string, startIndex: number): number {\n\t\tlet len = str.length;\n\t\tfor (let chIndex = startIndex; chIndex < len; chIndex++) {\n\t\t\tlet ch = str.charAt(chIndex);\n\t\t\tif (ch !== ' ' && ch !== '\\t') {\n\t\t\t\treturn chIndex;\n\t\t\t}\n\t\t}\n\t\treturn len;\n\t}\n\n\tprivate static _deleteWordRightWhitespace(model: ICursorSimpleModel, position: Position): Range {\n\t\tconst lineContent = model.getLineContent(position.lineNumber);\n\t\tconst startIndex = position.column - 1;\n\t\tconst firstNonWhitespace = this._findFirstNonWhitespaceChar(lineContent, startIndex);\n\t\tif (startIndex + 1 < firstNonWhitespace) {\n\t\t\t// bingo\n\t\t\treturn new Range(position.lineNumber, position.column, position.lineNumber, firstNonWhitespace + 1);\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic static deleteWordRight(wordSeparators: WordCharacterClassifier, model: ICursorSimpleModel, selection: Selection, whitespaceHeuristics: boolean, wordNavigationType: WordNavigationType): Range {\n\t\tif (!selection.isEmpty()) {\n\t\t\treturn selection;\n\t\t}\n\n\t\tconst position = new Position(selection.positionLineNumber, selection.positionColumn);\n\n\t\tlet lineNumber = position.lineNumber;\n\t\tlet column = position.column;\n\n\t\tconst lineCount = model.getLineCount();\n\t\tconst maxColumn = model.getLineMaxColumn(lineNumber);\n\t\tif (lineNumber === lineCount && column === maxColumn) {\n\t\t\t// Ignore deleting at end of file\n\t\t\treturn null;\n\t\t}\n\n\t\tif (whitespaceHeuristics) {\n\t\t\tlet r = this._deleteWordRightWhitespace(model, position);\n\t\t\tif (r) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t}\n\n\t\tlet nextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, position);\n\n\t\tif (wordNavigationType === WordNavigationType.WordEnd) {\n\t\t\tif (nextWordOnLine) {\n\t\t\t\tcolumn = nextWordOnLine.end + 1;\n\t\t\t} else {\n\t\t\t\tif (column < maxColumn || lineNumber === lineCount) {\n\t\t\t\t\tcolumn = maxColumn;\n\t\t\t\t} else {\n\t\t\t\t\tlineNumber++;\n\t\t\t\t\tnextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, new Position(lineNumber, 1));\n\t\t\t\t\tif (nextWordOnLine) {\n\t\t\t\t\t\tcolumn = nextWordOnLine.start + 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcolumn = model.getLineMaxColumn(lineNumber);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (nextWordOnLine && column >= nextWordOnLine.start + 1) {\n\t\t\t\tnextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, new Position(lineNumber, nextWordOnLine.end + 1));\n\t\t\t}\n\t\t\tif (nextWordOnLine) {\n\t\t\t\tcolumn = nextWordOnLine.start + 1;\n\t\t\t} else {\n\t\t\t\tif (column < maxColumn || lineNumber === lineCount) {\n\t\t\t\t\tcolumn = maxColumn;\n\t\t\t\t} else {\n\t\t\t\t\tlineNumber++;\n\t\t\t\t\tnextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, new Position(lineNumber, 1));\n\t\t\t\t\tif (nextWordOnLine) {\n\t\t\t\t\t\tcolumn = nextWordOnLine.start + 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcolumn = model.getLineMaxColumn(lineNumber);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn new Range(lineNumber, column, position.lineNumber, position.column);\n\t}\n\n\tpublic static word(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean, position: Position): SingleCursorState {\n\t\tconst wordSeparators = getMapForWordSeparators(config.wordSeparators);\n\t\tlet prevWord = WordOperations._findPreviousWordOnLine(wordSeparators, model, position);\n\t\tlet isInPrevWord = (prevWord && prevWord.wordType === WordType.Regular && prevWord.start < position.column - 1 && position.column - 1 <= prevWord.end);\n\t\tlet nextWord = WordOperations._findNextWordOnLine(wordSeparators, model, position);\n\t\tlet isInNextWord = (nextWord && nextWord.wordType === WordType.Regular && nextWord.start < position.column - 1 && position.column - 1 <= nextWord.end);\n\n\t\tif (!inSelectionMode || !cursor.hasSelection()) {\n\t\t\t// Entering word selection for the first time\n\n\t\t\tlet startColumn: number;\n\t\t\tlet endColumn: number;\n\n\t\t\tif (isInPrevWord) {\n\t\t\t\tstartColumn = prevWord.start + 1;\n\t\t\t\tendColumn = prevWord.end + 1;\n\t\t\t} else if (isInNextWord) {\n\t\t\t\tstartColumn = nextWord.start + 1;\n\t\t\t\tendColumn = nextWord.end + 1;\n\t\t\t} else {\n\t\t\t\tif (prevWord) {\n\t\t\t\t\tstartColumn = prevWord.end + 1;\n\t\t\t\t} else {\n\t\t\t\t\tstartColumn = 1;\n\t\t\t\t}\n\t\t\t\tif (nextWord) {\n\t\t\t\t\tendColumn = nextWord.start + 1;\n\t\t\t\t} else {\n\t\t\t\t\tendColumn = model.getLineMaxColumn(position.lineNumber);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn new SingleCursorState(\n\t\t\t\tnew Range(position.lineNumber, startColumn, position.lineNumber, endColumn), 0,\n\t\t\t\tnew Position(position.lineNumber, endColumn), 0\n\t\t\t);\n\t\t}\n\n\t\tlet startColumn: number;\n\t\tlet endColumn: number;\n\n\t\tif (isInPrevWord) {\n\t\t\tstartColumn = prevWord.start + 1;\n\t\t\tendColumn = prevWord.end + 1;\n\t\t} else if (isInNextWord) {\n\t\t\tstartColumn = nextWord.start + 1;\n\t\t\tendColumn = nextWord.end + 1;\n\t\t} else {\n\t\t\tstartColumn = position.column;\n\t\t\tendColumn = position.column;\n\t\t}\n\n\t\tlet lineNumber = position.lineNumber;\n\t\tlet column: number;\n\t\tif (position.isBeforeOrEqual(cursor.selectionStart.getStartPosition())) {\n\t\t\tcolumn = startColumn;\n\t\t\tlet possiblePosition = new Position(lineNumber, column);\n\t\t\tif (cursor.selectionStart.containsPosition(possiblePosition)) {\n\t\t\t\tcolumn = cursor.selectionStart.endColumn;\n\t\t\t}\n\t\t} else {\n\t\t\tcolumn = endColumn;\n\t\t\tlet possiblePosition = new Position(lineNumber, column);\n\t\t\tif (cursor.selectionStart.containsPosition(possiblePosition)) {\n\t\t\t\tcolumn = cursor.selectionStart.startColumn;\n\t\t\t}\n\t\t}\n\n\t\treturn cursor.move(cursor.hasSelection(), lineNumber, column, 0);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { SingleCursorState, ICursorSimpleModel, CursorState, CursorContext } from 'vs/editor/common/controller/cursorCommon';\nimport { Position, IPosition } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport { MoveOperations } from 'vs/editor/common/controller/cursorMoveOperations';\nimport { WordOperations } from 'vs/editor/common/controller/cursorWordOperations';\nimport * as types from 'vs/base/common/types';\nimport { ICommandHandlerDescription } from 'vs/platform/commands/common/commands';\n\nexport class CursorMoveCommands {\n\n\tpublic static addCursorDown(context: CursorContext, cursors: CursorState[]): CursorState[] {\n\t\tlet result: CursorState[] = [], resultLen = 0;\n\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\tconst cursor = cursors[i];\n\t\t\tresult[resultLen++] = new CursorState(cursor.modelState, cursor.viewState);\n\t\t\tresult[resultLen++] = CursorState.fromViewState(MoveOperations.translateDown(context.config, context.viewModel, cursor.viewState));\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic static addCursorUp(context: CursorContext, cursors: CursorState[]): CursorState[] {\n\t\tlet result: CursorState[] = [], resultLen = 0;\n\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\tconst cursor = cursors[i];\n\t\t\tresult[resultLen++] = new CursorState(cursor.modelState, cursor.viewState);\n\t\t\tresult[resultLen++] = CursorState.fromViewState(MoveOperations.translateUp(context.config, context.viewModel, cursor.viewState));\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic static moveToBeginningOfLine(context: CursorContext, cursors: CursorState[], inSelectionMode: boolean): CursorState[] {\n\t\tlet result: CursorState[] = [];\n\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\tconst cursor = cursors[i];\n\t\t\tresult[i] = this._moveToLineStart(context, cursor, inSelectionMode);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate static _moveToLineStart(context: CursorContext, cursor: CursorState, inSelectionMode: boolean): CursorState {\n\t\tconst currentViewStateColumn = cursor.viewState.position.column;\n\t\tconst currentModelStateColumn = cursor.modelState.position.column;\n\t\tconst isFirstLineOfWrappedLine = currentViewStateColumn === currentModelStateColumn;\n\n\t\tconst currentViewStatelineNumber = cursor.viewState.position.lineNumber;\n\t\tconst firstNonBlankColumn = context.viewModel.getLineFirstNonWhitespaceColumn(currentViewStatelineNumber);\n\t\tconst isBeginningOfViewLine = currentViewStateColumn === firstNonBlankColumn;\n\n\t\tif (!isFirstLineOfWrappedLine && !isBeginningOfViewLine) {\n\t\t\treturn this._moveToLineStartByView(context, cursor, inSelectionMode);\n\t\t} else {\n\t\t\treturn this._moveToLineStartByModel(context, cursor, inSelectionMode);\n\t\t}\n\t}\n\n\tprivate static _moveToLineStartByView(context: CursorContext, cursor: CursorState, inSelectionMode: boolean): CursorState {\n\t\treturn CursorState.fromViewState(\n\t\t\tMoveOperations.moveToBeginningOfLine(context.config, context.viewModel, cursor.viewState, inSelectionMode)\n\t\t);\n\t}\n\n\tprivate static _moveToLineStartByModel(context: CursorContext, cursor: CursorState, inSelectionMode: boolean): CursorState {\n\t\treturn CursorState.fromModelState(\n\t\t\tMoveOperations.moveToBeginningOfLine(context.config, context.model, cursor.modelState, inSelectionMode)\n\t\t);\n\t}\n\n\tpublic static moveToEndOfLine(context: CursorContext, cursors: CursorState[], inSelectionMode: boolean): CursorState[] {\n\t\tlet result: CursorState[] = [];\n\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\tconst cursor = cursors[i];\n\t\t\tresult[i] = this._moveToLineEnd(context, cursor, inSelectionMode);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate static _moveToLineEnd(context: CursorContext, cursor: CursorState, inSelectionMode: boolean): CursorState {\n\t\tconst viewStatePosition = cursor.viewState.position;\n\t\tconst viewModelMaxColumn = context.viewModel.getLineMaxColumn(viewStatePosition.lineNumber);\n\t\tconst isEndOfViewLine = viewStatePosition.column === viewModelMaxColumn;\n\n\t\tconst modelStatePosition = cursor.modelState.position;\n\t\tconst modelMaxColumn = context.model.getLineMaxColumn(modelStatePosition.lineNumber);\n\t\tconst isEndLineOfWrappedLine = viewModelMaxColumn - viewStatePosition.column === modelMaxColumn - modelStatePosition.column;\n\n\t\tif (isEndOfViewLine || isEndLineOfWrappedLine) {\n\t\t\treturn this._moveToLineEndByModel(context, cursor, inSelectionMode);\n\t\t} else {\n\t\t\treturn this._moveToLineEndByView(context, cursor, inSelectionMode);\n\t\t}\n\t}\n\n\tprivate static _moveToLineEndByView(context: CursorContext, cursor: CursorState, inSelectionMode: boolean): CursorState {\n\t\treturn CursorState.fromViewState(\n\t\t\tMoveOperations.moveToEndOfLine(context.config, context.viewModel, cursor.viewState, inSelectionMode)\n\t\t);\n\t}\n\n\tprivate static _moveToLineEndByModel(context: CursorContext, cursor: CursorState, inSelectionMode: boolean): CursorState {\n\t\treturn CursorState.fromModelState(\n\t\t\tMoveOperations.moveToEndOfLine(context.config, context.model, cursor.modelState, inSelectionMode)\n\t\t);\n\t}\n\n\tpublic static expandLineSelection(context: CursorContext, cursors: CursorState[]): CursorState[] {\n\t\tlet result: CursorState[] = [];\n\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\tconst cursor = cursors[i];\n\n\t\t\tconst viewSelection = cursor.viewState.selection;\n\t\t\tconst startLineNumber = viewSelection.startLineNumber;\n\t\t\tconst lineCount = context.viewModel.getLineCount();\n\n\t\t\tlet endLineNumber = viewSelection.endLineNumber;\n\t\t\tlet endColumn: number;\n\t\t\tif (endLineNumber === lineCount) {\n\t\t\t\tendColumn = context.viewModel.getLineMaxColumn(lineCount);\n\t\t\t} else {\n\t\t\t\tendLineNumber++;\n\t\t\t\tendColumn = 1;\n\t\t\t}\n\n\t\t\tresult[i] = CursorState.fromViewState(new SingleCursorState(\n\t\t\t\tnew Range(startLineNumber, 1, startLineNumber, 1), 0,\n\t\t\t\tnew Position(endLineNumber, endColumn), 0\n\t\t\t));\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic static moveToBeginningOfBuffer(context: CursorContext, cursors: CursorState[], inSelectionMode: boolean): CursorState[] {\n\t\tlet result: CursorState[] = [];\n\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\tconst cursor = cursors[i];\n\t\t\tresult[i] = CursorState.fromModelState(MoveOperations.moveToBeginningOfBuffer(context.config, context.model, cursor.modelState, inSelectionMode));\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic static moveToEndOfBuffer(context: CursorContext, cursors: CursorState[], inSelectionMode: boolean): CursorState[] {\n\t\tlet result: CursorState[] = [];\n\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\tconst cursor = cursors[i];\n\t\t\tresult[i] = CursorState.fromModelState(MoveOperations.moveToEndOfBuffer(context.config, context.model, cursor.modelState, inSelectionMode));\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic static selectAll(context: CursorContext, cursor: CursorState): CursorState {\n\n\t\tif (context.model.hasEditableRange()) {\n\t\t\t// Toggle between selecting editable range and selecting the entire buffer\n\n\t\t\tconst editableRange = context.model.getEditableRange();\n\t\t\tconst selection = cursor.modelState.selection;\n\n\t\t\tif (!selection.equalsRange(editableRange)) {\n\t\t\t\t// Selection is not editable range => select editable range\n\t\t\t\treturn CursorState.fromModelState(new SingleCursorState(\n\t\t\t\t\tnew Range(editableRange.startLineNumber, editableRange.startColumn, editableRange.startLineNumber, editableRange.startColumn), 0,\n\t\t\t\t\tnew Position(editableRange.endLineNumber, editableRange.endColumn), 0\n\t\t\t\t));\n\t\t\t}\n\t\t}\n\n\t\tconst lineCount = context.model.getLineCount();\n\t\tconst maxColumn = context.model.getLineMaxColumn(lineCount);\n\n\t\treturn CursorState.fromModelState(new SingleCursorState(\n\t\t\tnew Range(1, 1, 1, 1), 0,\n\t\t\tnew Position(lineCount, maxColumn), 0\n\t\t));\n\t}\n\n\tpublic static line(context: CursorContext, cursor: CursorState, inSelectionMode: boolean, _position: IPosition, _viewPosition: IPosition): CursorState {\n\t\tconst position = context.model.validatePosition(_position);\n\t\tconst viewPosition = (\n\t\t\t_viewPosition\n\t\t\t\t? context.validateViewPosition(new Position(_viewPosition.lineNumber, _viewPosition.column), position)\n\t\t\t\t: context.convertModelPositionToViewPosition(position)\n\t\t);\n\n\t\tif (!inSelectionMode || !cursor.modelState.hasSelection()) {\n\t\t\t// Entering line selection for the first time\n\t\t\tconst lineCount = context.model.getLineCount();\n\n\t\t\tlet selectToLineNumber = position.lineNumber + 1;\n\t\t\tlet selectToColumn = 1;\n\t\t\tif (selectToLineNumber > lineCount) {\n\t\t\t\tselectToLineNumber = lineCount;\n\t\t\t\tselectToColumn = context.model.getLineMaxColumn(selectToLineNumber);\n\t\t\t}\n\n\t\t\treturn CursorState.fromModelState(new SingleCursorState(\n\t\t\t\tnew Range(position.lineNumber, 1, selectToLineNumber, selectToColumn), 0,\n\t\t\t\tnew Position(selectToLineNumber, selectToColumn), 0\n\t\t\t));\n\t\t}\n\n\t\t// Continuing line selection\n\t\tconst enteringLineNumber = cursor.modelState.selectionStart.getStartPosition().lineNumber;\n\n\t\tif (position.lineNumber < enteringLineNumber) {\n\n\t\t\treturn CursorState.fromViewState(cursor.viewState.move(\n\t\t\t\tcursor.modelState.hasSelection(), viewPosition.lineNumber, 1, 0\n\t\t\t));\n\n\t\t} else if (position.lineNumber > enteringLineNumber) {\n\n\t\t\tconst lineCount = context.viewModel.getLineCount();\n\n\t\t\tlet selectToViewLineNumber = viewPosition.lineNumber + 1;\n\t\t\tlet selectToViewColumn = 1;\n\t\t\tif (selectToViewLineNumber > lineCount) {\n\t\t\t\tselectToViewLineNumber = lineCount;\n\t\t\t\tselectToViewColumn = context.viewModel.getLineMaxColumn(selectToViewLineNumber);\n\t\t\t}\n\n\t\t\treturn CursorState.fromViewState(cursor.viewState.move(\n\t\t\t\tcursor.modelState.hasSelection(), selectToViewLineNumber, selectToViewColumn, 0\n\t\t\t));\n\n\t\t} else {\n\n\t\t\tconst endPositionOfSelectionStart = cursor.modelState.selectionStart.getEndPosition();\n\t\t\treturn CursorState.fromModelState(cursor.modelState.move(\n\t\t\t\tcursor.modelState.hasSelection(), endPositionOfSelectionStart.lineNumber, endPositionOfSelectionStart.column, 0\n\t\t\t));\n\n\t\t}\n\t}\n\n\tpublic static word(context: CursorContext, cursor: CursorState, inSelectionMode: boolean, _position: IPosition): CursorState {\n\t\tconst position = context.model.validatePosition(_position);\n\t\treturn CursorState.fromModelState(WordOperations.word(context.config, context.model, cursor.modelState, inSelectionMode, position));\n\t}\n\n\tpublic static cancelSelection(context: CursorContext, cursor: CursorState): CursorState {\n\t\tif (!cursor.modelState.hasSelection()) {\n\t\t\treturn new CursorState(cursor.modelState, cursor.viewState);\n\t\t}\n\n\t\tconst lineNumber = cursor.viewState.position.lineNumber;\n\t\tconst column = cursor.viewState.position.column;\n\n\t\treturn CursorState.fromViewState(new SingleCursorState(\n\t\t\tnew Range(lineNumber, column, lineNumber, column), 0,\n\t\t\tnew Position(lineNumber, column), 0\n\t\t));\n\t}\n\n\tpublic static moveTo(context: CursorContext, cursor: CursorState, inSelectionMode: boolean, _position: IPosition, _viewPosition: IPosition): CursorState {\n\t\tconst position = context.model.validatePosition(_position);\n\t\tconst viewPosition = (\n\t\t\t_viewPosition\n\t\t\t\t? context.validateViewPosition(new Position(_viewPosition.lineNumber, _viewPosition.column), position)\n\t\t\t\t: context.convertModelPositionToViewPosition(position)\n\t\t);\n\t\treturn CursorState.fromViewState(cursor.viewState.move(inSelectionMode, viewPosition.lineNumber, viewPosition.column, 0));\n\t}\n\n\tpublic static move(context: CursorContext, cursors: CursorState[], args: CursorMove.ParsedArguments): CursorState[] {\n\t\tconst inSelectionMode = args.select;\n\t\tconst value = args.value;\n\n\t\tswitch (args.direction) {\n\t\t\tcase CursorMove.Direction.Left: {\n\t\t\t\tif (args.unit === CursorMove.Unit.HalfLine) {\n\t\t\t\t\t// Move left by half the current line length\n\t\t\t\t\treturn this._moveHalfLineLeft(context, cursors, inSelectionMode);\n\t\t\t\t} else {\n\t\t\t\t\t// Move left by `moveParams.value` columns\n\t\t\t\t\treturn this._moveLeft(context, cursors, inSelectionMode, value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcase CursorMove.Direction.Right: {\n\t\t\t\tif (args.unit === CursorMove.Unit.HalfLine) {\n\t\t\t\t\t// Move right by half the current line length\n\t\t\t\t\treturn this._moveHalfLineRight(context, cursors, inSelectionMode);\n\t\t\t\t} else {\n\t\t\t\t\t// Move right by `moveParams.value` columns\n\t\t\t\t\treturn this._moveRight(context, cursors, inSelectionMode, value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcase CursorMove.Direction.Up: {\n\t\t\t\tif (args.unit === CursorMove.Unit.WrappedLine) {\n\t\t\t\t\t// Move up by view lines\n\t\t\t\t\treturn this._moveUpByViewLines(context, cursors, inSelectionMode, value);\n\t\t\t\t} else {\n\t\t\t\t\t// Move up by model lines\n\t\t\t\t\treturn this._moveUpByModelLines(context, cursors, inSelectionMode, value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcase CursorMove.Direction.Down: {\n\t\t\t\tif (args.unit === CursorMove.Unit.WrappedLine) {\n\t\t\t\t\t// Move down by view lines\n\t\t\t\t\treturn this._moveDownByViewLines(context, cursors, inSelectionMode, value);\n\t\t\t\t} else {\n\t\t\t\t\t// Move down by model lines\n\t\t\t\t\treturn this._moveDownByModelLines(context, cursors, inSelectionMode, value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcase CursorMove.Direction.WrappedLineStart: {\n\t\t\t\t// Move to the beginning of the current view line\n\t\t\t\treturn this._moveToViewMinColumn(context, cursors, inSelectionMode);\n\t\t\t}\n\t\t\tcase CursorMove.Direction.WrappedLineFirstNonWhitespaceCharacter: {\n\t\t\t\t// Move to the first non-whitespace column of the current view line\n\t\t\t\treturn this._moveToViewFirstNonWhitespaceColumn(context, cursors, inSelectionMode);\n\t\t\t}\n\t\t\tcase CursorMove.Direction.WrappedLineColumnCenter: {\n\t\t\t\t// Move to the \"center\" of the current view line\n\t\t\t\treturn this._moveToViewCenterColumn(context, cursors, inSelectionMode);\n\t\t\t}\n\t\t\tcase CursorMove.Direction.WrappedLineEnd: {\n\t\t\t\t// Move to the end of the current view line\n\t\t\t\treturn this._moveToViewMaxColumn(context, cursors, inSelectionMode);\n\t\t\t}\n\t\t\tcase CursorMove.Direction.WrappedLineLastNonWhitespaceCharacter: {\n\t\t\t\t// Move to the last non-whitespace column of the current view line\n\t\t\t\treturn this._moveToViewLastNonWhitespaceColumn(context, cursors, inSelectionMode);\n\t\t\t}\n\t\t\tcase CursorMove.Direction.ViewPortTop: {\n\t\t\t\t// Move to the nth line start in the viewport (from the top)\n\t\t\t\tconst cursor = cursors[0];\n\t\t\t\tconst visibleModelRange = context.getCompletelyVisibleModelRange();\n\t\t\t\tconst modelLineNumber = this._firstLineNumberInRange(context.model, visibleModelRange, value);\n\t\t\t\tconst modelColumn = context.model.getLineFirstNonWhitespaceColumn(modelLineNumber);\n\t\t\t\treturn [this._moveToModelPosition(context, cursor, inSelectionMode, modelLineNumber, modelColumn)];\n\t\t\t}\n\t\t\tcase CursorMove.Direction.ViewPortBottom: {\n\t\t\t\t// Move to the nth line start in the viewport (from the bottom)\n\t\t\t\tconst cursor = cursors[0];\n\t\t\t\tconst visibleModelRange = context.getCompletelyVisibleModelRange();\n\t\t\t\tconst modelLineNumber = this._lastLineNumberInRange(context.model, visibleModelRange, value);\n\t\t\t\tconst modelColumn = context.model.getLineFirstNonWhitespaceColumn(modelLineNumber);\n\t\t\t\treturn [this._moveToModelPosition(context, cursor, inSelectionMode, modelLineNumber, modelColumn)];\n\t\t\t}\n\t\t\tcase CursorMove.Direction.ViewPortCenter: {\n\t\t\t\t// Move to the line start in the viewport center\n\t\t\t\tconst cursor = cursors[0];\n\t\t\t\tconst visibleModelRange = context.getCompletelyVisibleModelRange();\n\t\t\t\tconst modelLineNumber = Math.round((visibleModelRange.startLineNumber + visibleModelRange.endLineNumber) / 2);\n\t\t\t\tconst modelColumn = context.model.getLineFirstNonWhitespaceColumn(modelLineNumber);\n\t\t\t\treturn [this._moveToModelPosition(context, cursor, inSelectionMode, modelLineNumber, modelColumn)];\n\t\t\t}\n\t\t\tcase CursorMove.Direction.ViewPortIfOutside: {\n\t\t\t\t// Move to a position inside the viewport\n\t\t\t\tconst visibleViewRange = context.getCompletelyVisibleViewRange();\n\t\t\t\tlet result: CursorState[] = [];\n\t\t\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\t\t\tconst cursor = cursors[i];\n\t\t\t\t\tresult[i] = this.findPositionInViewportIfOutside(context, cursor, visibleViewRange, inSelectionMode);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\n\tpublic static findPositionInViewportIfOutside(context: CursorContext, cursor: CursorState, visibleViewRange: Range, inSelectionMode: boolean): CursorState {\n\t\tlet viewLineNumber = cursor.viewState.position.lineNumber;\n\n\t\tif (visibleViewRange.startLineNumber <= viewLineNumber && viewLineNumber <= visibleViewRange.endLineNumber - 1) {\n\t\t\t// Nothing to do, cursor is in viewport\n\t\t\treturn new CursorState(cursor.modelState, cursor.viewState);\n\n\t\t} else {\n\t\t\tif (viewLineNumber > visibleViewRange.endLineNumber - 1) {\n\t\t\t\tviewLineNumber = visibleViewRange.endLineNumber - 1;\n\t\t\t}\n\t\t\tif (viewLineNumber < visibleViewRange.startLineNumber) {\n\t\t\t\tviewLineNumber = visibleViewRange.startLineNumber;\n\t\t\t}\n\t\t\tconst viewColumn = context.viewModel.getLineFirstNonWhitespaceColumn(viewLineNumber);\n\t\t\treturn this._moveToViewPosition(context, cursor, inSelectionMode, viewLineNumber, viewColumn);\n\t\t}\n\t}\n\n\t/**\n\t * Find the nth line start included in the range (from the start).\n\t */\n\tprivate static _firstLineNumberInRange(model: ICursorSimpleModel, range: Range, count: number): number {\n\t\tlet startLineNumber = range.startLineNumber;\n\t\tif (range.startColumn !== model.getLineMinColumn(startLineNumber)) {\n\t\t\t// Move on to the second line if the first line start is not included in the range\n\t\t\tstartLineNumber++;\n\t\t}\n\n\t\treturn Math.min(range.endLineNumber, startLineNumber + count - 1);\n\t}\n\n\t/**\n\t * Find the nth line start included in the range (from the end).\n\t */\n\tprivate static _lastLineNumberInRange(model: ICursorSimpleModel, range: Range, count: number): number {\n\t\tlet startLineNumber = range.startLineNumber;\n\t\tif (range.startColumn !== model.getLineMinColumn(startLineNumber)) {\n\t\t\t// Move on to the second line if the first line start is not included in the range\n\t\t\tstartLineNumber++;\n\t\t}\n\n\t\treturn Math.max(startLineNumber, range.endLineNumber - count + 1);\n\t}\n\n\tprivate static _moveLeft(context: CursorContext, cursors: CursorState[], inSelectionMode: boolean, noOfColumns: number): CursorState[] {\n\t\tlet result: CursorState[] = [];\n\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\tconst cursor = cursors[i];\n\t\t\tresult[i] = CursorState.fromViewState(MoveOperations.moveLeft(context.config, context.viewModel, cursor.viewState, inSelectionMode, noOfColumns));\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _moveHalfLineLeft(context: CursorContext, cursors: CursorState[], inSelectionMode: boolean): CursorState[] {\n\t\tlet result: CursorState[] = [];\n\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\tconst cursor = cursors[i];\n\t\t\tconst viewLineNumber = cursor.viewState.position.lineNumber;\n\t\t\tconst halfLine = Math.round(context.viewModel.getLineContent(viewLineNumber).length / 2);\n\t\t\tresult[i] = CursorState.fromViewState(MoveOperations.moveLeft(context.config, context.viewModel, cursor.viewState, inSelectionMode, halfLine));\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _moveRight(context: CursorContext, cursors: CursorState[], inSelectionMode: boolean, noOfColumns: number): CursorState[] {\n\t\tlet result: CursorState[] = [];\n\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\tconst cursor = cursors[i];\n\t\t\tresult[i] = CursorState.fromViewState(MoveOperations.moveRight(context.config, context.viewModel, cursor.viewState, inSelectionMode, noOfColumns));\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _moveHalfLineRight(context: CursorContext, cursors: CursorState[], inSelectionMode: boolean): CursorState[] {\n\t\tlet result: CursorState[] = [];\n\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\tconst cursor = cursors[i];\n\t\t\tconst viewLineNumber = cursor.viewState.position.lineNumber;\n\t\t\tconst halfLine = Math.round(context.viewModel.getLineContent(viewLineNumber).length / 2);\n\t\t\tresult[i] = CursorState.fromViewState(MoveOperations.moveRight(context.config, context.viewModel, cursor.viewState, inSelectionMode, halfLine));\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _moveDownByViewLines(context: CursorContext, cursors: CursorState[], inSelectionMode: boolean, linesCount: number): CursorState[] {\n\t\tlet result: CursorState[] = [];\n\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\tconst cursor = cursors[i];\n\t\t\tresult[i] = CursorState.fromViewState(MoveOperations.moveDown(context.config, context.viewModel, cursor.viewState, inSelectionMode, linesCount));\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _moveDownByModelLines(context: CursorContext, cursors: CursorState[], inSelectionMode: boolean, linesCount: number): CursorState[] {\n\t\tlet result: CursorState[] = [];\n\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\tconst cursor = cursors[i];\n\t\t\tresult[i] = CursorState.fromModelState(MoveOperations.moveDown(context.config, context.model, cursor.modelState, inSelectionMode, linesCount));\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _moveUpByViewLines(context: CursorContext, cursors: CursorState[], inSelectionMode: boolean, linesCount: number): CursorState[] {\n\t\tlet result: CursorState[] = [];\n\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\tconst cursor = cursors[i];\n\t\t\tresult[i] = CursorState.fromViewState(MoveOperations.moveUp(context.config, context.viewModel, cursor.viewState, inSelectionMode, linesCount));\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _moveUpByModelLines(context: CursorContext, cursors: CursorState[], inSelectionMode: boolean, linesCount: number): CursorState[] {\n\t\tlet result: CursorState[] = [];\n\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\tconst cursor = cursors[i];\n\t\t\tresult[i] = CursorState.fromModelState(MoveOperations.moveUp(context.config, context.model, cursor.modelState, inSelectionMode, linesCount));\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _moveToViewPosition(context: CursorContext, cursor: CursorState, inSelectionMode: boolean, toViewLineNumber: number, toViewColumn: number): CursorState {\n\t\treturn CursorState.fromViewState(cursor.viewState.move(inSelectionMode, toViewLineNumber, toViewColumn, 0));\n\t}\n\n\tprivate static _moveToModelPosition(context: CursorContext, cursor: CursorState, inSelectionMode: boolean, toModelLineNumber: number, toModelColumn: number): CursorState {\n\t\treturn CursorState.fromModelState(cursor.modelState.move(inSelectionMode, toModelLineNumber, toModelColumn, 0));\n\t}\n\n\tprivate static _moveToViewMinColumn(context: CursorContext, cursors: CursorState[], inSelectionMode: boolean): CursorState[] {\n\t\tlet result: CursorState[] = [];\n\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\tconst cursor = cursors[i];\n\t\t\tconst viewLineNumber = cursor.viewState.position.lineNumber;\n\t\t\tconst viewColumn = context.viewModel.getLineMinColumn(viewLineNumber);\n\t\t\tresult[i] = this._moveToViewPosition(context, cursor, inSelectionMode, viewLineNumber, viewColumn);\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _moveToViewFirstNonWhitespaceColumn(context: CursorContext, cursors: CursorState[], inSelectionMode: boolean): CursorState[] {\n\t\tlet result: CursorState[] = [];\n\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\tconst cursor = cursors[i];\n\t\t\tconst viewLineNumber = cursor.viewState.position.lineNumber;\n\t\t\tconst viewColumn = context.viewModel.getLineFirstNonWhitespaceColumn(viewLineNumber);\n\t\t\tresult[i] = this._moveToViewPosition(context, cursor, inSelectionMode, viewLineNumber, viewColumn);\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _moveToViewCenterColumn(context: CursorContext, cursors: CursorState[], inSelectionMode: boolean): CursorState[] {\n\t\tlet result: CursorState[] = [];\n\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\tconst cursor = cursors[i];\n\t\t\tconst viewLineNumber = cursor.viewState.position.lineNumber;\n\t\t\tconst viewColumn = Math.round((context.viewModel.getLineMaxColumn(viewLineNumber) + context.viewModel.getLineMinColumn(viewLineNumber)) / 2);\n\t\t\tresult[i] = this._moveToViewPosition(context, cursor, inSelectionMode, viewLineNumber, viewColumn);\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _moveToViewMaxColumn(context: CursorContext, cursors: CursorState[], inSelectionMode: boolean): CursorState[] {\n\t\tlet result: CursorState[] = [];\n\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\tconst cursor = cursors[i];\n\t\t\tconst viewLineNumber = cursor.viewState.position.lineNumber;\n\t\t\tconst viewColumn = context.viewModel.getLineMaxColumn(viewLineNumber);\n\t\t\tresult[i] = this._moveToViewPosition(context, cursor, inSelectionMode, viewLineNumber, viewColumn);\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _moveToViewLastNonWhitespaceColumn(context: CursorContext, cursors: CursorState[], inSelectionMode: boolean): CursorState[] {\n\t\tlet result: CursorState[] = [];\n\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\tconst cursor = cursors[i];\n\t\t\tconst viewLineNumber = cursor.viewState.position.lineNumber;\n\t\t\tconst viewColumn = context.viewModel.getLineLastNonWhitespaceColumn(viewLineNumber);\n\t\t\tresult[i] = this._moveToViewPosition(context, cursor, inSelectionMode, viewLineNumber, viewColumn);\n\t\t}\n\t\treturn result;\n\t}\n}\n\nexport namespace CursorMove {\n\n\tconst isCursorMoveArgs = function (arg: any): boolean {\n\t\tif (!types.isObject(arg)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet cursorMoveArg: RawArguments = arg;\n\n\t\tif (!types.isString(cursorMoveArg.to)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!types.isUndefined(cursorMoveArg.select) && !types.isBoolean(cursorMoveArg.select)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!types.isUndefined(cursorMoveArg.by) && !types.isString(cursorMoveArg.by)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!types.isUndefined(cursorMoveArg.value) && !types.isNumber(cursorMoveArg.value)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t};\n\n\texport const description = {\n\t\tdescription: 'Move cursor to a logical position in the view',\n\t\targs: [\n\t\t\t{\n\t\t\t\tname: 'Cursor move argument object',\n\t\t\t\tdescription: `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`,\n\t\t\t\tconstraint: isCursorMoveArgs\n\t\t\t}\n\t\t]\n\t};\n\n\t/**\n\t * Positions in the view for cursor move command.\n\t */\n\texport const RawDirection = {\n\t\tLeft: 'left',\n\t\tRight: 'right',\n\t\tUp: 'up',\n\t\tDown: 'down',\n\n\t\tWrappedLineStart: 'wrappedLineStart',\n\t\tWrappedLineFirstNonWhitespaceCharacter: 'wrappedLineFirstNonWhitespaceCharacter',\n\t\tWrappedLineColumnCenter: 'wrappedLineColumnCenter',\n\t\tWrappedLineEnd: 'wrappedLineEnd',\n\t\tWrappedLineLastNonWhitespaceCharacter: 'wrappedLineLastNonWhitespaceCharacter',\n\n\t\tViewPortTop: 'viewPortTop',\n\t\tViewPortCenter: 'viewPortCenter',\n\t\tViewPortBottom: 'viewPortBottom',\n\n\t\tViewPortIfOutside: 'viewPortIfOutside'\n\t};\n\n\t/**\n\t * Units for Cursor move 'by' argument\n\t */\n\texport const RawUnit = {\n\t\tLine: 'line',\n\t\tWrappedLine: 'wrappedLine',\n\t\tCharacter: 'character',\n\t\tHalfLine: 'halfLine'\n\t};\n\n\t/**\n\t * Arguments for Cursor move command\n\t */\n\texport interface RawArguments {\n\t\tto: string;\n\t\tselect?: boolean;\n\t\tby?: string;\n\t\tvalue?: number;\n\t};\n\n\texport function parse(args: RawArguments): ParsedArguments {\n\t\tif (!args.to) {\n\t\t\t// illegal arguments\n\t\t\treturn null;\n\t\t}\n\n\t\tlet direction: Direction;\n\t\tswitch (args.to) {\n\t\t\tcase RawDirection.Left:\n\t\t\t\tdirection = Direction.Left;\n\t\t\t\tbreak;\n\t\t\tcase RawDirection.Right:\n\t\t\t\tdirection = Direction.Right;\n\t\t\t\tbreak;\n\t\t\tcase RawDirection.Up:\n\t\t\t\tdirection = Direction.Up;\n\t\t\t\tbreak;\n\t\t\tcase RawDirection.Down:\n\t\t\t\tdirection = Direction.Down;\n\t\t\t\tbreak;\n\t\t\tcase RawDirection.WrappedLineStart:\n\t\t\t\tdirection = Direction.WrappedLineStart;\n\t\t\t\tbreak;\n\t\t\tcase RawDirection.WrappedLineFirstNonWhitespaceCharacter:\n\t\t\t\tdirection = Direction.WrappedLineFirstNonWhitespaceCharacter;\n\t\t\t\tbreak;\n\t\t\tcase RawDirection.WrappedLineColumnCenter:\n\t\t\t\tdirection = Direction.WrappedLineColumnCenter;\n\t\t\t\tbreak;\n\t\t\tcase RawDirection.WrappedLineEnd:\n\t\t\t\tdirection = Direction.WrappedLineEnd;\n\t\t\t\tbreak;\n\t\t\tcase RawDirection.WrappedLineLastNonWhitespaceCharacter:\n\t\t\t\tdirection = Direction.WrappedLineLastNonWhitespaceCharacter;\n\t\t\t\tbreak;\n\t\t\tcase RawDirection.ViewPortTop:\n\t\t\t\tdirection = Direction.ViewPortTop;\n\t\t\t\tbreak;\n\t\t\tcase RawDirection.ViewPortBottom:\n\t\t\t\tdirection = Direction.ViewPortBottom;\n\t\t\t\tbreak;\n\t\t\tcase RawDirection.ViewPortCenter:\n\t\t\t\tdirection = Direction.ViewPortCenter;\n\t\t\t\tbreak;\n\t\t\tcase RawDirection.ViewPortIfOutside:\n\t\t\t\tdirection = Direction.ViewPortIfOutside;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// illegal arguments\n\t\t\t\treturn null;\n\t\t}\n\n\t\tlet unit = Unit.None;\n\t\tswitch (args.by) {\n\t\t\tcase RawUnit.Line:\n\t\t\t\tunit = Unit.Line;\n\t\t\t\tbreak;\n\t\t\tcase RawUnit.WrappedLine:\n\t\t\t\tunit = Unit.WrappedLine;\n\t\t\t\tbreak;\n\t\t\tcase RawUnit.Character:\n\t\t\t\tunit = Unit.Character;\n\t\t\t\tbreak;\n\t\t\tcase RawUnit.HalfLine:\n\t\t\t\tunit = Unit.HalfLine;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn {\n\t\t\tdirection: direction,\n\t\t\tunit: unit,\n\t\t\tselect: (!!args.select),\n\t\t\tvalue: (args.value || 1)\n\t\t};\n\t}\n\n\texport interface ParsedArguments {\n\t\tdirection: Direction;\n\t\tunit: Unit;\n\t\tselect: boolean;\n\t\tvalue: number;\n\t};\n\n\texport const enum Direction {\n\t\tLeft,\n\t\tRight,\n\t\tUp,\n\t\tDown,\n\n\t\tWrappedLineStart,\n\t\tWrappedLineFirstNonWhitespaceCharacter,\n\t\tWrappedLineColumnCenter,\n\t\tWrappedLineEnd,\n\t\tWrappedLineLastNonWhitespaceCharacter,\n\n\t\tViewPortTop,\n\t\tViewPortCenter,\n\t\tViewPortBottom,\n\n\t\tViewPortIfOutside,\n\t};\n\n\texport const enum Unit {\n\t\tNone,\n\t\tLine,\n\t\tWrappedLine,\n\t\tCharacter,\n\t\tHalfLine,\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { SingleCursorState, CursorContext, CursorState } from 'vs/editor/common/controller/cursorCommon';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection, SelectionDirection } from 'vs/editor/common/core/selection';\n\nexport class OneCursor {\n\n\tpublic modelState: SingleCursorState;\n\tpublic viewState: SingleCursorState;\n\n\tprivate _selStartMarker: string;\n\tprivate _selEndMarker: string;\n\n\tconstructor(context: CursorContext) {\n\t\tthis._setState(\n\t\t\tcontext,\n\t\t\tnew SingleCursorState(new Range(1, 1, 1, 1), 0, new Position(1, 1), 0),\n\t\t\tnew SingleCursorState(new Range(1, 1, 1, 1), 0, new Position(1, 1), 0)\n\t\t);\n\t}\n\n\tpublic dispose(context: CursorContext): void {\n\t\tcontext.model._removeMarker(this._selStartMarker);\n\t\tcontext.model._removeMarker(this._selEndMarker);\n\t}\n\n\tpublic asCursorState(): CursorState {\n\t\treturn new CursorState(this.modelState, this.viewState);\n\t}\n\n\tpublic readSelectionFromMarkers(context: CursorContext): Selection {\n\t\tconst start = context.model._getMarker(this._selStartMarker);\n\t\tconst end = context.model._getMarker(this._selEndMarker);\n\n\t\tif (this.modelState.selection.getDirection() === SelectionDirection.LTR) {\n\t\t\treturn new Selection(start.lineNumber, start.column, end.lineNumber, end.column);\n\t\t}\n\n\t\treturn new Selection(end.lineNumber, end.column, start.lineNumber, start.column);\n\t}\n\n\tpublic ensureValidState(context: CursorContext): void {\n\t\tthis._setState(context, this.modelState, this.viewState);\n\t}\n\n\tpublic setState(context: CursorContext, modelState: SingleCursorState, viewState: SingleCursorState): void {\n\t\tthis._setState(context, modelState, viewState);\n\t}\n\n\tprivate _setState(context: CursorContext, modelState: SingleCursorState, viewState: SingleCursorState): void {\n\t\tif (!modelState) {\n\t\t\t// We only have the view state => compute the model state\n\t\t\tconst selectionStart = context.model.validateRange(\n\t\t\t\tcontext.convertViewRangeToModelRange(viewState.selectionStart)\n\t\t\t);\n\n\t\t\tconst position = context.model.validatePosition(\n\t\t\t\tcontext.convertViewPositionToModelPosition(viewState.position.lineNumber, viewState.position.column)\n\t\t\t);\n\n\t\t\tmodelState = new SingleCursorState(selectionStart, viewState.selectionStartLeftoverVisibleColumns, position, viewState.leftoverVisibleColumns);\n\t\t} else {\n\t\t\t// Validate new model state\n\t\t\tconst selectionStart = context.model.validateRange(modelState.selectionStart);\n\t\t\tconst selectionStartLeftoverVisibleColumns = modelState.selectionStart.equalsRange(selectionStart) ? modelState.selectionStartLeftoverVisibleColumns : 0;\n\n\t\t\tconst position = context.model.validatePosition(\n\t\t\t\tmodelState.position\n\t\t\t);\n\t\t\tconst leftoverVisibleColumns = modelState.position.equals(position) ? modelState.leftoverVisibleColumns : 0;\n\n\t\t\tmodelState = new SingleCursorState(selectionStart, selectionStartLeftoverVisibleColumns, position, leftoverVisibleColumns);\n\t\t}\n\n\t\tif (!viewState) {\n\t\t\t// We only have the model state => compute the view state\n\t\t\tconst viewSelectionStart1 = context.convertModelPositionToViewPosition(new Position(modelState.selectionStart.startLineNumber, modelState.selectionStart.startColumn));\n\t\t\tconst viewSelectionStart2 = context.convertModelPositionToViewPosition(new Position(modelState.selectionStart.endLineNumber, modelState.selectionStart.endColumn));\n\t\t\tconst viewSelectionStart = new Range(viewSelectionStart1.lineNumber, viewSelectionStart1.column, viewSelectionStart2.lineNumber, viewSelectionStart2.column);\n\t\t\tconst viewPosition = context.convertModelPositionToViewPosition(modelState.position);\n\t\t\tviewState = new SingleCursorState(viewSelectionStart, modelState.selectionStartLeftoverVisibleColumns, viewPosition, modelState.leftoverVisibleColumns);\n\t\t} else {\n\t\t\t// Validate new view state\n\t\t\tconst viewSelectionStart = context.validateViewRange(viewState.selectionStart, modelState.selectionStart);\n\t\t\tconst viewPosition = context.validateViewPosition(viewState.position, modelState.position);\n\t\t\tviewState = new SingleCursorState(viewSelectionStart, modelState.selectionStartLeftoverVisibleColumns, viewPosition, modelState.leftoverVisibleColumns);\n\t\t}\n\n\t\tif (this.modelState && this.viewState && this.modelState.equals(modelState) && this.viewState.equals(viewState)) {\n\t\t\t// No-op, early return\n\t\t\treturn;\n\t\t}\n\n\t\tthis.modelState = modelState;\n\t\tthis.viewState = viewState;\n\n\t\tthis._selStartMarker = this._ensureMarker(context, this._selStartMarker, this.modelState.selection.startLineNumber, this.modelState.selection.startColumn, true);\n\t\tthis._selEndMarker = this._ensureMarker(context, this._selEndMarker, this.modelState.selection.endLineNumber, this.modelState.selection.endColumn, false);\n\t}\n\n\tprivate _ensureMarker(context: CursorContext, markerId: string, lineNumber: number, column: number, stickToPreviousCharacter: boolean): string {\n\t\tif (!markerId) {\n\t\t\treturn context.model._addMarker(0, lineNumber, column, stickToPreviousCharacter);\n\t\t} else {\n\t\t\tcontext.model._changeMarker(markerId, lineNumber, column);\n\t\t\tcontext.model._changeMarkerStickiness(markerId, stickToPreviousCharacter);\n\t\t\treturn markerId;\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { OneCursor } from 'vs/editor/common/controller/oneCursor';\nimport { Selection, ISelection } from 'vs/editor/common/core/selection';\nimport { Position } from 'vs/editor/common/core/position';\nimport { CursorState, CursorContext } from 'vs/editor/common/controller/cursorCommon';\n\nexport class CursorCollection {\n\n\tprivate context: CursorContext;\n\n\tprivate primaryCursor: OneCursor;\n\tprivate secondaryCursors: OneCursor[];\n\n\t// An index which identifies the last cursor that was added / moved (think Ctrl+drag)\n\tprivate lastAddedCursorIndex: number;\n\n\tconstructor(context: CursorContext) {\n\t\tthis.context = context;\n\t\tthis.primaryCursor = new OneCursor(context);\n\t\tthis.secondaryCursors = [];\n\t\tthis.lastAddedCursorIndex = 0;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.primaryCursor.dispose(this.context);\n\t\tthis.killSecondaryCursors();\n\t}\n\n\tpublic updateContext(context: CursorContext): void {\n\t\tthis.context = context;\n\t}\n\n\tpublic ensureValidState(): void {\n\t\tthis.primaryCursor.ensureValidState(this.context);\n\t\tfor (let i = 0, len = this.secondaryCursors.length; i < len; i++) {\n\t\t\tthis.secondaryCursors[i].ensureValidState(this.context);\n\t\t}\n\t}\n\n\tpublic readSelectionFromMarkers(): Selection[] {\n\t\tlet result: Selection[] = [];\n\t\tresult[0] = this.primaryCursor.readSelectionFromMarkers(this.context);\n\t\tfor (let i = 0, len = this.secondaryCursors.length; i < len; i++) {\n\t\t\tresult[i + 1] = this.secondaryCursors[i].readSelectionFromMarkers(this.context);\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic getAll(): CursorState[] {\n\t\tlet result: CursorState[] = [];\n\t\tresult[0] = this.primaryCursor.asCursorState();\n\t\tfor (let i = 0, len = this.secondaryCursors.length; i < len; i++) {\n\t\t\tresult[i + 1] = this.secondaryCursors[i].asCursorState();\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic getViewPositions(): Position[] {\n\t\tlet result: Position[] = [];\n\t\tresult[0] = this.primaryCursor.viewState.position;\n\t\tfor (let i = 0, len = this.secondaryCursors.length; i < len; i++) {\n\t\t\tresult[i + 1] = this.secondaryCursors[i].viewState.position;\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic getSelections(): Selection[] {\n\t\tlet result: Selection[] = [];\n\t\tresult[0] = this.primaryCursor.modelState.selection;\n\t\tfor (let i = 0, len = this.secondaryCursors.length; i < len; i++) {\n\t\t\tresult[i + 1] = this.secondaryCursors[i].modelState.selection;\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic getViewSelections(): Selection[] {\n\t\tlet result: Selection[] = [];\n\t\tresult[0] = this.primaryCursor.viewState.selection;\n\t\tfor (let i = 0, len = this.secondaryCursors.length; i < len; i++) {\n\t\t\tresult[i + 1] = this.secondaryCursors[i].viewState.selection;\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic setSelections(selections: ISelection[]): void {\n\t\tthis.setStates(CursorState.fromModelSelections(selections));\n\t}\n\n\tpublic getPrimaryCursor(): CursorState {\n\t\treturn this.primaryCursor.asCursorState();\n\t}\n\n\tpublic setStates(states: CursorState[]): void {\n\t\tif (states === null) {\n\t\t\treturn;\n\t\t}\n\t\tthis.primaryCursor.setState(this.context, states[0].modelState, states[0].viewState);\n\t\tthis._setSecondaryStates(states.slice(1));\n\t}\n\n\t/**\n\t * Creates or disposes secondary cursors as necessary to match the number of `secondarySelections`.\n\t */\n\tprivate _setSecondaryStates(secondaryStates: CursorState[]): void {\n\t\tconst secondaryCursorsLength = this.secondaryCursors.length;\n\t\tconst secondaryStatesLength = secondaryStates.length;\n\n\t\tif (secondaryCursorsLength < secondaryStatesLength) {\n\t\t\tlet createCnt = secondaryStatesLength - secondaryCursorsLength;\n\t\t\tfor (let i = 0; i < createCnt; i++) {\n\t\t\t\tthis._addSecondaryCursor();\n\t\t\t}\n\t\t} else if (secondaryCursorsLength > secondaryStatesLength) {\n\t\t\tlet removeCnt = secondaryCursorsLength - secondaryStatesLength;\n\t\t\tfor (let i = 0; i < removeCnt; i++) {\n\t\t\t\tthis._removeSecondaryCursor(this.secondaryCursors.length - 1);\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = 0; i < secondaryStatesLength; i++) {\n\t\t\tthis.secondaryCursors[i].setState(this.context, secondaryStates[i].modelState, secondaryStates[i].viewState);\n\t\t}\n\t}\n\n\tpublic killSecondaryCursors(): void {\n\t\tthis._setSecondaryStates([]);\n\t}\n\n\tprivate _addSecondaryCursor(): void {\n\t\tthis.secondaryCursors.push(new OneCursor(this.context));\n\t\tthis.lastAddedCursorIndex = this.secondaryCursors.length;\n\t}\n\n\tpublic getLastAddedCursorIndex(): number {\n\t\tif (this.secondaryCursors.length === 0 || this.lastAddedCursorIndex === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn this.lastAddedCursorIndex;\n\t}\n\n\tprivate _removeSecondaryCursor(removeIndex: number): void {\n\t\tif (this.lastAddedCursorIndex >= removeIndex + 1) {\n\t\t\tthis.lastAddedCursorIndex--;\n\t\t}\n\t\tthis.secondaryCursors[removeIndex].dispose(this.context);\n\t\tthis.secondaryCursors.splice(removeIndex, 1);\n\t}\n\n\tprivate _getAll(): OneCursor[] {\n\t\tlet result: OneCursor[] = [];\n\t\tresult[0] = this.primaryCursor;\n\t\tfor (let i = 0, len = this.secondaryCursors.length; i < len; i++) {\n\t\t\tresult[i + 1] = this.secondaryCursors[i];\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic normalize(): void {\n\t\tif (this.secondaryCursors.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tlet cursors = this._getAll();\n\n\t\tinterface SortedCursor {\n\t\t\tindex: number;\n\t\t\tselection: Selection;\n\t\t\tviewSelection: Selection;\n\t\t}\n\t\tlet sortedCursors: SortedCursor[] = [];\n\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\tsortedCursors.push({\n\t\t\t\tindex: i,\n\t\t\t\tselection: cursors[i].modelState.selection,\n\t\t\t\tviewSelection: cursors[i].viewState.selection\n\t\t\t});\n\t\t}\n\t\tsortedCursors.sort((a, b) => {\n\t\t\tif (a.viewSelection.startLineNumber === b.viewSelection.startLineNumber) {\n\t\t\t\treturn a.viewSelection.startColumn - b.viewSelection.startColumn;\n\t\t\t}\n\t\t\treturn a.viewSelection.startLineNumber - b.viewSelection.startLineNumber;\n\t\t});\n\n\t\tfor (let sortedCursorIndex = 0; sortedCursorIndex < sortedCursors.length - 1; sortedCursorIndex++) {\n\t\t\tconst current = sortedCursors[sortedCursorIndex];\n\t\t\tconst next = sortedCursors[sortedCursorIndex + 1];\n\n\t\t\tconst currentViewSelection = current.viewSelection;\n\t\t\tconst nextViewSelection = next.viewSelection;\n\n\t\t\tlet shouldMergeCursors: boolean;\n\t\t\tif (nextViewSelection.isEmpty() || currentViewSelection.isEmpty()) {\n\t\t\t\t// Merge touching cursors if one of them is collapsed\n\t\t\t\tshouldMergeCursors = nextViewSelection.getStartPosition().isBeforeOrEqual(currentViewSelection.getEndPosition());\n\t\t\t} else {\n\t\t\t\t// Merge only overlapping cursors (i.e. allow touching ranges)\n\t\t\t\tshouldMergeCursors = nextViewSelection.getStartPosition().isBefore(currentViewSelection.getEndPosition());\n\t\t\t}\n\n\t\t\tif (shouldMergeCursors) {\n\t\t\t\tconst winnerSortedCursorIndex = current.index < next.index ? sortedCursorIndex : sortedCursorIndex + 1;\n\t\t\t\tconst looserSortedCursorIndex = current.index < next.index ? sortedCursorIndex + 1 : sortedCursorIndex;\n\n\t\t\t\tconst looserIndex = sortedCursors[looserSortedCursorIndex].index;\n\t\t\t\tconst winnerIndex = sortedCursors[winnerSortedCursorIndex].index;\n\n\t\t\t\tconst looserSelection = sortedCursors[looserSortedCursorIndex].selection;\n\t\t\t\tconst winnerSelection = sortedCursors[winnerSortedCursorIndex].selection;\n\n\t\t\t\tif (!looserSelection.equalsSelection(winnerSelection)) {\n\t\t\t\t\tconst resultingRange = looserSelection.plusRange(winnerSelection);\n\t\t\t\t\tconst looserSelectionIsLTR = (looserSelection.selectionStartLineNumber === looserSelection.startLineNumber && looserSelection.selectionStartColumn === looserSelection.startColumn);\n\t\t\t\t\tconst winnerSelectionIsLTR = (winnerSelection.selectionStartLineNumber === winnerSelection.startLineNumber && winnerSelection.selectionStartColumn === winnerSelection.startColumn);\n\n\t\t\t\t\t// Give more importance to the last added cursor (think Ctrl-dragging + hitting another cursor)\n\t\t\t\t\tlet resultingSelectionIsLTR: boolean;\n\t\t\t\t\tif (looserIndex === this.lastAddedCursorIndex) {\n\t\t\t\t\t\tresultingSelectionIsLTR = looserSelectionIsLTR;\n\t\t\t\t\t\tthis.lastAddedCursorIndex = winnerIndex;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Winner takes it all\n\t\t\t\t\t\tresultingSelectionIsLTR = winnerSelectionIsLTR;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet resultingSelection: Selection;\n\t\t\t\t\tif (resultingSelectionIsLTR) {\n\t\t\t\t\t\tresultingSelection = new Selection(resultingRange.startLineNumber, resultingRange.startColumn, resultingRange.endLineNumber, resultingRange.endColumn);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresultingSelection = new Selection(resultingRange.endLineNumber, resultingRange.endColumn, resultingRange.startLineNumber, resultingRange.startColumn);\n\t\t\t\t\t}\n\n\t\t\t\t\tsortedCursors[winnerSortedCursorIndex].selection = resultingSelection;\n\t\t\t\t\tconst resultingState = CursorState.fromModelSelection(resultingSelection);\n\t\t\t\t\tcursors[winnerIndex].setState(this.context, resultingState.modelState, resultingState.viewState);\n\t\t\t\t}\n\n\t\t\t\tfor (let j = 0; j < sortedCursors.length; j++) {\n\t\t\t\t\tif (sortedCursors[j].index > looserIndex) {\n\t\t\t\t\t\tsortedCursors[j].index--;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcursors.splice(looserIndex, 1);\n\t\t\t\tsortedCursors.splice(looserSortedCursorIndex, 1);\n\t\t\t\tthis._removeSecondaryCursor(looserIndex - 1);\n\n\t\t\t\tsortedCursorIndex--;\n\t\t\t}\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as strings from 'vs/base/common/strings';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { ICommand, ICursorStateComputerData, IEditOperationBuilder, ITokenizedModel } from 'vs/editor/common/editorCommon';\nimport { LanguageConfigurationRegistry, IIndentConverter } from 'vs/editor/common/modes/languageConfigurationRegistry';\nimport { ShiftCommand } from 'vs/editor/common/commands/shiftCommand';\nimport * as IndentUtil from 'vs/editor/contrib/indentation/common/indentUtils';\nimport { IndentAction } from 'vs/editor/common/modes/languageConfiguration';\nimport { IndentConsts } from 'vs/editor/common/modes/supports/indentRules';\n\nexport class MoveLinesCommand implements ICommand {\n\n\tprivate _selection: Selection;\n\tprivate _isMovingDown: boolean;\n\tprivate _autoIndent: boolean;\n\n\tprivate _selectionId: string;\n\tprivate _moveEndPositionDown: boolean;\n\tprivate _moveEndLineSelectionShrink: boolean;\n\n\tconstructor(selection: Selection, isMovingDown: boolean, autoIndent: boolean) {\n\t\tthis._selection = selection;\n\t\tthis._isMovingDown = isMovingDown;\n\t\tthis._autoIndent = autoIndent;\n\t\tthis._moveEndLineSelectionShrink = false;\n\t}\n\n\tpublic getEditOperations(model: ITokenizedModel, builder: IEditOperationBuilder): void {\n\n\t\tvar modelLineCount = model.getLineCount();\n\n\t\tif (this._isMovingDown && this._selection.endLineNumber === modelLineCount) {\n\t\t\treturn;\n\t\t}\n\t\tif (!this._isMovingDown && this._selection.startLineNumber === 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._moveEndPositionDown = false;\n\t\tvar s = this._selection;\n\n\t\tif (s.startLineNumber < s.endLineNumber && s.endColumn === 1) {\n\t\t\tthis._moveEndPositionDown = true;\n\t\t\ts = s.setEndPosition(s.endLineNumber - 1, model.getLineMaxColumn(s.endLineNumber - 1));\n\t\t}\n\n\t\tlet tabSize = model.getOptions().tabSize;\n\t\tlet insertSpaces = model.getOptions().insertSpaces;\n\t\tlet indentConverter = this.buildIndentConverter(tabSize);\n\t\tlet virtualModel = {\n\t\t\tgetLineTokens: (lineNumber: number) => {\n\t\t\t\treturn model.getLineTokens(lineNumber);\n\t\t\t},\n\t\t\tgetLanguageIdentifier: () => {\n\t\t\t\treturn model.getLanguageIdentifier();\n\t\t\t},\n\t\t\tgetLanguageIdAtPosition: (lineNumber: number, column: number) => {\n\t\t\t\treturn model.getLanguageIdAtPosition(lineNumber, column);\n\t\t\t},\n\t\t\tgetLineContent: null\n\t\t};\n\n\t\tif (s.startLineNumber === s.endLineNumber && model.getLineMaxColumn(s.startLineNumber) === 1) {\n\t\t\t// Current line is empty\n\t\t\tvar lineNumber = s.startLineNumber;\n\t\t\tvar otherLineNumber = (this._isMovingDown ? lineNumber + 1 : lineNumber - 1);\n\n\t\t\tif (model.getLineMaxColumn(otherLineNumber) === 1) {\n\t\t\t\t// Other line number is empty too, so no editing is needed\n\t\t\t\t// Add a no-op to force running by the model\n\t\t\t\tbuilder.addEditOperation(new Range(1, 1, 1, 1), null);\n\t\t\t} else {\n\t\t\t\t// Type content from other line number on line number\n\t\t\t\tbuilder.addEditOperation(new Range(lineNumber, 1, lineNumber, 1), model.getLineContent(otherLineNumber));\n\n\t\t\t\t// Remove content from other line number\n\t\t\t\tbuilder.addEditOperation(new Range(otherLineNumber, 1, otherLineNumber, model.getLineMaxColumn(otherLineNumber)), null);\n\t\t\t}\n\t\t\t// Track selection at the other line number\n\t\t\ts = new Selection(otherLineNumber, 1, otherLineNumber, 1);\n\n\t\t} else {\n\n\t\t\tvar movingLineNumber: number,\n\t\t\t\tmovingLineText: string;\n\n\t\t\tif (this._isMovingDown) {\n\t\t\t\tmovingLineNumber = s.endLineNumber + 1;\n\t\t\t\tmovingLineText = model.getLineContent(movingLineNumber);\n\t\t\t\t// Delete line that needs to be moved\n\t\t\t\tbuilder.addEditOperation(new Range(movingLineNumber - 1, model.getLineMaxColumn(movingLineNumber - 1), movingLineNumber, model.getLineMaxColumn(movingLineNumber)), null);\n\n\t\t\t\tlet insertingText = movingLineText;\n\n\t\t\t\tif (this.isAutoIndent(model, s)) {\n\t\t\t\t\tlet movingLineMatchResult = this.matchEnterRule(model, s.startLineNumber - 1, movingLineNumber, indentConverter, tabSize);\n\t\t\t\t\t// if s.startLineNumber - 1 matches onEnter rule, we still honor that.\n\t\t\t\t\tif (movingLineMatchResult !== null) {\n\t\t\t\t\t\tlet oldIndentation = strings.getLeadingWhitespace(model.getLineContent(movingLineNumber));\n\t\t\t\t\t\tlet newSpaceCnt = movingLineMatchResult + IndentUtil.getSpaceCnt(oldIndentation, tabSize);\n\t\t\t\t\t\tlet newIndentation = IndentUtil.generateIndent(newSpaceCnt, tabSize, insertSpaces);\n\t\t\t\t\t\tinsertingText = newIndentation + this.trimLeft(movingLineText);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// no enter rule matches, let's check indentatin rules then.\n\t\t\t\t\t\tvirtualModel.getLineContent = (lineNumber) => {\n\t\t\t\t\t\t\tif (lineNumber === s.startLineNumber) {\n\t\t\t\t\t\t\t\treturn model.getLineContent(movingLineNumber);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn model.getLineContent(lineNumber);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\tlet indentOfMovingLine = LanguageConfigurationRegistry.getGoodIndentForLine(virtualModel, model.getLanguageIdAtPosition(\n\t\t\t\t\t\t\tmovingLineNumber, 1), s.startLineNumber, indentConverter);\n\t\t\t\t\t\tif (indentOfMovingLine !== null) {\n\t\t\t\t\t\t\tlet oldIndentation = strings.getLeadingWhitespace(model.getLineContent(movingLineNumber));\n\t\t\t\t\t\t\tlet newSpaceCnt = IndentUtil.getSpaceCnt(indentOfMovingLine, tabSize);\n\t\t\t\t\t\t\tlet oldSpaceCnt = IndentUtil.getSpaceCnt(oldIndentation, tabSize);\n\t\t\t\t\t\t\tif (newSpaceCnt !== oldSpaceCnt) {\n\t\t\t\t\t\t\t\tlet newIndentation = IndentUtil.generateIndent(newSpaceCnt, tabSize, insertSpaces);\n\t\t\t\t\t\t\t\tinsertingText = newIndentation + this.trimLeft(movingLineText);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// add edit operations for moving line first to make sure it's executed after we make indentation change\n\t\t\t\t\t// to s.startLineNumber\n\t\t\t\t\tbuilder.addEditOperation(new Range(s.startLineNumber, 1, s.startLineNumber, 1), insertingText + '\\n');\n\n\t\t\t\t\tlet ret = this.matchEnterRule(model, s.endLineNumber + 1, s.startLineNumber, indentConverter, tabSize);\n\t\t\t\t\t// check if the line being moved before matches onEnter rules, if so let's adjust the indentation by onEnter rules.\n\t\t\t\t\tif (ret !== null) {\n\t\t\t\t\t\tif (ret !== 0) {\n\t\t\t\t\t\t\tthis.getIndentEditsOfMovingBlock(model, builder, s, tabSize, insertSpaces, ret);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// it doesn't match onEnter rules, let's check indentation rules then.\n\t\t\t\t\t\tvirtualModel.getLineContent = (lineNumber) => {\n\t\t\t\t\t\t\tif (lineNumber === s.startLineNumber) {\n\t\t\t\t\t\t\t\treturn insertingText;\n\t\t\t\t\t\t\t} else if (lineNumber >= s.startLineNumber + 1 && lineNumber <= s.endLineNumber + 1) {\n\t\t\t\t\t\t\t\treturn model.getLineContent(lineNumber - 1);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn model.getLineContent(lineNumber);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tlet newIndentatOfMovingBlock = LanguageConfigurationRegistry.getGoodIndentForLine(virtualModel, model.getLanguageIdAtPosition(\n\t\t\t\t\t\t\tmovingLineNumber, 1), s.startLineNumber + 1, indentConverter);\n\n\t\t\t\t\t\tif (newIndentatOfMovingBlock !== null) {\n\t\t\t\t\t\t\tconst oldIndentation = strings.getLeadingWhitespace(model.getLineContent(s.startLineNumber));\n\t\t\t\t\t\t\tconst newSpaceCnt = IndentUtil.getSpaceCnt(newIndentatOfMovingBlock, tabSize);\n\t\t\t\t\t\t\tconst oldSpaceCnt = IndentUtil.getSpaceCnt(oldIndentation, tabSize);\n\t\t\t\t\t\t\tif (newSpaceCnt !== oldSpaceCnt) {\n\t\t\t\t\t\t\t\tconst spaceCntOffset = newSpaceCnt - oldSpaceCnt;\n\n\t\t\t\t\t\t\t\tthis.getIndentEditsOfMovingBlock(model, builder, s, tabSize, insertSpaces, spaceCntOffset);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Insert line that needs to be moved before\n\t\t\t\t\tbuilder.addEditOperation(new Range(s.startLineNumber, 1, s.startLineNumber, 1), insertingText + '\\n');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmovingLineNumber = s.startLineNumber - 1;\n\t\t\t\tmovingLineText = model.getLineContent(movingLineNumber);\n\n\t\t\t\t// Delete line that needs to be moved\n\t\t\t\tbuilder.addEditOperation(new Range(movingLineNumber, 1, movingLineNumber + 1, 1), null);\n\n\t\t\t\t// Insert line that needs to be moved after\n\t\t\t\tbuilder.addEditOperation(new Range(s.endLineNumber, model.getLineMaxColumn(s.endLineNumber), s.endLineNumber, model.getLineMaxColumn(s.endLineNumber)), '\\n' + movingLineText);\n\n\t\t\t\tif (this.isAutoIndent(model, s)) {\n\t\t\t\t\tvirtualModel.getLineContent = (lineNumber: number) => {\n\t\t\t\t\t\tif (lineNumber === movingLineNumber) {\n\t\t\t\t\t\t\treturn model.getLineContent(s.startLineNumber);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn model.getLineContent(lineNumber);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tlet ret = this.matchEnterRule(model, s.startLineNumber - 2, s.startLineNumber, indentConverter, tabSize);\n\t\t\t\t\t// check if s.startLineNumber - 2 matches onEnter rules, if so adjust the moving block by onEnter rules.\n\t\t\t\t\tif (ret !== null) {\n\t\t\t\t\t\tif (ret !== 0) {\n\t\t\t\t\t\t\tthis.getIndentEditsOfMovingBlock(model, builder, s, tabSize, insertSpaces, ret);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// it doesn't match any onEnter rule, let's check indentation rules then.\n\t\t\t\t\t\tlet indentOfFirstLine = LanguageConfigurationRegistry.getGoodIndentForLine(virtualModel, model.getLanguageIdAtPosition(s.startLineNumber, 1), movingLineNumber, indentConverter);\n\t\t\t\t\t\tif (indentOfFirstLine !== null) {\n\t\t\t\t\t\t\t// adjust the indentation of the moving block\n\t\t\t\t\t\t\tlet oldIndent = strings.getLeadingWhitespace(model.getLineContent(s.startLineNumber));\n\t\t\t\t\t\t\tlet newSpaceCnt = IndentUtil.getSpaceCnt(indentOfFirstLine, tabSize);\n\t\t\t\t\t\t\tlet oldSpaceCnt = IndentUtil.getSpaceCnt(oldIndent, tabSize);\n\t\t\t\t\t\t\tif (newSpaceCnt !== oldSpaceCnt) {\n\t\t\t\t\t\t\t\tlet spaceCntOffset = newSpaceCnt - oldSpaceCnt;\n\n\t\t\t\t\t\t\t\tthis.getIndentEditsOfMovingBlock(model, builder, s, tabSize, insertSpaces, spaceCntOffset);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._selectionId = builder.trackSelection(s);\n\t}\n\n\tprivate buildIndentConverter(tabSize: number): IIndentConverter {\n\t\treturn {\n\t\t\tshiftIndent: (indentation) => {\n\t\t\t\tlet desiredIndentCount = ShiftCommand.shiftIndentCount(indentation, indentation.length + 1, tabSize);\n\t\t\t\tlet newIndentation = '';\n\t\t\t\tfor (let i = 0; i < desiredIndentCount; i++) {\n\t\t\t\t\tnewIndentation += '\\t';\n\t\t\t\t}\n\n\t\t\t\treturn newIndentation;\n\t\t\t},\n\t\t\tunshiftIndent: (indentation) => {\n\t\t\t\tlet desiredIndentCount = ShiftCommand.unshiftIndentCount(indentation, indentation.length + 1, tabSize);\n\t\t\t\tlet newIndentation = '';\n\t\t\t\tfor (let i = 0; i < desiredIndentCount; i++) {\n\t\t\t\t\tnewIndentation += '\\t';\n\t\t\t\t}\n\n\t\t\t\treturn newIndentation;\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate matchEnterRule(model: ITokenizedModel, oneLineAbove: number, line: number, indentConverter: IIndentConverter, tabSize: number) {\n\t\twhile (oneLineAbove >= 1) {\n\t\t\t// ship empty lines as empty lines just inherit indentation\n\t\t\tlet lineContent = model.getLineContent(oneLineAbove);\n\t\t\tlet nonWhitespaceIdx = strings.lastNonWhitespaceIndex(lineContent);\n\t\t\tif (nonWhitespaceIdx >= 0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\toneLineAbove--;\n\t\t}\n\n\t\tif (oneLineAbove < 1 || line > model.getLineCount()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet maxColumn = model.getLineMaxColumn(oneLineAbove);\n\t\tlet enter = LanguageConfigurationRegistry.getEnterAction(model, new Range(oneLineAbove, maxColumn, oneLineAbove, maxColumn));\n\n\t\tif (enter) {\n\t\t\tlet enterPrefix = enter.indentation;\n\t\t\tlet enterAction = enter.enterAction;\n\n\t\t\tif (enterAction.indentAction === IndentAction.None) {\n\t\t\t\tenterPrefix = enter.indentation + enterAction.appendText;\n\t\t\t} else if (enterAction.indentAction === IndentAction.Indent) {\n\t\t\t\tenterPrefix = enter.indentation + enterAction.appendText;\n\t\t\t} else if (enterAction.indentAction === IndentAction.IndentOutdent) {\n\t\t\t\tenterPrefix = enter.indentation;\n\t\t\t} else if (enterAction.indentAction === IndentAction.Outdent) {\n\t\t\t\tenterPrefix = indentConverter.unshiftIndent(enter.indentation) + enterAction.appendText;\n\t\t\t}\n\t\t\tlet movingLineText = model.getLineContent(line);\n\t\t\tif (this.trimLeft(movingLineText).indexOf(this.trimLeft(enterPrefix)) >= 0) {\n\t\t\t\tlet oldIndentation = strings.getLeadingWhitespace(model.getLineContent(line));\n\t\t\t\tlet newIndentation = strings.getLeadingWhitespace(enterPrefix);\n\t\t\t\tlet indentMetadataOfMovelingLine = LanguageConfigurationRegistry.getIndentMetadata(model, line);\n\t\t\t\tif (indentMetadataOfMovelingLine & IndentConsts.DECREASE_MASK) {\n\t\t\t\t\tnewIndentation = indentConverter.unshiftIndent(newIndentation);\n\t\t\t\t}\n\t\t\t\tlet newSpaceCnt = IndentUtil.getSpaceCnt(newIndentation, tabSize);\n\t\t\t\tlet oldSpaceCnt = IndentUtil.getSpaceCnt(oldIndentation, tabSize);\n\t\t\t\treturn newSpaceCnt - oldSpaceCnt;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate trimLeft(str: string) {\n\t\treturn str.replace(/^\\s+/, '');\n\t}\n\n\tprivate isAutoIndent(model: ITokenizedModel, selection: Selection) {\n\t\tif (!this._autoIndent) {\n\t\t\treturn false;\n\t\t}\n\t\tlet languageAtSelectionStart = model.getLanguageIdAtPosition(selection.startLineNumber, 1);\n\t\tlet languageAtSelectionEnd = model.getLanguageIdAtPosition(selection.endLineNumber, 1);\n\n\t\tif (languageAtSelectionStart !== languageAtSelectionEnd) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (LanguageConfigurationRegistry.getIndentRulesSupport(languageAtSelectionStart) === null) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate getIndentEditsOfMovingBlock(model: ITokenizedModel, builder: IEditOperationBuilder, s: Selection, tabSize: number, insertSpaces: boolean, offset: number) {\n\t\tfor (let i = s.startLineNumber; i <= s.endLineNumber; i++) {\n\t\t\tlet lineContent = model.getLineContent(i);\n\t\t\tlet originalIndent = strings.getLeadingWhitespace(lineContent);\n\t\t\tlet originalSpacesCnt = IndentUtil.getSpaceCnt(originalIndent, tabSize);\n\t\t\tlet newSpacesCnt = originalSpacesCnt + offset;\n\t\t\tlet newIndent = IndentUtil.generateIndent(newSpacesCnt, tabSize, insertSpaces);\n\n\t\t\tif (newIndent !== originalIndent) {\n\t\t\t\tbuilder.addEditOperation(new Range(i, 1, i, originalIndent.length + 1), newIndent);\n\n\t\t\t\tif (i === s.endLineNumber && s.endColumn <= originalIndent.length + 1 && newIndent === '') {\n\t\t\t\t\t// as users select part of the original indent white spaces\n\t\t\t\t\t// when we adjust the indentation of endLine, we should adjust the cursor position as well.\n\t\t\t\t\tthis._moveEndLineSelectionShrink = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n\n\tpublic computeCursorState(model: ITokenizedModel, helper: ICursorStateComputerData): Selection {\n\t\tvar result = helper.getTrackedSelection(this._selectionId);\n\n\t\tif (this._moveEndPositionDown) {\n\t\t\tresult = result.setEndPosition(result.endLineNumber + 1, 1);\n\t\t}\n\n\t\tif (this._moveEndLineSelectionShrink && result.startLineNumber < result.endLineNumber) {\n\t\t\tresult = result.setEndPosition(result.endLineNumber, 2);\n\t\t}\n\n\t\treturn result;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport * as strings from 'vs/base/common/strings';\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { CursorCollection } from 'vs/editor/common/controller/cursorCollection';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection, SelectionDirection, ISelection } from 'vs/editor/common/core/selection';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { CursorColumns, CursorConfiguration, EditOperationResult, CursorContext, CursorState, RevealTarget, IColumnSelectData, ICursors } from 'vs/editor/common/controller/cursorCommon';\nimport { LanguageConfigurationRegistry } from 'vs/editor/common/modes/languageConfigurationRegistry';\nimport { DeleteOperations } from 'vs/editor/common/controller/cursorDeleteOperations';\nimport { TypeOperations } from 'vs/editor/common/controller/cursorTypeOperations';\nimport { TextModelEventType, ModelRawContentChangedEvent, RawContentChangedType } from 'vs/editor/common/model/textModelEvents';\nimport { CursorChangeReason } from 'vs/editor/common/controller/cursorEvents';\nimport { IViewModel } from 'vs/editor/common/viewModel/viewModel';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\nimport Event, { Emitter } from 'vs/base/common/event';\n// import { ScreenReaderMessageGenerator } from \"vs/editor/common/controller/accGenerator\";\n\nfunction containsLineMappingChanged(events: viewEvents.ViewEvent[]): boolean {\n\tfor (let i = 0, len = events.length; i < len; i++) {\n\t\tif (events[i].type === viewEvents.ViewEventType.ViewLineMappingChanged) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nexport class CursorStateChangedEvent {\n\t/**\n\t * The new selections.\n\t * The primary selection is always at index 0.\n\t */\n\treadonly selections: Selection[];\n\t/**\n\t * Source of the call that caused the event.\n\t */\n\treadonly source: string;\n\t/**\n\t * Reason.\n\t */\n\treadonly reason: CursorChangeReason;\n\n\tconstructor(selections: Selection[], source: string, reason: CursorChangeReason) {\n\t\tthis.selections = selections;\n\t\tthis.source = source;\n\t\tthis.reason = reason;\n\t}\n}\n\n/**\n * A snapshot of the cursor and the model state\n */\nexport class CursorModelState {\n\n\tpublic readonly modelVersionId: number;\n\tpublic readonly cursorState: CursorState[];\n\n\tconstructor(model: editorCommon.IModel, cursor: Cursor) {\n\t\tthis.modelVersionId = model.getVersionId();\n\t\tthis.cursorState = cursor.getAll();\n\t}\n\n\tpublic equals(other: CursorModelState): boolean {\n\t\tif (!other) {\n\t\t\treturn false;\n\t\t}\n\t\tif (this.modelVersionId !== other.modelVersionId) {\n\t\t\treturn false;\n\t\t}\n\t\tif (this.cursorState.length !== other.cursorState.length) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (let i = 0, len = this.cursorState.length; i < len; i++) {\n\t\t\tif (!this.cursorState[i].equals(other.cursorState[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n}\n\nexport class Cursor extends viewEvents.ViewEventEmitter implements ICursors {\n\n\tprivate readonly _onDidChange: Emitter = this._register(new Emitter());\n\tpublic readonly onDidChange: Event = this._onDidChange.event;\n\n\tprivate readonly _configuration: editorCommon.IConfiguration;\n\tprivate readonly _model: editorCommon.IModel;\n\tprivate readonly _viewModel: IViewModel;\n\tpublic context: CursorContext;\n\tprivate _cursors: CursorCollection;\n\n\tprivate _isHandling: boolean;\n\tprivate _isDoingComposition: boolean;\n\tprivate _columnSelectData: IColumnSelectData;\n\n\tconstructor(configuration: editorCommon.IConfiguration, model: editorCommon.IModel, viewModel: IViewModel) {\n\t\tsuper();\n\t\tthis._configuration = configuration;\n\t\tthis._model = model;\n\t\tthis._viewModel = viewModel;\n\t\tthis.context = new CursorContext(this._configuration, this._model, this._viewModel);\n\t\tthis._cursors = new CursorCollection(this.context);\n\n\t\tthis._isHandling = false;\n\t\tthis._isDoingComposition = false;\n\t\tthis._columnSelectData = null;\n\n\t\tthis._register(this._model.addBulkListener((events) => {\n\t\t\tif (this._isHandling) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet hadContentChange = false;\n\t\t\tlet hadFlushEvent = false;\n\t\t\tfor (let i = 0, len = events.length; i < len; i++) {\n\t\t\t\tconst event = events[i];\n\t\t\t\tconst eventType = event.type;\n\n\t\t\t\tif (eventType === TextModelEventType.ModelRawContentChanged2) {\n\t\t\t\t\thadContentChange = true;\n\t\t\t\t\tconst rawChangeEvent = event.data;\n\t\t\t\t\thadFlushEvent = hadFlushEvent || rawChangeEvent.containsEvent(RawContentChangedType.Flush);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!hadContentChange) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._onModelContentChanged(hadFlushEvent);\n\t\t}));\n\n\t\tthis._register(viewModel.addEventListener((events: viewEvents.ViewEvent[]) => {\n\t\t\tif (!containsLineMappingChanged(events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Ensure valid state\n\t\t\tthis.setStates('viewModel', CursorChangeReason.NotSet, this.getAll());\n\t\t}));\n\n\t\tconst updateCursorContext = () => {\n\t\t\tthis.context = new CursorContext(this._configuration, this._model, this._viewModel);\n\t\t\tthis._cursors.updateContext(this.context);\n\t\t};\n\t\tthis._register(this._model.onDidChangeLanguage((e) => {\n\t\t\tupdateCursorContext();\n\t\t}));\n\t\tthis._register(LanguageConfigurationRegistry.onDidChange(() => {\n\t\t\t// TODO@Alex: react only if certain supports changed? (and if my model's mode changed)\n\t\t\tupdateCursorContext();\n\t\t}));\n\t\tthis._register(model.onDidChangeOptions(() => {\n\t\t\tupdateCursorContext();\n\t\t}));\n\t\tthis._register(this._configuration.onDidChange((e) => {\n\t\t\tif (CursorConfiguration.shouldRecreate(e)) {\n\t\t\t\tupdateCursorContext();\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._cursors.dispose();\n\t\tsuper.dispose();\n\t}\n\n\t// ------ some getters/setters\n\n\tpublic getPrimaryCursor(): CursorState {\n\t\treturn this._cursors.getPrimaryCursor();\n\t}\n\n\tpublic getLastAddedCursorIndex(): number {\n\t\treturn this._cursors.getLastAddedCursorIndex();\n\t}\n\n\tpublic getAll(): CursorState[] {\n\t\treturn this._cursors.getAll();\n\t}\n\n\tpublic setStates(source: string, reason: CursorChangeReason, states: CursorState[]): void {\n\t\tconst oldState = new CursorModelState(this._model, this);\n\n\t\tthis._cursors.setStates(states);\n\t\tthis._cursors.normalize();\n\t\tthis._columnSelectData = null;\n\n\t\tthis._emitStateChangedIfNecessary(source, reason, oldState);\n\t}\n\n\tpublic setColumnSelectData(columnSelectData: IColumnSelectData): void {\n\t\tthis._columnSelectData = columnSelectData;\n\t}\n\n\tpublic reveal(horizontal: boolean, target: RevealTarget): void {\n\t\tthis._revealRange(target, viewEvents.VerticalRevealType.Simple, horizontal);\n\t}\n\n\tpublic revealRange(revealHorizontal: boolean, viewRange: Range, verticalType: viewEvents.VerticalRevealType) {\n\t\tthis.emitCursorRevealRange(viewRange, verticalType, revealHorizontal);\n\t}\n\n\tpublic scrollTo(desiredScrollTop: number): void {\n\t\tthis._viewModel.viewLayout.setScrollPosition({\n\t\t\tscrollTop: desiredScrollTop\n\t\t});\n\t}\n\n\tpublic saveState(): editorCommon.ICursorState[] {\n\n\t\tlet result: editorCommon.ICursorState[] = [];\n\n\t\tconst selections = this._cursors.getSelections();\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tconst selection = selections[i];\n\n\t\t\tresult.push({\n\t\t\t\tinSelectionMode: !selection.isEmpty(),\n\t\t\t\tselectionStart: {\n\t\t\t\t\tlineNumber: selection.selectionStartLineNumber,\n\t\t\t\t\tcolumn: selection.selectionStartColumn,\n\t\t\t\t},\n\t\t\t\tposition: {\n\t\t\t\t\tlineNumber: selection.positionLineNumber,\n\t\t\t\t\tcolumn: selection.positionColumn,\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic restoreState(states: editorCommon.ICursorState[]): void {\n\n\t\tlet desiredSelections: ISelection[] = [];\n\n\t\tfor (let i = 0, len = states.length; i < len; i++) {\n\t\t\tconst state = states[i];\n\n\t\t\tlet positionLineNumber = 1;\n\t\t\tlet positionColumn = 1;\n\n\t\t\t// Avoid missing properties on the literal\n\t\t\tif (state.position && state.position.lineNumber) {\n\t\t\t\tpositionLineNumber = state.position.lineNumber;\n\t\t\t}\n\t\t\tif (state.position && state.position.column) {\n\t\t\t\tpositionColumn = state.position.column;\n\t\t\t}\n\n\t\t\tlet selectionStartLineNumber = positionLineNumber;\n\t\t\tlet selectionStartColumn = positionColumn;\n\n\t\t\t// Avoid missing properties on the literal\n\t\t\tif (state.selectionStart && state.selectionStart.lineNumber) {\n\t\t\t\tselectionStartLineNumber = state.selectionStart.lineNumber;\n\t\t\t}\n\t\t\tif (state.selectionStart && state.selectionStart.column) {\n\t\t\t\tselectionStartColumn = state.selectionStart.column;\n\t\t\t}\n\n\t\t\tdesiredSelections.push({\n\t\t\t\tselectionStartLineNumber: selectionStartLineNumber,\n\t\t\t\tselectionStartColumn: selectionStartColumn,\n\t\t\t\tpositionLineNumber: positionLineNumber,\n\t\t\t\tpositionColumn: positionColumn\n\t\t\t});\n\t\t}\n\n\t\tthis.setStates('restoreState', CursorChangeReason.NotSet, CursorState.fromModelSelections(desiredSelections));\n\t\tthis.reveal(true, RevealTarget.Primary);\n\t}\n\n\tprivate _onModelContentChanged(hadFlushEvent: boolean): void {\n\t\tif (hadFlushEvent) {\n\t\t\t// a model.setValue() was called\n\t\t\tthis._cursors.dispose();\n\t\t\tthis._cursors = new CursorCollection(this.context);\n\n\t\t\tthis._emitStateChangedIfNecessary('model', CursorChangeReason.ContentFlush, null);\n\t\t} else {\n\t\t\tconst selectionsFromMarkers = this._cursors.readSelectionFromMarkers();\n\t\t\tthis.setStates('modelChange', CursorChangeReason.RecoverFromMarkers, CursorState.fromModelSelections(selectionsFromMarkers));\n\t\t}\n\t}\n\n\tpublic getSelection(): Selection {\n\t\treturn this._cursors.getPrimaryCursor().modelState.selection;\n\t}\n\n\tpublic getColumnSelectData(): IColumnSelectData {\n\t\tif (this._columnSelectData) {\n\t\t\treturn this._columnSelectData;\n\t\t}\n\t\tconst primaryCursor = this._cursors.getPrimaryCursor();\n\t\tconst primaryPos = primaryCursor.viewState.position;\n\t\treturn {\n\t\t\ttoViewLineNumber: primaryPos.lineNumber,\n\t\t\ttoViewVisualColumn: CursorColumns.visibleColumnFromColumn2(this.context.config, this.context.viewModel, primaryPos)\n\t\t};\n\t}\n\n\tpublic getSelections(): Selection[] {\n\t\treturn this._cursors.getSelections();\n\t}\n\n\tpublic getViewSelections(): Selection[] {\n\t\treturn this._cursors.getViewSelections();\n\t}\n\n\tpublic getPosition(): Position {\n\t\treturn this._cursors.getPrimaryCursor().modelState.position;\n\t}\n\n\tpublic setSelections(source: string, selections: ISelection[]): void {\n\t\tthis.setStates(source, CursorChangeReason.NotSet, CursorState.fromModelSelections(selections));\n\t}\n\n\t// ------ auxiliary handling logic\n\n\tprivate _executeEditOperation(opResult: EditOperationResult): void {\n\n\t\tif (!opResult) {\n\t\t\t// Nothing to execute\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._configuration.editor.readOnly) {\n\t\t\t// Cannot execute when read only\n\t\t\treturn;\n\t\t}\n\n\t\tif (opResult.shouldPushStackElementBefore) {\n\t\t\tthis._model.pushStackElement();\n\t\t}\n\n\t\tconst result = CommandExecutor.executeCommands(this._model, this._cursors.getSelections(), opResult.commands);\n\t\tif (result) {\n\t\t\t// The commands were applied correctly\n\t\t\tthis._interpretCommandResult(result);\n\t\t}\n\n\t\tif (opResult.shouldPushStackElementAfter) {\n\t\t\tthis._model.pushStackElement();\n\t\t}\n\t}\n\n\tprivate _interpretCommandResult(cursorState: Selection[]): void {\n\t\tif (!cursorState || cursorState.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._columnSelectData = null;\n\t\tthis._cursors.setSelections(cursorState);\n\t\tthis._cursors.normalize();\n\t}\n\n\t// -----------------------------------------------------------------------------------------------------------\n\t// ----- emitting events\n\n\tprivate _emitStateChangedIfNecessary(source: string, reason: CursorChangeReason, oldState: CursorModelState): boolean {\n\t\tconst newState = new CursorModelState(this._model, this);\n\t\tif (newState.equals(oldState)) {\n\t\t\treturn false;\n\t\t}\n\n\n\t\tlet isInEditableRange: boolean = true;\n\t\tif (this._model.hasEditableRange()) {\n\t\t\tconst editableRange = this._model.getEditableRange();\n\t\t\tif (!editableRange.containsPosition(newState.cursorState[0].modelState.position)) {\n\t\t\t\tisInEditableRange = false;\n\t\t\t}\n\t\t}\n\n\t\tconst selections = this._cursors.getSelections();\n\t\tconst viewSelections = this._cursors.getViewSelections();\n\n\t\tlet screenReaderMessage: string = null;\n\t\t// if (oldState) {\n\t\t// \tscreenReaderMessage = ScreenReaderMessageGenerator.generateMessage(\n\t\t// \t\tsource,\n\t\t// \t\tthis._model,\n\t\t// \t\toldState.modelVersionId,\n\t\t// \t\toldState.cursorState[0].modelState.selection,\n\t\t// \t\tnewState.modelVersionId,\n\t\t// \t\tnewState.cursorState[0].modelState.selection\n\t\t// \t);\n\t\t// }\n\n\t\t// Let the view get the event first.\n\t\tthis._emit([new viewEvents.ViewCursorStateChangedEvent(viewSelections, isInEditableRange, screenReaderMessage)]);\n\n\t\t// Only after the view has been notified, let the rest of the world know...\n\t\tthis._onDidChange.fire(new CursorStateChangedEvent(selections, source || 'keyboard', reason));\n\n\t\treturn true;\n\t}\n\n\tprivate _revealRange(revealTarget: RevealTarget, verticalType: viewEvents.VerticalRevealType, revealHorizontal: boolean): void {\n\t\tconst viewPositions = this._cursors.getViewPositions();\n\n\t\tlet viewPosition = viewPositions[0];\n\n\t\tif (revealTarget === RevealTarget.TopMost) {\n\t\t\tfor (let i = 1; i < viewPositions.length; i++) {\n\t\t\t\tif (viewPositions[i].isBefore(viewPosition)) {\n\t\t\t\t\tviewPosition = viewPositions[i];\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (revealTarget === RevealTarget.BottomMost) {\n\t\t\tfor (let i = 1; i < viewPositions.length; i++) {\n\t\t\t\tif (viewPosition.isBeforeOrEqual(viewPositions[i])) {\n\t\t\t\t\tviewPosition = viewPositions[i];\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (viewPositions.length > 1) {\n\t\t\t\t// no revealing!\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst viewRange = new Range(viewPosition.lineNumber, viewPosition.column, viewPosition.lineNumber, viewPosition.column);\n\t\tthis.emitCursorRevealRange(viewRange, verticalType, revealHorizontal);\n\t}\n\n\tpublic emitCursorRevealRange(viewRange: Range, verticalType: viewEvents.VerticalRevealType, revealHorizontal: boolean) {\n\t\tthis._emit([new viewEvents.ViewRevealRangeRequestEvent(viewRange, verticalType, revealHorizontal)]);\n\t}\n\n\t// -----------------------------------------------------------------------------------------------------------\n\t// ----- handlers beyond this point\n\n\tpublic trigger(source: string, handlerId: string, payload: any): void {\n\t\tconst H = editorCommon.Handler;\n\n\t\tif (handlerId === H.CompositionStart) {\n\t\t\tthis._isDoingComposition = true;\n\t\t\treturn;\n\t\t}\n\n\t\tif (handlerId === H.CompositionEnd) {\n\t\t\tthis._isDoingComposition = false;\n\t\t\treturn;\n\t\t}\n\n\t\tconst oldState = new CursorModelState(this._model, this);\n\t\tlet cursorChangeReason = CursorChangeReason.NotSet;\n\n\t\t// ensure valid state on all cursors\n\t\tthis._cursors.ensureValidState();\n\n\t\tthis._isHandling = true;\n\n\t\ttry {\n\t\t\tswitch (handlerId) {\n\t\t\t\tcase H.Type:\n\t\t\t\t\tthis._type(source, payload.text);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase H.ReplacePreviousChar:\n\t\t\t\t\tthis._replacePreviousChar(payload.text, payload.replaceCharCnt);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase H.Paste:\n\t\t\t\t\tcursorChangeReason = CursorChangeReason.Paste;\n\t\t\t\t\tthis._paste(payload.text, payload.pasteOnNewLine);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase H.Cut:\n\t\t\t\t\tthis._cut();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase H.Undo:\n\t\t\t\t\tcursorChangeReason = CursorChangeReason.Undo;\n\t\t\t\t\tthis._interpretCommandResult(this._model.undo());\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase H.Redo:\n\t\t\t\t\tcursorChangeReason = CursorChangeReason.Redo;\n\t\t\t\t\tthis._interpretCommandResult(this._model.redo());\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase H.ExecuteCommand:\n\t\t\t\t\tthis._externalExecuteCommand(payload);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase H.ExecuteCommands:\n\t\t\t\t\tthis._externalExecuteCommands(payload);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tonUnexpectedError(err);\n\t\t}\n\n\t\tthis._isHandling = false;\n\n\t\tif (this._emitStateChangedIfNecessary(source, cursorChangeReason, oldState)) {\n\t\t\tthis._revealRange(RevealTarget.Primary, viewEvents.VerticalRevealType.Simple, true);\n\t\t}\n\t}\n\n\tprivate _type(source: string, text: string): void {\n\t\tif (!this._isDoingComposition && source === 'keyboard') {\n\t\t\t// If this event is coming straight from the keyboard, look for electric characters and enter\n\n\t\t\tfor (let i = 0, len = text.length; i < len; i++) {\n\t\t\t\tlet charCode = text.charCodeAt(i);\n\t\t\t\tlet chr: string;\n\t\t\t\tif (strings.isHighSurrogate(charCode) && i + 1 < len) {\n\t\t\t\t\tchr = text.charAt(i) + text.charAt(i + 1);\n\t\t\t\t\ti++;\n\t\t\t\t} else {\n\t\t\t\t\tchr = text.charAt(i);\n\t\t\t\t}\n\n\t\t\t\t// Here we must interpret each typed character individually, that's why we create a new context\n\t\t\t\tthis._executeEditOperation(TypeOperations.typeWithInterceptors(this.context.config, this.context.model, this.getSelections(), chr));\n\t\t\t}\n\n\t\t} else {\n\t\t\tthis._executeEditOperation(TypeOperations.typeWithoutInterceptors(this.context.config, this.context.model, this.getSelections(), text));\n\t\t}\n\t}\n\n\tprivate _replacePreviousChar(text: string, replaceCharCnt: number): void {\n\t\tthis._executeEditOperation(TypeOperations.replacePreviousChar(this.context.config, this.context.model, this.getSelections(), text, replaceCharCnt));\n\t}\n\n\tprivate _paste(text: string, pasteOnNewLine: boolean): void {\n\t\tthis._executeEditOperation(TypeOperations.paste(this.context.config, this.context.model, this.getSelections(), pasteOnNewLine, text));\n\t}\n\n\tprivate _cut(): void {\n\t\tthis._executeEditOperation(DeleteOperations.cut(this.context.config, this.context.model, this.getSelections()));\n\t}\n\n\tprivate _externalExecuteCommand(command: editorCommon.ICommand): void {\n\t\tthis._cursors.killSecondaryCursors();\n\n\t\tthis._executeEditOperation(new EditOperationResult([command], {\n\t\t\tshouldPushStackElementBefore: false,\n\t\t\tshouldPushStackElementAfter: false\n\t\t}));\n\t}\n\n\tprivate _externalExecuteCommands(commands: editorCommon.ICommand[]): void {\n\t\tthis._executeEditOperation(new EditOperationResult(commands, {\n\t\t\tshouldPushStackElementBefore: false,\n\t\t\tshouldPushStackElementAfter: false\n\t\t}));\n\t}\n}\n\ninterface IExecContext {\n\treadonly model: editorCommon.IModel;\n\treadonly selectionsBefore: Selection[];\n\treadonly selectionStartMarkers: string[];\n\treadonly positionMarkers: string[];\n}\n\ninterface ICommandData {\n\toperations: editorCommon.IIdentifiedSingleEditOperation[];\n\thadTrackedEditOperation: boolean;\n}\n\ninterface ICommandsData {\n\toperations: editorCommon.IIdentifiedSingleEditOperation[];\n\thadTrackedEditOperation: boolean;\n}\n\nclass CommandExecutor {\n\n\tpublic static executeCommands(model: editorCommon.IModel, selectionsBefore: Selection[], commands: editorCommon.ICommand[]): Selection[] {\n\n\t\tconst ctx: IExecContext = {\n\t\t\tmodel: model,\n\t\t\tselectionsBefore: selectionsBefore,\n\t\t\tselectionStartMarkers: [],\n\t\t\tpositionMarkers: []\n\t\t};\n\n\t\tconst result = this._innerExecuteCommands(ctx, commands);\n\n\t\tfor (let i = 0; i < ctx.selectionStartMarkers.length; i++) {\n\t\t\tctx.model._removeMarker(ctx.selectionStartMarkers[i]);\n\t\t\tctx.model._removeMarker(ctx.positionMarkers[i]);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate static _innerExecuteCommands(ctx: IExecContext, commands: editorCommon.ICommand[]): Selection[] {\n\n\t\tif (this._arrayIsEmpty(commands)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst commandsData = this._getEditOperations(ctx, commands);\n\t\tif (commandsData.operations.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst rawOperations = commandsData.operations;\n\n\t\tconst editableRange = ctx.model.getEditableRange();\n\t\tconst editableRangeStart = editableRange.getStartPosition();\n\t\tconst editableRangeEnd = editableRange.getEndPosition();\n\t\tfor (let i = 0, len = rawOperations.length; i < len; i++) {\n\t\t\tconst operationRange = rawOperations[i].range;\n\t\t\tif (!editableRangeStart.isBeforeOrEqual(operationRange.getStartPosition()) || !operationRange.getEndPosition().isBeforeOrEqual(editableRangeEnd)) {\n\t\t\t\t// These commands are outside of the editable range\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tconst loserCursorsMap = this._getLoserCursorMap(rawOperations);\n\t\tif (loserCursorsMap.hasOwnProperty('0')) {\n\t\t\t// These commands are very messed up\n\t\t\tconsole.warn('Ignoring commands');\n\t\t\treturn null;\n\t\t}\n\n\t\t// Remove operations belonging to losing cursors\n\t\tlet filteredOperations: editorCommon.IIdentifiedSingleEditOperation[] = [];\n\t\tfor (let i = 0, len = rawOperations.length; i < len; i++) {\n\t\t\tif (!loserCursorsMap.hasOwnProperty(rawOperations[i].identifier.major.toString())) {\n\t\t\t\tfilteredOperations.push(rawOperations[i]);\n\t\t\t}\n\t\t}\n\n\t\t// TODO@Alex: find a better way to do this.\n\t\t// give the hint that edit operations are tracked to the model\n\t\tif (commandsData.hadTrackedEditOperation && filteredOperations.length > 0) {\n\t\t\tfilteredOperations[0]._isTracked = true;\n\t\t}\n\t\tconst selectionsAfter = ctx.model.pushEditOperations(ctx.selectionsBefore, filteredOperations, (inverseEditOperations: editorCommon.IIdentifiedSingleEditOperation[]): Selection[] => {\n\t\t\tlet groupedInverseEditOperations: editorCommon.IIdentifiedSingleEditOperation[][] = [];\n\t\t\tfor (let i = 0; i < ctx.selectionsBefore.length; i++) {\n\t\t\t\tgroupedInverseEditOperations[i] = [];\n\t\t\t}\n\t\t\tfor (let i = 0; i < inverseEditOperations.length; i++) {\n\t\t\t\tconst op = inverseEditOperations[i];\n\t\t\t\tif (!op.identifier) {\n\t\t\t\t\t// perhaps auto whitespace trim edits\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tgroupedInverseEditOperations[op.identifier.major].push(op);\n\t\t\t}\n\t\t\tconst minorBasedSorter = (a: editorCommon.IIdentifiedSingleEditOperation, b: editorCommon.IIdentifiedSingleEditOperation) => {\n\t\t\t\treturn a.identifier.minor - b.identifier.minor;\n\t\t\t};\n\t\t\tlet cursorSelections: Selection[] = [];\n\t\t\tfor (let i = 0; i < ctx.selectionsBefore.length; i++) {\n\t\t\t\tif (groupedInverseEditOperations[i].length > 0) {\n\t\t\t\t\tgroupedInverseEditOperations[i].sort(minorBasedSorter);\n\t\t\t\t\tcursorSelections[i] = commands[i].computeCursorState(ctx.model, {\n\t\t\t\t\t\tgetInverseEditOperations: () => {\n\t\t\t\t\t\t\treturn groupedInverseEditOperations[i];\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tgetTrackedSelection: (id: string) => {\n\t\t\t\t\t\t\tconst idx = parseInt(id, 10);\n\t\t\t\t\t\t\tconst selectionStartMarker = ctx.model._getMarker(ctx.selectionStartMarkers[idx]);\n\t\t\t\t\t\t\tconst positionMarker = ctx.model._getMarker(ctx.positionMarkers[idx]);\n\t\t\t\t\t\t\treturn new Selection(selectionStartMarker.lineNumber, selectionStartMarker.column, positionMarker.lineNumber, positionMarker.column);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tcursorSelections[i] = ctx.selectionsBefore[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cursorSelections;\n\t\t});\n\n\t\t// Extract losing cursors\n\t\tlet losingCursors: number[] = [];\n\t\tfor (let losingCursorIndex in loserCursorsMap) {\n\t\t\tif (loserCursorsMap.hasOwnProperty(losingCursorIndex)) {\n\t\t\t\tlosingCursors.push(parseInt(losingCursorIndex, 10));\n\t\t\t}\n\t\t}\n\n\t\t// Sort losing cursors descending\n\t\tlosingCursors.sort((a: number, b: number): number => {\n\t\t\treturn b - a;\n\t\t});\n\n\t\t// Remove losing cursors\n\t\tfor (let i = 0; i < losingCursors.length; i++) {\n\t\t\tselectionsAfter.splice(losingCursors[i], 1);\n\t\t}\n\n\t\treturn selectionsAfter;\n\t}\n\n\tprivate static _arrayIsEmpty(commands: editorCommon.ICommand[]): boolean {\n\t\tfor (let i = 0, len = commands.length; i < len; i++) {\n\t\t\tif (commands[i]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tprivate static _getEditOperations(ctx: IExecContext, commands: editorCommon.ICommand[]): ICommandsData {\n\t\tlet operations: editorCommon.IIdentifiedSingleEditOperation[] = [];\n\t\tlet hadTrackedEditOperation: boolean = false;\n\n\t\tfor (let i = 0, len = commands.length; i < len; i++) {\n\t\t\tif (commands[i]) {\n\t\t\t\tconst r = this._getEditOperationsFromCommand(ctx, i, commands[i]);\n\t\t\t\toperations = operations.concat(r.operations);\n\t\t\t\thadTrackedEditOperation = hadTrackedEditOperation || r.hadTrackedEditOperation;\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\toperations: operations,\n\t\t\thadTrackedEditOperation: hadTrackedEditOperation\n\t\t};\n\t}\n\n\tprivate static _getEditOperationsFromCommand(ctx: IExecContext, majorIdentifier: number, command: editorCommon.ICommand): ICommandData {\n\t\t// This method acts as a transaction, if the command fails\n\t\t// everything it has done is ignored\n\t\tlet operations: editorCommon.IIdentifiedSingleEditOperation[] = [];\n\t\tlet operationMinor = 0;\n\n\t\tconst addEditOperation = (selection: Range, text: string) => {\n\t\t\tif (selection.isEmpty() && text === '') {\n\t\t\t\t// This command wants to add a no-op => no thank you\n\t\t\t\treturn;\n\t\t\t}\n\t\t\toperations.push({\n\t\t\t\tidentifier: {\n\t\t\t\t\tmajor: majorIdentifier,\n\t\t\t\t\tminor: operationMinor++\n\t\t\t\t},\n\t\t\t\trange: selection,\n\t\t\t\ttext: text,\n\t\t\t\tforceMoveMarkers: false,\n\t\t\t\tisAutoWhitespaceEdit: command.insertsAutoWhitespace\n\t\t\t});\n\t\t};\n\n\t\tlet hadTrackedEditOperation = false;\n\t\tconst addTrackedEditOperation = (selection: Range, text: string) => {\n\t\t\thadTrackedEditOperation = true;\n\t\t\taddEditOperation(selection, text);\n\t\t};\n\n\t\tconst trackSelection = (selection: Selection, trackPreviousOnEmpty?: boolean) => {\n\t\t\tlet selectionMarkerStickToPreviousCharacter: boolean;\n\t\t\tlet positionMarkerStickToPreviousCharacter: boolean;\n\n\t\t\tif (selection.isEmpty()) {\n\t\t\t\t// Try to lock it with surrounding text\n\t\t\t\tif (typeof trackPreviousOnEmpty === 'boolean') {\n\t\t\t\t\tselectionMarkerStickToPreviousCharacter = trackPreviousOnEmpty;\n\t\t\t\t\tpositionMarkerStickToPreviousCharacter = trackPreviousOnEmpty;\n\t\t\t\t} else {\n\t\t\t\t\tconst maxLineColumn = ctx.model.getLineMaxColumn(selection.startLineNumber);\n\t\t\t\t\tif (selection.startColumn === maxLineColumn) {\n\t\t\t\t\t\tselectionMarkerStickToPreviousCharacter = true;\n\t\t\t\t\t\tpositionMarkerStickToPreviousCharacter = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tselectionMarkerStickToPreviousCharacter = false;\n\t\t\t\t\t\tpositionMarkerStickToPreviousCharacter = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (selection.getDirection() === SelectionDirection.LTR) {\n\t\t\t\t\tselectionMarkerStickToPreviousCharacter = false;\n\t\t\t\t\tpositionMarkerStickToPreviousCharacter = true;\n\t\t\t\t} else {\n\t\t\t\t\tselectionMarkerStickToPreviousCharacter = true;\n\t\t\t\t\tpositionMarkerStickToPreviousCharacter = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst l = ctx.selectionStartMarkers.length;\n\t\t\tctx.selectionStartMarkers[l] = ctx.model._addMarker(0, selection.selectionStartLineNumber, selection.selectionStartColumn, selectionMarkerStickToPreviousCharacter);\n\t\t\tctx.positionMarkers[l] = ctx.model._addMarker(0, selection.positionLineNumber, selection.positionColumn, positionMarkerStickToPreviousCharacter);\n\t\t\treturn l.toString();\n\t\t};\n\n\t\tconst editOperationBuilder: editorCommon.IEditOperationBuilder = {\n\t\t\taddEditOperation: addEditOperation,\n\t\t\taddTrackedEditOperation: addTrackedEditOperation,\n\t\t\ttrackSelection: trackSelection\n\t\t};\n\n\t\ttry {\n\t\t\tcommand.getEditOperations(ctx.model, editOperationBuilder);\n\t\t} catch (e) {\n\t\t\te.friendlyMessage = nls.localize('corrupt.commands', \"Unexpected exception while executing command.\");\n\t\t\tonUnexpectedError(e);\n\t\t\treturn {\n\t\t\t\toperations: [],\n\t\t\t\thadTrackedEditOperation: false\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\toperations: operations,\n\t\t\thadTrackedEditOperation: hadTrackedEditOperation\n\t\t};\n\t}\n\n\tprivate static _getLoserCursorMap(operations: editorCommon.IIdentifiedSingleEditOperation[]): { [index: string]: boolean; } {\n\t\t// This is destructive on the array\n\t\toperations = operations.slice(0);\n\n\t\t// Sort operations with last one first\n\t\toperations.sort((a: editorCommon.IIdentifiedSingleEditOperation, b: editorCommon.IIdentifiedSingleEditOperation): number => {\n\t\t\t// Note the minus!\n\t\t\treturn -(Range.compareRangesUsingEnds(a.range, b.range));\n\t\t});\n\n\t\t// Operations can not overlap!\n\t\tlet loserCursorsMap: { [index: string]: boolean; } = {};\n\n\t\tfor (let i = 1; i < operations.length; i++) {\n\t\t\tconst previousOp = operations[i - 1];\n\t\t\tconst currentOp = operations[i];\n\n\t\t\tif (previousOp.range.getStartPosition().isBefore(currentOp.range.getEndPosition())) {\n\n\t\t\t\tlet loserMajor: number;\n\n\t\t\t\tif (previousOp.identifier.major > currentOp.identifier.major) {\n\t\t\t\t\t// previousOp loses the battle\n\t\t\t\t\tloserMajor = previousOp.identifier.major;\n\t\t\t\t} else {\n\t\t\t\t\tloserMajor = currentOp.identifier.major;\n\t\t\t\t}\n\n\t\t\t\tloserCursorsMap[loserMajor.toString()] = true;\n\n\t\t\t\tfor (let j = 0; j < operations.length; j++) {\n\t\t\t\t\tif (operations[j].identifier.major === loserMajor) {\n\t\t\t\t\t\toperations.splice(j, 1);\n\t\t\t\t\t\tif (j < i) {\n\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tj--;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (i > 0) {\n\t\t\t\t\ti--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn loserCursorsMap;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { StopWatch } from 'vs/base/common/stopwatch';\nimport { Range } from 'vs/editor/common/core/range';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { TextModel } from 'vs/editor/common/model/textModel';\nimport { ITokenizationSupport, IState, TokenizationRegistry, LanguageId, LanguageIdentifier } from 'vs/editor/common/modes';\nimport { NULL_LANGUAGE_IDENTIFIER, nullTokenize2 } from 'vs/editor/common/modes/nullMode';\nimport { ignoreBracketsInToken } from 'vs/editor/common/modes/supports';\nimport { BracketsUtils, RichEditBrackets, RichEditBracket } from 'vs/editor/common/modes/supports/richEditBrackets';\nimport { Position, IPosition } from 'vs/editor/common/core/position';\nimport { LanguageConfigurationRegistry } from 'vs/editor/common/modes/languageConfigurationRegistry';\nimport { LineTokens, LineToken } from 'vs/editor/common/core/lineTokens';\nimport { getWordAtText } from 'vs/editor/common/model/wordHelper';\nimport { TokenizationResult2 } from 'vs/editor/common/core/token';\nimport { ITextSource, IRawTextSource } from 'vs/editor/common/model/textSource';\nimport * as textModelEvents from 'vs/editor/common/model/textModelEvents';\n\nclass ModelTokensChangedEventBuilder {\n\n\tprivate _ranges: { fromLineNumber: number; toLineNumber: number; }[];\n\n\tconstructor() {\n\t\tthis._ranges = [];\n\t}\n\n\tpublic registerChangedTokens(lineNumber: number): void {\n\t\tconst ranges = this._ranges;\n\t\tconst rangesLength = ranges.length;\n\t\tconst previousRange = rangesLength > 0 ? ranges[rangesLength - 1] : null;\n\n\t\tif (previousRange && previousRange.toLineNumber === lineNumber - 1) {\n\t\t\t// extend previous range\n\t\t\tpreviousRange.toLineNumber++;\n\t\t} else {\n\t\t\t// insert new range\n\t\t\tranges[rangesLength] = {\n\t\t\t\tfromLineNumber: lineNumber,\n\t\t\t\ttoLineNumber: lineNumber\n\t\t\t};\n\t\t}\n\t}\n\n\tpublic build(): textModelEvents.IModelTokensChangedEvent {\n\t\tif (this._ranges.length === 0) {\n\t\t\treturn null;\n\t\t}\n\t\treturn {\n\t\t\tranges: this._ranges\n\t\t};\n\t}\n}\n\nexport class TextModelWithTokens extends TextModel implements editorCommon.ITokenizedModel {\n\n\tprivate static MODE_TOKENIZATION_FAILED_MSG = nls.localize('mode.tokenizationSupportFailed', \"The mode has failed while tokenizing the input.\");\n\n\tprivate _languageIdentifier: LanguageIdentifier;\n\tprivate _tokenizationListener: IDisposable;\n\tprivate _tokenizationSupport: ITokenizationSupport;\n\n\tprivate _invalidLineStartIndex: number;\n\tprivate _lastState: IState;\n\n\tprivate _revalidateTokensTimeout: number;\n\n\tconstructor(rawTextSource: IRawTextSource, creationOptions: editorCommon.ITextModelCreationOptions, languageIdentifier: LanguageIdentifier) {\n\t\tsuper(rawTextSource, creationOptions);\n\n\t\tthis._languageIdentifier = languageIdentifier || NULL_LANGUAGE_IDENTIFIER;\n\t\tthis._tokenizationListener = TokenizationRegistry.onDidChange((e) => {\n\t\t\tif (e.changedLanguages.indexOf(this._languageIdentifier.language) === -1) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._resetTokenizationState();\n\t\t\tthis.emitModelTokensChangedEvent({\n\t\t\t\tranges: [{\n\t\t\t\t\tfromLineNumber: 1,\n\t\t\t\t\ttoLineNumber: this.getLineCount()\n\t\t\t\t}]\n\t\t\t});\n\t\t});\n\n\t\tthis._revalidateTokensTimeout = -1;\n\n\t\tthis._resetTokenizationState();\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._tokenizationListener.dispose();\n\t\tthis._clearTimers();\n\t\tthis._lastState = null;\n\n\t\tsuper.dispose();\n\t}\n\n\tprotected _shouldAutoTokenize(): boolean {\n\t\treturn false;\n\t}\n\n\tprotected _resetValue(newValue: ITextSource): void {\n\t\tsuper._resetValue(newValue);\n\t\t// Cancel tokenization, clear all tokens and begin tokenizing\n\t\tthis._resetTokenizationState();\n\t}\n\n\tprotected _resetTokenizationState(): void {\n\t\tthis._clearTimers();\n\t\tfor (let i = 0; i < this._lines.length; i++) {\n\t\t\tthis._lines[i].resetTokenizationState();\n\t\t}\n\n\t\tthis._tokenizationSupport = null;\n\t\tif (!this.isTooLargeForHavingAMode()) {\n\t\t\tthis._tokenizationSupport = TokenizationRegistry.get(this._languageIdentifier.language);\n\t\t}\n\n\t\tif (this._tokenizationSupport) {\n\t\t\tlet initialState: IState = null;\n\t\t\ttry {\n\t\t\t\tinitialState = this._tokenizationSupport.getInitialState();\n\t\t\t} catch (e) {\n\t\t\t\te.friendlyMessage = TextModelWithTokens.MODE_TOKENIZATION_FAILED_MSG;\n\t\t\t\tonUnexpectedError(e);\n\t\t\t\tthis._tokenizationSupport = null;\n\t\t\t}\n\n\t\t\tif (initialState) {\n\t\t\t\tthis._lines[0].setState(initialState);\n\t\t\t}\n\t\t}\n\n\t\tthis._lastState = null;\n\t\tthis._invalidLineStartIndex = 0;\n\t\tthis._beginBackgroundTokenization();\n\t}\n\n\tprivate _clearTimers(): void {\n\t\tif (this._revalidateTokensTimeout !== -1) {\n\t\t\tclearTimeout(this._revalidateTokensTimeout);\n\t\t\tthis._revalidateTokensTimeout = -1;\n\t\t}\n\t}\n\n\tprivate _withModelTokensChangedEventBuilder(callback: (eventBuilder: ModelTokensChangedEventBuilder) => T): T {\n\t\tlet eventBuilder = new ModelTokensChangedEventBuilder();\n\n\t\tlet result = callback(eventBuilder);\n\n\t\tif (!this._isDisposing) {\n\t\t\tlet e = eventBuilder.build();\n\t\t\tif (e) {\n\t\t\t\tthis._eventEmitter.emit(textModelEvents.TextModelEventType.ModelTokensChanged, e);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic forceTokenization(lineNumber: number): void {\n\t\tif (lineNumber < 1 || lineNumber > this.getLineCount()) {\n\t\t\tthrow new Error('Illegal value ' + lineNumber + ' for `lineNumber`');\n\t\t}\n\n\t\tthis._withModelTokensChangedEventBuilder((eventBuilder) => {\n\t\t\tthis._updateTokensUntilLine(eventBuilder, lineNumber);\n\t\t});\n\t}\n\n\tpublic getLineTokens(lineNumber: number): LineTokens {\n\t\tif (lineNumber < 1 || lineNumber > this.getLineCount()) {\n\t\t\tthrow new Error('Illegal value ' + lineNumber + ' for `lineNumber`');\n\t\t}\n\n\t\treturn this._getLineTokens(lineNumber);\n\t}\n\n\tprivate _getLineTokens(lineNumber: number): LineTokens {\n\t\treturn this._lines[lineNumber - 1].getTokens(this._languageIdentifier.id);\n\t}\n\n\tpublic getLanguageIdentifier(): LanguageIdentifier {\n\t\treturn this._languageIdentifier;\n\t}\n\n\tpublic getModeId(): string {\n\t\treturn this._languageIdentifier.language;\n\t}\n\n\tpublic setMode(languageIdentifier: LanguageIdentifier): void {\n\t\tif (this._languageIdentifier.id === languageIdentifier.id) {\n\t\t\t// There's nothing to do\n\t\t\treturn;\n\t\t}\n\n\t\tlet e: textModelEvents.IModelLanguageChangedEvent = {\n\t\t\toldLanguage: this._languageIdentifier.language,\n\t\t\tnewLanguage: languageIdentifier.language\n\t\t};\n\n\t\tthis._languageIdentifier = languageIdentifier;\n\n\t\t// Cancel tokenization, clear all tokens and begin tokenizing\n\t\tthis._resetTokenizationState();\n\n\t\tthis.emitModelTokensChangedEvent({\n\t\t\tranges: [{\n\t\t\t\tfromLineNumber: 1,\n\t\t\t\ttoLineNumber: this.getLineCount()\n\t\t\t}]\n\t\t});\n\t\tthis._emitModelModeChangedEvent(e);\n\t}\n\n\tpublic getLanguageIdAtPosition(_lineNumber: number, _column: number): LanguageId {\n\t\tif (!this._tokenizationSupport) {\n\t\t\treturn this._languageIdentifier.id;\n\t\t}\n\t\tlet { lineNumber, column } = this.validatePosition({ lineNumber: _lineNumber, column: _column });\n\n\t\tlet lineTokens = this._getLineTokens(lineNumber);\n\t\tlet token = lineTokens.findTokenAtOffset(column - 1);\n\t\treturn token.languageId;\n\t}\n\n\tprotected _invalidateLine(lineIndex: number): void {\n\t\tthis._lines[lineIndex].isInvalid = true;\n\t\tif (lineIndex < this._invalidLineStartIndex) {\n\t\t\tif (this._invalidLineStartIndex < this._lines.length) {\n\t\t\t\tthis._lines[this._invalidLineStartIndex].isInvalid = true;\n\t\t\t}\n\t\t\tthis._invalidLineStartIndex = lineIndex;\n\t\t\tthis._beginBackgroundTokenization();\n\t\t}\n\t}\n\n\tprivate _beginBackgroundTokenization(): void {\n\t\tif (this._shouldAutoTokenize() && this._revalidateTokensTimeout === -1) {\n\t\t\tthis._revalidateTokensTimeout = setTimeout(() => {\n\t\t\t\tthis._revalidateTokensTimeout = -1;\n\t\t\t\tthis._revalidateTokensNow();\n\t\t\t}, 0);\n\t\t}\n\t}\n\n\t_warmUpTokens(): void {\n\t\t// Warm up first 100 lines (if it takes less than 50ms)\n\t\tvar maxLineNumber = Math.min(100, this.getLineCount());\n\t\tvar toLineNumber = maxLineNumber;\n\t\tfor (var lineNumber = 1; lineNumber <= maxLineNumber; lineNumber++) {\n\t\t\tvar text = this._lines[lineNumber - 1].text;\n\t\t\tif (text.length >= 200) {\n\t\t\t\t// This line is over 200 chars long, so warm up without it\n\t\t\t\ttoLineNumber = lineNumber - 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis._revalidateTokensNow(toLineNumber);\n\n\t\tif (this._invalidLineStartIndex < this._lines.length) {\n\t\t\tthis._beginBackgroundTokenization();\n\t\t}\n\t}\n\n\tprivate _revalidateTokensNow(toLineNumber: number = this._invalidLineStartIndex + 1000000): void {\n\n\t\tthis._withModelTokensChangedEventBuilder((eventBuilder) => {\n\n\t\t\ttoLineNumber = Math.min(this._lines.length, toLineNumber);\n\n\t\t\tvar MAX_ALLOWED_TIME = 20,\n\t\t\t\tfromLineNumber = this._invalidLineStartIndex + 1,\n\t\t\t\ttokenizedChars = 0,\n\t\t\t\tcurrentCharsToTokenize = 0,\n\t\t\t\tcurrentEstimatedTimeToTokenize = 0,\n\t\t\t\tsw = StopWatch.create(false),\n\t\t\t\telapsedTime: number;\n\n\t\t\t// Tokenize at most 1000 lines. Estimate the tokenization speed per character and stop when:\n\t\t\t// - MAX_ALLOWED_TIME is reached\n\t\t\t// - tokenizing the next line would go above MAX_ALLOWED_TIME\n\n\t\t\tfor (var lineNumber = fromLineNumber; lineNumber <= toLineNumber; lineNumber++) {\n\t\t\t\telapsedTime = sw.elapsed();\n\t\t\t\tif (elapsedTime > MAX_ALLOWED_TIME) {\n\t\t\t\t\t// Stop if MAX_ALLOWED_TIME is reached\n\t\t\t\t\ttoLineNumber = lineNumber - 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Compute how many characters will be tokenized for this line\n\t\t\t\tcurrentCharsToTokenize = this._lines[lineNumber - 1].text.length;\n\n\t\t\t\tif (tokenizedChars > 0) {\n\t\t\t\t\t// If we have enough history, estimate how long tokenizing this line would take\n\t\t\t\t\tcurrentEstimatedTimeToTokenize = (elapsedTime / tokenizedChars) * currentCharsToTokenize;\n\t\t\t\t\tif (elapsedTime + currentEstimatedTimeToTokenize > MAX_ALLOWED_TIME) {\n\t\t\t\t\t\t// Tokenizing this line will go above MAX_ALLOWED_TIME\n\t\t\t\t\t\ttoLineNumber = lineNumber - 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._updateTokensUntilLine(eventBuilder, lineNumber);\n\t\t\t\ttokenizedChars += currentCharsToTokenize;\n\n\t\t\t\t// Skip the lines that got tokenized\n\t\t\t\tlineNumber = Math.max(lineNumber, this._invalidLineStartIndex + 1);\n\t\t\t}\n\n\t\t\telapsedTime = sw.elapsed();\n\n\t\t\tif (this._invalidLineStartIndex < this._lines.length) {\n\t\t\t\tthis._beginBackgroundTokenization();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _updateTokensUntilLine(eventBuilder: ModelTokensChangedEventBuilder, lineNumber: number): void {\n\t\tif (!this._tokenizationSupport) {\n\t\t\tthis._invalidLineStartIndex = this._lines.length;\n\t\t\treturn;\n\t\t}\n\n\t\tconst linesLength = this._lines.length;\n\t\tconst endLineIndex = lineNumber - 1;\n\n\t\t// Validate all states up to and including endLineIndex\n\t\tfor (let lineIndex = this._invalidLineStartIndex; lineIndex <= endLineIndex; lineIndex++) {\n\t\t\tconst endStateIndex = lineIndex + 1;\n\t\t\tlet r: TokenizationResult2 = null;\n\t\t\tconst text = this._lines[lineIndex].text;\n\n\t\t\ttry {\n\t\t\t\t// Tokenize only the first X characters\n\t\t\t\tlet freshState = this._lines[lineIndex].getState().clone();\n\t\t\t\tr = this._tokenizationSupport.tokenize2(this._lines[lineIndex].text, freshState, 0);\n\t\t\t} catch (e) {\n\t\t\t\te.friendlyMessage = TextModelWithTokens.MODE_TOKENIZATION_FAILED_MSG;\n\t\t\t\tonUnexpectedError(e);\n\t\t\t}\n\n\t\t\tif (!r) {\n\t\t\t\tr = nullTokenize2(this._languageIdentifier.id, text, this._lines[lineIndex].getState(), 0);\n\t\t\t}\n\t\t\tthis._lines[lineIndex].setTokens(this._languageIdentifier.id, r.tokens);\n\t\t\teventBuilder.registerChangedTokens(lineIndex + 1);\n\t\t\tthis._lines[lineIndex].isInvalid = false;\n\n\t\t\tif (endStateIndex < linesLength) {\n\t\t\t\tif (this._lines[endStateIndex].getState() !== null && r.endState.equals(this._lines[endStateIndex].getState())) {\n\t\t\t\t\t// The end state of this line remains the same\n\t\t\t\t\tlet nextInvalidLineIndex = lineIndex + 1;\n\t\t\t\t\twhile (nextInvalidLineIndex < linesLength) {\n\t\t\t\t\t\tif (this._lines[nextInvalidLineIndex].isInvalid) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (nextInvalidLineIndex + 1 < linesLength) {\n\t\t\t\t\t\t\tif (this._lines[nextInvalidLineIndex + 1].getState() === null) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (this._lastState === null) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnextInvalidLineIndex++;\n\t\t\t\t\t}\n\t\t\t\t\tthis._invalidLineStartIndex = Math.max(this._invalidLineStartIndex, nextInvalidLineIndex);\n\t\t\t\t\tlineIndex = nextInvalidLineIndex - 1; // -1 because the outer loop increments it\n\t\t\t\t} else {\n\t\t\t\t\tthis._lines[endStateIndex].setState(r.endState);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._lastState = r.endState;\n\t\t\t}\n\t\t}\n\t\tthis._invalidLineStartIndex = Math.max(this._invalidLineStartIndex, endLineIndex + 1);\n\t}\n\n\tprivate emitModelTokensChangedEvent(e: textModelEvents.IModelTokensChangedEvent): void {\n\t\tif (!this._isDisposing) {\n\t\t\tthis._eventEmitter.emit(textModelEvents.TextModelEventType.ModelTokensChanged, e);\n\t\t}\n\t}\n\n\tprivate _emitModelModeChangedEvent(e: textModelEvents.IModelLanguageChangedEvent): void {\n\t\tif (!this._isDisposing) {\n\t\t\tthis._eventEmitter.emit(textModelEvents.TextModelEventType.ModelLanguageChanged, e);\n\t\t}\n\t}\n\n\t// Having tokens allows implementing additional helper methods\n\n\tpublic getWordAtPosition(_position: IPosition): editorCommon.IWordAtPosition {\n\t\tthis._assertNotDisposed();\n\t\tlet position = this.validatePosition(_position);\n\t\tlet lineContent = this.getLineContent(position.lineNumber);\n\n\t\tif (this._invalidLineStartIndex <= position.lineNumber) {\n\t\t\t// this line is not tokenized\n\t\t\treturn getWordAtText(\n\t\t\t\tposition.column,\n\t\t\t\tLanguageConfigurationRegistry.getWordDefinition(this._languageIdentifier.id),\n\t\t\t\tlineContent,\n\t\t\t\t0\n\t\t\t);\n\t\t}\n\n\t\tlet lineTokens = this._getLineTokens(position.lineNumber);\n\t\tlet offset = position.column - 1;\n\t\tlet token = lineTokens.findTokenAtOffset(offset);\n\n\t\tlet result = getWordAtText(\n\t\t\tposition.column,\n\t\t\tLanguageConfigurationRegistry.getWordDefinition(token.languageId),\n\t\t\tlineContent.substring(token.startOffset, token.endOffset),\n\t\t\ttoken.startOffset\n\t\t);\n\n\t\tif (!result && token.hasPrev && token.startOffset === offset) {\n\t\t\t// The position is right at the beginning of `modeIndex`, so try looking at `modeIndex` - 1 too\n\n\t\t\tlet prevToken = token.prev();\n\t\t\tresult = getWordAtText(\n\t\t\t\tposition.column,\n\t\t\t\tLanguageConfigurationRegistry.getWordDefinition(prevToken.languageId),\n\t\t\t\tlineContent.substring(prevToken.startOffset, prevToken.endOffset),\n\t\t\t\tprevToken.startOffset\n\t\t\t);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic getWordUntilPosition(position: IPosition): editorCommon.IWordAtPosition {\n\t\tvar wordAtPosition = this.getWordAtPosition(position);\n\t\tif (!wordAtPosition) {\n\t\t\treturn {\n\t\t\t\tword: '',\n\t\t\t\tstartColumn: position.column,\n\t\t\t\tendColumn: position.column\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tword: wordAtPosition.word.substr(0, position.column - wordAtPosition.startColumn),\n\t\t\tstartColumn: wordAtPosition.startColumn,\n\t\t\tendColumn: position.column\n\t\t};\n\t}\n\n\tpublic findMatchingBracketUp(_bracket: string, _position: IPosition): Range {\n\t\tlet bracket = _bracket.toLowerCase();\n\t\tlet position = this.validatePosition(_position);\n\n\t\tlet lineTokens = this._getLineTokens(position.lineNumber);\n\t\tlet token = lineTokens.findTokenAtOffset(position.column - 1);\n\t\tlet bracketsSupport = LanguageConfigurationRegistry.getBracketsSupport(token.languageId);\n\n\t\tif (!bracketsSupport) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet data = bracketsSupport.textIsBracket[bracket];\n\n\t\tif (!data) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this._findMatchingBracketUp(data, position);\n\t}\n\n\tpublic matchBracket(position: IPosition): [Range, Range] {\n\t\treturn this._matchBracket(this.validatePosition(position));\n\t}\n\n\tprivate _matchBracket(position: Position): [Range, Range] {\n\t\tconst lineNumber = position.lineNumber;\n\t\tlet lineTokens = this._getLineTokens(lineNumber);\n\t\tconst lineText = this._lines[lineNumber - 1].text;\n\n\t\tconst currentToken = lineTokens.findTokenAtOffset(position.column - 1);\n\t\tif (!currentToken) {\n\t\t\treturn null;\n\t\t}\n\t\tconst currentModeBrackets = LanguageConfigurationRegistry.getBracketsSupport(currentToken.languageId);\n\n\t\t// check that the token is not to be ignored\n\t\tif (currentModeBrackets && !ignoreBracketsInToken(currentToken.tokenType)) {\n\t\t\t// limit search to not go before `maxBracketLength`\n\t\t\tlet searchStartOffset = Math.max(currentToken.startOffset, position.column - 1 - currentModeBrackets.maxBracketLength);\n\t\t\t// limit search to not go after `maxBracketLength`\n\t\t\tconst searchEndOffset = Math.min(currentToken.endOffset, position.column - 1 + currentModeBrackets.maxBracketLength);\n\n\t\t\t// first, check if there is a bracket to the right of `position`\n\t\t\tlet foundBracket = BracketsUtils.findNextBracketInToken(currentModeBrackets.forwardRegex, lineNumber, lineText, position.column - 1, searchEndOffset);\n\t\t\tif (foundBracket && foundBracket.startColumn === position.column) {\n\t\t\t\tlet foundBracketText = lineText.substring(foundBracket.startColumn - 1, foundBracket.endColumn - 1);\n\t\t\t\tfoundBracketText = foundBracketText.toLowerCase();\n\n\t\t\t\tlet r = this._matchFoundBracket(foundBracket, currentModeBrackets.textIsBracket[foundBracketText], currentModeBrackets.textIsOpenBracket[foundBracketText]);\n\n\t\t\t\t// check that we can actually match this bracket\n\t\t\t\tif (r) {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// it might still be the case that [currentTokenStart -> currentTokenEnd] contains multiple brackets\n\t\t\twhile (true) {\n\t\t\t\tlet foundBracket = BracketsUtils.findNextBracketInToken(currentModeBrackets.forwardRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n\t\t\t\tif (!foundBracket) {\n\t\t\t\t\t// there are no brackets in this text\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// check that we didn't hit a bracket too far away from position\n\t\t\t\tif (foundBracket.startColumn <= position.column && position.column <= foundBracket.endColumn) {\n\t\t\t\t\tlet foundBracketText = lineText.substring(foundBracket.startColumn - 1, foundBracket.endColumn - 1);\n\t\t\t\t\tfoundBracketText = foundBracketText.toLowerCase();\n\n\t\t\t\t\tlet r = this._matchFoundBracket(foundBracket, currentModeBrackets.textIsBracket[foundBracketText], currentModeBrackets.textIsOpenBracket[foundBracketText]);\n\n\t\t\t\t\t// check that we can actually match this bracket\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsearchStartOffset = foundBracket.endColumn - 1;\n\t\t\t}\n\t\t}\n\n\t\t// If position is in between two tokens, try also looking in the previous token\n\t\tif (currentToken.hasPrev && currentToken.startOffset === position.column - 1) {\n\t\t\tconst prevToken = currentToken.prev();\n\t\t\tconst prevModeBrackets = LanguageConfigurationRegistry.getBracketsSupport(prevToken.languageId);\n\n\t\t\t// check that previous token is not to be ignored\n\t\t\tif (prevModeBrackets && !ignoreBracketsInToken(prevToken.tokenType)) {\n\t\t\t\t// limit search in case previous token is very large, there's no need to go beyond `maxBracketLength`\n\t\t\t\tconst searchStartOffset = Math.max(prevToken.startOffset, position.column - 1 - prevModeBrackets.maxBracketLength);\n\t\t\t\tconst searchEndOffset = currentToken.startOffset;\n\t\t\t\tconst foundBracket = BracketsUtils.findPrevBracketInToken(prevModeBrackets.reversedRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n\n\t\t\t\t// check that we didn't hit a bracket too far away from position\n\t\t\t\tif (foundBracket && foundBracket.startColumn <= position.column && position.column <= foundBracket.endColumn) {\n\t\t\t\t\tlet foundBracketText = lineText.substring(foundBracket.startColumn - 1, foundBracket.endColumn - 1);\n\t\t\t\t\tfoundBracketText = foundBracketText.toLowerCase();\n\n\t\t\t\t\tlet r = this._matchFoundBracket(foundBracket, prevModeBrackets.textIsBracket[foundBracketText], prevModeBrackets.textIsOpenBracket[foundBracketText]);\n\n\t\t\t\t\t// check that we can actually match this bracket\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate _matchFoundBracket(foundBracket: Range, data: RichEditBracket, isOpen: boolean): [Range, Range] {\n\t\tif (isOpen) {\n\t\t\tlet matched = this._findMatchingBracketDown(data, foundBracket.getEndPosition());\n\t\t\tif (matched) {\n\t\t\t\treturn [foundBracket, matched];\n\t\t\t}\n\t\t} else {\n\t\t\tlet matched = this._findMatchingBracketUp(data, foundBracket.getStartPosition());\n\t\t\tif (matched) {\n\t\t\t\treturn [foundBracket, matched];\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate _findMatchingBracketUp(bracket: RichEditBracket, position: Position): Range {\n\t\t// console.log('_findMatchingBracketUp: ', 'bracket: ', JSON.stringify(bracket), 'startPosition: ', String(position));\n\n\t\tconst languageId = bracket.languageIdentifier.id;\n\t\tconst reversedBracketRegex = bracket.reversedRegex;\n\t\tlet count = -1;\n\n\t\tfor (let lineNumber = position.lineNumber; lineNumber >= 1; lineNumber--) {\n\t\t\tconst lineTokens = this._getLineTokens(lineNumber);\n\t\t\tconst lineText = this._lines[lineNumber - 1].text;\n\n\t\t\tlet currentToken: LineToken;\n\t\t\tlet searchStopOffset: number;\n\t\t\tif (lineNumber === position.lineNumber) {\n\t\t\t\tcurrentToken = lineTokens.findTokenAtOffset(position.column - 1);\n\t\t\t\tsearchStopOffset = position.column - 1;\n\t\t\t} else {\n\t\t\t\tcurrentToken = lineTokens.lastToken();\n\t\t\t\tif (currentToken) {\n\t\t\t\t\tsearchStopOffset = currentToken.endOffset;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (currentToken) {\n\t\t\t\tif (currentToken.languageId === languageId && !ignoreBracketsInToken(currentToken.tokenType)) {\n\n\t\t\t\t\twhile (true) {\n\t\t\t\t\t\tlet r = BracketsUtils.findPrevBracketInToken(reversedBracketRegex, lineNumber, lineText, currentToken.startOffset, searchStopOffset);\n\t\t\t\t\t\tif (!r) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet hitText = lineText.substring(r.startColumn - 1, r.endColumn - 1);\n\t\t\t\t\t\thitText = hitText.toLowerCase();\n\n\t\t\t\t\t\tif (hitText === bracket.open) {\n\t\t\t\t\t\t\tcount++;\n\t\t\t\t\t\t} else if (hitText === bracket.close) {\n\t\t\t\t\t\t\tcount--;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (count === 0) {\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsearchStopOffset = r.startColumn - 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcurrentToken = currentToken.prev();\n\t\t\t\tif (currentToken) {\n\t\t\t\t\tsearchStopOffset = currentToken.endOffset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate _findMatchingBracketDown(bracket: RichEditBracket, position: Position): Range {\n\t\t// console.log('_findMatchingBracketDown: ', 'bracket: ', JSON.stringify(bracket), 'startPosition: ', String(position));\n\n\t\tconst languageId = bracket.languageIdentifier.id;\n\t\tconst bracketRegex = bracket.forwardRegex;\n\t\tlet count = 1;\n\n\t\tfor (let lineNumber = position.lineNumber, lineCount = this.getLineCount(); lineNumber <= lineCount; lineNumber++) {\n\t\t\tconst lineTokens = this._getLineTokens(lineNumber);\n\t\t\tconst lineText = this._lines[lineNumber - 1].text;\n\n\t\t\tlet currentToken: LineToken;\n\t\t\tlet searchStartOffset: number;\n\t\t\tif (lineNumber === position.lineNumber) {\n\t\t\t\tcurrentToken = lineTokens.findTokenAtOffset(position.column - 1);\n\t\t\t\tsearchStartOffset = position.column - 1;\n\t\t\t} else {\n\t\t\t\tcurrentToken = lineTokens.firstToken();\n\t\t\t\tif (currentToken) {\n\t\t\t\t\tsearchStartOffset = currentToken.startOffset;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (currentToken) {\n\t\t\t\tif (currentToken.languageId === languageId && !ignoreBracketsInToken(currentToken.tokenType)) {\n\t\t\t\t\twhile (true) {\n\t\t\t\t\t\tlet r = BracketsUtils.findNextBracketInToken(bracketRegex, lineNumber, lineText, searchStartOffset, currentToken.endOffset);\n\t\t\t\t\t\tif (!r) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet hitText = lineText.substring(r.startColumn - 1, r.endColumn - 1);\n\t\t\t\t\t\thitText = hitText.toLowerCase();\n\n\t\t\t\t\t\tif (hitText === bracket.open) {\n\t\t\t\t\t\t\tcount++;\n\t\t\t\t\t\t} else if (hitText === bracket.close) {\n\t\t\t\t\t\t\tcount--;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (count === 0) {\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsearchStartOffset = r.endColumn - 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcurrentToken = currentToken.next();\n\t\t\t\tif (currentToken) {\n\t\t\t\t\tsearchStartOffset = currentToken.startOffset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tpublic findPrevBracket(_position: IPosition): editorCommon.IFoundBracket {\n\t\tconst position = this.validatePosition(_position);\n\n\t\tlet languageId: LanguageId = -1;\n\t\tlet modeBrackets: RichEditBrackets = null;\n\t\tfor (let lineNumber = position.lineNumber; lineNumber >= 1; lineNumber--) {\n\t\t\tconst lineTokens = this._getLineTokens(lineNumber);\n\t\t\tconst lineText = this._lines[lineNumber - 1].text;\n\n\t\t\tlet currentToken: LineToken;\n\t\t\tlet searchStopOffset: number;\n\t\t\tif (lineNumber === position.lineNumber) {\n\t\t\t\tcurrentToken = lineTokens.findTokenAtOffset(position.column - 1);\n\t\t\t\tsearchStopOffset = position.column - 1;\n\t\t\t} else {\n\t\t\t\tcurrentToken = lineTokens.lastToken();\n\t\t\t\tif (currentToken) {\n\t\t\t\t\tsearchStopOffset = currentToken.endOffset;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (currentToken) {\n\t\t\t\tif (languageId !== currentToken.languageId) {\n\t\t\t\t\tlanguageId = currentToken.languageId;\n\t\t\t\t\tmodeBrackets = LanguageConfigurationRegistry.getBracketsSupport(languageId);\n\t\t\t\t}\n\t\t\t\tif (modeBrackets && !ignoreBracketsInToken(currentToken.tokenType)) {\n\t\t\t\t\tlet r = BracketsUtils.findPrevBracketInToken(modeBrackets.reversedRegex, lineNumber, lineText, currentToken.startOffset, searchStopOffset);\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn this._toFoundBracket(modeBrackets, r);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcurrentToken = currentToken.prev();\n\t\t\t\tif (currentToken) {\n\t\t\t\t\tsearchStopOffset = currentToken.endOffset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tpublic findNextBracket(_position: IPosition): editorCommon.IFoundBracket {\n\t\tconst position = this.validatePosition(_position);\n\n\t\tlet languageId: LanguageId = -1;\n\t\tlet modeBrackets: RichEditBrackets = null;\n\t\tfor (let lineNumber = position.lineNumber, lineCount = this.getLineCount(); lineNumber <= lineCount; lineNumber++) {\n\t\t\tconst lineTokens = this._getLineTokens(lineNumber);\n\t\t\tconst lineText = this._lines[lineNumber - 1].text;\n\n\t\t\tlet currentToken: LineToken;\n\t\t\tlet searchStartOffset: number;\n\t\t\tif (lineNumber === position.lineNumber) {\n\t\t\t\tcurrentToken = lineTokens.findTokenAtOffset(position.column - 1);\n\t\t\t\tsearchStartOffset = position.column - 1;\n\t\t\t} else {\n\t\t\t\tcurrentToken = lineTokens.firstToken();\n\t\t\t\tif (currentToken) {\n\t\t\t\t\tsearchStartOffset = currentToken.startOffset;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (currentToken) {\n\t\t\t\tif (languageId !== currentToken.languageId) {\n\t\t\t\t\tlanguageId = currentToken.languageId;\n\t\t\t\t\tmodeBrackets = LanguageConfigurationRegistry.getBracketsSupport(languageId);\n\t\t\t\t}\n\t\t\t\tif (modeBrackets && !ignoreBracketsInToken(currentToken.tokenType)) {\n\t\t\t\t\tlet r = BracketsUtils.findNextBracketInToken(modeBrackets.forwardRegex, lineNumber, lineText, searchStartOffset, currentToken.endOffset);\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn this._toFoundBracket(modeBrackets, r);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcurrentToken = currentToken.next();\n\t\t\t\tif (currentToken) {\n\t\t\t\t\tsearchStartOffset = currentToken.startOffset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate _toFoundBracket(modeBrackets: RichEditBrackets, r: Range): editorCommon.IFoundBracket {\n\t\tif (!r) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet text = this.getValueInRange(r);\n\t\ttext = text.toLowerCase();\n\n\t\tlet data = modeBrackets.textIsBracket[text];\n\t\tif (!data) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\trange: r,\n\t\t\topen: data.open,\n\t\t\tclose: data.close,\n\t\t\tisOpen: modeBrackets.textIsOpenBracket[text]\n\t\t};\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { IdGenerator } from 'vs/base/common/idGenerator';\nimport { Position } from 'vs/editor/common/core/position';\nimport { ITextModelWithMarkers, ITextModelCreationOptions } from 'vs/editor/common/editorCommon';\nimport { LineMarker } from 'vs/editor/common/model/modelLine';\nimport { TextModelWithTokens } from 'vs/editor/common/model/textModelWithTokens';\nimport { LanguageIdentifier } from 'vs/editor/common/modes';\nimport { ITextSource, IRawTextSource } from 'vs/editor/common/model/textSource';\n\nexport interface IMarkerIdToMarkerMap {\n\t[key: string]: LineMarker;\n}\n\nexport interface INewMarker {\n\tinternalDecorationId: number;\n\tposition: Position;\n\tstickToPreviousCharacter: boolean;\n}\n\nvar _INSTANCE_COUNT = 0;\n\nexport class TextModelWithMarkers extends TextModelWithTokens implements ITextModelWithMarkers {\n\n\tprivate _markerIdGenerator: IdGenerator;\n\tprotected _markerIdToMarker: IMarkerIdToMarkerMap;\n\n\tconstructor(rawTextSource: IRawTextSource, creationOptions: ITextModelCreationOptions, languageIdentifier: LanguageIdentifier) {\n\t\tsuper(rawTextSource, creationOptions, languageIdentifier);\n\t\tthis._markerIdGenerator = new IdGenerator((++_INSTANCE_COUNT) + ';');\n\t\tthis._markerIdToMarker = Object.create(null);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._markerIdToMarker = null;\n\t\tsuper.dispose();\n\t}\n\n\tprotected _resetValue(newValue: ITextSource): void {\n\t\tsuper._resetValue(newValue);\n\n\t\t// Destroy all my markers\n\t\tthis._markerIdToMarker = Object.create(null);\n\t}\n\n\t_addMarker(internalDecorationId: number, lineNumber: number, column: number, stickToPreviousCharacter: boolean): string {\n\t\tvar pos = this.validatePosition(new Position(lineNumber, column));\n\n\t\tvar marker = new LineMarker(this._markerIdGenerator.nextId(), internalDecorationId, pos, stickToPreviousCharacter);\n\t\tthis._markerIdToMarker[marker.id] = marker;\n\n\t\tthis._lines[pos.lineNumber - 1].addMarker(marker);\n\n\t\treturn marker.id;\n\t}\n\n\tprotected _addMarkers(newMarkers: INewMarker[]): LineMarker[] {\n\t\tif (newMarkers.length === 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\tlet markers: LineMarker[] = [];\n\t\tfor (let i = 0, len = newMarkers.length; i < len; i++) {\n\t\t\tlet newMarker = newMarkers[i];\n\n\t\t\tlet marker = new LineMarker(this._markerIdGenerator.nextId(), newMarker.internalDecorationId, newMarker.position, newMarker.stickToPreviousCharacter);\n\t\t\tthis._markerIdToMarker[marker.id] = marker;\n\n\t\t\tmarkers[i] = marker;\n\t\t}\n\n\t\tlet sortedMarkers = markers.slice(0);\n\t\tsortedMarkers.sort((a, b) => {\n\t\t\treturn a.position.lineNumber - b.position.lineNumber;\n\t\t});\n\n\t\tlet currentLineNumber = 0;\n\t\tlet currentMarkers: LineMarker[] = [], currentMarkersLen = 0;\n\t\tfor (let i = 0, len = sortedMarkers.length; i < len; i++) {\n\t\t\tlet marker = sortedMarkers[i];\n\n\t\t\tif (marker.position.lineNumber !== currentLineNumber) {\n\t\t\t\tif (currentLineNumber !== 0) {\n\t\t\t\t\tthis._lines[currentLineNumber - 1].addMarkers(currentMarkers);\n\t\t\t\t}\n\t\t\t\tcurrentLineNumber = marker.position.lineNumber;\n\t\t\t\tcurrentMarkers.length = 0;\n\t\t\t\tcurrentMarkersLen = 0;\n\t\t\t}\n\n\t\t\tcurrentMarkers[currentMarkersLen++] = marker;\n\t\t}\n\t\tthis._lines[currentLineNumber - 1].addMarkers(currentMarkers);\n\n\t\treturn markers;\n\t}\n\n\t_changeMarker(id: string, lineNumber: number, column: number): void {\n\t\tlet marker = this._markerIdToMarker[id];\n\t\tif (!marker) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet newPos = this.validatePosition(new Position(lineNumber, column));\n\n\t\tif (newPos.lineNumber !== marker.position.lineNumber) {\n\t\t\t// Move marker between lines\n\t\t\tthis._lines[marker.position.lineNumber - 1].removeMarker(marker);\n\t\t\tthis._lines[newPos.lineNumber - 1].addMarker(marker);\n\t\t}\n\n\t\tmarker.setPosition(newPos);\n\t}\n\n\t_changeMarkerStickiness(id: string, newStickToPreviousCharacter: boolean): void {\n\t\tlet marker = this._markerIdToMarker[id];\n\t\tif (!marker) {\n\t\t\treturn;\n\t\t}\n\n\t\tmarker.stickToPreviousCharacter = newStickToPreviousCharacter;\n\t}\n\n\t_getMarker(id: string): Position {\n\t\tlet marker = this._markerIdToMarker[id];\n\t\tif (!marker) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn marker.position;\n\t}\n\n\t_getMarkersCount(): number {\n\t\treturn Object.keys(this._markerIdToMarker).length;\n\t}\n\n\t_removeMarker(id: string): void {\n\t\tlet marker = this._markerIdToMarker[id];\n\t\tif (!marker) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._lines[marker.position.lineNumber - 1].removeMarker(marker);\n\t\tdelete this._markerIdToMarker[id];\n\t}\n\n\tprotected _removeMarkers(markers: LineMarker[]): void {\n\t\tmarkers.sort((a, b) => {\n\t\t\treturn a.position.lineNumber - b.position.lineNumber;\n\t\t});\n\n\t\tlet currentLineNumber = 0;\n\t\tlet currentMarkers: { [markerId: string]: boolean; } = null;\n\t\tfor (let i = 0, len = markers.length; i < len; i++) {\n\t\t\tlet marker = markers[i];\n\t\t\tdelete this._markerIdToMarker[marker.id];\n\n\t\t\tif (marker.position.lineNumber !== currentLineNumber) {\n\t\t\t\tif (currentLineNumber !== 0) {\n\t\t\t\t\tthis._lines[currentLineNumber - 1].removeMarkers(currentMarkers);\n\t\t\t\t}\n\t\t\t\tcurrentLineNumber = marker.position.lineNumber;\n\t\t\t\tcurrentMarkers = Object.create(null);\n\t\t\t}\n\n\t\t\tcurrentMarkers[marker.id] = true;\n\t\t}\n\t\tthis._lines[currentLineNumber - 1].removeMarkers(currentMarkers);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { MarkedString, markedStringsEquals } from 'vs/base/common/htmlContent';\nimport * as strings from 'vs/base/common/strings';\nimport { CharCode } from 'vs/base/common/charCode';\nimport { Range, IRange } from 'vs/editor/common/core/range';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { MarkersTracker, LineMarker } from 'vs/editor/common/model/modelLine';\nimport { Position } from 'vs/editor/common/core/position';\nimport { INewMarker, TextModelWithMarkers } from 'vs/editor/common/model/textModelWithMarkers';\nimport { LanguageIdentifier } from 'vs/editor/common/modes';\nimport { ITextSource, IRawTextSource } from 'vs/editor/common/model/textSource';\nimport * as textModelEvents from 'vs/editor/common/model/textModelEvents';\nimport { ThemeColor } from 'vs/platform/theme/common/themeService';\n\nexport const ClassName = {\n\tEditorWarningDecoration: 'greensquiggly',\n\tEditorErrorDecoration: 'redsquiggly'\n};\n\nclass DecorationsTracker {\n\n\tpublic addedDecorations: string[];\n\tpublic addedDecorationsLen: number;\n\tpublic changedDecorations: string[];\n\tpublic changedDecorationsLen: number;\n\tpublic removedDecorations: string[];\n\tpublic removedDecorationsLen: number;\n\n\tconstructor() {\n\t\tthis.addedDecorations = [];\n\t\tthis.addedDecorationsLen = 0;\n\t\tthis.changedDecorations = [];\n\t\tthis.changedDecorationsLen = 0;\n\t\tthis.removedDecorations = [];\n\t\tthis.removedDecorationsLen = 0;\n\t}\n\n\t// --- Build decoration events\n\n\tpublic addNewDecoration(id: string): void {\n\t\tthis.addedDecorations[this.addedDecorationsLen++] = id;\n\t}\n\n\tpublic addRemovedDecoration(id: string): void {\n\t\tthis.removedDecorations[this.removedDecorationsLen++] = id;\n\t}\n\n\tpublic addMovedDecoration(id: string): void {\n\t\tthis.changedDecorations[this.changedDecorationsLen++] = id;\n\t}\n\n\tpublic addUpdatedDecoration(id: string): void {\n\t\tthis.changedDecorations[this.changedDecorationsLen++] = id;\n\t}\n}\n\nexport class InternalDecoration implements editorCommon.IModelDecoration {\n\t_internalDecorationBrand: void;\n\n\tpublic readonly id: string;\n\tpublic readonly internalId: number;\n\tpublic readonly ownerId: number;\n\tpublic readonly startMarker: LineMarker;\n\tpublic readonly endMarker: LineMarker;\n\tpublic options: ModelDecorationOptions;\n\tpublic isForValidation: boolean;\n\tpublic range: Range;\n\n\tconstructor(id: string, internalId: number, ownerId: number, range: Range, startMarker: LineMarker, endMarker: LineMarker, options: ModelDecorationOptions) {\n\t\tthis.id = id;\n\t\tthis.internalId = internalId;\n\t\tthis.ownerId = ownerId;\n\t\tthis.range = range;\n\t\tthis.startMarker = startMarker;\n\t\tthis.endMarker = endMarker;\n\t\tthis.setOptions(options);\n\t}\n\n\tpublic setOptions(options: ModelDecorationOptions) {\n\t\tthis.options = options;\n\t\tthis.isForValidation = (\n\t\t\tthis.options.className === ClassName.EditorErrorDecoration\n\t\t\t|| this.options.className === ClassName.EditorWarningDecoration\n\t\t);\n\t}\n\n\tpublic setRange(multiLineDecorationsMap: { [key: string]: InternalDecoration; }, range: Range): void {\n\t\tif (this.range.equalsRange(range)) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet rangeWasMultiLine = (this.range.startLineNumber !== this.range.endLineNumber);\n\t\tthis.range = range;\n\t\tlet rangeIsMultiline = (this.range.startLineNumber !== this.range.endLineNumber);\n\n\t\tif (rangeWasMultiLine === rangeIsMultiline) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (rangeIsMultiline) {\n\t\t\tmultiLineDecorationsMap[this.id] = this;\n\t\t} else {\n\t\t\tdelete multiLineDecorationsMap[this.id];\n\t\t}\n\t}\n}\n\nlet _INSTANCE_COUNT = 0;\n/**\n * Produces 'a'-'z', followed by 'A'-'Z'... followed by 'a'-'z', etc.\n */\nfunction nextInstanceId(): string {\n\tconst LETTERS_CNT = (CharCode.Z - CharCode.A + 1);\n\n\tlet result = _INSTANCE_COUNT++;\n\tresult = result % (2 * LETTERS_CNT);\n\n\tif (result < LETTERS_CNT) {\n\t\treturn String.fromCharCode(CharCode.a + result);\n\t}\n\n\treturn String.fromCharCode(CharCode.A + result - LETTERS_CNT);\n}\n\nexport class TextModelWithDecorations extends TextModelWithMarkers implements editorCommon.ITextModelWithDecorations {\n\n\t/**\n\t * Used to workaround broken clients that might attempt using a decoration id generated by a different model.\n\t * It is not globally unique in order to limit it to one character.\n\t */\n\tprivate readonly _instanceId: string;\n\tprivate _lastDecorationId: number;\n\n\tprivate _currentDecorationsTracker: DecorationsTracker;\n\tprivate _currentDecorationsTrackerCnt: number;\n\n\tprivate _currentMarkersTracker: MarkersTracker;\n\tprivate _currentMarkersTrackerCnt: number;\n\n\tprivate _decorations: { [decorationId: string]: InternalDecoration; };\n\tprivate _internalDecorations: { [internalDecorationId: number]: InternalDecoration; };\n\tprivate _multiLineDecorationsMap: { [key: string]: InternalDecoration; };\n\n\tconstructor(rawTextSource: IRawTextSource, creationOptions: editorCommon.ITextModelCreationOptions, languageIdentifier: LanguageIdentifier) {\n\t\tsuper(rawTextSource, creationOptions, languageIdentifier);\n\n\t\tthis._instanceId = nextInstanceId();\n\t\tthis._lastDecorationId = 0;\n\n\t\t// Initialize decorations\n\t\tthis._currentDecorationsTracker = null;\n\t\tthis._currentDecorationsTrackerCnt = 0;\n\n\t\tthis._currentMarkersTracker = null;\n\t\tthis._currentMarkersTrackerCnt = 0;\n\n\t\tthis._decorations = Object.create(null);\n\t\tthis._internalDecorations = Object.create(null);\n\t\tthis._multiLineDecorationsMap = Object.create(null);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._decorations = null;\n\t\tthis._internalDecorations = null;\n\t\tthis._multiLineDecorationsMap = null;\n\t\tsuper.dispose();\n\t}\n\n\tprotected _resetValue(newValue: ITextSource): void {\n\t\tsuper._resetValue(newValue);\n\n\t\t// Destroy all my decorations\n\t\tthis._decorations = Object.create(null);\n\t\tthis._internalDecorations = Object.create(null);\n\t\tthis._multiLineDecorationsMap = Object.create(null);\n\t}\n\n\tprivate static _shouldStartMarkerSticksToPreviousCharacter(stickiness: editorCommon.TrackedRangeStickiness): boolean {\n\t\tif (stickiness === editorCommon.TrackedRangeStickiness.AlwaysGrowsWhenTypingAtEdges || stickiness === editorCommon.TrackedRangeStickiness.GrowsOnlyWhenTypingBefore) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate static _shouldEndMarkerSticksToPreviousCharacter(stickiness: editorCommon.TrackedRangeStickiness): boolean {\n\t\tif (stickiness === editorCommon.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges || stickiness === editorCommon.TrackedRangeStickiness.GrowsOnlyWhenTypingBefore) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t_getTrackedRangesCount(): number {\n\t\treturn Object.keys(this._decorations).length;\n\t}\n\n\t// --- END TrackedRanges\n\n\tpublic changeDecorations(callback: (changeAccessor: editorCommon.IModelDecorationsChangeAccessor) => T, ownerId: number = 0): T {\n\t\tthis._assertNotDisposed();\n\n\t\ttry {\n\t\t\tthis._eventEmitter.beginDeferredEmit();\n\t\t\tlet decorationsTracker = this._acquireDecorationsTracker();\n\t\t\treturn this._changeDecorations(decorationsTracker, ownerId, callback);\n\t\t} finally {\n\t\t\tthis._releaseDecorationsTracker();\n\t\t\tthis._eventEmitter.endDeferredEmit();\n\t\t}\n\t}\n\n\tprivate _changeDecorations(decorationsTracker: DecorationsTracker, ownerId: number, callback: (changeAccessor: editorCommon.IModelDecorationsChangeAccessor) => T): T {\n\t\tlet changeAccessor: editorCommon.IModelDecorationsChangeAccessor = {\n\t\t\taddDecoration: (range: IRange, options: editorCommon.IModelDecorationOptions): string => {\n\t\t\t\treturn this._addDecorationImpl(decorationsTracker, ownerId, this.validateRange(range), _normalizeOptions(options));\n\t\t\t},\n\t\t\tchangeDecoration: (id: string, newRange: IRange): void => {\n\t\t\t\tthis._changeDecorationImpl(decorationsTracker, id, this.validateRange(newRange));\n\t\t\t},\n\t\t\tchangeDecorationOptions: (id: string, options: editorCommon.IModelDecorationOptions) => {\n\t\t\t\tthis._changeDecorationOptionsImpl(decorationsTracker, id, _normalizeOptions(options));\n\t\t\t},\n\t\t\tremoveDecoration: (id: string): void => {\n\t\t\t\tthis._removeDecorationImpl(decorationsTracker, id);\n\t\t\t},\n\t\t\tdeltaDecorations: (oldDecorations: string[], newDecorations: editorCommon.IModelDeltaDecoration[]): string[] => {\n\t\t\t\treturn this._deltaDecorationsImpl(decorationsTracker, ownerId, oldDecorations, this._normalizeDeltaDecorations(newDecorations));\n\t\t\t}\n\t\t};\n\t\tlet result: T = null;\n\t\ttry {\n\t\t\tresult = callback(changeAccessor);\n\t\t} catch (e) {\n\t\t\tonUnexpectedError(e);\n\t\t}\n\t\t// Invalidate change accessor\n\t\tchangeAccessor.addDecoration = null;\n\t\tchangeAccessor.changeDecoration = null;\n\t\tchangeAccessor.removeDecoration = null;\n\t\tchangeAccessor.deltaDecorations = null;\n\t\treturn result;\n\t}\n\n\tpublic deltaDecorations(oldDecorations: string[], newDecorations: editorCommon.IModelDeltaDecoration[], ownerId: number = 0): string[] {\n\t\tthis._assertNotDisposed();\n\t\tif (!oldDecorations) {\n\t\t\toldDecorations = [];\n\t\t}\n\t\treturn this.changeDecorations((changeAccessor) => {\n\t\t\treturn changeAccessor.deltaDecorations(oldDecorations, newDecorations);\n\t\t}, ownerId);\n\t}\n\n\tpublic removeAllDecorationsWithOwnerId(ownerId: number): void {\n\t\tlet toRemove: string[] = [];\n\n\t\tfor (let decorationId in this._decorations) {\n\t\t\t// No `hasOwnProperty` call due to using Object.create(null)\n\n\t\t\tlet decoration = this._decorations[decorationId];\n\n\t\t\tif (decoration.ownerId === ownerId) {\n\t\t\t\ttoRemove.push(decoration.id);\n\t\t\t}\n\t\t}\n\n\t\tthis._removeDecorationsImpl(null, toRemove);\n\t}\n\n\tpublic getDecorationOptions(decorationId: string): editorCommon.IModelDecorationOptions {\n\t\tlet decoration = this._decorations[decorationId];\n\t\tif (!decoration) {\n\t\t\treturn null;\n\t\t}\n\t\treturn decoration.options;\n\t}\n\n\tpublic getDecorationRange(decorationId: string): Range {\n\t\tlet decoration = this._decorations[decorationId];\n\t\tif (!decoration) {\n\t\t\treturn null;\n\t\t}\n\t\treturn decoration.range;\n\t}\n\n\tpublic getLineDecorations(lineNumber: number, ownerId: number = 0, filterOutValidation: boolean = false): editorCommon.IModelDecoration[] {\n\t\tif (lineNumber < 1 || lineNumber > this.getLineCount()) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn this.getLinesDecorations(lineNumber, lineNumber, ownerId, filterOutValidation);\n\t}\n\n\t/**\n\t * Fetch only multi-line decorations that intersect with the given line number range\n\t */\n\tprivate _getMultiLineDecorations(filterRange: Range, filterOwnerId: number, filterOutValidation: boolean): InternalDecoration[] {\n\t\tconst filterStartLineNumber = filterRange.startLineNumber;\n\t\tconst filterStartColumn = filterRange.startColumn;\n\t\tconst filterEndLineNumber = filterRange.endLineNumber;\n\t\tconst filterEndColumn = filterRange.endColumn;\n\n\t\tlet result: InternalDecoration[] = [];\n\n\t\tfor (let decorationId in this._multiLineDecorationsMap) {\n\t\t\t// No `hasOwnProperty` call due to using Object.create(null)\n\t\t\tlet decoration = this._multiLineDecorationsMap[decorationId];\n\n\t\t\tif (filterOwnerId && decoration.ownerId && decoration.ownerId !== filterOwnerId) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (filterOutValidation && decoration.isForValidation) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet range = decoration.range;\n\n\t\t\tif (range.startLineNumber > filterEndLineNumber) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (range.startLineNumber === filterEndLineNumber && range.startColumn > filterEndColumn) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (range.endLineNumber < filterStartLineNumber) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (range.endLineNumber === filterStartLineNumber && range.endColumn < filterStartColumn) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tresult.push(decoration);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate _getDecorationsInRange(filterRange: Range, filterOwnerId: number, filterOutValidation: boolean): InternalDecoration[] {\n\t\tconst filterStartLineNumber = filterRange.startLineNumber;\n\t\tconst filterStartColumn = filterRange.startColumn;\n\t\tconst filterEndLineNumber = filterRange.endLineNumber;\n\t\tconst filterEndColumn = filterRange.endColumn;\n\n\t\tlet result = this._getMultiLineDecorations(filterRange, filterOwnerId, filterOutValidation);\n\t\tlet resultMap: { [decorationId: string]: boolean; } = {};\n\n\t\tfor (let i = 0, len = result.length; i < len; i++) {\n\t\t\tresultMap[result[i].id] = true;\n\t\t}\n\n\t\tfor (let lineNumber = filterStartLineNumber; lineNumber <= filterEndLineNumber; lineNumber++) {\n\t\t\tlet lineMarkers = this._lines[lineNumber - 1].getMarkers();\n\t\t\tif (lineMarkers === null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (let i = 0, len = lineMarkers.length; i < len; i++) {\n\t\t\t\tlet lineMarker = lineMarkers[i];\n\t\t\t\tlet internalDecorationId = lineMarker.internalDecorationId;\n\n\t\t\t\tif (internalDecorationId === 0) {\n\t\t\t\t\t// marker does not belong to any decoration\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet decoration = this._internalDecorations[internalDecorationId];\n\n\t\t\t\tif (resultMap.hasOwnProperty(decoration.id)) {\n\t\t\t\t\t// decoration already in result\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (filterOwnerId && decoration.ownerId && decoration.ownerId !== filterOwnerId) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (filterOutValidation && decoration.isForValidation) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet range = decoration.range;\n\n\t\t\t\tif (range.startLineNumber > filterEndLineNumber) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (range.startLineNumber === filterEndLineNumber && range.startColumn > filterEndColumn) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (range.endLineNumber < filterStartLineNumber) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (range.endLineNumber === filterStartLineNumber && range.endColumn < filterStartColumn) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tresult.push(decoration);\n\t\t\t\tresultMap[decoration.id] = true;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic getLinesDecorations(_startLineNumber: number, _endLineNumber: number, ownerId: number = 0, filterOutValidation: boolean = false): editorCommon.IModelDecoration[] {\n\t\tlet lineCount = this.getLineCount();\n\t\tlet startLineNumber = Math.min(lineCount, Math.max(1, _startLineNumber));\n\t\tlet endLineNumber = Math.min(lineCount, Math.max(1, _endLineNumber));\n\t\tlet endColumn = this.getLineMaxColumn(endLineNumber);\n\t\treturn this._getDecorationsInRange(new Range(startLineNumber, 1, endLineNumber, endColumn), ownerId, filterOutValidation);\n\t}\n\n\tpublic getDecorationsInRange(range: IRange, ownerId?: number, filterOutValidation?: boolean): editorCommon.IModelDecoration[] {\n\t\tlet validatedRange = this.validateRange(range);\n\t\treturn this._getDecorationsInRange(validatedRange, ownerId, filterOutValidation);\n\t}\n\n\tpublic getAllDecorations(ownerId: number = 0, filterOutValidation: boolean = false): editorCommon.IModelDecoration[] {\n\t\tlet result: InternalDecoration[] = [];\n\n\t\tfor (let decorationId in this._decorations) {\n\t\t\t// No `hasOwnProperty` call due to using Object.create(null)\n\t\t\tlet decoration = this._decorations[decorationId];\n\n\t\t\tif (ownerId && decoration.ownerId && decoration.ownerId !== ownerId) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (filterOutValidation && decoration.isForValidation) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tresult.push(decoration);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprotected _acquireMarkersTracker(): MarkersTracker {\n\t\tif (this._currentMarkersTrackerCnt === 0) {\n\t\t\tthis._currentMarkersTracker = new MarkersTracker();\n\t\t}\n\t\tthis._currentMarkersTrackerCnt++;\n\t\treturn this._currentMarkersTracker;\n\t}\n\n\tprotected _releaseMarkersTracker(): void {\n\t\tthis._currentMarkersTrackerCnt--;\n\t\tif (this._currentMarkersTrackerCnt === 0) {\n\t\t\tlet markersTracker = this._currentMarkersTracker;\n\t\t\tthis._currentMarkersTracker = null;\n\t\t\tthis._handleTrackedMarkers(markersTracker);\n\t\t}\n\t}\n\n\t/**\n\t * Handle changed markers (i.e. update decorations ranges and return the changed decorations, unique and sorted by id)\n\t */\n\tprivate _handleTrackedMarkers(markersTracker: MarkersTracker): void {\n\t\tlet changedInternalDecorationIds = markersTracker.getDecorationIds();\n\t\tif (changedInternalDecorationIds.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tchangedInternalDecorationIds.sort();\n\n\t\tlet uniqueChangedDecorations: string[] = [], uniqueChangedDecorationsLen = 0;\n\t\tlet previousInternalDecorationId: number = 0;\n\t\tfor (let i = 0, len = changedInternalDecorationIds.length; i < len; i++) {\n\t\t\tlet internalDecorationId = changedInternalDecorationIds[i];\n\t\t\tif (internalDecorationId === previousInternalDecorationId) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tpreviousInternalDecorationId = internalDecorationId;\n\n\t\t\tlet decoration = this._internalDecorations[internalDecorationId];\n\t\t\tif (!decoration) {\n\t\t\t\t// perhaps the decoration was removed in the meantime\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet startMarker = decoration.startMarker.position;\n\t\t\tlet endMarker = decoration.endMarker.position;\n\t\t\tlet range = TextModelWithDecorations._createRangeFromMarkers(startMarker, endMarker);\n\t\t\tdecoration.setRange(this._multiLineDecorationsMap, range);\n\n\t\t\tuniqueChangedDecorations[uniqueChangedDecorationsLen++] = decoration.id;\n\t\t}\n\n\t\tif (uniqueChangedDecorations.length > 0) {\n\t\t\tlet e: textModelEvents.IModelDecorationsChangedEvent = {\n\t\t\t\taddedDecorations: [],\n\t\t\t\tchangedDecorations: uniqueChangedDecorations,\n\t\t\t\tremovedDecorations: []\n\t\t\t};\n\t\t\tthis.emitModelDecorationsChangedEvent(e);\n\t\t}\n\t}\n\n\tprivate static _createRangeFromMarkers(startPosition: Position, endPosition: Position): Range {\n\t\tif (endPosition.isBefore(startPosition)) {\n\t\t\t// This tracked range has turned in on itself (end marker before start marker)\n\t\t\t// This can happen in extreme editing conditions where lots of text is removed and lots is added\n\n\t\t\t// Treat it as a collapsed range\n\t\t\treturn new Range(startPosition.lineNumber, startPosition.column, startPosition.lineNumber, startPosition.column);\n\t\t}\n\t\treturn new Range(startPosition.lineNumber, startPosition.column, endPosition.lineNumber, endPosition.column);\n\t}\n\n\tprivate _acquireDecorationsTracker(): DecorationsTracker {\n\t\tif (this._currentDecorationsTrackerCnt === 0) {\n\t\t\tthis._currentDecorationsTracker = new DecorationsTracker();\n\t\t}\n\t\tthis._currentDecorationsTrackerCnt++;\n\t\treturn this._currentDecorationsTracker;\n\t}\n\n\tprivate _releaseDecorationsTracker(): void {\n\t\tthis._currentDecorationsTrackerCnt--;\n\t\tif (this._currentDecorationsTrackerCnt === 0) {\n\t\t\tlet decorationsTracker = this._currentDecorationsTracker;\n\t\t\tthis._currentDecorationsTracker = null;\n\t\t\tthis._handleTrackedDecorations(decorationsTracker);\n\t\t}\n\t}\n\n\tprivate _handleTrackedDecorations(decorationsTracker: DecorationsTracker): void {\n\t\tif (\n\t\t\tdecorationsTracker.addedDecorationsLen === 0\n\t\t\t&& decorationsTracker.changedDecorationsLen === 0\n\t\t\t&& decorationsTracker.removedDecorationsLen === 0\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet e: textModelEvents.IModelDecorationsChangedEvent = {\n\t\t\taddedDecorations: decorationsTracker.addedDecorations,\n\t\t\tchangedDecorations: decorationsTracker.changedDecorations,\n\t\t\tremovedDecorations: decorationsTracker.removedDecorations\n\t\t};\n\t\tthis.emitModelDecorationsChangedEvent(e);\n\t}\n\n\tprivate emitModelDecorationsChangedEvent(e: textModelEvents.IModelDecorationsChangedEvent): void {\n\t\tif (!this._isDisposing) {\n\t\t\tthis._eventEmitter.emit(textModelEvents.TextModelEventType.ModelDecorationsChanged, e);\n\t\t}\n\t}\n\n\tprivate _normalizeDeltaDecorations(deltaDecorations: editorCommon.IModelDeltaDecoration[]): ModelDeltaDecoration[] {\n\t\tlet result: ModelDeltaDecoration[] = [];\n\t\tfor (let i = 0, len = deltaDecorations.length; i < len; i++) {\n\t\t\tlet deltaDecoration = deltaDecorations[i];\n\t\t\tresult.push(new ModelDeltaDecoration(i, this.validateRange(deltaDecoration.range), _normalizeOptions(deltaDecoration.options)));\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate _externalDecorationId(internalId: number): string {\n\t\treturn `${this._instanceId};${internalId}`;\n\t}\n\n\tprivate _addDecorationImpl(decorationsTracker: DecorationsTracker, ownerId: number, _range: Range, options: ModelDecorationOptions): string {\n\t\tlet range = this.validateRange(_range);\n\n\t\tlet internalDecorationId = (++this._lastDecorationId);\n\t\tlet decorationId = this._externalDecorationId(internalDecorationId);\n\n\t\tlet markers = this._addMarkers([\n\t\t\t{\n\t\t\t\tinternalDecorationId: internalDecorationId,\n\t\t\t\tposition: new Position(range.startLineNumber, range.startColumn),\n\t\t\t\tstickToPreviousCharacter: TextModelWithDecorations._shouldStartMarkerSticksToPreviousCharacter(options.stickiness)\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalDecorationId: internalDecorationId,\n\t\t\t\tposition: new Position(range.endLineNumber, range.endColumn),\n\t\t\t\tstickToPreviousCharacter: TextModelWithDecorations._shouldEndMarkerSticksToPreviousCharacter(options.stickiness)\n\t\t\t}\n\t\t]);\n\n\t\tlet decoration = new InternalDecoration(decorationId, internalDecorationId, ownerId, range, markers[0], markers[1], options);\n\t\tthis._decorations[decorationId] = decoration;\n\t\tthis._internalDecorations[internalDecorationId] = decoration;\n\t\tif (range.startLineNumber !== range.endLineNumber) {\n\t\t\tthis._multiLineDecorationsMap[decorationId] = decoration;\n\t\t}\n\n\t\tdecorationsTracker.addNewDecoration(decorationId);\n\n\t\treturn decorationId;\n\t}\n\n\tprivate _addDecorationsImpl(decorationsTracker: DecorationsTracker, ownerId: number, newDecorations: ModelDeltaDecoration[]): string[] {\n\t\tlet internalDecorationIds: number[] = [];\n\t\tlet decorationIds: string[] = [];\n\t\tlet newMarkers: INewMarker[] = [];\n\n\t\tfor (let i = 0, len = newDecorations.length; i < len; i++) {\n\t\t\tlet newDecoration = newDecorations[i];\n\t\t\tlet range = newDecoration.range;\n\t\t\tlet stickiness = newDecoration.options.stickiness;\n\n\t\t\tlet internalDecorationId = (++this._lastDecorationId);\n\t\t\tlet decorationId = this._externalDecorationId(internalDecorationId);\n\n\t\t\tinternalDecorationIds[i] = internalDecorationId;\n\t\t\tdecorationIds[i] = decorationId;\n\n\t\t\tnewMarkers[2 * i] = {\n\t\t\t\tinternalDecorationId: internalDecorationId,\n\t\t\t\tposition: new Position(range.startLineNumber, range.startColumn),\n\t\t\t\tstickToPreviousCharacter: TextModelWithDecorations._shouldStartMarkerSticksToPreviousCharacter(stickiness)\n\t\t\t};\n\n\t\t\tnewMarkers[2 * i + 1] = {\n\t\t\t\tinternalDecorationId: internalDecorationId,\n\t\t\t\tposition: new Position(range.endLineNumber, range.endColumn),\n\t\t\t\tstickToPreviousCharacter: TextModelWithDecorations._shouldEndMarkerSticksToPreviousCharacter(stickiness)\n\t\t\t};\n\t\t}\n\n\t\tlet markerIds = this._addMarkers(newMarkers);\n\n\t\tfor (let i = 0, len = newDecorations.length; i < len; i++) {\n\t\t\tlet newDecoration = newDecorations[i];\n\t\t\tlet range = newDecoration.range;\n\t\t\tlet internalDecorationId = internalDecorationIds[i];\n\t\t\tlet decorationId = decorationIds[i];\n\t\t\tlet startMarker = markerIds[2 * i];\n\t\t\tlet endMarker = markerIds[2 * i + 1];\n\n\t\t\tlet decoration = new InternalDecoration(decorationId, internalDecorationId, ownerId, range, startMarker, endMarker, newDecoration.options);\n\t\t\tthis._decorations[decorationId] = decoration;\n\t\t\tthis._internalDecorations[internalDecorationId] = decoration;\n\t\t\tif (range.startLineNumber !== range.endLineNumber) {\n\t\t\t\tthis._multiLineDecorationsMap[decorationId] = decoration;\n\t\t\t}\n\n\t\t\tdecorationsTracker.addNewDecoration(decorationId);\n\t\t}\n\n\t\treturn decorationIds;\n\t}\n\n\tprivate _changeDecorationImpl(decorationsTracker: DecorationsTracker, decorationId: string, newRange: Range): void {\n\t\tlet decoration = this._decorations[decorationId];\n\t\tif (!decoration) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet startMarker = decoration.startMarker;\n\t\tif (newRange.startLineNumber !== startMarker.position.lineNumber) {\n\t\t\t// move marker between lines\n\t\t\tthis._lines[startMarker.position.lineNumber - 1].removeMarker(startMarker);\n\t\t\tthis._lines[newRange.startLineNumber - 1].addMarker(startMarker);\n\t\t}\n\t\tstartMarker.setPosition(new Position(newRange.startLineNumber, newRange.startColumn));\n\n\t\tlet endMarker = decoration.endMarker;\n\t\tif (newRange.endLineNumber !== endMarker.position.lineNumber) {\n\t\t\t// move marker between lines\n\t\t\tthis._lines[endMarker.position.lineNumber - 1].removeMarker(endMarker);\n\t\t\tthis._lines[newRange.endLineNumber - 1].addMarker(endMarker);\n\t\t}\n\t\tendMarker.setPosition(new Position(newRange.endLineNumber, newRange.endColumn));\n\n\t\tdecoration.setRange(this._multiLineDecorationsMap, newRange);\n\n\t\tdecorationsTracker.addMovedDecoration(decorationId);\n\t}\n\n\tprivate _changeDecorationOptionsImpl(decorationsTracker: DecorationsTracker, decorationId: string, options: ModelDecorationOptions): void {\n\t\tlet decoration = this._decorations[decorationId];\n\t\tif (!decoration) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (decoration.options.stickiness !== options.stickiness) {\n\t\t\tdecoration.startMarker.stickToPreviousCharacter = TextModelWithDecorations._shouldStartMarkerSticksToPreviousCharacter(options.stickiness);\n\t\t\tdecoration.endMarker.stickToPreviousCharacter = TextModelWithDecorations._shouldEndMarkerSticksToPreviousCharacter(options.stickiness);\n\t\t}\n\n\t\tdecoration.setOptions(options);\n\n\t\tdecorationsTracker.addUpdatedDecoration(decorationId);\n\t}\n\n\tprivate _removeDecorationImpl(decorationsTracker: DecorationsTracker, decorationId: string): void {\n\t\tlet decoration = this._decorations[decorationId];\n\t\tif (!decoration) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._removeMarkers([decoration.startMarker, decoration.endMarker]);\n\n\t\tdelete this._multiLineDecorationsMap[decorationId];\n\t\tdelete this._decorations[decorationId];\n\t\tdelete this._internalDecorations[decoration.internalId];\n\n\t\tif (decorationsTracker) {\n\t\t\tdecorationsTracker.addRemovedDecoration(decorationId);\n\t\t}\n\t}\n\n\tprivate _removeDecorationsImpl(decorationsTracker: DecorationsTracker, decorationIds: string[]): void {\n\t\tlet removeMarkers: LineMarker[] = [], removeMarkersLen = 0;\n\n\t\tfor (let i = 0, len = decorationIds.length; i < len; i++) {\n\t\t\tlet decorationId = decorationIds[i];\n\t\t\tlet decoration = this._decorations[decorationId];\n\t\t\tif (!decoration) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (decorationsTracker) {\n\t\t\t\tdecorationsTracker.addRemovedDecoration(decorationId);\n\t\t\t}\n\n\t\t\tremoveMarkers[removeMarkersLen++] = decoration.startMarker;\n\t\t\tremoveMarkers[removeMarkersLen++] = decoration.endMarker;\n\t\t\tdelete this._multiLineDecorationsMap[decorationId];\n\t\t\tdelete this._decorations[decorationId];\n\t\t\tdelete this._internalDecorations[decoration.internalId];\n\t\t}\n\n\t\tif (removeMarkers.length > 0) {\n\t\t\tthis._removeMarkers(removeMarkers);\n\t\t}\n\t}\n\n\tprivate _resolveOldDecorations(oldDecorations: string[]): InternalDecoration[] {\n\t\tlet result: InternalDecoration[] = [];\n\t\tfor (let i = 0, len = oldDecorations.length; i < len; i++) {\n\t\t\tlet id = oldDecorations[i];\n\t\t\tlet decoration = this._decorations[id];\n\t\t\tif (!decoration) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tresult.push(decoration);\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate _deltaDecorationsImpl(decorationsTracker: DecorationsTracker, ownerId: number, oldDecorationsIds: string[], newDecorations: ModelDeltaDecoration[]): string[] {\n\n\t\tif (oldDecorationsIds.length === 0) {\n\t\t\t// Nothing to remove\n\t\t\treturn this._addDecorationsImpl(decorationsTracker, ownerId, newDecorations);\n\t\t}\n\n\t\tif (newDecorations.length === 0) {\n\t\t\t// Nothing to add\n\t\t\tthis._removeDecorationsImpl(decorationsTracker, oldDecorationsIds);\n\t\t\treturn [];\n\t\t}\n\n\t\tlet oldDecorations = this._resolveOldDecorations(oldDecorationsIds);\n\n\t\toldDecorations.sort((a, b) => Range.compareRangesUsingStarts(a.range, b.range));\n\t\tnewDecorations.sort((a, b) => Range.compareRangesUsingStarts(a.range, b.range));\n\n\t\tlet result: string[] = [],\n\t\t\toldDecorationsIndex = 0,\n\t\t\toldDecorationsLength = oldDecorations.length,\n\t\t\tnewDecorationsIndex = 0,\n\t\t\tnewDecorationsLength = newDecorations.length,\n\t\t\tdecorationsToAdd: ModelDeltaDecoration[] = [],\n\t\t\tdecorationsToRemove: string[] = [];\n\n\t\twhile (oldDecorationsIndex < oldDecorationsLength && newDecorationsIndex < newDecorationsLength) {\n\t\t\tlet oldDecoration = oldDecorations[oldDecorationsIndex];\n\t\t\tlet newDecoration = newDecorations[newDecorationsIndex];\n\t\t\tlet comparison = Range.compareRangesUsingStarts(oldDecoration.range, newDecoration.range);\n\n\t\t\tif (comparison < 0) {\n\t\t\t\t// `oldDecoration` is before `newDecoration` => remove `oldDecoration`\n\t\t\t\tdecorationsToRemove.push(oldDecoration.id);\n\t\t\t\toldDecorationsIndex++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (comparison > 0) {\n\t\t\t\t// `newDecoration` is before `oldDecoration` => add `newDecoration`\n\t\t\t\tdecorationsToAdd.push(newDecoration);\n\t\t\t\tnewDecorationsIndex++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// The ranges of `oldDecoration` and `newDecoration` are equal\n\n\t\t\tif (!oldDecoration.options.equals(newDecoration.options)) {\n\t\t\t\t// The options do not match => remove `oldDecoration`\n\t\t\t\tdecorationsToRemove.push(oldDecoration.id);\n\t\t\t\toldDecorationsIndex++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Bingo! We can reuse `oldDecoration` for `newDecoration`\n\t\t\tresult[newDecoration.index] = oldDecoration.id;\n\t\t\toldDecorationsIndex++;\n\t\t\tnewDecorationsIndex++;\n\t\t}\n\n\t\twhile (oldDecorationsIndex < oldDecorationsLength) {\n\t\t\t// No more new decorations => remove decoration at `oldDecorationsIndex`\n\t\t\tdecorationsToRemove.push(oldDecorations[oldDecorationsIndex].id);\n\t\t\toldDecorationsIndex++;\n\t\t}\n\n\t\twhile (newDecorationsIndex < newDecorationsLength) {\n\t\t\t// No more old decorations => add decoration at `newDecorationsIndex`\n\t\t\tdecorationsToAdd.push(newDecorations[newDecorationsIndex]);\n\t\t\tnewDecorationsIndex++;\n\t\t}\n\n\t\t// Remove `decorationsToRemove`\n\t\tif (decorationsToRemove.length > 0) {\n\t\t\tthis._removeDecorationsImpl(decorationsTracker, decorationsToRemove);\n\t\t}\n\n\t\t// Add `decorationsToAdd`\n\t\tif (decorationsToAdd.length > 0) {\n\t\t\tlet newIds = this._addDecorationsImpl(decorationsTracker, ownerId, decorationsToAdd);\n\t\t\tfor (let i = 0, len = decorationsToAdd.length; i < len; i++) {\n\t\t\t\tresult[decorationsToAdd[i].index] = newIds[i];\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n}\n\nfunction cleanClassName(className: string): string {\n\treturn className.replace(/[^a-z0-9\\-]/gi, ' ');\n}\n\nexport class ModelDecorationOverviewRulerOptions implements editorCommon.IModelDecorationOverviewRulerOptions {\n\treadonly color: string | ThemeColor;\n\treadonly darkColor: string | ThemeColor;\n\treadonly hcColor: string | ThemeColor;\n\treadonly position: editorCommon.OverviewRulerLane;\n\n\tconstructor(options: editorCommon.IModelDecorationOverviewRulerOptions) {\n\t\tthis.color = strings.empty;\n\t\tthis.darkColor = strings.empty;\n\t\tthis.hcColor = strings.empty;\n\t\tthis.position = editorCommon.OverviewRulerLane.Center;\n\n\t\tif (options && options.color) {\n\t\t\tthis.color = options.color;\n\t\t}\n\t\tif (options && options.darkColor) {\n\t\t\tthis.darkColor = options.darkColor;\n\t\t\tthis.hcColor = options.darkColor;\n\t\t}\n\t\tif (options && options.hcColor) {\n\t\t\tthis.hcColor = options.hcColor;\n\t\t}\n\t\tif (options && options.hasOwnProperty('position')) {\n\t\t\tthis.position = options.position;\n\t\t}\n\t}\n\n\tpublic equals(other: ModelDecorationOverviewRulerOptions): boolean {\n\t\treturn (\n\t\t\tthis.color === other.color\n\t\t\t&& this.darkColor === other.darkColor\n\t\t\t&& this.hcColor === other.hcColor\n\t\t\t&& this.position === other.position\n\t\t);\n\t}\n}\n\nlet lastStaticId = 0;\n\nexport class ModelDecorationOptions implements editorCommon.IModelDecorationOptions {\n\n\tpublic static EMPTY: ModelDecorationOptions;\n\n\tpublic static register(options: editorCommon.IModelDecorationOptions): ModelDecorationOptions {\n\t\treturn new ModelDecorationOptions(++lastStaticId, options);\n\t}\n\n\tpublic static createDynamic(options: editorCommon.IModelDecorationOptions): ModelDecorationOptions {\n\t\treturn new ModelDecorationOptions(0, options);\n\t}\n\n\treadonly staticId: number;\n\treadonly stickiness: editorCommon.TrackedRangeStickiness;\n\treadonly className: string;\n\treadonly hoverMessage: MarkedString | MarkedString[];\n\treadonly glyphMarginHoverMessage: MarkedString | MarkedString[];\n\treadonly isWholeLine: boolean;\n\treadonly showIfCollapsed: boolean;\n\treadonly overviewRuler: ModelDecorationOverviewRulerOptions;\n\treadonly glyphMarginClassName: string;\n\treadonly linesDecorationsClassName: string;\n\treadonly marginClassName: string;\n\treadonly inlineClassName: string;\n\treadonly beforeContentClassName: string;\n\treadonly afterContentClassName: string;\n\n\tprivate constructor(staticId: number, options: editorCommon.IModelDecorationOptions) {\n\t\tthis.staticId = staticId;\n\t\tthis.stickiness = options.stickiness || editorCommon.TrackedRangeStickiness.AlwaysGrowsWhenTypingAtEdges;\n\t\tthis.className = options.className ? cleanClassName(options.className) : strings.empty;\n\t\tthis.hoverMessage = options.hoverMessage || [];\n\t\tthis.glyphMarginHoverMessage = options.glyphMarginHoverMessage || strings.empty;\n\t\tthis.isWholeLine = options.isWholeLine || false;\n\t\tthis.showIfCollapsed = options.showIfCollapsed || false;\n\t\tthis.overviewRuler = new ModelDecorationOverviewRulerOptions(options.overviewRuler);\n\t\tthis.glyphMarginClassName = options.glyphMarginClassName ? cleanClassName(options.glyphMarginClassName) : strings.empty;\n\t\tthis.linesDecorationsClassName = options.linesDecorationsClassName ? cleanClassName(options.linesDecorationsClassName) : strings.empty;\n\t\tthis.marginClassName = options.marginClassName ? cleanClassName(options.marginClassName) : strings.empty;\n\t\tthis.inlineClassName = options.inlineClassName ? cleanClassName(options.inlineClassName) : strings.empty;\n\t\tthis.beforeContentClassName = options.beforeContentClassName ? cleanClassName(options.beforeContentClassName) : strings.empty;\n\t\tthis.afterContentClassName = options.afterContentClassName ? cleanClassName(options.afterContentClassName) : strings.empty;\n\t}\n\n\tpublic equals(other: ModelDecorationOptions): boolean {\n\t\tif (this.staticId > 0 || other.staticId > 0) {\n\t\t\treturn this.staticId === other.staticId;\n\t\t}\n\n\t\treturn (\n\t\t\tthis.stickiness === other.stickiness\n\t\t\t&& this.className === other.className\n\t\t\t&& this.isWholeLine === other.isWholeLine\n\t\t\t&& this.showIfCollapsed === other.showIfCollapsed\n\t\t\t&& this.glyphMarginClassName === other.glyphMarginClassName\n\t\t\t&& this.linesDecorationsClassName === other.linesDecorationsClassName\n\t\t\t&& this.marginClassName === other.marginClassName\n\t\t\t&& this.inlineClassName === other.inlineClassName\n\t\t\t&& this.beforeContentClassName === other.beforeContentClassName\n\t\t\t&& this.afterContentClassName === other.afterContentClassName\n\t\t\t&& markedStringsEquals(this.hoverMessage, other.hoverMessage)\n\t\t\t&& markedStringsEquals(this.glyphMarginHoverMessage, other.glyphMarginHoverMessage)\n\t\t\t&& this.overviewRuler.equals(other.overviewRuler)\n\t\t);\n\t}\n}\nModelDecorationOptions.EMPTY = ModelDecorationOptions.register({});\n\nclass ModelDeltaDecoration implements editorCommon.IModelDeltaDecoration {\n\n\tindex: number;\n\trange: Range;\n\toptions: ModelDecorationOptions;\n\n\tconstructor(index: number, range: Range, options: ModelDecorationOptions) {\n\t\tthis.index = index;\n\t\tthis.range = range;\n\t\tthis.options = options;\n\t}\n}\n\nfunction _normalizeOptions(options: editorCommon.IModelDecorationOptions): ModelDecorationOptions {\n\tif (options instanceof ModelDecorationOptions) {\n\t\treturn options;\n\t}\n\treturn ModelDecorationOptions.createDynamic(options);\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'use strict';\n\nimport { Range, IRange } from 'vs/editor/common/core/range';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { EditStack } from 'vs/editor/common/model/editStack';\nimport { ILineEdit, LineMarker, ModelLine, MarkersTracker } from 'vs/editor/common/model/modelLine';\nimport { TextModelWithDecorations, ModelDecorationOptions } from 'vs/editor/common/model/textModelWithDecorations';\nimport * as strings from 'vs/base/common/strings';\nimport * as arrays from 'vs/base/common/arrays';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { Position } from 'vs/editor/common/core/position';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { LanguageIdentifier } from 'vs/editor/common/modes';\nimport { ITextSource, IRawTextSource, RawTextSource } from 'vs/editor/common/model/textSource';\nimport { TextModel } from 'vs/editor/common/model/textModel';\nimport * as textModelEvents from 'vs/editor/common/model/textModelEvents';\n\nexport interface IValidatedEditOperation {\n\tsortIndex: number;\n\tidentifier: editorCommon.ISingleEditOperationIdentifier;\n\trange: Range;\n\trangeLength: number;\n\tlines: string[];\n\tforceMoveMarkers: boolean;\n\tisAutoWhitespaceEdit: boolean;\n}\n\ninterface IIdentifiedLineEdit extends ILineEdit {\n\tlineNumber: number;\n}\n\nexport class EditableTextModel extends TextModelWithDecorations implements editorCommon.IEditableTextModel {\n\n\tpublic static createFromString(text: string, options: editorCommon.ITextModelCreationOptions = TextModel.DEFAULT_CREATION_OPTIONS, languageIdentifier: LanguageIdentifier = null): EditableTextModel {\n\t\treturn new EditableTextModel(RawTextSource.fromString(text), options, languageIdentifier);\n\t}\n\n\tpublic onDidChangeRawContent(listener: (e: textModelEvents.ModelRawContentChangedEvent) => void): IDisposable {\n\t\treturn this._eventEmitter.addListener(textModelEvents.TextModelEventType.ModelRawContentChanged2, listener);\n\t}\n\tpublic onDidChangeContent(listener: (e: textModelEvents.IModelContentChangedEvent) => void): IDisposable {\n\t\treturn this._eventEmitter.addListener(textModelEvents.TextModelEventType.ModelContentChanged, listener);\n\t}\n\n\tprivate _commandManager: EditStack;\n\n\t// for extra details about change events:\n\tprivate _isUndoing: boolean;\n\tprivate _isRedoing: boolean;\n\n\t// editable range\n\tprivate _hasEditableRange: boolean;\n\tprivate _editableRangeId: string;\n\n\tprivate _trimAutoWhitespaceLines: number[];\n\n\tconstructor(rawTextSource: IRawTextSource, creationOptions: editorCommon.ITextModelCreationOptions, languageIdentifier: LanguageIdentifier) {\n\t\tsuper(rawTextSource, creationOptions, languageIdentifier);\n\n\t\tthis._commandManager = new EditStack(this);\n\n\t\tthis._isUndoing = false;\n\t\tthis._isRedoing = false;\n\n\t\tthis._hasEditableRange = false;\n\t\tthis._editableRangeId = null;\n\t\tthis._trimAutoWhitespaceLines = null;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._commandManager = null;\n\t\tsuper.dispose();\n\t}\n\n\tprotected _resetValue(newValue: ITextSource): void {\n\t\tsuper._resetValue(newValue);\n\n\t\t// Destroy my edit history and settings\n\t\tthis._commandManager = new EditStack(this);\n\t\tthis._hasEditableRange = false;\n\t\tthis._editableRangeId = null;\n\t\tthis._trimAutoWhitespaceLines = null;\n\t}\n\n\tpublic pushStackElement(): void {\n\t\tthis._commandManager.pushStackElement();\n\t}\n\n\tpublic pushEditOperations(beforeCursorState: Selection[], editOperations: editorCommon.IIdentifiedSingleEditOperation[], cursorStateComputer: editorCommon.ICursorStateComputer): Selection[] {\n\t\ttry {\n\t\t\tthis._eventEmitter.beginDeferredEmit();\n\t\t\treturn this._pushEditOperations(beforeCursorState, editOperations, cursorStateComputer);\n\t\t} finally {\n\t\t\tthis._eventEmitter.endDeferredEmit();\n\t\t}\n\t}\n\n\tprivate _pushEditOperations(beforeCursorState: Selection[], editOperations: editorCommon.IIdentifiedSingleEditOperation[], cursorStateComputer: editorCommon.ICursorStateComputer): Selection[] {\n\t\tif (this._options.trimAutoWhitespace && this._trimAutoWhitespaceLines) {\n\t\t\t// Go through each saved line number and insert a trim whitespace edit\n\t\t\t// if it is safe to do so (no conflicts with other edits).\n\n\t\t\tlet incomingEdits = editOperations.map((op) => {\n\t\t\t\treturn {\n\t\t\t\t\trange: this.validateRange(op.range),\n\t\t\t\t\ttext: op.text\n\t\t\t\t};\n\t\t\t});\n\n\t\t\t// Sometimes, auto-formatters change ranges automatically which can cause undesired auto whitespace trimming near the cursor\n\t\t\t// We'll use the following heuristic: if the edits occur near the cursor, then it's ok to trim auto whitespace\n\t\t\tlet editsAreNearCursors = true;\n\t\t\tfor (let i = 0, len = beforeCursorState.length; i < len; i++) {\n\t\t\t\tlet sel = beforeCursorState[i];\n\t\t\t\tlet foundEditNearSel = false;\n\t\t\t\tfor (let j = 0, lenJ = incomingEdits.length; j < lenJ; j++) {\n\t\t\t\t\tlet editRange = incomingEdits[j].range;\n\t\t\t\t\tlet selIsAbove = editRange.startLineNumber > sel.endLineNumber;\n\t\t\t\t\tlet selIsBelow = sel.startLineNumber > editRange.endLineNumber;\n\t\t\t\t\tif (!selIsAbove && !selIsBelow) {\n\t\t\t\t\t\tfoundEditNearSel = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!foundEditNearSel) {\n\t\t\t\t\teditsAreNearCursors = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (editsAreNearCursors) {\n\t\t\t\tfor (let i = 0, len = this._trimAutoWhitespaceLines.length; i < len; i++) {\n\t\t\t\t\tlet trimLineNumber = this._trimAutoWhitespaceLines[i];\n\t\t\t\t\tlet maxLineColumn = this.getLineMaxColumn(trimLineNumber);\n\n\t\t\t\t\tlet allowTrimLine = true;\n\t\t\t\t\tfor (let j = 0, lenJ = incomingEdits.length; j < lenJ; j++) {\n\t\t\t\t\t\tlet editRange = incomingEdits[j].range;\n\t\t\t\t\t\tlet editText = incomingEdits[j].text;\n\n\t\t\t\t\t\tif (trimLineNumber < editRange.startLineNumber || trimLineNumber > editRange.endLineNumber) {\n\t\t\t\t\t\t\t// `trimLine` is completely outside this edit\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// At this point:\n\t\t\t\t\t\t// editRange.startLineNumber <= trimLine <= editRange.endLineNumber\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttrimLineNumber === editRange.startLineNumber && editRange.startColumn === maxLineColumn\n\t\t\t\t\t\t\t&& editRange.isEmpty() && editText && editText.length > 0 && editText.charAt(0) === '\\n'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// This edit inserts a new line (and maybe other text) after `trimLine`\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Looks like we can't trim this line as it would interfere with an incoming edit\n\t\t\t\t\t\tallowTrimLine = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (allowTrimLine) {\n\t\t\t\t\t\teditOperations.push({\n\t\t\t\t\t\t\tidentifier: null,\n\t\t\t\t\t\t\trange: new Range(trimLineNumber, 1, trimLineNumber, maxLineColumn),\n\t\t\t\t\t\t\ttext: null,\n\t\t\t\t\t\t\tforceMoveMarkers: false,\n\t\t\t\t\t\t\tisAutoWhitespaceEdit: false\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._trimAutoWhitespaceLines = null;\n\t\t}\n\t\treturn this._commandManager.pushEditOperation(beforeCursorState, editOperations, cursorStateComputer);\n\t}\n\n\t/**\n\t * Transform operations such that they represent the same logic edit,\n\t * but that they also do not cause OOM crashes.\n\t */\n\tprivate _reduceOperations(operations: IValidatedEditOperation[]): IValidatedEditOperation[] {\n\t\tif (operations.length < 1000) {\n\t\t\t// We know from empirical testing that a thousand edits work fine regardless of their shape.\n\t\t\treturn operations;\n\t\t}\n\n\t\t// At one point, due to how events are emitted and how each operation is handled,\n\t\t// some operations can trigger a high ammount of temporary string allocations,\n\t\t// that will immediately get edited again.\n\t\t// e.g. a formatter inserting ridiculous ammounts of \\n on a model with a single line\n\t\t// Therefore, the strategy is to collapse all the operations into a huge single edit operation\n\t\treturn [this._toSingleEditOperation(operations)];\n\t}\n\n\t_toSingleEditOperation(operations: IValidatedEditOperation[]): IValidatedEditOperation {\n\t\tlet forceMoveMarkers = false,\n\t\t\tfirstEditRange = operations[0].range,\n\t\t\tlastEditRange = operations[operations.length - 1].range,\n\t\t\tentireEditRange = new Range(firstEditRange.startLineNumber, firstEditRange.startColumn, lastEditRange.endLineNumber, lastEditRange.endColumn),\n\t\t\tlastEndLineNumber = firstEditRange.startLineNumber,\n\t\t\tlastEndColumn = firstEditRange.startColumn,\n\t\t\tresult: string[] = [];\n\n\t\tfor (let i = 0, len = operations.length; i < len; i++) {\n\t\t\tlet operation = operations[i],\n\t\t\t\trange = operation.range;\n\n\t\t\tforceMoveMarkers = forceMoveMarkers || operation.forceMoveMarkers;\n\n\t\t\t// (1) -- Push old text\n\t\t\tfor (let lineNumber = lastEndLineNumber; lineNumber < range.startLineNumber; lineNumber++) {\n\t\t\t\tif (lineNumber === lastEndLineNumber) {\n\t\t\t\t\tresult.push(this._lines[lineNumber - 1].text.substring(lastEndColumn - 1));\n\t\t\t\t} else {\n\t\t\t\t\tresult.push('\\n');\n\t\t\t\t\tresult.push(this._lines[lineNumber - 1].text);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (range.startLineNumber === lastEndLineNumber) {\n\t\t\t\tresult.push(this._lines[range.startLineNumber - 1].text.substring(lastEndColumn - 1, range.startColumn - 1));\n\t\t\t} else {\n\t\t\t\tresult.push('\\n');\n\t\t\t\tresult.push(this._lines[range.startLineNumber - 1].text.substring(0, range.startColumn - 1));\n\t\t\t}\n\n\t\t\t// (2) -- Push new text\n\t\t\tif (operation.lines) {\n\t\t\t\tfor (let j = 0, lenJ = operation.lines.length; j < lenJ; j++) {\n\t\t\t\t\tif (j !== 0) {\n\t\t\t\t\t\tresult.push('\\n');\n\t\t\t\t\t}\n\t\t\t\t\tresult.push(operation.lines[j]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlastEndLineNumber = operation.range.endLineNumber;\n\t\t\tlastEndColumn = operation.range.endColumn;\n\t\t}\n\n\t\treturn {\n\t\t\tsortIndex: 0,\n\t\t\tidentifier: operations[0].identifier,\n\t\t\trange: entireEditRange,\n\t\t\trangeLength: this.getValueLengthInRange(entireEditRange),\n\t\t\tlines: result.join('').split('\\n'),\n\t\t\tforceMoveMarkers: forceMoveMarkers,\n\t\t\tisAutoWhitespaceEdit: false\n\t\t};\n\t}\n\n\tprivate static _sortOpsAscending(a: IValidatedEditOperation, b: IValidatedEditOperation): number {\n\t\tlet r = Range.compareRangesUsingEnds(a.range, b.range);\n\t\tif (r === 0) {\n\t\t\treturn a.sortIndex - b.sortIndex;\n\t\t}\n\t\treturn r;\n\t}\n\n\tprivate static _sortOpsDescending(a: IValidatedEditOperation, b: IValidatedEditOperation): number {\n\t\tlet r = Range.compareRangesUsingEnds(a.range, b.range);\n\t\tif (r === 0) {\n\t\t\treturn b.sortIndex - a.sortIndex;\n\t\t}\n\t\treturn -r;\n\t}\n\n\tpublic applyEdits(rawOperations: editorCommon.IIdentifiedSingleEditOperation[]): editorCommon.IIdentifiedSingleEditOperation[] {\n\t\ttry {\n\t\t\tthis._eventEmitter.beginDeferredEmit();\n\t\t\tlet markersTracker = this._acquireMarkersTracker();\n\t\t\treturn this._applyEdits(markersTracker, rawOperations);\n\t\t} finally {\n\t\t\tthis._releaseMarkersTracker();\n\t\t\tthis._eventEmitter.endDeferredEmit();\n\t\t}\n\t}\n\n\tprivate _applyEdits(markersTracker: MarkersTracker, rawOperations: editorCommon.IIdentifiedSingleEditOperation[]): editorCommon.IIdentifiedSingleEditOperation[] {\n\t\tif (rawOperations.length === 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\tlet mightContainRTL = this._mightContainRTL;\n\t\tlet mightContainNonBasicASCII = this._mightContainNonBasicASCII;\n\t\tlet canReduceOperations = true;\n\n\t\tlet operations: IValidatedEditOperation[] = [];\n\t\tfor (let i = 0; i < rawOperations.length; i++) {\n\t\t\tlet op = rawOperations[i];\n\t\t\tif (canReduceOperations && op._isTracked) {\n\t\t\t\tcanReduceOperations = false;\n\t\t\t}\n\t\t\tlet validatedRange = this.validateRange(op.range);\n\t\t\tif (!mightContainRTL && op.text) {\n\t\t\t\t// check if the new inserted text contains RTL\n\t\t\t\tmightContainRTL = strings.containsRTL(op.text);\n\t\t\t}\n\t\t\tif (!mightContainNonBasicASCII && op.text) {\n\t\t\t\tmightContainNonBasicASCII = !strings.isBasicASCII(op.text);\n\t\t\t}\n\t\t\toperations[i] = {\n\t\t\t\tsortIndex: i,\n\t\t\t\tidentifier: op.identifier,\n\t\t\t\trange: validatedRange,\n\t\t\t\trangeLength: this.getValueLengthInRange(validatedRange),\n\t\t\t\tlines: op.text ? op.text.split(/\\r\\n|\\r|\\n/) : null,\n\t\t\t\tforceMoveMarkers: op.forceMoveMarkers,\n\t\t\t\tisAutoWhitespaceEdit: op.isAutoWhitespaceEdit || false\n\t\t\t};\n\t\t}\n\n\t\t// Sort operations ascending\n\t\toperations.sort(EditableTextModel._sortOpsAscending);\n\n\t\tfor (let i = 0, count = operations.length - 1; i < count; i++) {\n\t\t\tlet rangeEnd = operations[i].range.getEndPosition();\n\t\t\tlet nextRangeStart = operations[i + 1].range.getStartPosition();\n\n\t\t\tif (nextRangeStart.isBefore(rangeEnd)) {\n\t\t\t\t// overlapping ranges\n\t\t\t\tthrow new Error('Overlapping ranges are not allowed!');\n\t\t\t}\n\t\t}\n\n\t\tif (canReduceOperations) {\n\t\t\toperations = this._reduceOperations(operations);\n\t\t}\n\n\t\tlet editableRange = this.getEditableRange();\n\t\tlet editableRangeStart = editableRange.getStartPosition();\n\t\tlet editableRangeEnd = editableRange.getEndPosition();\n\t\tfor (let i = 0; i < operations.length; i++) {\n\t\t\tlet operationRange = operations[i].range;\n\t\t\tif (!editableRangeStart.isBeforeOrEqual(operationRange.getStartPosition()) || !operationRange.getEndPosition().isBeforeOrEqual(editableRangeEnd)) {\n\t\t\t\tthrow new Error('Editing outside of editable range not allowed!');\n\t\t\t}\n\t\t}\n\n\t\t// Delta encode operations\n\t\tlet reverseRanges = EditableTextModel._getInverseEditRanges(operations);\n\t\tlet reverseOperations: editorCommon.IIdentifiedSingleEditOperation[] = [];\n\n\t\tlet newTrimAutoWhitespaceCandidates: { lineNumber: number, oldContent: string }[] = [];\n\n\t\tfor (let i = 0; i < operations.length; i++) {\n\t\t\tlet op = operations[i];\n\t\t\tlet reverseRange = reverseRanges[i];\n\n\t\t\treverseOperations[i] = {\n\t\t\t\tidentifier: op.identifier,\n\t\t\t\trange: reverseRange,\n\t\t\t\ttext: this.getValueInRange(op.range),\n\t\t\t\tforceMoveMarkers: op.forceMoveMarkers\n\t\t\t};\n\n\t\t\tif (this._options.trimAutoWhitespace && op.isAutoWhitespaceEdit && op.range.isEmpty()) {\n\t\t\t\t// Record already the future line numbers that might be auto whitespace removal candidates on next edit\n\t\t\t\tfor (let lineNumber = reverseRange.startLineNumber; lineNumber <= reverseRange.endLineNumber; lineNumber++) {\n\t\t\t\t\tlet currentLineContent = '';\n\t\t\t\t\tif (lineNumber === reverseRange.startLineNumber) {\n\t\t\t\t\t\tcurrentLineContent = this.getLineContent(op.range.startLineNumber);\n\t\t\t\t\t\tif (strings.firstNonWhitespaceIndex(currentLineContent) !== -1) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tnewTrimAutoWhitespaceCandidates.push({ lineNumber: lineNumber, oldContent: currentLineContent });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._mightContainRTL = mightContainRTL;\n\t\tthis._mightContainNonBasicASCII = mightContainNonBasicASCII;\n\t\tthis._doApplyEdits(markersTracker, operations);\n\n\t\tthis._trimAutoWhitespaceLines = null;\n\t\tif (this._options.trimAutoWhitespace && newTrimAutoWhitespaceCandidates.length > 0) {\n\t\t\t// sort line numbers auto whitespace removal candidates for next edit descending\n\t\t\tnewTrimAutoWhitespaceCandidates.sort((a, b) => b.lineNumber - a.lineNumber);\n\n\t\t\tthis._trimAutoWhitespaceLines = [];\n\t\t\tfor (let i = 0, len = newTrimAutoWhitespaceCandidates.length; i < len; i++) {\n\t\t\t\tlet lineNumber = newTrimAutoWhitespaceCandidates[i].lineNumber;\n\t\t\t\tif (i > 0 && newTrimAutoWhitespaceCandidates[i - 1].lineNumber === lineNumber) {\n\t\t\t\t\t// Do not have the same line number twice\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet prevContent = newTrimAutoWhitespaceCandidates[i].oldContent;\n\t\t\t\tlet lineContent = this.getLineContent(lineNumber);\n\n\t\t\t\tif (lineContent.length === 0 || lineContent === prevContent || strings.firstNonWhitespaceIndex(lineContent) !== -1) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis._trimAutoWhitespaceLines.push(lineNumber);\n\t\t\t}\n\t\t}\n\n\t\treturn reverseOperations;\n\t}\n\n\t/**\n\t * Assumes `operations` are validated and sorted ascending\n\t */\n\tpublic static _getInverseEditRanges(operations: IValidatedEditOperation[]): Range[] {\n\t\tlet result: Range[] = [];\n\n\t\tlet prevOpEndLineNumber: number;\n\t\tlet prevOpEndColumn: number;\n\t\tlet prevOp: IValidatedEditOperation = null;\n\t\tfor (let i = 0, len = operations.length; i < len; i++) {\n\t\t\tlet op = operations[i];\n\n\t\t\tlet startLineNumber: number;\n\t\t\tlet startColumn: number;\n\n\t\t\tif (prevOp) {\n\t\t\t\tif (prevOp.range.endLineNumber === op.range.startLineNumber) {\n\t\t\t\t\tstartLineNumber = prevOpEndLineNumber;\n\t\t\t\t\tstartColumn = prevOpEndColumn + (op.range.startColumn - prevOp.range.endColumn);\n\t\t\t\t} else {\n\t\t\t\t\tstartLineNumber = prevOpEndLineNumber + (op.range.startLineNumber - prevOp.range.endLineNumber);\n\t\t\t\t\tstartColumn = op.range.startColumn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tstartLineNumber = op.range.startLineNumber;\n\t\t\t\tstartColumn = op.range.startColumn;\n\t\t\t}\n\n\t\t\tlet resultRange: Range;\n\n\t\t\tif (op.lines && op.lines.length > 0) {\n\t\t\t\t// the operation inserts something\n\t\t\t\tlet lineCount = op.lines.length;\n\t\t\t\tlet firstLine = op.lines[0];\n\t\t\t\tlet lastLine = op.lines[lineCount - 1];\n\n\t\t\t\tif (lineCount === 1) {\n\t\t\t\t\t// single line insert\n\t\t\t\t\tresultRange = new Range(startLineNumber, startColumn, startLineNumber, startColumn + firstLine.length);\n\t\t\t\t} else {\n\t\t\t\t\t// multi line insert\n\t\t\t\t\tresultRange = new Range(startLineNumber, startColumn, startLineNumber + lineCount - 1, lastLine.length + 1);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// There is nothing to insert\n\t\t\t\tresultRange = new Range(startLineNumber, startColumn, startLineNumber, startColumn);\n\t\t\t}\n\n\t\t\tprevOpEndLineNumber = resultRange.endLineNumber;\n\t\t\tprevOpEndColumn = resultRange.endColumn;\n\n\t\t\tresult.push(resultRange);\n\t\t\tprevOp = op;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate _doApplyEdits(markersTracker: MarkersTracker, operations: IValidatedEditOperation[]): void {\n\n\t\tconst tabSize = this._options.tabSize;\n\n\t\t// Sort operations descending\n\t\toperations.sort(EditableTextModel._sortOpsDescending);\n\n\t\tlet rawContentChanges: textModelEvents.ModelRawChange[] = [];\n\t\tlet contentChanges: textModelEvents.IModelContentChange[] = [];\n\t\tlet lineEditsQueue: IIdentifiedLineEdit[] = [];\n\n\t\tconst queueLineEdit = (lineEdit: IIdentifiedLineEdit) => {\n\t\t\tif (lineEdit.startColumn === lineEdit.endColumn && lineEdit.text.length === 0) {\n\t\t\t\t// empty edit => ignore it\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlineEditsQueue.push(lineEdit);\n\t\t};\n\n\t\tconst flushLineEdits = () => {\n\t\t\tif (lineEditsQueue.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlineEditsQueue.reverse();\n\n\t\t\t// `lineEditsQueue` now contains edits from smaller (line number,column) to larger (line number,column)\n\t\t\tlet currentLineNumber = lineEditsQueue[0].lineNumber;\n\t\t\tlet currentLineNumberStart = 0;\n\n\t\t\tfor (let i = 1, len = lineEditsQueue.length; i < len; i++) {\n\t\t\t\tconst lineNumber = lineEditsQueue[i].lineNumber;\n\n\t\t\t\tif (lineNumber === currentLineNumber) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis._invalidateLine(currentLineNumber - 1);\n\t\t\t\tthis._lines[currentLineNumber - 1].applyEdits(markersTracker, lineEditsQueue.slice(currentLineNumberStart, i), tabSize);\n\t\t\t\tif (this._lineStarts) {\n\t\t\t\t\t// update prefix sum\n\t\t\t\t\tthis._lineStarts.changeValue(currentLineNumber - 1, this._lines[currentLineNumber - 1].text.length + this._EOL.length);\n\t\t\t\t}\n\t\t\t\trawContentChanges.push(\n\t\t\t\t\tnew textModelEvents.ModelRawLineChanged(currentLineNumber, this._lines[currentLineNumber - 1].text)\n\t\t\t\t);\n\n\t\t\t\tcurrentLineNumber = lineNumber;\n\t\t\t\tcurrentLineNumberStart = i;\n\t\t\t}\n\n\t\t\tthis._invalidateLine(currentLineNumber - 1);\n\t\t\tthis._lines[currentLineNumber - 1].applyEdits(markersTracker, lineEditsQueue.slice(currentLineNumberStart, lineEditsQueue.length), tabSize);\n\t\t\tif (this._lineStarts) {\n\t\t\t\t// update prefix sum\n\t\t\t\tthis._lineStarts.changeValue(currentLineNumber - 1, this._lines[currentLineNumber - 1].text.length + this._EOL.length);\n\t\t\t}\n\t\t\trawContentChanges.push(\n\t\t\t\tnew textModelEvents.ModelRawLineChanged(currentLineNumber, this._lines[currentLineNumber - 1].text)\n\t\t\t);\n\n\t\t\tlineEditsQueue = [];\n\t\t};\n\n\t\tlet minTouchedLineNumber = operations[operations.length - 1].range.startLineNumber;\n\t\tlet maxTouchedLineNumber = operations[0].range.endLineNumber + 1;\n\t\tlet totalLinesCountDelta = 0;\n\n\t\tfor (let i = 0, len = operations.length; i < len; i++) {\n\t\t\tconst op = operations[i];\n\n\t\t\t// console.log();\n\t\t\t// console.log('-------------------');\n\t\t\t// console.log('OPERATION #' + (i));\n\t\t\t// console.log('op: ', op);\n\t\t\t// console.log('<<<\\n' + this._lines.map(l => l.text).join('\\n') + '\\n>>>');\n\n\t\t\tconst startLineNumber = op.range.startLineNumber;\n\t\t\tconst startColumn = op.range.startColumn;\n\t\t\tconst endLineNumber = op.range.endLineNumber;\n\t\t\tconst endColumn = op.range.endColumn;\n\n\t\t\tif (startLineNumber === endLineNumber && startColumn === endColumn && (!op.lines || op.lines.length === 0)) {\n\t\t\t\t// no-op\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst deletingLinesCnt = endLineNumber - startLineNumber;\n\t\t\tconst insertingLinesCnt = (op.lines ? op.lines.length - 1 : 0);\n\t\t\tconst editingLinesCnt = Math.min(deletingLinesCnt, insertingLinesCnt);\n\n\t\t\ttotalLinesCountDelta += (insertingLinesCnt - deletingLinesCnt);\n\n\t\t\t// Iterating descending to overlap with previous op\n\t\t\t// in case there are common lines being edited in both\n\t\t\tfor (let j = editingLinesCnt; j >= 0; j--) {\n\t\t\t\tconst editLineNumber = startLineNumber + j;\n\n\t\t\t\tqueueLineEdit({\n\t\t\t\t\tlineNumber: editLineNumber,\n\t\t\t\t\tstartColumn: (editLineNumber === startLineNumber ? startColumn : 1),\n\t\t\t\t\tendColumn: (editLineNumber === endLineNumber ? endColumn : this.getLineMaxColumn(editLineNumber)),\n\t\t\t\t\ttext: (op.lines ? op.lines[j] : ''),\n\t\t\t\t\tforceMoveMarkers: op.forceMoveMarkers\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (editingLinesCnt < deletingLinesCnt) {\n\t\t\t\t// Must delete some lines\n\n\t\t\t\t// Flush any pending line edits\n\t\t\t\tflushLineEdits();\n\n\t\t\t\tconst spliceStartLineNumber = startLineNumber + editingLinesCnt;\n\t\t\t\tconst spliceStartColumn = this.getLineMaxColumn(spliceStartLineNumber);\n\n\t\t\t\tconst endLineRemains = this._lines[endLineNumber - 1].split(markersTracker, endColumn, false, tabSize);\n\t\t\t\tthis._invalidateLine(spliceStartLineNumber - 1);\n\n\t\t\t\tconst spliceCnt = endLineNumber - spliceStartLineNumber;\n\n\t\t\t\t// Collect all these markers\n\t\t\t\tlet markersOnDeletedLines: LineMarker[] = [];\n\t\t\t\tfor (let j = 0; j < spliceCnt; j++) {\n\t\t\t\t\tconst deleteLineIndex = spliceStartLineNumber + j;\n\t\t\t\t\tconst deleteLineMarkers = this._lines[deleteLineIndex].getMarkers();\n\t\t\t\t\tif (deleteLineMarkers) {\n\t\t\t\t\t\tmarkersOnDeletedLines = markersOnDeletedLines.concat(deleteLineMarkers);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._lines.splice(spliceStartLineNumber, spliceCnt);\n\t\t\t\tif (this._lineStarts) {\n\t\t\t\t\t// update prefix sum\n\t\t\t\t\tthis._lineStarts.removeValues(spliceStartLineNumber, spliceCnt);\n\t\t\t\t}\n\n\t\t\t\t// Reconstruct first line\n\t\t\t\tthis._lines[spliceStartLineNumber - 1].append(markersTracker, endLineRemains, tabSize);\n\t\t\t\tif (this._lineStarts) {\n\t\t\t\t\t// update prefix sum\n\t\t\t\t\tthis._lineStarts.changeValue(spliceStartLineNumber - 1, this._lines[spliceStartLineNumber - 1].text.length + this._EOL.length);\n\t\t\t\t}\n\n\t\t\t\t// Update deleted markers\n\t\t\t\tconst deletedMarkersPosition = new Position(spliceStartLineNumber, spliceStartColumn);\n\t\t\t\tfor (let j = 0, lenJ = markersOnDeletedLines.length; j < lenJ; j++) {\n\t\t\t\t\tmarkersOnDeletedLines[j].updatePosition(markersTracker, deletedMarkersPosition);\n\t\t\t\t}\n\n\t\t\t\tthis._lines[spliceStartLineNumber - 1].addMarkers(markersOnDeletedLines);\n\t\t\t\trawContentChanges.push(\n\t\t\t\t\tnew textModelEvents.ModelRawLineChanged(spliceStartLineNumber, this._lines[spliceStartLineNumber - 1].text)\n\t\t\t\t);\n\n\t\t\t\trawContentChanges.push(\n\t\t\t\t\tnew textModelEvents.ModelRawLinesDeleted(spliceStartLineNumber + 1, spliceStartLineNumber + spliceCnt)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (editingLinesCnt < insertingLinesCnt) {\n\t\t\t\t// Must insert some lines\n\n\t\t\t\t// Flush any pending line edits\n\t\t\t\tflushLineEdits();\n\n\t\t\t\tconst spliceLineNumber = startLineNumber + editingLinesCnt;\n\t\t\t\tlet spliceColumn = (spliceLineNumber === startLineNumber ? startColumn : 1);\n\t\t\t\tif (op.lines) {\n\t\t\t\t\tspliceColumn += op.lines[editingLinesCnt].length;\n\t\t\t\t}\n\n\t\t\t\t// Split last line\n\t\t\t\tlet leftoverLine = this._lines[spliceLineNumber - 1].split(markersTracker, spliceColumn, op.forceMoveMarkers, tabSize);\n\t\t\t\tif (this._lineStarts) {\n\t\t\t\t\t// update prefix sum\n\t\t\t\t\tthis._lineStarts.changeValue(spliceLineNumber - 1, this._lines[spliceLineNumber - 1].text.length + this._EOL.length);\n\t\t\t\t}\n\t\t\t\trawContentChanges.push(\n\t\t\t\t\tnew textModelEvents.ModelRawLineChanged(spliceLineNumber, this._lines[spliceLineNumber - 1].text)\n\t\t\t\t);\n\t\t\t\tthis._invalidateLine(spliceLineNumber - 1);\n\n\t\t\t\t// Lines in the middle\n\t\t\t\tlet newLines: ModelLine[] = [];\n\t\t\t\tlet newLinesContent: string[] = [];\n\t\t\t\tlet newLinesLengths = new Uint32Array(insertingLinesCnt - editingLinesCnt);\n\t\t\t\tfor (let j = editingLinesCnt + 1; j <= insertingLinesCnt; j++) {\n\t\t\t\t\tlet newLineNumber = startLineNumber + j;\n\t\t\t\t\tnewLines.push(new ModelLine(newLineNumber, op.lines[j], tabSize));\n\t\t\t\t\tnewLinesContent.push(op.lines[j]);\n\t\t\t\t\tnewLinesLengths[j - editingLinesCnt - 1] = op.lines[j].length + this._EOL.length;\n\t\t\t\t}\n\t\t\t\tthis._lines = arrays.arrayInsert(this._lines, startLineNumber + editingLinesCnt, newLines);\n\t\t\t\tnewLinesContent[newLinesContent.length - 1] += leftoverLine.text;\n\t\t\t\tif (this._lineStarts) {\n\t\t\t\t\t// update prefix sum\n\t\t\t\t\tthis._lineStarts.insertValues(startLineNumber + editingLinesCnt, newLinesLengths);\n\t\t\t\t}\n\n\t\t\t\t// Last line\n\t\t\t\tthis._lines[startLineNumber + insertingLinesCnt - 1].append(markersTracker, leftoverLine, tabSize);\n\t\t\t\tif (this._lineStarts) {\n\t\t\t\t\t// update prefix sum\n\t\t\t\t\tthis._lineStarts.changeValue(startLineNumber + insertingLinesCnt - 1, this._lines[startLineNumber + insertingLinesCnt - 1].text.length + this._EOL.length);\n\t\t\t\t}\n\t\t\t\trawContentChanges.push(\n\t\t\t\t\tnew textModelEvents.ModelRawLinesInserted(spliceLineNumber + 1, startLineNumber + insertingLinesCnt, newLinesContent.join('\\n'))\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcontentChanges.push({\n\t\t\t\trange: new Range(startLineNumber, startColumn, endLineNumber, endColumn),\n\t\t\t\trangeLength: op.rangeLength,\n\t\t\t\ttext: op.lines ? op.lines.join(this.getEOL()) : ''\n\t\t\t});\n\n\t\t\t// console.log('AFTER:');\n\t\t\t// console.log('<<<\\n' + this._lines.map(l => l.text).join('\\n') + '\\n>>>');\n\t\t}\n\n\t\tflushLineEdits();\n\n\t\tmaxTouchedLineNumber = Math.max(1, Math.min(this.getLineCount(), maxTouchedLineNumber + totalLinesCountDelta));\n\t\tif (totalLinesCountDelta !== 0) {\n\t\t\t// must update line numbers all the way to the bottom\n\t\t\tmaxTouchedLineNumber = this.getLineCount();\n\t\t}\n\n\t\tfor (let lineNumber = minTouchedLineNumber; lineNumber <= maxTouchedLineNumber; lineNumber++) {\n\t\t\tthis._lines[lineNumber - 1].updateLineNumber(markersTracker, lineNumber);\n\t\t}\n\n\t\tif (rawContentChanges.length !== 0 || contentChanges.length !== 0) {\n\t\t\tthis._increaseVersionId();\n\n\t\t\tthis._emitModelRawContentChangedEvent(new textModelEvents.ModelRawContentChangedEvent(\n\t\t\t\trawContentChanges,\n\t\t\t\tthis.getVersionId(),\n\t\t\t\tthis._isUndoing,\n\t\t\t\tthis._isRedoing\n\t\t\t));\n\n\t\t\tconst e: textModelEvents.IModelContentChangedEvent = {\n\t\t\t\tchanges: contentChanges,\n\t\t\t\teol: this._EOL,\n\t\t\t\tversionId: this.getVersionId(),\n\t\t\t\tisUndoing: this._isUndoing,\n\t\t\t\tisRedoing: this._isRedoing,\n\t\t\t\tisFlush: false\n\t\t\t};\n\t\t\tthis._eventEmitter.emit(textModelEvents.TextModelEventType.ModelContentChanged, e);\n\t\t}\n\n\t\t// this._assertLineNumbersOK();\n\t\tthis._resetIndentRanges();\n\t}\n\n\tpublic _assertLineNumbersOK(): void {\n\t\tlet foundMarkersCnt = 0;\n\t\tfor (let i = 0, len = this._lines.length; i < len; i++) {\n\t\t\tlet line = this._lines[i];\n\t\t\tlet lineNumber = i + 1;\n\n\t\t\tif (line.lineNumber !== lineNumber) {\n\t\t\t\tthrow new Error('Invalid lineNumber at line: ' + lineNumber + '; text is: ' + this.getValue());\n\t\t\t}\n\n\t\t\tlet markers = line.getMarkers();\n\t\t\tif (markers !== null) {\n\t\t\t\tfor (let j = 0, lenJ = markers.length; j < lenJ; j++) {\n\t\t\t\t\tfoundMarkersCnt++;\n\t\t\t\t\tlet markerId = markers[j].id;\n\t\t\t\t\tlet marker = this._markerIdToMarker[markerId];\n\t\t\t\t\tif (marker.position.lineNumber !== line.lineNumber) {\n\t\t\t\t\t\tthrow new Error('Misplaced marker with id ' + markerId);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet totalMarkersCnt = Object.keys(this._markerIdToMarker).length;\n\t\tif (totalMarkersCnt !== foundMarkersCnt) {\n\t\t\tthrow new Error('There are misplaced markers!');\n\t\t}\n\t}\n\n\tprivate _undo(): Selection[] {\n\t\tthis._isUndoing = true;\n\t\tlet r = this._commandManager.undo();\n\t\tthis._isUndoing = false;\n\n\t\tif (!r) {\n\t\t\treturn null;\n\t\t}\n\n\t\tthis._overwriteAlternativeVersionId(r.recordedVersionId);\n\n\t\treturn r.selections;\n\t}\n\n\tpublic undo(): Selection[] {\n\t\ttry {\n\t\t\tthis._eventEmitter.beginDeferredEmit();\n\t\t\tthis._acquireMarkersTracker();\n\t\t\treturn this._undo();\n\t\t} finally {\n\t\t\tthis._releaseMarkersTracker();\n\t\t\tthis._eventEmitter.endDeferredEmit();\n\t\t}\n\t}\n\n\tprivate _redo(): Selection[] {\n\t\tthis._isRedoing = true;\n\t\tlet r = this._commandManager.redo();\n\t\tthis._isRedoing = false;\n\n\t\tif (!r) {\n\t\t\treturn null;\n\t\t}\n\n\t\tthis._overwriteAlternativeVersionId(r.recordedVersionId);\n\n\t\treturn r.selections;\n\t}\n\n\tpublic redo(): Selection[] {\n\t\ttry {\n\t\t\tthis._eventEmitter.beginDeferredEmit();\n\t\t\tthis._acquireMarkersTracker();\n\t\t\treturn this._redo();\n\t\t} finally {\n\t\t\tthis._releaseMarkersTracker();\n\t\t\tthis._eventEmitter.endDeferredEmit();\n\t\t}\n\t}\n\n\tpublic setEditableRange(range: IRange): void {\n\t\tthis._commandManager.clear();\n\n\t\tif (!this._hasEditableRange && !range) {\n\t\t\t// Nothing to do\n\t\t\treturn;\n\t\t}\n\n\t\tthis.changeDecorations((changeAccessor) => {\n\t\t\tif (this._hasEditableRange) {\n\t\t\t\tchangeAccessor.removeDecoration(this._editableRangeId);\n\t\t\t\tthis._editableRangeId = null;\n\t\t\t\tthis._hasEditableRange = false;\n\t\t\t}\n\n\t\t\tif (range) {\n\t\t\t\tthis._hasEditableRange = true;\n\t\t\t\tthis._editableRangeId = changeAccessor.addDecoration(range, EditableTextModel._DECORATION_OPTION);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate static _DECORATION_OPTION = ModelDecorationOptions.register({\n\t\tstickiness: editorCommon.TrackedRangeStickiness.AlwaysGrowsWhenTypingAtEdges\n\t});\n\n\tpublic hasEditableRange(): boolean {\n\t\treturn this._hasEditableRange;\n\t}\n\n\tpublic getEditableRange(): Range {\n\t\tif (this._hasEditableRange) {\n\t\t\treturn this.getDecorationRange(this._editableRangeId);\n\t\t} else {\n\t\t\treturn this.getFullModelRange();\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport URI from 'vs/base/common/uri';\nimport {\n\tIModel, ITextModelCreationOptions\n} from 'vs/editor/common/editorCommon';\nimport { EditableTextModel } from 'vs/editor/common/model/editableTextModel';\nimport { TextModel } from 'vs/editor/common/model/textModel';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { LanguageIdentifier } from 'vs/editor/common/modes';\nimport { IRawTextSource, RawTextSource } from 'vs/editor/common/model/textSource';\nimport * as textModelEvents from 'vs/editor/common/model/textModelEvents';\n\n// The hierarchy is:\n// Model -> EditableTextModel -> TextModelWithDecorations -> TextModelWithTrackedRanges -> TextModelWithMarkers -> TextModelWithTokens -> TextModel\n\nvar MODEL_ID = 0;\n\nexport class Model extends EditableTextModel implements IModel {\n\n\tpublic onDidChangeDecorations(listener: (e: textModelEvents.IModelDecorationsChangedEvent) => void): IDisposable {\n\t\treturn this._eventEmitter.addListener(textModelEvents.TextModelEventType.ModelDecorationsChanged, listener);\n\t}\n\tpublic onDidChangeOptions(listener: (e: textModelEvents.IModelOptionsChangedEvent) => void): IDisposable {\n\t\treturn this._eventEmitter.addListener(textModelEvents.TextModelEventType.ModelOptionsChanged, listener);\n\t}\n\tpublic onWillDispose(listener: () => void): IDisposable {\n\t\treturn this._eventEmitter.addListener(textModelEvents.TextModelEventType.ModelDispose, listener);\n\t}\n\tpublic onDidChangeLanguage(listener: (e: textModelEvents.IModelLanguageChangedEvent) => void): IDisposable {\n\t\treturn this._eventEmitter.addListener(textModelEvents.TextModelEventType.ModelLanguageChanged, listener);\n\t}\n\n\tpublic static createFromString(text: string, options: ITextModelCreationOptions = TextModel.DEFAULT_CREATION_OPTIONS, languageIdentifier: LanguageIdentifier = null, uri: URI = null): Model {\n\t\treturn new Model(RawTextSource.fromString(text), options, languageIdentifier, uri);\n\t}\n\n\tpublic readonly id: string;\n\n\tprivate readonly _associatedResource: URI;\n\tprivate _attachedEditorCount: number;\n\n\tconstructor(rawTextSource: IRawTextSource, creationOptions: ITextModelCreationOptions, languageIdentifier: LanguageIdentifier, associatedResource: URI = null) {\n\t\tsuper(rawTextSource, creationOptions, languageIdentifier);\n\n\t\t// Generate a new unique model id\n\t\tMODEL_ID++;\n\t\tthis.id = '$model' + MODEL_ID;\n\n\t\tif (typeof associatedResource === 'undefined' || associatedResource === null) {\n\t\t\tthis._associatedResource = URI.parse('inmemory://model/' + MODEL_ID);\n\t\t} else {\n\t\t\tthis._associatedResource = associatedResource;\n\t\t}\n\n\t\tthis._attachedEditorCount = 0;\n\t}\n\n\tpublic destroy(): void {\n\t\tthis.dispose();\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._isDisposing = true;\n\t\tthis._eventEmitter.emit(textModelEvents.TextModelEventType.ModelDispose);\n\t\tsuper.dispose();\n\t\tthis._isDisposing = false;\n\t}\n\n\tpublic onBeforeAttached(): void {\n\t\tthis._attachedEditorCount++;\n\t\t// Warm up tokens for the editor\n\t\tthis._warmUpTokens();\n\t}\n\n\tpublic onBeforeDetached(): void {\n\t\tthis._attachedEditorCount--;\n\t}\n\n\tprotected _shouldAutoTokenize(): boolean {\n\t\treturn this.isAttachedToEditor();\n\t}\n\n\tpublic isAttachedToEditor(): boolean {\n\t\treturn this._attachedEditorCount > 0;\n\t}\n\n\tpublic get uri(): URI {\n\t\treturn this._associatedResource;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { LineTokens } from 'vs/editor/common/core/lineTokens';\nimport { PrefixSumComputerWithCache } from 'vs/editor/common/viewModel/prefixSumComputer';\nimport { ViewLineData } from 'vs/editor/common/viewModel/viewModel';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\nimport { WrappingIndent } from 'vs/editor/common/config/editorOptions';\nimport { ModelDecorationOptions } from 'vs/editor/common/model/textModelWithDecorations';\n\nexport class OutputPosition {\n\t_outputPositionBrand: void;\n\toutputLineIndex: number;\n\toutputOffset: number;\n\n\tconstructor(outputLineIndex: number, outputOffset: number) {\n\t\tthis.outputLineIndex = outputLineIndex;\n\t\tthis.outputOffset = outputOffset;\n\t}\n}\n\nexport interface ILineMapping {\n\tgetOutputLineCount(): number;\n\tgetWrappedLinesIndent(): string;\n\tgetInputOffsetOfOutputPosition(outputLineIndex: number, outputOffset: number): number;\n\tgetOutputPositionOfInputOffset(inputOffset: number): OutputPosition;\n}\n\nexport interface ILineMapperFactory {\n\tcreateLineMapping(lineText: string, tabSize: number, wrappingColumn: number, columnsForFullWidthChar: number, wrappingIndent: WrappingIndent): ILineMapping;\n}\n\nexport interface IModel {\n\tgetLineTokens(lineNumber: number): LineTokens;\n\tgetLineContent(lineNumber: number): string;\n\tgetLineMinColumn(lineNumber: number): number;\n\tgetLineMaxColumn(lineNumber: number): number;\n}\n\nexport interface ISplitLine {\n\tisVisible(): boolean;\n\tsetVisible(isVisible: boolean): ISplitLine;\n\n\tgetViewLineCount(): number;\n\tgetViewLineContent(model: IModel, modelLineNumber: number, outputLineIndex: number): string;\n\tgetViewLineMinColumn(model: IModel, modelLineNumber: number, outputLineIndex: number): number;\n\tgetViewLineMaxColumn(model: IModel, modelLineNumber: number, outputLineIndex: number): number;\n\tgetViewLineData(model: IModel, modelLineNumber: number, outputLineIndex: number): ViewLineData;\n\tgetViewLinesData(model: IModel, modelLineNumber: number, fromOuputLineIndex: number, toOutputLineIndex: number, globalStartIndex: number, needed: boolean[], result: ViewLineData[]): void;\n\n\tgetModelColumnOfViewPosition(outputLineIndex: number, outputColumn: number): number;\n\tgetViewPositionOfModelPosition(deltaLineNumber: number, inputColumn: number): Position;\n}\n\nexport class SplitLinesCollection {\n\n\tprivate model: editorCommon.IModel;\n\tprivate _validModelVersionId: number;\n\n\tprivate wrappingColumn: number;\n\tprivate columnsForFullWidthChar: number;\n\tprivate wrappingIndent: WrappingIndent;\n\tprivate tabSize: number;\n\tprivate lines: ISplitLine[];\n\n\tprivate prefixSumComputer: PrefixSumComputerWithCache;\n\n\tprivate linePositionMapperFactory: ILineMapperFactory;\n\n\tprivate hiddenAreasIds: string[];\n\n\tconstructor(model: editorCommon.IModel, linePositionMapperFactory: ILineMapperFactory, tabSize: number, wrappingColumn: number, columnsForFullWidthChar: number, wrappingIndent: WrappingIndent) {\n\t\tthis.model = model;\n\t\tthis._validModelVersionId = -1;\n\t\tthis.tabSize = tabSize;\n\t\tthis.wrappingColumn = wrappingColumn;\n\t\tthis.columnsForFullWidthChar = columnsForFullWidthChar;\n\t\tthis.wrappingIndent = wrappingIndent;\n\t\tthis.linePositionMapperFactory = linePositionMapperFactory;\n\n\t\tthis._constructLines(true);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.hiddenAreasIds = this.model.deltaDecorations(this.hiddenAreasIds, []);\n\t}\n\n\tprivate _ensureValidState(): void {\n\t\tlet modelVersion = this.model.getVersionId();\n\t\tif (modelVersion !== this._validModelVersionId) {\n\t\t\tthrow new Error('SplitLinesCollection: attempt to access a \\'newer\\' model');\n\t\t}\n\t}\n\n\tprivate _constructLines(resetHiddenAreas: boolean): void {\n\t\tthis.lines = [];\n\n\t\tif (resetHiddenAreas) {\n\t\t\tthis.hiddenAreasIds = [];\n\t\t}\n\n\t\tlet linesContent = this.model.getLinesContent();\n\t\tlet lineCount = linesContent.length;\n\t\tlet values = new Uint32Array(lineCount);\n\n\t\tlet hiddenAreas = this.hiddenAreasIds.map((areaId) => this.model.getDecorationRange(areaId)).sort(Range.compareRangesUsingStarts);\n\t\tlet hiddenAreaStart = 1, hiddenAreaEnd = 0;\n\t\tlet hiddenAreaIdx = -1;\n\t\tlet nextLineNumberToUpdateHiddenArea = (hiddenAreaIdx + 1 < hiddenAreas.length) ? hiddenAreaEnd + 1 : lineCount + 2;\n\n\t\tfor (let i = 0; i < lineCount; i++) {\n\t\t\tlet lineNumber = i + 1;\n\n\t\t\tif (lineNumber === nextLineNumberToUpdateHiddenArea) {\n\t\t\t\thiddenAreaIdx++;\n\t\t\t\thiddenAreaStart = hiddenAreas[hiddenAreaIdx].startLineNumber;\n\t\t\t\thiddenAreaEnd = hiddenAreas[hiddenAreaIdx].endLineNumber;\n\t\t\t\tnextLineNumberToUpdateHiddenArea = (hiddenAreaIdx + 1 < hiddenAreas.length) ? hiddenAreaEnd + 1 : lineCount + 2;\n\t\t\t}\n\n\t\t\tlet isInHiddenArea = (lineNumber >= hiddenAreaStart && lineNumber <= hiddenAreaEnd);\n\t\t\tlet line = createSplitLine(this.linePositionMapperFactory, linesContent[i], this.tabSize, this.wrappingColumn, this.columnsForFullWidthChar, this.wrappingIndent, !isInHiddenArea);\n\t\t\tvalues[i] = line.getViewLineCount();\n\t\t\tthis.lines[i] = line;\n\t\t}\n\n\t\tthis._validModelVersionId = this.model.getVersionId();\n\n\t\tthis.prefixSumComputer = new PrefixSumComputerWithCache(values);\n\t}\n\n\tprivate getHiddenAreas(): Range[] {\n\t\treturn this.hiddenAreasIds.map((decId) => {\n\t\t\treturn this.model.getDecorationRange(decId);\n\t\t}).sort(Range.compareRangesUsingStarts);\n\t}\n\n\tprivate _reduceRanges(_ranges: Range[]): Range[] {\n\t\tif (_ranges.length === 0) {\n\t\t\treturn [];\n\t\t}\n\t\tlet ranges = _ranges.map(r => this.model.validateRange(r)).sort(Range.compareRangesUsingStarts);\n\n\t\tlet result: Range[] = [];\n\t\tlet currentRangeStart = ranges[0].startLineNumber;\n\t\tlet currentRangeEnd = ranges[0].endLineNumber;\n\n\t\tfor (let i = 1, len = ranges.length; i < len; i++) {\n\t\t\tlet range = ranges[i];\n\n\t\t\tif (range.startLineNumber > currentRangeEnd + 1) {\n\t\t\t\tresult.push(new Range(currentRangeStart, 1, currentRangeEnd, 1));\n\t\t\t\tcurrentRangeStart = range.startLineNumber;\n\t\t\t\tcurrentRangeEnd = range.endLineNumber;\n\t\t\t} else if (range.endLineNumber > currentRangeEnd) {\n\t\t\t\tcurrentRangeEnd = range.endLineNumber;\n\t\t\t}\n\t\t}\n\t\tresult.push(new Range(currentRangeStart, 1, currentRangeEnd, 1));\n\t\treturn result;\n\t}\n\n\tpublic setHiddenAreas(_ranges: Range[]): boolean {\n\n\t\tlet newRanges = this._reduceRanges(_ranges);\n\n\t\t// BEGIN TODO@Martin: Please stop calling this method on each model change!\n\t\tlet oldRanges = this.hiddenAreasIds.map((areaId) => this.model.getDecorationRange(areaId)).sort(Range.compareRangesUsingStarts);\n\n\t\tif (newRanges.length === oldRanges.length) {\n\t\t\tlet hasDifference = false;\n\t\t\tfor (let i = 0; i < newRanges.length; i++) {\n\t\t\t\tif (!newRanges[i].equalsRange(oldRanges[i])) {\n\t\t\t\t\thasDifference = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!hasDifference) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\t// END TODO@Martin: Please stop calling this method on each model change!\n\n\t\tlet newDecorations: editorCommon.IModelDeltaDecoration[] = [];\n\t\tfor (let i = 0; i < newRanges.length; i++) {\n\t\t\tnewDecorations.push({\n\t\t\t\trange: newRanges[i],\n\t\t\t\toptions: ModelDecorationOptions.EMPTY\n\t\t\t});\n\t\t}\n\n\t\tthis.hiddenAreasIds = this.model.deltaDecorations(this.hiddenAreasIds, newDecorations);\n\n\t\tlet hiddenAreas = newRanges;\n\t\tlet hiddenAreaStart = 1, hiddenAreaEnd = 0;\n\t\tlet hiddenAreaIdx = -1;\n\t\tlet nextLineNumberToUpdateHiddenArea = (hiddenAreaIdx + 1 < hiddenAreas.length) ? hiddenAreaEnd + 1 : this.lines.length + 2;\n\n\t\tfor (let i = 0; i < this.lines.length; i++) {\n\t\t\tlet lineNumber = i + 1;\n\n\t\t\tif (lineNumber === nextLineNumberToUpdateHiddenArea) {\n\t\t\t\thiddenAreaIdx++;\n\t\t\t\thiddenAreaStart = hiddenAreas[hiddenAreaIdx].startLineNumber;\n\t\t\t\thiddenAreaEnd = hiddenAreas[hiddenAreaIdx].endLineNumber;\n\t\t\t\tnextLineNumberToUpdateHiddenArea = (hiddenAreaIdx + 1 < hiddenAreas.length) ? hiddenAreaEnd + 1 : this.lines.length + 2;\n\t\t\t}\n\n\t\t\tlet lineChanged = false;\n\t\t\tif (lineNumber >= hiddenAreaStart && lineNumber <= hiddenAreaEnd) {\n\t\t\t\t// Line should be hidden\n\t\t\t\tif (this.lines[i].isVisible()) {\n\t\t\t\t\tthis.lines[i] = this.lines[i].setVisible(false);\n\t\t\t\t\tlineChanged = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Line should be visible\n\t\t\t\tif (!this.lines[i].isVisible()) {\n\t\t\t\t\tthis.lines[i] = this.lines[i].setVisible(true);\n\t\t\t\t\tlineChanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (lineChanged) {\n\t\t\t\tlet newOutputLineCount = this.lines[i].getViewLineCount();\n\t\t\t\tthis.prefixSumComputer.changeValue(i, newOutputLineCount);\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic modelPositionIsVisible(modelLineNumber: number, modelColumn: number): boolean {\n\t\tif (modelLineNumber < 1 || modelLineNumber > this.lines.length) {\n\t\t\t// invalid arguments\n\t\t\treturn false;\n\t\t}\n\t\treturn this.lines[modelLineNumber - 1].isVisible();\n\t}\n\n\tpublic setTabSize(newTabSize: number): boolean {\n\t\tif (this.tabSize === newTabSize) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.tabSize = newTabSize;\n\n\t\tthis._constructLines(false);\n\n\t\treturn true;\n\t}\n\n\tpublic setWrappingSettings(wrappingIndent: WrappingIndent, wrappingColumn: number, columnsForFullWidthChar: number): boolean {\n\t\tif (this.wrappingIndent === wrappingIndent && this.wrappingColumn === wrappingColumn && this.columnsForFullWidthChar === columnsForFullWidthChar) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.wrappingIndent = wrappingIndent;\n\t\tthis.wrappingColumn = wrappingColumn;\n\t\tthis.columnsForFullWidthChar = columnsForFullWidthChar;\n\n\t\tthis._constructLines(false);\n\n\t\treturn true;\n\t}\n\n\tpublic onModelFlushed(): void {\n\t\tthis._constructLines(true);\n\t}\n\n\tpublic onModelLinesDeleted(versionId: number, fromLineNumber: number, toLineNumber: number): viewEvents.ViewLinesDeletedEvent {\n\t\tif (versionId <= this._validModelVersionId) {\n\t\t\t// Here we check for versionId in case the lines were reconstructed in the meantime.\n\t\t\t// We don't want to apply stale change events on top of a newer read model state.\n\t\t\treturn null;\n\t\t}\n\n\t\tlet outputFromLineNumber = (fromLineNumber === 1 ? 1 : this.prefixSumComputer.getAccumulatedValue(fromLineNumber - 2) + 1);\n\t\tlet outputToLineNumber = this.prefixSumComputer.getAccumulatedValue(toLineNumber - 1);\n\n\t\tthis.lines.splice(fromLineNumber - 1, toLineNumber - fromLineNumber + 1);\n\t\tthis.prefixSumComputer.removeValues(fromLineNumber - 1, toLineNumber - fromLineNumber + 1);\n\n\t\treturn new viewEvents.ViewLinesDeletedEvent(outputFromLineNumber, outputToLineNumber);\n\t}\n\n\tpublic onModelLinesInserted(versionId: number, fromLineNumber: number, toLineNumber: number, text: string[]): viewEvents.ViewLinesInsertedEvent {\n\t\tif (versionId <= this._validModelVersionId) {\n\t\t\t// Here we check for versionId in case the lines were reconstructed in the meantime.\n\t\t\t// We don't want to apply stale change events on top of a newer read model state.\n\t\t\treturn null;\n\t\t}\n\n\t\tlet hiddenAreas = this.getHiddenAreas();\n\t\tlet isInHiddenArea = false;\n\t\tlet testPosition = new Position(fromLineNumber, 1);\n\t\tfor (let i = 0; i < hiddenAreas.length; i++) {\n\t\t\tif (hiddenAreas[i].containsPosition(testPosition)) {\n\t\t\t\tisInHiddenArea = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tlet outputFromLineNumber = (fromLineNumber === 1 ? 1 : this.prefixSumComputer.getAccumulatedValue(fromLineNumber - 2) + 1);\n\n\t\tlet totalOutputLineCount = 0;\n\t\tlet insertLines: ISplitLine[] = [];\n\t\tlet insertPrefixSumValues = new Uint32Array(text.length);\n\n\t\tfor (let i = 0, len = text.length; i < len; i++) {\n\t\t\tlet line = createSplitLine(this.linePositionMapperFactory, text[i], this.tabSize, this.wrappingColumn, this.columnsForFullWidthChar, this.wrappingIndent, !isInHiddenArea);\n\t\t\tinsertLines.push(line);\n\n\t\t\tlet outputLineCount = line.getViewLineCount();\n\t\t\ttotalOutputLineCount += outputLineCount;\n\t\t\tinsertPrefixSumValues[i] = outputLineCount;\n\t\t}\n\n\t\tthis.lines = this.lines.slice(0, fromLineNumber - 1).concat(insertLines).concat(this.lines.slice(fromLineNumber - 1));\n\n\t\tthis.prefixSumComputer.insertValues(fromLineNumber - 1, insertPrefixSumValues);\n\n\t\treturn new viewEvents.ViewLinesInsertedEvent(outputFromLineNumber, outputFromLineNumber + totalOutputLineCount - 1);\n\t}\n\n\tpublic onModelLineChanged(versionId: number, lineNumber: number, newText: string): [boolean, viewEvents.ViewLinesChangedEvent, viewEvents.ViewLinesInsertedEvent, viewEvents.ViewLinesDeletedEvent] {\n\t\tif (versionId <= this._validModelVersionId) {\n\t\t\t// Here we check for versionId in case the lines were reconstructed in the meantime.\n\t\t\t// We don't want to apply stale change events on top of a newer read model state.\n\t\t\treturn [false, null, null, null];\n\t\t}\n\n\t\tlet lineIndex = lineNumber - 1;\n\n\t\tlet oldOutputLineCount = this.lines[lineIndex].getViewLineCount();\n\t\tlet isVisible = this.lines[lineIndex].isVisible();\n\t\tlet line = createSplitLine(this.linePositionMapperFactory, newText, this.tabSize, this.wrappingColumn, this.columnsForFullWidthChar, this.wrappingIndent, isVisible);\n\t\tthis.lines[lineIndex] = line;\n\t\tlet newOutputLineCount = this.lines[lineIndex].getViewLineCount();\n\n\t\tlet lineMappingChanged = false;\n\t\tlet changeFrom = 0;\n\t\tlet changeTo = -1;\n\t\tlet insertFrom = 0;\n\t\tlet insertTo = -1;\n\t\tlet deleteFrom = 0;\n\t\tlet deleteTo = -1;\n\n\t\tif (oldOutputLineCount > newOutputLineCount) {\n\t\t\tchangeFrom = (lineNumber === 1 ? 1 : this.prefixSumComputer.getAccumulatedValue(lineNumber - 2) + 1);\n\t\t\tchangeTo = changeFrom + newOutputLineCount - 1;\n\t\t\tdeleteFrom = changeTo + 1;\n\t\t\tdeleteTo = deleteFrom + (oldOutputLineCount - newOutputLineCount) - 1;\n\t\t\tlineMappingChanged = true;\n\t\t} else if (oldOutputLineCount < newOutputLineCount) {\n\t\t\tchangeFrom = (lineNumber === 1 ? 1 : this.prefixSumComputer.getAccumulatedValue(lineNumber - 2) + 1);\n\t\t\tchangeTo = changeFrom + oldOutputLineCount - 1;\n\t\t\tinsertFrom = changeTo + 1;\n\t\t\tinsertTo = insertFrom + (newOutputLineCount - oldOutputLineCount) - 1;\n\t\t\tlineMappingChanged = true;\n\t\t} else {\n\t\t\tchangeFrom = (lineNumber === 1 ? 1 : this.prefixSumComputer.getAccumulatedValue(lineNumber - 2) + 1);\n\t\t\tchangeTo = changeFrom + newOutputLineCount - 1;\n\t\t}\n\n\t\tthis.prefixSumComputer.changeValue(lineIndex, newOutputLineCount);\n\n\t\tconst viewLinesChangedEvent = (changeFrom <= changeTo ? new viewEvents.ViewLinesChangedEvent(changeFrom, changeTo) : null);\n\t\tconst viewLinesInsertedEvent = (insertFrom <= insertTo ? new viewEvents.ViewLinesInsertedEvent(insertFrom, insertTo) : null);\n\t\tconst viewLinesDeletedEvent = (deleteFrom <= deleteTo ? new viewEvents.ViewLinesDeletedEvent(deleteFrom, deleteTo) : null);\n\n\t\treturn [lineMappingChanged, viewLinesChangedEvent, viewLinesInsertedEvent, viewLinesDeletedEvent];\n\t}\n\n\tpublic acceptVersionId(versionId: number): void {\n\t\tthis._validModelVersionId = versionId;\n\t}\n\n\tpublic getViewLineCount(): number {\n\t\tthis._ensureValidState();\n\t\treturn this.prefixSumComputer.getTotalValue();\n\t}\n\n\tprivate _toValidViewLineNumber(viewLineNumber: number): number {\n\t\tif (viewLineNumber < 1) {\n\t\t\treturn 1;\n\t\t}\n\t\tlet viewLineCount = this.getViewLineCount();\n\t\tif (viewLineNumber > viewLineCount) {\n\t\t\treturn viewLineCount;\n\t\t}\n\t\treturn viewLineNumber;\n\t}\n\n\t/**\n\t * Gives a hint that a lot of requests are about to come in for these line numbers.\n\t */\n\tpublic warmUpLookupCache(viewStartLineNumber: number, viewEndLineNumber: number): void {\n\t\tthis.prefixSumComputer.warmUpCache(viewStartLineNumber - 1, viewEndLineNumber - 1);\n\t}\n\n\tpublic getViewLineIndentGuide(viewLineNumber: number): number {\n\t\tthis._ensureValidState();\n\t\tviewLineNumber = this._toValidViewLineNumber(viewLineNumber);\n\t\tlet r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1);\n\t\treturn this.model.getLineIndentGuide(r.index + 1);\n\t}\n\n\tpublic getViewLineContent(viewLineNumber: number): string {\n\t\tthis._ensureValidState();\n\t\tviewLineNumber = this._toValidViewLineNumber(viewLineNumber);\n\t\tlet r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1);\n\t\tlet lineIndex = r.index;\n\t\tlet remainder = r.remainder;\n\n\t\treturn this.lines[lineIndex].getViewLineContent(this.model, lineIndex + 1, remainder);\n\t}\n\n\tpublic getViewLineMinColumn(viewLineNumber: number): number {\n\t\tthis._ensureValidState();\n\t\tviewLineNumber = this._toValidViewLineNumber(viewLineNumber);\n\t\tlet r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1);\n\t\tlet lineIndex = r.index;\n\t\tlet remainder = r.remainder;\n\n\t\treturn this.lines[lineIndex].getViewLineMinColumn(this.model, lineIndex + 1, remainder);\n\t}\n\n\tpublic getViewLineMaxColumn(viewLineNumber: number): number {\n\t\tthis._ensureValidState();\n\t\tviewLineNumber = this._toValidViewLineNumber(viewLineNumber);\n\t\tlet r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1);\n\t\tlet lineIndex = r.index;\n\t\tlet remainder = r.remainder;\n\n\t\treturn this.lines[lineIndex].getViewLineMaxColumn(this.model, lineIndex + 1, remainder);\n\t}\n\n\tpublic getViewLineData(viewLineNumber: number): ViewLineData {\n\t\tthis._ensureValidState();\n\t\tviewLineNumber = this._toValidViewLineNumber(viewLineNumber);\n\t\tlet r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1);\n\t\tlet lineIndex = r.index;\n\t\tlet remainder = r.remainder;\n\n\t\treturn this.lines[lineIndex].getViewLineData(this.model, lineIndex + 1, remainder);\n\t}\n\n\tpublic getViewLinesData(viewStartLineNumber: number, viewEndLineNumber: number, needed: boolean[]): ViewLineData[] {\n\t\tthis._ensureValidState();\n\n\t\tviewStartLineNumber = this._toValidViewLineNumber(viewStartLineNumber);\n\t\tviewEndLineNumber = this._toValidViewLineNumber(viewEndLineNumber);\n\n\t\tlet start = this.prefixSumComputer.getIndexOf(viewStartLineNumber - 1);\n\t\tlet viewLineNumber = viewStartLineNumber;\n\t\tlet startModelLineIndex = start.index;\n\t\tlet startRemainder = start.remainder;\n\n\t\tlet result: ViewLineData[] = [];\n\t\tfor (let modelLineIndex = startModelLineIndex, len = this.model.getLineCount(); modelLineIndex < len; modelLineIndex++) {\n\t\t\tlet line = this.lines[modelLineIndex];\n\t\t\tif (!line.isVisible()) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet fromViewLineIndex = (modelLineIndex === startModelLineIndex ? startRemainder : 0);\n\t\t\tlet remainingViewLineCount = line.getViewLineCount() - fromViewLineIndex;\n\n\t\t\tlet lastLine = false;\n\t\t\tif (viewLineNumber + remainingViewLineCount > viewEndLineNumber) {\n\t\t\t\tlastLine = true;\n\t\t\t\tremainingViewLineCount = viewEndLineNumber - viewLineNumber + 1;\n\t\t\t}\n\t\t\tlet toViewLineIndex = fromViewLineIndex + remainingViewLineCount;\n\n\t\t\tline.getViewLinesData(this.model, modelLineIndex + 1, fromViewLineIndex, toViewLineIndex, viewLineNumber - viewStartLineNumber, needed, result);\n\n\t\t\tviewLineNumber += remainingViewLineCount;\n\n\t\t\tif (lastLine) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic validateViewPosition(viewLineNumber: number, viewColumn: number, expectedModelPosition: Position): Position {\n\t\tthis._ensureValidState();\n\t\tviewLineNumber = this._toValidViewLineNumber(viewLineNumber);\n\n\t\tlet r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1);\n\t\tlet lineIndex = r.index;\n\t\tlet remainder = r.remainder;\n\n\t\tlet line = this.lines[lineIndex];\n\n\t\tlet minColumn = line.getViewLineMinColumn(this.model, lineIndex + 1, remainder);\n\t\tlet maxColumn = line.getViewLineMaxColumn(this.model, lineIndex + 1, remainder);\n\t\tif (viewColumn < minColumn) {\n\t\t\tviewColumn = minColumn;\n\t\t}\n\t\tif (viewColumn > maxColumn) {\n\t\t\tviewColumn = maxColumn;\n\t\t}\n\n\t\tlet computedModelColumn = line.getModelColumnOfViewPosition(remainder, viewColumn);\n\t\tlet computedModelPosition = this.model.validatePosition(new Position(lineIndex + 1, computedModelColumn));\n\n\t\tif (computedModelPosition.equals(expectedModelPosition)) {\n\t\t\treturn new Position(viewLineNumber, viewColumn);\n\t\t}\n\n\t\treturn this.convertModelPositionToViewPosition(expectedModelPosition.lineNumber, expectedModelPosition.column);\n\t}\n\n\tpublic convertViewPositionToModelPosition(viewLineNumber: number, viewColumn: number): Position {\n\t\tthis._ensureValidState();\n\t\tviewLineNumber = this._toValidViewLineNumber(viewLineNumber);\n\n\t\tlet r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1);\n\t\tlet lineIndex = r.index;\n\t\tlet remainder = r.remainder;\n\n\t\tlet inputColumn = this.lines[lineIndex].getModelColumnOfViewPosition(remainder, viewColumn);\n\t\t// console.log('out -> in ' + viewLineNumber + ',' + viewColumn + ' ===> ' + (lineIndex+1) + ',' + inputColumn);\n\t\treturn this.model.validatePosition(new Position(lineIndex + 1, inputColumn));\n\t}\n\n\tpublic convertModelPositionToViewPosition(_modelLineNumber: number, _modelColumn: number): Position {\n\t\tthis._ensureValidState();\n\n\t\tlet validPosition = this.model.validatePosition(new Position(_modelLineNumber, _modelColumn));\n\t\tlet inputLineNumber = validPosition.lineNumber;\n\t\tlet inputColumn = validPosition.column;\n\n\t\tlet lineIndex = inputLineNumber - 1, lineIndexChanged = false;\n\t\twhile (lineIndex > 0 && !this.lines[lineIndex].isVisible()) {\n\t\t\tlineIndex--;\n\t\t\tlineIndexChanged = true;\n\t\t}\n\t\tif (lineIndex === 0 && !this.lines[lineIndex].isVisible()) {\n\t\t\t// Could not reach a real line\n\t\t\t// console.log('in -> out ' + inputLineNumber + ',' + inputColumn + ' ===> ' + 1 + ',' + 1);\n\t\t\treturn new Position(1, 1);\n\t\t}\n\t\tlet deltaLineNumber = 1 + (lineIndex === 0 ? 0 : this.prefixSumComputer.getAccumulatedValue(lineIndex - 1));\n\n\t\tlet r: Position;\n\t\tif (lineIndexChanged) {\n\t\t\tr = this.lines[lineIndex].getViewPositionOfModelPosition(deltaLineNumber, this.model.getLineMaxColumn(lineIndex + 1));\n\t\t} else {\n\t\t\tr = this.lines[inputLineNumber - 1].getViewPositionOfModelPosition(deltaLineNumber, inputColumn);\n\t\t}\n\n\t\t// console.log('in -> out ' + inputLineNumber + ',' + inputColumn + ' ===> ' + r.lineNumber + ',' + r);\n\t\treturn r;\n\t}\n}\n\nclass VisibleIdentitySplitLine implements ISplitLine {\n\n\tpublic static INSTANCE = new VisibleIdentitySplitLine();\n\n\tprivate constructor() { }\n\n\tpublic isVisible(): boolean {\n\t\treturn true;\n\t}\n\n\tpublic setVisible(isVisible: boolean): ISplitLine {\n\t\tif (isVisible) {\n\t\t\treturn this;\n\t\t}\n\t\treturn InvisibleIdentitySplitLine.INSTANCE;\n\t}\n\n\tpublic getViewLineCount(): number {\n\t\treturn 1;\n\t}\n\n\tpublic getViewLineContent(model: IModel, modelLineNumber: number, outputLineIndex: number): string {\n\t\treturn model.getLineContent(modelLineNumber);\n\t}\n\n\tpublic getViewLineMinColumn(model: IModel, modelLineNumber: number, outputLineIndex: number): number {\n\t\treturn model.getLineMinColumn(modelLineNumber);\n\t}\n\n\tpublic getViewLineMaxColumn(model: IModel, modelLineNumber: number, outputLineIndex: number): number {\n\t\treturn model.getLineMaxColumn(modelLineNumber);\n\t}\n\n\tpublic getViewLineData(model: IModel, modelLineNumber: number, outputLineIndex: number): ViewLineData {\n\t\tlet lineTokens = model.getLineTokens(modelLineNumber);\n\t\tlet lineContent = lineTokens.getLineContent();\n\t\treturn new ViewLineData(\n\t\t\tlineContent,\n\t\t\t1,\n\t\t\tlineContent.length + 1,\n\t\t\tlineTokens.inflate()\n\t\t);\n\t}\n\n\tpublic getViewLinesData(model: IModel, modelLineNumber: number, fromOuputLineIndex: number, toOutputLineIndex: number, globalStartIndex: number, needed: boolean[], result: ViewLineData[]): void {\n\t\tif (!needed[globalStartIndex]) {\n\t\t\tresult[globalStartIndex] = null;\n\t\t\treturn;\n\t\t}\n\t\tresult[globalStartIndex] = this.getViewLineData(model, modelLineNumber, 0);\n\t}\n\n\tpublic getModelColumnOfViewPosition(outputLineIndex: number, outputColumn: number): number {\n\t\treturn outputColumn;\n\t}\n\n\tpublic getViewPositionOfModelPosition(deltaLineNumber: number, inputColumn: number): Position {\n\t\treturn new Position(deltaLineNumber, inputColumn);\n\t}\n}\n\nclass InvisibleIdentitySplitLine implements ISplitLine {\n\n\tpublic static INSTANCE = new InvisibleIdentitySplitLine();\n\n\tprivate constructor() { }\n\n\tpublic isVisible(): boolean {\n\t\treturn false;\n\t}\n\n\tpublic setVisible(isVisible: boolean): ISplitLine {\n\t\tif (!isVisible) {\n\t\t\treturn this;\n\t\t}\n\t\treturn VisibleIdentitySplitLine.INSTANCE;\n\t}\n\n\tpublic getViewLineCount(): number {\n\t\treturn 0;\n\t}\n\n\tpublic getViewLineContent(model: IModel, modelLineNumber: number, outputLineIndex: number): string {\n\t\tthrow new Error('Not supported');\n\t}\n\n\tpublic getViewLineMinColumn(model: IModel, modelLineNumber: number, outputLineIndex: number): number {\n\t\tthrow new Error('Not supported');\n\t}\n\n\tpublic getViewLineMaxColumn(model: IModel, modelLineNumber: number, outputLineIndex: number): number {\n\t\tthrow new Error('Not supported');\n\t}\n\n\tpublic getViewLineData(model: IModel, modelLineNumber: number, outputLineIndex: number): ViewLineData {\n\t\tthrow new Error('Not supported');\n\t}\n\n\tpublic getViewLinesData(model: IModel, modelLineNumber: number, fromOuputLineIndex: number, toOutputLineIndex: number, globalStartIndex: number, needed: boolean[], result: ViewLineData[]): void {\n\t\tthrow new Error('Not supported');\n\t}\n\n\tpublic getModelColumnOfViewPosition(outputLineIndex: number, outputColumn: number): number {\n\t\tthrow new Error('Not supported');\n\t}\n\n\tpublic getViewPositionOfModelPosition(deltaLineNumber: number, inputColumn: number): Position {\n\t\tthrow new Error('Not supported');\n\t}\n}\n\nexport class SplitLine implements ISplitLine {\n\n\tprivate positionMapper: ILineMapping;\n\tprivate outputLineCount: number;\n\n\tprivate wrappedIndent: string;\n\tprivate wrappedIndentLength: number;\n\tprivate _isVisible: boolean;\n\n\tconstructor(positionMapper: ILineMapping, isVisible: boolean) {\n\t\tthis.positionMapper = positionMapper;\n\t\tthis.wrappedIndent = this.positionMapper.getWrappedLinesIndent();\n\t\tthis.wrappedIndentLength = this.wrappedIndent.length;\n\t\tthis.outputLineCount = this.positionMapper.getOutputLineCount();\n\t\tthis._isVisible = isVisible;\n\t}\n\n\tpublic isVisible(): boolean {\n\t\treturn this._isVisible;\n\t}\n\n\tpublic setVisible(isVisible: boolean): ISplitLine {\n\t\tthis._isVisible = isVisible;\n\t\treturn this;\n\t}\n\n\tpublic getViewLineCount(): number {\n\t\tif (!this._isVisible) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn this.outputLineCount;\n\t}\n\n\tprivate getInputStartOffsetOfOutputLineIndex(outputLineIndex: number): number {\n\t\treturn this.positionMapper.getInputOffsetOfOutputPosition(outputLineIndex, 0);\n\t}\n\n\tprivate getInputEndOffsetOfOutputLineIndex(model: IModel, modelLineNumber: number, outputLineIndex: number): number {\n\t\tif (outputLineIndex + 1 === this.outputLineCount) {\n\t\t\treturn model.getLineMaxColumn(modelLineNumber) - 1;\n\t\t}\n\t\treturn this.positionMapper.getInputOffsetOfOutputPosition(outputLineIndex + 1, 0);\n\t}\n\n\tpublic getViewLineContent(model: IModel, modelLineNumber: number, outputLineIndex: number): string {\n\t\tif (!this._isVisible) {\n\t\t\tthrow new Error('Not supported');\n\t\t}\n\t\tlet startOffset = this.getInputStartOffsetOfOutputLineIndex(outputLineIndex);\n\t\tlet endOffset = this.getInputEndOffsetOfOutputLineIndex(model, modelLineNumber, outputLineIndex);\n\t\tlet r = model.getLineContent(modelLineNumber).substring(startOffset, endOffset);\n\n\t\tif (outputLineIndex > 0) {\n\t\t\tr = this.wrappedIndent + r;\n\t\t}\n\n\t\treturn r;\n\t}\n\n\tpublic getViewLineMinColumn(model: IModel, modelLineNumber: number, outputLineIndex: number): number {\n\t\tif (!this._isVisible) {\n\t\t\tthrow new Error('Not supported');\n\t\t}\n\t\tif (outputLineIndex > 0) {\n\t\t\treturn this.wrappedIndentLength + 1;\n\t\t}\n\t\treturn 1;\n\t}\n\n\tpublic getViewLineMaxColumn(model: IModel, modelLineNumber: number, outputLineIndex: number): number {\n\t\tif (!this._isVisible) {\n\t\t\tthrow new Error('Not supported');\n\t\t}\n\t\treturn this.getViewLineContent(model, modelLineNumber, outputLineIndex).length + 1;\n\t}\n\n\tpublic getViewLineData(model: IModel, modelLineNumber: number, outputLineIndex: number): ViewLineData {\n\t\tif (!this._isVisible) {\n\t\t\tthrow new Error('Not supported');\n\t\t}\n\n\t\tlet startOffset = this.getInputStartOffsetOfOutputLineIndex(outputLineIndex);\n\t\tlet endOffset = this.getInputEndOffsetOfOutputLineIndex(model, modelLineNumber, outputLineIndex);\n\n\t\tlet lineContent = model.getLineContent(modelLineNumber).substring(startOffset, endOffset);\n\t\tif (outputLineIndex > 0) {\n\t\t\tlineContent = this.wrappedIndent + lineContent;\n\t\t}\n\n\t\tlet minColumn = (outputLineIndex > 0 ? this.wrappedIndentLength + 1 : 1);\n\t\tlet maxColumn = lineContent.length + 1;\n\n\t\tlet deltaStartIndex = 0;\n\t\tif (outputLineIndex > 0) {\n\t\t\tdeltaStartIndex = this.wrappedIndentLength;\n\t\t}\n\t\tlet lineTokens = model.getLineTokens(modelLineNumber);\n\n\t\treturn new ViewLineData(\n\t\t\tlineContent,\n\t\t\tminColumn,\n\t\t\tmaxColumn,\n\t\t\tlineTokens.sliceAndInflate(startOffset, endOffset, deltaStartIndex)\n\t\t);\n\t}\n\n\tpublic getViewLinesData(model: IModel, modelLineNumber: number, fromOuputLineIndex: number, toOutputLineIndex: number, globalStartIndex: number, needed: boolean[], result: ViewLineData[]): void {\n\t\tif (!this._isVisible) {\n\t\t\tthrow new Error('Not supported');\n\t\t}\n\n\t\tfor (let outputLineIndex = fromOuputLineIndex; outputLineIndex < toOutputLineIndex; outputLineIndex++) {\n\t\t\tlet globalIndex = globalStartIndex + outputLineIndex - fromOuputLineIndex;\n\t\t\tif (!needed[globalIndex]) {\n\t\t\t\tresult[globalIndex] = null;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tresult[globalIndex] = this.getViewLineData(model, modelLineNumber, outputLineIndex);\n\t\t}\n\t}\n\n\tpublic getModelColumnOfViewPosition(outputLineIndex: number, outputColumn: number): number {\n\t\tif (!this._isVisible) {\n\t\t\tthrow new Error('Not supported');\n\t\t}\n\t\tlet adjustedColumn = outputColumn - 1;\n\t\tif (outputLineIndex > 0) {\n\t\t\tif (adjustedColumn < this.wrappedIndentLength) {\n\t\t\t\tadjustedColumn = 0;\n\t\t\t} else {\n\t\t\t\tadjustedColumn -= this.wrappedIndentLength;\n\t\t\t}\n\t\t}\n\t\treturn this.positionMapper.getInputOffsetOfOutputPosition(outputLineIndex, adjustedColumn) + 1;\n\t}\n\n\tpublic getViewPositionOfModelPosition(deltaLineNumber: number, inputColumn: number): Position {\n\t\tif (!this._isVisible) {\n\t\t\tthrow new Error('Not supported');\n\t\t}\n\t\tlet r = this.positionMapper.getOutputPositionOfInputOffset(inputColumn - 1);\n\t\tlet outputLineIndex = r.outputLineIndex;\n\t\tlet outputColumn = r.outputOffset + 1;\n\n\t\tif (outputLineIndex > 0) {\n\t\t\toutputColumn += this.wrappedIndentLength;\n\t\t}\n\n\t\t//\t\tconsole.log('in -> out ' + deltaLineNumber + ',' + inputColumn + ' ===> ' + (deltaLineNumber+outputLineIndex) + ',' + outputColumn);\n\t\treturn new Position(deltaLineNumber + outputLineIndex, outputColumn);\n\t}\n}\n\nfunction createSplitLine(linePositionMapperFactory: ILineMapperFactory, text: string, tabSize: number, wrappingColumn: number, columnsForFullWidthChar: number, wrappingIndent: WrappingIndent, isVisible: boolean): ISplitLine {\n\tlet positionMapper = linePositionMapperFactory.createLineMapping(text, tabSize, wrappingColumn, columnsForFullWidthChar, wrappingIndent);\n\tif (positionMapper === null) {\n\t\t// No mapping needed\n\t\tif (isVisible) {\n\t\t\treturn VisibleIdentitySplitLine.INSTANCE;\n\t\t}\n\t\treturn InvisibleIdentitySplitLine.INSTANCE;\n\t} else {\n\t\treturn new SplitLine(positionMapper, isVisible);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as strings from 'vs/base/common/strings';\nimport { PrefixSumComputer } from 'vs/editor/common/viewModel/prefixSumComputer';\nimport { ILineMapperFactory, ILineMapping, OutputPosition } from 'vs/editor/common/viewModel/splitLinesCollection';\nimport { CharCode } from 'vs/base/common/charCode';\nimport { CharacterClassifier } from 'vs/editor/common/core/characterClassifier';\nimport { toUint32Array } from 'vs/editor/common/core/uint';\nimport { WrappingIndent } from 'vs/editor/common/config/editorOptions';\n\nconst enum CharacterClass {\n\tNONE = 0,\n\tBREAK_BEFORE = 1,\n\tBREAK_AFTER = 2,\n\tBREAK_OBTRUSIVE = 3,\n\tBREAK_IDEOGRAPHIC = 4 // for Han and Kana.\n}\n\nclass WrappingCharacterClassifier extends CharacterClassifier {\n\n\tconstructor(BREAK_BEFORE: string, BREAK_AFTER: string, BREAK_OBTRUSIVE: string) {\n\t\tsuper(CharacterClass.NONE);\n\n\t\tfor (let i = 0; i < BREAK_BEFORE.length; i++) {\n\t\t\tthis.set(BREAK_BEFORE.charCodeAt(i), CharacterClass.BREAK_BEFORE);\n\t\t}\n\n\t\tfor (let i = 0; i < BREAK_AFTER.length; i++) {\n\t\t\tthis.set(BREAK_AFTER.charCodeAt(i), CharacterClass.BREAK_AFTER);\n\t\t}\n\n\t\tfor (let i = 0; i < BREAK_OBTRUSIVE.length; i++) {\n\t\t\tthis.set(BREAK_OBTRUSIVE.charCodeAt(i), CharacterClass.BREAK_OBTRUSIVE);\n\t\t}\n\t}\n\n\tpublic get(charCode: number): CharacterClass {\n\t\t// Initialize CharacterClass.BREAK_IDEOGRAPHIC for these Unicode ranges:\n\t\t// 1. CJK Unified Ideographs (0x4E00 -- 0x9FFF)\n\t\t// 2. CJK Unified Ideographs Extension A (0x3400 -- 0x4DBF)\n\t\t// 3. Hiragana and Katakana (0x3040 -- 0x30FF)\n\t\tif (\n\t\t\t(charCode >= 0x3040 && charCode <= 0x30FF)\n\t\t\t|| (charCode >= 0x3400 && charCode <= 0x4DBF)\n\t\t\t|| (charCode >= 0x4E00 && charCode <= 0x9FFF)\n\t\t) {\n\t\t\treturn CharacterClass.BREAK_IDEOGRAPHIC;\n\t\t}\n\n\t\treturn super.get(charCode);\n\t}\n}\n\nexport class CharacterHardWrappingLineMapperFactory implements ILineMapperFactory {\n\n\tprivate classifier: WrappingCharacterClassifier;\n\n\tconstructor(breakBeforeChars: string, breakAfterChars: string, breakObtrusiveChars: string) {\n\t\tthis.classifier = new WrappingCharacterClassifier(breakBeforeChars, breakAfterChars, breakObtrusiveChars);\n\t}\n\n\t// TODO@Alex -> duplicated in lineCommentCommand\n\tprivate static nextVisibleColumn(currentVisibleColumn: number, tabSize: number, isTab: boolean, columnSize: number): number {\n\t\tcurrentVisibleColumn = +currentVisibleColumn; //@perf\n\t\ttabSize = +tabSize; //@perf\n\t\tcolumnSize = +columnSize; //@perf\n\n\t\tif (isTab) {\n\t\t\treturn currentVisibleColumn + (tabSize - (currentVisibleColumn % tabSize));\n\t\t}\n\t\treturn currentVisibleColumn + columnSize;\n\t}\n\n\tpublic createLineMapping(lineText: string, tabSize: number, breakingColumn: number, columnsForFullWidthChar: number, hardWrappingIndent: WrappingIndent): ILineMapping {\n\t\tif (breakingColumn === -1) {\n\t\t\treturn null;\n\t\t}\n\n\t\ttabSize = +tabSize; //@perf\n\t\tbreakingColumn = +breakingColumn; //@perf\n\t\tcolumnsForFullWidthChar = +columnsForFullWidthChar; //@perf\n\t\thardWrappingIndent = +hardWrappingIndent; //@perf\n\n\t\tlet wrappedTextIndentVisibleColumn = 0;\n\t\tlet wrappedTextIndent = '';\n\n\t\tlet firstNonWhitespaceIndex = -1;\n\t\tif (hardWrappingIndent !== WrappingIndent.None) {\n\t\t\tfirstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineText);\n\t\t\tif (firstNonWhitespaceIndex !== -1) {\n\t\t\t\twrappedTextIndent = lineText.substring(0, firstNonWhitespaceIndex);\n\t\t\t\tfor (let i = 0; i < firstNonWhitespaceIndex; i++) {\n\t\t\t\t\twrappedTextIndentVisibleColumn = CharacterHardWrappingLineMapperFactory.nextVisibleColumn(wrappedTextIndentVisibleColumn, tabSize, lineText.charCodeAt(i) === CharCode.Tab, 1);\n\t\t\t\t}\n\t\t\t\tif (hardWrappingIndent === WrappingIndent.Indent) {\n\t\t\t\t\twrappedTextIndent += '\\t';\n\t\t\t\t\twrappedTextIndentVisibleColumn = CharacterHardWrappingLineMapperFactory.nextVisibleColumn(wrappedTextIndentVisibleColumn, tabSize, true, 1);\n\t\t\t\t}\n\t\t\t\t// Force sticking to beginning of line if indentColumn > 66% breakingColumn\n\t\t\t\tif (wrappedTextIndentVisibleColumn > 1 / 2 * breakingColumn) {\n\t\t\t\t\twrappedTextIndent = '';\n\t\t\t\t\twrappedTextIndentVisibleColumn = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet classifier = this.classifier;\n\t\tlet lastBreakingOffset = 0; // Last 0-based offset in the lineText at which a break happened\n\t\tlet breakingLengths: number[] = []; // The length of each broken-up line text\n\t\tlet breakingLengthsIndex: number = 0; // The count of breaks already done\n\t\tlet visibleColumn = 0; // Visible column since the beginning of the current line\n\t\tlet niceBreakOffset = -1; // Last index of a character that indicates a break should happen before it (more desirable)\n\t\tlet niceBreakVisibleColumn = 0; // visible column if a break were to be later introduced before `niceBreakOffset`\n\t\tlet obtrusiveBreakOffset = -1; // Last index of a character that indicates a break should happen before it (less desirable)\n\t\tlet obtrusiveBreakVisibleColumn = 0; // visible column if a break were to be later introduced before `obtrusiveBreakOffset`\n\t\tlet len = lineText.length;\n\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\t// At this point, there is a certainty that the character before `i` fits on the current line,\n\t\t\t// but the character at `i` might not fit\n\n\t\t\tlet charCode = lineText.charCodeAt(i);\n\t\t\tlet charCodeIsTab = (charCode === CharCode.Tab);\n\t\t\tlet charCodeClass = classifier.get(charCode);\n\n\t\t\tif (charCodeClass === CharacterClass.BREAK_BEFORE) {\n\t\t\t\t// This is a character that indicates that a break should happen before it\n\t\t\t\t// Since we are certain the character before `i` fits, there's no extra checking needed,\n\t\t\t\t// just mark it as a nice breaking opportunity\n\t\t\t\tniceBreakOffset = i;\n\t\t\t\tniceBreakVisibleColumn = wrappedTextIndentVisibleColumn;\n\t\t\t}\n\n\t\t\t// CJK breaking : before break\n\t\t\tif (charCodeClass === CharacterClass.BREAK_IDEOGRAPHIC && i > 0) {\n\t\t\t\tlet prevCode = lineText.charCodeAt(i - 1);\n\t\t\t\tlet prevClass = classifier.get(prevCode);\n\t\t\t\tif (prevClass !== CharacterClass.BREAK_BEFORE) { // Kinsoku Shori: Don't break after a leading character, like an open bracket\n\t\t\t\t\tniceBreakOffset = i;\n\t\t\t\t\tniceBreakVisibleColumn = wrappedTextIndentVisibleColumn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet charColumnSize = 1;\n\t\t\tif (strings.isFullWidthCharacter(charCode)) {\n\t\t\t\tcharColumnSize = columnsForFullWidthChar;\n\t\t\t}\n\n\t\t\t// Advance visibleColumn with character at `i`\n\t\t\tvisibleColumn = CharacterHardWrappingLineMapperFactory.nextVisibleColumn(visibleColumn, tabSize, charCodeIsTab, charColumnSize);\n\n\t\t\tif (visibleColumn > breakingColumn && i !== 0) {\n\t\t\t\t// We need to break at least before character at `i`:\n\t\t\t\t// - break before niceBreakLastOffset if it exists (and re-establish a correct visibleColumn by using niceBreakVisibleColumn + charAt(i))\n\t\t\t\t// - otherwise, break before obtrusiveBreakLastOffset if it exists (and re-establish a correct visibleColumn by using obtrusiveBreakVisibleColumn + charAt(i))\n\t\t\t\t// - otherwise, break before i (and re-establish a correct visibleColumn by charAt(i))\n\n\t\t\t\tlet breakBeforeOffset: number;\n\t\t\t\tlet restoreVisibleColumnFrom: number;\n\n\t\t\t\tif (niceBreakOffset !== -1 && niceBreakVisibleColumn <= breakingColumn) {\n\n\t\t\t\t\t// We will break before `niceBreakLastOffset`\n\t\t\t\t\tbreakBeforeOffset = niceBreakOffset;\n\t\t\t\t\trestoreVisibleColumnFrom = niceBreakVisibleColumn;\n\n\t\t\t\t} else if (obtrusiveBreakOffset !== -1 && obtrusiveBreakVisibleColumn <= breakingColumn) {\n\n\t\t\t\t\t// We will break before `obtrusiveBreakLastOffset`\n\t\t\t\t\tbreakBeforeOffset = obtrusiveBreakOffset;\n\t\t\t\t\trestoreVisibleColumnFrom = obtrusiveBreakVisibleColumn;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// We will break before `i`\n\t\t\t\t\tbreakBeforeOffset = i;\n\t\t\t\t\trestoreVisibleColumnFrom = wrappedTextIndentVisibleColumn;\n\n\t\t\t\t}\n\n\t\t\t\t// Break before character at `breakBeforeOffset`\n\t\t\t\tbreakingLengths[breakingLengthsIndex++] = breakBeforeOffset - lastBreakingOffset;\n\t\t\t\tlastBreakingOffset = breakBeforeOffset;\n\n\t\t\t\t// Re-establish visibleColumn by taking character at `i` into account\n\t\t\t\tvisibleColumn = CharacterHardWrappingLineMapperFactory.nextVisibleColumn(restoreVisibleColumnFrom, tabSize, charCodeIsTab, charColumnSize);\n\n\t\t\t\t// Reset markers\n\t\t\t\tniceBreakOffset = -1;\n\t\t\t\tniceBreakVisibleColumn = 0;\n\t\t\t\tobtrusiveBreakOffset = -1;\n\t\t\t\tobtrusiveBreakVisibleColumn = 0;\n\t\t\t}\n\n\t\t\t// At this point, there is a certainty that the character at `i` fits on the current line\n\n\t\t\tif (niceBreakOffset !== -1) {\n\t\t\t\t// Advance niceBreakVisibleColumn\n\t\t\t\tniceBreakVisibleColumn = CharacterHardWrappingLineMapperFactory.nextVisibleColumn(niceBreakVisibleColumn, tabSize, charCodeIsTab, charColumnSize);\n\t\t\t}\n\t\t\tif (obtrusiveBreakOffset !== -1) {\n\t\t\t\t// Advance obtrusiveBreakVisibleColumn\n\t\t\t\tobtrusiveBreakVisibleColumn = CharacterHardWrappingLineMapperFactory.nextVisibleColumn(obtrusiveBreakVisibleColumn, tabSize, charCodeIsTab, charColumnSize);\n\t\t\t}\n\n\t\t\tif (charCodeClass === CharacterClass.BREAK_AFTER && (hardWrappingIndent === WrappingIndent.None || i >= firstNonWhitespaceIndex)) {\n\t\t\t\t// This is a character that indicates that a break should happen after it\n\t\t\t\tniceBreakOffset = i + 1;\n\t\t\t\tniceBreakVisibleColumn = wrappedTextIndentVisibleColumn;\n\t\t\t}\n\n\t\t\t// CJK breaking : after break\n\t\t\tif (charCodeClass === CharacterClass.BREAK_IDEOGRAPHIC && i < len - 1) {\n\t\t\t\tlet nextCode = lineText.charCodeAt(i + 1);\n\t\t\t\tlet nextClass = classifier.get(nextCode);\n\t\t\t\tif (nextClass !== CharacterClass.BREAK_AFTER) { // Kinsoku Shori: Don't break before a trailing character, like a period\n\t\t\t\t\tniceBreakOffset = i + 1;\n\t\t\t\t\tniceBreakVisibleColumn = wrappedTextIndentVisibleColumn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (charCodeClass === CharacterClass.BREAK_OBTRUSIVE) {\n\t\t\t\t// This is an obtrusive character that indicates that a break should happen after it\n\t\t\t\tobtrusiveBreakOffset = i + 1;\n\t\t\t\tobtrusiveBreakVisibleColumn = wrappedTextIndentVisibleColumn;\n\t\t\t}\n\t\t}\n\n\t\tif (breakingLengthsIndex === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Add last segment\n\t\tbreakingLengths[breakingLengthsIndex++] = len - lastBreakingOffset;\n\n\t\treturn new CharacterHardWrappingLineMapping(\n\t\t\tnew PrefixSumComputer(toUint32Array(breakingLengths)),\n\t\t\twrappedTextIndent\n\t\t);\n\t}\n}\n\nexport class CharacterHardWrappingLineMapping implements ILineMapping {\n\n\tprivate _prefixSums: PrefixSumComputer;\n\tprivate _wrappedLinesIndent: string;\n\n\tconstructor(prefixSums: PrefixSumComputer, wrappedLinesIndent: string) {\n\t\tthis._prefixSums = prefixSums;\n\t\tthis._wrappedLinesIndent = wrappedLinesIndent;\n\t}\n\n\tpublic getOutputLineCount(): number {\n\t\treturn this._prefixSums.getCount();\n\t}\n\n\tpublic getWrappedLinesIndent(): string {\n\t\treturn this._wrappedLinesIndent;\n\t}\n\n\tpublic getInputOffsetOfOutputPosition(outputLineIndex: number, outputOffset: number): number {\n\t\tif (outputLineIndex === 0) {\n\t\t\treturn outputOffset;\n\t\t} else {\n\t\t\treturn this._prefixSums.getAccumulatedValue(outputLineIndex - 1) + outputOffset;\n\t\t}\n\t}\n\n\tpublic getOutputPositionOfInputOffset(inputOffset: number): OutputPosition {\n\t\tlet r = this._prefixSums.getIndexOf(inputOffset);\n\t\treturn new OutputPosition(r.index, r.remainder);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { EmitterEvent } from 'vs/base/common/eventEmitter';\nimport * as strings from 'vs/base/common/strings';\nimport { Position, IPosition } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { TokenizationRegistry, ColorId, LanguageId } from 'vs/editor/common/modes';\nimport { tokenizeLineToHTML } from 'vs/editor/common/modes/textToHtmlTokenizer';\nimport { ViewModelDecorations } from 'vs/editor/common/viewModel/viewModelDecorations';\nimport { MinimapLinesRenderingData, ViewLineRenderingData, ViewModelDecoration, IViewModel, ICoordinatesConverter, ViewEventsCollector } from 'vs/editor/common/viewModel/viewModel';\nimport { SplitLinesCollection } from 'vs/editor/common/viewModel/splitLinesCollection';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\nimport { MinimapTokensColorTracker } from 'vs/editor/common/view/minimapCharRenderer';\nimport * as textModelEvents from 'vs/editor/common/model/textModelEvents';\nimport { IConfigurationChangedEvent } from 'vs/editor/common/config/editorOptions';\nimport { CharacterHardWrappingLineMapperFactory } from 'vs/editor/common/viewModel/characterHardWrappingLineMapper';\nimport { ViewLayout } from 'vs/editor/common/viewLayout/viewLayout';\n\nexport class CoordinatesConverter implements ICoordinatesConverter {\n\n\tprivate readonly _lines: SplitLinesCollection;\n\n\tconstructor(lines: SplitLinesCollection) {\n\t\tthis._lines = lines;\n\t}\n\n\t// View -> Model conversion and related methods\n\n\tpublic convertViewPositionToModelPosition(viewPosition: Position): Position {\n\t\treturn this._lines.convertViewPositionToModelPosition(viewPosition.lineNumber, viewPosition.column);\n\t}\n\n\tpublic convertViewRangeToModelRange(viewRange: Range): Range {\n\t\tlet start = this._lines.convertViewPositionToModelPosition(viewRange.startLineNumber, viewRange.startColumn);\n\t\tlet end = this._lines.convertViewPositionToModelPosition(viewRange.endLineNumber, viewRange.endColumn);\n\t\treturn new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n\t}\n\n\tpublic convertViewSelectionToModelSelection(viewSelection: Selection): Selection {\n\t\tlet selectionStart = this._lines.convertViewPositionToModelPosition(viewSelection.selectionStartLineNumber, viewSelection.selectionStartColumn);\n\t\tlet position = this._lines.convertViewPositionToModelPosition(viewSelection.positionLineNumber, viewSelection.positionColumn);\n\t\treturn new Selection(selectionStart.lineNumber, selectionStart.column, position.lineNumber, position.column);\n\t}\n\n\tpublic validateViewPosition(viewPosition: Position, expectedModelPosition: Position): Position {\n\t\treturn this._lines.validateViewPosition(viewPosition.lineNumber, viewPosition.column, expectedModelPosition);\n\t}\n\n\tpublic validateViewRange(viewRange: Range, expectedModelRange: Range): Range {\n\t\tvar validViewStart = this._lines.validateViewPosition(viewRange.startLineNumber, viewRange.startColumn, expectedModelRange.getStartPosition());\n\t\tvar validViewEnd = this._lines.validateViewPosition(viewRange.endLineNumber, viewRange.endColumn, expectedModelRange.getEndPosition());\n\t\treturn new Range(validViewStart.lineNumber, validViewStart.column, validViewEnd.lineNumber, validViewEnd.column);\n\t}\n\n\t// Model -> View conversion and related methods\n\n\tpublic convertModelPositionToViewPosition(modelPosition: Position): Position {\n\t\treturn this._lines.convertModelPositionToViewPosition(modelPosition.lineNumber, modelPosition.column);\n\t}\n\n\tpublic convertModelRangeToViewRange(modelRange: Range): Range {\n\t\tlet start = this._lines.convertModelPositionToViewPosition(modelRange.startLineNumber, modelRange.startColumn);\n\t\tlet end = this._lines.convertModelPositionToViewPosition(modelRange.endLineNumber, modelRange.endColumn);\n\t\treturn new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n\t}\n\n\tpublic convertModelSelectionToViewSelection(modelSelection: Selection): Selection {\n\t\tlet selectionStart = this._lines.convertModelPositionToViewPosition(modelSelection.selectionStartLineNumber, modelSelection.selectionStartColumn);\n\t\tlet position = this._lines.convertModelPositionToViewPosition(modelSelection.positionLineNumber, modelSelection.positionColumn);\n\t\treturn new Selection(selectionStart.lineNumber, selectionStart.column, position.lineNumber, position.column);\n\t}\n\n\tpublic modelPositionIsVisible(modelPosition: Position): boolean {\n\t\treturn this._lines.modelPositionIsVisible(modelPosition.lineNumber, modelPosition.column);\n\t}\n\n}\n\nexport class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel {\n\n\tprivate readonly editorId: number;\n\tprivate readonly configuration: editorCommon.IConfiguration;\n\tprivate readonly model: editorCommon.IModel;\n\tprivate readonly lines: SplitLinesCollection;\n\tpublic readonly coordinatesConverter: ICoordinatesConverter;\n\tpublic readonly viewLayout: ViewLayout;\n\n\tprivate readonly decorations: ViewModelDecorations;\n\n\tprivate _isDisposing: boolean;\n\tprivate _centeredViewLine: number;\n\n\tconstructor(editorId: number, configuration: editorCommon.IConfiguration, model: editorCommon.IModel) {\n\t\tsuper();\n\n\t\tthis.editorId = editorId;\n\t\tthis.configuration = configuration;\n\t\tthis.model = model;\n\n\t\tconst conf = this.configuration.editor;\n\n\t\tlet hardWrappingLineMapperFactory = new CharacterHardWrappingLineMapperFactory(\n\t\t\tconf.wrappingInfo.wordWrapBreakBeforeCharacters,\n\t\t\tconf.wrappingInfo.wordWrapBreakAfterCharacters,\n\t\t\tconf.wrappingInfo.wordWrapBreakObtrusiveCharacters\n\t\t);\n\n\t\tthis.lines = new SplitLinesCollection(\n\t\t\tthis.model,\n\t\t\thardWrappingLineMapperFactory,\n\t\t\tthis.model.getOptions().tabSize,\n\t\t\tconf.wrappingInfo.wrappingColumn,\n\t\t\tconf.fontInfo.typicalFullwidthCharacterWidth / conf.fontInfo.typicalHalfwidthCharacterWidth,\n\t\t\tconf.wrappingInfo.wrappingIndent\n\t\t);\n\n\t\tthis.coordinatesConverter = new CoordinatesConverter(this.lines);\n\n\t\tthis.viewLayout = this._register(new ViewLayout(this.configuration, this.getLineCount()));\n\n\t\tthis._register(this.viewLayout.onDidScroll((e) => {\n\t\t\tthis._emit([new viewEvents.ViewScrollChangedEvent(e)]);\n\t\t}));\n\n\t\tthis._isDisposing = false;\n\t\tthis._centeredViewLine = -1;\n\n\t\tthis.decorations = new ViewModelDecorations(this.editorId, this.model, this.configuration, this.coordinatesConverter);\n\n\t\tthis._register(this.model.addBulkListener((events: EmitterEvent[]) => {\n\t\t\tif (this._isDisposing) {\n\t\t\t\t// Disposing the lines might end up sending model decoration changed events\n\t\t\t\t// ...we no longer care about them...\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet eventsCollector = new ViewEventsCollector();\n\t\t\tthis._onModelEvents(eventsCollector, events);\n\t\t\tthis._emit(eventsCollector.finalize());\n\t\t}));\n\n\t\tthis._register(this.configuration.onDidChange((e) => {\n\t\t\tconst eventsCollector = new ViewEventsCollector();\n\t\t\tthis._onConfigurationChanged(eventsCollector, e);\n\t\t\tthis._emit(eventsCollector.finalize());\n\t\t}));\n\n\t\tthis._register(MinimapTokensColorTracker.getInstance().onDidChange(() => {\n\t\t\tthis._emit([new viewEvents.ViewTokensColorsChangedEvent()]);\n\t\t}));\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._isDisposing = true;\n\t\tthis.decorations.dispose();\n\t\tthis.lines.dispose();\n\t\tsuper.dispose();\n\t}\n\n\tprivate _onConfigurationChanged(eventsCollector: ViewEventsCollector, e: IConfigurationChangedEvent): void {\n\n\t\t// We might need to restore the current centered view range, so save it (if available)\n\t\tconst previousCenteredModelRange = this.getCenteredRangeInViewport();\n\t\tlet revealPreviousCenteredModelRange = false;\n\n\t\tconst conf = this.configuration.editor;\n\n\t\tif (this.lines.setWrappingSettings(conf.wrappingInfo.wrappingIndent, conf.wrappingInfo.wrappingColumn, conf.fontInfo.typicalFullwidthCharacterWidth / conf.fontInfo.typicalHalfwidthCharacterWidth)) {\n\t\t\teventsCollector.emit(new viewEvents.ViewFlushedEvent());\n\t\t\teventsCollector.emit(new viewEvents.ViewLineMappingChangedEvent());\n\t\t\teventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent());\n\t\t\tthis.decorations.onLineMappingChanged();\n\t\t\tthis.viewLayout.onFlushed(this.getLineCount());\n\n\t\t\tif (this.viewLayout.getScrollTop() !== 0) {\n\t\t\t\t// Never change the scroll position from 0 to something else...\n\t\t\t\trevealPreviousCenteredModelRange = true;\n\t\t\t}\n\t\t}\n\n\t\tif (e.readOnly) {\n\t\t\t// Must read again all decorations due to readOnly filtering\n\t\t\tthis.decorations.reset();\n\t\t\teventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent());\n\t\t}\n\n\t\teventsCollector.emit(new viewEvents.ViewConfigurationChangedEvent(e));\n\t\tthis.viewLayout.onConfigurationChanged(e);\n\n\t\tif (revealPreviousCenteredModelRange && previousCenteredModelRange) {\n\t\t\t// modelLine -> viewLine\n\t\t\tconst newCenteredViewRange = this.coordinatesConverter.convertModelRangeToViewRange(previousCenteredModelRange);\n\n\t\t\t// Send a reveal event to restore the centered content\n\t\t\teventsCollector.emit(new viewEvents.ViewRevealRangeRequestEvent(\n\t\t\t\tnewCenteredViewRange,\n\t\t\t\tviewEvents.VerticalRevealType.Center,\n\t\t\t\tfalse\n\t\t\t));\n\t\t}\n\t}\n\n\tprivate _onModelEvents(eventsCollector: ViewEventsCollector, events: EmitterEvent[]): void {\n\n\t\t// A quick check if there are model content change events incoming\n\t\t// in order to update the configuration and reset the centered view line\n\t\tfor (let i = 0, len = events.length; i < len; i++) {\n\t\t\tconst eventType = events[i].type;\n\t\t\tif (eventType === textModelEvents.TextModelEventType.ModelRawContentChanged2) {\n\t\t\t\t// There is a content change event\n\t\t\t\tthis._centeredViewLine = -1;\n\t\t\t\tthis.configuration.setMaxLineNumber(this.model.getLineCount());\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tlet hadOtherModelChange = false;\n\t\tlet hadModelLineChangeThatChangedLineMapping = false;\n\n\t\tfor (let i = 0, len = events.length; i < len; i++) {\n\t\t\tconst _e = events[i];\n\t\t\tconst type = _e.type;\n\t\t\tconst data = _e.data;\n\n\t\t\tswitch (type) {\n\n\t\t\t\tcase textModelEvents.TextModelEventType.ModelRawContentChanged2: {\n\t\t\t\t\tconst e = data;\n\t\t\t\t\tconst changes = e.changes;\n\t\t\t\t\tconst versionId = e.versionId;\n\n\t\t\t\t\tfor (let j = 0, lenJ = changes.length; j < lenJ; j++) {\n\t\t\t\t\t\tconst change = changes[j];\n\n\t\t\t\t\t\tswitch (change.changeType) {\n\t\t\t\t\t\t\tcase textModelEvents.RawContentChangedType.Flush: {\n\t\t\t\t\t\t\t\tthis.lines.onModelFlushed();\n\t\t\t\t\t\t\t\teventsCollector.emit(new viewEvents.ViewFlushedEvent());\n\t\t\t\t\t\t\t\tthis.decorations.reset();\n\t\t\t\t\t\t\t\tthis.viewLayout.onFlushed(this.getLineCount());\n\t\t\t\t\t\t\t\thadOtherModelChange = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase textModelEvents.RawContentChangedType.LinesDeleted: {\n\t\t\t\t\t\t\t\tconst linesDeletedEvent = this.lines.onModelLinesDeleted(versionId, change.fromLineNumber, change.toLineNumber);\n\t\t\t\t\t\t\t\tif (linesDeletedEvent !== null) {\n\t\t\t\t\t\t\t\t\teventsCollector.emit(linesDeletedEvent);\n\t\t\t\t\t\t\t\t\tthis.viewLayout.onLinesDeleted(linesDeletedEvent.fromLineNumber, linesDeletedEvent.toLineNumber);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\thadOtherModelChange = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase textModelEvents.RawContentChangedType.LinesInserted: {\n\t\t\t\t\t\t\t\tconst linesInsertedEvent = this.lines.onModelLinesInserted(versionId, change.fromLineNumber, change.toLineNumber, change.detail.split('\\n'));\n\t\t\t\t\t\t\t\tif (linesInsertedEvent !== null) {\n\t\t\t\t\t\t\t\t\teventsCollector.emit(linesInsertedEvent);\n\t\t\t\t\t\t\t\t\tthis.viewLayout.onLinesInserted(linesInsertedEvent.fromLineNumber, linesInsertedEvent.toLineNumber);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\thadOtherModelChange = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase textModelEvents.RawContentChangedType.LineChanged: {\n\t\t\t\t\t\t\t\tconst [lineMappingChanged, linesChangedEvent, linesInsertedEvent, linesDeletedEvent] = this.lines.onModelLineChanged(versionId, change.lineNumber, change.detail);\n\t\t\t\t\t\t\t\thadModelLineChangeThatChangedLineMapping = lineMappingChanged;\n\t\t\t\t\t\t\t\tif (linesChangedEvent) {\n\t\t\t\t\t\t\t\t\teventsCollector.emit(linesChangedEvent);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (linesInsertedEvent) {\n\t\t\t\t\t\t\t\t\teventsCollector.emit(linesInsertedEvent);\n\t\t\t\t\t\t\t\t\tthis.viewLayout.onLinesInserted(linesInsertedEvent.fromLineNumber, linesInsertedEvent.toLineNumber);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (linesDeletedEvent) {\n\t\t\t\t\t\t\t\t\teventsCollector.emit(linesDeletedEvent);\n\t\t\t\t\t\t\t\t\tthis.viewLayout.onLinesDeleted(linesDeletedEvent.fromLineNumber, linesDeletedEvent.toLineNumber);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase textModelEvents.RawContentChangedType.EOLChanged: {\n\t\t\t\t\t\t\t\t// Nothing to do. The new version will be accepted below\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.lines.acceptVersionId(versionId);\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase textModelEvents.TextModelEventType.ModelTokensChanged: {\n\t\t\t\t\tconst e = data;\n\n\t\t\t\t\tlet viewRanges: { fromLineNumber: number; toLineNumber: number; }[] = [];\n\t\t\t\t\tfor (let j = 0, lenJ = e.ranges.length; j < lenJ; j++) {\n\t\t\t\t\t\tconst modelRange = e.ranges[j];\n\t\t\t\t\t\tconst viewStartLineNumber = this.coordinatesConverter.convertModelPositionToViewPosition(new Position(modelRange.fromLineNumber, 1)).lineNumber;\n\t\t\t\t\t\tconst viewEndLineNumber = this.coordinatesConverter.convertModelPositionToViewPosition(new Position(modelRange.toLineNumber, this.model.getLineMaxColumn(modelRange.toLineNumber))).lineNumber;\n\t\t\t\t\t\tviewRanges[j] = {\n\t\t\t\t\t\t\tfromLineNumber: viewStartLineNumber,\n\t\t\t\t\t\t\ttoLineNumber: viewEndLineNumber\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\teventsCollector.emit(new viewEvents.ViewTokensChangedEvent(viewRanges));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase textModelEvents.TextModelEventType.ModelLanguageChanged: {\n\t\t\t\t\t// That's ok, a model tokens changed event will follow shortly\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase textModelEvents.TextModelEventType.ModelContentChanged: {\n\t\t\t\t\t// Ignore\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase textModelEvents.TextModelEventType.ModelOptionsChanged: {\n\t\t\t\t\t// A tab size change causes a line mapping changed event => all view parts will repaint OK, no further event needed here\n\t\t\t\t\tif (this.lines.setTabSize(this.model.getOptions().tabSize)) {\n\t\t\t\t\t\teventsCollector.emit(new viewEvents.ViewFlushedEvent());\n\t\t\t\t\t\teventsCollector.emit(new viewEvents.ViewLineMappingChangedEvent());\n\t\t\t\t\t\teventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent());\n\t\t\t\t\t\tthis.decorations.onLineMappingChanged();\n\t\t\t\t\t\tthis.viewLayout.onFlushed(this.getLineCount());\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase textModelEvents.TextModelEventType.ModelDecorationsChanged: {\n\t\t\t\t\tconst e = data;\n\t\t\t\t\tthis.decorations.onModelDecorationsChanged(e);\n\t\t\t\t\teventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent());\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase textModelEvents.TextModelEventType.ModelDispose: {\n\t\t\t\t\t// Ignore, since the editor will take care of this and destroy the view shortly\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.info('View received unknown event: ');\n\t\t\t\t\tconsole.info(type, data);\n\t\t\t}\n\t\t}\n\n\t\tif (!hadOtherModelChange && hadModelLineChangeThatChangedLineMapping) {\n\t\t\teventsCollector.emit(new viewEvents.ViewLineMappingChangedEvent());\n\t\t\teventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent());\n\t\t\tthis.decorations.onLineMappingChanged();\n\t\t}\n\t}\n\n\tpublic setHiddenAreas(ranges: Range[]): void {\n\t\tlet eventsCollector = new ViewEventsCollector();\n\t\tlet lineMappingChanged = this.lines.setHiddenAreas(ranges);\n\t\tif (lineMappingChanged) {\n\t\t\teventsCollector.emit(new viewEvents.ViewFlushedEvent());\n\t\t\teventsCollector.emit(new viewEvents.ViewLineMappingChangedEvent());\n\t\t\teventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent());\n\t\t\tthis.decorations.onLineMappingChanged();\n\t\t\tthis.viewLayout.onFlushed(this.getLineCount());\n\t\t}\n\t\tthis._emit(eventsCollector.finalize());\n\t}\n\n\tpublic getCenteredRangeInViewport(): Range {\n\t\tif (this._centeredViewLine === -1) {\n\t\t\t// Never got rendered or not rendered since last content change event\n\t\t\treturn null;\n\t\t}\n\t\tlet viewLineNumber = this._centeredViewLine;\n\t\tlet currentCenteredViewRange = new Range(viewLineNumber, this.getLineMinColumn(viewLineNumber), viewLineNumber, this.getLineMaxColumn(viewLineNumber));\n\t\treturn this.coordinatesConverter.convertViewRangeToModelRange(currentCenteredViewRange);\n\t}\n\n\tpublic getCompletelyVisibleViewRange(): Range {\n\t\tconst partialData = this.viewLayout.getLinesViewportData();\n\t\tconst startViewLineNumber = partialData.completelyVisibleStartLineNumber;\n\t\tconst endViewLineNumber = partialData.completelyVisibleEndLineNumber;\n\n\t\treturn new Range(\n\t\t\tstartViewLineNumber, this.getLineMinColumn(startViewLineNumber),\n\t\t\tendViewLineNumber, this.getLineMaxColumn(endViewLineNumber)\n\t\t);\n\t}\n\n\tpublic getCompletelyVisibleViewRangeAtScrollTop(scrollTop: number): Range {\n\t\tconst partialData = this.viewLayout.getLinesViewportDataAtScrollTop(scrollTop);\n\t\tconst startViewLineNumber = partialData.completelyVisibleStartLineNumber;\n\t\tconst endViewLineNumber = partialData.completelyVisibleEndLineNumber;\n\n\t\treturn new Range(\n\t\t\tstartViewLineNumber, this.getLineMinColumn(startViewLineNumber),\n\t\t\tendViewLineNumber, this.getLineMaxColumn(endViewLineNumber)\n\t\t);\n\t}\n\n\tpublic getTabSize(): number {\n\t\treturn this.model.getOptions().tabSize;\n\t}\n\n\tpublic getLineCount(): number {\n\t\treturn this.lines.getViewLineCount();\n\t}\n\n\t/**\n\t * Gives a hint that a lot of requests are about to come in for these line numbers.\n\t */\n\tpublic setViewport(startLineNumber: number, endLineNumber: number, centeredLineNumber: number): void {\n\t\tthis._centeredViewLine = centeredLineNumber;\n\t\tthis.lines.warmUpLookupCache(startLineNumber, endLineNumber);\n\t}\n\n\tpublic getLineIndentGuide(lineNumber: number): number {\n\t\treturn this.lines.getViewLineIndentGuide(lineNumber);\n\t}\n\n\tpublic getLineContent(lineNumber: number): string {\n\t\treturn this.lines.getViewLineContent(lineNumber);\n\t}\n\n\tpublic getLineMinColumn(lineNumber: number): number {\n\t\treturn this.lines.getViewLineMinColumn(lineNumber);\n\t}\n\n\tpublic getLineMaxColumn(lineNumber: number): number {\n\t\treturn this.lines.getViewLineMaxColumn(lineNumber);\n\t}\n\n\tpublic getLineFirstNonWhitespaceColumn(lineNumber: number): number {\n\t\tvar result = strings.firstNonWhitespaceIndex(this.getLineContent(lineNumber));\n\t\tif (result === -1) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn result + 1;\n\t}\n\n\tpublic getLineLastNonWhitespaceColumn(lineNumber: number): number {\n\t\tvar result = strings.lastNonWhitespaceIndex(this.getLineContent(lineNumber));\n\t\tif (result === -1) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn result + 2;\n\t}\n\n\tpublic getDecorationsInViewport(visibleRange: Range): ViewModelDecoration[] {\n\t\treturn this.decorations.getDecorationsViewportData(visibleRange).decorations;\n\t}\n\n\tpublic getViewLineRenderingData(visibleRange: Range, lineNumber: number): ViewLineRenderingData {\n\t\tlet mightContainRTL = this.model.mightContainRTL();\n\t\tlet mightContainNonBasicASCII = this.model.mightContainNonBasicASCII();\n\t\tlet tabSize = this.getTabSize();\n\t\tlet lineData = this.lines.getViewLineData(lineNumber);\n\t\tlet allInlineDecorations = this.decorations.getDecorationsViewportData(visibleRange).inlineDecorations;\n\t\tlet inlineDecorations = allInlineDecorations[lineNumber - visibleRange.startLineNumber];\n\n\t\treturn new ViewLineRenderingData(\n\t\t\tlineData.minColumn,\n\t\t\tlineData.maxColumn,\n\t\t\tlineData.content,\n\t\t\tmightContainRTL,\n\t\t\tmightContainNonBasicASCII,\n\t\t\tlineData.tokens,\n\t\t\tinlineDecorations,\n\t\t\ttabSize\n\t\t);\n\t}\n\n\tpublic getMinimapLinesRenderingData(startLineNumber: number, endLineNumber: number, needed: boolean[]): MinimapLinesRenderingData {\n\t\tlet result = this.lines.getViewLinesData(startLineNumber, endLineNumber, needed);\n\t\treturn new MinimapLinesRenderingData(\n\t\t\tthis.getTabSize(),\n\t\t\tresult\n\t\t);\n\t}\n\n\tpublic getAllOverviewRulerDecorations(): ViewModelDecoration[] {\n\t\treturn this.decorations.getAllOverviewRulerDecorations();\n\t}\n\n\tpublic getValueInRange(range: Range, eol: editorCommon.EndOfLinePreference): string {\n\t\tvar modelRange = this.coordinatesConverter.convertViewRangeToModelRange(range);\n\t\treturn this.model.getValueInRange(modelRange, eol);\n\t}\n\n\tpublic getModelLineMaxColumn(modelLineNumber: number): number {\n\t\treturn this.model.getLineMaxColumn(modelLineNumber);\n\t}\n\n\tpublic validateModelPosition(position: IPosition): Position {\n\t\treturn this.model.validatePosition(position);\n\t}\n\n\tpublic getPlainTextToCopy(ranges: Range[], emptySelectionClipboard: boolean): string {\n\t\tlet newLineCharacter = this.model.getEOL();\n\n\t\tif (ranges.length === 1) {\n\t\t\tlet range: Range = ranges[0];\n\t\t\tif (range.isEmpty()) {\n\t\t\t\tif (emptySelectionClipboard) {\n\t\t\t\t\tlet modelLineNumber = this.coordinatesConverter.convertViewPositionToModelPosition(new Position(range.startLineNumber, 1)).lineNumber;\n\t\t\t\t\treturn this.model.getLineContent(modelLineNumber) + newLineCharacter;\n\t\t\t\t} else {\n\t\t\t\t\treturn '';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.getValueInRange(range, editorCommon.EndOfLinePreference.TextDefined);\n\t\t} else {\n\t\t\tranges = ranges.slice(0).sort(Range.compareRangesUsingStarts);\n\t\t\tlet result: string[] = [];\n\t\t\tfor (let i = 0; i < ranges.length; i++) {\n\t\t\t\tresult.push(this.getValueInRange(ranges[i], editorCommon.EndOfLinePreference.TextDefined));\n\t\t\t}\n\n\t\t\treturn result.join(newLineCharacter);\n\t\t}\n\t}\n\n\tpublic getHTMLToCopy(viewRanges: Range[], emptySelectionClipboard: boolean): string {\n\t\tif (this.model.getLanguageIdentifier().id === LanguageId.PlainText) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (viewRanges.length !== 1) {\n\t\t\t// no multiple selection support at this time\n\t\t\treturn null;\n\t\t}\n\n\t\tlet range = this.coordinatesConverter.convertViewRangeToModelRange(viewRanges[0]);\n\t\tif (range.isEmpty()) {\n\t\t\tif (!emptySelectionClipboard) {\n\t\t\t\t// nothing to copy\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tlet lineNumber = range.startLineNumber;\n\t\t\trange = new Range(lineNumber, this.model.getLineMinColumn(lineNumber), lineNumber, this.model.getLineMaxColumn(lineNumber));\n\t\t}\n\n\t\tconst fontInfo = this.configuration.editor.fontInfo;\n\t\tconst colorMap = this._getColorMap();\n\n\t\treturn (\n\t\t\t`
    `\n\t\t\t+ this._getHTMLToCopy(range, colorMap)\n\t\t\t+ '
    '\n\t\t);\n\t}\n\n\tprivate _getHTMLToCopy(modelRange: Range, colorMap: string[]): string {\n\t\tconst startLineNumber = modelRange.startLineNumber;\n\t\tconst startColumn = modelRange.startColumn;\n\t\tconst endLineNumber = modelRange.endLineNumber;\n\t\tconst endColumn = modelRange.endColumn;\n\n\t\tconst tabSize = this.getTabSize();\n\n\t\tlet result = '';\n\n\t\tfor (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n\t\t\tconst lineTokens = this.model.getLineTokens(lineNumber);\n\t\t\tconst lineContent = lineTokens.getLineContent();\n\t\t\tconst startOffset = (lineNumber === startLineNumber ? startColumn - 1 : 0);\n\t\t\tconst endOffset = (lineNumber === endLineNumber ? endColumn - 1 : lineContent.length);\n\n\t\t\tif (lineContent === '') {\n\t\t\t\tresult += '
    ';\n\t\t\t} else {\n\t\t\t\tresult += tokenizeLineToHTML(lineContent, lineTokens.inflate(), colorMap, startOffset, endOffset, tabSize);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate _getColorMap(): string[] {\n\t\tlet colorMap = TokenizationRegistry.getColorMap();\n\t\tlet result: string[] = [null];\n\t\tfor (let i = 1, len = colorMap.length; i < len; i++) {\n\t\t\tresult[i] = colorMap[i].toRGBHex();\n\t\t}\n\t\treturn result;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport { ModelDecorationOptions } from 'vs/editor/common/model/textModelWithDecorations';\n\nexport class FindDecorations implements IDisposable {\n\n\tprivate _editor: editorCommon.ICommonCodeEditor;\n\tprivate _decorations: string[];\n\tprivate _findScopeDecorationId: string;\n\tprivate _rangeHighlightDecorationId: string;\n\tprivate _highlightedDecorationId: string;\n\tprivate _startPosition: Position;\n\n\tconstructor(editor: editorCommon.ICommonCodeEditor) {\n\t\tthis._editor = editor;\n\t\tthis._decorations = [];\n\t\tthis._findScopeDecorationId = null;\n\t\tthis._rangeHighlightDecorationId = null;\n\t\tthis._highlightedDecorationId = null;\n\t\tthis._startPosition = this._editor.getPosition();\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._editor.deltaDecorations(this._allDecorations(), []);\n\n\t\tthis._editor = null;\n\t\tthis._decorations = [];\n\t\tthis._findScopeDecorationId = null;\n\t\tthis._rangeHighlightDecorationId = null;\n\t\tthis._highlightedDecorationId = null;\n\t\tthis._startPosition = null;\n\t}\n\n\tpublic reset(): void {\n\t\tthis._decorations = [];\n\t\tthis._findScopeDecorationId = null;\n\t\tthis._rangeHighlightDecorationId = null;\n\t\tthis._highlightedDecorationId = null;\n\t}\n\n\tpublic getCount(): number {\n\t\treturn this._decorations.length;\n\t}\n\n\tpublic getFindScope(): Range {\n\t\tif (this._findScopeDecorationId) {\n\t\t\treturn this._editor.getModel().getDecorationRange(this._findScopeDecorationId);\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic getStartPosition(): Position {\n\t\treturn this._startPosition;\n\t}\n\n\tpublic setStartPosition(newStartPosition: Position): void {\n\t\tthis._startPosition = newStartPosition;\n\t\tthis.setCurrentFindMatch(null);\n\t}\n\n\tpublic getCurrentMatchesPosition(desiredRange: Range): number {\n\t\tfor (let i = 0, len = this._decorations.length; i < len; i++) {\n\t\t\tlet range = this._editor.getModel().getDecorationRange(this._decorations[i]);\n\t\t\tif (desiredRange.equalsRange(range)) {\n\t\t\t\treturn (i + 1);\n\t\t\t}\n\t\t}\n\t\treturn 1;\n\t}\n\n\tpublic setCurrentFindMatch(nextMatch: Range): number {\n\t\tlet newCurrentDecorationId: string = null;\n\t\tlet matchPosition = 0;\n\t\tif (nextMatch) {\n\t\t\tfor (let i = 0, len = this._decorations.length; i < len; i++) {\n\t\t\t\tlet range = this._editor.getModel().getDecorationRange(this._decorations[i]);\n\t\t\t\tif (nextMatch.equalsRange(range)) {\n\t\t\t\t\tnewCurrentDecorationId = this._decorations[i];\n\t\t\t\t\tmatchPosition = (i + 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this._highlightedDecorationId !== null || newCurrentDecorationId !== null) {\n\t\t\tthis._editor.changeDecorations((changeAccessor: editorCommon.IModelDecorationsChangeAccessor) => {\n\t\t\t\tif (this._highlightedDecorationId !== null) {\n\t\t\t\t\tchangeAccessor.changeDecorationOptions(this._highlightedDecorationId, FindDecorations.createFindMatchDecorationOptions(false));\n\t\t\t\t\tthis._highlightedDecorationId = null;\n\t\t\t\t}\n\t\t\t\tif (newCurrentDecorationId !== null) {\n\t\t\t\t\tthis._highlightedDecorationId = newCurrentDecorationId;\n\t\t\t\t\tchangeAccessor.changeDecorationOptions(this._highlightedDecorationId, FindDecorations.createFindMatchDecorationOptions(true));\n\t\t\t\t}\n\t\t\t\tif (this._rangeHighlightDecorationId !== null) {\n\t\t\t\t\tchangeAccessor.removeDecoration(this._rangeHighlightDecorationId);\n\t\t\t\t\tthis._rangeHighlightDecorationId = null;\n\t\t\t\t}\n\t\t\t\tif (newCurrentDecorationId !== null) {\n\t\t\t\t\tlet rng = this._editor.getModel().getDecorationRange(newCurrentDecorationId);\n\t\t\t\t\tthis._rangeHighlightDecorationId = changeAccessor.addDecoration(rng, FindDecorations._RANGE_HIGHLIGHT_DECORATION);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn matchPosition;\n\t}\n\n\tpublic set(matches: Range[], findScope: Range): void {\n\t\tlet newDecorations: editorCommon.IModelDeltaDecoration[] = matches.map((match) => {\n\t\t\treturn {\n\t\t\t\trange: match,\n\t\t\t\toptions: FindDecorations.createFindMatchDecorationOptions(false)\n\t\t\t};\n\t\t});\n\t\tif (findScope) {\n\t\t\tnewDecorations.unshift({\n\t\t\t\trange: findScope,\n\t\t\t\toptions: FindDecorations._FIND_SCOPE_DECORATION\n\t\t\t});\n\t\t}\n\t\tlet tmpDecorations = this._editor.deltaDecorations(this._allDecorations(), newDecorations);\n\n\t\tif (findScope) {\n\t\t\tthis._findScopeDecorationId = tmpDecorations.shift();\n\t\t} else {\n\t\t\tthis._findScopeDecorationId = null;\n\t\t}\n\t\tthis._decorations = tmpDecorations;\n\t\tthis._rangeHighlightDecorationId = null;\n\t\tthis._highlightedDecorationId = null;\n\t}\n\n\tprivate _allDecorations(): string[] {\n\t\tlet result: string[] = [];\n\t\tresult = result.concat(this._decorations);\n\t\tif (this._findScopeDecorationId) {\n\t\t\tresult.push(this._findScopeDecorationId);\n\t\t}\n\t\tif (this._rangeHighlightDecorationId) {\n\t\t\tresult.push(this._rangeHighlightDecorationId);\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static createFindMatchDecorationOptions(isCurrent: boolean): ModelDecorationOptions {\n\t\treturn (isCurrent ? this._CURRENT_FIND_MATCH_DECORATION : this._FIND_MATCH_DECORATION);\n\t}\n\n\tprivate static _CURRENT_FIND_MATCH_DECORATION = ModelDecorationOptions.register({\n\t\tstickiness: editorCommon.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\tclassName: 'currentFindMatch',\n\t\tshowIfCollapsed: true,\n\t\toverviewRuler: {\n\t\t\tcolor: 'rgba(246, 185, 77, 0.7)',\n\t\t\tdarkColor: 'rgba(246, 185, 77, 0.7)',\n\t\t\tposition: editorCommon.OverviewRulerLane.Center\n\t\t}\n\t});\n\n\tprivate static _FIND_MATCH_DECORATION = ModelDecorationOptions.register({\n\t\tstickiness: editorCommon.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\tclassName: 'findMatch',\n\t\tshowIfCollapsed: true,\n\t\toverviewRuler: {\n\t\t\tcolor: 'rgba(246, 185, 77, 0.7)',\n\t\t\tdarkColor: 'rgba(246, 185, 77, 0.7)',\n\t\t\tposition: editorCommon.OverviewRulerLane.Center\n\t\t}\n\t});\n\n\tprivate static _RANGE_HIGHLIGHT_DECORATION = ModelDecorationOptions.register({\n\t\tstickiness: editorCommon.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\tclassName: 'rangeHighlight',\n\t\tisWholeLine: true\n\t});\n\n\tprivate static _FIND_SCOPE_DECORATION = ModelDecorationOptions.register({\n\t\tclassName: 'findScope',\n\t\tisWholeLine: true\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { RunOnceScheduler } from 'vs/base/common/async';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { ReplacePattern, parseReplaceString } from 'vs/editor/contrib/find/common/replacePattern';\nimport { ReplaceCommand, ReplaceCommandThatPreservesSelection } from 'vs/editor/common/commands/replaceCommand';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { FindDecorations } from './findDecorations';\nimport { FindReplaceState, FindReplaceStateChangedEvent } from './findState';\nimport { ReplaceAllCommand } from './replaceAllCommand';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { Constants } from 'vs/editor/common/core/uint';\nimport { SearchParams } from 'vs/editor/common/model/textModelSearch';\nimport { IKeybindings } from 'vs/platform/keybinding/common/keybindingsRegistry';\nimport { CursorChangeReason, ICursorPositionChangedEvent } from 'vs/editor/common/controller/cursorEvents';\n\nexport const ToggleCaseSensitiveKeybinding: IKeybindings = {\n\tprimary: KeyMod.Alt | KeyCode.KEY_C,\n\tmac: { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KEY_C }\n};\nexport const ToggleWholeWordKeybinding: IKeybindings = {\n\tprimary: KeyMod.Alt | KeyCode.KEY_W,\n\tmac: { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KEY_W }\n};\nexport const ToggleRegexKeybinding: IKeybindings = {\n\tprimary: KeyMod.Alt | KeyCode.KEY_R,\n\tmac: { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KEY_R }\n};\nexport const ToggleSearchScopeKeybinding: IKeybindings = {\n\tprimary: KeyMod.Alt | KeyCode.KEY_L,\n\tmac: { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KEY_L }\n};\nexport const ShowPreviousFindTermKeybinding: IKeybindings = {\n\tprimary: KeyMod.Alt | KeyCode.UpArrow\n};\nexport const ShowNextFindTermKeybinding: IKeybindings = {\n\tprimary: KeyMod.Alt | KeyCode.DownArrow\n};\n\nexport const FIND_IDS = {\n\tStartFindAction: 'actions.find',\n\tNextMatchFindAction: 'editor.action.nextMatchFindAction',\n\tPreviousMatchFindAction: 'editor.action.previousMatchFindAction',\n\tNextSelectionMatchFindAction: 'editor.action.nextSelectionMatchFindAction',\n\tPreviousSelectionMatchFindAction: 'editor.action.previousSelectionMatchFindAction',\n\tAddSelectionToNextFindMatchAction: 'editor.action.addSelectionToNextFindMatch',\n\tAddSelectionToPreviousFindMatchAction: 'editor.action.addSelectionToPreviousFindMatch',\n\tMoveSelectionToNextFindMatchAction: 'editor.action.moveSelectionToNextFindMatch',\n\tMoveSelectionToPreviousFindMatchAction: 'editor.action.moveSelectionToPreviousFindMatch',\n\tStartFindReplaceAction: 'editor.action.startFindReplaceAction',\n\tCloseFindWidgetCommand: 'closeFindWidget',\n\tToggleCaseSensitiveCommand: 'toggleFindCaseSensitive',\n\tToggleWholeWordCommand: 'toggleFindWholeWord',\n\tToggleRegexCommand: 'toggleFindRegex',\n\tToggleSearchScopeCommand: 'toggleFindInSelection',\n\tReplaceOneAction: 'editor.action.replaceOne',\n\tReplaceAllAction: 'editor.action.replaceAll',\n\tSelectAllMatchesAction: 'editor.action.selectAllMatches',\n\tShowPreviousFindTermAction: 'find.history.showPrevious',\n\tShowNextFindTermAction: 'find.history.showNext'\n};\n\nexport const MATCHES_LIMIT = 999;\n\nexport class FindModelBoundToEditorModel {\n\n\tprivate _editor: editorCommon.ICommonCodeEditor;\n\tprivate _state: FindReplaceState;\n\tprivate _toDispose: IDisposable[];\n\tprivate _decorations: FindDecorations;\n\tprivate _ignoreModelContentChanged: boolean;\n\n\tprivate _updateDecorationsScheduler: RunOnceScheduler;\n\tprivate _isDisposed: boolean;\n\n\tconstructor(editor: editorCommon.ICommonCodeEditor, state: FindReplaceState) {\n\t\tthis._editor = editor;\n\t\tthis._state = state;\n\t\tthis._toDispose = [];\n\t\tthis._isDisposed = false;\n\n\t\tthis._decorations = new FindDecorations(editor);\n\t\tthis._toDispose.push(this._decorations);\n\n\t\tthis._updateDecorationsScheduler = new RunOnceScheduler(() => this.research(false), 100);\n\t\tthis._toDispose.push(this._updateDecorationsScheduler);\n\n\t\tthis._toDispose.push(this._editor.onDidChangeCursorPosition((e: ICursorPositionChangedEvent) => {\n\t\t\tif (\n\t\t\t\te.reason === CursorChangeReason.Explicit\n\t\t\t\t|| e.reason === CursorChangeReason.Undo\n\t\t\t\t|| e.reason === CursorChangeReason.Redo\n\t\t\t) {\n\t\t\t\tthis._decorations.setStartPosition(this._editor.getPosition());\n\t\t\t}\n\t\t}));\n\n\t\tthis._ignoreModelContentChanged = false;\n\t\tthis._toDispose.push(this._editor.onDidChangeModelContent((e) => {\n\t\t\tif (this._ignoreModelContentChanged) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (e.isFlush) {\n\t\t\t\t// a model.setValue() was called\n\t\t\t\tthis._decorations.reset();\n\t\t\t}\n\t\t\tthis._decorations.setStartPosition(this._editor.getPosition());\n\t\t\tthis._updateDecorationsScheduler.schedule();\n\t\t}));\n\n\t\tthis._toDispose.push(this._state.addChangeListener((e) => this._onStateChanged(e)));\n\n\t\tthis.research(false, this._state.searchScope);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._isDisposed = true;\n\t\tthis._toDispose = dispose(this._toDispose);\n\t}\n\n\tprivate _onStateChanged(e: FindReplaceStateChangedEvent): void {\n\t\tif (this._isDisposed) {\n\t\t\t// The find model is disposed during a find state changed event\n\t\t\treturn;\n\t\t}\n\t\tif (e.searchString || e.isReplaceRevealed || e.isRegex || e.wholeWord || e.matchCase || e.searchScope) {\n\t\t\tif (e.searchScope) {\n\t\t\t\tthis.research(e.moveCursor, this._state.searchScope);\n\t\t\t} else {\n\t\t\t\tthis.research(e.moveCursor);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate static _getSearchRange(model: editorCommon.IModel, searchOnlyEditableRange: boolean, findScope: Range): Range {\n\t\tlet searchRange: Range;\n\n\t\tif (searchOnlyEditableRange) {\n\t\t\tsearchRange = model.getEditableRange();\n\t\t} else {\n\t\t\tsearchRange = model.getFullModelRange();\n\t\t}\n\n\t\t// If we have set now or before a find scope, use it for computing the search range\n\t\tif (findScope) {\n\t\t\tsearchRange = searchRange.intersectRanges(findScope);\n\t\t}\n\n\t\treturn searchRange;\n\t}\n\n\tprivate research(moveCursor: boolean, newFindScope?: Range): void {\n\t\tlet findScope: Range = null;\n\t\tif (typeof newFindScope !== 'undefined') {\n\t\t\tfindScope = newFindScope;\n\t\t} else {\n\t\t\tfindScope = this._decorations.getFindScope();\n\t\t}\n\t\tif (findScope !== null) {\n\t\t\tif (findScope.startLineNumber !== findScope.endLineNumber) {\n\t\t\t\t// multiline find scope => expand to line starts / ends\n\t\t\t\tfindScope = new Range(findScope.startLineNumber, 1, findScope.endLineNumber, this._editor.getModel().getLineMaxColumn(findScope.endLineNumber));\n\t\t\t}\n\t\t}\n\n\t\tlet findMatches = this._findMatches(findScope, false, MATCHES_LIMIT);\n\t\tthis._decorations.set(findMatches.map(match => match.range), findScope);\n\n\t\tthis._state.changeMatchInfo(\n\t\t\tthis._decorations.getCurrentMatchesPosition(this._editor.getSelection()),\n\t\t\tthis._decorations.getCount(),\n\t\t\tundefined\n\t\t);\n\n\t\tif (moveCursor) {\n\t\t\tthis._moveToNextMatch(this._decorations.getStartPosition());\n\t\t}\n\t}\n\n\tprivate _hasMatches(): boolean {\n\t\treturn (this._state.matchesCount > 0);\n\t}\n\n\tprivate _cannotFind(): boolean {\n\t\tif (!this._hasMatches()) {\n\t\t\tlet findScope = this._decorations.getFindScope();\n\t\t\tif (findScope) {\n\t\t\t\t// Reveal the selection so user is reminded that 'selection find' is on.\n\t\t\t\tthis._editor.revealRangeInCenterIfOutsideViewport(findScope);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate _setCurrentFindMatch(match: Range): void {\n\t\tlet matchesPosition = this._decorations.setCurrentFindMatch(match);\n\t\tthis._state.changeMatchInfo(\n\t\t\tmatchesPosition,\n\t\t\tthis._decorations.getCount(),\n\t\t\tmatch\n\t\t);\n\n\t\tthis._editor.setSelection(match);\n\t\tthis._editor.revealRangeInCenterIfOutsideViewport(match);\n\t}\n\n\tprivate _moveToPrevMatch(before: Position, isRecursed: boolean = false): void {\n\t\tif (this._cannotFind()) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet findScope = this._decorations.getFindScope();\n\t\tlet searchRange = FindModelBoundToEditorModel._getSearchRange(this._editor.getModel(), this._state.isReplaceRevealed, findScope);\n\n\t\t// ...(----)...|...\n\t\tif (searchRange.getEndPosition().isBefore(before)) {\n\t\t\tbefore = searchRange.getEndPosition();\n\t\t}\n\n\t\t// ...|...(----)...\n\t\tif (before.isBefore(searchRange.getStartPosition())) {\n\t\t\tbefore = searchRange.getEndPosition();\n\t\t}\n\n\t\tlet { lineNumber, column } = before;\n\t\tlet model = this._editor.getModel();\n\n\t\tlet position = new Position(lineNumber, column);\n\n\t\tlet prevMatch = model.findPreviousMatch(this._state.searchString, position, this._state.isRegex, this._state.matchCase, this._state.wholeWord ? this._editor.getConfiguration().wordSeparators : null, false);\n\n\t\tif (prevMatch && prevMatch.range.isEmpty() && prevMatch.range.getStartPosition().equals(position)) {\n\t\t\t// Looks like we're stuck at this position, unacceptable!\n\n\t\t\tlet isUsingLineStops = this._state.isRegex && (\n\t\t\t\tthis._state.searchString.indexOf('^') >= 0\n\t\t\t\t|| this._state.searchString.indexOf('$') >= 0\n\t\t\t);\n\n\t\t\tif (isUsingLineStops || column === 1) {\n\t\t\t\tif (lineNumber === 1) {\n\t\t\t\t\tlineNumber = model.getLineCount();\n\t\t\t\t} else {\n\t\t\t\t\tlineNumber--;\n\t\t\t\t}\n\t\t\t\tcolumn = model.getLineMaxColumn(lineNumber);\n\t\t\t} else {\n\t\t\t\tcolumn--;\n\t\t\t}\n\n\t\t\tposition = new Position(lineNumber, column);\n\t\t\tprevMatch = model.findPreviousMatch(this._state.searchString, position, this._state.isRegex, this._state.matchCase, this._state.wholeWord ? this._editor.getConfiguration().wordSeparators : null, false);\n\t\t}\n\n\t\tif (!prevMatch) {\n\t\t\t// there is precisely one match and selection is on top of it\n\t\t\treturn null;\n\t\t}\n\n\t\tif (!isRecursed && !searchRange.containsRange(prevMatch.range)) {\n\t\t\treturn this._moveToPrevMatch(prevMatch.range.getStartPosition(), true);\n\t\t}\n\n\t\tthis._setCurrentFindMatch(prevMatch.range);\n\t}\n\n\tpublic moveToPrevMatch(): void {\n\t\tthis._moveToPrevMatch(this._editor.getSelection().getStartPosition());\n\t}\n\n\tprivate _moveToNextMatch(after: Position): void {\n\t\tlet nextMatch = this._getNextMatch(after, false, true);\n\t\tif (nextMatch) {\n\t\t\tthis._setCurrentFindMatch(nextMatch.range);\n\t\t}\n\t}\n\n\tprivate _getNextMatch(after: Position, captureMatches: boolean, forceMove: boolean, isRecursed: boolean = false): editorCommon.FindMatch {\n\t\tif (this._cannotFind()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet findScope = this._decorations.getFindScope();\n\t\tlet searchRange = FindModelBoundToEditorModel._getSearchRange(this._editor.getModel(), this._state.isReplaceRevealed, findScope);\n\n\t\t// ...(----)...|...\n\t\tif (searchRange.getEndPosition().isBefore(after)) {\n\t\t\tafter = searchRange.getStartPosition();\n\t\t}\n\n\t\t// ...|...(----)...\n\t\tif (after.isBefore(searchRange.getStartPosition())) {\n\t\t\tafter = searchRange.getStartPosition();\n\t\t}\n\n\t\tlet { lineNumber, column } = after;\n\t\tlet model = this._editor.getModel();\n\n\t\tlet position = new Position(lineNumber, column);\n\n\t\tlet nextMatch = model.findNextMatch(this._state.searchString, position, this._state.isRegex, this._state.matchCase, this._state.wholeWord ? this._editor.getConfiguration().wordSeparators : null, captureMatches);\n\n\t\tif (forceMove && nextMatch && nextMatch.range.isEmpty() && nextMatch.range.getStartPosition().equals(position)) {\n\t\t\t// Looks like we're stuck at this position, unacceptable!\n\n\t\t\tlet isUsingLineStops = this._state.isRegex && (\n\t\t\t\tthis._state.searchString.indexOf('^') >= 0\n\t\t\t\t|| this._state.searchString.indexOf('$') >= 0\n\t\t\t);\n\n\t\t\tif (isUsingLineStops || column === model.getLineMaxColumn(lineNumber)) {\n\t\t\t\tif (lineNumber === model.getLineCount()) {\n\t\t\t\t\tlineNumber = 1;\n\t\t\t\t} else {\n\t\t\t\t\tlineNumber++;\n\t\t\t\t}\n\t\t\t\tcolumn = 1;\n\t\t\t} else {\n\t\t\t\tcolumn++;\n\t\t\t}\n\n\t\t\tposition = new Position(lineNumber, column);\n\t\t\tnextMatch = model.findNextMatch(this._state.searchString, position, this._state.isRegex, this._state.matchCase, this._state.wholeWord ? this._editor.getConfiguration().wordSeparators : null, captureMatches);\n\t\t}\n\n\t\tif (!nextMatch) {\n\t\t\t// there is precisely one match and selection is on top of it\n\t\t\treturn null;\n\t\t}\n\n\t\tif (!isRecursed && !searchRange.containsRange(nextMatch.range)) {\n\t\t\treturn this._getNextMatch(nextMatch.range.getEndPosition(), captureMatches, forceMove, true);\n\t\t}\n\n\t\treturn nextMatch;\n\t}\n\n\tpublic moveToNextMatch(): void {\n\t\tthis._moveToNextMatch(this._editor.getSelection().getEndPosition());\n\t}\n\n\tprivate _getReplacePattern(): ReplacePattern {\n\t\tif (this._state.isRegex) {\n\t\t\treturn parseReplaceString(this._state.replaceString);\n\t\t}\n\t\treturn ReplacePattern.fromStaticValue(this._state.replaceString);\n\t}\n\n\tpublic replace(): void {\n\t\tif (!this._hasMatches()) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet replacePattern = this._getReplacePattern();\n\t\tlet selection = this._editor.getSelection();\n\t\tlet nextMatch = this._getNextMatch(selection.getStartPosition(), replacePattern.hasReplacementPatterns, false);\n\t\tif (nextMatch) {\n\t\t\tif (selection.equalsRange(nextMatch.range)) {\n\t\t\t\t// selection sits on a find match => replace it!\n\t\t\t\tlet replaceString = replacePattern.buildReplaceString(nextMatch.matches);\n\n\t\t\t\tlet command = new ReplaceCommand(selection, replaceString);\n\n\t\t\t\tthis._executeEditorCommand('replace', command);\n\n\t\t\t\tthis._decorations.setStartPosition(new Position(selection.startLineNumber, selection.startColumn + replaceString.length));\n\t\t\t\tthis.research(true);\n\t\t\t} else {\n\t\t\t\tthis._decorations.setStartPosition(this._editor.getPosition());\n\t\t\t\tthis._setCurrentFindMatch(nextMatch.range);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _findMatches(findScope: Range, captureMatches: boolean, limitResultCount: number): editorCommon.FindMatch[] {\n\t\tlet searchRange = FindModelBoundToEditorModel._getSearchRange(this._editor.getModel(), this._state.isReplaceRevealed, findScope);\n\t\treturn this._editor.getModel().findMatches(this._state.searchString, searchRange, this._state.isRegex, this._state.matchCase, this._state.wholeWord ? this._editor.getConfiguration().wordSeparators : null, captureMatches, limitResultCount);\n\t}\n\n\tpublic replaceAll(): void {\n\t\tif (!this._hasMatches()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst findScope = this._decorations.getFindScope();\n\n\t\tif (findScope === null && this._state.matchesCount >= MATCHES_LIMIT) {\n\t\t\t// Doing a replace on the entire file that is over 1k matches\n\t\t\tthis._largeReplaceAll();\n\t\t} else {\n\t\t\tthis._regularReplaceAll(findScope);\n\t\t}\n\n\t\tthis.research(false);\n\t}\n\n\tprivate _largeReplaceAll(): void {\n\t\tconst searchParams = new SearchParams(this._state.searchString, this._state.isRegex, this._state.matchCase, this._state.wholeWord ? this._editor.getConfiguration().wordSeparators : null);\n\t\tconst searchData = searchParams.parseSearchRequest();\n\t\tif (!searchData) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst model = this._editor.getModel();\n\t\tconst modelText = model.getValue(editorCommon.EndOfLinePreference.LF);\n\t\tconst fullModelRange = model.getFullModelRange();\n\n\t\tconst replacePattern = this._getReplacePattern();\n\t\tlet resultText: string;\n\t\tif (replacePattern.hasReplacementPatterns) {\n\t\t\tresultText = modelText.replace(searchData.regex, function () {\n\t\t\t\treturn replacePattern.buildReplaceString(arguments);\n\t\t\t});\n\t\t} else {\n\t\t\tresultText = modelText.replace(searchData.regex, replacePattern.buildReplaceString(null));\n\t\t}\n\n\t\tlet command = new ReplaceCommandThatPreservesSelection(fullModelRange, resultText, this._editor.getSelection());\n\t\tthis._executeEditorCommand('replaceAll', command);\n\t}\n\n\tprivate _regularReplaceAll(findScope: Range): void {\n\t\tconst replacePattern = this._getReplacePattern();\n\t\t// Get all the ranges (even more than the highlighted ones)\n\t\tlet matches = this._findMatches(findScope, replacePattern.hasReplacementPatterns, Constants.MAX_SAFE_SMALL_INTEGER);\n\n\t\tlet replaceStrings: string[] = [];\n\t\tfor (let i = 0, len = matches.length; i < len; i++) {\n\t\t\treplaceStrings[i] = replacePattern.buildReplaceString(matches[i].matches);\n\t\t}\n\n\t\tlet command = new ReplaceAllCommand(this._editor.getSelection(), matches.map(m => m.range), replaceStrings);\n\t\tthis._executeEditorCommand('replaceAll', command);\n\t}\n\n\tpublic selectAllMatches(): void {\n\t\tif (!this._hasMatches()) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet findScope = this._decorations.getFindScope();\n\n\t\t// Get all the ranges (even more than the highlighted ones)\n\t\tlet matches = this._findMatches(findScope, false, Constants.MAX_SAFE_SMALL_INTEGER);\n\t\tlet selections = matches.map(m => new Selection(m.range.startLineNumber, m.range.startColumn, m.range.endLineNumber, m.range.endColumn));\n\n\t\t// If one of the ranges is the editor selection, then maintain it as primary\n\t\tlet editorSelection = this._editor.getSelection();\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tlet sel = selections[i];\n\t\t\tif (sel.equalsRange(editorSelection)) {\n\t\t\t\tselections = [editorSelection].concat(selections.slice(0, i)).concat(selections.slice(i + 1));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tthis._editor.setSelections(selections);\n\t}\n\n\tprivate _executeEditorCommand(source: string, command: editorCommon.ICommand): void {\n\t\ttry {\n\t\t\tthis._ignoreModelContentChanged = true;\n\t\t\tthis._editor.pushUndoStop();\n\t\t\tthis._editor.executeCommand(source, command);\n\t\t\tthis._editor.pushUndoStop();\n\t\t} finally {\n\t\t\tthis._ignoreModelContentChanged = false;\n\t\t}\n\t}\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\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { Range } from 'vs/editor/common/core/range';\nimport { ModelDecorationOptions } from 'vs/editor/common/model/textModelWithDecorations';\n\nexport interface IFoldingRange {\n\tstartLineNumber: number;\n\tendLineNumber: number;\n\tindent: number;\n\tisCollapsed?: boolean;\n}\n\nexport function toString(range: IFoldingRange): string {\n\treturn (range ? range.startLineNumber + '/' + range.endLineNumber : 'null') + (range.isCollapsed ? ' (collapsed)' : '') + ' - ' + range.indent;\n}\n\nexport class CollapsibleRegion {\n\n\tprivate decorationIds: string[];\n\tprivate _isCollapsed: boolean;\n\tprivate _indent: number;\n\n\tprivate _lastRange: IFoldingRange;\n\n\tpublic constructor(range: IFoldingRange, model: editorCommon.IModel, changeAccessor: editorCommon.IModelDecorationsChangeAccessor) {\n\t\tthis.decorationIds = [];\n\t\tthis.update(range, model, changeAccessor);\n\t}\n\n\tpublic get isCollapsed(): boolean {\n\t\treturn this._isCollapsed;\n\t}\n\n\tpublic get isExpanded(): boolean {\n\t\treturn !this._isCollapsed;\n\t}\n\n\tpublic get indent(): number {\n\t\treturn this._indent;\n\t}\n\n\tpublic get foldingRange(): IFoldingRange {\n\t\treturn this._lastRange;\n\t}\n\n\tpublic get startLineNumber(): number {\n\t\treturn this._lastRange ? this._lastRange.startLineNumber : void 0;\n\t}\n\n\tpublic get endLineNumber(): number {\n\t\treturn this._lastRange ? this._lastRange.endLineNumber : void 0;\n\t}\n\n\tpublic setCollapsed(isCollaped: boolean, changeAccessor: editorCommon.IModelDecorationsChangeAccessor): void {\n\t\tthis._isCollapsed = isCollaped;\n\t\tif (this.decorationIds.length > 0) {\n\t\t\tchangeAccessor.changeDecorationOptions(this.decorationIds[0], this.getVisualDecorationOptions());\n\t\t}\n\t}\n\n\tpublic getDecorationRange(model: editorCommon.IModel): Range {\n\t\tif (this.decorationIds.length > 0) {\n\t\t\treturn model.getDecorationRange(this.decorationIds[1]);\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate static _COLLAPSED_VISUAL_DECORATION = ModelDecorationOptions.register({\n\t\tstickiness: editorCommon.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\tafterContentClassName: 'inline-folded',\n\t\tlinesDecorationsClassName: 'folding collapsed'\n\t});\n\n\tprivate static _EXPANDED_VISUAL_DECORATION = ModelDecorationOptions.register({\n\t\tstickiness: editorCommon.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\tlinesDecorationsClassName: 'folding'\n\t});\n\n\tprivate getVisualDecorationOptions(): ModelDecorationOptions {\n\t\tif (this._isCollapsed) {\n\t\t\treturn CollapsibleRegion._COLLAPSED_VISUAL_DECORATION;\n\t\t} else {\n\t\t\treturn CollapsibleRegion._EXPANDED_VISUAL_DECORATION;\n\t\t}\n\t}\n\n\tprivate static _RANGE_DECORATION = ModelDecorationOptions.register({\n\t\tstickiness: editorCommon.TrackedRangeStickiness.GrowsOnlyWhenTypingBefore\n\t});\n\n\tprivate getRangeDecorationOptions(): ModelDecorationOptions {\n\t\treturn CollapsibleRegion._RANGE_DECORATION;\n\t}\n\n\tpublic update(newRange: IFoldingRange, model: editorCommon.IModel, changeAccessor: editorCommon.IModelDecorationsChangeAccessor): void {\n\t\tthis._lastRange = newRange;\n\t\tthis._isCollapsed = !!newRange.isCollapsed;\n\t\tthis._indent = newRange.indent;\n\n\t\tlet newDecorations: editorCommon.IModelDeltaDecoration[] = [];\n\n\t\tlet maxColumn = model.getLineMaxColumn(newRange.startLineNumber);\n\t\tlet visualRng = {\n\t\t\tstartLineNumber: newRange.startLineNumber,\n\t\t\tstartColumn: maxColumn - 1,\n\t\t\tendLineNumber: newRange.startLineNumber,\n\t\t\tendColumn: maxColumn\n\t\t};\n\t\tnewDecorations.push({ range: visualRng, options: this.getVisualDecorationOptions() });\n\n\t\tlet colRng = {\n\t\t\tstartLineNumber: newRange.startLineNumber,\n\t\t\tstartColumn: 1,\n\t\t\tendLineNumber: newRange.endLineNumber,\n\t\t\tendColumn: model.getLineMaxColumn(newRange.endLineNumber)\n\t\t};\n\t\tnewDecorations.push({ range: colRng, options: this.getRangeDecorationOptions() });\n\n\t\tthis.decorationIds = changeAccessor.deltaDecorations(this.decorationIds, newDecorations);\n\t}\n\n\n\tpublic dispose(changeAccessor: editorCommon.IModelDecorationsChangeAccessor): void {\n\t\tthis._lastRange = null;\n\t\tthis.decorationIds = changeAccessor.deltaDecorations(this.decorationIds, []);\n\t}\n\n\tpublic toString(): string {\n\t\tlet str = this.isCollapsed ? 'collapsed ' : 'expanded ';\n\t\tif (this._lastRange) {\n\t\t\tstr += (this._lastRange.startLineNumber + '/' + this._lastRange.endLineNumber);\n\t\t} else {\n\t\t\tstr += 'no range';\n\t\t}\n\n\t\treturn str;\n\t}\n}\n\nexport function getCollapsibleRegionsToFoldAtLine(allRegions: CollapsibleRegion[], model: editorCommon.IModel, lineNumber: number, levels: number, up: boolean): CollapsibleRegion[] {\n\tlet surroundingRegion: CollapsibleRegion = getCollapsibleRegionAtLine(allRegions, model, lineNumber);\n\tif (!surroundingRegion) {\n\t\treturn [];\n\t}\n\tif (levels === 1) {\n\t\treturn [surroundingRegion];\n\t}\n\tlet result = getCollapsibleRegionsFor(surroundingRegion, allRegions, model, levels, up);\n\treturn result.filter(collapsibleRegion => !collapsibleRegion.isCollapsed);\n}\n\nexport function getCollapsibleRegionsToUnfoldAtLine(allRegions: CollapsibleRegion[], model: editorCommon.IModel, lineNumber: number, levels: number): CollapsibleRegion[] {\n\tlet surroundingRegion: CollapsibleRegion = getCollapsibleRegionAtLine(allRegions, model, lineNumber);\n\tif (!surroundingRegion) {\n\t\treturn [];\n\t}\n\tif (levels === 1) {\n\t\tlet regionToUnfold = surroundingRegion.isCollapsed ? surroundingRegion : getFoldedCollapsibleRegionAfterLine(allRegions, model, surroundingRegion, lineNumber);\n\t\treturn regionToUnfold ? [regionToUnfold] : [];\n\t}\n\tlet result = getCollapsibleRegionsFor(surroundingRegion, allRegions, model, levels, false);\n\treturn result.filter(collapsibleRegion => collapsibleRegion.isCollapsed);\n}\n\nfunction getCollapsibleRegionAtLine(allRegions: CollapsibleRegion[], model: editorCommon.IModel, lineNumber: number): CollapsibleRegion {\n\tlet collapsibleRegion: CollapsibleRegion = null;\n\tfor (let i = 0, len = allRegions.length; i < len; i++) {\n\t\tlet dec = allRegions[i];\n\t\tlet decRange = dec.getDecorationRange(model);\n\t\tif (decRange) {\n\t\t\tif (doesLineBelongsToCollapsibleRegion(decRange, lineNumber)) {\n\t\t\t\tcollapsibleRegion = dec;\n\t\t\t}\n\t\t\tif (doesCollapsibleRegionIsAfterLine(decRange, lineNumber)) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn collapsibleRegion;\n}\n\nfunction getFoldedCollapsibleRegionAfterLine(allRegions: CollapsibleRegion[], model: editorCommon.IModel, surroundingRegion: CollapsibleRegion, lineNumber: number): CollapsibleRegion {\n\tlet index = allRegions.indexOf(surroundingRegion);\n\tfor (let i = index + 1; i < allRegions.length; i++) {\n\t\tlet dec = allRegions[i];\n\t\tlet decRange = dec.getDecorationRange(model);\n\t\tif (decRange) {\n\t\t\tif (doesCollapsibleRegionIsAfterLine(decRange, lineNumber)) {\n\t\t\t\tif (!doesCollapsibleRegionContains(surroundingRegion.foldingRange, decRange)) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif (dec.isCollapsed) {\n\t\t\t\t\treturn dec;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function doesLineBelongsToCollapsibleRegion(range: IFoldingRange | Range, lineNumber: number): boolean {\n\treturn lineNumber >= range.startLineNumber && lineNumber <= range.endLineNumber;\n}\n\nfunction doesCollapsibleRegionIsAfterLine(range: IFoldingRange | Range, lineNumber: number): boolean {\n\treturn lineNumber < range.startLineNumber;\n}\nfunction doesCollapsibleRegionIsBeforeLine(range: IFoldingRange | Range, lineNumber: number): boolean {\n\treturn lineNumber > range.endLineNumber;\n}\n\nfunction doesCollapsibleRegionContains(range1: IFoldingRange | Range, range2: IFoldingRange | Range): boolean {\n\tif (range1 instanceof Range && range2 instanceof Range) {\n\t\treturn range1.containsRange(range2);\n\t}\n\treturn range1.startLineNumber <= range2.startLineNumber && range1.endLineNumber >= range2.endLineNumber;\n}\n\nfunction getCollapsibleRegionsFor(surroundingRegion: CollapsibleRegion, allRegions: CollapsibleRegion[], model: editorCommon.IModel, levels: number, up: boolean): CollapsibleRegion[] {\n\tlet collapsibleRegionsHierarchy: CollapsibleRegionsHierarchy = up ? new CollapsibleRegionsParentHierarchy(surroundingRegion, allRegions, model) : new CollapsibleRegionsChildrenHierarchy(surroundingRegion, allRegions, model);\n\treturn collapsibleRegionsHierarchy.getRegionsTill(levels);\n}\n\ninterface CollapsibleRegionsHierarchy {\n\tgetRegionsTill(level: number): CollapsibleRegion[];\n}\n\nclass CollapsibleRegionsChildrenHierarchy implements CollapsibleRegionsHierarchy {\n\n\tchildren: CollapsibleRegionsChildrenHierarchy[] = [];\n\tlastChildIndex: number;\n\n\tconstructor(private region: CollapsibleRegion, allRegions: CollapsibleRegion[], model: editorCommon.IModel) {\n\t\tfor (let index = allRegions.indexOf(region) + 1; index < allRegions.length; index++) {\n\t\t\tlet dec = allRegions[index];\n\t\t\tlet decRange = dec.getDecorationRange(model);\n\t\t\tif (decRange) {\n\t\t\t\tif (doesCollapsibleRegionContains(region.foldingRange, decRange)) {\n\t\t\t\t\tindex = this.processChildRegion(dec, allRegions, model, index);\n\t\t\t\t}\n\t\t\t\tif (doesCollapsibleRegionIsAfterLine(decRange, region.foldingRange.endLineNumber)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate processChildRegion(dec: CollapsibleRegion, allRegions: CollapsibleRegion[], model: editorCommon.IModel, index: number): number {\n\t\tlet childRegion = new CollapsibleRegionsChildrenHierarchy(dec, allRegions, model);\n\t\tthis.children.push(childRegion);\n\t\tthis.lastChildIndex = index;\n\t\treturn childRegion.children.length > 0 ? childRegion.lastChildIndex : index;\n\t}\n\n\tpublic getRegionsTill(level: number): CollapsibleRegion[] {\n\t\tlet result = [this.region];\n\t\tif (level > 1) {\n\t\t\tthis.children.forEach(region => result = result.concat(region.getRegionsTill(level - 1)));\n\t\t}\n\t\treturn result;\n\t}\n}\nclass CollapsibleRegionsParentHierarchy implements CollapsibleRegionsHierarchy {\n\n\tparent: CollapsibleRegionsParentHierarchy;\n\tlastChildIndex: number;\n\n\tconstructor(private region: CollapsibleRegion, allRegions: CollapsibleRegion[], model: editorCommon.IModel) {\n\t\tfor (let index = allRegions.indexOf(region) - 1; index >= 0; index--) {\n\t\t\tlet dec = allRegions[index];\n\t\t\tlet decRange = dec.getDecorationRange(model);\n\t\t\tif (decRange) {\n\t\t\t\tif (doesCollapsibleRegionContains(decRange, region.foldingRange)) {\n\t\t\t\t\tthis.parent = new CollapsibleRegionsParentHierarchy(dec, allRegions, model);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (doesCollapsibleRegionIsBeforeLine(decRange, region.foldingRange.endLineNumber)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic getRegionsTill(level: number): CollapsibleRegion[] {\n\t\tlet result = [this.region];\n\t\tif (this.parent && level > 1) {\n\t\t\tresult = result.concat(this.parent.getRegionsTill(level - 1));\n\t\t}\n\t\treturn result;\n\t}\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'use strict';\n\nimport 'vs/css!./snippetSession';\nimport { getLeadingWhitespace } from 'vs/base/common/strings';\nimport { ICommonCodeEditor, IModel, TrackedRangeStickiness, IIdentifiedSingleEditOperation } from 'vs/editor/common/editorCommon';\nimport { EditOperation } from 'vs/editor/common/core/editOperation';\nimport { TextmateSnippet, Placeholder, SnippetParser } from './snippetParser';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { Range } from 'vs/editor/common/core/range';\nimport { IPosition } from 'vs/editor/common/core/position';\nimport { groupBy } from 'vs/base/common/arrays';\nimport { dispose } from 'vs/base/common/lifecycle';\nimport { EditorSnippetVariableResolver } from \"./snippetVariables\";\nimport { ModelDecorationOptions } from 'vs/editor/common/model/textModelWithDecorations';\n\nexport class OneSnippet {\n\n\tprivate readonly _editor: ICommonCodeEditor;\n\tprivate readonly _snippet: TextmateSnippet;\n\tprivate readonly _offset: number;\n\n\tprivate _placeholderDecorations: Map;\n\tprivate _placeholderGroups: Placeholder[][];\n\tprivate _placeholderGroupsIdx: number;\n\n\tprivate static readonly _decor = {\n\t\tactive: ModelDecorationOptions.register({ stickiness: TrackedRangeStickiness.AlwaysGrowsWhenTypingAtEdges, className: 'snippet-placeholder' }),\n\t\tinactive: ModelDecorationOptions.register({ stickiness: TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges, className: 'snippet-placeholder' }),\n\t\tactiveFinal: ModelDecorationOptions.register({ stickiness: TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges, className: 'finish-snippet-placeholder' }),\n\t\tinactiveFinal: ModelDecorationOptions.register({ stickiness: TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges, className: 'finish-snippet-placeholder' }),\n\t};\n\n\tconstructor(editor: ICommonCodeEditor, snippet: TextmateSnippet, offset: number) {\n\t\tthis._editor = editor;\n\t\tthis._snippet = snippet;\n\t\tthis._offset = offset;\n\n\t\tthis._placeholderGroups = groupBy(snippet.placeholders, Placeholder.compareByIndex);\n\t\tthis._placeholderGroupsIdx = -1;\n\t}\n\n\tdispose(): void {\n\t\tif (this._placeholderDecorations) {\n\t\t\tthis._editor.changeDecorations(accessor => this._placeholderDecorations.forEach(handle => accessor.removeDecoration(handle)));\n\t\t}\n\t\tthis._placeholderGroups.length = 0;\n\t}\n\n\tprivate _initDecorations(): void {\n\n\t\tif (this._placeholderDecorations) {\n\t\t\t// already initialized\n\t\t\treturn;\n\t\t}\n\n\t\tthis._placeholderDecorations = new Map();\n\t\tconst model = this._editor.getModel();\n\n\t\tthis._editor.changeDecorations(accessor => {\n\t\t\t// create a decoration for each placeholder\n\t\t\tfor (const placeholder of this._snippet.placeholders) {\n\t\t\t\tconst placeholderOffset = this._snippet.offset(placeholder);\n\t\t\t\tconst placeholderLen = this._snippet.fullLen(placeholder);\n\t\t\t\tconst range = Range.fromPositions(\n\t\t\t\t\tmodel.getPositionAt(this._offset + placeholderOffset),\n\t\t\t\t\tmodel.getPositionAt(this._offset + placeholderOffset + placeholderLen)\n\t\t\t\t);\n\t\t\t\tconst options = placeholder.isFinalTabstop ? OneSnippet._decor.inactiveFinal : OneSnippet._decor.inactive;\n\t\t\t\tconst handle = accessor.addDecoration(range, options);\n\t\t\t\tthis._placeholderDecorations.set(placeholder, handle);\n\t\t\t}\n\t\t});\n\t}\n\n\tmove(fwd: boolean | undefined): Selection[] {\n\n\t\tthis._initDecorations();\n\n\t\tif (fwd === true && this._placeholderGroupsIdx < this._placeholderGroups.length - 1) {\n\t\t\tthis._placeholderGroupsIdx += 1;\n\n\t\t} else if (fwd === false && this._placeholderGroupsIdx > 0) {\n\t\t\tthis._placeholderGroupsIdx -= 1;\n\n\t\t} else {\n\t\t\t// the selection of the current placeholder might\n\t\t\t// not acurate any more -> simply restore it\n\t\t}\n\n\t\treturn this._editor.getModel().changeDecorations(accessor => {\n\n\t\t\tconst activePlaceholders = new Set();\n\n\t\t\t// change stickiness to always grow when typing at its edges\n\t\t\t// because these decorations represent the currently active\n\t\t\t// tabstop.\n\t\t\t// Special case #1: reaching the final tabstop\n\t\t\t// Special case #2: placeholders enclosing active placeholders\n\t\t\tconst selections: Selection[] = [];\n\t\t\tfor (const placeholder of this._placeholderGroups[this._placeholderGroupsIdx]) {\n\t\t\t\tconst id = this._placeholderDecorations.get(placeholder);\n\t\t\t\tconst range = this._editor.getModel().getDecorationRange(id);\n\t\t\t\tselections.push(new Selection(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn));\n\n\t\t\t\taccessor.changeDecorationOptions(id, placeholder.isFinalTabstop ? OneSnippet._decor.activeFinal : OneSnippet._decor.active);\n\t\t\t\tactivePlaceholders.add(placeholder);\n\n\t\t\t\tfor (const enclosingPlaceholder of this._snippet.enclosingPlaceholders(placeholder)) {\n\t\t\t\t\tconst id = this._placeholderDecorations.get(enclosingPlaceholder);\n\t\t\t\t\taccessor.changeDecorationOptions(id, enclosingPlaceholder.isFinalTabstop ? OneSnippet._decor.activeFinal : OneSnippet._decor.active);\n\t\t\t\t\tactivePlaceholders.add(enclosingPlaceholder);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// change stickness to never grow when typing at its edges\n\t\t\t// so that in-active tabstops never grow\n\t\t\tthis._placeholderDecorations.forEach((id, placeholder) => {\n\t\t\t\tif (!activePlaceholders.has(placeholder)) {\n\t\t\t\t\taccessor.changeDecorationOptions(id, placeholder.isFinalTabstop ? OneSnippet._decor.inactiveFinal : OneSnippet._decor.inactive);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn selections;\n\t\t});\n\t}\n\n\tget isAtFirstPlaceholder() {\n\t\treturn this._placeholderGroupsIdx <= 0 || this._placeholderGroups.length === 0;\n\t}\n\n\tget isAtLastPlaceholder() {\n\t\treturn this._placeholderGroupsIdx === this._placeholderGroups.length - 1;\n\t}\n\n\tget hasPlaceholder() {\n\t\treturn this._snippet.placeholders.length > 0;\n\t}\n\n\tget placeholderRanges() {\n\t\tconst ret: Range[] = [];\n\t\tthis._placeholderDecorations.forEach((id, placeholder) => {\n\t\t\tif (!placeholder.isFinalTabstop) {\n\t\t\t\tconst range = this._editor.getModel().getDecorationRange(id);\n\t\t\t\tif (range) {\n\t\t\t\t\tret.push(range);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn ret;\n\t}\n\n\tmerge(others: OneSnippet[]): void {\n\n\t\tconst model = this._editor.getModel();\n\n\t\tthis._editor.changeDecorations(accessor => {\n\n\t\t\t// For each active placeholder take one snippet and merge it\n\t\t\t// in that the placeholder (can be many for `$1foo$1foo`). Because\n\t\t\t// everything is sorted by editor selection we can simply remove\n\t\t\t// elements from the beginning of the array\n\t\t\tfor (const placeholder of this._placeholderGroups[this._placeholderGroupsIdx]) {\n\t\t\t\tconst nested = others.shift();\n\t\t\t\tconsole.assert(!nested._placeholderDecorations);\n\n\t\t\t\t// Massage placeholder-indicies of the nested snippet to be\n\t\t\t\t// sorted right after the insertion point. This ensures we move\n\t\t\t\t// through the placeholders in the correct order\n\t\t\t\tfor (const nestedPlaceholder of nested._snippet.placeholders) {\n\t\t\t\t\tif (nestedPlaceholder.isFinalTabstop) {\n\t\t\t\t\t\tnestedPlaceholder.index = placeholder.index + (nested._snippet.placeholders.length / 10);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnestedPlaceholder.index = placeholder.index + (nestedPlaceholder.index / 10);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._snippet.replace(placeholder, nested._snippet.children);\n\n\t\t\t\t// Remove the placeholder at which position are inserting\n\t\t\t\t// the snippet and also remove its decoration.\n\t\t\t\tconst id = this._placeholderDecorations.get(placeholder);\n\t\t\t\taccessor.removeDecoration(id);\n\t\t\t\tthis._placeholderDecorations.delete(placeholder);\n\n\t\t\t\t// For each *new* placeholder we create decoration to monitor\n\t\t\t\t// how and if it grows/shrinks.\n\t\t\t\tfor (const placeholder of nested._snippet.placeholders) {\n\t\t\t\t\tconst placeholderOffset = nested._snippet.offset(placeholder);\n\t\t\t\t\tconst placeholderLen = nested._snippet.fullLen(placeholder);\n\t\t\t\t\tconst range = Range.fromPositions(\n\t\t\t\t\t\tmodel.getPositionAt(nested._offset + placeholderOffset),\n\t\t\t\t\t\tmodel.getPositionAt(nested._offset + placeholderOffset + placeholderLen)\n\t\t\t\t\t);\n\t\t\t\t\tconst handle = accessor.addDecoration(range, OneSnippet._decor.inactive);\n\t\t\t\t\tthis._placeholderDecorations.set(placeholder, handle);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Last, re-create the placeholder groups by sorting placeholders by their index.\n\t\t\tthis._placeholderGroups = groupBy(this._snippet.placeholders, Placeholder.compareByIndex);\n\t\t});\n\t}\n}\n\nexport class SnippetSession {\n\n\tstatic adjustWhitespace(model: IModel, position: IPosition, template: string): string {\n\n\t\tconst line = model.getLineContent(position.lineNumber);\n\t\tconst lineLeadingWhitespace = getLeadingWhitespace(line, 0, position.column - 1);\n\t\tconst templateLines = template.split(/\\r\\n|\\r|\\n/);\n\n\t\tfor (let i = 1; i < templateLines.length; i++) {\n\t\t\tlet templateLeadingWhitespace = getLeadingWhitespace(templateLines[i]);\n\t\t\ttemplateLines[i] = model.normalizeIndentation(lineLeadingWhitespace + templateLeadingWhitespace) + templateLines[i].substr(templateLeadingWhitespace.length);\n\t\t}\n\t\treturn templateLines.join(model.getEOL());\n\t}\n\n\tstatic adjustSelection(model: IModel, selection: Selection, overwriteBefore: number, overwriteAfter: number): Selection {\n\t\tif (overwriteBefore !== 0 || overwriteAfter !== 0) {\n\t\t\tlet { startLineNumber, startColumn, endLineNumber, endColumn } = selection;\n\t\t\tstartColumn -= overwriteBefore;\n\t\t\tendColumn += overwriteAfter;\n\n\t\t\tconst range = model.validateRange(Range.plusRange(selection, {\n\t\t\t\tstartLineNumber,\n\t\t\t\tstartColumn,\n\t\t\t\tendLineNumber,\n\t\t\t\tendColumn,\n\t\t\t}));\n\n\t\t\tselection = Selection.createWithDirection(\n\t\t\t\trange.startLineNumber, range.startColumn,\n\t\t\t\trange.endLineNumber, range.endColumn,\n\t\t\t\tselection.getDirection()\n\t\t\t);\n\t\t}\n\t\treturn selection;\n\t}\n\n\tstatic createEditsAndSnippets(editor: ICommonCodeEditor, template: string, overwriteBefore: number, overwriteAfter: number, enforceFinalTabstop: boolean): { edits: IIdentifiedSingleEditOperation[], snippets: OneSnippet[] } {\n\n\t\tconst model = editor.getModel();\n\t\tconst edits: IIdentifiedSingleEditOperation[] = [];\n\t\tconst snippets: OneSnippet[] = [];\n\n\t\tlet delta = 0;\n\n\t\t// know what text the overwrite[Before|After] extensions\n\t\t// of the primary curser have selected because only when\n\t\t// secondary selections extend to the same text we can grow them\n\t\tlet firstBeforeText = model.getValueInRange(SnippetSession.adjustSelection(model, editor.getSelection(), overwriteBefore, 0));\n\t\tlet firstAfterText = model.getValueInRange(SnippetSession.adjustSelection(model, editor.getSelection(), 0, overwriteAfter));\n\n\t\t// sort selections by their start position but remeber\n\t\t// the original index. that allows you to create correct\n\t\t// offset-based selection logic without changing the\n\t\t// primary selection\n\t\tconst indexedSelection = editor.getSelections()\n\t\t\t.map((selection, idx) => ({ selection, idx }))\n\t\t\t.sort((a, b) => Range.compareRangesUsingStarts(a.selection, b.selection));\n\n\t\tfor (const { selection, idx } of indexedSelection) {\n\n\t\t\t// extend selection with the `overwriteBefore` and `overwriteAfter` and then\n\t\t\t// compare if this matches the extensions of the primary selection\n\t\t\tlet extensionBefore = SnippetSession.adjustSelection(model, selection, overwriteBefore, 0);\n\t\t\tlet extensionAfter = SnippetSession.adjustSelection(model, selection, 0, overwriteAfter);\n\t\t\tif (firstBeforeText !== model.getValueInRange(extensionBefore)) {\n\t\t\t\textensionBefore = selection;\n\t\t\t}\n\t\t\tif (firstAfterText !== model.getValueInRange(extensionAfter)) {\n\t\t\t\textensionAfter = selection;\n\t\t\t}\n\n\t\t\t// merge the before and after selection into one\n\t\t\tconst snippetSelection = selection\n\t\t\t\t.setStartPosition(extensionBefore.startLineNumber, extensionBefore.startColumn)\n\t\t\t\t.setEndPosition(extensionAfter.endLineNumber, extensionAfter.endColumn);\n\n\t\t\t// adjust the template string to match the indentation and\n\t\t\t// whitespace rules of this insert location (can be different for each cursor)\n\t\t\tconst start = snippetSelection.getStartPosition();\n\t\t\tconst adjustedTemplate = SnippetSession.adjustWhitespace(model, start, template);\n\n\t\t\tconst snippet = SnippetParser.parse(adjustedTemplate, enforceFinalTabstop).resolveVariables(new EditorSnippetVariableResolver(model, selection));\n\n\t\t\tconst offset = model.getOffsetAt(start) + delta;\n\t\t\tdelta += snippet.text.length - model.getValueLengthInRange(snippetSelection);\n\n\t\t\t// store snippets with the index of their originating selection.\n\t\t\t// that ensures the primiary cursor stays primary despite not being\n\t\t\t// the one with lowest start position\n\t\t\tedits[idx] = EditOperation.replace(snippetSelection, snippet.text);\n\t\t\tsnippets[idx] = new OneSnippet(editor, snippet, offset);\n\t\t}\n\n\t\treturn { edits, snippets };\n\t}\n\n\tprivate readonly _editor: ICommonCodeEditor;\n\tprivate readonly _template: string;\n\tprivate readonly _overwriteBefore: number;\n\tprivate readonly _overwriteAfter: number;\n\tprivate _snippets: OneSnippet[] = [];\n\n\tconstructor(editor: ICommonCodeEditor, template: string, overwriteBefore: number = 0, overwriteAfter: number = 0) {\n\t\tthis._editor = editor;\n\t\tthis._template = template;\n\t\tthis._overwriteBefore = overwriteBefore;\n\t\tthis._overwriteAfter = overwriteAfter;\n\t}\n\n\tdispose(): void {\n\t\tdispose(this._snippets);\n\t}\n\n\tinsert(): void {\n\n\t\tconst model = this._editor.getModel();\n\n\t\t// make insert edit and start with first selections\n\t\tconst { edits, snippets } = SnippetSession.createEditsAndSnippets(this._editor, this._template, this._overwriteBefore, this._overwriteAfter, false);\n\t\tthis._snippets = snippets;\n\n\t\tthis._editor.setSelections(model.pushEditOperations(this._editor.getSelections(), edits, undoEdits => {\n\t\t\tif (this._snippets[0].hasPlaceholder) {\n\t\t\t\treturn this._move(true);\n\t\t\t} else {\n\t\t\t\treturn undoEdits.map(edit => Selection.fromPositions(edit.range.getEndPosition()));\n\t\t\t}\n\t\t}));\n\t}\n\n\tmerge(template: string, overwriteBefore: number = 0, overwriteAfter: number = 0): void {\n\t\tconst { edits, snippets } = SnippetSession.createEditsAndSnippets(this._editor, template, overwriteBefore, overwriteAfter, true);\n\n\t\tthis._editor.setSelections(this._editor.getModel().pushEditOperations(this._editor.getSelections(), edits, undoEdits => {\n\n\t\t\tfor (const snippet of this._snippets) {\n\t\t\t\tsnippet.merge(snippets);\n\t\t\t}\n\t\t\tconsole.assert(snippets.length === 0);\n\n\t\t\tif (this._snippets[0].hasPlaceholder) {\n\t\t\t\treturn this._move(undefined);\n\t\t\t} else {\n\t\t\t\treturn undoEdits.map(edit => Selection.fromPositions(edit.range.getEndPosition()));\n\t\t\t}\n\t\t}));\n\t}\n\n\tnext(): void {\n\t\tconst newSelections = this._move(true);\n\t\tthis._editor.setSelections(newSelections);\n\t}\n\n\tprev(): void {\n\t\tconst newSelections = this._move(false);\n\t\tthis._editor.setSelections(newSelections);\n\t}\n\n\tprivate _move(fwd: boolean | undefined): Selection[] {\n\t\tconst selections: Selection[] = [];\n\t\tfor (const snippet of this._snippets) {\n\t\t\tconst oneSelection = snippet.move(fwd);\n\t\t\tselections.push(...oneSelection);\n\t\t}\n\t\treturn selections;\n\t}\n\n\tget isAtFirstPlaceholder() {\n\t\treturn this._snippets[0].isAtFirstPlaceholder;\n\t}\n\n\tget isAtLastPlaceholder() {\n\t\treturn this._snippets[0].isAtLastPlaceholder;\n\t}\n\n\tget hasPlaceholder() {\n\t\treturn this._snippets[0].hasPlaceholder;\n\t}\n\n\tisSelectionWithinPlaceholders(): boolean {\n\n\t\tif (!this.hasPlaceholder) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst selections = this._editor.getSelections();\n\t\tif (selections.length < this._snippets.length) {\n\t\t\t// this means we started snippet mode with N\n\t\t\t// selections and have M (N > M) selections.\n\t\t\t// So one snippet is without selection -> cancel\n\t\t\treturn false;\n\t\t}\n\n\t\tconst ranges: Range[] = [];\n\t\tfor (const snippet of this._snippets) {\n\t\t\tranges.push(...snippet.placeholderRanges);\n\t\t}\n\n\t\tif (selections.length > ranges.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// sort selections and ranges by their start position\n\t\t// and then make sure each selection is contained by\n\t\t// a placeholder range\n\t\tselections.sort(Range.compareRangesUsingStarts);\n\t\tranges.sort(Range.compareRangesUsingStarts);\n\n\t\touter: for (const selection of selections) {\n\t\t\tlet range: Range;\n\t\t\twhile (range = ranges.shift()) {\n\t\t\t\tif (range.containsRange(selection)) {\n\t\t\t\t\tcontinue outer;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/css!./zoneWidget';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { Widget } from 'vs/base/browser/ui/widget';\nimport * as objects from 'vs/base/common/objects';\nimport * as dom from 'vs/base/browser/dom';\nimport { Sash, Orientation, IHorizontalSashLayoutProvider, ISashEvent } from 'vs/base/browser/ui/sash/sash';\nimport { Range, IRange } from 'vs/editor/common/core/range';\nimport { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, IViewZone, IViewZoneChangeAccessor } from 'vs/editor/browser/editorBrowser';\nimport { Color, RGBA } from 'vs/base/common/color';\nimport { EditorLayoutInfo } from 'vs/editor/common/config/editorOptions';\nimport { Position, IPosition } from 'vs/editor/common/core/position';\nimport { ModelDecorationOptions } from 'vs/editor/common/model/textModelWithDecorations';\nimport { IdGenerator } from 'vs/base/common/idGenerator';\n\nexport interface IOptions {\n\tshowFrame?: boolean;\n\tshowArrow?: boolean;\n\tframeWidth?: number;\n\tclassName?: string;\n\tisAccessible?: boolean;\n\tisResizeable?: boolean;\n\tframeColor?: Color;\n\tarrowColor?: Color;\n}\n\nexport interface IStyles {\n\tframeColor?: Color;\n\tarrowColor?: Color;\n}\n\nconst defaultColor = Color.fromRGBA(new RGBA(0, 122, 204));\n\nconst defaultOptions: IOptions = {\n\tshowArrow: true,\n\tshowFrame: true,\n\tclassName: '',\n\tframeColor: defaultColor,\n\tarrowColor: defaultColor\n};\n\nconst WIDGET_ID = 'vs.editor.contrib.zoneWidget';\n\nexport class ViewZoneDelegate implements IViewZone {\n\n\tpublic domNode: HTMLElement;\n\tpublic id: number;\n\tpublic afterLineNumber: number;\n\tpublic afterColumn: number;\n\tpublic heightInLines: number;\n\n\tprivate _onDomNodeTop: (top: number) => void;\n\tprivate _onComputedHeight: (height: number) => void;\n\n\tconstructor(domNode: HTMLElement, afterLineNumber: number, afterColumn: number, heightInLines: number,\n\t\tonDomNodeTop: (top: number) => void,\n\t\tonComputedHeight: (height: number) => void\n\t) {\n\t\tthis.domNode = domNode;\n\t\tthis.afterLineNumber = afterLineNumber;\n\t\tthis.afterColumn = afterColumn;\n\t\tthis.heightInLines = heightInLines;\n\t\tthis._onDomNodeTop = onDomNodeTop;\n\t\tthis._onComputedHeight = onComputedHeight;\n\t}\n\n\tpublic onDomNodeTop(top: number): void {\n\t\tthis._onDomNodeTop(top);\n\t}\n\n\tpublic onComputedHeight(height: number): void {\n\t\tthis._onComputedHeight(height);\n\t}\n}\n\nexport class OverlayWidgetDelegate implements IOverlayWidget {\n\n\tprivate _id: string;\n\tprivate _domNode: HTMLElement;\n\n\tconstructor(id: string, domNode: HTMLElement) {\n\t\tthis._id = id;\n\t\tthis._domNode = domNode;\n\t}\n\n\tpublic getId(): string {\n\t\treturn this._id;\n\t}\n\n\tpublic getDomNode(): HTMLElement {\n\t\treturn this._domNode;\n\t}\n\n\tpublic getPosition(): IOverlayWidgetPosition {\n\t\treturn null;\n\t}\n}\n\nclass Arrow {\n\n\tprivate static _IdGenerator = new IdGenerator('.arrow-decoration-');\n\n\tprivate readonly _ruleName = Arrow._IdGenerator.nextId();\n\tprivate _decorations: string[] = [];\n\tprivate _color: string;\n\tprivate _height: number;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor\n\t) {\n\t\t//\n\t}\n\n\tdispose(): void {\n\t\tthis.hide();\n\t\tdom.removeCSSRulesContainingSelector(this._ruleName);\n\t}\n\n\tset color(value: string) {\n\t\tif (this._color !== value) {\n\t\t\tthis._color = value;\n\t\t\tthis._updateStyle();\n\t\t}\n\t}\n\n\tset height(value: number) {\n\t\tif (this._height !== value) {\n\t\t\tthis._height = value;\n\t\t\tthis._updateStyle();\n\t\t}\n\t}\n\n\tprivate _updateStyle(): void {\n\t\tdom.removeCSSRulesContainingSelector(this._ruleName);\n\t\tdom.createCSSRule(\n\t\t\t`.monaco-editor ${this._ruleName}`,\n\t\t\t`border-style: solid; border-color: transparent; border-bottom-color: ${this._color}; border-width: ${this._height}px; bottom: -${this._height}px; margin-left: -${this._height}px; `\n\t\t);\n\t}\n\n\tshow(where: IPosition): void {\n\t\tthis._decorations = this._editor.deltaDecorations(\n\t\t\tthis._decorations,\n\t\t\t[{ range: Range.fromPositions(where), options: { className: this._ruleName } }]\n\t\t);\n\t}\n\n\thide(): void {\n\t\tthis._editor.deltaDecorations(this._decorations, []);\n\t}\n}\n\nexport abstract class ZoneWidget extends Widget implements IHorizontalSashLayoutProvider {\n\n\tprivate _arrow: Arrow;\n\tprivate _overlayWidget: OverlayWidgetDelegate;\n\tprivate _resizeSash: Sash;\n\tprivate _positionMarkerId: string[] = [];\n\n\tprotected _viewZone: ViewZoneDelegate;\n\tprotected _disposables: IDisposable[] = [];\n\n\tpublic container: HTMLElement;\n\tpublic domNode: HTMLElement;\n\tpublic editor: ICodeEditor;\n\tpublic options: IOptions;\n\n\n\tconstructor(editor: ICodeEditor, options: IOptions = {}) {\n\t\tsuper();\n\t\tthis.editor = editor;\n\t\tthis.options = objects.clone(options);\n\t\tobjects.mixin(this.options, defaultOptions, false);\n\t\tthis.domNode = document.createElement('div');\n\t\tif (!this.options.isAccessible) {\n\t\t\tthis.domNode.setAttribute('aria-hidden', 'true');\n\t\t\tthis.domNode.setAttribute('role', 'presentation');\n\t\t}\n\n\t\tthis._disposables.push(this.editor.onDidLayoutChange((info: EditorLayoutInfo) => {\n\t\t\tconst width = this._getWidth(info);\n\t\t\tthis.domNode.style.width = width + 'px';\n\t\t\tthis._onWidth(width);\n\t\t}));\n\t}\n\n\tpublic dispose(): void {\n\n\t\tdispose(this._disposables);\n\n\t\tif (this._overlayWidget) {\n\t\t\tthis.editor.removeOverlayWidget(this._overlayWidget);\n\t\t\tthis._overlayWidget = null;\n\t\t}\n\n\t\tif (this._viewZone) {\n\t\t\tthis.editor.changeViewZones(accessor => {\n\t\t\t\taccessor.removeZone(this._viewZone.id);\n\t\t\t\tthis._viewZone = null;\n\t\t\t});\n\t\t}\n\n\t\tthis.editor.deltaDecorations(this._positionMarkerId, []);\n\t}\n\n\tpublic create(): void {\n\n\t\tdom.addClass(this.domNode, 'zone-widget');\n\t\tdom.addClass(this.domNode, this.options.className);\n\n\t\tthis.container = document.createElement('div');\n\t\tdom.addClass(this.container, 'zone-widget-container');\n\t\tthis.domNode.appendChild(this.container);\n\t\tif (this.options.showArrow) {\n\t\t\tthis._arrow = new Arrow(this.editor);\n\t\t\tthis._disposables.push(this._arrow);\n\t\t}\n\t\tthis._fillContainer(this.container);\n\t\tthis._initSash();\n\t\tthis._applyStyles();\n\t}\n\n\tpublic style(styles: IStyles): void {\n\t\tif (styles.frameColor) {\n\t\t\tthis.options.frameColor = styles.frameColor;\n\t\t}\n\t\tif (styles.arrowColor) {\n\t\t\tthis.options.arrowColor = styles.arrowColor;\n\t\t}\n\t\tthis._applyStyles();\n\t}\n\n\tprotected _applyStyles(): void {\n\t\tif (this.container) {\n\t\t\tlet frameColor = this.options.frameColor.toString();\n\t\t\tthis.container.style.borderTopColor = frameColor;\n\t\t\tthis.container.style.borderBottomColor = frameColor;\n\t\t}\n\t\tif (this._arrow) {\n\t\t\tlet arrowColor = this.options.arrowColor.toString();\n\t\t\tthis._arrow.color = arrowColor;\n\t\t}\n\t}\n\n\tprivate _getWidth(info: EditorLayoutInfo = this.editor.getLayoutInfo()): number {\n\t\treturn info.width - info.minimapWidth - info.verticalScrollbarWidth;\n\t}\n\n\tprivate _onViewZoneTop(top: number): void {\n\t\tthis.domNode.style.top = top + 'px';\n\t}\n\n\tprivate _onViewZoneHeight(height: number): void {\n\t\tthis.domNode.style.height = `${height}px`;\n\n\t\tlet containerHeight = height - this._decoratingElementsHeight();\n\t\tthis.container.style.height = `${containerHeight}px`;\n\t\tthis._doLayout(containerHeight, this._getWidth());\n\n\t\tthis._resizeSash.layout();\n\t}\n\n\tpublic get position(): Position {\n\t\tconst [id] = this._positionMarkerId;\n\t\tif (id) {\n\t\t\treturn this.editor.getModel().getDecorationRange(id).getStartPosition();\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprotected _isShowing: boolean = false;\n\n\tpublic show(rangeOrPos: IRange | IPosition, heightInLines: number): void {\n\t\tconst range = Range.isIRange(rangeOrPos)\n\t\t\t? rangeOrPos\n\t\t\t: new Range(rangeOrPos.lineNumber, rangeOrPos.column, rangeOrPos.lineNumber, rangeOrPos.column);\n\n\t\tthis._isShowing = true;\n\t\tthis._showImpl(range, heightInLines);\n\t\tthis._isShowing = false;\n\t\tthis._positionMarkerId = this.editor.deltaDecorations(this._positionMarkerId, [{ range, options: ModelDecorationOptions.EMPTY }]);\n\t}\n\n\tpublic hide(): void {\n\t\tif (this._viewZone) {\n\t\t\tthis.editor.changeViewZones(accessor => {\n\t\t\t\taccessor.removeZone(this._viewZone.id);\n\t\t\t});\n\t\t\tthis._viewZone = null;\n\t\t}\n\t\tif (this._overlayWidget) {\n\t\t\tthis.editor.removeOverlayWidget(this._overlayWidget);\n\t\t\tthis._overlayWidget = null;\n\t\t}\n\t\tif (this._arrow) {\n\t\t\tthis._arrow.hide();\n\t\t}\n\t}\n\n\tprivate _decoratingElementsHeight(): number {\n\t\tlet lineHeight = this.editor.getConfiguration().lineHeight;\n\t\tlet result = 0;\n\n\t\tif (this.options.showArrow) {\n\t\t\tlet arrowHeight = Math.round(lineHeight / 3);\n\t\t\tresult += 2 * arrowHeight;\n\t\t}\n\n\t\tif (this.options.showFrame) {\n\t\t\tlet frameThickness = Math.round(lineHeight / 9);\n\t\t\tresult += 2 * frameThickness;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate _showImpl(where: IRange, heightInLines: number): void {\n\t\tconst position = {\n\t\t\tlineNumber: where.startLineNumber,\n\t\t\tcolumn: where.startColumn\n\t\t};\n\n\t\tconst width = this._getWidth();\n\t\tthis.domNode.style.width = `${width}px`;\n\n\t\t// Render the widget as zone (rendering) and widget (lifecycle)\n\t\tconst viewZoneDomNode = document.createElement('div');\n\t\tviewZoneDomNode.style.overflow = 'hidden';\n\t\tconst lineHeight = this.editor.getConfiguration().lineHeight;\n\n\t\t// adjust heightInLines to viewport\n\t\tconst maxHeightInLines = (this.editor.getLayoutInfo().height / lineHeight) * .8;\n\t\tif (heightInLines >= maxHeightInLines) {\n\t\t\theightInLines = maxHeightInLines;\n\t\t}\n\n\t\tlet arrowHeight = 0;\n\t\tlet frameThickness = 0;\n\n\t\t// Render the arrow one 1/3 of an editor line height\n\t\tif (this.options.showArrow) {\n\t\t\tarrowHeight = Math.round(lineHeight / 3);\n\t\t\tthis._arrow.height = arrowHeight;\n\t\t\tthis._arrow.show(position);\n\t\t}\n\n\t\t// Render the frame as 1/9 of an editor line height\n\t\tif (this.options.showFrame) {\n\t\t\tframeThickness = Math.round(lineHeight / 9);\n\t\t}\n\n\t\t// insert zone widget\n\t\tthis.editor.changeViewZones((accessor: IViewZoneChangeAccessor) => {\n\t\t\tif (this._viewZone) {\n\t\t\t\taccessor.removeZone(this._viewZone.id);\n\t\t\t}\n\t\t\tif (this._overlayWidget) {\n\t\t\t\tthis.editor.removeOverlayWidget(this._overlayWidget);\n\t\t\t\tthis._overlayWidget = null;\n\t\t\t}\n\t\t\tthis.domNode.style.top = '-1000px';\n\t\t\tthis._viewZone = new ViewZoneDelegate(\n\t\t\t\tviewZoneDomNode,\n\t\t\t\tposition.lineNumber,\n\t\t\t\tposition.column,\n\t\t\t\theightInLines,\n\t\t\t\t(top: number) => this._onViewZoneTop(top),\n\t\t\t\t(height: number) => this._onViewZoneHeight(height)\n\t\t\t);\n\t\t\tthis._viewZone.id = accessor.addZone(this._viewZone);\n\t\t\tthis._overlayWidget = new OverlayWidgetDelegate(WIDGET_ID + this._viewZone.id, this.domNode);\n\t\t\tthis.editor.addOverlayWidget(this._overlayWidget);\n\t\t});\n\n\t\tif (this.options.showFrame) {\n\t\t\tconst width = this.options.frameWidth ? this.options.frameWidth : frameThickness;\n\t\t\tthis.container.style.borderTopWidth = width + 'px';\n\t\t\tthis.container.style.borderBottomWidth = width + 'px';\n\t\t}\n\n\t\tlet containerHeight = heightInLines * lineHeight - this._decoratingElementsHeight();\n\t\tthis.container.style.top = arrowHeight + 'px';\n\t\tthis.container.style.height = containerHeight + 'px';\n\t\tthis.container.style.overflow = 'hidden';\n\n\n\t\tthis._doLayout(containerHeight, width);\n\n\t\tthis.editor.setSelection(where);\n\n\t\t// Reveal the line above or below the zone widget, to get the zone widget in the viewport\n\t\tconst revealLineNumber = Math.min(this.editor.getModel().getLineCount(), Math.max(1, where.endLineNumber + 1));\n\t\tthis.editor.revealLine(revealLineNumber);\n\t}\n\n\tprotected setCssClass(className: string, classToReplace?: string): void {\n\t\tif (classToReplace) {\n\t\t\tthis.container.classList.remove(classToReplace);\n\t\t}\n\n\t\tdom.addClass(this.container, className);\n\n\t}\n\n\tprotected abstract _fillContainer(container: HTMLElement): void;\n\n\tprotected _onWidth(widthInPixel: number): void {\n\t\t// implement in subclass\n\t}\n\n\tprotected _doLayout(heightInPixel: number, widthInPixel: number): void {\n\t\t// implement in subclass\n\t}\n\n\tprotected _relayout(newHeightInLines: number): void {\n\t\tif (this._viewZone.heightInLines !== newHeightInLines) {\n\t\t\tthis.editor.changeViewZones(accessor => {\n\t\t\t\tthis._viewZone.heightInLines = newHeightInLines;\n\t\t\t\taccessor.layoutZone(this._viewZone.id);\n\t\t\t});\n\t\t}\n\t}\n\n\t// --- sash\n\n\tprivate _initSash(): void {\n\t\tthis._resizeSash = new Sash(this.domNode, this, { orientation: Orientation.HORIZONTAL });\n\n\t\tif (!this.options.isResizeable) {\n\t\t\tthis._resizeSash.hide();\n\t\t\tthis._resizeSash.disable();\n\t\t}\n\n\t\tlet data: { startY: number; heightInLines: number; };\n\t\tthis._disposables.push(this._resizeSash.addListener('start', (e: ISashEvent) => {\n\t\t\tif (this._viewZone) {\n\t\t\t\tdata = {\n\t\t\t\t\tstartY: e.startY,\n\t\t\t\t\theightInLines: this._viewZone.heightInLines,\n\t\t\t\t};\n\t\t\t}\n\t\t}));\n\n\t\tthis._disposables.push(this._resizeSash.addListener('end', () => {\n\t\t\tdata = undefined;\n\t\t}));\n\n\t\tthis._disposables.push(this._resizeSash.addListener('change', (evt: ISashEvent) => {\n\t\t\tif (data) {\n\t\t\t\tlet lineDelta = (evt.currentY - data.startY) / this.editor.getConfiguration().lineHeight;\n\t\t\t\tlet roundedLineDelta = lineDelta < 0 ? Math.ceil(lineDelta) : Math.floor(lineDelta);\n\t\t\t\tlet newHeightInLines = data.heightInLines + roundedLineDelta;\n\n\t\t\t\tif (newHeightInLines > 5 && newHeightInLines < 35) {\n\t\t\t\t\tthis._relayout(newHeightInLines);\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\t}\n\n\tgetHorizontalSashLeft() {\n\t\treturn 0;\n\t}\n\n\tgetHorizontalSashTop() {\n\t\treturn parseInt(this.domNode.style.height) - (this._decoratingElementsHeight() / 2);\n\t}\n\n\tgetHorizontalSashWidth() {\n\t\tconst layoutInfo = this.editor.getLayoutInfo();\n\t\treturn layoutInfo.width - layoutInfo.minimapWidth;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport { flatten } from 'vs/base/common/arrays';\nimport { IStringDictionary, forEach, values, groupBy, size } from 'vs/base/common/collections';\nimport { IDisposable, dispose, IReference } from 'vs/base/common/lifecycle';\nimport URI from 'vs/base/common/uri';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { ITextModelService, ITextEditorModel } from 'vs/editor/common/services/resolverService';\nimport { IFileService, IFileChange } from 'vs/platform/files/common/files';\nimport { EditOperation } from 'vs/editor/common/core/editOperation';\nimport { Range, IRange } from 'vs/editor/common/core/range';\nimport { Selection, ISelection } from 'vs/editor/common/core/selection';\nimport { IIdentifiedSingleEditOperation, IModel, EndOfLineSequence, ICommonCodeEditor } from 'vs/editor/common/editorCommon';\nimport { IProgressRunner } from 'vs/platform/progress/common/progress';\n\nexport interface IResourceEdit {\n\tresource: URI;\n\trange?: IRange;\n\tnewText: string;\n\tnewEol?: EndOfLineSequence;\n}\n\ninterface IRecording {\n\tstop(): void;\n\thasChanged(resource: URI): boolean;\n\tallChanges(): IFileChange[];\n}\n\nclass ChangeRecorder {\n\n\tprivate _fileService: IFileService;\n\n\tconstructor(fileService?: IFileService) {\n\t\tthis._fileService = fileService;\n\t}\n\n\tpublic start(): IRecording {\n\n\t\tconst changes: IStringDictionary = Object.create(null);\n\n\t\tlet stop: IDisposable;\n\t\tif (this._fileService) {\n\t\t\tstop = this._fileService.onFileChanges((event) => {\n\t\t\t\tevent.changes.forEach(change => {\n\n\t\t\t\t\tconst key = String(change.resource);\n\t\t\t\t\tlet array = changes[key];\n\n\t\t\t\t\tif (!array) {\n\t\t\t\t\t\tchanges[key] = array = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push(change);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\tstop: () => { return stop && stop.dispose(); },\n\t\t\thasChanged: (resource: URI) => !!changes[resource.toString()],\n\t\t\tallChanges: () => flatten(values(changes))\n\t\t};\n\t}\n}\n\nclass EditTask implements IDisposable {\n\n\tprivate _initialSelections: Selection[];\n\tprivate _endCursorSelection: Selection;\n\tprivate get _model(): IModel { return this._modelReference.object.textEditorModel; }\n\tprivate _modelReference: IReference;\n\tprivate _edits: IIdentifiedSingleEditOperation[];\n\tprivate _newEol: EndOfLineSequence;\n\n\tconstructor(modelReference: IReference) {\n\t\tthis._endCursorSelection = null;\n\t\tthis._modelReference = modelReference;\n\t\tthis._edits = [];\n\t}\n\n\tpublic addEdit(edit: IResourceEdit): void {\n\n\t\tif (typeof edit.newEol === 'number') {\n\t\t\t// honor eol-change\n\t\t\tthis._newEol = edit.newEol;\n\t\t}\n\n\t\tif (edit.range || edit.newText) {\n\t\t\t// create edit operation\n\t\t\tlet range: Range;\n\t\t\tif (!edit.range) {\n\t\t\t\trange = this._model.getFullModelRange();\n\t\t\t} else {\n\t\t\t\trange = Range.lift(edit.range);\n\t\t\t}\n\t\t\tthis._edits.push(EditOperation.replaceMove(range, edit.newText));\n\t\t}\n\t}\n\n\tpublic apply(): void {\n\t\tif (this._edits.length > 0) {\n\n\t\t\tthis._edits = this._edits.map((value, index) => ({ value, index })).sort((a, b) => {\n\t\t\t\tlet ret = Range.compareRangesUsingStarts(a.value.range, b.value.range);\n\t\t\t\tif (ret === 0) {\n\t\t\t\t\tret = a.index - b.index;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}).map(element => element.value);\n\n\t\t\tthis._initialSelections = this._getInitialSelections();\n\t\t\tthis._model.pushEditOperations(this._initialSelections, this._edits, (edits) => this._getEndCursorSelections(edits));\n\t\t}\n\t\tif (this._newEol !== undefined) {\n\t\t\tthis._model.setEOL(this._newEol);\n\t\t}\n\t}\n\n\tprotected _getInitialSelections(): Selection[] {\n\t\tconst firstRange = this._edits[0].range;\n\t\tconst initialSelection = new Selection(\n\t\t\tfirstRange.startLineNumber,\n\t\t\tfirstRange.startColumn,\n\t\t\tfirstRange.endLineNumber,\n\t\t\tfirstRange.endColumn\n\t\t);\n\t\treturn [initialSelection];\n\t}\n\n\tprivate _getEndCursorSelections(inverseEditOperations: IIdentifiedSingleEditOperation[]): Selection[] {\n\t\tlet relevantEditIndex = 0;\n\t\tfor (let i = 0; i < inverseEditOperations.length; i++) {\n\t\t\tconst editRange = inverseEditOperations[i].range;\n\t\t\tfor (let j = 0; j < this._initialSelections.length; j++) {\n\t\t\t\tconst selectionRange = this._initialSelections[j];\n\t\t\t\tif (Range.areIntersectingOrTouching(editRange, selectionRange)) {\n\t\t\t\t\trelevantEditIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst srcRange = inverseEditOperations[relevantEditIndex].range;\n\t\tthis._endCursorSelection = new Selection(\n\t\t\tsrcRange.endLineNumber,\n\t\t\tsrcRange.endColumn,\n\t\t\tsrcRange.endLineNumber,\n\t\t\tsrcRange.endColumn\n\t\t);\n\t\treturn [this._endCursorSelection];\n\t}\n\n\tpublic getEndCursorSelection(): Selection {\n\t\treturn this._endCursorSelection;\n\t}\n\n\tdispose() {\n\t\tif (this._model) {\n\t\t\tthis._modelReference.dispose();\n\t\t\tthis._modelReference = null;\n\t\t}\n\t}\n}\n\nclass SourceModelEditTask extends EditTask {\n\n\tprivate _knownInitialSelections: Selection[];\n\n\tconstructor(modelReference: IReference, initialSelections: Selection[]) {\n\t\tsuper(modelReference);\n\t\tthis._knownInitialSelections = initialSelections;\n\t}\n\n\tprotected _getInitialSelections(): Selection[] {\n\t\treturn this._knownInitialSelections;\n\t}\n}\n\nclass BulkEditModel implements IDisposable {\n\n\tprivate _textModelResolverService: ITextModelService;\n\tprivate _numberOfResourcesToModify: number = 0;\n\tprivate _numberOfChanges: number = 0;\n\tprivate _edits: IStringDictionary = Object.create(null);\n\tprivate _tasks: EditTask[];\n\tprivate _sourceModel: URI;\n\tprivate _sourceSelections: Selection[];\n\tprivate _sourceModelTask: SourceModelEditTask;\n\n\tconstructor(textModelResolverService: ITextModelService, sourceModel: URI, sourceSelections: Selection[], edits: IResourceEdit[], private progress: IProgressRunner = null) {\n\t\tthis._textModelResolverService = textModelResolverService;\n\t\tthis._sourceModel = sourceModel;\n\t\tthis._sourceSelections = sourceSelections;\n\t\tthis._sourceModelTask = null;\n\n\t\tfor (let edit of edits) {\n\t\t\tthis._addEdit(edit);\n\t\t}\n\t}\n\n\tpublic resourcesCount(): number {\n\t\treturn this._numberOfResourcesToModify;\n\t}\n\n\tpublic changeCount(): number {\n\t\treturn this._numberOfChanges;\n\t}\n\n\tprivate _addEdit(edit: IResourceEdit): void {\n\t\tlet array = this._edits[edit.resource.toString()];\n\t\tif (!array) {\n\t\t\tthis._edits[edit.resource.toString()] = array = [];\n\t\t\tthis._numberOfResourcesToModify += 1;\n\t\t}\n\t\tthis._numberOfChanges += 1;\n\t\tarray.push(edit);\n\t}\n\n\tpublic prepare(): TPromise {\n\n\t\tif (this._tasks) {\n\t\t\tthrow new Error('illegal state - already prepared');\n\t\t}\n\n\t\tthis._tasks = [];\n\t\tconst promises: TPromise[] = [];\n\n\t\tif (this.progress) {\n\t\t\tthis.progress.total(this._numberOfResourcesToModify * 2);\n\t\t}\n\n\t\tforEach(this._edits, entry => {\n\t\t\tconst promise = this._textModelResolverService.createModelReference(URI.parse(entry.key)).then(ref => {\n\t\t\t\tconst model = ref.object;\n\n\t\t\t\tif (!model || !model.textEditorModel) {\n\t\t\t\t\tthrow new Error(`Cannot load file ${entry.key}`);\n\t\t\t\t}\n\n\t\t\t\tconst textEditorModel = model.textEditorModel;\n\t\t\t\tlet task: EditTask;\n\n\t\t\t\tif (this._sourceModel && textEditorModel.uri.toString() === this._sourceModel.toString()) {\n\t\t\t\t\tthis._sourceModelTask = new SourceModelEditTask(ref, this._sourceSelections);\n\t\t\t\t\ttask = this._sourceModelTask;\n\t\t\t\t} else {\n\t\t\t\t\ttask = new EditTask(ref);\n\t\t\t\t}\n\n\t\t\t\tentry.value.forEach(edit => task.addEdit(edit));\n\t\t\t\tthis._tasks.push(task);\n\t\t\t\tif (this.progress) {\n\t\t\t\t\tthis.progress.worked(1);\n\t\t\t\t}\n\t\t\t});\n\t\t\tpromises.push(promise);\n\t\t});\n\n\n\t\treturn TPromise.join(promises).then(_ => this);\n\t}\n\n\tpublic apply(): Selection {\n\t\tthis._tasks.forEach(task => this.applyTask(task));\n\t\tlet r: Selection = null;\n\t\tif (this._sourceModelTask) {\n\t\t\tr = this._sourceModelTask.getEndCursorSelection();\n\t\t}\n\t\treturn r;\n\t}\n\n\tprivate applyTask(task: EditTask): void {\n\t\ttask.apply();\n\t\tif (this.progress) {\n\t\t\tthis.progress.worked(1);\n\t\t}\n\t}\n\n\tdispose(): void {\n\t\tthis._tasks = dispose(this._tasks);\n\t}\n}\n\nexport interface BulkEdit {\n\tprogress(progress: IProgressRunner): void;\n\tadd(edit: IResourceEdit[]): void;\n\tfinish(): TPromise;\n\tariaMessage(): string;\n}\n\nexport function bulkEdit(textModelResolverService: ITextModelService, editor: ICommonCodeEditor, edits: IResourceEdit[], fileService?: IFileService, progress: IProgressRunner = null): TPromise {\n\tlet bulk = createBulkEdit(textModelResolverService, editor, fileService);\n\tbulk.add(edits);\n\tbulk.progress(progress);\n\treturn bulk.finish();\n}\n\nexport function createBulkEdit(textModelResolverService: ITextModelService, editor?: ICommonCodeEditor, fileService?: IFileService): BulkEdit {\n\n\tlet all: IResourceEdit[] = [];\n\tlet recording = new ChangeRecorder(fileService).start();\n\tlet progressRunner: IProgressRunner;\n\n\tfunction progress(progress: IProgressRunner) {\n\t\tprogressRunner = progress;\n\t}\n\n\tfunction add(edits: IResourceEdit[]): void {\n\t\tall.push(...edits);\n\t}\n\n\tfunction getConcurrentEdits() {\n\t\tlet names: string[];\n\t\tfor (let edit of all) {\n\t\t\tif (recording.hasChanged(edit.resource)) {\n\t\t\t\tif (!names) {\n\t\t\t\t\tnames = [];\n\t\t\t\t}\n\t\t\t\tnames.push(edit.resource.fsPath);\n\t\t\t}\n\t\t}\n\t\tif (names) {\n\t\t\treturn nls.localize('conflict', \"These files have changed in the meantime: {0}\", names.join(', '));\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tfunction finish(): TPromise {\n\n\t\tif (all.length === 0) {\n\t\t\treturn TPromise.as(undefined);\n\t\t}\n\n\t\tlet concurrentEdits = getConcurrentEdits();\n\t\tif (concurrentEdits) {\n\t\t\treturn TPromise.wrapError(new Error(concurrentEdits));\n\t\t}\n\n\t\tlet uri: URI;\n\t\tlet selections: Selection[];\n\n\t\tif (editor && editor.getModel()) {\n\t\t\turi = editor.getModel().uri;\n\t\t\tselections = editor.getSelections();\n\t\t}\n\n\t\tconst model = new BulkEditModel(textModelResolverService, uri, selections, all, progressRunner);\n\n\t\treturn model.prepare().then(_ => {\n\n\t\t\tlet concurrentEdits = getConcurrentEdits();\n\t\t\tif (concurrentEdits) {\n\t\t\t\tthrow new Error(concurrentEdits);\n\t\t\t}\n\n\t\t\trecording.stop();\n\n\t\t\tconst result = model.apply();\n\t\t\tmodel.dispose();\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tfunction ariaMessage(): string {\n\t\tlet editCount = all.length;\n\t\tlet resourceCount = size(groupBy(all, edit => edit.resource.toString()));\n\t\tif (editCount === 0) {\n\t\t\treturn nls.localize('summary.0', \"Made no edits\");\n\t\t} else if (editCount > 1 && resourceCount > 1) {\n\t\t\treturn nls.localize('summary.nm', \"Made {0} text edits in {1} files\", editCount, resourceCount);\n\t\t} else {\n\t\t\treturn nls.localize('summary.n0', \"Made {0} text edits in one file\", editCount, resourceCount);\n\t\t}\n\t}\n\n\treturn {\n\t\tprogress,\n\t\tadd,\n\t\tfinish,\n\t\tariaMessage\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { localize } from 'vs/nls';\nimport { EventEmitter } from 'vs/base/common/eventEmitter';\nimport Event, { fromEventEmitter } from 'vs/base/common/event';\nimport { basename, dirname } from 'vs/base/common/paths';\nimport { IDisposable, dispose, IReference } from 'vs/base/common/lifecycle';\nimport * as strings from 'vs/base/common/strings';\nimport URI from 'vs/base/common/uri';\nimport { defaultGenerator } from 'vs/base/common/idGenerator';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { Range, IRange } from 'vs/editor/common/core/range';\nimport { Location } from 'vs/editor/common/modes';\nimport { ITextModelService, ITextEditorModel } from 'vs/editor/common/services/resolverService';\nimport { Position } from 'vs/editor/common/core/position';\n\nexport class OneReference {\n\n\tprivate _id: string;\n\n\tconstructor(\n\t\tprivate _parent: FileReferences,\n\t\tprivate _range: IRange,\n\t\tprivate _eventBus: EventEmitter\n\t) {\n\t\tthis._id = defaultGenerator.nextId();\n\t}\n\n\tpublic get id(): string {\n\t\treturn this._id;\n\t}\n\n\tpublic get model(): FileReferences {\n\t\treturn this._parent;\n\t}\n\n\tpublic get parent(): FileReferences {\n\t\treturn this._parent;\n\t}\n\n\tpublic get uri(): URI {\n\t\treturn this._parent.uri;\n\t}\n\n\tpublic get name(): string {\n\t\treturn this._parent.name;\n\t}\n\n\tpublic get directory(): string {\n\t\treturn this._parent.directory;\n\t}\n\n\tpublic get range(): IRange {\n\t\treturn this._range;\n\t}\n\n\tpublic set range(value: IRange) {\n\t\tthis._range = value;\n\t\tthis._eventBus.emit('ref/changed', this);\n\t}\n\n\tpublic getAriaMessage(): string {\n\t\treturn localize(\n\t\t\t'aria.oneReference', \"symbol in {0} on line {1} at column {2}\",\n\t\t\tbasename(this.uri.fsPath), this.range.startLineNumber, this.range.startColumn\n\t\t);\n\t}\n}\n\nexport class FilePreview implements IDisposable {\n\n\tconstructor(private _modelReference: IReference) {\n\n\t}\n\n\tprivate get _model() { return this._modelReference.object.textEditorModel; }\n\n\tpublic preview(range: IRange, n: number = 8): { before: string; inside: string; after: string } {\n\t\tconst model = this._model;\n\n\t\tif (!model) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst { startLineNumber, startColumn, endColumn } = range;\n\t\tconst word = model.getWordUntilPosition({ lineNumber: startLineNumber, column: startColumn - n });\n\t\tconst beforeRange = new Range(startLineNumber, word.startColumn, startLineNumber, startColumn);\n\t\tconst afterRange = new Range(startLineNumber, endColumn, startLineNumber, Number.MAX_VALUE);\n\n\t\tconst ret = {\n\t\t\tbefore: model.getValueInRange(beforeRange).replace(/^\\s+/, strings.empty),\n\t\t\tinside: model.getValueInRange(range),\n\t\t\tafter: model.getValueInRange(afterRange).replace(/\\s+$/, strings.empty)\n\t\t};\n\n\t\treturn ret;\n\t}\n\n\tdispose(): void {\n\t\tif (this._modelReference) {\n\t\t\tthis._modelReference.dispose();\n\t\t\tthis._modelReference = null;\n\t\t}\n\t}\n}\n\nexport class FileReferences implements IDisposable {\n\n\tprivate _children: OneReference[];\n\tprivate _preview: FilePreview;\n\tprivate _resolved: boolean;\n\tprivate _loadFailure: any;\n\n\tconstructor(private _parent: ReferencesModel, private _uri: URI) {\n\t\tthis._children = [];\n\t}\n\n\tpublic get id(): string {\n\t\treturn this._uri.toString();\n\t}\n\n\tpublic get parent(): ReferencesModel {\n\t\treturn this._parent;\n\t}\n\n\tpublic get children(): OneReference[] {\n\t\treturn this._children;\n\t}\n\n\tpublic get uri(): URI {\n\t\treturn this._uri;\n\t}\n\n\tpublic get name(): string {\n\t\treturn basename(this.uri.fsPath);\n\t}\n\n\tpublic get directory(): string {\n\t\treturn dirname(this.uri.fsPath);\n\t}\n\n\tpublic get preview(): FilePreview {\n\t\treturn this._preview;\n\t}\n\n\tpublic get failure(): any {\n\t\treturn this._loadFailure;\n\t}\n\n\tgetAriaMessage(): string {\n\t\tconst len = this.children.length;\n\t\tif (len === 1) {\n\t\t\treturn localize('aria.fileReferences.1', \"1 symbol in {0}, full path {1}\", basename(this.uri.fsPath), this.uri.fsPath);\n\t\t} else {\n\t\t\treturn localize('aria.fileReferences.N', \"{0} symbols in {1}, full path {2}\", len, basename(this.uri.fsPath), this.uri.fsPath);\n\t\t}\n\t}\n\n\tpublic resolve(textModelResolverService: ITextModelService): TPromise {\n\n\t\tif (this._resolved) {\n\t\t\treturn TPromise.as(this);\n\t\t}\n\n\t\treturn textModelResolverService.createModelReference(this._uri).then(modelReference => {\n\t\t\tconst model = modelReference.object;\n\n\t\t\tif (!model) {\n\t\t\t\tmodelReference.dispose();\n\t\t\t\tthrow new Error();\n\t\t\t}\n\n\t\t\tthis._preview = new FilePreview(modelReference);\n\t\t\tthis._resolved = true;\n\t\t\treturn this;\n\n\t\t}, err => {\n\t\t\t// something wrong here\n\t\t\tthis._children = [];\n\t\t\tthis._resolved = true;\n\t\t\tthis._loadFailure = err;\n\t\t\treturn this;\n\t\t});\n\t}\n\n\tdispose(): void {\n\t\tif (this._preview) {\n\t\t\tthis._preview.dispose();\n\t\t\tthis._preview = null;\n\t\t}\n\t}\n}\n\nexport class ReferencesModel implements IDisposable {\n\n\tprivate _groups: FileReferences[] = [];\n\tprivate _references: OneReference[] = [];\n\tprivate _eventBus = new EventEmitter();\n\n\tonDidChangeReferenceRange: Event = fromEventEmitter(this._eventBus, 'ref/changed');\n\n\tconstructor(references: Location[]) {\n\n\t\t// grouping and sorting\n\t\treferences.sort(ReferencesModel._compareReferences);\n\n\t\tlet current: FileReferences;\n\t\tfor (let ref of references) {\n\t\t\tif (!current || current.uri.toString() !== ref.uri.toString()) {\n\t\t\t\t// new group\n\t\t\t\tcurrent = new FileReferences(this, ref.uri);\n\t\t\t\tthis.groups.push(current);\n\t\t\t}\n\n\t\t\t// append, check for equality first!\n\t\t\tif (current.children.length === 0\n\t\t\t\t|| !Range.equalsRange(ref.range, current.children[current.children.length - 1].range)) {\n\n\t\t\t\tlet oneRef = new OneReference(current, ref.range, this._eventBus);\n\t\t\t\tthis._references.push(oneRef);\n\t\t\t\tcurrent.children.push(oneRef);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic get empty(): boolean {\n\t\treturn this._groups.length === 0;\n\t}\n\n\tpublic get references(): OneReference[] {\n\t\treturn this._references;\n\t}\n\n\tpublic get groups(): FileReferences[] {\n\t\treturn this._groups;\n\t}\n\n\tgetAriaMessage(): string {\n\t\tif (this.empty) {\n\t\t\treturn localize('aria.result.0', \"No results found\");\n\t\t} else if (this.references.length === 1) {\n\t\t\treturn localize('aria.result.1', \"Found 1 symbol in {0}\", this.references[0].uri.fsPath);\n\t\t} else if (this.groups.length === 1) {\n\t\t\treturn localize('aria.result.n1', \"Found {0} symbols in {1}\", this.references.length, this.groups[0].uri.fsPath);\n\t\t} else {\n\t\t\treturn localize('aria.result.nm', \"Found {0} symbols in {1} files\", this.references.length, this.groups.length);\n\t\t}\n\t}\n\n\tpublic nextReference(reference: OneReference): OneReference {\n\n\t\tvar idx = reference.parent.children.indexOf(reference),\n\t\t\tlen = reference.parent.children.length,\n\t\t\ttotalLength = reference.parent.parent.groups.length;\n\n\t\tif (idx + 1 < len || totalLength === 1) {\n\t\t\treturn reference.parent.children[(idx + 1) % len];\n\t\t}\n\n\t\tidx = reference.parent.parent.groups.indexOf(reference.parent);\n\t\tidx = (idx + 1) % totalLength;\n\n\t\treturn reference.parent.parent.groups[idx].children[0];\n\t}\n\n\tpublic nearestReference(resource: URI, position: Position): OneReference {\n\n\t\tconst nearest = this._references.map((ref, idx) => {\n\t\t\treturn {\n\t\t\t\tidx,\n\t\t\t\tprefixLen: strings.commonPrefixLength(ref.uri.toString(), resource.toString()),\n\t\t\t\toffsetDist: Math.abs(ref.range.startLineNumber - position.lineNumber) * 100 + Math.abs(ref.range.startColumn - position.column)\n\t\t\t};\n\t\t}).sort((a, b) => {\n\t\t\tif (a.prefixLen > b.prefixLen) {\n\t\t\t\treturn -1;\n\t\t\t} else if (a.prefixLen < b.prefixLen) {\n\t\t\t\treturn 1;\n\t\t\t} else if (a.offsetDist < b.offsetDist) {\n\t\t\t\treturn -1;\n\t\t\t} else if (a.offsetDist > b.offsetDist) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t})[0];\n\n\t\tif (nearest) {\n\t\t\treturn this._references[nearest.idx];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tdispose(): void {\n\t\tthis._groups = dispose(this._groups);\n\t}\n\n\tprivate static _compareReferences(a: Location, b: Location): number {\n\t\tconst auri = a.uri.toString();\n\t\tconst buri = b.uri.toString();\n\t\tif (auri < buri) {\n\t\t\treturn -1;\n\t\t} else if (auri > buri) {\n\t\t\treturn 1;\n\t\t} else {\n\t\t\treturn Range.compareRangesUsingStarts(a.range, b.range);\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/css!./contextMenuHandler';\nimport { $, Builder } from 'vs/base/browser/builder';\nimport { combinedDisposable, IDisposable } from 'vs/base/common/lifecycle';\nimport { StandardMouseEvent } from 'vs/base/browser/mouseEvent';\nimport { IActionRunner, ActionRunner, IAction } from 'vs/base/common/actions';\nimport { Menu } from 'vs/base/browser/ui/menu/menu';\nimport { EventType } from 'vs/base/common/events';\nimport Severity from 'vs/base/common/severity';\n\nimport { IContextViewService, IContextMenuDelegate } from 'vs/platform/contextview/browser/contextView';\nimport { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';\nimport { IMessageService } from 'vs/platform/message/common/message';\n\nexport class ContextMenuHandler {\n\n\tprivate contextViewService: IContextViewService;\n\tprivate messageService: IMessageService;\n\tprivate telemetryService: ITelemetryService;\n\n\tprivate actionRunner: IActionRunner;\n\tprivate $el: Builder;\n\tprivate menuContainerElement: HTMLElement;\n\tprivate toDispose: IDisposable[];\n\n\tconstructor(element: HTMLElement, contextViewService: IContextViewService, telemetryService: ITelemetryService, messageService: IMessageService) {\n\t\tthis.setContainer(element);\n\n\t\tthis.contextViewService = contextViewService;\n\t\tthis.telemetryService = telemetryService;\n\t\tthis.messageService = messageService;\n\n\t\tthis.actionRunner = new ActionRunner();\n\t\tthis.menuContainerElement = null;\n\t\tthis.toDispose = [];\n\n\t\tlet hideViewOnRun = false;\n\n\t\tthis.toDispose.push(this.actionRunner.addListener(EventType.BEFORE_RUN, (e: any) => {\n\t\t\tif (this.telemetryService) {\n\t\t\t\tthis.telemetryService.publicLog('workbenchActionExecuted', { id: e.action.id, from: 'contextMenu' });\n\t\t\t}\n\n\t\t\thideViewOnRun = !!e.retainActionItem;\n\n\t\t\tif (!hideViewOnRun) {\n\t\t\t\tthis.contextViewService.hideContextView(false);\n\t\t\t}\n\t\t}));\n\n\t\tthis.toDispose.push(this.actionRunner.addListener(EventType.RUN, (e: any) => {\n\t\t\tif (hideViewOnRun) {\n\t\t\t\tthis.contextViewService.hideContextView(false);\n\t\t\t}\n\n\t\t\thideViewOnRun = false;\n\n\t\t\tif (e.error && this.messageService) {\n\t\t\t\tthis.messageService.show(Severity.Error, e.error);\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic setContainer(container: HTMLElement): void {\n\t\tif (this.$el) {\n\t\t\tthis.$el.off(['click', 'mousedown']);\n\t\t\tthis.$el = null;\n\t\t}\n\t\tif (container) {\n\t\t\tthis.$el = $(container);\n\t\t\tthis.$el.on('mousedown', (e: MouseEvent) => this.onMouseDown(e));\n\t\t}\n\t}\n\n\tpublic showContextMenu(delegate: IContextMenuDelegate): void {\n\t\tdelegate.getActions().done((actions: IAction[]) => {\n\t\t\tthis.contextViewService.showContextView({\n\t\t\t\tgetAnchor: () => delegate.getAnchor(),\n\t\t\t\tcanRelayout: false,\n\n\t\t\t\trender: (container) => {\n\t\t\t\t\tthis.menuContainerElement = container;\n\n\t\t\t\t\tlet className = delegate.getMenuClassName ? delegate.getMenuClassName() : '';\n\n\t\t\t\t\tif (className) {\n\t\t\t\t\t\tcontainer.className += ' ' + className;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet menu = new Menu(container, actions, {\n\t\t\t\t\t\tactionItemProvider: delegate.getActionItem,\n\t\t\t\t\t\tcontext: delegate.getActionsContext ? delegate.getActionsContext() : null,\n\t\t\t\t\t\tactionRunner: this.actionRunner\n\t\t\t\t\t});\n\n\t\t\t\t\tlet listener1 = menu.addListener(EventType.CANCEL, (e: any) => {\n\t\t\t\t\t\tthis.contextViewService.hideContextView(true);\n\t\t\t\t\t});\n\n\t\t\t\t\tlet listener2 = menu.addListener(EventType.BLUR, (e: any) => {\n\t\t\t\t\t\tthis.contextViewService.hideContextView(true);\n\t\t\t\t\t});\n\n\t\t\t\t\tmenu.focus();\n\n\t\t\t\t\treturn combinedDisposable([listener1, listener2, menu]);\n\t\t\t\t},\n\n\t\t\t\tonHide: (didCancel?: boolean) => {\n\t\t\t\t\tif (delegate.onHide) {\n\t\t\t\t\t\tdelegate.onHide(didCancel);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.menuContainerElement = null;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate onMouseDown(e: MouseEvent): void {\n\t\tif (!this.menuContainerElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet event = new StandardMouseEvent(e);\n\t\tlet element = event.target;\n\n\t\twhile (element) {\n\t\t\tif (element === this.menuContainerElement) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telement = element.parentElement;\n\t\t}\n\n\t\tthis.contextViewService.hideContextView();\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.setContainer(null);\n\t}\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'use strict';\n\nimport { ContextMenuHandler } from './contextMenuHandler';\nimport { IContextViewService, IContextMenuService, IContextMenuDelegate } from './contextView';\nimport { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';\nimport { IMessageService } from 'vs/platform/message/common/message';\n\nexport class ContextMenuService implements IContextMenuService {\n\tpublic _serviceBrand: any;\n\n\tprivate contextMenuHandler: ContextMenuHandler;\n\n\tconstructor(container: HTMLElement, telemetryService: ITelemetryService, messageService: IMessageService, contextViewService: IContextViewService) {\n\t\tthis.contextMenuHandler = new ContextMenuHandler(container, contextViewService, telemetryService, messageService);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.contextMenuHandler.dispose();\n\t}\n\n\tpublic setContainer(container: HTMLElement): void {\n\t\tthis.contextMenuHandler.setContainer(container);\n\t}\n\n\t// ContextMenu\n\n\tpublic showContextMenu(delegate: IContextMenuDelegate): void {\n\t\tthis.contextMenuHandler.showContextMenu(delegate);\n\t}\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'use strict';\n\nimport { illegalArgument } from 'vs/base/common/errors';\nimport * as instantiation from './instantiation';\n\nexport class AbstractDescriptor {\n\n\tconstructor(private _staticArguments: any[]) {\n\t\t// empty\n\t}\n\n\tpublic appendStaticArguments(more: any[]): void {\n\t\tthis._staticArguments.push.apply(this._staticArguments, more);\n\t}\n\n\tpublic staticArguments(): any[];\n\tpublic staticArguments(nth: number): any;\n\tpublic staticArguments(nth?: number): any[] {\n\t\tif (isNaN(nth)) {\n\t\t\treturn this._staticArguments.slice(0);\n\t\t} else {\n\t\t\treturn this._staticArguments[nth];\n\t\t}\n\t}\n\n\t_validate(type: T): void {\n\t\tif (!type) {\n\t\t\tthrow illegalArgument('can not be falsy');\n\t\t}\n\t}\n}\n\nexport class SyncDescriptor extends AbstractDescriptor {\n\n\tconstructor(private _ctor: any, ...staticArguments: any[]) {\n\t\tsuper(staticArguments);\n\t}\n\n\tpublic get ctor(): any {\n\t\treturn this._ctor;\n\t}\n\n\tprotected bind(...moreStaticArguments): SyncDescriptor {\n\t\tlet allArgs = [];\n\t\tallArgs = allArgs.concat(this.staticArguments());\n\t\tallArgs = allArgs.concat(moreStaticArguments);\n\t\treturn new SyncDescriptor(this._ctor, ...allArgs);\n\t}\n}\n\nexport interface CreateSyncFunc {\n\n\t(ctor: instantiation.IConstructorSignature0): SyncDescriptor0;\n\n\t(ctor: instantiation.IConstructorSignature1): SyncDescriptor1;\n\t(ctor: instantiation.IConstructorSignature1, a1: A1): SyncDescriptor0;\n\n\t(ctor: instantiation.IConstructorSignature2): SyncDescriptor2;\n\t(ctor: instantiation.IConstructorSignature2, a1: A1): SyncDescriptor1;\n\t(ctor: instantiation.IConstructorSignature2, a1: A1, a2: A2): SyncDescriptor0;\n\n\t(ctor: instantiation.IConstructorSignature3): SyncDescriptor3;\n\t(ctor: instantiation.IConstructorSignature3, a1: A1): SyncDescriptor2;\n\t(ctor: instantiation.IConstructorSignature3, a1: A1, a2: A2): SyncDescriptor1;\n\t(ctor: instantiation.IConstructorSignature3, a1: A1, a2: A2, a3: A3): SyncDescriptor0;\n\n\t(ctor: instantiation.IConstructorSignature4): SyncDescriptor4;\n\t(ctor: instantiation.IConstructorSignature4, a1: A1): SyncDescriptor3;\n\t(ctor: instantiation.IConstructorSignature4, a1: A1, a2: A2): SyncDescriptor2;\n\t(ctor: instantiation.IConstructorSignature4, a1: A1, a2: A2, a3: A3): SyncDescriptor1;\n\t(ctor: instantiation.IConstructorSignature4, a1: A1, a2: A2, a3: A3, a4: A4): SyncDescriptor0;\n\n\t(ctor: instantiation.IConstructorSignature5): SyncDescriptor5;\n\t(ctor: instantiation.IConstructorSignature5, a1: A1): SyncDescriptor4;\n\t(ctor: instantiation.IConstructorSignature5, a1: A1, a2: A2): SyncDescriptor3;\n\t(ctor: instantiation.IConstructorSignature5, a1: A1, a2: A2, a3: A3): SyncDescriptor2;\n\t(ctor: instantiation.IConstructorSignature5, a1: A1, a2: A2, a3: A3, a4: A4): SyncDescriptor1;\n\t(ctor: instantiation.IConstructorSignature5, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): SyncDescriptor0;\n\n\t(ctor: instantiation.IConstructorSignature6): SyncDescriptor6;\n\t(ctor: instantiation.IConstructorSignature6, a1: A1): SyncDescriptor5;\n\t(ctor: instantiation.IConstructorSignature6, a1: A1, a2: A2): SyncDescriptor4;\n\t(ctor: instantiation.IConstructorSignature6, a1: A1, a2: A2, a3: A3): SyncDescriptor3;\n\t(ctor: instantiation.IConstructorSignature6, a1: A1, a2: A2, a3: A3, a4: A4): SyncDescriptor2;\n\t(ctor: instantiation.IConstructorSignature6, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): SyncDescriptor1;\n\t(ctor: instantiation.IConstructorSignature6, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6): SyncDescriptor0;\n\n\t(ctor: instantiation.IConstructorSignature7): SyncDescriptor7;\n\t(ctor: instantiation.IConstructorSignature7, a1: A1): SyncDescriptor6;\n\t(ctor: instantiation.IConstructorSignature7, a1: A1, a2: A2): SyncDescriptor5;\n\t(ctor: instantiation.IConstructorSignature7, a1: A1, a2: A2, a3: A3): SyncDescriptor4;\n\t(ctor: instantiation.IConstructorSignature7, a1: A1, a2: A2, a3: A3, a4: A4): SyncDescriptor3;\n\t(ctor: instantiation.IConstructorSignature7, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): SyncDescriptor2;\n\t(ctor: instantiation.IConstructorSignature7, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6): SyncDescriptor1;\n\t(ctor: instantiation.IConstructorSignature7, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7): SyncDescriptor0;\n\n\t(ctor: instantiation.IConstructorSignature8): SyncDescriptor8;\n\t(ctor: instantiation.IConstructorSignature8, a1: A1): SyncDescriptor7;\n\t(ctor: instantiation.IConstructorSignature8, a1: A1, a2: A2): SyncDescriptor6;\n\t(ctor: instantiation.IConstructorSignature8, a1: A1, a2: A2, a3: A3): SyncDescriptor5;\n\t(ctor: instantiation.IConstructorSignature8, a1: A1, a2: A2, a3: A3, a4: A4): SyncDescriptor4;\n\t(ctor: instantiation.IConstructorSignature8, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): SyncDescriptor3;\n\t(ctor: instantiation.IConstructorSignature8, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6): SyncDescriptor2;\n\t(ctor: instantiation.IConstructorSignature8, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7): SyncDescriptor1;\n\t(ctor: instantiation.IConstructorSignature8, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7, a8: A8): SyncDescriptor0;\n}\nexport const createSyncDescriptor: CreateSyncFunc = (ctor: any, ...staticArguments: any[]): any => {\n\treturn new SyncDescriptor(ctor, ...staticArguments);\n};\n\nexport interface SyncDescriptor0 {\n\tctor: any;\n\tbind(): SyncDescriptor0;\n}\nexport interface SyncDescriptor1 {\n\tctor: any;\n\tbind(a1: A1): SyncDescriptor0;\n}\nexport interface SyncDescriptor2 {\n\tctor: any;\n\tbind(a1: A1): SyncDescriptor1;\n\tbind(a1: A1, a2: A2): SyncDescriptor0;\n}\nexport interface SyncDescriptor3 {\n\tctor: any;\n\tbind(a1: A1): SyncDescriptor2;\n\tbind(a1: A1, a2: A2): SyncDescriptor1;\n\tbind(a1: A1, a2: A2, a3: A3): SyncDescriptor0;\n}\nexport interface SyncDescriptor4 {\n\tctor: any;\n\tbind(a1: A1): SyncDescriptor3;\n\tbind(a1: A1, a2: A2): SyncDescriptor2;\n\tbind(a1: A1, a2: A2, a3: A3): SyncDescriptor1;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4): SyncDescriptor0;\n}\nexport interface SyncDescriptor5 {\n\tctor: any;\n\tbind(a1: A1): SyncDescriptor4;\n\tbind(a1: A1, a2: A2): SyncDescriptor3;\n\tbind(a1: A1, a2: A2, a3: A3): SyncDescriptor2;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4): SyncDescriptor1;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): SyncDescriptor0;\n}\nexport interface SyncDescriptor6 {\n\tctor: any;\n\tbind(a1: A1): SyncDescriptor5;\n\tbind(a1: A1, a2: A2): SyncDescriptor4;\n\tbind(a1: A1, a2: A2, a3: A3): SyncDescriptor3;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4): SyncDescriptor2;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): SyncDescriptor1;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6): SyncDescriptor0;\n}\nexport interface SyncDescriptor7 {\n\tctor: any;\n\tbind(a1: A1): SyncDescriptor6;\n\tbind(a1: A1, a2: A2): SyncDescriptor5;\n\tbind(a1: A1, a2: A2, a3: A3): SyncDescriptor4;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4): SyncDescriptor3;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): SyncDescriptor2;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6): SyncDescriptor1;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7): SyncDescriptor0;\n}\nexport interface SyncDescriptor8 {\n\tctor: any;\n\tbind(a1: A1): SyncDescriptor7;\n\tbind(a1: A1, a2: A2): SyncDescriptor6;\n\tbind(a1: A1, a2: A2, a3: A3): SyncDescriptor5;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4): SyncDescriptor4;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): SyncDescriptor3;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6): SyncDescriptor2;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7): SyncDescriptor1;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7, a8: A8): SyncDescriptor0;\n}\n\nexport class AsyncDescriptor extends AbstractDescriptor implements AsyncDescriptor0 {\n\n\tpublic static create(moduleName: string, ctorName: string): AsyncDescriptor {\n\t\treturn new AsyncDescriptor(moduleName, ctorName);\n\t}\n\n\tconstructor(private _moduleName: string, private _ctorName?: string, ...staticArguments: any[]) {\n\t\tsuper(staticArguments);\n\t\tif (typeof _moduleName !== 'string') {\n\t\t\tthrow new Error('Invalid AsyncDescriptor arguments, expected `moduleName` to be a string!');\n\t\t}\n\t}\n\n\tpublic get moduleName(): string {\n\t\treturn this._moduleName;\n\t}\n\n\tpublic get ctorName(): string {\n\t\treturn this._ctorName;\n\t}\n\n\tbind(...moreStaticArguments): AsyncDescriptor {\n\t\tlet allArgs = [];\n\t\tallArgs = allArgs.concat(this.staticArguments());\n\t\tallArgs = allArgs.concat(moreStaticArguments);\n\t\treturn new AsyncDescriptor(this.moduleName, this.ctorName, ...allArgs);\n\t}\n}\n\nexport interface AsyncDescriptor0 {\n\tmoduleName: string;\n\tbind(): AsyncDescriptor0;\n}\nexport interface AsyncDescriptor1 {\n\tmoduleName: string;\n\tbind(a1: A1): AsyncDescriptor0;\n}\nexport interface AsyncDescriptor2 {\n\tmoduleName: string;\n\tbind(a1: A1): AsyncDescriptor1;\n\tbind(a1: A1, a2: A2): AsyncDescriptor0;\n}\nexport interface AsyncDescriptor3 {\n\tmoduleName: string;\n\tbind(a1: A1): AsyncDescriptor2;\n\tbind(a1: A1, a2: A2): AsyncDescriptor1;\n\tbind(a1: A1, a2: A2, a3: A3): AsyncDescriptor0;\n}\nexport interface AsyncDescriptor4 {\n\tmoduleName: string;\n\tbind(a1: A1): AsyncDescriptor3;\n\tbind(a1: A1, a2: A2): AsyncDescriptor2;\n\tbind(a1: A1, a2: A2, a3: A3): AsyncDescriptor1;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4): AsyncDescriptor0;\n}\nexport interface AsyncDescriptor5 {\n\tmoduleName: string;\n\tbind(a1: A1): AsyncDescriptor4;\n\tbind(a1: A1, a2: A2): AsyncDescriptor3;\n\tbind(a1: A1, a2: A2, a3: A3): AsyncDescriptor2;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4): AsyncDescriptor1;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): AsyncDescriptor0;\n}\nexport interface AsyncDescriptor6 {\n\tmoduleName: string;\n\tbind(a1: A1): AsyncDescriptor5;\n\tbind(a1: A1, a2: A2): AsyncDescriptor4;\n\tbind(a1: A1, a2: A2, a3: A3): AsyncDescriptor3;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4): AsyncDescriptor2;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): AsyncDescriptor1;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6): AsyncDescriptor0;\n}\nexport interface AsyncDescriptor7 {\n\tmoduleName: string;\n\tbind(a1: A1): AsyncDescriptor6;\n\tbind(a1: A1, a2: A2): AsyncDescriptor5;\n\tbind(a1: A1, a2: A2, a3: A3): AsyncDescriptor4;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4): AsyncDescriptor3;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): AsyncDescriptor2;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6): AsyncDescriptor1;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7): AsyncDescriptor0;\n}\nexport interface AsyncDescriptor8 {\n\tmoduleName: string;\n\tbind(a1: A1): AsyncDescriptor7;\n\tbind(a1: A1, a2: A2): AsyncDescriptor6;\n\tbind(a1: A1, a2: A2, a3: A3): AsyncDescriptor5;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4): AsyncDescriptor4;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): AsyncDescriptor3;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6): AsyncDescriptor2;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7): AsyncDescriptor1;\n\tbind(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7, a8: A8): AsyncDescriptor0;\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'use strict';\n\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { ServiceCollection } from './serviceCollection';\nimport * as descriptors from './descriptors';\n\n// ------ internal util\n\nexport namespace _util {\n\n\texport const serviceIds = new Map>();\n\n\texport const DI_TARGET = '$di$target';\n\texport const DI_DEPENDENCIES = '$di$dependencies';\n\n\texport function getServiceDependencies(ctor: any): { id: ServiceIdentifier, index: number, optional: boolean }[] {\n\t\treturn ctor[DI_DEPENDENCIES] || [];\n\t}\n}\n\n// --- interfaces ------\n\nexport interface IConstructorSignature0 {\n\tnew (...services: { _serviceBrand: any; }[]): T;\n}\n\nexport interface IConstructorSignature1 {\n\tnew (first: A1, ...services: { _serviceBrand: any; }[]): T;\n}\n\nexport interface IConstructorSignature2 {\n\tnew (first: A1, second: A2, ...services: { _serviceBrand: any; }[]): T;\n}\n\nexport interface IConstructorSignature3 {\n\tnew (first: A1, second: A2, third: A3, ...services: { _serviceBrand: any; }[]): T;\n}\n\nexport interface IConstructorSignature4 {\n\tnew (first: A1, second: A2, third: A3, fourth: A4, ...services: { _serviceBrand: any; }[]): T;\n}\n\nexport interface IConstructorSignature5 {\n\tnew (first: A1, second: A2, third: A3, fourth: A4, fifth: A5, ...services: { _serviceBrand: any; }[]): T;\n}\n\nexport interface IConstructorSignature6 {\n\tnew (first: A1, second: A2, third: A3, fourth: A4, fifth: A5, sixth: A6, ...services: { _serviceBrand: any; }[]): T;\n}\n\nexport interface IConstructorSignature7 {\n\tnew (first: A1, second: A2, third: A3, fourth: A4, fifth: A5, sixth: A6, seventh: A7, ...services: { _serviceBrand: any; }[]): T;\n}\n\nexport interface IConstructorSignature8 {\n\tnew (first: A1, second: A2, third: A3, fourth: A4, fifth: A5, sixth: A6, seventh: A7, eigth: A8, ...services: { _serviceBrand: any; }[]): T;\n}\n\nexport interface ServicesAccessor {\n\tget(id: ServiceIdentifier, isOptional?: typeof optional): T;\n}\n\nexport interface IFunctionSignature0 {\n\t(accessor: ServicesAccessor): R;\n}\n\nexport interface IFunctionSignature1 {\n\t(accessor: ServicesAccessor, first: A1): R;\n}\n\nexport interface IFunctionSignature2 {\n\t(accessor: ServicesAccessor, first: A1, second: A2): R;\n}\n\nexport interface IFunctionSignature3 {\n\t(accessor: ServicesAccessor, first: A1, second: A2, third: A3): R;\n}\n\nexport interface IFunctionSignature4 {\n\t(accessor: ServicesAccessor, first: A1, second: A2, third: A3, fourth: A4): R;\n}\n\nexport interface IFunctionSignature5 {\n\t(accessor: ServicesAccessor, first: A1, second: A2, third: A3, fourth: A4, fifth: A5): R;\n}\n\nexport interface IFunctionSignature6 {\n\t(accessor: ServicesAccessor, first: A1, second: A2, third: A3, fourth: A4, fifth: A5, sixth: A6): R;\n}\n\nexport interface IFunctionSignature7 {\n\t(accessor: ServicesAccessor, first: A1, second: A2, third: A3, fourth: A4, fifth: A5, sixth: A6, seventh: A7): R;\n}\n\nexport interface IFunctionSignature8 {\n\t(accessor: ServicesAccessor, first: A1, second: A2, third: A3, fourth: A4, fifth: A5, sixth: A6, seventh: A7, eigth: A8): R;\n}\n\nexport const IInstantiationService = createDecorator('instantiationService');\n\nexport interface IInstantiationService {\n\n\t_serviceBrand: any;\n\n\t/**\n\t * Synchronously creates an instance that is denoted by\n\t * the descriptor\n\t */\n\tcreateInstance(descriptor: descriptors.SyncDescriptor0): T;\n\tcreateInstance(descriptor: descriptors.SyncDescriptor1, a1: A1): T;\n\tcreateInstance(descriptor: descriptors.SyncDescriptor2, a1: A1, a2: A2): T;\n\tcreateInstance(descriptor: descriptors.SyncDescriptor3, a1: A1, a2: A2, a3: A3): T;\n\tcreateInstance(descriptor: descriptors.SyncDescriptor4, a1: A1, a2: A2, a3: A3, a4: A4): T;\n\tcreateInstance(descriptor: descriptors.SyncDescriptor5, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): T;\n\tcreateInstance(descriptor: descriptors.SyncDescriptor6, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6): T;\n\tcreateInstance(descriptor: descriptors.SyncDescriptor7, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7): T;\n\tcreateInstance(descriptor: descriptors.SyncDescriptor8, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7, a8: A8): T;\n\n\tcreateInstance(ctor: IConstructorSignature0): T;\n\tcreateInstance(ctor: IConstructorSignature1, first: A1): T;\n\tcreateInstance(ctor: IConstructorSignature2, first: A1, second: A2): T;\n\tcreateInstance(ctor: IConstructorSignature3, first: A1, second: A2, third: A3): T;\n\tcreateInstance(ctor: IConstructorSignature4, first: A1, second: A2, third: A3, fourth: A4): T;\n\tcreateInstance(ctor: IConstructorSignature5, first: A1, second: A2, third: A3, fourth: A4, fifth: A5): T;\n\tcreateInstance(ctor: IConstructorSignature6, first: A1, second: A2, third: A3, fourth: A4, fifth: A5, sixth: A6): T;\n\tcreateInstance(ctor: IConstructorSignature7, first: A1, second: A2, third: A3, fourth: A4, fifth: A5, sixth: A6, seventh: A7): T;\n\tcreateInstance(ctor: IConstructorSignature8, first: A1, second: A2, third: A3, fourth: A4, fifth: A5, sixth: A6, seventh: A7, eigth: A8): T;\n\n\t/**\n\t * Asynchronously creates an instance that is denoted by\n\t * the descriptor\n\t */\n\tcreateInstance(descriptor: descriptors.AsyncDescriptor0): TPromise;\n\tcreateInstance(descriptor: descriptors.AsyncDescriptor1, a1: A1): TPromise;\n\tcreateInstance(descriptor: descriptors.AsyncDescriptor2, a1: A1, a2: A2): TPromise;\n\tcreateInstance(descriptor: descriptors.AsyncDescriptor3, a1: A1, a2: A2, a3: A3): TPromise;\n\tcreateInstance(descriptor: descriptors.AsyncDescriptor4, a1: A1, a2: A2, a3: A3, a4: A4): TPromise;\n\tcreateInstance(descriptor: descriptors.AsyncDescriptor5, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): TPromise;\n\tcreateInstance(descriptor: descriptors.AsyncDescriptor6, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6): TPromise;\n\tcreateInstance(descriptor: descriptors.AsyncDescriptor7, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7): TPromise;\n\tcreateInstance(descriptor: descriptors.AsyncDescriptor8, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7, a8: A8): TPromise;\n\n\t/**\n\t *\n\t */\n\tinvokeFunction(ctor: IFunctionSignature0): R;\n\tinvokeFunction(ctor: IFunctionSignature1, first: A1): R;\n\tinvokeFunction(ctor: IFunctionSignature2, first: A1, second: A2): R;\n\tinvokeFunction(ctor: IFunctionSignature3, first: A1, second: A2, third: A3): R;\n\tinvokeFunction(ctor: IFunctionSignature4, first: A1, second: A2, third: A3, fourth: A4): R;\n\tinvokeFunction(ctor: IFunctionSignature5, first: A1, second: A2, third: A3, fourth: A4, fifth: A5): R;\n\tinvokeFunction(ctor: IFunctionSignature6, first: A1, second: A2, third: A3, fourth: A4, fifth: A5, sixth: A6): R;\n\tinvokeFunction(ctor: IFunctionSignature7, first: A1, second: A2, third: A3, fourth: A4, fifth: A5, sixth: A6, seventh: A7): R;\n\tinvokeFunction(ctor: IFunctionSignature8, first: A1, second: A2, third: A3, fourth: A4, fifth: A5, sixth: A6, seventh: A7, eigth: A8): R;\n\n\t/**\n\t * Creates a child of this service which inherts all current services\n\t * and adds/overwrites the given services\n\t */\n\tcreateChild(services: ServiceCollection): IInstantiationService;\n}\n\n\n/**\n * Identifies a service of type T\n */\nexport interface ServiceIdentifier {\n\t(...args: any[]): void;\n\ttype: T;\n}\n\nfunction storeServiceDependency(id: Function, target: Function, index: number, optional: boolean): void {\n\tif (target[_util.DI_TARGET] === target) {\n\t\ttarget[_util.DI_DEPENDENCIES].push({ id, index, optional });\n\t} else {\n\t\ttarget[_util.DI_DEPENDENCIES] = [{ id, index, optional }];\n\t\ttarget[_util.DI_TARGET] = target;\n\t}\n}\n\n/**\n * A *only* valid way to create a {{ServiceIdentifier}}.\n */\nexport function createDecorator(serviceId: string): { (...args: any[]): void; type: T; } {\n\n\tif (_util.serviceIds.has(serviceId)) {\n\t\treturn _util.serviceIds.get(serviceId);\n\t}\n\n\tconst id = function (target: Function, key: string, index: number): any {\n\t\tif (arguments.length !== 3) {\n\t\t\tthrow new Error('@IServiceName-decorator can only be used to decorate a parameter');\n\t\t}\n\t\tstoreServiceDependency(id, target, index, false);\n\t};\n\n\tid.toString = () => serviceId;\n\n\t_util.serviceIds.set(serviceId, id);\n\treturn id;\n}\n\n/**\n * Mark a service dependency as optional.\n */\nexport function optional(serviceIdentifier: ServiceIdentifier) {\n\n\treturn function (target: Function, key: string, index: number) {\n\t\tif (arguments.length !== 3) {\n\t\t\tthrow new Error('@optional-decorator can only be used to decorate a parameter');\n\t\t}\n\t\tstoreServiceDependency(serviceIdentifier, target, index, true);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport Event from 'vs/base/common/event';\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\nimport { ICommonCodeEditor, ICommonDiffEditor, isCommonCodeEditor, isCommonDiffEditor, IDecorationRenderOptions, IModelDecorationOptions, IModel } from 'vs/editor/common/editorCommon';\nimport { IEditor } from 'vs/platform/editor/common/editor';\n\nexport var ICodeEditorService = createDecorator('codeEditorService');\n\nexport interface ICodeEditorService {\n\t_serviceBrand: any;\n\n\tonCodeEditorAdd: Event;\n\tonCodeEditorRemove: Event;\n\n\tonDiffEditorAdd: Event;\n\tonDiffEditorRemove: Event;\n\n\taddCodeEditor(editor: ICommonCodeEditor): void;\n\tremoveCodeEditor(editor: ICommonCodeEditor): void;\n\tgetCodeEditor(editorId: string): ICommonCodeEditor;\n\tlistCodeEditors(): ICommonCodeEditor[];\n\n\taddDiffEditor(editor: ICommonDiffEditor): void;\n\tremoveDiffEditor(editor: ICommonDiffEditor): void;\n\tgetDiffEditor(editorId: string): ICommonDiffEditor;\n\tlistDiffEditors(): ICommonDiffEditor[];\n\n\t/**\n\t * Returns the current focused code editor (if the focus is in the editor or in an editor widget) or null.\n\t */\n\tgetFocusedCodeEditor(): ICommonCodeEditor;\n\n\tregisterDecorationType(key: string, options: IDecorationRenderOptions, parentTypeKey?: string): void;\n\tremoveDecorationType(key: string): void;\n\tresolveDecorationOptions(typeKey: string, writable: boolean): IModelDecorationOptions;\n\n\tsetTransientModelProperty(model: IModel, key: string, value: any): void;\n\tgetTransientModelProperty(model: IModel, key: string): any;\n}\n\n/**\n * Uses `editor.getControl()` and returns either a `codeEditor` or a `diffEditor` or nothing.\n */\nexport function getCodeOrDiffEditor(editor: IEditor): { codeEditor: ICommonCodeEditor; diffEditor: ICommonDiffEditor } {\n\tif (editor) {\n\t\tlet control = editor.getControl();\n\t\tif (control) {\n\t\t\tif (isCommonCodeEditor(control)) {\n\t\t\t\treturn {\n\t\t\t\t\tcodeEditor: control,\n\t\t\t\t\tdiffEditor: null\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (isCommonDiffEditor(control)) {\n\t\t\t\treturn {\n\t\t\t\t\tcodeEditor: null,\n\t\t\t\t\tdiffEditor: control\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tcodeEditor: null,\n\t\tdiffEditor: null\n\t};\n}\n\n/**\n * Uses `editor.getControl()` and returns either the code editor, or the modified editor of a diff editor or nothing.\n */\nexport function getCodeEditor(editor: IEditor): ICommonCodeEditor {\n\tlet r = getCodeOrDiffEditor(editor);\n\treturn r.codeEditor || (r.diffEditor && r.diffEditor.getModifiedEditor()) || null;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport URI from 'vs/base/common/uri';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\nimport { IChange, ILineChange } from 'vs/editor/common/editorCommon';\nimport { IInplaceReplaceSupportResult, TextEdit } from 'vs/editor/common/modes';\nimport { IRange } from 'vs/editor/common/core/range';\n\nexport var ID_EDITOR_WORKER_SERVICE = 'editorWorkerService';\nexport var IEditorWorkerService = createDecorator(ID_EDITOR_WORKER_SERVICE);\n\nexport interface IEditorWorkerService {\n\t_serviceBrand: any;\n\n\tcomputeDiff(original: URI, modified: URI, ignoreTrimWhitespace: boolean): TPromise;\n\tcomputeDirtyDiff(original: URI, modified: URI, ignoreTrimWhitespace: boolean): TPromise;\n\tcomputeMoreMinimalEdits(resource: URI, edits: TextEdit[], ranges: IRange[]): TPromise;\n\tnavigateValueSet(resource: URI, range: IRange, up: boolean): TPromise;\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'use strict';\n\nimport Event from 'vs/base/common/event';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\nimport { IMode, LanguageId, LanguageIdentifier } from 'vs/editor/common/modes';\n\nexport var IModeService = createDecorator('modeService');\n\nexport interface IModeLookupResult {\n\tmodeId: string;\n\tisInstantiated: boolean;\n}\n\nexport interface ILanguageExtensionPoint {\n\tid: string;\n\textensions?: string[];\n\tfilenames?: string[];\n\tfilenamePatterns?: string[];\n\tfirstLine?: string;\n\taliases?: string[];\n\tmimetypes?: string[];\n\tconfiguration?: string;\n}\n\nexport interface IValidLanguageExtensionPoint {\n\tid: string;\n\textensions: string[];\n\tfilenames: string[];\n\tfilenamePatterns: string[];\n\tfirstLine: string;\n\taliases: string[];\n\tmimetypes: string[];\n\tconfiguration: string;\n}\n\nexport interface IModeService {\n\t_serviceBrand: any;\n\n\tonDidCreateMode: Event;\n\n\t// --- reading\n\tisRegisteredMode(mimetypeOrModeId: string): boolean;\n\tgetRegisteredModes(): string[];\n\tgetRegisteredLanguageNames(): string[];\n\tgetExtensions(alias: string): string[];\n\tgetFilenames(alias: string): string[];\n\tgetMimeForMode(modeId: string): string;\n\tgetLanguageName(modeId: string): string;\n\tgetModeIdForLanguageName(alias: string): string;\n\tgetModeIdByFilenameOrFirstLine(filename: string, firstLine?: string): string;\n\tgetModeId(commaSeparatedMimetypesOrCommaSeparatedIds: string): string;\n\tgetLanguageIdentifier(modeId: string | LanguageId): LanguageIdentifier;\n\tgetConfigurationFiles(modeId: string): string[];\n\n\t// --- instantiation\n\tlookup(commaSeparatedMimetypesOrCommaSeparatedIds: string): IModeLookupResult[];\n\tgetMode(commaSeparatedMimetypesOrCommaSeparatedIds: string): IMode;\n\tgetOrCreateMode(commaSeparatedMimetypesOrCommaSeparatedIds: string): TPromise;\n\tgetOrCreateModeByLanguageName(languageName: string): TPromise;\n\tgetOrCreateModeByFilenameOrFirstLine(filename: string, firstLine?: string): TPromise;\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'use strict';\n\nimport Event from 'vs/base/common/event';\nimport URI from 'vs/base/common/uri';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\nimport { IModel, ITextModelCreationOptions } from 'vs/editor/common/editorCommon';\nimport { IMode } from 'vs/editor/common/modes';\nimport { IRawTextSource } from 'vs/editor/common/model/textSource';\n\nexport var IModelService = createDecorator('modelService');\n\nexport interface IModelService {\n\t_serviceBrand: any;\n\n\tcreateModel(value: string | IRawTextSource, modeOrPromise: TPromise | IMode, resource: URI): IModel;\n\n\tupdateModel(model: IModel, value: string | IRawTextSource): void;\n\n\tsetMode(model: IModel, modeOrPromise: TPromise | IMode): void;\n\n\tdestroyModel(resource: URI): void;\n\n\tgetModels(): IModel[];\n\n\tgetCreationOptions(language: string): ITextModelCreationOptions;\n\n\tgetModel(resource: URI): IModel;\n\n\tonModelAdded: Event;\n\n\tonModelRemoved: Event;\n\n\tonModelModeChanged: Event<{ model: IModel; oldModeId: string; }>;\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'use strict';\n\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport URI from 'vs/base/common/uri';\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\nimport { IModel } from 'vs/editor/common/editorCommon';\nimport { IEditorModel } from 'vs/platform/editor/common/editor';\nimport { IDisposable, IReference } from 'vs/base/common/lifecycle';\n\nexport const ITextModelService = createDecorator('textModelService');\n\nexport interface ITextModelService {\n\t_serviceBrand: any;\n\n\t/**\n\t * Provided a resource URI, it will return a model reference\n\t * which should be disposed once not needed anymore.\n\t */\n\tcreateModelReference(resource: URI): TPromise>;\n\n\t/**\n\t * Registers a specific `scheme` content provider.\n\t */\n\tregisterTextModelContentProvider(scheme: string, provider: ITextModelContentProvider): IDisposable;\n}\n\nexport interface ITextModelContentProvider {\n\n\t/**\n\t * Given a resource, return the content of the resource as IModel.\n\t */\n\tprovideTextContent(resource: URI): TPromise;\n}\n\nexport interface ITextEditorModel extends IEditorModel {\n\n\t/**\n\t * Provides access to the underlying IModel.\n\t */\n\ttextEditorModel: IModel;\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\nimport Event from 'vs/base/common/event';\nimport URI from 'vs/base/common/uri';\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\nimport { IPosition } from 'vs/editor/common/core/position';\n\nexport const ITextResourceConfigurationService = createDecorator('textResourceConfigurationService');\n\nexport interface ITextResourceConfigurationService {\n\n\t_serviceBrand: any;\n\n\t/**\n\t * Event that fires when the configuration changes.\n\t */\n\tonDidUpdateConfiguration: Event;\n\n\t/**\n\t * Fetches the appropriate section of the for the given resource with appropriate overrides (e.g. language).\n\t * This will be an object keyed off the section name.\n\t *\n\t * @param resource - Resource for which the configuration has to be fetched. Can be `null` or `undefined`.\n\t * @param postion - Position in the resource for which configuration has to be fetched. Can be `null` or `undefined`.\n\t * @param section - Section of the configuraion. Can be `null` or `undefined`.\n\t *\n\t */\n\tgetConfiguration(resource: URI, section?: string): T;\n\tgetConfiguration(resource: URI, position?: IPosition, section?: string): 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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { IntervalTimer, ShallowCancelThenPromise, wireCancellationToken } from 'vs/base/common/async';\nimport { Disposable, IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport URI from 'vs/base/common/uri';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { SimpleWorkerClient, logOnceWebWorkerWarning } from 'vs/base/common/worker/simpleWorker';\nimport { DefaultWorkerFactory } from 'vs/base/worker/defaultWorkerFactory';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport * as modes from 'vs/editor/common/modes';\nimport { Position, IPosition } from 'vs/editor/common/core/position';\nimport { IEditorWorkerService } from 'vs/editor/common/services/editorWorkerService';\nimport { IModelService } from 'vs/editor/common/services/modelService';\nimport { EditorSimpleWorkerImpl } from 'vs/editor/common/services/editorSimpleWorker';\nimport { LanguageConfigurationRegistry } from 'vs/editor/common/modes/languageConfigurationRegistry';\nimport { ITextResourceConfigurationService } from 'vs/editor/common/services/resourceConfiguration';\nimport { IEditorOptions } from 'vs/editor/common/config/editorOptions';\nimport { IRange } from 'vs/editor/common/core/range';\nimport { IModeService } from 'vs/editor/common/services/modeService';\n\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/**\n * Stop the worker if it was not needed for 5 min.\n */\nconst STOP_WORKER_DELTA_TIME_MS = 5 * 60 * 1000;\n\nexport class EditorWorkerServiceImpl extends Disposable implements IEditorWorkerService {\n\tpublic _serviceBrand: any;\n\n\tprivate readonly _workerManager: WorkerManager;\n\n\tconstructor(\n\t\t@IModelService modelService: IModelService,\n\t\t@ITextResourceConfigurationService configurationService: ITextResourceConfigurationService,\n\t\t@IModeService modeService: IModeService\n\t) {\n\t\tsuper();\n\t\tthis._workerManager = this._register(new WorkerManager(modelService));\n\n\t\t// todo@joh make sure this happens only once\n\t\tthis._register(modes.LinkProviderRegistry.register('*', {\n\t\t\tprovideLinks: (model, token) => {\n\t\t\t\treturn wireCancellationToken(token, this._workerManager.withWorker().then(client => client.computeLinks(model.uri)));\n\t\t\t}\n\t\t}));\n\t\tthis._register(modes.SuggestRegistry.register('*', new WordBasedCompletionItemProvider(this._workerManager, configurationService, modeService)));\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t}\n\n\tpublic computeDiff(original: URI, modified: URI, ignoreTrimWhitespace: boolean): TPromise {\n\t\treturn this._workerManager.withWorker().then(client => client.computeDiff(original, modified, ignoreTrimWhitespace));\n\t}\n\n\tpublic computeDirtyDiff(original: URI, modified: URI, ignoreTrimWhitespace: boolean): TPromise {\n\t\treturn this._workerManager.withWorker().then(client => client.computeDirtyDiff(original, modified, ignoreTrimWhitespace));\n\t}\n\n\tpublic computeMoreMinimalEdits(resource: URI, edits: modes.TextEdit[], ranges: IRange[]): TPromise {\n\t\tif (!Array.isArray(edits) || edits.length === 0) {\n\t\t\treturn TPromise.as(edits);\n\t\t} else {\n\t\t\treturn this._workerManager.withWorker().then(client => client.computeMoreMinimalEdits(resource, edits, ranges));\n\t\t}\n\t}\n\n\tpublic navigateValueSet(resource: URI, range: IRange, up: boolean): TPromise {\n\t\treturn this._workerManager.withWorker().then(client => client.navigateValueSet(resource, range, up));\n\t}\n}\n\nclass WordBasedCompletionItemProvider implements modes.ISuggestSupport {\n\n\tprivate readonly _workerManager: WorkerManager;\n\tprivate readonly _configurationService: ITextResourceConfigurationService;\n\tprivate readonly _modeService: IModeService;\n\n\tconstructor(workerManager: WorkerManager, configurationService: ITextResourceConfigurationService, modeService: IModeService) {\n\t\tthis._workerManager = workerManager;\n\t\tthis._configurationService = configurationService;\n\t\tthis._modeService = modeService;\n\t}\n\n\tprovideCompletionItems(model: editorCommon.IModel, position: Position): TPromise {\n\t\tconst { wordBasedSuggestions } = this._configurationService.getConfiguration(model.uri, position, 'editor');\n\t\tif (!wordBasedSuggestions) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this._workerManager.withWorker().then(client => client.textualSuggest(model.uri, position));\n\t}\n}\n\nclass WorkerManager extends Disposable {\n\n\tprivate _modelService: IModelService;\n\tprivate _editorWorkerClient: EditorWorkerClient;\n\tprivate _lastWorkerUsedTime: number;\n\n\tconstructor(modelService: IModelService) {\n\t\tsuper();\n\t\tthis._modelService = modelService;\n\t\tthis._editorWorkerClient = null;\n\n\t\tlet stopWorkerInterval = this._register(new IntervalTimer());\n\t\tstopWorkerInterval.cancelAndSet(() => this._checkStopIdleWorker(), Math.round(STOP_WORKER_DELTA_TIME_MS / 2));\n\n\t\tthis._register(this._modelService.onModelRemoved(_ => this._checkStopEmptyWorker()));\n\t}\n\n\tpublic dispose(): void {\n\t\tif (this._editorWorkerClient) {\n\t\t\tthis._editorWorkerClient.dispose();\n\t\t\tthis._editorWorkerClient = null;\n\t\t}\n\t\tsuper.dispose();\n\t}\n\n\t/**\n\t * Check if the model service has no more models and stop the worker if that is the case.\n\t */\n\tprivate _checkStopEmptyWorker(): void {\n\t\tif (!this._editorWorkerClient) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet models = this._modelService.getModels();\n\t\tif (models.length === 0) {\n\t\t\t// There are no more models => nothing possible for me to do\n\t\t\tthis._editorWorkerClient.dispose();\n\t\t\tthis._editorWorkerClient = null;\n\t\t}\n\t}\n\n\t/**\n\t * Check if the worker has been idle for a while and then stop it.\n\t */\n\tprivate _checkStopIdleWorker(): void {\n\t\tif (!this._editorWorkerClient) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet timeSinceLastWorkerUsedTime = (new Date()).getTime() - this._lastWorkerUsedTime;\n\t\tif (timeSinceLastWorkerUsedTime > STOP_WORKER_DELTA_TIME_MS) {\n\t\t\tthis._editorWorkerClient.dispose();\n\t\t\tthis._editorWorkerClient = null;\n\t\t}\n\t}\n\n\tpublic withWorker(): TPromise {\n\t\tthis._lastWorkerUsedTime = (new Date()).getTime();\n\t\tif (!this._editorWorkerClient) {\n\t\t\tthis._editorWorkerClient = new EditorWorkerClient(this._modelService, 'editorWorkerService');\n\t\t}\n\t\treturn TPromise.as(this._editorWorkerClient);\n\t}\n}\n\nclass EditorModelManager extends Disposable {\n\n\tprivate _proxy: EditorSimpleWorkerImpl;\n\tprivate _modelService: IModelService;\n\tprivate _syncedModels: { [modelUrl: string]: IDisposable[]; } = Object.create(null);\n\tprivate _syncedModelsLastUsedTime: { [modelUrl: string]: number; } = Object.create(null);\n\n\tconstructor(proxy: EditorSimpleWorkerImpl, modelService: IModelService, keepIdleModels: boolean) {\n\t\tsuper();\n\t\tthis._proxy = proxy;\n\t\tthis._modelService = modelService;\n\n\t\tif (!keepIdleModels) {\n\t\t\tlet timer = new IntervalTimer();\n\t\t\ttimer.cancelAndSet(() => this._checkStopModelSync(), Math.round(STOP_SYNC_MODEL_DELTA_TIME_MS / 2));\n\t\t\tthis._register(timer);\n\t\t}\n\t}\n\n\tpublic dispose(): void {\n\t\tfor (let modelUrl in this._syncedModels) {\n\t\t\tdispose(this._syncedModels[modelUrl]);\n\t\t}\n\t\tthis._syncedModels = Object.create(null);\n\t\tthis._syncedModelsLastUsedTime = Object.create(null);\n\t\tsuper.dispose();\n\t}\n\n\tpublic esureSyncedResources(resources: URI[]): void {\n\t\tfor (let i = 0; i < resources.length; i++) {\n\t\t\tlet resource = resources[i];\n\t\t\tlet resourceStr = resource.toString();\n\n\t\t\tif (!this._syncedModels[resourceStr]) {\n\t\t\t\tthis._beginModelSync(resource);\n\t\t\t}\n\t\t\tif (this._syncedModels[resourceStr]) {\n\t\t\t\tthis._syncedModelsLastUsedTime[resourceStr] = (new Date()).getTime();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _checkStopModelSync(): void {\n\t\tlet currentTime = (new Date()).getTime();\n\n\t\tlet toRemove: string[] = [];\n\t\tfor (let modelUrl in this._syncedModelsLastUsedTime) {\n\t\t\tlet elapsedTime = currentTime - this._syncedModelsLastUsedTime[modelUrl];\n\t\t\tif (elapsedTime > STOP_SYNC_MODEL_DELTA_TIME_MS) {\n\t\t\t\ttoRemove.push(modelUrl);\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = 0; i < toRemove.length; i++) {\n\t\t\tthis._stopModelSync(toRemove[i]);\n\t\t}\n\t}\n\n\tprivate _beginModelSync(resource: URI): void {\n\t\tlet model = this._modelService.getModel(resource);\n\t\tif (!model) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet modelUrl = resource.toString();\n\n\t\tthis._proxy.acceptNewModel({\n\t\t\turl: model.uri.toString(),\n\t\t\tlines: model.getLinesContent(),\n\t\t\tEOL: model.getEOL(),\n\t\t\tversionId: model.getVersionId()\n\t\t});\n\n\t\tlet toDispose: IDisposable[] = [];\n\t\ttoDispose.push(model.onDidChangeContent((e) => {\n\t\t\tthis._proxy.acceptModelChanged(modelUrl.toString(), e);\n\t\t}));\n\t\ttoDispose.push(model.onWillDispose(() => {\n\t\t\tthis._stopModelSync(modelUrl);\n\t\t}));\n\t\ttoDispose.push({\n\t\t\tdispose: () => {\n\t\t\t\tthis._proxy.acceptRemovedModel(modelUrl);\n\t\t\t}\n\t\t});\n\n\t\tthis._syncedModels[modelUrl] = toDispose;\n\t}\n\n\tprivate _stopModelSync(modelUrl: string): void {\n\t\tlet toDispose = this._syncedModels[modelUrl];\n\t\tdelete this._syncedModels[modelUrl];\n\t\tdelete this._syncedModelsLastUsedTime[modelUrl];\n\t\tdispose(toDispose);\n\t}\n}\n\ninterface IWorkerClient {\n\tgetProxyObject(): TPromise;\n\tdispose(): void;\n}\n\nclass SynchronousWorkerClient implements IWorkerClient {\n\tprivate _instance: T;\n\tprivate _proxyObj: TPromise;\n\n\tconstructor(instance: T) {\n\t\tthis._instance = instance;\n\t\tthis._proxyObj = TPromise.as(this._instance);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._instance.dispose();\n\t\tthis._instance = null;\n\t\tthis._proxyObj = null;\n\t}\n\n\tpublic getProxyObject(): TPromise {\n\t\treturn new ShallowCancelThenPromise(this._proxyObj);\n\t}\n}\n\nexport class EditorWorkerClient extends Disposable {\n\n\tprivate _modelService: IModelService;\n\tprivate _worker: IWorkerClient;\n\tprivate _workerFactory: DefaultWorkerFactory;\n\tprivate _modelManager: EditorModelManager;\n\n\tconstructor(modelService: IModelService, label: string) {\n\t\tsuper();\n\t\tthis._modelService = modelService;\n\t\tthis._workerFactory = new DefaultWorkerFactory(label);\n\t\tthis._worker = null;\n\t\tthis._modelManager = null;\n\t}\n\n\tprivate _getOrCreateWorker(): IWorkerClient {\n\t\tif (!this._worker) {\n\t\t\ttry {\n\t\t\t\tthis._worker = this._register(new SimpleWorkerClient(\n\t\t\t\t\tthis._workerFactory,\n\t\t\t\t\t'vs/editor/common/services/editorSimpleWorker'\n\t\t\t\t));\n\t\t\t} catch (err) {\n\t\t\t\tlogOnceWebWorkerWarning(err);\n\t\t\t\tthis._worker = new SynchronousWorkerClient(new EditorSimpleWorkerImpl());\n\t\t\t}\n\t\t}\n\t\treturn this._worker;\n\t}\n\n\tprotected _getProxy(): TPromise {\n\t\treturn new ShallowCancelThenPromise(this._getOrCreateWorker().getProxyObject().then(null, (err) => {\n\t\t\tlogOnceWebWorkerWarning(err);\n\t\t\tthis._worker = new SynchronousWorkerClient(new EditorSimpleWorkerImpl());\n\t\t\treturn this._getOrCreateWorker().getProxyObject();\n\t\t}));\n\t}\n\n\tprivate _getOrCreateModelManager(proxy: EditorSimpleWorkerImpl): EditorModelManager {\n\t\tif (!this._modelManager) {\n\t\t\tthis._modelManager = this._register(new EditorModelManager(proxy, this._modelService, false));\n\t\t}\n\t\treturn this._modelManager;\n\t}\n\n\tprotected _withSyncedResources(resources: URI[]): TPromise {\n\t\treturn this._getProxy().then((proxy) => {\n\t\t\tthis._getOrCreateModelManager(proxy).esureSyncedResources(resources);\n\t\t\treturn proxy;\n\t\t});\n\t}\n\n\tpublic computeDiff(original: URI, modified: URI, ignoreTrimWhitespace: boolean): TPromise {\n\t\treturn this._withSyncedResources([original, modified]).then(proxy => {\n\t\t\treturn proxy.computeDiff(original.toString(), modified.toString(), ignoreTrimWhitespace);\n\t\t});\n\t}\n\n\tpublic computeDirtyDiff(original: URI, modified: URI, ignoreTrimWhitespace: boolean): TPromise {\n\t\treturn this._withSyncedResources([original, modified]).then(proxy => {\n\t\t\treturn proxy.computeDirtyDiff(original.toString(), modified.toString(), ignoreTrimWhitespace);\n\t\t});\n\t}\n\n\tpublic computeMoreMinimalEdits(resource: URI, edits: modes.TextEdit[], ranges: IRange[]): TPromise {\n\t\treturn this._withSyncedResources([resource]).then(proxy => {\n\t\t\treturn proxy.computeMoreMinimalEdits(resource.toString(), edits, ranges);\n\t\t});\n\t}\n\n\tpublic computeLinks(resource: URI): TPromise {\n\t\treturn this._withSyncedResources([resource]).then(proxy => {\n\t\t\treturn proxy.computeLinks(resource.toString());\n\t\t});\n\t}\n\n\tpublic textualSuggest(resource: URI, position: IPosition): TPromise {\n\t\treturn this._withSyncedResources([resource]).then(proxy => {\n\t\t\tlet model = this._modelService.getModel(resource);\n\t\t\tif (!model) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tlet wordDefRegExp = LanguageConfigurationRegistry.getWordDefinition(model.getLanguageIdentifier().id);\n\t\t\tlet wordDef = wordDefRegExp.source;\n\t\t\tlet wordDefFlags = (wordDefRegExp.global ? 'g' : '') + (wordDefRegExp.ignoreCase ? 'i' : '') + (wordDefRegExp.multiline ? 'm' : '');\n\t\t\treturn proxy.textualSuggest(resource.toString(), position, wordDef, wordDefFlags);\n\t\t});\n\t}\n\n\tpublic navigateValueSet(resource: URI, range: IRange, up: boolean): TPromise {\n\t\treturn this._withSyncedResources([resource]).then(proxy => {\n\t\t\tlet model = this._modelService.getModel(resource);\n\t\t\tif (!model) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tlet wordDefRegExp = LanguageConfigurationRegistry.getWordDefinition(model.getLanguageIdentifier().id);\n\t\t\tlet wordDef = wordDefRegExp.source;\n\t\t\tlet wordDefFlags = (wordDefRegExp.global ? 'g' : '') + (wordDefRegExp.ignoreCase ? 'i' : '') + (wordDefRegExp.multiline ? 'm' : '');\n\t\t\treturn proxy.navigateValueSet(resource.toString(), range, up, wordDef, wordDefFlags);\n\t\t});\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { ShallowCancelThenPromise } from 'vs/base/common/async';\nimport URI from 'vs/base/common/uri';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IModelService } from 'vs/editor/common/services/modelService';\nimport { EditorWorkerClient } from 'vs/editor/common/services/editorWorkerServiceImpl';\n\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: IModelService, opts: IWebWorkerOptions): MonacoWebWorker {\n\treturn new MonacoWebWorkerImpl(modelService, opts);\n}\n\n/**\n * A web worker that can provide a proxy to an arbitrary file.\n */\nexport interface MonacoWebWorker {\n\t/**\n\t * Terminate the web worker, thus invalidating the returned proxy.\n\t */\n\tdispose(): void;\n\t/**\n\t * Get a proxy to the arbitrary loaded code.\n\t */\n\tgetProxy(): TPromise;\n\t/**\n\t * Synchronize (send) the models at `resources` to the web worker,\n\t * making them available in the monaco.worker.getMirrorModels().\n\t */\n\twithSyncedResources(resources: URI[]): TPromise;\n}\n\nexport interface IWebWorkerOptions {\n\t/**\n\t * The AMD moduleId to load.\n\t * It should export a function `create` that should return the exported proxy.\n\t */\n\tmoduleId: string;\n\t/**\n\t * The data to send over when calling create on the module.\n\t */\n\tcreateData?: any;\n\t/**\n\t * A label to be used to identify the web worker for debugging purposes.\n\t */\n\tlabel?: string;\n}\n\nclass MonacoWebWorkerImpl extends EditorWorkerClient implements MonacoWebWorker {\n\n\tprivate _foreignModuleId: string;\n\tprivate _foreignModuleCreateData: any;\n\tprivate _foreignProxy: TPromise;\n\n\tconstructor(modelService: IModelService, opts: IWebWorkerOptions) {\n\t\tsuper(modelService, opts.label);\n\t\tthis._foreignModuleId = opts.moduleId;\n\t\tthis._foreignModuleCreateData = opts.createData || null;\n\t\tthis._foreignProxy = null;\n\t}\n\n\tprivate _getForeignProxy(): TPromise {\n\t\tif (!this._foreignProxy) {\n\t\t\tthis._foreignProxy = new ShallowCancelThenPromise(this._getProxy().then((proxy) => {\n\t\t\t\treturn proxy.loadForeignModule(this._foreignModuleId, this._foreignModuleCreateData).then((foreignMethods) => {\n\t\t\t\t\tthis._foreignModuleId = null;\n\t\t\t\t\tthis._foreignModuleCreateData = null;\n\n\t\t\t\t\tlet proxyMethodRequest = (method: string, args: any[]): TPromise => {\n\t\t\t\t\t\treturn proxy.fmr(method, args);\n\t\t\t\t\t};\n\n\t\t\t\t\tlet createProxyMethod = (method: string, proxyMethodRequest: (method: string, args: any[]) => TPromise): Function => {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tlet args = Array.prototype.slice.call(arguments, 0);\n\t\t\t\t\t\t\treturn proxyMethodRequest(method, args);\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\tlet foreignProxy = {};\n\t\t\t\t\tfor (let i = 0; i < foreignMethods.length; i++) {\n\t\t\t\t\t\tforeignProxy[foreignMethods[i]] = createProxyMethod(foreignMethods[i], proxyMethodRequest);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn foreignProxy;\n\t\t\t\t});\n\t\t\t}));\n\t\t}\n\t\treturn this._foreignProxy;\n\t}\n\n\tpublic getProxy(): TPromise {\n\t\treturn this._getForeignProxy();\n\t}\n\n\tpublic withSyncedResources(resources: URI[]): TPromise {\n\t\treturn this._withSyncedResources(resources).then(_ => this.getProxy());\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport URI from 'vs/base/common/uri';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { Range } from 'vs/editor/common/core/range';\nimport { IModel } from 'vs/editor/common/editorCommon';\nimport { IModelService } from 'vs/editor/common/services/modelService';\nimport { Node, build, find } from './tokenTree';\nimport { Position } from 'vs/editor/common/core/position';\n\n/**\n * Interface used to compute a hierachry of logical ranges.\n */\nexport interface ILogicalSelectionEntry {\n\ttype: string;\n\trange: Range;\n}\n\nexport class TokenSelectionSupport {\n\n\tprivate _modelService: IModelService;\n\n\tconstructor( @IModelService modelService: IModelService) {\n\t\tthis._modelService = modelService;\n\t}\n\n\tpublic getRangesToPosition(resource: URI, position: Position): TPromise {\n\t\treturn TPromise.as(this.getRangesToPositionSync(resource, position));\n\t}\n\n\tpublic getRangesToPositionSync(resource: URI, position: Position): ILogicalSelectionEntry[] {\n\t\tvar model = this._modelService.getModel(resource),\n\t\t\tentries: ILogicalSelectionEntry[] = [];\n\n\t\tif (model) {\n\t\t\tthis._doGetRangesToPosition(model, position).forEach(range => {\n\t\t\t\tentries.push({\n\t\t\t\t\ttype: void 0,\n\t\t\t\t\trange\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn entries;\n\t}\n\n\tprivate _doGetRangesToPosition(model: IModel, position: Position): Range[] {\n\n\t\tvar tree = build(model),\n\t\t\tnode: Node,\n\t\t\tlastRange: Range;\n\n\t\tnode = find(tree, position);\n\t\tvar ranges: Range[] = [];\n\t\twhile (node) {\n\t\t\tif (!lastRange || !Range.equalsRange(lastRange, node.range)) {\n\t\t\t\tranges.push(node.range);\n\t\t\t}\n\t\t\tlastRange = node.range;\n\t\t\tnode = node.parent;\n\t\t}\n\t\tranges = ranges.reverse();\n\t\treturn ranges;\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\nimport { TokenTheme, ITokenThemeRule } from 'vs/editor/common/modes/supports/tokenization';\nimport { ITheme, IThemeService } from 'vs/platform/theme/common/themeService';\n\nexport var IStandaloneThemeService = createDecorator('themeService');\n\nexport type BuiltinTheme = 'vs' | 'vs-dark' | 'hc-black';\nexport type IColors = { [colorId: string]: string; };\n\nexport interface IStandaloneThemeData {\n\tbase: BuiltinTheme;\n\tinherit: boolean;\n\trules: ITokenThemeRule[];\n\tcolors: IColors;\n}\n\nexport interface IStandaloneTheme extends ITheme {\n\ttokenTheme: TokenTheme;\n\tthemeName: string;\n}\n\nexport interface IStandaloneThemeService extends IThemeService {\n\t_serviceBrand: any;\n\n\tsetTheme(themeName: string): string;\n\n\tdefineTheme(themeName: string, themeData: IStandaloneThemeData): void;\n\n\tgetTheme(): IStandaloneTheme;\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'use strict';\n\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { TypeConstraint, validateConstraints } from 'vs/base/common/types';\nimport { ServicesAccessor, createDecorator } from 'vs/platform/instantiation/common/instantiation';\nimport Event from 'vs/base/common/event';\n\nexport const ICommandService = createDecorator('commandService');\n\nexport interface ICommandEvent {\n\tcommandId: string;\n}\n\nexport interface ICommandService {\n\t_serviceBrand: any;\n\tonWillExecuteCommand: Event;\n\texecuteCommand(commandId: string, ...args: any[]): TPromise;\n\texecuteCommand(commandId: string, ...args: any[]): TPromise;\n}\n\nexport interface ICommandsMap {\n\t[id: string]: ICommand;\n}\n\nexport interface ICommandHandler {\n\t(accessor: ServicesAccessor, ...args: any[]): void;\n}\n\nexport interface ICommand {\n\thandler: ICommandHandler;\n\tdescription?: ICommandHandlerDescription;\n}\n\nexport interface ICommandHandlerDescription {\n\tdescription: string;\n\targs: { name: string; description?: string; constraint?: TypeConstraint; }[];\n\treturns?: string;\n}\n\nexport interface ICommandRegistry {\n\tregisterCommand(id: string, command: ICommandHandler): IDisposable;\n\tregisterCommand(id: string, command: ICommand): IDisposable;\n\tgetCommand(id: string): ICommand;\n\tgetCommands(): ICommandsMap;\n}\n\nfunction isCommand(thing: any): thing is ICommand {\n\treturn typeof thing === 'object'\n\t\t&& typeof (thing).handler === 'function'\n\t\t&& (!(thing).description || typeof (thing).description === 'object');\n}\n\nexport const CommandsRegistry: ICommandRegistry = new class implements ICommandRegistry {\n\n\tprivate _commands = new Map();\n\n\tregisterCommand(id: string, commandOrDesc: ICommandHandler | ICommand): IDisposable {\n\n\t\tif (!commandOrDesc) {\n\t\t\tthrow new Error(`invalid command`);\n\t\t}\n\n\t\tlet command: ICommand;\n\t\tif (!isCommand(commandOrDesc)) {\n\t\t\t// simple handler\n\t\t\tcommand = { handler: commandOrDesc };\n\n\t\t} else {\n\t\t\tconst { handler, description } = commandOrDesc;\n\t\t\tif (description) {\n\t\t\t\t// add argument validation if rich command metadata is provided\n\t\t\t\tconst constraints: TypeConstraint[] = [];\n\t\t\t\tfor (let arg of description.args) {\n\t\t\t\t\tconstraints.push(arg.constraint);\n\t\t\t\t}\n\t\t\t\tcommand = {\n\t\t\t\t\tdescription,\n\t\t\t\t\thandler(accessor, ...args: any[]) {\n\t\t\t\t\t\tvalidateConstraints(args, constraints);\n\t\t\t\t\t\treturn handler(accessor, ...args);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\t// add as simple handler\n\t\t\t\tcommand = { handler };\n\t\t\t}\n\t\t}\n\n\t\t// find a place to store the command\n\t\tconst commandOrArray = this._commands.get(id);\n\t\tif (commandOrArray === void 0) {\n\t\t\tthis._commands.set(id, command);\n\t\t} else if (Array.isArray(commandOrArray)) {\n\t\t\tcommandOrArray.unshift(command);\n\t\t} else {\n\t\t\tthis._commands.set(id, [command, commandOrArray]);\n\t\t}\n\n\t\treturn {\n\t\t\tdispose: () => {\n\t\t\t\tconst commandOrArray = this._commands.get(id);\n\t\t\t\tif (Array.isArray(commandOrArray)) {\n\t\t\t\t\t// remove from array, remove array\n\t\t\t\t\t// if last element removed\n\t\t\t\t\tconst idx = commandOrArray.indexOf(command);\n\t\t\t\t\tif (idx >= 0) {\n\t\t\t\t\t\tcommandOrArray.splice(idx, 1);\n\t\t\t\t\t\tif (commandOrArray.length === 0) {\n\t\t\t\t\t\t\tthis._commands.delete(id);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (isCommand(commandOrArray)) {\n\t\t\t\t\t// remove from map\n\t\t\t\t\tthis._commands.delete(id);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tgetCommand(id: string): ICommand {\n\t\tconst commandOrArray = this._commands.get(id);\n\t\tif (Array.isArray(commandOrArray)) {\n\t\t\treturn commandOrArray[0];\n\t\t} else {\n\t\t\treturn commandOrArray;\n\t\t}\n\t}\n\n\tgetCommands(): ICommandsMap {\n\t\tconst result: ICommandsMap = Object.create(null);\n\t\tthis._commands.forEach((value, key) => {\n\t\t\tresult[key] = this.getCommand(key);\n\t\t});\n\t\treturn result;\n\t}\n};\n\nexport const NullCommandService: ICommandService = {\n\t_serviceBrand: undefined,\n\tonWillExecuteCommand: () => ({ dispose: () => { } }),\n\texecuteCommand() {\n\t\treturn TPromise.as(undefined);\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { onUnexpectedExternalError } from 'vs/base/common/errors';\nimport URI from 'vs/base/common/uri';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { Range, IRange } from 'vs/editor/common/core/range';\nimport { IReadOnlyModel } from 'vs/editor/common/editorCommon';\nimport { ILink, LinkProvider, LinkProviderRegistry } from 'vs/editor/common/modes';\nimport { asWinJsPromise } from 'vs/base/common/async';\nimport { CommandsRegistry } from 'vs/platform/commands/common/commands';\nimport { IModelService } from 'vs/editor/common/services/modelService';\n\nexport class Link implements ILink {\n\n\tprivate _link: ILink;\n\tprivate _provider: LinkProvider;\n\n\tconstructor(link: ILink, provider: LinkProvider) {\n\t\tthis._link = link;\n\t\tthis._provider = provider;\n\t}\n\n\tget range(): IRange {\n\t\treturn this._link.range;\n\t}\n\n\tget url(): string {\n\t\treturn this._link.url;\n\t}\n\n\tresolve(): TPromise {\n\t\tif (this._link.url) {\n\t\t\ttry {\n\t\t\t\treturn TPromise.as(URI.parse(this._link.url));\n\t\t\t} catch (e) {\n\t\t\t\treturn TPromise.wrapError(new Error('invalid'));\n\t\t\t}\n\t\t}\n\n\t\tif (typeof this._provider.resolveLink === 'function') {\n\t\t\treturn asWinJsPromise(token => this._provider.resolveLink(this._link, token)).then(value => {\n\t\t\t\tthis._link = value || this._link;\n\t\t\t\tif (this._link.url) {\n\t\t\t\t\t// recurse\n\t\t\t\t\treturn this.resolve();\n\t\t\t\t}\n\n\t\t\t\treturn TPromise.wrapError(new Error('missing'));\n\t\t\t});\n\t\t}\n\n\t\treturn TPromise.wrapError(new Error('missing'));\n\t}\n}\n\nexport function getLinks(model: IReadOnlyModel): TPromise {\n\n\tlet links: Link[] = [];\n\n\t// ask all providers for links in parallel\n\tconst promises = LinkProviderRegistry.ordered(model).reverse().map(provider => {\n\t\treturn asWinJsPromise(token => provider.provideLinks(model, token)).then(result => {\n\t\t\tif (Array.isArray(result)) {\n\t\t\t\tconst newLinks = result.map(link => new Link(link, provider));\n\t\t\t\tlinks = union(links, newLinks);\n\t\t\t}\n\t\t}, onUnexpectedExternalError);\n\t});\n\n\treturn TPromise.join(promises).then(() => {\n\t\treturn links;\n\t});\n}\n\nfunction union(oldLinks: Link[], newLinks: Link[]): Link[] {\n\t// reunite oldLinks with newLinks and remove duplicates\n\tvar result: Link[] = [],\n\t\toldIndex: number,\n\t\toldLen: number,\n\t\tnewIndex: number,\n\t\tnewLen: number,\n\t\toldLink: Link,\n\t\tnewLink: Link,\n\t\tcomparisonResult: number;\n\n\tfor (oldIndex = 0, newIndex = 0, oldLen = oldLinks.length, newLen = newLinks.length; oldIndex < oldLen && newIndex < newLen;) {\n\t\toldLink = oldLinks[oldIndex];\n\t\tnewLink = newLinks[newIndex];\n\n\t\tif (Range.areIntersectingOrTouching(oldLink.range, newLink.range)) {\n\t\t\t// Remove the oldLink\n\t\t\toldIndex++;\n\t\t\tcontinue;\n\t\t}\n\n\t\tcomparisonResult = Range.compareRangesUsingStarts(oldLink.range, newLink.range);\n\n\t\tif (comparisonResult < 0) {\n\t\t\t// oldLink is before\n\t\t\tresult.push(oldLink);\n\t\t\toldIndex++;\n\t\t} else {\n\t\t\t// newLink is before\n\t\t\tresult.push(newLink);\n\t\t\tnewIndex++;\n\t\t}\n\t}\n\n\tfor (; oldIndex < oldLen; oldIndex++) {\n\t\tresult.push(oldLinks[oldIndex]);\n\t}\n\tfor (; newIndex < newLen; newIndex++) {\n\t\tresult.push(newLinks[newIndex]);\n\t}\n\n\treturn result;\n}\n\nCommandsRegistry.registerCommand('_executeLinkProvider', (accessor, ...args) => {\n\n\tconst [uri] = args;\n\tif (!(uri instanceof URI)) {\n\t\treturn undefined;\n\t}\n\n\tconst model = accessor.get(IModelService).getModel(uri);\n\tif (!model) {\n\t\treturn undefined;\n\t}\n\n\treturn getLinks(model);\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'use strict';\n\nimport { Action } from 'vs/base/common/actions';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { SyncDescriptor0, createSyncDescriptor } from 'vs/platform/instantiation/common/descriptors';\nimport { IConstructorSignature2, createDecorator } from 'vs/platform/instantiation/common/instantiation';\nimport { IKeybindings } from 'vs/platform/keybinding/common/keybindingsRegistry';\nimport { ContextKeyExpr, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';\nimport { ICommandService } from 'vs/platform/commands/common/commands';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport Event from 'vs/base/common/event';\n\nexport interface ILocalizedString {\n\tvalue: string;\n\toriginal: string;\n}\n\nexport interface ICommandAction {\n\tid: string;\n\ttitle: string | ILocalizedString;\n\tcategory?: string | ILocalizedString;\n\ticonClass?: string;\n}\n\nexport interface IMenuItem {\n\tcommand: ICommandAction;\n\talt?: ICommandAction;\n\twhen?: ContextKeyExpr;\n\tgroup?: 'navigation' | string;\n\torder?: number;\n}\n\nexport class MenuId {\n\n\tstatic readonly EditorTitle = new MenuId('1');\n\tstatic readonly EditorTitleContext = new MenuId('2');\n\tstatic readonly EditorContext = new MenuId('3');\n\tstatic readonly ExplorerContext = new MenuId('4');\n\tstatic readonly ProblemsPanelContext = new MenuId('5');\n\tstatic readonly DebugVariablesContext = new MenuId('6');\n\tstatic readonly DebugWatchContext = new MenuId('7');\n\tstatic readonly DebugCallStackContext = new MenuId('8');\n\tstatic readonly DebugBreakpointsContext = new MenuId('9');\n\tstatic readonly DebugConsoleContext = new MenuId('10');\n\tstatic readonly SCMTitle = new MenuId('11');\n\tstatic readonly SCMResourceGroupContext = new MenuId('12');\n\tstatic readonly SCMResourceContext = new MenuId('13');\n\tstatic readonly CommandPalette = new MenuId('14');\n\tstatic readonly ViewTitle = new MenuId('15');\n\tstatic readonly ViewItemContext = new MenuId('16');\n\n\tconstructor(private _id: string) {\n\n\t}\n\n\tget id(): string {\n\t\treturn this._id;\n\t}\n}\n\nexport interface IMenuActionOptions {\n\targ?: any;\n\tshouldForwardArgs?: boolean;\n}\n\nexport interface IMenu extends IDisposable {\n\tonDidChange: Event;\n\tgetActions(options?: IMenuActionOptions): [string, MenuItemAction[]][];\n}\n\nexport const IMenuService = createDecorator('menuService');\n\nexport interface IMenuService {\n\n\t_serviceBrand: any;\n\n\tcreateMenu(id: MenuId, scopedKeybindingService: IContextKeyService): IMenu;\n}\n\nexport interface IMenuRegistry {\n\taddCommand(userCommand: ICommandAction): boolean;\n\tgetCommand(id: string): ICommandAction;\n\tappendMenuItem(menu: MenuId, item: IMenuItem): IDisposable;\n\tgetMenuItems(loc: MenuId): IMenuItem[];\n}\n\nexport const MenuRegistry: IMenuRegistry = new class {\n\n\tprivate _commands: { [id: string]: ICommandAction } = Object.create(null);\n\n\tprivate _menuItems: { [loc: string]: IMenuItem[] } = Object.create(null);\n\n\taddCommand(command: ICommandAction): boolean {\n\t\tconst old = this._commands[command.id];\n\t\tthis._commands[command.id] = command;\n\t\treturn old !== void 0;\n\t}\n\n\tgetCommand(id: string): ICommandAction {\n\t\treturn this._commands[id];\n\t}\n\n\tappendMenuItem({ id }: MenuId, item: IMenuItem): IDisposable {\n\t\tlet array = this._menuItems[id];\n\t\tif (!array) {\n\t\t\tthis._menuItems[id] = array = [item];\n\t\t} else {\n\t\t\tarray.push(item);\n\t\t}\n\t\treturn {\n\t\t\tdispose() {\n\t\t\t\tconst idx = array.indexOf(item);\n\t\t\t\tif (idx >= 0) {\n\t\t\t\t\tarray.splice(idx, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tgetMenuItems({ id }: MenuId): IMenuItem[] {\n\t\tconst result = this._menuItems[id] || [];\n\n\t\tif (id === MenuId.CommandPalette.id) {\n\t\t\t// CommandPalette is special because it shows\n\t\t\t// all commands by default\n\t\t\tthis._appendImplicitItems(result);\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate _appendImplicitItems(result: IMenuItem[]) {\n\t\tconst set = new Set();\n\t\tfor (const { command, alt } of result) {\n\t\t\tset.add(command.id);\n\t\t\tif (alt) {\n\t\t\t\tset.add(alt.id);\n\t\t\t}\n\t\t}\n\t\tfor (let id in this._commands) {\n\t\t\tif (!set.has(id)) {\n\t\t\t\tresult.push({ command: this._commands[id] });\n\t\t\t}\n\t\t}\n\t}\n};\n\nexport class ExecuteCommandAction extends Action {\n\n\tconstructor(\n\t\tid: string,\n\t\tlabel: string,\n\t\t@ICommandService private _commandService: ICommandService) {\n\n\t\tsuper(id, label);\n\t}\n\n\trun(...args: any[]): TPromise {\n\t\treturn this._commandService.executeCommand(this.id, ...args);\n\t}\n}\n\nexport class MenuItemAction extends ExecuteCommandAction {\n\n\tprivate _options: IMenuActionOptions;\n\n\treadonly item: ICommandAction;\n\treadonly alt: MenuItemAction;\n\n\tconstructor(\n\t\titem: ICommandAction,\n\t\talt: ICommandAction,\n\t\toptions: IMenuActionOptions,\n\t\t@ICommandService commandService: ICommandService\n\t) {\n\t\ttypeof item.title === 'string' ? super(item.id, item.title, commandService) : super(item.id, item.title.value, commandService);\n\t\tthis._cssClass = item.iconClass;\n\t\tthis._enabled = true;\n\t\tthis._options = options || {};\n\n\t\tthis.item = item;\n\t\tthis.alt = alt ? new MenuItemAction(alt, undefined, this._options, commandService) : undefined;\n\t}\n\n\trun(...args: any[]): TPromise {\n\t\tlet runArgs = [];\n\n\t\tif (this._options.arg) {\n\t\t\trunArgs = [...runArgs, this._options.arg];\n\t\t}\n\n\t\tif (this._options.shouldForwardArgs) {\n\t\t\trunArgs = [...runArgs, ...args];\n\t\t}\n\n\t\treturn super.run(...runArgs);\n\t}\n}\n\nexport class SyncActionDescriptor {\n\n\tprivate _descriptor: SyncDescriptor0;\n\n\tprivate _id: string;\n\tprivate _label: string;\n\tprivate _keybindings: IKeybindings;\n\tprivate _keybindingContext: ContextKeyExpr;\n\tprivate _keybindingWeight: number;\n\n\tconstructor(ctor: IConstructorSignature2,\n\t\tid: string, label: string, keybindings?: IKeybindings, keybindingContext?: ContextKeyExpr, keybindingWeight?: number\n\t) {\n\t\tthis._id = id;\n\t\tthis._label = label;\n\t\tthis._keybindings = keybindings;\n\t\tthis._keybindingContext = keybindingContext;\n\t\tthis._keybindingWeight = keybindingWeight;\n\t\tthis._descriptor = createSyncDescriptor(ctor, this._id, this._label);\n\t}\n\n\tpublic get syncDescriptor(): SyncDescriptor0 {\n\t\treturn this._descriptor;\n\t}\n\n\tpublic get id(): string {\n\t\treturn this._id;\n\t}\n\n\tpublic get label(): string {\n\t\treturn this._label;\n\t}\n\n\tpublic get keybindings(): IKeybindings {\n\t\treturn this._keybindings;\n\t}\n\n\tpublic get keybindingContext(): ContextKeyExpr {\n\t\treturn this._keybindingContext;\n\t}\n\n\tpublic get keybindingWeight(): number {\n\t\treturn this._keybindingWeight;\n\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 *--------------------------------------------------------------------------------------------*/\n\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport * as arrays from 'vs/base/common/arrays';\nimport * as types from 'vs/base/common/types';\nimport * as objects from 'vs/base/common/objects';\nimport URI from 'vs/base/common/uri';\nimport { StrictResourceMap } from 'vs/base/common/map';\nimport { Workspace } from 'vs/platform/workspace/common/workspace';\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\nimport Event from 'vs/base/common/event';\n\nexport const IConfigurationService = createDecorator('configurationService');\n\nexport interface IConfigurationOverrides {\n\toverrideIdentifier?: string;\n\tresource?: URI;\n}\n\nexport type IConfigurationValues = { [key: string]: IConfigurationValue };\n\nexport interface IConfigurationService {\n\t_serviceBrand: any;\n\n\tgetConfigurationData(): IConfigurationData;\n\n\t/**\n\t * Fetches the appropriate section of the configuration JSON file.\n\t * This will be an object keyed off the section name.\n\t */\n\tgetConfiguration(section?: string, overrides?: IConfigurationOverrides): T;\n\n\t/**\n\t * Resolves a configuration key to its values in the different scopes\n\t * the setting is defined.\n\t */\n\tlookup(key: string, overrides?: IConfigurationOverrides): IConfigurationValue;\n\n\t/**\n\t * Returns the defined keys of configurations in the different scopes\n\t * the key is defined.\n\t */\n\tkeys(): IConfigurationKeys;\n\n\t/**\n\t * Similar to #getConfiguration() but ensures that the latest configuration\n\t * from disk is fetched.\n\t */\n\treloadConfiguration(section?: string): TPromise;\n\n\t/**\n\t * Event that fires when the configuration changes.\n\t */\n\tonDidUpdateConfiguration: Event;\n\n\t/**\n\t * Returns the defined values of configurations in the different scopes.\n\t */\n\tvalues(): IConfigurationValues;\n}\n\nexport enum ConfigurationSource {\n\tDefault = 1,\n\tUser,\n\tWorkspace\n}\n\nexport interface IConfigurationServiceEvent {\n\t/**\n\t * The type of source that triggered this event.\n\t */\n\tsource: ConfigurationSource;\n\t/**\n\t * The part of the configuration contributed by the source of this event.\n\t */\n\tsourceConfig: any;\n}\n\nexport interface IConfigurationValue {\n\tvalue: T;\n\tdefault: T;\n\tuser: T;\n\tworkspace: T;\n\tfolder: T;\n}\n\nexport interface IConfigurationKeys {\n\tdefault: string[];\n\tuser: string[];\n\tworkspace: string[];\n}\n\n/**\n * A helper function to get the configuration value with a specific settings path (e.g. config.some.setting)\n */\nexport function getConfigurationValue(config: any, settingPath: string, defaultValue?: T): T {\n\tfunction accessSetting(config: any, path: string[]): any {\n\t\tlet current = config;\n\t\tfor (let i = 0; i < path.length; i++) {\n\t\t\tif (typeof current !== 'object' || current === null) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tcurrent = current[path[i]];\n\t\t}\n\t\treturn current;\n\t}\n\n\tconst path = settingPath.split('.');\n\tconst result = accessSetting(config, path);\n\n\treturn typeof result === 'undefined' ? defaultValue : result;\n}\n\nexport function merge(base: any, add: any, overwrite: boolean): void {\n\tObject.keys(add).forEach(key => {\n\t\tif (key in base) {\n\t\t\tif (types.isObject(base[key]) && types.isObject(add[key])) {\n\t\t\t\tmerge(base[key], add[key], overwrite);\n\t\t\t} else if (overwrite) {\n\t\t\t\tbase[key] = add[key];\n\t\t\t}\n\t\t} else {\n\t\t\tbase[key] = add[key];\n\t\t}\n\t});\n}\n\nexport interface IConfiguraionModel {\n\tcontents: T;\n\tkeys: string[];\n\toverrides: IOverrides[];\n}\n\nexport interface IOverrides {\n\tcontents: T;\n\tidentifiers: string[];\n}\n\nexport class ConfigurationModel implements IConfiguraionModel {\n\n\tconstructor(protected _contents: T = {}, protected _keys: string[] = [], protected _overrides: IOverrides[] = []) {\n\t}\n\n\tpublic get contents(): T {\n\t\treturn this._contents;\n\t}\n\n\tpublic get overrides(): IOverrides[] {\n\t\treturn this._overrides;\n\t}\n\n\tpublic get keys(): string[] {\n\t\treturn this._keys;\n\t}\n\n\tpublic getContentsFor(section: string): V {\n\t\treturn objects.clone(this.contents[section]);\n\t}\n\n\tpublic override(identifier: string): ConfigurationModel {\n\t\tconst result = new ConfigurationModel();\n\t\tconst contents = objects.clone(this.contents);\n\t\tif (this._overrides) {\n\t\t\tfor (const override of this._overrides) {\n\t\t\t\tif (override.identifiers.indexOf(identifier) !== -1) {\n\t\t\t\t\tmerge(contents, override.contents, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tresult._contents = contents;\n\t\treturn result;\n\t}\n\n\tpublic merge(other: ConfigurationModel, overwrite: boolean = true): ConfigurationModel {\n\t\tconst mergedModel = new ConfigurationModel();\n\t\tthis.doMerge(mergedModel, this, overwrite);\n\t\tthis.doMerge(mergedModel, other, overwrite);\n\t\treturn mergedModel;\n\t}\n\n\tprotected doMerge(source: ConfigurationModel, target: ConfigurationModel, overwrite: boolean = true) {\n\t\tmerge(source.contents, objects.clone(target.contents), overwrite);\n\t\tconst overrides = objects.clone(source._overrides);\n\t\tfor (const override of target._overrides) {\n\t\t\tconst [sourceOverride] = overrides.filter(o => arrays.equals(o.identifiers, override.identifiers));\n\t\t\tif (sourceOverride) {\n\t\t\t\tmerge(sourceOverride.contents, override.contents, overwrite);\n\t\t\t} else {\n\t\t\t\toverrides.push(override);\n\t\t\t}\n\t\t}\n\t\tsource._overrides = overrides;\n\t}\n}\n\nexport interface IConfigurationData {\n\tdefaults: IConfiguraionModel;\n\tuser: IConfiguraionModel;\n\tworkspace: IConfiguraionModel;\n\tfolders: { [folder: string]: IConfiguraionModel };\n}\n\nexport class Configuration {\n\n\tprivate _globalConfiguration: ConfigurationModel;\n\tprivate _workspaceConsolidatedConfiguration: ConfigurationModel;\n\tprivate _legacyWorkspaceConsolidatedConfiguration: ConfigurationModel;\n\tprotected _foldersConsolidatedConfigurations: StrictResourceMap>;\n\n\tconstructor(protected _defaults: ConfigurationModel, protected _user: ConfigurationModel, protected _workspaceConfiguration: ConfigurationModel = new ConfigurationModel(), protected folders: StrictResourceMap> = new StrictResourceMap>(), protected _workspace?: Workspace) {\n\t\tthis.merge();\n\t}\n\n\tget defaults(): ConfigurationModel {\n\t\treturn this._defaults;\n\t}\n\n\tget user(): ConfigurationModel {\n\t\treturn this._user;\n\t}\n\n\tprotected merge(): void {\n\t\tthis._globalConfiguration = new ConfigurationModel().merge(this._defaults).merge(this._user);\n\t\tthis._workspaceConsolidatedConfiguration = new ConfigurationModel().merge(this._globalConfiguration).merge(this._workspaceConfiguration);\n\t\tthis._legacyWorkspaceConsolidatedConfiguration = null;\n\t\tthis._foldersConsolidatedConfigurations = new StrictResourceMap>();\n\t\tfor (const folder of this.folders.keys()) {\n\t\t\tthis.mergeFolder(folder);\n\t\t}\n\t}\n\n\tprotected mergeFolder(folder: URI) {\n\t\tthis._foldersConsolidatedConfigurations.set(folder, new ConfigurationModel().merge(this._workspaceConsolidatedConfiguration).merge(this.folders.get(folder)));\n\t}\n\n\tgetValue(section: string = '', overrides: IConfigurationOverrides = {}): C {\n\t\tconst configModel = this.getConsolidateConfigurationModel(overrides);\n\t\treturn section ? configModel.getContentsFor(section) : configModel.contents;\n\t}\n\n\tlookup(key: string, overrides: IConfigurationOverrides = {}): IConfigurationValue {\n\t\t// make sure to clone the configuration so that the receiver does not tamper with the values\n\t\tconst consolidateConfigurationModel = this.getConsolidateConfigurationModel(overrides);\n\t\tconst folderConfigurationModel = this.getFolderConfigurationModelForResource(overrides.resource);\n\t\treturn {\n\t\t\tdefault: objects.clone(getConfigurationValue(overrides.overrideIdentifier ? this._defaults.override(overrides.overrideIdentifier).contents : this._defaults.contents, key)),\n\t\t\tuser: objects.clone(getConfigurationValue(overrides.overrideIdentifier ? this._user.override(overrides.overrideIdentifier).contents : this._user.contents, key)),\n\t\t\tworkspace: objects.clone(this._workspace ? getConfigurationValue(overrides.overrideIdentifier ? this._workspaceConfiguration.override(overrides.overrideIdentifier).contents : this._workspaceConfiguration.contents, key) : void 0), //Check on workspace exists or not because _workspaceConfiguration is never null\n\t\t\tfolder: objects.clone(folderConfigurationModel ? getConfigurationValue(overrides.overrideIdentifier ? folderConfigurationModel.override(overrides.overrideIdentifier).contents : folderConfigurationModel.contents, key) : void 0),\n\t\t\tvalue: objects.clone(getConfigurationValue(consolidateConfigurationModel.contents, key))\n\t\t};\n\t}\n\n\tlookupLegacy(key: string): IConfigurationValue {\n\t\tif (!this._legacyWorkspaceConsolidatedConfiguration) {\n\t\t\tthis._legacyWorkspaceConsolidatedConfiguration = this._workspace ? new ConfigurationModel().merge(this._workspaceConfiguration).merge(this.folders.get(this._workspace.roots[0])) : null;\n\t\t}\n\t\tconst consolidateConfigurationModel = this.getConsolidateConfigurationModel({});\n\t\treturn {\n\t\t\tdefault: objects.clone(getConfigurationValue(this._defaults.contents, key)),\n\t\t\tuser: objects.clone(getConfigurationValue(this._user.contents, key)),\n\t\t\tworkspace: objects.clone(this._legacyWorkspaceConsolidatedConfiguration ? getConfigurationValue(this._legacyWorkspaceConsolidatedConfiguration.contents, key) : void 0),\n\t\t\tfolder: void 0,\n\t\t\tvalue: objects.clone(getConfigurationValue(consolidateConfigurationModel.contents, key))\n\t\t};\n\t}\n\n\tkeys(): IConfigurationKeys {\n\t\treturn {\n\t\t\tdefault: this._defaults.keys,\n\t\t\tuser: this._user.keys,\n\t\t\tworkspace: this._workspaceConfiguration.keys\n\t\t};\n\t}\n\n\tvalues(): IConfigurationValues {\n\t\tconst result = Object.create(null);\n\t\tconst keyset = this.keys();\n\t\tconst keys = [...keyset.workspace, ...keyset.user, ...keyset.default].sort();\n\n\t\tlet lastKey: string;\n\t\tfor (const key of keys) {\n\t\t\tif (key !== lastKey) {\n\t\t\t\tlastKey = key;\n\t\t\t\tresult[key] = this.lookup(key);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tvalues2(): Map> {\n\t\tconst result: Map> = new Map>();\n\t\tconst keyset = this.keys();\n\t\tconst keys = [...keyset.workspace, ...keyset.user, ...keyset.default].sort();\n\n\t\tlet lastKey: string;\n\t\tfor (const key of keys) {\n\t\t\tif (key !== lastKey) {\n\t\t\t\tlastKey = key;\n\t\t\t\tresult.set(key, this.lookup(key));\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate getConsolidateConfigurationModel(overrides: IConfigurationOverrides): ConfigurationModel {\n\t\tlet configurationModel = this.getConsolidatedConfigurationModelForResource(overrides);\n\t\treturn overrides.overrideIdentifier ? configurationModel.override(overrides.overrideIdentifier) : configurationModel;\n\t}\n\n\tprivate getConsolidatedConfigurationModelForResource({ resource }: IConfigurationOverrides): ConfigurationModel {\n\t\tif (!this._workspace) {\n\t\t\treturn this._globalConfiguration;\n\t\t}\n\n\t\tif (!resource) {\n\t\t\treturn this._workspaceConsolidatedConfiguration;\n\t\t}\n\n\t\tconst root = this._workspace.getRoot(resource);\n\t\tif (!root) {\n\t\t\treturn this._workspaceConsolidatedConfiguration;\n\t\t}\n\n\t\treturn this._foldersConsolidatedConfigurations.get(root) || this._workspaceConsolidatedConfiguration;\n\t}\n\n\tprivate getFolderConfigurationModelForResource(resource: URI): ConfigurationModel {\n\t\tif (!this._workspace || !resource) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst root = this._workspace.getRoot(resource);\n\t\treturn root ? this.folders.get(root) : null;\n\t}\n\n\tpublic toData(): IConfigurationData {\n\t\treturn {\n\t\t\tdefaults: {\n\t\t\t\tcontents: this._defaults.contents,\n\t\t\t\toverrides: this._defaults.overrides,\n\t\t\t\tkeys: this._defaults.keys\n\t\t\t},\n\t\t\tuser: {\n\t\t\t\tcontents: this._user.contents,\n\t\t\t\toverrides: this._user.overrides,\n\t\t\t\tkeys: this._user.keys\n\t\t\t},\n\t\t\tworkspace: {\n\t\t\t\tcontents: this._workspaceConfiguration.contents,\n\t\t\t\toverrides: this._workspaceConfiguration.overrides,\n\t\t\t\tkeys: this._workspaceConfiguration.keys\n\t\t\t},\n\t\t\tfolders: this.folders.keys().reduce((result, folder) => {\n\t\t\t\tconst { contents, overrides, keys } = this.folders.get(folder);\n\t\t\t\tresult[folder.toString()] = { contents, overrides, keys };\n\t\t\t\treturn result;\n\t\t\t}, Object.create({}))\n\t\t};\n\t}\n\n\tpublic static parse(data: IConfigurationData, workspace: Workspace): Configuration {\n\t\tconst defaultConfiguration = Configuration.parseConfigurationModel(data.defaults);\n\t\tconst userConfiguration = Configuration.parseConfigurationModel(data.user);\n\t\tconst workspaceConfiguration = Configuration.parseConfigurationModel(data.workspace);\n\t\tconst folders: StrictResourceMap> = Object.keys(data.folders).reduce((result, key) => {\n\t\t\tresult.set(URI.parse(key), Configuration.parseConfigurationModel(data.folders[key]));\n\t\t\treturn result;\n\t\t}, new StrictResourceMap>());\n\t\treturn new Configuration(defaultConfiguration, userConfiguration, workspaceConfiguration, folders, workspace);\n\t}\n\n\tprivate static parseConfigurationModel(model: IConfiguraionModel): ConfigurationModel {\n\t\treturn new ConfigurationModel(model.contents, model.keys, model.overrides);\n\t}\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'use strict';\n\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\nimport Event from 'vs/base/common/event';\n\nexport enum ContextKeyExprType {\n\tDefined = 1,\n\tNot = 2,\n\tEquals = 3,\n\tNotEquals = 4,\n\tAnd = 5\n}\n\nexport abstract class ContextKeyExpr {\n\n\tpublic static has(key: string): ContextKeyExpr {\n\t\treturn new ContextKeyDefinedExpr(key);\n\t}\n\n\tpublic static equals(key: string, value: any): ContextKeyExpr {\n\t\treturn new ContextKeyEqualsExpr(key, value);\n\t}\n\n\tpublic static notEquals(key: string, value: any): ContextKeyExpr {\n\t\treturn new ContextKeyNotEqualsExpr(key, value);\n\t}\n\n\tpublic static not(key: string): ContextKeyExpr {\n\t\treturn new ContextKeyNotExpr(key);\n\t}\n\n\tpublic static and(...expr: ContextKeyExpr[]): ContextKeyExpr {\n\t\treturn new ContextKeyAndExpr(expr);\n\t}\n\n\tpublic static deserialize(serialized: string): ContextKeyExpr {\n\t\tif (!serialized) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet pieces = serialized.split('&&');\n\t\tlet result = new ContextKeyAndExpr(pieces.map(p => this._deserializeOne(p)));\n\t\treturn result.normalize();\n\t}\n\n\tprivate static _deserializeOne(serializedOne: string): ContextKeyExpr {\n\t\tserializedOne = serializedOne.trim();\n\n\t\tif (serializedOne.indexOf('!=') >= 0) {\n\t\t\tlet pieces = serializedOne.split('!=');\n\t\t\treturn new ContextKeyNotEqualsExpr(pieces[0].trim(), this._deserializeValue(pieces[1]));\n\t\t}\n\n\t\tif (serializedOne.indexOf('==') >= 0) {\n\t\t\tlet pieces = serializedOne.split('==');\n\t\t\treturn new ContextKeyEqualsExpr(pieces[0].trim(), this._deserializeValue(pieces[1]));\n\t\t}\n\n\t\tif (/^\\!\\s*/.test(serializedOne)) {\n\t\t\treturn new ContextKeyNotExpr(serializedOne.substr(1).trim());\n\t\t}\n\n\t\treturn new ContextKeyDefinedExpr(serializedOne);\n\t}\n\n\tprivate static _deserializeValue(serializedValue: string): any {\n\t\tserializedValue = serializedValue.trim();\n\n\t\tif (serializedValue === 'true') {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (serializedValue === 'false') {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet m = /^'([^']*)'$/.exec(serializedValue);\n\t\tif (m) {\n\t\t\treturn m[1].trim();\n\t\t}\n\n\t\treturn serializedValue;\n\t}\n\n\tpublic abstract getType(): ContextKeyExprType;\n\tpublic abstract equals(other: ContextKeyExpr): boolean;\n\tpublic abstract evaluate(context: IContext): boolean;\n\tpublic abstract normalize(): ContextKeyExpr;\n\tpublic abstract serialize(): string;\n\tpublic abstract keys(): string[];\n}\n\nfunction cmp(a: ContextKeyExpr, b: ContextKeyExpr): number {\n\tlet aType = a.getType();\n\tlet bType = b.getType();\n\tif (aType !== bType) {\n\t\treturn aType - bType;\n\t}\n\tswitch (aType) {\n\t\tcase ContextKeyExprType.Defined:\n\t\t\treturn (a).cmp(b);\n\t\tcase ContextKeyExprType.Not:\n\t\t\treturn (a).cmp(b);\n\t\tcase ContextKeyExprType.Equals:\n\t\t\treturn (a).cmp(b);\n\t\tcase ContextKeyExprType.NotEquals:\n\t\t\treturn (a).cmp(b);\n\t\tdefault:\n\t\t\tthrow new Error('Unknown ContextKeyExpr!');\n\t}\n}\n\nexport class ContextKeyDefinedExpr implements ContextKeyExpr {\n\tconstructor(protected key: string) {\n\t}\n\n\tpublic getType(): ContextKeyExprType {\n\t\treturn ContextKeyExprType.Defined;\n\t}\n\n\tpublic cmp(other: ContextKeyDefinedExpr): number {\n\t\tif (this.key < other.key) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (this.key > other.key) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tpublic equals(other: ContextKeyExpr): boolean {\n\t\tif (other instanceof ContextKeyDefinedExpr) {\n\t\t\treturn (this.key === other.key);\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic evaluate(context: IContext): boolean {\n\t\treturn (!!context.getValue(this.key));\n\t}\n\n\tpublic normalize(): ContextKeyExpr {\n\t\treturn this;\n\t}\n\n\tpublic serialize(): string {\n\t\treturn this.key;\n\t}\n\n\tpublic keys(): string[] {\n\t\treturn [this.key];\n\t}\n}\n\nexport class ContextKeyEqualsExpr implements ContextKeyExpr {\n\tconstructor(private key: string, private value: any) {\n\t}\n\n\tpublic getType(): ContextKeyExprType {\n\t\treturn ContextKeyExprType.Equals;\n\t}\n\n\tpublic cmp(other: ContextKeyEqualsExpr): number {\n\t\tif (this.key < other.key) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (this.key > other.key) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (this.value < other.value) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (this.value > other.value) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tpublic equals(other: ContextKeyExpr): boolean {\n\t\tif (other instanceof ContextKeyEqualsExpr) {\n\t\t\treturn (this.key === other.key && this.value === other.value);\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic evaluate(context: IContext): boolean {\n\t\t/* tslint:disable:triple-equals */\n\t\t// Intentional ==\n\t\treturn (context.getValue(this.key) == this.value);\n\t\t/* tslint:enable:triple-equals */\n\t}\n\n\tpublic normalize(): ContextKeyExpr {\n\t\tif (typeof this.value === 'boolean') {\n\t\t\tif (this.value) {\n\t\t\t\treturn new ContextKeyDefinedExpr(this.key);\n\t\t\t}\n\t\t\treturn new ContextKeyNotExpr(this.key);\n\t\t}\n\t\treturn this;\n\t}\n\n\tpublic serialize(): string {\n\t\tif (typeof this.value === 'boolean') {\n\t\t\treturn this.normalize().serialize();\n\t\t}\n\n\t\treturn this.key + ' == \\'' + this.value + '\\'';\n\t}\n\n\tpublic keys(): string[] {\n\t\treturn [this.key];\n\t}\n}\n\nexport class ContextKeyNotEqualsExpr implements ContextKeyExpr {\n\tconstructor(private key: string, private value: any) {\n\t}\n\n\tpublic getType(): ContextKeyExprType {\n\t\treturn ContextKeyExprType.NotEquals;\n\t}\n\n\tpublic cmp(other: ContextKeyNotEqualsExpr): number {\n\t\tif (this.key < other.key) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (this.key > other.key) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (this.value < other.value) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (this.value > other.value) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tpublic equals(other: ContextKeyExpr): boolean {\n\t\tif (other instanceof ContextKeyNotEqualsExpr) {\n\t\t\treturn (this.key === other.key && this.value === other.value);\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic evaluate(context: IContext): boolean {\n\t\t/* tslint:disable:triple-equals */\n\t\t// Intentional !=\n\t\treturn (context.getValue(this.key) != this.value);\n\t\t/* tslint:enable:triple-equals */\n\t}\n\n\tpublic normalize(): ContextKeyExpr {\n\t\tif (typeof this.value === 'boolean') {\n\t\t\tif (this.value) {\n\t\t\t\treturn new ContextKeyNotExpr(this.key);\n\t\t\t}\n\t\t\treturn new ContextKeyDefinedExpr(this.key);\n\t\t}\n\t\treturn this;\n\t}\n\n\tpublic serialize(): string {\n\t\tif (typeof this.value === 'boolean') {\n\t\t\treturn this.normalize().serialize();\n\t\t}\n\n\t\treturn this.key + ' != \\'' + this.value + '\\'';\n\t}\n\n\tpublic keys(): string[] {\n\t\treturn [this.key];\n\t}\n}\n\nexport class ContextKeyNotExpr implements ContextKeyExpr {\n\tconstructor(private key: string) {\n\t}\n\n\tpublic getType(): ContextKeyExprType {\n\t\treturn ContextKeyExprType.Not;\n\t}\n\n\tpublic cmp(other: ContextKeyNotExpr): number {\n\t\tif (this.key < other.key) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (this.key > other.key) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tpublic equals(other: ContextKeyExpr): boolean {\n\t\tif (other instanceof ContextKeyNotExpr) {\n\t\t\treturn (this.key === other.key);\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic evaluate(context: IContext): boolean {\n\t\treturn (!context.getValue(this.key));\n\t}\n\n\tpublic normalize(): ContextKeyExpr {\n\t\treturn this;\n\t}\n\n\tpublic serialize(): string {\n\t\treturn '!' + this.key;\n\t}\n\n\tpublic keys(): string[] {\n\t\treturn [this.key];\n\t}\n}\n\nexport class ContextKeyAndExpr implements ContextKeyExpr {\n\tprivate expr: ContextKeyExpr[];\n\n\tconstructor(expr: ContextKeyExpr[]) {\n\t\tthis.expr = ContextKeyAndExpr._normalizeArr(expr);\n\t}\n\n\tpublic getType(): ContextKeyExprType {\n\t\treturn ContextKeyExprType.And;\n\t}\n\n\tpublic equals(other: ContextKeyExpr): boolean {\n\t\tif (other instanceof ContextKeyAndExpr) {\n\t\t\tif (this.expr.length !== other.expr.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (let i = 0, len = this.expr.length; i < len; i++) {\n\t\t\t\tif (!this.expr[i].equals(other.expr[i])) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic evaluate(context: IContext): boolean {\n\t\tfor (let i = 0, len = this.expr.length; i < len; i++) {\n\t\t\tif (!this.expr[i].evaluate(context)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tprivate static _normalizeArr(arr: ContextKeyExpr[]): ContextKeyExpr[] {\n\t\tlet expr: ContextKeyExpr[] = [];\n\n\t\tif (arr) {\n\t\t\tfor (let i = 0, len = arr.length; i < len; i++) {\n\t\t\t\tlet e = arr[i];\n\t\t\t\tif (!e) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\te = e.normalize();\n\t\t\t\tif (!e) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (e instanceof ContextKeyAndExpr) {\n\t\t\t\t\texpr = expr.concat(e.expr);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\texpr.push(e);\n\t\t\t}\n\n\t\t\texpr.sort(cmp);\n\t\t}\n\n\t\treturn expr;\n\t}\n\n\tpublic normalize(): ContextKeyExpr {\n\t\tif (this.expr.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (this.expr.length === 1) {\n\t\t\treturn this.expr[0];\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tpublic serialize(): string {\n\t\tif (this.expr.length === 0) {\n\t\t\treturn '';\n\t\t}\n\t\tif (this.expr.length === 1) {\n\t\t\treturn this.normalize().serialize();\n\t\t}\n\t\treturn this.expr.map(e => e.serialize()).join(' && ');\n\t}\n\n\tpublic keys(): string[] {\n\t\tconst result: string[] = [];\n\t\tfor (let expr of this.expr) {\n\t\t\tresult.push(...expr.keys());\n\t\t}\n\t\treturn result;\n\t}\n}\n\nexport class RawContextKey extends ContextKeyDefinedExpr {\n\n\tprivate _defaultValue: T;\n\n\tconstructor(key: string, defaultValue: T) {\n\t\tsuper(key);\n\t\tthis._defaultValue = defaultValue;\n\t}\n\n\tpublic bindTo(target: IContextKeyService): IContextKey {\n\t\treturn target.createKey(this.key, this._defaultValue);\n\t}\n\n\tpublic getValue(target: IContextKeyService): T {\n\t\treturn target.getContextKeyValue(this.key);\n\t}\n\n\tpublic toNegated(): ContextKeyExpr {\n\t\treturn ContextKeyExpr.not(this.key);\n\t}\n\n\tpublic isEqualTo(value: string): ContextKeyExpr {\n\t\treturn ContextKeyExpr.equals(this.key, value);\n\t}\n}\n\nexport interface IContext {\n\tgetValue(key: string): T;\n}\n\nexport interface IContextKey {\n\tset(value: T): void;\n\treset(): void;\n\tget(): T;\n}\n\nexport interface IContextKeyServiceTarget {\n\tparentElement: IContextKeyServiceTarget;\n\tsetAttribute(attr: string, value: string): void;\n\tremoveAttribute(attr: string): void;\n\thasAttribute(attr: string): boolean;\n\tgetAttribute(attr: string): string;\n}\n\nexport let IContextKeyService = createDecorator('contextKeyService');\n\nexport interface IContextKeyService {\n\t_serviceBrand: any;\n\tdispose(): void;\n\n\tonDidChangeContext: Event;\n\tcreateKey(key: string, defaultValue: T): IContextKey;\n\tcontextMatchesRules(rules: ContextKeyExpr): boolean;\n\tgetContextKeyValue(key: string): T;\n\n\tcreateScoped(target?: IContextKeyServiceTarget): IContextKeyService;\n\tgetContext(target: IContextKeyServiceTarget): IContext;\n}\n\nexport const SET_CONTEXT_COMMAND_ID = 'setContext';\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'use strict';\n\nimport { ContextKeyExpr, RawContextKey } from 'vs/platform/contextkey/common/contextkey';\n\nexport namespace EditorContextKeys {\n\t/**\n\t * A context key that is set when the editor's text has focus (cursor is blinking).\n\t */\n\texport const textFocus = new RawContextKey('editorTextFocus', false);\n\t/**\n\t * A context key that is set when the editor's text or an editor's widget has focus.\n\t */\n\texport const focus = new RawContextKey('editorFocus', false);\n\n\texport const readOnly = new RawContextKey('editorReadonly', false);\n\texport const writable: ContextKeyExpr = readOnly.toNegated();\n\texport const hasNonEmptySelection = new RawContextKey('editorHasSelection', false);\n\texport const hasOnlyEmptySelection: ContextKeyExpr = hasNonEmptySelection.toNegated();\n\texport const hasMultipleSelections = new RawContextKey('editorHasMultipleSelections', false);\n\texport const hasSingleSelection: ContextKeyExpr = hasMultipleSelections.toNegated();\n\texport const tabMovesFocus = new RawContextKey('editorTabMovesFocus', false);\n\texport const tabDoesNotMoveFocus: ContextKeyExpr = tabMovesFocus.toNegated();\n\texport const isInEmbeddedEditor = new RawContextKey('isInEmbeddedEditor', undefined);\n\n\t// -- mode context keys\n\texport const languageId = new RawContextKey('editorLangId', undefined);\n\texport const hasCompletionItemProvider = new RawContextKey('editorHasCompletionItemProvider', undefined);\n\texport const hasCodeActionsProvider = new RawContextKey('editorHasCodeActionsProvider', undefined);\n\texport const hasCodeLensProvider = new RawContextKey('editorHasCodeLensProvider', undefined);\n\texport const hasDefinitionProvider = new RawContextKey('editorHasDefinitionProvider', undefined);\n\texport const hasImplementationProvider = new RawContextKey('editorHasImplementationProvider', undefined);\n\texport const hasTypeDefinitionProvider = new RawContextKey('editorHasTypeDefinitionProvider', undefined);\n\texport const hasHoverProvider = new RawContextKey('editorHasHoverProvider', undefined);\n\texport const hasDocumentHighlightProvider = new RawContextKey('editorHasDocumentHighlightProvider', undefined);\n\texport const hasDocumentSymbolProvider = new RawContextKey('editorHasDocumentSymbolProvider', undefined);\n\texport const hasReferenceProvider = new RawContextKey('editorHasReferenceProvider', undefined);\n\texport const hasRenameProvider = new RawContextKey('editorHasRenameProvider', undefined);\n\texport const hasDocumentFormattingProvider = new RawContextKey('editorHasDocumentFormattingProvider', undefined);\n\texport const hasDocumentSelectionFormattingProvider = new RawContextKey('editorHasDocumentSelectionFormattingProvider', undefined);\n\texport const hasSignatureHelpProvider = new RawContextKey('editorHasSignatureHelpProvider', 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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';\nimport * as modes from 'vs/editor/common/modes';\nimport { ICommonCodeEditor } from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { Schemas } from 'vs/base/common/network';\n\nexport class EditorModeContext extends Disposable {\n\n\tprivate _editor: ICommonCodeEditor;\n\n\tprivate _langId: IContextKey;\n\tprivate _hasCompletionItemProvider: IContextKey;\n\tprivate _hasCodeActionsProvider: IContextKey;\n\tprivate _hasCodeLensProvider: IContextKey;\n\tprivate _hasDefinitionProvider: IContextKey;\n\tprivate _hasImplementationProvider: IContextKey;\n\tprivate _hasTypeDefinitionProvider: IContextKey;\n\tprivate _hasHoverProvider: IContextKey;\n\tprivate _hasDocumentHighlightProvider: IContextKey;\n\tprivate _hasDocumentSymbolProvider: IContextKey;\n\tprivate _hasReferenceProvider: IContextKey;\n\tprivate _hasRenameProvider: IContextKey;\n\tprivate _hasDocumentFormattingProvider: IContextKey;\n\tprivate _hasDocumentSelectionFormattingProvider: IContextKey;\n\tprivate _hasSignatureHelpProvider: IContextKey;\n\tprivate _isInWalkThrough: IContextKey;\n\n\tconstructor(\n\t\teditor: ICommonCodeEditor,\n\t\tcontextKeyService: IContextKeyService\n\t) {\n\t\tsuper();\n\t\tthis._editor = editor;\n\n\t\tthis._langId = EditorContextKeys.languageId.bindTo(contextKeyService);\n\t\tthis._hasCompletionItemProvider = EditorContextKeys.hasCompletionItemProvider.bindTo(contextKeyService);\n\t\tthis._hasCodeActionsProvider = EditorContextKeys.hasCodeActionsProvider.bindTo(contextKeyService);\n\t\tthis._hasCodeLensProvider = EditorContextKeys.hasCodeLensProvider.bindTo(contextKeyService);\n\t\tthis._hasDefinitionProvider = EditorContextKeys.hasDefinitionProvider.bindTo(contextKeyService);\n\t\tthis._hasImplementationProvider = EditorContextKeys.hasImplementationProvider.bindTo(contextKeyService);\n\t\tthis._hasTypeDefinitionProvider = EditorContextKeys.hasTypeDefinitionProvider.bindTo(contextKeyService);\n\t\tthis._hasHoverProvider = EditorContextKeys.hasHoverProvider.bindTo(contextKeyService);\n\t\tthis._hasDocumentHighlightProvider = EditorContextKeys.hasDocumentHighlightProvider.bindTo(contextKeyService);\n\t\tthis._hasDocumentSymbolProvider = EditorContextKeys.hasDocumentSymbolProvider.bindTo(contextKeyService);\n\t\tthis._hasReferenceProvider = EditorContextKeys.hasReferenceProvider.bindTo(contextKeyService);\n\t\tthis._hasRenameProvider = EditorContextKeys.hasRenameProvider.bindTo(contextKeyService);\n\t\tthis._hasDocumentFormattingProvider = EditorContextKeys.hasDocumentFormattingProvider.bindTo(contextKeyService);\n\t\tthis._hasDocumentSelectionFormattingProvider = EditorContextKeys.hasDocumentSelectionFormattingProvider.bindTo(contextKeyService);\n\t\tthis._hasSignatureHelpProvider = EditorContextKeys.hasSignatureHelpProvider.bindTo(contextKeyService);\n\t\tthis._isInWalkThrough = EditorContextKeys.isInEmbeddedEditor.bindTo(contextKeyService);\n\n\t\tconst update = () => this._update();\n\n\t\t// update when model/mode changes\n\t\tthis._register(editor.onDidChangeModel(update));\n\t\tthis._register(editor.onDidChangeModelLanguage(update));\n\n\t\t// update when registries change\n\t\tthis._register(modes.SuggestRegistry.onDidChange(update));\n\t\tthis._register(modes.CodeActionProviderRegistry.onDidChange(update));\n\t\tthis._register(modes.CodeLensProviderRegistry.onDidChange(update));\n\t\tthis._register(modes.DefinitionProviderRegistry.onDidChange(update));\n\t\tthis._register(modes.ImplementationProviderRegistry.onDidChange(update));\n\t\tthis._register(modes.TypeDefinitionProviderRegistry.onDidChange(update));\n\t\tthis._register(modes.HoverProviderRegistry.onDidChange(update));\n\t\tthis._register(modes.DocumentHighlightProviderRegistry.onDidChange(update));\n\t\tthis._register(modes.DocumentSymbolProviderRegistry.onDidChange(update));\n\t\tthis._register(modes.ReferenceProviderRegistry.onDidChange(update));\n\t\tthis._register(modes.RenameProviderRegistry.onDidChange(update));\n\t\tthis._register(modes.DocumentFormattingEditProviderRegistry.onDidChange(update));\n\t\tthis._register(modes.DocumentRangeFormattingEditProviderRegistry.onDidChange(update));\n\t\tthis._register(modes.SignatureHelpProviderRegistry.onDidChange(update));\n\n\t\tupdate();\n\t}\n\n\tdispose() {\n\t\tsuper.dispose();\n\t}\n\n\treset() {\n\t\tthis._langId.reset();\n\t\tthis._hasCompletionItemProvider.reset();\n\t\tthis._hasCodeActionsProvider.reset();\n\t\tthis._hasCodeLensProvider.reset();\n\t\tthis._hasDefinitionProvider.reset();\n\t\tthis._hasImplementationProvider.reset();\n\t\tthis._hasTypeDefinitionProvider.reset();\n\t\tthis._hasHoverProvider.reset();\n\t\tthis._hasDocumentHighlightProvider.reset();\n\t\tthis._hasDocumentSymbolProvider.reset();\n\t\tthis._hasReferenceProvider.reset();\n\t\tthis._hasRenameProvider.reset();\n\t\tthis._hasDocumentFormattingProvider.reset();\n\t\tthis._hasDocumentSelectionFormattingProvider.reset();\n\t\tthis._hasSignatureHelpProvider.reset();\n\t\tthis._isInWalkThrough.reset();\n\t}\n\n\tprivate _update() {\n\t\tconst model = this._editor.getModel();\n\t\tif (!model) {\n\t\t\tthis.reset();\n\t\t\treturn;\n\t\t}\n\t\tthis._langId.set(model.getLanguageIdentifier().language);\n\t\tthis._hasCompletionItemProvider.set(modes.SuggestRegistry.has(model));\n\t\tthis._hasCodeActionsProvider.set(modes.CodeActionProviderRegistry.has(model));\n\t\tthis._hasCodeLensProvider.set(modes.CodeLensProviderRegistry.has(model));\n\t\tthis._hasDefinitionProvider.set(modes.DefinitionProviderRegistry.has(model));\n\t\tthis._hasImplementationProvider.set(modes.ImplementationProviderRegistry.has(model));\n\t\tthis._hasTypeDefinitionProvider.set(modes.TypeDefinitionProviderRegistry.has(model));\n\t\tthis._hasHoverProvider.set(modes.HoverProviderRegistry.has(model));\n\t\tthis._hasDocumentHighlightProvider.set(modes.DocumentHighlightProviderRegistry.has(model));\n\t\tthis._hasDocumentSymbolProvider.set(modes.DocumentSymbolProviderRegistry.has(model));\n\t\tthis._hasReferenceProvider.set(modes.ReferenceProviderRegistry.has(model));\n\t\tthis._hasRenameProvider.set(modes.RenameProviderRegistry.has(model));\n\t\tthis._hasSignatureHelpProvider.set(modes.SignatureHelpProviderRegistry.has(model));\n\t\tthis._hasDocumentFormattingProvider.set(modes.DocumentFormattingEditProviderRegistry.has(model) || modes.DocumentRangeFormattingEditProviderRegistry.has(model));\n\t\tthis._hasDocumentSelectionFormattingProvider.set(modes.DocumentRangeFormattingEditProviderRegistry.has(model));\n\t\tthis._isInWalkThrough.set(model.uri.scheme === Schemas.walkThroughSnippet);\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { ContextKeyExpr, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';\nimport { MenuId, MenuRegistry, MenuItemAction, IMenu, IMenuItem, IMenuActionOptions } from 'vs/platform/actions/common/actions';\nimport { ICommandService } from 'vs/platform/commands/common/commands';\n\ntype MenuItemGroup = [string, IMenuItem[]];\n\nexport class Menu implements IMenu {\n\n\tprivate _menuGroups: MenuItemGroup[] = [];\n\tprivate _disposables: IDisposable[] = [];\n\tprivate _onDidChange = new Emitter();\n\n\tconstructor(\n\t\tprivate id: MenuId,\n\t\tstartupSignal: TPromise,\n\t\t@ICommandService private _commandService: ICommandService,\n\t\t@IContextKeyService private _contextKeyService: IContextKeyService\n\t) {\n\t\tstartupSignal.then(_ => {\n\t\t\tconst menuItems = MenuRegistry.getMenuItems(id);\n\t\t\tconst keysFilter = new Set();\n\n\t\t\tlet group: MenuItemGroup;\n\t\t\tmenuItems.sort(Menu._compareMenuItems);\n\n\t\t\tfor (let item of menuItems) {\n\t\t\t\t// group by groupId\n\t\t\t\tconst groupName = item.group;\n\t\t\t\tif (!group || group[0] !== groupName) {\n\t\t\t\t\tgroup = [groupName, []];\n\t\t\t\t\tthis._menuGroups.push(group);\n\t\t\t\t}\n\t\t\t\tgroup[1].push(item);\n\n\t\t\t\t// keep keys for eventing\n\t\t\t\tMenu._fillInKbExprKeys(item.when, keysFilter);\n\t\t\t}\n\n\t\t\t// subscribe to context changes\n\t\t\tthis._disposables.push(this._contextKeyService.onDidChangeContext(keys => {\n\t\t\t\tfor (let k of keys) {\n\t\t\t\t\tif (keysFilter.has(k)) {\n\t\t\t\t\t\tthis._onDidChange.fire();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\tthis._onDidChange.fire(this);\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis._disposables = dispose(this._disposables);\n\t\tthis._onDidChange.dispose();\n\t}\n\n\tget onDidChange(): Event {\n\t\treturn this._onDidChange.event;\n\t}\n\n\tgetActions(options: IMenuActionOptions): [string, MenuItemAction[]][] {\n\t\tconst result: [string, MenuItemAction[]][] = [];\n\t\tfor (let group of this._menuGroups) {\n\t\t\tconst [id, items] = group;\n\t\t\tconst activeActions: MenuItemAction[] = [];\n\t\t\tfor (const item of items) {\n\t\t\t\tif (this._contextKeyService.contextMatchesRules(item.when)) {\n\t\t\t\t\tconst action = new MenuItemAction(item.command, item.alt, options, this._commandService);\n\t\t\t\t\taction.order = item.order; //TODO@Ben order is menu item property, not an action property\n\t\t\t\t\tactiveActions.push(action);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (activeActions.length > 0) {\n\t\t\t\tresult.push([id, activeActions]);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _fillInKbExprKeys(exp: ContextKeyExpr, set: Set): void {\n\t\tif (exp) {\n\t\t\tfor (let key of exp.keys()) {\n\t\t\t\tset.add(key);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate static _compareMenuItems(a: IMenuItem, b: IMenuItem): number {\n\n\t\tlet aGroup = a.group;\n\t\tlet bGroup = b.group;\n\n\t\tif (aGroup !== bGroup) {\n\n\t\t\t// Falsy groups come last\n\t\t\tif (!aGroup) {\n\t\t\t\treturn 1;\n\t\t\t} else if (!bGroup) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// 'navigation' group comes first\n\t\t\tif (aGroup === 'navigation') {\n\t\t\t\treturn -1;\n\t\t\t} else if (bGroup === 'navigation') {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// lexical sort for groups\n\t\t\tlet value = aGroup.localeCompare(bGroup);\n\t\t\tif (value !== 0) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\n\t\t// sort on priority - default is 0\n\t\tlet aPrio = a.order || 0;\n\t\tlet bPrio = b.order || 0;\n\t\tif (aPrio < bPrio) {\n\t\t\treturn -1;\n\t\t} else if (aPrio > bPrio) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// sort on titles\n\t\tconst aTitle = typeof a.command.title === 'string' ? a.command.title : a.command.title.value;\n\t\tconst bTitle = typeof b.command.title === 'string' ? b.command.title : b.command.title.value;\n\t\treturn aTitle.localeCompare(bTitle);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { IAction, IActionRunner, Action } from 'vs/base/common/actions';\nimport { IActionItem } from 'vs/base/browser/ui/actionbar/actionbar';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { ResolvedKeybinding } from 'vs/base/common/keyCodes';\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\n\nexport const IContextViewService = createDecorator('contextViewService');\n\nexport interface IContextViewService {\n\t_serviceBrand: any;\n\tshowContextView(delegate: IContextViewDelegate): void;\n\thideContextView(data?: any): void;\n\tlayout(): void;\n}\n\nexport interface IContextViewDelegate {\n\tgetAnchor(): HTMLElement | { x: number; y: number; };\n\trender(container: HTMLElement): IDisposable;\n\tcanRelayout?: boolean; // Default: true\n\tonDOMEvent?(e: Event, activeElement: HTMLElement): void;\n\tonHide?(data?: any): void;\n}\n\nexport const IContextMenuService = createDecorator('contextMenuService');\n\nexport interface IContextMenuService {\n\t_serviceBrand: any;\n\tshowContextMenu(delegate: IContextMenuDelegate): void;\n}\n\nexport interface IEvent {\n\tshiftKey?: boolean;\n\tctrlKey?: boolean;\n\taltKey?: boolean;\n\tmetaKey?: boolean;\n}\n\nexport interface IContextMenuDelegate {\n\tgetAnchor(): HTMLElement | { x: number; y: number; };\n\tgetActions(): TPromise<(IAction | ContextSubMenu)[]>;\n\tgetActionItem?(action: IAction): IActionItem;\n\tgetActionsContext?(event?: IEvent): any;\n\tgetKeyBinding?(action: IAction): ResolvedKeybinding;\n\tgetMenuClassName?(): string;\n\tonHide?(didCancel: boolean): void;\n\tactionRunner?: IActionRunner;\n}\n\nexport class ContextSubMenu extends Action {\n\tconstructor(label: string, public entries: (ContextSubMenu | IAction)[]) {\n\t\tsuper('contextsubmenu', label, '', true);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport URI from 'vs/base/common/uri';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\nimport Event from 'vs/base/common/event';\nimport { IDisposable } from 'vs/base/common/lifecycle';\n\nexport const IEditorService = createDecorator('editorService');\n\nexport interface IEditorService {\n\n\t_serviceBrand: any;\n\n\t/**\n\t * Specific overload to open an instance of IResourceInput.\n\t */\n\topenEditor(input: IResourceInput, sideBySide?: boolean): TPromise;\n}\n\nexport interface IEditorModel {\n\n\tonDispose: Event;\n\n\t/**\n\t * Loads the model.\n\t */\n\tload(): TPromise;\n\n\t/**\n\t * Dispose associated resources\n\t */\n\tdispose(): void;\n}\n\nexport interface IBaseResourceInput {\n\n\t/**\n\t * Optional options to use when opening the text input.\n\t */\n\toptions?: ITextEditorOptions;\n\n\t/**\n\t * Label to show for the diff editor\n\t */\n\tlabel?: string;\n\n\t/**\n\t * Description to show for the diff editor\n\t */\n\tdescription?: string;\n}\n\nexport interface IResourceInput extends IBaseResourceInput {\n\n\t/**\n\t * The resource URL of the resource to open.\n\t */\n\tresource: URI;\n\n\t/**\n\t * The encoding of the text input if known.\n\t */\n\tencoding?: string;\n}\n\nexport interface IUntitledResourceInput extends IBaseResourceInput {\n\n\t/**\n\t * Optional resource. If the resource is not provided a new untitled file is created.\n\t */\n\tresource?: URI;\n\n\t/**\n\t * Optional file path. Using the file resource will associate the file to the untitled resource.\n\t */\n\tfilePath?: string;\n\n\t/**\n\t * Optional language of the untitled resource.\n\t */\n\tlanguage?: string;\n\n\t/**\n\t * Optional contents of the untitled resource.\n\t */\n\tcontents?: string;\n\n\t/**\n\t * Optional encoding of the untitled resource.\n\t */\n\tencoding?: string;\n}\n\nexport interface IResourceDiffInput extends IBaseResourceInput {\n\n\t/**\n\t * The left hand side URI to open inside a diff editor.\n\t */\n\tleftResource: URI;\n\n\t/**\n\t * The right hand side URI to open inside a diff editor.\n\t */\n\trightResource: URI;\n}\n\nexport interface IResourceSideBySideInput extends IBaseResourceInput {\n\n\t/**\n\t * The right hand side URI to open inside a side by side editor.\n\t */\n\tmasterResource: URI;\n\n\t/**\n\t * The left hand side URI to open inside a side by side editor.\n\t */\n\tdetailResource: URI;\n}\n\nexport interface IEditorControl {\n\n}\n\nexport interface IEditor {\n\n\t/**\n\t * The assigned input of this editor.\n\t */\n\tinput: IEditorInput;\n\n\t/**\n\t * The assigned options of this editor.\n\t */\n\toptions: IEditorOptions;\n\n\t/**\n\t * The assigned position of this editor.\n\t */\n\tposition: Position;\n\n\t/**\n\t * Returns the unique identifier of this editor.\n\t */\n\tgetId(): string;\n\n\t/**\n\t * Returns the underlying control of this editor.\n\t */\n\tgetControl(): IEditorControl;\n\n\t/**\n\t * Asks the underlying control to focus.\n\t */\n\tfocus(): void;\n\n\t/**\n\t * Finds out if this editor is visible or not.\n\t */\n\tisVisible(): boolean;\n}\n\n/**\n * Possible locations for opening an editor.\n */\nexport enum Position {\n\n\t/** Opens the editor in the first position replacing the input currently showing */\n\tONE = 0,\n\n\t/** Opens the editor in the second position replacing the input currently showing */\n\tTWO = 1,\n\n\t/** Opens the editor in the third most position replacing the input currently showing */\n\tTHREE = 2\n}\n\nexport const POSITIONS = [Position.ONE, Position.TWO, Position.THREE];\n\nexport enum Direction {\n\tLEFT,\n\tRIGHT\n}\n\nexport enum Verbosity {\n\tSHORT,\n\tMEDIUM,\n\tLONG\n}\n\nexport interface IEditorInput extends IDisposable {\n\n\tonDispose: Event;\n\n\t/**\n\t * Returns the display name of this input.\n\t */\n\tgetName(): string;\n\n\t/**\n\t * Returns the display description of this input.\n\t */\n\tgetDescription(verbose?: boolean): string;\n\n\t/**\n\t * Returns the display title of this input.\n\t */\n\tgetTitle(verbosity?: Verbosity): string;\n\n\t/**\n\t * Resolves the input.\n\t */\n\tresolve(): TPromise;\n\n\t/**\n\t * Returns if this input is dirty or not.\n\t */\n\tisDirty(): boolean;\n\n\t/**\n\t * Reverts this input.\n\t */\n\trevert(): TPromise;\n\n\t/**\n\t * Returns if the other object matches this input.\n\t */\n\tmatches(other: any): boolean;\n}\n\nexport interface IEditorOptions {\n\n\t/**\n\t * Tells the editor to not receive keyboard focus when the editor is being opened. By default,\n\t * the editor will receive keyboard focus on open.\n\t */\n\tpreserveFocus?: boolean;\n\n\t/**\n\t * Tells the editor to replace the editor input in the editor even if it is identical to the one\n\t * already showing. By default, the editor will not replace the input if it is identical to the\n\t * one showing.\n\t */\n\tforceOpen?: boolean;\n\n\t/**\n\t * Will reveal the editor if it is already opened and visible in any of the opened editor groups.\n\t */\n\trevealIfVisible?: boolean;\n\n\t/**\n\t * Will reveal the editor if it is already opened (even when not visible) in any of the opened editor groups.\n\t */\n\trevealIfOpened?: boolean;\n\n\t/**\n\t * An editor that is pinned remains in the editor stack even when another editor is being opened.\n\t * An editor that is not pinned will always get replaced by another editor that is not pinned.\n\t */\n\tpinned?: boolean;\n\n\t/**\n\t * The index in the document stack where to insert the editor into when opening.\n\t */\n\tindex?: number;\n\n\t/**\n\t * An active editor that is opened will show its contents directly. Set to true to open an editor\n\t * in the background.\n\t */\n\tinactive?: boolean;\n}\n\nexport interface ITextEditorOptions extends IEditorOptions {\n\n\t/**\n\t * Text editor selection.\n\t */\n\tselection?: {\n\t\tstartLineNumber: number;\n\t\tstartColumn: number;\n\t\tendLineNumber?: number;\n\t\tendColumn?: number;\n\t};\n\n\t/**\n\t * Text editor view state.\n\t */\n\tviewState?: object;\n\n\t/**\n\t * Option to scroll vertically or horizontally as necessary and reveal a range centered vertically only if it lies outside the viewport.\n\t */\n\trevealInCenterIfOutsideViewport?: boolean;\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\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\n\nexport interface ParsedArgs {\n\t[arg: string]: any;\n\t_: string[];\n\thelp?: boolean;\n\tversion?: boolean;\n\twait?: boolean;\n\tdiff?: boolean;\n\tgoto?: boolean;\n\t'new-window'?: boolean;\n\t/**\n\t * Always open a new window, except if opening the first window or opening a file or folder as part of the launch.\n\t */\n\t'unity-launch'?: boolean;\n\t'reuse-window'?: boolean;\n\tlocale?: string;\n\t'user-data-dir'?: string;\n\tperformance?: boolean;\n\t'prof-startup'?: string;\n\tverbose?: boolean;\n\tlogExtensionHostCommunication?: boolean;\n\t'disable-extensions'?: boolean;\n\t'extensions-dir'?: string;\n\textensionDevelopmentPath?: string;\n\textensionTestsPath?: string;\n\tdebugBrkPluginHost?: string;\n\tdebugPluginHost?: string;\n\t'list-extensions'?: boolean;\n\t'show-versions'?: boolean;\n\t'install-extension'?: string | string[];\n\t'uninstall-extension'?: string | string[];\n\t'enable-proposed-api'?: string | string[];\n\t'open-url'?: string | string[];\n\t'skip-getting-started'?: boolean;\n}\n\nexport const IEnvironmentService = createDecorator('environmentService');\n\nexport interface IEnvironmentService {\n\t_serviceBrand: any;\n\n\targs: ParsedArgs;\n\n\texecPath: string;\n\tappRoot: string;\n\n\tuserHome: string;\n\tuserDataPath: string;\n\n\tappNameLong: string;\n\tappQuality: string;\n\tappSettingsHome: string;\n\tappSettingsPath: string;\n\tappKeybindingsPath: string;\n\n\tbackupHome: string;\n\tbackupWorkspacesPath: string;\n\n\tisExtensionDevelopment: boolean;\n\tdisableExtensions: boolean;\n\textensionsPath: string;\n\textensionDevelopmentPath: string;\n\textensionTestsPath: string;\n\n\tdebugExtensionHost: { port: number; break: boolean; };\n\n\tlogExtensionHostCommunication: boolean;\n\n\tisBuilt: boolean;\n\tverbose: boolean;\n\twait: boolean;\n\tperformance: boolean;\n\tprofileStartup: { prefix: string, dir: string } | undefined;\n\n\tskipGettingStarted: boolean | undefined;\n\n\tmainIPCHandle: string;\n\tsharedIPCHandle: string;\n\n\tnodeCachedDataDir: string;\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'use strict';\n\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport paths = require('vs/base/common/paths');\nimport URI from 'vs/base/common/uri';\nimport glob = require('vs/base/common/glob');\nimport events = require('vs/base/common/events');\nimport { isLinux } from 'vs/base/common/platform';\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\nimport Event from 'vs/base/common/event';\nimport { beginsWithIgnoreCase } from 'vs/base/common/strings';\n\nexport const IFileService = createDecorator('fileService');\n\nexport interface IFileService {\n\t_serviceBrand: any;\n\n\t/**\n\t * Allows to listen for file changes. The event will fire for every file within the opened workspace\n\t * (if any) as well as all files that have been watched explicitly using the #watchFileChanges() API.\n\t */\n\tonFileChanges: Event;\n\n\t/**\n\t * An event that is fired upon successful completion of a certain file operation.\n\t */\n\tonAfterOperation: Event;\n\n\t/**\n\t * Resolve the properties of a file identified by the resource.\n\t *\n\t * If the optional parameter \"resolveTo\" is specified in options, the stat service is asked\n\t * to provide a stat object that should contain the full graph of folders up to all of the\n\t * target resources.\n\t *\n\t * If the optional parameter \"resolveSingleChildDescendants\" is specified in options,\n\t * the stat service is asked to automatically resolve child folders that only\n\t * contain a single element.\n\t */\n\tresolveFile(resource: URI, options?: IResolveFileOptions): TPromise;\n\n\t/**\n\t * Same as resolveFile but supports resolving mulitple resources in parallel.\n\t * If one of the resolve targets fails to resolve returns a fake IFileStat instead of making the whole call fail.\n\t */\n\tresolveFiles(toResolve: { resource: URI, options?: IResolveFileOptions }[]): TPromise;\n\n\t/**\n\t *Finds out if a file identified by the resource exists.\n\t */\n\texistsFile(resource: URI): TPromise;\n\n\t/**\n\t * Resolve the contents of a file identified by the resource.\n\t *\n\t * The returned object contains properties of the file and the full value as string.\n\t */\n\tresolveContent(resource: URI, options?: IResolveContentOptions): TPromise;\n\n\t/**\n\t * Resolve the contents of a file identified by the resource.\n\t *\n\t * The returned object contains properties of the file and the value as a readable stream.\n\t */\n\tresolveStreamContent(resource: URI, options?: IResolveContentOptions): TPromise;\n\n\t/**\n\t * Returns the contents of all files by the given array of file resources.\n\t */\n\tresolveContents(resources: URI[]): TPromise;\n\n\t/**\n\t * Updates the content replacing its previous value.\n\t */\n\tupdateContent(resource: URI, value: string, options?: IUpdateContentOptions): TPromise;\n\n\t/**\n\t * Moves the file to a new path identified by the resource.\n\t *\n\t * The optional parameter overwrite can be set to replace an existing file at the location.\n\t */\n\tmoveFile(source: URI, target: URI, overwrite?: boolean): TPromise;\n\n\t/**\n\t * Copies the file to a path identified by the resource.\n\t *\n\t * The optional parameter overwrite can be set to replace an existing file at the location.\n\t */\n\tcopyFile(source: URI, target: URI, overwrite?: boolean): TPromise;\n\n\t/**\n\t * Creates a new file with the given path. The returned promise\n\t * will have the stat model object as a result.\n\t *\n\t * The optional parameter content can be used as value to fill into the new file.\n\t */\n\tcreateFile(resource: URI, content?: string): TPromise;\n\n\t/**\n\t * Creates a new folder with the given path. The returned promise\n\t * will have the stat model object as a result.\n\t */\n\tcreateFolder(resource: URI): TPromise;\n\n\t/**\n\t * Renames the provided file to use the new name. The returned promise\n\t * will have the stat model object as a result.\n\t */\n\trename(resource: URI, newName: string): TPromise;\n\n\t/**\n\t * Creates a new empty file if the given path does not exist and otherwise\n\t * will set the mtime and atime of the file to the current date.\n\t */\n\ttouchFile(resource: URI): TPromise;\n\n\t/**\n\t * Deletes the provided file. The optional useTrash parameter allows to\n\t * move the file to trash.\n\t */\n\tdel(resource: URI, useTrash?: boolean): TPromise;\n\n\t/**\n\t * Imports the file to the parent identified by the resource.\n\t */\n\timportFile(source: URI, targetFolder: URI): TPromise;\n\n\t/**\n\t * Allows to start a watcher that reports file change events on the provided resource.\n\t */\n\twatchFileChanges(resource: URI): void;\n\n\t/**\n\t * Allows to stop a watcher on the provided resource or absolute fs path.\n\t */\n\tunwatchFileChanges(resource: URI): void;\n\tunwatchFileChanges(fsPath: string): void;\n\n\t/**\n\t * Configures the file service with the provided options.\n\t */\n\tupdateOptions(options: object): void;\n\n\t/**\n\t * Returns the preferred encoding to use for a given resource.\n\t */\n\tgetEncoding(resource: URI, preferredEncoding?: string): string;\n\n\t/**\n\t * Frees up any resources occupied by this service.\n\t */\n\tdispose(): void;\n}\n\nexport enum FileOperation {\n\tCREATE,\n\tDELETE,\n\tMOVE,\n\tCOPY,\n\tIMPORT\n}\n\nexport class FileOperationEvent {\n\n\tconstructor(private _resource: URI, private _operation: FileOperation, private _target?: IFileStat) {\n\t}\n\n\tpublic get resource(): URI {\n\t\treturn this._resource;\n\t}\n\n\tpublic get target(): IFileStat {\n\t\treturn this._target;\n\t}\n\n\tpublic get operation(): FileOperation {\n\t\treturn this._operation;\n\t}\n}\n\n/**\n * Possible changes that can occur to a file.\n */\nexport enum FileChangeType {\n\tUPDATED = 0,\n\tADDED = 1,\n\tDELETED = 2\n}\n\n/**\n * Identifies a single change in a file.\n */\nexport interface IFileChange {\n\n\t/**\n\t * The type of change that occurred to the file.\n\t */\n\ttype: FileChangeType;\n\n\t/**\n\t * The unified resource identifier of the file that changed.\n\t */\n\tresource: URI;\n}\n\nexport class FileChangesEvent extends events.Event {\n\tprivate _changes: IFileChange[];\n\n\tconstructor(changes: IFileChange[]) {\n\t\tsuper();\n\n\t\tthis._changes = changes;\n\t}\n\n\tpublic get changes() {\n\t\treturn this._changes;\n\t}\n\n\t/**\n\t * Returns true if this change event contains the provided file with the given change type. In case of\n\t * type DELETED, this method will also return true if a folder got deleted that is the parent of the\n\t * provided file path.\n\t */\n\tpublic contains(resource: URI, type: FileChangeType): boolean {\n\t\tif (!resource) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn this._changes.some(change => {\n\t\t\tif (change.type !== type) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// For deleted also return true when deleted folder is parent of target path\n\t\t\tif (type === FileChangeType.DELETED) {\n\t\t\t\treturn paths.isEqualOrParent(resource.fsPath, change.resource.fsPath, !isLinux /* ignorecase */);\n\t\t\t}\n\n\t\t\treturn paths.isEqual(resource.fsPath, change.resource.fsPath, !isLinux /* ignorecase */);\n\t\t});\n\t}\n\n\t/**\n\t * Returns the changes that describe added files.\n\t */\n\tpublic getAdded(): IFileChange[] {\n\t\treturn this.getOfType(FileChangeType.ADDED);\n\t}\n\n\t/**\n\t * Returns if this event contains added files.\n\t */\n\tpublic gotAdded(): boolean {\n\t\treturn this.hasType(FileChangeType.ADDED);\n\t}\n\n\t/**\n\t * Returns the changes that describe deleted files.\n\t */\n\tpublic getDeleted(): IFileChange[] {\n\t\treturn this.getOfType(FileChangeType.DELETED);\n\t}\n\n\t/**\n\t * Returns if this event contains deleted files.\n\t */\n\tpublic gotDeleted(): boolean {\n\t\treturn this.hasType(FileChangeType.DELETED);\n\t}\n\n\t/**\n\t * Returns the changes that describe updated files.\n\t */\n\tpublic getUpdated(): IFileChange[] {\n\t\treturn this.getOfType(FileChangeType.UPDATED);\n\t}\n\n\t/**\n\t * Returns if this event contains updated files.\n\t */\n\tpublic gotUpdated(): boolean {\n\t\treturn this.hasType(FileChangeType.UPDATED);\n\t}\n\n\tprivate getOfType(type: FileChangeType): IFileChange[] {\n\t\treturn this._changes.filter(change => change.type === type);\n\t}\n\n\tprivate hasType(type: FileChangeType): boolean {\n\t\treturn this._changes.some(change => {\n\t\t\treturn change.type === type;\n\t\t});\n\t}\n}\n\nexport function isParent(path: string, candidate: string, ignoreCase?: boolean): boolean {\n\tif (!path || !candidate || path === candidate) {\n\t\treturn false;\n\t}\n\n\tif (candidate.length > path.length) {\n\t\treturn false;\n\t}\n\n\tif (candidate.charAt(candidate.length - 1) !== paths.nativeSep) {\n\t\tcandidate += paths.nativeSep;\n\t}\n\n\tif (ignoreCase) {\n\t\treturn beginsWithIgnoreCase(path, candidate);\n\t}\n\n\treturn path.indexOf(candidate) === 0;\n}\n\n\n\nexport function indexOf(path: string, candidate: string, ignoreCase?: boolean): number {\n\tif (candidate.length > path.length) {\n\t\treturn -1;\n\t}\n\n\tif (path === candidate) {\n\t\treturn 0;\n\t}\n\n\tif (ignoreCase) {\n\t\tpath = path.toLowerCase();\n\t\tcandidate = candidate.toLowerCase();\n\t}\n\n\treturn path.indexOf(candidate);\n}\n\nexport interface IBaseStat {\n\n\t/**\n\t * The unified resource identifier of this file or folder.\n\t */\n\tresource: URI;\n\n\t/**\n\t * The name which is the last segement\n\t * of the {{path}}.\n\t */\n\tname: string;\n\n\t/**\n\t * The last modifictaion date represented\n\t * as millis from unix epoch.\n\t */\n\tmtime: number;\n\n\t/**\n\t * A unique identifier thet represents the\n\t * current state of the file or directory.\n\t */\n\tetag: string;\n}\n\n/**\n * A file resource with meta information.\n */\nexport interface IFileStat extends IBaseStat {\n\n\t/**\n\t * The resource is a directory. Iff {{true}}\n\t * {{encoding}} has no meaning.\n\t */\n\tisDirectory: boolean;\n\n\t/**\n\t * Return {{true}} when this is a directory\n\t * that is not empty.\n\t */\n\thasChildren: boolean;\n\n\t/**\n\t * The children of the file stat or undefined if none.\n\t */\n\tchildren?: IFileStat[];\n\n\t/**\n\t * The size of the file if known.\n\t */\n\tsize?: number;\n}\n\nexport interface IResolveFileResult {\n\tstat: IFileStat;\n\tsuccess: boolean;\n}\n\n/**\n * Content and meta information of a file.\n */\nexport interface IContent extends IBaseStat {\n\n\t/**\n\t * The content of a text file.\n\t */\n\tvalue: string;\n\n\t/**\n\t * The encoding of the content if known.\n\t */\n\tencoding: string;\n}\n\n/**\n * A Stream emitting strings.\n */\nexport interface IStringStream {\n\ton(event: 'data', callback: (chunk: string) => void): void;\n\ton(event: 'error', callback: (err: any) => void): void;\n\ton(event: 'end', callback: () => void): void;\n\ton(event: string, callback: any): void;\n}\n\n/**\n * Streamable content and meta information of a file.\n */\nexport interface IStreamContent extends IBaseStat {\n\n\t/**\n\t * The streamable content of a text file.\n\t */\n\tvalue: IStringStream;\n\n\t/**\n\t * The encoding of the content if known.\n\t */\n\tencoding: string;\n}\n\nexport interface IResolveContentOptions {\n\n\t/**\n\t * The optional acceptTextOnly parameter allows to fail this request early if the file\n\t * contents are not textual.\n\t */\n\tacceptTextOnly?: boolean;\n\n\t/**\n\t * The optional etag parameter allows to return a 304 (Not Modified) if the etag matches\n\t * with the remote resource. It is the task of the caller to makes sure to handle this\n\t * error case from the promise.\n\t */\n\tetag?: string;\n\n\t/**\n\t * The optional encoding parameter allows to specify the desired encoding when resolving\n\t * the contents of the file.\n\t */\n\tencoding?: string;\n\n\t/**\n\t * The optional guessEncoding parameter allows to guess encoding from content of the file.\n\t */\n\tautoGuessEncoding?: boolean;\n}\n\nexport interface IUpdateContentOptions {\n\n\t/**\n\t * The encoding to use when updating a file.\n\t */\n\tencoding?: string;\n\n\t/**\n\t * If set to true, will enforce the selected encoding and not perform any detection using BOMs.\n\t */\n\toverwriteEncoding?: boolean;\n\n\t/**\n\t * Whether to overwrite a file even if it is readonly.\n\t */\n\toverwriteReadonly?: boolean;\n\n\t/**\n\t * The last known modification time of the file. This can be used to prevent dirty writes.\n\t */\n\tmtime?: number;\n\n\t/**\n\t * The etag of the file. This can be used to prevent dirty writes.\n\t */\n\tetag?: string;\n}\n\nexport interface IResolveFileOptions {\n\tresolveTo?: URI[];\n\tresolveSingleChildDescendants?: boolean;\n}\n\nexport interface IImportResult {\n\tstat: IFileStat;\n\tisNew: boolean;\n}\n\nexport class FileOperationError extends Error {\n\tconstructor(message: string, public fileOperationResult: FileOperationResult) {\n\t\tsuper(message);\n\t}\n}\n\nexport enum FileOperationResult {\n\tFILE_IS_BINARY,\n\tFILE_IS_DIRECTORY,\n\tFILE_NOT_FOUND,\n\tFILE_NOT_MODIFIED_SINCE,\n\tFILE_MODIFIED_SINCE,\n\tFILE_MOVE_CONFLICT,\n\tFILE_READ_ONLY,\n\tFILE_TOO_LARGE,\n\tFILE_INVALID_PATH\n}\n\nexport const MAX_FILE_SIZE = 50 * 1024 * 1024;\n\nexport const AutoSaveConfiguration = {\n\tOFF: 'off',\n\tAFTER_DELAY: 'afterDelay',\n\tON_FOCUS_CHANGE: 'onFocusChange',\n\tON_WINDOW_CHANGE: 'onWindowChange'\n};\n\nexport const HotExitConfiguration = {\n\tOFF: 'off',\n\tON_EXIT: 'onExit',\n\tON_EXIT_AND_WINDOW_CLOSE: 'onExitAndWindowClose'\n};\n\nexport const CONTENT_CHANGE_EVENT_BUFFER_DELAY = 1000;\n\nexport interface IFilesConfiguration {\n\tfiles: {\n\t\tassociations: { [filepattern: string]: string };\n\t\texclude: glob.IExpression;\n\t\twatcherExclude: { [filepattern: string]: boolean };\n\t\tencoding: string;\n\t\tautoGuessEncoding: boolean;\n\t\tdefaultLanguage: string;\n\t\ttrimTrailingWhitespace: boolean;\n\t\tautoSave: string;\n\t\tautoSaveDelay: number;\n\t\teol: string;\n\t\thotExit: string;\n\t\tuseExperimentalFileWatcher: boolean;\n\t};\n}\n\nexport const SUPPORTED_ENCODINGS: { [encoding: string]: { labelLong: string; labelShort: string; order: number; encodeOnly?: boolean; alias?: string } } = {\n\tutf8: {\n\t\tlabelLong: 'UTF-8',\n\t\tlabelShort: 'UTF-8',\n\t\torder: 1,\n\t\talias: 'utf8bom'\n\t},\n\tutf8bom: {\n\t\tlabelLong: 'UTF-8 with BOM',\n\t\tlabelShort: 'UTF-8 with BOM',\n\t\tencodeOnly: true,\n\t\torder: 2,\n\t\talias: 'utf8'\n\t},\n\tutf16le: {\n\t\tlabelLong: 'UTF-16 LE',\n\t\tlabelShort: 'UTF-16 LE',\n\t\torder: 3\n\t},\n\tutf16be: {\n\t\tlabelLong: 'UTF-16 BE',\n\t\tlabelShort: 'UTF-16 BE',\n\t\torder: 4\n\t},\n\twindows1252: {\n\t\tlabelLong: 'Western (Windows 1252)',\n\t\tlabelShort: 'Windows 1252',\n\t\torder: 5\n\t},\n\tiso88591: {\n\t\tlabelLong: 'Western (ISO 8859-1)',\n\t\tlabelShort: 'ISO 8859-1',\n\t\torder: 6\n\t},\n\tiso88593: {\n\t\tlabelLong: 'Western (ISO 8859-3)',\n\t\tlabelShort: 'ISO 8859-3',\n\t\torder: 7\n\t},\n\tiso885915: {\n\t\tlabelLong: 'Western (ISO 8859-15)',\n\t\tlabelShort: 'ISO 8859-15',\n\t\torder: 8\n\t},\n\tmacroman: {\n\t\tlabelLong: 'Western (Mac Roman)',\n\t\tlabelShort: 'Mac Roman',\n\t\torder: 9\n\t},\n\tcp437: {\n\t\tlabelLong: 'DOS (CP 437)',\n\t\tlabelShort: 'CP437',\n\t\torder: 10\n\t},\n\twindows1256: {\n\t\tlabelLong: 'Arabic (Windows 1256)',\n\t\tlabelShort: 'Windows 1256',\n\t\torder: 11\n\t},\n\tiso88596: {\n\t\tlabelLong: 'Arabic (ISO 8859-6)',\n\t\tlabelShort: 'ISO 8859-6',\n\t\torder: 12\n\t},\n\twindows1257: {\n\t\tlabelLong: 'Baltic (Windows 1257)',\n\t\tlabelShort: 'Windows 1257',\n\t\torder: 13\n\t},\n\tiso88594: {\n\t\tlabelLong: 'Baltic (ISO 8859-4)',\n\t\tlabelShort: 'ISO 8859-4',\n\t\torder: 14\n\t},\n\tiso885914: {\n\t\tlabelLong: 'Celtic (ISO 8859-14)',\n\t\tlabelShort: 'ISO 8859-14',\n\t\torder: 15\n\t},\n\twindows1250: {\n\t\tlabelLong: 'Central European (Windows 1250)',\n\t\tlabelShort: 'Windows 1250',\n\t\torder: 16\n\t},\n\tiso88592: {\n\t\tlabelLong: 'Central European (ISO 8859-2)',\n\t\tlabelShort: 'ISO 8859-2',\n\t\torder: 17\n\t},\n\tcp852: {\n\t\tlabelLong: 'Central European (CP 852)',\n\t\tlabelShort: 'CP 852',\n\t\torder: 18\n\t},\n\twindows1251: {\n\t\tlabelLong: 'Cyrillic (Windows 1251)',\n\t\tlabelShort: 'Windows 1251',\n\t\torder: 19\n\t},\n\tcp866: {\n\t\tlabelLong: 'Cyrillic (CP 866)',\n\t\tlabelShort: 'CP 866',\n\t\torder: 20\n\t},\n\tiso88595: {\n\t\tlabelLong: 'Cyrillic (ISO 8859-5)',\n\t\tlabelShort: 'ISO 8859-5',\n\t\torder: 21\n\t},\n\tkoi8r: {\n\t\tlabelLong: 'Cyrillic (KOI8-R)',\n\t\tlabelShort: 'KOI8-R',\n\t\torder: 22\n\t},\n\tkoi8u: {\n\t\tlabelLong: 'Cyrillic (KOI8-U)',\n\t\tlabelShort: 'KOI8-U',\n\t\torder: 23\n\t},\n\tiso885913: {\n\t\tlabelLong: 'Estonian (ISO 8859-13)',\n\t\tlabelShort: 'ISO 8859-13',\n\t\torder: 24\n\t},\n\twindows1253: {\n\t\tlabelLong: 'Greek (Windows 1253)',\n\t\tlabelShort: 'Windows 1253',\n\t\torder: 25\n\t},\n\tiso88597: {\n\t\tlabelLong: 'Greek (ISO 8859-7)',\n\t\tlabelShort: 'ISO 8859-7',\n\t\torder: 26\n\t},\n\twindows1255: {\n\t\tlabelLong: 'Hebrew (Windows 1255)',\n\t\tlabelShort: 'Windows 1255',\n\t\torder: 27\n\t},\n\tiso88598: {\n\t\tlabelLong: 'Hebrew (ISO 8859-8)',\n\t\tlabelShort: 'ISO 8859-8',\n\t\torder: 28\n\t},\n\tiso885910: {\n\t\tlabelLong: 'Nordic (ISO 8859-10)',\n\t\tlabelShort: 'ISO 8859-10',\n\t\torder: 29\n\t},\n\tiso885916: {\n\t\tlabelLong: 'Romanian (ISO 8859-16)',\n\t\tlabelShort: 'ISO 8859-16',\n\t\torder: 30\n\t},\n\twindows1254: {\n\t\tlabelLong: 'Turkish (Windows 1254)',\n\t\tlabelShort: 'Windows 1254',\n\t\torder: 31\n\t},\n\tiso88599: {\n\t\tlabelLong: 'Turkish (ISO 8859-9)',\n\t\tlabelShort: 'ISO 8859-9',\n\t\torder: 32\n\t},\n\twindows1258: {\n\t\tlabelLong: 'Vietnamese (Windows 1258)',\n\t\tlabelShort: 'Windows 1258',\n\t\torder: 33\n\t},\n\tgbk: {\n\t\tlabelLong: 'Chinese (GBK)',\n\t\tlabelShort: 'GBK',\n\t\torder: 34\n\t},\n\tgb18030: {\n\t\tlabelLong: 'Chinese (GB18030)',\n\t\tlabelShort: 'GB18030',\n\t\torder: 35\n\t},\n\tcp950: {\n\t\tlabelLong: 'Traditional Chinese (Big5)',\n\t\tlabelShort: 'Big5',\n\t\torder: 36\n\t},\n\tbig5hkscs: {\n\t\tlabelLong: 'Traditional Chinese (Big5-HKSCS)',\n\t\tlabelShort: 'Big5-HKSCS',\n\t\torder: 37\n\t},\n\tshiftjis: {\n\t\tlabelLong: 'Japanese (Shift JIS)',\n\t\tlabelShort: 'Shift JIS',\n\t\torder: 38\n\t},\n\teucjp: {\n\t\tlabelLong: 'Japanese (EUC-JP)',\n\t\tlabelShort: 'EUC-JP',\n\t\torder: 39\n\t},\n\teuckr: {\n\t\tlabelLong: 'Korean (EUC-KR)',\n\t\tlabelShort: 'EUC-KR',\n\t\torder: 40\n\t},\n\twindows874: {\n\t\tlabelLong: 'Thai (Windows 874)',\n\t\tlabelShort: 'Windows 874',\n\t\torder: 41\n\t},\n\tiso885911: {\n\t\tlabelLong: 'Latin/Thai (ISO 8859-11)',\n\t\tlabelShort: 'ISO 8859-11',\n\t\torder: 42\n\t},\n\tkoi8ru: {\n\t\tlabelLong: 'Cyrillic (KOI8-RU)',\n\t\tlabelShort: 'KOI8-RU',\n\t\torder: 43\n\t},\n\tkoi8t: {\n\t\tlabelLong: 'Tajik (KOI8-T)',\n\t\tlabelShort: 'KOI8-T',\n\t\torder: 44\n\t},\n\tgb2312: {\n\t\tlabelLong: 'Simplified Chinese (GB 2312)',\n\t\tlabelShort: 'GB 2312',\n\t\torder: 45\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation';\nimport { SyncDescriptor } from './descriptors';\n\nexport class ServiceCollection {\n\n\tprivate _entries = new Map, any>();\n\n\tconstructor(...entries: [ServiceIdentifier, any][]) {\n\t\tfor (let [id, service] of entries) {\n\t\t\tthis.set(id, service);\n\t\t}\n\t}\n\n\tset(id: ServiceIdentifier, instanceOrDescriptor: T | SyncDescriptor): T | SyncDescriptor {\n\t\tconst result = this._entries.get(id);\n\t\tthis._entries.set(id, instanceOrDescriptor);\n\t\treturn result;\n\t}\n\n\tforEach(callback: (id: ServiceIdentifier, instanceOrDescriptor: any) => any): void {\n\t\tthis._entries.forEach((value, key) => callback(key, value));\n\t}\n\n\thas(id: ServiceIdentifier): boolean {\n\t\treturn this._entries.has(id);\n\t}\n\n\tget(id: ServiceIdentifier): T | SyncDescriptor {\n\t\treturn this._entries.get(id);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { illegalArgument, illegalState, canceled } from 'vs/base/common/errors';\nimport { create } from 'vs/base/common/types';\nimport * as assert from 'vs/base/common/assert';\nimport { Graph } from 'vs/base/common/graph';\nimport { SyncDescriptor, AsyncDescriptor } from 'vs/platform/instantiation/common/descriptors';\nimport { ServiceIdentifier, IInstantiationService, ServicesAccessor, _util, optional } from 'vs/platform/instantiation/common/instantiation';\nimport { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';\n\n\nexport class InstantiationService implements IInstantiationService {\n\n\t_serviceBrand: any;\n\n\tprivate _services: ServiceCollection;\n\tprivate _strict: boolean;\n\n\tconstructor(services: ServiceCollection = new ServiceCollection(), strict: boolean = false) {\n\t\tthis._services = services;\n\t\tthis._strict = strict;\n\n\t\tthis._services.set(IInstantiationService, this);\n\t}\n\n\tcreateChild(services: ServiceCollection): IInstantiationService {\n\t\tthis._services.forEach((id, thing) => {\n\t\t\tif (services.has(id)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// If we copy descriptors we might end up with\n\t\t\t// multiple instances of the same service\n\t\t\tif (thing instanceof SyncDescriptor) {\n\t\t\t\tthing = this._createAndCacheServiceInstance(id, thing);\n\t\t\t}\n\t\t\tservices.set(id, thing);\n\t\t});\n\t\treturn new InstantiationService(services, this._strict);\n\t}\n\n\tinvokeFunction(signature: (accessor: ServicesAccessor, ...more: any[]) => R, ...args: any[]): R {\n\t\tlet accessor: ServicesAccessor;\n\t\ttry {\n\t\t\taccessor = {\n\t\t\t\tget: (id: ServiceIdentifier, isOptional?: typeof optional) => {\n\t\t\t\t\tconst result = this._getOrCreateServiceInstance(id);\n\t\t\t\t\tif (!result && isOptional !== optional) {\n\t\t\t\t\t\tthrow new Error(`[invokeFunction] unkown service '${id}'`);\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn signature.apply(undefined, [accessor].concat(args));\n\t\t} finally {\n\t\t\taccessor.get = function () {\n\t\t\t\tthrow illegalState('service accessor is only valid during the invocation of its target method');\n\t\t\t};\n\t\t}\n\t}\n\n\tcreateInstance(param: any, ...rest: any[]): any {\n\n\t\tif (param instanceof AsyncDescriptor) {\n\t\t\t// async\n\t\t\treturn this._createInstanceAsync(param, rest);\n\n\t\t} else if (param instanceof SyncDescriptor) {\n\t\t\t// sync\n\t\t\treturn this._createInstance(param, rest);\n\n\t\t} else {\n\t\t\t// sync, just ctor\n\t\t\treturn this._createInstance(new SyncDescriptor(param), rest);\n\t\t}\n\t}\n\n\tprivate _createInstanceAsync(descriptor: AsyncDescriptor, args: any[]): TPromise {\n\n\t\tlet canceledError: Error;\n\n\t\treturn new TPromise((c, e, p) => {\n\t\t\trequire([descriptor.moduleName], (_module?: any) => {\n\t\t\t\tif (canceledError) {\n\t\t\t\t\te(canceledError);\n\t\t\t\t}\n\n\t\t\t\tif (!_module) {\n\t\t\t\t\treturn e(illegalArgument('module not found: ' + descriptor.moduleName));\n\t\t\t\t}\n\n\t\t\t\tlet ctor: Function;\n\t\t\t\tif (!descriptor.ctorName) {\n\t\t\t\t\tctor = _module;\n\t\t\t\t} else {\n\t\t\t\t\tctor = _module[descriptor.ctorName];\n\t\t\t\t}\n\n\t\t\t\tif (typeof ctor !== 'function') {\n\t\t\t\t\treturn e(illegalArgument('not a function: ' + descriptor.ctorName || descriptor.moduleName));\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\targs.unshift.apply(args, descriptor.staticArguments()); // instead of spread in ctor call\n\t\t\t\t\tc(this._createInstance(new SyncDescriptor(ctor), args));\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn e(error);\n\t\t\t\t}\n\t\t\t}, e);\n\t\t}, () => {\n\t\t\tcanceledError = canceled();\n\t\t});\n\t}\n\n\tprivate _createInstance(desc: SyncDescriptor, args: any[]): T {\n\n\t\t// arguments given by createInstance-call and/or the descriptor\n\t\tlet staticArgs = desc.staticArguments().concat(args);\n\n\t\t// arguments defined by service decorators\n\t\tlet serviceDependencies = _util.getServiceDependencies(desc.ctor).sort((a, b) => a.index - b.index);\n\t\tlet serviceArgs: any[] = [];\n\t\tfor (const dependency of serviceDependencies) {\n\t\t\tlet service = this._getOrCreateServiceInstance(dependency.id);\n\t\t\tif (!service && this._strict && !dependency.optional) {\n\t\t\t\tthrow new Error(`[createInstance] ${desc.ctor.name} depends on UNKNOWN service ${dependency.id}.`);\n\t\t\t}\n\t\t\tserviceArgs.push(service);\n\t\t}\n\n\t\tlet firstServiceArgPos = serviceDependencies.length > 0 ? serviceDependencies[0].index : staticArgs.length;\n\n\t\t// check for argument mismatches, adjust static args if needed\n\t\tif (staticArgs.length !== firstServiceArgPos) {\n\t\t\tconsole.warn(`[createInstance] First service dependency of ${desc.ctor.name} at position ${\n\t\t\t\tfirstServiceArgPos + 1} conflicts with ${staticArgs.length} static arguments`);\n\n\t\t\tlet delta = firstServiceArgPos - staticArgs.length;\n\t\t\tif (delta > 0) {\n\t\t\t\tstaticArgs = staticArgs.concat(new Array(delta));\n\t\t\t} else {\n\t\t\t\tstaticArgs = staticArgs.slice(0, firstServiceArgPos);\n\t\t\t}\n\t\t}\n\n\t\t// // check for missing args\n\t\t// for (let i = 0; i < serviceArgs.length; i++) {\n\t\t// \tif (!serviceArgs[i]) {\n\t\t// \t\tconsole.warn(`${desc.ctor.name} MISSES service dependency ${serviceDependencies[i].id}`, new Error().stack);\n\t\t// \t}\n\t\t// }\n\n\t\t// now create the instance\n\t\tconst argArray = [desc.ctor];\n\t\targArray.push(...staticArgs);\n\t\targArray.push(...serviceArgs);\n\n\t\tconst instance = create.apply(null, argArray);\n\t\tdesc._validate(instance);\n\t\treturn instance;\n\t}\n\n\tprivate _getOrCreateServiceInstance(id: ServiceIdentifier): T {\n\t\tlet thing = this._services.get(id);\n\t\tif (thing instanceof SyncDescriptor) {\n\t\t\treturn this._createAndCacheServiceInstance(id, thing);\n\t\t} else {\n\t\t\treturn thing;\n\t\t}\n\t}\n\n\tprivate _createAndCacheServiceInstance(id: ServiceIdentifier, desc: SyncDescriptor): T {\n\t\tassert.ok(this._services.get(id) instanceof SyncDescriptor);\n\n\t\tconst graph = new Graph<{ id: ServiceIdentifier, desc: SyncDescriptor }>(data => data.id.toString());\n\n\t\tfunction throwCycleError() {\n\t\t\tconst err = new Error('[createInstance] cyclic dependency between services');\n\t\t\terr.message = graph.toString();\n\t\t\tthrow err;\n\t\t}\n\n\t\tlet count = 0;\n\t\tconst stack = [{ id, desc }];\n\t\twhile (stack.length) {\n\t\t\tconst item = stack.pop();\n\t\t\tgraph.lookupOrInsertNode(item);\n\n\t\t\t// TODO@joh use the graph to find a cycle\n\t\t\t// a weak heuristic for cycle checks\n\t\t\tif (count++ > 100) {\n\t\t\t\tthrowCycleError();\n\t\t\t}\n\n\t\t\t// check all dependencies for existence and if the need to be created first\n\t\t\tlet dependencies = _util.getServiceDependencies(item.desc.ctor);\n\t\t\tfor (let dependency of dependencies) {\n\n\t\t\t\tlet instanceOrDesc = this._services.get(dependency.id);\n\t\t\t\tif (!instanceOrDesc) {\n\t\t\t\t\tconsole.warn(`[createInstance] ${id} depends on ${dependency.id} which is NOT registered.`);\n\t\t\t\t}\n\n\t\t\t\tif (instanceOrDesc instanceof SyncDescriptor) {\n\t\t\t\t\tconst d = { id: dependency.id, desc: instanceOrDesc };\n\t\t\t\t\tgraph.insertEdge(item, d);\n\t\t\t\t\tstack.push(d);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twhile (true) {\n\t\t\tlet roots = graph.roots();\n\n\t\t\t// if there is no more roots but still\n\t\t\t// nodes in the graph we have a cycle\n\t\t\tif (roots.length === 0) {\n\t\t\t\tif (graph.length !== 0) {\n\t\t\t\t\tthrowCycleError();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tfor (let root of roots) {\n\t\t\t\t// create instance and overwrite the service collections\n\t\t\t\tconst instance = this._createInstance(root.data.desc, []);\n\t\t\t\tthis._services.set(root.data.id, instance);\n\t\t\t\tgraph.removeNode(root.data);\n\t\t\t}\n\t\t}\n\n\t\treturn this._services.get(id);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport { ResolvedKeybinding, Keybinding } from 'vs/base/common/keyCodes';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport Severity from 'vs/base/common/severity';\nimport { ICommandService } from 'vs/platform/commands/common/commands';\nimport { KeybindingResolver, IResolveResult } from 'vs/platform/keybinding/common/keybindingResolver';\nimport { IKeybindingEvent, IKeybindingService, IKeyboardEvent } from 'vs/platform/keybinding/common/keybinding';\nimport { IContextKeyService, IContextKeyServiceTarget } from 'vs/platform/contextkey/common/contextkey';\nimport { IStatusbarService } from 'vs/platform/statusbar/common/statusbar';\nimport { IMessageService } from 'vs/platform/message/common/message';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { ResolvedKeybindingItem } from 'vs/platform/keybinding/common/resolvedKeybindingItem';\n\ninterface CurrentChord {\n\tkeypress: string;\n\tlabel: string;\n}\n\nexport abstract class AbstractKeybindingService implements IKeybindingService {\n\tpublic _serviceBrand: any;\n\n\tprotected toDispose: IDisposable[] = [];\n\n\tprivate _currentChord: CurrentChord;\n\tprivate _currentChordStatusMessage: IDisposable;\n\tprotected _onDidUpdateKeybindings: Emitter;\n\n\tprivate _contextKeyService: IContextKeyService;\n\tprotected _commandService: ICommandService;\n\tprivate _statusService: IStatusbarService;\n\tprivate _messageService: IMessageService;\n\n\tconstructor(\n\t\tcontextKeyService: IContextKeyService,\n\t\tcommandService: ICommandService,\n\t\tmessageService: IMessageService,\n\t\tstatusService?: IStatusbarService\n\t) {\n\t\tthis._contextKeyService = contextKeyService;\n\t\tthis._commandService = commandService;\n\t\tthis._statusService = statusService;\n\t\tthis._messageService = messageService;\n\n\t\tthis._currentChord = null;\n\t\tthis._currentChordStatusMessage = null;\n\t\tthis._onDidUpdateKeybindings = new Emitter();\n\t\tthis.toDispose.push(this._onDidUpdateKeybindings);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.toDispose = dispose(this.toDispose);\n\t}\n\n\tget onDidUpdateKeybindings(): Event {\n\t\treturn this._onDidUpdateKeybindings ? this._onDidUpdateKeybindings.event : Event.None; // Sinon stubbing walks properties on prototype\n\t}\n\n\tprotected abstract _getResolver(): KeybindingResolver;\n\tpublic abstract resolveKeybinding(keybinding: Keybinding): ResolvedKeybinding[];\n\tpublic abstract resolveKeyboardEvent(keyboardEvent: IKeyboardEvent): ResolvedKeybinding;\n\tpublic abstract resolveUserBinding(userBinding: string): ResolvedKeybinding[];\n\n\tpublic getDefaultKeybindingsContent(): string {\n\t\treturn '';\n\t}\n\n\tpublic getDefaultKeybindings(): ResolvedKeybindingItem[] {\n\t\treturn this._getResolver().getDefaultKeybindings();\n\t}\n\n\tpublic getKeybindings(): ResolvedKeybindingItem[] {\n\t\treturn this._getResolver().getKeybindings();\n\t}\n\n\tpublic customKeybindingsCount(): number {\n\t\treturn 0;\n\t}\n\n\tpublic lookupKeybindings(commandId: string): ResolvedKeybinding[] {\n\t\treturn this._getResolver().lookupKeybindings(commandId).map(item => item.resolvedKeybinding);\n\t}\n\n\tpublic lookupKeybinding(commandId: string): ResolvedKeybinding {\n\t\tlet result = this._getResolver().lookupPrimaryKeybinding(commandId);\n\t\tif (!result) {\n\t\t\treturn null;\n\t\t}\n\t\treturn result.resolvedKeybinding;\n\t}\n\n\tpublic softDispatch(e: IKeyboardEvent, target: IContextKeyServiceTarget): IResolveResult {\n\t\tconst keybinding = this.resolveKeyboardEvent(e);\n\t\tif (keybinding.isChord()) {\n\t\t\tconsole.warn('Unexpected keyboard event mapped to a chord');\n\t\t\treturn null;\n\t\t}\n\t\tconst [firstPart,] = keybinding.getDispatchParts();\n\t\tif (firstPart === null) {\n\t\t\t// cannot be dispatched, probably only modifier keys\n\t\t\treturn null;\n\t\t}\n\n\t\tconst contextValue = this._contextKeyService.getContext(target);\n\t\tconst currentChord = this._currentChord ? this._currentChord.keypress : null;\n\t\treturn this._getResolver().resolve(contextValue, currentChord, firstPart);\n\t}\n\n\tprotected _dispatch(e: IKeyboardEvent, target: IContextKeyServiceTarget): boolean {\n\t\tlet shouldPreventDefault = false;\n\n\t\tconst keybinding = this.resolveKeyboardEvent(e);\n\t\tif (keybinding.isChord()) {\n\t\t\tconsole.warn('Unexpected keyboard event mapped to a chord');\n\t\t\treturn null;\n\t\t}\n\t\tconst [firstPart,] = keybinding.getDispatchParts();\n\t\tif (firstPart === null) {\n\t\t\t// cannot be dispatched, probably only modifier keys\n\t\t\treturn shouldPreventDefault;\n\t\t}\n\n\t\tconst contextValue = this._contextKeyService.getContext(target);\n\t\tconst currentChord = this._currentChord ? this._currentChord.keypress : null;\n\t\tconst keypressLabel = keybinding.getLabel();\n\t\tconst resolveResult = this._getResolver().resolve(contextValue, currentChord, firstPart);\n\n\t\tif (resolveResult && resolveResult.enterChord) {\n\t\t\tshouldPreventDefault = true;\n\t\t\tthis._currentChord = {\n\t\t\t\tkeypress: firstPart,\n\t\t\t\tlabel: keypressLabel\n\t\t\t};\n\t\t\tif (this._statusService) {\n\t\t\t\tthis._currentChordStatusMessage = this._statusService.setStatusMessage(nls.localize('first.chord', \"({0}) was pressed. Waiting for second key of chord...\", keypressLabel));\n\t\t\t}\n\t\t\treturn shouldPreventDefault;\n\t\t}\n\n\t\tif (this._statusService && this._currentChord) {\n\t\t\tif (!resolveResult || !resolveResult.commandId) {\n\t\t\t\tthis._statusService.setStatusMessage(nls.localize('missing.chord', \"The key combination ({0}, {1}) is not a command.\", this._currentChord.label, keypressLabel), 10 * 1000 /* 10s */);\n\t\t\t\tshouldPreventDefault = true;\n\t\t\t}\n\t\t}\n\t\tif (this._currentChordStatusMessage) {\n\t\t\tthis._currentChordStatusMessage.dispose();\n\t\t\tthis._currentChordStatusMessage = null;\n\t\t}\n\t\tthis._currentChord = null;\n\n\t\tif (resolveResult && resolveResult.commandId) {\n\t\t\tif (!resolveResult.bubble) {\n\t\t\t\tshouldPreventDefault = true;\n\t\t\t}\n\t\t\tthis._commandService.executeCommand(resolveResult.commandId, resolveResult.commandArgs || {}).done(undefined, err => {\n\t\t\t\tthis._messageService.show(Severity.Warning, err);\n\t\t\t});\n\t\t}\n\n\t\treturn shouldPreventDefault;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { ResolvedKeybinding, Keybinding, KeyCode } from 'vs/base/common/keyCodes';\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\nimport { IContextKeyServiceTarget } from 'vs/platform/contextkey/common/contextkey';\nimport { IResolveResult } from 'vs/platform/keybinding/common/keybindingResolver';\nimport { ResolvedKeybindingItem } from 'vs/platform/keybinding/common/resolvedKeybindingItem';\nimport Event from 'vs/base/common/event';\n\nexport interface IUserFriendlyKeybinding {\n\tkey: string;\n\tcommand: string;\n\targs?: any;\n\twhen?: string;\n}\n\nexport enum KeybindingSource {\n\tDefault = 1,\n\tUser\n}\n\nexport interface IKeybindingEvent {\n\tsource: KeybindingSource;\n\tkeybindings?: IUserFriendlyKeybinding[];\n}\n\nexport interface IKeyboardEvent {\n\treadonly ctrlKey: boolean;\n\treadonly shiftKey: boolean;\n\treadonly altKey: boolean;\n\treadonly metaKey: boolean;\n\treadonly keyCode: KeyCode;\n\treadonly code: string;\n}\n\nexport let IKeybindingService = createDecorator('keybindingService');\n\nexport interface IKeybindingService {\n\t_serviceBrand: any;\n\n\tonDidUpdateKeybindings: Event;\n\n\t/**\n\t * Returns none, one or many (depending on keyboard layout)!\n\t */\n\tresolveKeybinding(keybinding: Keybinding): ResolvedKeybinding[];\n\n\tresolveKeyboardEvent(keyboardEvent: IKeyboardEvent): ResolvedKeybinding;\n\n\tresolveUserBinding(userBinding: string): ResolvedKeybinding[];\n\n\t/**\n\t * Resolve and dispatch `keyboardEvent`, but do not invoke the command or change inner state.\n\t */\n\tsoftDispatch(keyboardEvent: IKeyboardEvent, target: IContextKeyServiceTarget): IResolveResult;\n\n\t/**\n\t * Look up keybindings for a command.\n\t * Use `lookupKeybinding` if you are interested in the preferred keybinding.\n\t */\n\tlookupKeybindings(commandId: string): ResolvedKeybinding[];\n\n\t/**\n\t * Look up the preferred (last defined) keybinding for a command.\n\t * @returns The preferred keybinding or null if the command is not bound.\n\t */\n\tlookupKeybinding(commandId: string): ResolvedKeybinding;\n\n\tgetDefaultKeybindingsContent(): string;\n\n\tgetDefaultKeybindings(): ResolvedKeybindingItem[];\n\n\tgetKeybindings(): ResolvedKeybindingItem[];\n\n\tcustomKeybindingsCount(): 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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { isFalsyOrEmpty } from 'vs/base/common/arrays';\nimport { ContextKeyExpr, IContext } from 'vs/platform/contextkey/common/contextkey';\nimport { ResolvedKeybindingItem } from 'vs/platform/keybinding/common/resolvedKeybindingItem';\nimport { CommandsRegistry, ICommandHandlerDescription } from 'vs/platform/commands/common/commands';\n\nexport interface IResolveResult {\n\tenterChord: boolean;\n\tcommandId: string;\n\tcommandArgs: any;\n\tbubble: boolean;\n}\n\nexport class KeybindingResolver {\n\tprivate readonly _defaultKeybindings: ResolvedKeybindingItem[];\n\tprivate readonly _keybindings: ResolvedKeybindingItem[];\n\tprivate readonly _defaultBoundCommands: Map;\n\tprivate readonly _map: Map;\n\tprivate readonly _lookupMap: Map;\n\n\tconstructor(defaultKeybindings: ResolvedKeybindingItem[], overrides: ResolvedKeybindingItem[]) {\n\t\tthis._defaultKeybindings = defaultKeybindings;\n\n\t\tthis._defaultBoundCommands = new Map();\n\t\tfor (let i = 0, len = defaultKeybindings.length; i < len; i++) {\n\t\t\tconst command = defaultKeybindings[i].command;\n\t\t\tthis._defaultBoundCommands.set(command, true);\n\t\t}\n\n\t\tthis._map = new Map();\n\t\tthis._lookupMap = new Map();\n\n\t\tthis._keybindings = KeybindingResolver.combine(defaultKeybindings, overrides);\n\t\tfor (let i = 0, len = this._keybindings.length; i < len; i++) {\n\t\t\tlet k = this._keybindings[i];\n\t\t\tif (k.keypressFirstPart === null) {\n\t\t\t\t// unbound\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis._addKeyPress(k.keypressFirstPart, k);\n\t\t}\n\t}\n\n\tprivate static _isTargetedForRemoval(defaultKb: ResolvedKeybindingItem, keypressFirstPart: string, keypressChordPart: string, command: string, when: ContextKeyExpr): boolean {\n\t\tif (defaultKb.command !== command) {\n\t\t\treturn false;\n\t\t}\n\t\tif (keypressFirstPart && defaultKb.keypressFirstPart !== keypressFirstPart) {\n\t\t\treturn false;\n\t\t}\n\t\tif (keypressChordPart && defaultKb.keypressChordPart !== keypressChordPart) {\n\t\t\treturn false;\n\t\t}\n\t\tif (when) {\n\t\t\tif (!defaultKb.when) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (!when.equals(defaultKb.when)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Looks for rules containing -command in `overrides` and removes them directly from `defaults`.\n\t */\n\tpublic static combine(defaults: ResolvedKeybindingItem[], rawOverrides: ResolvedKeybindingItem[]): ResolvedKeybindingItem[] {\n\t\tdefaults = defaults.slice(0);\n\t\tlet overrides: ResolvedKeybindingItem[] = [];\n\t\tfor (let i = 0, len = rawOverrides.length; i < len; i++) {\n\t\t\tconst override = rawOverrides[i];\n\t\t\tif (!override.command || override.command.length === 0 || override.command.charAt(0) !== '-') {\n\t\t\t\toverrides.push(override);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst command = override.command.substr(1);\n\t\t\tconst keypressFirstPart = override.keypressFirstPart;\n\t\t\tconst keypressChordPart = override.keypressChordPart;\n\t\t\tconst when = override.when;\n\t\t\tfor (let j = defaults.length - 1; j >= 0; j--) {\n\t\t\t\tif (this._isTargetedForRemoval(defaults[j], keypressFirstPart, keypressChordPart, command, when)) {\n\t\t\t\t\tdefaults.splice(j, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn defaults.concat(overrides);\n\t}\n\n\tprivate _addKeyPress(keypress: string, item: ResolvedKeybindingItem): void {\n\n\t\tconst conflicts = this._map.get(keypress);\n\n\t\tif (typeof conflicts === 'undefined') {\n\t\t\t// There is no conflict so far\n\t\t\tthis._map.set(keypress, [item]);\n\t\t\tthis._addToLookupMap(item);\n\t\t\treturn;\n\t\t}\n\n\t\tfor (let i = conflicts.length - 1; i >= 0; i--) {\n\t\t\tlet conflict = conflicts[i];\n\n\t\t\tif (conflict.command === item.command) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst conflictIsChord = (conflict.keypressChordPart !== null);\n\t\t\tconst itemIsChord = (item.keypressChordPart !== null);\n\n\t\t\tif (conflictIsChord && itemIsChord && conflict.keypressChordPart !== item.keypressChordPart) {\n\t\t\t\t// The conflict only shares the chord start with this command\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (KeybindingResolver.whenIsEntirelyIncluded(true, conflict.when, item.when)) {\n\t\t\t\t// `item` completely overwrites `conflict`\n\t\t\t\t// Remove conflict from the lookupMap\n\t\t\t\tthis._removeFromLookupMap(conflict);\n\t\t\t}\n\t\t}\n\n\t\tconflicts.push(item);\n\t\tthis._addToLookupMap(item);\n\t}\n\n\tprivate _addToLookupMap(item: ResolvedKeybindingItem): void {\n\t\tif (!item.command) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet arr = this._lookupMap.get(item.command);\n\t\tif (typeof arr === 'undefined') {\n\t\t\tarr = [item];\n\t\t\tthis._lookupMap.set(item.command, arr);\n\t\t} else {\n\t\t\tarr.push(item);\n\t\t}\n\t}\n\n\tprivate _removeFromLookupMap(item: ResolvedKeybindingItem): void {\n\t\tlet arr = this._lookupMap.get(item.command);\n\t\tif (typeof arr === 'undefined') {\n\t\t\treturn;\n\t\t}\n\t\tfor (let i = 0, len = arr.length; i < len; i++) {\n\t\t\tif (arr[i] === item) {\n\t\t\t\tarr.splice(i, 1);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Returns true if `a` is completely covered by `b`.\n\t * Returns true if `b` is a more relaxed `a`.\n\t * Return true if (`a` === true implies `b` === true).\n\t */\n\tpublic static whenIsEntirelyIncluded(inNormalizedForm: boolean, a: ContextKeyExpr, b: ContextKeyExpr): boolean {\n\t\tif (!inNormalizedForm) {\n\t\t\ta = a ? a.normalize() : null;\n\t\t\tb = b ? b.normalize() : null;\n\t\t}\n\t\tif (!b) {\n\t\t\treturn true;\n\t\t}\n\t\tif (!a) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet aRulesArr = a.serialize().split(' && ');\n\t\tlet bRulesArr = b.serialize().split(' && ');\n\n\t\tlet aRules: { [rule: string]: boolean; } = Object.create(null);\n\t\tfor (let i = 0, len = aRulesArr.length; i < len; i++) {\n\t\t\taRules[aRulesArr[i]] = true;\n\t\t}\n\n\t\tfor (let i = 0, len = bRulesArr.length; i < len; i++) {\n\t\t\tif (!aRules[bRulesArr[i]]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic getDefaultBoundCommands(): Map {\n\t\treturn this._defaultBoundCommands;\n\t}\n\n\tpublic getDefaultKeybindings(): ResolvedKeybindingItem[] {\n\t\treturn this._defaultKeybindings;\n\t}\n\n\tpublic getKeybindings(): ResolvedKeybindingItem[] {\n\t\treturn this._keybindings;\n\t}\n\n\tpublic lookupKeybindings(commandId: string): ResolvedKeybindingItem[] {\n\t\tlet items = this._lookupMap.get(commandId);\n\t\tif (typeof items === 'undefined' || items.length === 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\t// Reverse to get the most specific item first\n\t\tlet result: ResolvedKeybindingItem[] = [], resultLen = 0;\n\t\tfor (let i = items.length - 1; i >= 0; i--) {\n\t\t\tresult[resultLen++] = items[i];\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic lookupPrimaryKeybinding(commandId: string): ResolvedKeybindingItem {\n\t\tlet items = this._lookupMap.get(commandId);\n\t\tif (typeof items === 'undefined' || items.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn items[items.length - 1];\n\t}\n\n\tpublic resolve(context: IContext, currentChord: string, keypress: string): IResolveResult {\n\t\tlet lookupMap: ResolvedKeybindingItem[] = null;\n\n\t\tif (currentChord !== null) {\n\t\t\t// Fetch all chord bindings for `currentChord`\n\n\t\t\tconst candidates = this._map.get(currentChord);\n\t\t\tif (typeof candidates === 'undefined') {\n\t\t\t\t// No chords starting with `currentChord`\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlookupMap = [];\n\t\t\tfor (let i = 0, len = candidates.length; i < len; i++) {\n\t\t\t\tlet candidate = candidates[i];\n\t\t\t\tif (candidate.keypressChordPart === keypress) {\n\t\t\t\t\tlookupMap.push(candidate);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst candidates = this._map.get(keypress);\n\t\t\tif (typeof candidates === 'undefined') {\n\t\t\t\t// No bindings with `keypress`\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlookupMap = candidates;\n\t\t}\n\n\t\tlet result = this._findCommand(context, lookupMap);\n\t\tif (!result) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (currentChord === null && result.keypressChordPart !== null) {\n\t\t\treturn {\n\t\t\t\tenterChord: true,\n\t\t\t\tcommandId: null,\n\t\t\t\tcommandArgs: null,\n\t\t\t\tbubble: false\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tenterChord: false,\n\t\t\tcommandId: result.command,\n\t\t\tcommandArgs: result.commandArgs,\n\t\t\tbubble: result.bubble\n\t\t};\n\t}\n\n\tprivate _findCommand(context: IContext, matches: ResolvedKeybindingItem[]): ResolvedKeybindingItem {\n\t\tfor (let i = matches.length - 1; i >= 0; i--) {\n\t\t\tlet k = matches[i];\n\n\t\t\tif (!KeybindingResolver.contextMatchesRules(context, k.when)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\treturn k;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tpublic static contextMatchesRules(context: IContext, rules: ContextKeyExpr): boolean {\n\t\tif (!rules) {\n\t\t\treturn true;\n\t\t}\n\t\treturn rules.evaluate(context);\n\t}\n\n\tpublic static getAllUnboundCommands(boundCommands: Map): string[] {\n\t\tconst commands = CommandsRegistry.getCommands();\n\t\tconst unboundCommands: string[] = [];\n\n\t\tfor (let id in commands) {\n\t\t\tif (id[0] === '_' || id.indexOf('vscode.') === 0) { // private command\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (typeof commands[id].description === 'object'\n\t\t\t\t&& !isFalsyOrEmpty((commands[id].description).args)) { // command with args\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (boundCommands.get(id) === true) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tunboundCommands.push(id);\n\t\t}\n\n\t\treturn unboundCommands;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { CommandsRegistry } from 'vs/platform/commands/common/commands';\nimport { KeybindingResolver } from 'vs/platform/keybinding/common/keybindingResolver';\nimport { IContextKey, IContext, IContextKeyServiceTarget, IContextKeyService, SET_CONTEXT_COMMAND_ID, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';\nimport { IConfigurationService } from 'vs/platform/configuration/common/configuration';\nimport Event, { Emitter, debounceEvent } from 'vs/base/common/event';\n\nconst KEYBINDING_CONTEXT_ATTR = 'data-keybinding-context';\n\nexport class Context implements IContext {\n\n\tprotected _parent: Context;\n\tprotected _value: { [key: string]: any; };\n\tprotected _id: number;\n\n\tconstructor(id: number, parent: Context) {\n\t\tthis._id = id;\n\t\tthis._parent = parent;\n\t\tthis._value = Object.create(null);\n\t\tthis._value['_contextId'] = id;\n\t}\n\n\tpublic setValue(key: string, value: any): boolean {\n\t\t// console.log('SET ' + key + ' = ' + value + ' ON ' + this._id);\n\t\tif (this._value[key] !== value) {\n\t\t\tthis._value[key] = value;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic removeValue(key: string): boolean {\n\t\t// console.log('REMOVE ' + key + ' FROM ' + this._id);\n\t\treturn delete this._value[key];\n\t}\n\n\tpublic getValue(key: string): T {\n\t\tconst ret = this._value[key];\n\t\tif (typeof ret === 'undefined' && this._parent) {\n\t\t\treturn this._parent.getValue(key);\n\t\t}\n\t\treturn ret;\n\t}\n}\n\nclass ConfigAwareContextValuesContainer extends Context {\n\n\tprivate _emitter: Emitter;\n\tprivate _subscription: IDisposable;\n\n\tconstructor(id: number, configurationService: IConfigurationService, emitter: Emitter) {\n\t\tsuper(id, null);\n\n\t\tthis._emitter = emitter;\n\t\tthis._subscription = configurationService.onDidUpdateConfiguration(e => this._updateConfigurationContext(configurationService.getConfiguration()));\n\t\tthis._updateConfigurationContext(configurationService.getConfiguration());\n\t}\n\n\tpublic dispose() {\n\t\tthis._subscription.dispose();\n\t}\n\n\tprivate _updateConfigurationContext(config: any) {\n\n\t\t// remove old config.xyz values\n\t\tfor (let key in this._value) {\n\t\t\tif (key.indexOf('config.') === 0) {\n\t\t\t\tdelete this._value[key];\n\t\t\t}\n\t\t}\n\n\t\t// add new value from config\n\t\tconst walk = (obj: any, keys: string[]) => {\n\t\t\tfor (let key in obj) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(obj, key)) {\n\t\t\t\t\tkeys.push(key);\n\t\t\t\t\tlet value = obj[key];\n\t\t\t\t\tif (typeof value === 'boolean') {\n\t\t\t\t\t\tconst configKey = keys.join('.');\n\t\t\t\t\t\tthis._value[configKey] = value;\n\t\t\t\t\t\tthis._emitter.fire(configKey);\n\t\t\t\t\t} else if (typeof value === 'object') {\n\t\t\t\t\t\twalk(value, keys);\n\t\t\t\t\t}\n\t\t\t\t\tkeys.pop();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\twalk(config, ['config']);\n\t}\n}\n\nclass ContextKey implements IContextKey {\n\n\tprivate _parent: AbstractContextKeyService;\n\tprivate _key: string;\n\tprivate _defaultValue: T;\n\n\tconstructor(parent: AbstractContextKeyService, key: string, defaultValue: T) {\n\t\tthis._parent = parent;\n\t\tthis._key = key;\n\t\tthis._defaultValue = defaultValue;\n\t\tthis.reset();\n\t}\n\n\tpublic set(value: T): void {\n\t\tthis._parent.setContext(this._key, value);\n\t}\n\n\tpublic reset(): void {\n\t\tif (typeof this._defaultValue === 'undefined') {\n\t\t\tthis._parent.removeContext(this._key);\n\t\t} else {\n\t\t\tthis._parent.setContext(this._key, this._defaultValue);\n\t\t}\n\t}\n\n\tpublic get(): T {\n\t\treturn this._parent.getContextKeyValue(this._key);\n\t}\n}\n\nexport abstract class AbstractContextKeyService {\n\tpublic _serviceBrand: any;\n\n\tprotected _onDidChangeContext: Event;\n\tprotected _onDidChangeContextKey: Emitter;\n\tprotected _myContextId: number;\n\n\tconstructor(myContextId: number) {\n\t\tthis._myContextId = myContextId;\n\t\tthis._onDidChangeContextKey = new Emitter();\n\t}\n\n\tpublic createKey(key: string, defaultValue: T): IContextKey {\n\t\treturn new ContextKey(this, key, defaultValue);\n\t}\n\n\tpublic get onDidChangeContext(): Event {\n\t\tif (!this._onDidChangeContext) {\n\t\t\tthis._onDidChangeContext = debounceEvent(this._onDidChangeContextKey.event, (prev: string[], cur) => {\n\t\t\t\tif (!prev) {\n\t\t\t\t\tprev = [cur];\n\t\t\t\t} else if (prev.indexOf(cur) < 0) {\n\t\t\t\t\tprev.push(cur);\n\t\t\t\t}\n\t\t\t\treturn prev;\n\t\t\t}, 25);\n\t\t}\n\t\treturn this._onDidChangeContext;\n\t}\n\n\tpublic createScoped(domNode: IContextKeyServiceTarget): IContextKeyService {\n\t\treturn new ScopedContextKeyService(this, this._onDidChangeContextKey, domNode);\n\t}\n\n\tpublic contextMatchesRules(rules: ContextKeyExpr): boolean {\n\t\tconst context = this.getContextValuesContainer(this._myContextId);\n\t\tconst result = KeybindingResolver.contextMatchesRules(context, rules);\n\t\t// console.group(rules.serialize() + ' -> ' + result);\n\t\t// rules.keys().forEach(key => { console.log(key, ctx[key]); });\n\t\t// console.groupEnd();\n\t\treturn result;\n\t}\n\n\tpublic getContextKeyValue(key: string): T {\n\t\treturn this.getContextValuesContainer(this._myContextId).getValue(key);\n\t}\n\n\tpublic setContext(key: string, value: any): void {\n\t\tif (this.getContextValuesContainer(this._myContextId).setValue(key, value)) {\n\t\t\tthis._onDidChangeContextKey.fire(key);\n\t\t}\n\t}\n\n\tpublic removeContext(key: string): void {\n\t\tif (this.getContextValuesContainer(this._myContextId).removeValue(key)) {\n\t\t\tthis._onDidChangeContextKey.fire(key);\n\t\t}\n\t}\n\n\tpublic getContext(target: IContextKeyServiceTarget): IContext {\n\t\treturn this.getContextValuesContainer(findContextAttr(target));\n\t}\n\n\tpublic abstract getContextValuesContainer(contextId: number): Context;\n\tpublic abstract createChildContext(parentContextId?: number): number;\n\tpublic abstract disposeContext(contextId: number): void;\n}\n\nexport class ContextKeyService extends AbstractContextKeyService implements IContextKeyService {\n\n\tprivate _lastContextId: number;\n\tprivate _contexts: {\n\t\t[contextId: string]: Context;\n\t};\n\n\tprivate _toDispose: IDisposable[] = [];\n\n\tconstructor( @IConfigurationService configurationService: IConfigurationService) {\n\t\tsuper(0);\n\t\tthis._lastContextId = 0;\n\t\tthis._contexts = Object.create(null);\n\n\t\tconst myContext = new ConfigAwareContextValuesContainer(this._myContextId, configurationService, this._onDidChangeContextKey);\n\t\tthis._contexts[String(this._myContextId)] = myContext;\n\t\tthis._toDispose.push(myContext);\n\n\t\t// Uncomment this to see the contexts continuously logged\n\t\t// let lastLoggedValue: string = null;\n\t\t// setInterval(() => {\n\t\t// \tlet values = Object.keys(this._contexts).map((key) => this._contexts[key]);\n\t\t// \tlet logValue = values.map(v => JSON.stringify(v._value, null, '\\t')).join('\\n');\n\t\t// \tif (lastLoggedValue !== logValue) {\n\t\t// \t\tlastLoggedValue = logValue;\n\t\t// \t\tconsole.log(lastLoggedValue);\n\t\t// \t}\n\t\t// }, 2000);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._toDispose = dispose(this._toDispose);\n\t}\n\n\tpublic getContextValuesContainer(contextId: number): Context {\n\t\treturn this._contexts[String(contextId)];\n\t}\n\n\tpublic createChildContext(parentContextId: number = this._myContextId): number {\n\t\tlet id = (++this._lastContextId);\n\t\tthis._contexts[String(id)] = new Context(id, this.getContextValuesContainer(parentContextId));\n\t\treturn id;\n\t}\n\n\tpublic disposeContext(contextId: number): void {\n\t\tdelete this._contexts[String(contextId)];\n\t}\n}\n\nclass ScopedContextKeyService extends AbstractContextKeyService {\n\n\tprivate _parent: AbstractContextKeyService;\n\tprivate _domNode: IContextKeyServiceTarget;\n\n\tconstructor(parent: AbstractContextKeyService, emitter: Emitter, domNode?: IContextKeyServiceTarget) {\n\t\tsuper(parent.createChildContext());\n\t\tthis._parent = parent;\n\t\tthis._onDidChangeContextKey = emitter;\n\n\t\tif (domNode) {\n\t\t\tthis._domNode = domNode;\n\t\t\tthis._domNode.setAttribute(KEYBINDING_CONTEXT_ATTR, String(this._myContextId));\n\t\t}\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._parent.disposeContext(this._myContextId);\n\t\tif (this._domNode) {\n\t\t\tthis._domNode.removeAttribute(KEYBINDING_CONTEXT_ATTR);\n\t\t}\n\t}\n\n\tpublic get onDidChangeContext(): Event {\n\t\treturn this._parent.onDidChangeContext;\n\t}\n\n\tpublic getContextValuesContainer(contextId: number): Context {\n\t\treturn this._parent.getContextValuesContainer(contextId);\n\t}\n\n\tpublic createChildContext(parentContextId: number = this._myContextId): number {\n\t\treturn this._parent.createChildContext(parentContextId);\n\t}\n\n\tpublic disposeContext(contextId: number): void {\n\t\tthis._parent.disposeContext(contextId);\n\t}\n}\n\nfunction findContextAttr(domNode: IContextKeyServiceTarget): number {\n\twhile (domNode) {\n\t\tif (domNode.hasAttribute(KEYBINDING_CONTEXT_ATTR)) {\n\t\t\treturn parseInt(domNode.getAttribute(KEYBINDING_CONTEXT_ATTR), 10);\n\t\t}\n\t\tdomNode = domNode.parentElement;\n\t}\n\treturn 0;\n}\n\nCommandsRegistry.registerCommand(SET_CONTEXT_COMMAND_ID, function (accessor, contextKey: any, contextValue: any) {\n\taccessor.get(IContextKeyService).createKey(String(contextKey), contextValue);\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'use strict';\n\nimport { ResolvedKeybinding } from 'vs/base/common/keyCodes';\nimport { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';\nimport { CharCode } from 'vs/base/common/charCode';\n\nexport class ResolvedKeybindingItem {\n\t_resolvedKeybindingItemBrand: void;\n\n\tpublic readonly resolvedKeybinding: ResolvedKeybinding;\n\tpublic readonly keypressFirstPart: string;\n\tpublic readonly keypressChordPart: string;\n\tpublic readonly bubble: boolean;\n\tpublic readonly command: string;\n\tpublic readonly commandArgs: any;\n\tpublic readonly when: ContextKeyExpr;\n\tpublic readonly isDefault: boolean;\n\n\tconstructor(resolvedKeybinding: ResolvedKeybinding, command: string, commandArgs: any, when: ContextKeyExpr, isDefault: boolean) {\n\t\tthis.resolvedKeybinding = resolvedKeybinding;\n\t\tif (resolvedKeybinding) {\n\t\t\tlet [keypressFirstPart, keypressChordPart] = resolvedKeybinding.getDispatchParts();\n\t\t\tthis.keypressFirstPart = keypressFirstPart;\n\t\t\tthis.keypressChordPart = keypressChordPart;\n\t\t} else {\n\t\t\tthis.keypressFirstPart = null;\n\t\t\tthis.keypressChordPart = null;\n\t\t}\n\t\tthis.bubble = (command ? command.charCodeAt(0) === CharCode.Caret : false);\n\t\tthis.command = this.bubble ? command.substr(1) : command;\n\t\tthis.commandArgs = commandArgs;\n\t\tthis.when = when;\n\t\tthis.isDefault = isDefault;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { ResolvedKeybinding, ResolvedKeybindingPart, KeyCode, KeyCodeUtils, Keybinding, KeybindingType, SimpleKeybinding } from 'vs/base/common/keyCodes';\nimport { UILabelProvider, AriaLabelProvider, ElectronAcceleratorLabelProvider, UserSettingsLabelProvider } from 'vs/base/common/keybindingLabels';\nimport { OperatingSystem } from 'vs/base/common/platform';\n\n/**\n * Do not instantiate. Use KeybindingService to get a ResolvedKeybinding seeded with information about the current kb layout.\n */\nexport class USLayoutResolvedKeybinding extends ResolvedKeybinding {\n\n\tprivate readonly _os: OperatingSystem;\n\tprivate readonly _firstPart: SimpleKeybinding;\n\tprivate readonly _chordPart: SimpleKeybinding;\n\n\tconstructor(actual: Keybinding, OS: OperatingSystem) {\n\t\tsuper();\n\t\tthis._os = OS;\n\t\tif (actual === null) {\n\t\t\tthis._firstPart = null;\n\t\t\tthis._chordPart = null;\n\t\t} else if (actual.type === KeybindingType.Chord) {\n\t\t\tthis._firstPart = actual.firstPart;\n\t\t\tthis._chordPart = actual.chordPart;\n\t\t} else {\n\t\t\tthis._firstPart = actual;\n\t\t\tthis._chordPart = null;\n\t\t}\n\t}\n\n\tprivate _keyCodeToUILabel(keyCode: KeyCode): string {\n\t\tif (this._os === OperatingSystem.Macintosh) {\n\t\t\tswitch (keyCode) {\n\t\t\t\tcase KeyCode.LeftArrow:\n\t\t\t\t\treturn '←';\n\t\t\t\tcase KeyCode.UpArrow:\n\t\t\t\t\treturn '↑';\n\t\t\t\tcase KeyCode.RightArrow:\n\t\t\t\t\treturn '→';\n\t\t\t\tcase KeyCode.DownArrow:\n\t\t\t\t\treturn '↓';\n\t\t\t}\n\t\t}\n\t\treturn KeyCodeUtils.toString(keyCode);\n\t}\n\n\tprivate _getUILabelForKeybinding(keybinding: SimpleKeybinding): string {\n\t\tif (!keybinding) {\n\t\t\treturn null;\n\t\t}\n\t\tif (keybinding.isDuplicateModifierCase()) {\n\t\t\treturn '';\n\t\t}\n\t\treturn this._keyCodeToUILabel(keybinding.keyCode);\n\t}\n\n\tpublic getLabel(): string {\n\t\tlet firstPart = this._getUILabelForKeybinding(this._firstPart);\n\t\tlet chordPart = this._getUILabelForKeybinding(this._chordPart);\n\t\treturn UILabelProvider.toLabel(this._firstPart, firstPart, this._chordPart, chordPart, this._os);\n\t}\n\n\tprivate _getAriaLabelForKeybinding(keybinding: SimpleKeybinding): string {\n\t\tif (!keybinding) {\n\t\t\treturn null;\n\t\t}\n\t\tif (keybinding.isDuplicateModifierCase()) {\n\t\t\treturn '';\n\t\t}\n\t\treturn KeyCodeUtils.toString(keybinding.keyCode);\n\t}\n\n\tpublic getAriaLabel(): string {\n\t\tlet firstPart = this._getAriaLabelForKeybinding(this._firstPart);\n\t\tlet chordPart = this._getAriaLabelForKeybinding(this._chordPart);\n\t\treturn AriaLabelProvider.toLabel(this._firstPart, firstPart, this._chordPart, chordPart, this._os);\n\t}\n\n\tprivate _keyCodeToElectronAccelerator(keyCode: KeyCode): string {\n\t\tif (keyCode >= KeyCode.NUMPAD_0 && keyCode <= KeyCode.NUMPAD_DIVIDE) {\n\t\t\t// Electron cannot handle numpad keys\n\t\t\treturn null;\n\t\t}\n\n\t\tswitch (keyCode) {\n\t\t\tcase KeyCode.UpArrow:\n\t\t\t\treturn 'Up';\n\t\t\tcase KeyCode.DownArrow:\n\t\t\t\treturn 'Down';\n\t\t\tcase KeyCode.LeftArrow:\n\t\t\t\treturn 'Left';\n\t\t\tcase KeyCode.RightArrow:\n\t\t\t\treturn 'Right';\n\t\t}\n\n\t\treturn KeyCodeUtils.toString(keyCode);\n\t}\n\n\tprivate _getElectronAcceleratorLabelForKeybinding(keybinding: SimpleKeybinding): string {\n\t\tif (!keybinding) {\n\t\t\treturn null;\n\t\t}\n\t\tif (keybinding.isDuplicateModifierCase()) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._keyCodeToElectronAccelerator(keybinding.keyCode);\n\t}\n\n\tpublic getElectronAccelerator(): string {\n\t\tif (this._chordPart !== null) {\n\t\t\t// Electron cannot handle chords\n\t\t\treturn null;\n\t\t}\n\n\t\tlet firstPart = this._getElectronAcceleratorLabelForKeybinding(this._firstPart);\n\t\treturn ElectronAcceleratorLabelProvider.toLabel(this._firstPart, firstPart, null, null, this._os);\n\t}\n\n\tprivate _getUserSettingsLabelForKeybinding(keybinding: SimpleKeybinding): string {\n\t\tif (!keybinding) {\n\t\t\treturn null;\n\t\t}\n\t\tif (keybinding.isDuplicateModifierCase()) {\n\t\t\treturn '';\n\t\t}\n\t\treturn KeyCodeUtils.toUserSettingsUS(keybinding.keyCode);\n\t}\n\n\tpublic getUserSettingsLabel(): string {\n\t\tlet firstPart = this._getUserSettingsLabelForKeybinding(this._firstPart);\n\t\tlet chordPart = this._getUserSettingsLabelForKeybinding(this._chordPart);\n\t\tlet result = UserSettingsLabelProvider.toLabel(this._firstPart, firstPart, this._chordPart, chordPart, this._os);\n\t\treturn (result ? result.toLowerCase() : result);\n\t}\n\n\tpublic isWYSIWYG(): boolean {\n\t\treturn true;\n\t}\n\n\tpublic isChord(): boolean {\n\t\treturn (this._chordPart ? true : false);\n\t}\n\n\tpublic getParts(): [ResolvedKeybindingPart, ResolvedKeybindingPart] {\n\t\treturn [\n\t\t\tthis._toResolvedKeybindingPart(this._firstPart),\n\t\t\tthis._toResolvedKeybindingPart(this._chordPart)\n\t\t];\n\t}\n\n\tprivate _toResolvedKeybindingPart(keybinding: SimpleKeybinding): ResolvedKeybindingPart {\n\t\tif (!keybinding) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn new ResolvedKeybindingPart(\n\t\t\tkeybinding.ctrlKey,\n\t\t\tkeybinding.shiftKey,\n\t\t\tkeybinding.altKey,\n\t\t\tkeybinding.metaKey,\n\t\t\tthis._getUILabelForKeybinding(keybinding),\n\t\t\tthis._getAriaLabelForKeybinding(keybinding)\n\t\t);\n\t}\n\n\tpublic getDispatchParts(): [string, string] {\n\t\tlet firstPart = this._firstPart ? USLayoutResolvedKeybinding.getDispatchStr(this._firstPart) : null;\n\t\tlet chordPart = this._chordPart ? USLayoutResolvedKeybinding.getDispatchStr(this._chordPart) : null;\n\t\treturn [firstPart, chordPart];\n\t}\n\n\tpublic static getDispatchStr(keybinding: SimpleKeybinding): string {\n\t\tif (keybinding.isModifierKey()) {\n\t\t\treturn null;\n\t\t}\n\t\tlet result = '';\n\n\t\tif (keybinding.ctrlKey) {\n\t\t\tresult += 'ctrl+';\n\t\t}\n\t\tif (keybinding.shiftKey) {\n\t\t\tresult += 'shift+';\n\t\t}\n\t\tif (keybinding.altKey) {\n\t\t\tresult += 'alt+';\n\t\t}\n\t\tif (keybinding.metaKey) {\n\t\t\tresult += 'meta+';\n\t\t}\n\t\tresult += KeyCodeUtils.toString(keybinding.keyCode);\n\n\t\treturn result;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { isFalsyOrEmpty } from 'vs/base/common/arrays';\nimport { Schemas } from 'vs/base/common/network';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { isEmptyObject } from 'vs/base/common/types';\nimport URI from 'vs/base/common/uri';\nimport Event, { Emitter, debounceEvent } from 'vs/base/common/event';\nimport Severity from 'vs/base/common/severity';\nimport { IMarkerService, IMarkerData, IResourceMarker, IMarker, MarkerStatistics } from './markers';\n\ninterface MapMap {\n\t[key: string]: { [key: string]: V };\n}\n\nnamespace MapMap {\n\n\texport function get(map: MapMap, key1: string, key2: string): V {\n\t\tif (map[key1]) {\n\t\t\treturn map[key1][key2];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\texport function set(map: MapMap, key1: string, key2: string, value: V): void {\n\t\tif (!map[key1]) {\n\t\t\tmap[key1] = Object.create(null);\n\t\t}\n\t\tmap[key1][key2] = value;\n\t}\n\n\texport function remove(map: MapMap, key1: string, key2: string): boolean {\n\t\tif (map[key1] && map[key1][key2]) {\n\t\t\tdelete map[key1][key2];\n\t\t\tif (isEmptyObject(map[key1])) {\n\t\t\t\tdelete map[key1];\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n}\n\nclass MarkerStats implements MarkerStatistics {\n\n\terrors: number = 0;\n\tinfos: number = 0;\n\twarnings: number = 0;\n\tunknowns: number = 0;\n\n\tprivate _data: { [resource: string]: MarkerStatistics } = Object.create(null);\n\tprivate _service: IMarkerService;\n\tprivate _subscription: IDisposable;\n\n\tconstructor(service: IMarkerService) {\n\t\tthis._service = service;\n\t\tthis._subscription = service.onMarkerChanged(this._update, this);\n\t}\n\n\tdispose(): void {\n\t\tthis._subscription.dispose();\n\t\tthis._data = undefined;\n\t}\n\n\tprivate _update(resources: URI[]): void {\n\t\tfor (const resource of resources) {\n\t\t\tconst key = resource.toString();\n\t\t\tconst oldStats = this._data[key];\n\t\t\tif (oldStats) {\n\t\t\t\tthis._substract(oldStats);\n\t\t\t}\n\t\t\tconst newStats = this._resourceStats(resource);\n\t\t\tthis._add(newStats);\n\t\t\tthis._data[key] = newStats;\n\t\t}\n\t}\n\n\tprivate _resourceStats(resource: URI): MarkerStatistics {\n\t\tconst result: MarkerStatistics = { errors: 0, warnings: 0, infos: 0, unknowns: 0 };\n\n\t\t// TODO this is a hack\n\t\tif (resource.scheme === Schemas.inMemory || resource.scheme === Schemas.walkThrough || resource.scheme === Schemas.walkThroughSnippet) {\n\t\t\treturn result;\n\t\t}\n\n\t\tfor (const { severity } of this._service.read({ resource })) {\n\t\t\tif (severity === Severity.Error) {\n\t\t\t\tresult.errors += 1;\n\t\t\t} else if (severity === Severity.Warning) {\n\t\t\t\tresult.warnings += 1;\n\t\t\t} else if (severity === Severity.Info) {\n\t\t\t\tresult.infos += 1;\n\t\t\t} else {\n\t\t\t\tresult.unknowns += 1;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate _substract(op: MarkerStatistics) {\n\t\tthis.errors -= op.errors;\n\t\tthis.warnings -= op.warnings;\n\t\tthis.infos -= op.infos;\n\t\tthis.unknowns -= op.unknowns;\n\t}\n\n\tprivate _add(op: MarkerStatistics) {\n\t\tthis.errors += op.errors;\n\t\tthis.warnings += op.warnings;\n\t\tthis.infos += op.infos;\n\t\tthis.unknowns += op.unknowns;\n\t}\n}\n\nexport class MarkerService implements IMarkerService {\n\n\t_serviceBrand: any;\n\n\tprivate _onMarkerChanged = new Emitter();\n\tprivate _onMarkerChangedEvent: Event = debounceEvent(this._onMarkerChanged.event, MarkerService._debouncer, 0);\n\tprivate _byResource: MapMap = Object.create(null);\n\tprivate _byOwner: MapMap = Object.create(null);\n\tprivate _stats: MarkerStats;\n\n\tconstructor() {\n\t\tthis._stats = new MarkerStats(this);\n\t}\n\n\tdispose(): void {\n\t\tthis._stats.dispose();\n\t}\n\n\tget onMarkerChanged(): Event {\n\t\treturn this._onMarkerChangedEvent;\n\t}\n\n\tgetStatistics(): MarkerStatistics {\n\t\treturn this._stats;\n\t}\n\n\tremove(owner: string, resources: URI[]): void {\n\t\tif (!isFalsyOrEmpty(resources)) {\n\t\t\tfor (const resource of resources) {\n\t\t\t\tthis.changeOne(owner, resource, undefined);\n\t\t\t}\n\t\t}\n\t}\n\n\tchangeOne(owner: string, resource: URI, markerData: IMarkerData[]): void {\n\n\t\tif (isFalsyOrEmpty(markerData)) {\n\t\t\t// remove marker for this (owner,resource)-tuple\n\t\t\tconst a = MapMap.remove(this._byResource, resource.toString(), owner);\n\t\t\tconst b = MapMap.remove(this._byOwner, owner, resource.toString());\n\t\t\tif (a !== b) {\n\t\t\t\tthrow new Error('invalid marker service state');\n\t\t\t}\n\t\t\tif (a && b) {\n\t\t\t\tthis._onMarkerChanged.fire([resource]);\n\t\t\t}\n\n\t\t} else {\n\t\t\t// insert marker for this (owner,resource)-tuple\n\t\t\tconst markers: IMarker[] = [];\n\t\t\tfor (const data of markerData) {\n\t\t\t\tconst marker = MarkerService._toMarker(owner, resource, data);\n\t\t\t\tif (marker) {\n\t\t\t\t\tmarkers.push(marker);\n\t\t\t\t}\n\t\t\t}\n\t\t\tMapMap.set(this._byResource, resource.toString(), owner, markers);\n\t\t\tMapMap.set(this._byOwner, owner, resource.toString(), markers);\n\t\t\tthis._onMarkerChanged.fire([resource]);\n\t\t}\n\t}\n\n\tprivate static _toMarker(owner: string, resource: URI, data: IMarkerData): IMarker {\n\t\tlet { code, severity, message, source, startLineNumber, startColumn, endLineNumber, endColumn } = data;\n\n\t\tif (!message) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// santize data\n\t\tcode = code || null;\n\t\tstartLineNumber = startLineNumber > 0 ? startLineNumber : 1;\n\t\tstartColumn = startColumn > 0 ? startColumn : 1;\n\t\tendLineNumber = endLineNumber >= startLineNumber ? endLineNumber : startLineNumber;\n\t\tendColumn = endColumn > 0 ? endColumn : startColumn;\n\n\t\treturn {\n\t\t\tresource,\n\t\t\towner,\n\t\t\tcode,\n\t\t\tseverity,\n\t\t\tmessage,\n\t\t\tsource,\n\t\t\tstartLineNumber,\n\t\t\tstartColumn,\n\t\t\tendLineNumber,\n\t\t\tendColumn\n\t\t};\n\t}\n\n\tchangeAll(owner: string, data: IResourceMarker[]): void {\n\t\tconst changes: URI[] = [];\n\t\tconst map = this._byOwner[owner];\n\n\t\t// remove old marker\n\t\tif (map) {\n\t\t\tdelete this._byOwner[owner];\n\t\t\tfor (const resource in map) {\n\t\t\t\t// remeber what we remove\n\t\t\t\tconst [first] = MapMap.get(this._byResource, resource, owner);\n\t\t\t\tif (first) {\n\t\t\t\t\tchanges.push(first.resource);\n\t\t\t\t}\n\t\t\t\t// actual remove\n\t\t\t\tMapMap.remove(this._byResource, resource, owner);\n\t\t\t}\n\t\t}\n\n\t\t// add new markers\n\t\tif (!isFalsyOrEmpty(data)) {\n\n\t\t\t// group by resource\n\t\t\tconst groups: { [resource: string]: IMarker[] } = Object.create(null);\n\t\t\tfor (const { resource, marker: markerData } of data) {\n\t\t\t\tconst marker = MarkerService._toMarker(owner, resource, markerData);\n\t\t\t\tif (!marker) {\n\t\t\t\t\t// filter bad markers\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst array = groups[resource.toString()];\n\t\t\t\tif (!array) {\n\t\t\t\t\tgroups[resource.toString()] = [marker];\n\t\t\t\t\tchanges.push(resource);\n\t\t\t\t} else {\n\t\t\t\t\tarray.push(marker);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// insert all\n\t\t\tfor (const resource in groups) {\n\t\t\t\tMapMap.set(this._byResource, resource, owner, groups[resource]);\n\t\t\t\tMapMap.set(this._byOwner, owner, resource, groups[resource]);\n\t\t\t}\n\t\t}\n\n\t\tif (changes.length > 0) {\n\t\t\tthis._onMarkerChanged.fire(changes);\n\t\t}\n\t}\n\n\tread(filter: { owner?: string; resource?: URI; take?: number; } = Object.create(null)): IMarker[] {\n\n\t\tlet { owner, resource, take } = filter;\n\n\t\tif (!take || take < 0) {\n\t\t\ttake = -1;\n\t\t}\n\n\t\tif (owner && resource) {\n\t\t\t// exactly one owner AND resource\n\t\t\tconst result = MapMap.get(this._byResource, resource.toString(), owner);\n\t\t\tif (!result) {\n\t\t\t\treturn [];\n\t\t\t} else {\n\t\t\t\treturn result.slice(0, take > 0 ? take : undefined);\n\t\t\t}\n\n\t\t} else if (!owner && !resource) {\n\t\t\t// all\n\t\t\tconst result: IMarker[] = [];\n\t\t\tfor (const key1 in this._byResource) {\n\t\t\t\tfor (const key2 in this._byResource[key1]) {\n\t\t\t\t\tfor (const data of this._byResource[key1][key2]) {\n\t\t\t\t\t\tconst newLen = result.push(data);\n\n\t\t\t\t\t\tif (take > 0 && newLen === take) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\n\t\t} else {\n\t\t\t// of one resource OR owner\n\t\t\tconst map: { [key: string]: IMarker[] } = owner\n\t\t\t\t? this._byOwner[owner]\n\t\t\t\t: this._byResource[resource.toString()];\n\n\t\t\tif (!map) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tconst result: IMarker[] = [];\n\t\t\tfor (const key in map) {\n\t\t\t\tfor (const data of map[key]) {\n\t\t\t\t\tconst newLen = result.push(data);\n\n\t\t\t\t\tif (take > 0 && newLen === take) {\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\t// --- event debounce logic\n\n\tprivate static _dedupeMap: { [uri: string]: boolean };\n\n\tprivate static _debouncer(last: URI[], event: URI[]): URI[] {\n\t\tif (!last) {\n\t\t\tMarkerService._dedupeMap = Object.create(null);\n\t\t\tlast = [];\n\t\t}\n\t\tfor (const uri of event) {\n\t\t\tif (MarkerService._dedupeMap[uri.toString()] === void 0) {\n\t\t\t\tMarkerService._dedupeMap[uri.toString()] = true;\n\t\t\t\tlast.push(uri);\n\t\t\t}\n\t\t}\n\t\treturn last;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport URI from 'vs/base/common/uri';\nimport Severity from 'vs/base/common/severity';\nimport Event from 'vs/base/common/event';\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\n\nexport const IMarkerService = createDecorator('markerService');\n\nexport interface IMarkerService {\n\t_serviceBrand: any;\n\n\tgetStatistics(): MarkerStatistics;\n\n\tchangeOne(owner: string, resource: URI, markers: IMarkerData[]): void;\n\n\tchangeAll(owner: string, data: IResourceMarker[]): void;\n\n\tremove(owner: string, resources: URI[]): void;\n\n\tread(filter?: { owner?: string; resource?: URI; take?: number; }): IMarker[];\n\n\tonMarkerChanged: Event;\n}\n\n/**\n * A structure defining a problem/warning/etc.\n */\nexport interface IMarkerData {\n\tcode?: string;\n\tseverity: Severity;\n\tmessage: string;\n\tsource?: string;\n\tstartLineNumber: number;\n\tstartColumn: number;\n\tendLineNumber: number;\n\tendColumn: number;\n}\n\nexport interface IResourceMarker {\n\tresource: URI;\n\tmarker: IMarkerData;\n}\n\nexport interface IMarker {\n\towner: string;\n\tresource: URI;\n\tseverity: Severity;\n\tcode?: string;\n\tmessage: string;\n\tsource?: string;\n\tstartLineNumber: number;\n\tstartColumn: number;\n\tendLineNumber: number;\n\tendColumn: number;\n}\n\nexport interface MarkerStatistics {\n\terrors: number;\n\twarnings: number;\n\tinfos: number;\n\tunknowns: number;\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'use strict';\n\nimport nls = require('vs/nls');\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport Severity from 'vs/base/common/severity';\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\nimport { Action } from 'vs/base/common/actions';\n\nexport interface IMessageWithAction {\n\tmessage: string;\n\tactions: Action[];\n}\n\nexport interface IConfirmation {\n\ttitle?: string;\n\ttype?: 'none' | 'info' | 'error' | 'question' | 'warning';\n\tmessage: string;\n\tdetail?: string;\n\tprimaryButton?: string;\n\tsecondaryButton?: string;\n}\n\nexport const CloseAction = new Action('close.message', nls.localize('close', \"Close\"), null, true, () => TPromise.as(true));\nexport const LaterAction = new Action('later.message', nls.localize('later', \"Later\"), null, true, () => TPromise.as(true));\nexport const CancelAction = new Action('cancel.message', nls.localize('cancel', \"Cancel\"), null, true, () => TPromise.as(true));\n\nexport const IMessageService = createDecorator('messageService');\n\nexport interface IMessageService {\n\n\t_serviceBrand: any;\n\n\t/**\n\t * Tells the service to show a message with a given severity\n\t * the returned function can be used to hide the message again\n\t */\n\tshow(sev: Severity, message: string): () => void;\n\tshow(sev: Severity, message: Error): () => void;\n\tshow(sev: Severity, message: string[]): () => void;\n\tshow(sev: Severity, message: Error[]): () => void;\n\tshow(sev: Severity, message: IMessageWithAction): () => void;\n\n\t/**\n\t * Hide any messages showing currently.\n\t */\n\thideAll(): void;\n\n\t/**\n\t * Ask the user for confirmation.\n\t */\n\tconfirm(confirmation: IConfirmation): boolean;\n}\n\nexport const IChoiceService = createDecorator('choiceService');\n\nexport interface IChoiceService {\n\n\t_serviceBrand: any;\n\n\t/**\n\t * Prompt the user for a choice between multiple options.\n\t *\n\t * @param when `modal` is true, this will block the user until chooses.\n\t *\n\t * @returns A promise with the selected choice index. The promise is cancellable\n\t * which hides the message. The promise can return an error, meaning that\n\t * the user refused to choose.\n\t *\n\t * When `modal` is true and user refused to choose, then promise with index of\n\t * `Cancel` option is returned. If there is no such option then promise with\n\t * `0` index is returned.\n\t */\n\tchoose(severity: Severity, message: string, options: string[], cancelId: number, modal?: boolean): TPromise;\n}\n\nexport import Severity = Severity;","/*---------------------------------------------------------------------------------------------\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'use strict';\n\nimport URI from 'vs/base/common/uri';\nimport { parse } from 'vs/base/common/marshalling';\nimport { Schemas } from 'vs/base/common/network';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IEditorService } from 'vs/platform/editor/common/editor';\nimport { normalize } from 'vs/base/common/paths';\nimport { ICommandService, CommandsRegistry } from 'vs/platform/commands/common/commands';\nimport { IOpenerService } from 'vs/platform/opener/common/opener';\n\nexport class OpenerService implements IOpenerService {\n\n\t_serviceBrand: any;\n\n\tconstructor(\n\t\t@IEditorService private _editorService: IEditorService,\n\t\t@ICommandService private _commandService: ICommandService\n\t) {\n\t\t//\n\t}\n\n\topen(resource: URI, options?: { openToSide?: boolean }): TPromise {\n\n\t\tconst { scheme, path, query, fragment } = resource;\n\t\tlet promise: TPromise;\n\t\tif (scheme === Schemas.http || scheme === Schemas.https) {\n\t\t\t// open http\n\t\t\twindow.open(resource.toString(true));\n\n\t\t} else if (scheme === 'command' && CommandsRegistry.getCommand(path)) {\n\t\t\t// execute as command\n\t\t\tlet args: any = [];\n\t\t\ttry {\n\t\t\t\targs = parse(query);\n\t\t\t\tif (!Array.isArray(args)) {\n\t\t\t\t\targs = [args];\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t//\n\t\t\t}\n\t\t\tpromise = this._commandService.executeCommand(path, ...args);\n\n\t\t} else {\n\t\t\tlet selection: {\n\t\t\t\tstartLineNumber: number;\n\t\t\t\tstartColumn: number;\n\t\t\t};\n\t\t\tconst match = /^L?(\\d+)(?:,(\\d+))?/.exec(fragment);\n\t\t\tif (match) {\n\t\t\t\t// support file:///some/file.js#73,84\n\t\t\t\t// support file:///some/file.js#L73\n\t\t\t\tselection = {\n\t\t\t\t\tstartLineNumber: parseInt(match[1]),\n\t\t\t\t\tstartColumn: match[2] ? parseInt(match[2]) : 1\n\t\t\t\t};\n\t\t\t\t// remove fragment\n\t\t\t\tresource = resource.with({ fragment: '' });\n\t\t\t}\n\n\t\t\tif (!resource.scheme) {\n\t\t\t\t// we cannot handle those\n\t\t\t\treturn TPromise.as(undefined);\n\n\t\t\t} else if (resource.scheme === Schemas.file) {\n\t\t\t\tresource = URI.file(normalize(resource.fsPath)); // workaround for non-normalized paths (https://github.com/Microsoft/vscode/issues/12954)\n\t\t\t}\n\t\t\tpromise = this._editorService.openEditor({ resource, options: { selection, } }, options && options.openToSide);\n\t\t}\n\n\t\treturn TPromise.as(promise);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport URI from 'vs/base/common/uri';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\n\nexport const IOpenerService = createDecorator('openerService');\n\n\nexport interface IOpenerService {\n\n\t_serviceBrand: any;\n\n\t/**\n\t * Opens a resource, like a webadress, a document uri, or executes command.\n\t *\n\t * @param resource A resource\n\t * @return A promise that resolves when the opening is done.\n\t */\n\topen(resource: URI, options?: { openToSide?: boolean }): TPromise;\n}\n\nexport const NullOpenerService: IOpenerService = Object.freeze({\n\t_serviceBrand: undefined,\n\topen() { return TPromise.as(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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { ICodeEditor } from 'vs/editor/browser/editorBrowser';\nimport { HoverOperation, IHoverComputer } from './hoverOperation';\nimport { GlyphHoverWidget } from './hoverWidgets';\nimport { $ } from 'vs/base/browser/dom';\nimport { renderMarkedString } from 'vs/base/browser/htmlContentRenderer';\nimport { IOpenerService, NullOpenerService } from 'vs/platform/opener/common/opener';\nimport URI from 'vs/base/common/uri';\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IModeService } from 'vs/editor/common/services/modeService';\nimport { tokenizeToString } from 'vs/editor/common/modes/textToHtmlTokenizer';\nimport { MarkedString } from 'vs/base/common/htmlContent';\n\nexport interface IHoverMessage {\n\tvalue: MarkedString;\n}\n\nclass MarginComputer implements IHoverComputer {\n\n\tprivate _editor: ICodeEditor;\n\tprivate _lineNumber: number;\n\tprivate _result: IHoverMessage[];\n\n\tconstructor(editor: ICodeEditor) {\n\t\tthis._editor = editor;\n\t\tthis._lineNumber = -1;\n\t}\n\n\tpublic setLineNumber(lineNumber: number): void {\n\t\tthis._lineNumber = lineNumber;\n\t\tthis._result = [];\n\t}\n\n\tpublic clearResult(): void {\n\t\tthis._result = [];\n\t}\n\n\tpublic computeSync(): IHoverMessage[] {\n\t\tconst hasHoverContent = (contents: MarkedString | MarkedString[]) => {\n\t\t\treturn contents && (!Array.isArray(contents) || (contents).length > 0);\n\t\t};\n\t\tconst toHoverMessage = (contents: MarkedString): IHoverMessage => {\n\t\t\treturn {\n\t\t\t\tvalue: contents\n\t\t\t};\n\t\t};\n\n\t\tlet lineDecorations = this._editor.getLineDecorations(this._lineNumber);\n\n\t\tlet result: IHoverMessage[] = [];\n\t\tfor (let i = 0, len = lineDecorations.length; i < len; i++) {\n\t\t\tlet d = lineDecorations[i];\n\n\t\t\tif (!d.options.glyphMarginClassName) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet hoverMessage = d.options.glyphMarginHoverMessage;\n\n\t\t\tif (!hasHoverContent(hoverMessage)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (Array.isArray(hoverMessage)) {\n\t\t\t\tresult = result.concat(hoverMessage.map(toHoverMessage));\n\t\t\t} else {\n\t\t\t\tresult.push(toHoverMessage(hoverMessage));\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic onResult(result: IHoverMessage[], isFromSynchronousComputation: boolean): void {\n\t\tthis._result = this._result.concat(result);\n\t}\n\n\tpublic getResult(): IHoverMessage[] {\n\t\treturn this._result;\n\t}\n\n\tpublic getResultWithLoadingMessage(): IHoverMessage[] {\n\t\treturn this.getResult();\n\t}\n}\n\nexport class ModesGlyphHoverWidget extends GlyphHoverWidget {\n\n\tpublic static ID = 'editor.contrib.modesGlyphHoverWidget';\n\tprivate _messages: IHoverMessage[];\n\tprivate _lastLineNumber: number;\n\n\tprivate _computer: MarginComputer;\n\tprivate _hoverOperation: HoverOperation;\n\n\tconstructor(editor: ICodeEditor, private openerService: IOpenerService, private modeService: IModeService) {\n\t\tsuper(ModesGlyphHoverWidget.ID, editor);\n\n\t\tthis.openerService = openerService || NullOpenerService;\n\n\t\tthis._lastLineNumber = -1;\n\n\t\tthis._computer = new MarginComputer(this._editor);\n\n\t\tthis._hoverOperation = new HoverOperation(\n\t\t\tthis._computer,\n\t\t\t(result: IHoverMessage[]) => this._withResult(result),\n\t\t\tnull,\n\t\t\t(result: any) => this._withResult(result)\n\t\t);\n\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._hoverOperation.cancel();\n\t\tsuper.dispose();\n\t}\n\n\tpublic onModelDecorationsChanged(): void {\n\t\tif (this.isVisible) {\n\t\t\t// The decorations have changed and the hover is visible,\n\t\t\t// we need to recompute the displayed text\n\t\t\tthis._hoverOperation.cancel();\n\t\t\tthis._computer.clearResult();\n\t\t\tthis._hoverOperation.start();\n\t\t}\n\t}\n\n\tpublic startShowingAt(lineNumber: number): void {\n\t\tif (this._lastLineNumber === lineNumber) {\n\t\t\t// We have to show the widget at the exact same line number as before, so no work is needed\n\t\t\treturn;\n\t\t}\n\n\t\tthis._hoverOperation.cancel();\n\n\t\tthis.hide();\n\n\t\tthis._lastLineNumber = lineNumber;\n\t\tthis._computer.setLineNumber(lineNumber);\n\t\tthis._hoverOperation.start();\n\t}\n\n\tpublic hide(): void {\n\t\tthis._lastLineNumber = -1;\n\t\tthis._hoverOperation.cancel();\n\t\tsuper.hide();\n\t}\n\n\tpublic _withResult(result: IHoverMessage[]): void {\n\t\tthis._messages = result;\n\n\t\tif (this._messages.length > 0) {\n\t\t\tthis._renderMessages(this._lastLineNumber, this._messages);\n\t\t} else {\n\t\t\tthis.hide();\n\t\t}\n\t}\n\n\tprivate _renderMessages(lineNumber: number, messages: IHoverMessage[]): void {\n\n\t\tconst fragment = document.createDocumentFragment();\n\n\t\tmessages.forEach((msg) => {\n\t\t\tconst renderedContents = renderMarkedString(msg.value, {\n\t\t\t\tactionCallback: content => this.openerService.open(URI.parse(content)).then(undefined, onUnexpectedError),\n\t\t\t\tcodeBlockRenderer: (languageAlias, value): string | TPromise => {\n\t\t\t\t\t// In markdown, it is possible that we stumble upon language aliases (e.g. js instead of javascript)\n\t\t\t\t\tconst modeId = this.modeService.getModeIdForLanguageName(languageAlias);\n\t\t\t\t\treturn this.modeService.getOrCreateMode(modeId).then(_ => {\n\t\t\t\t\t\treturn `
    ${tokenizeToString(value, modeId)}
    `;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfragment.appendChild($('div.hover-row', null, renderedContents));\n\t\t});\n\n\t\tthis.updateContents(fragment);\n\t\tthis.showAt(lineNumber);\n\t}\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'use strict';\n\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\n\nexport const IProgressService = createDecorator('progressService');\n\nexport interface IProgressService {\n\t_serviceBrand: any;\n\n\t/**\n\t * Show progress customized with the provided flags.\n\t */\n\tshow(infinite: boolean, delay?: number): IProgressRunner;\n\tshow(total: number, delay?: number): IProgressRunner;\n\n\t/**\n\t * Indicate progress for the duration of the provided promise. Progress will stop in\n\t * any case of promise completion, error or cancellation.\n\t */\n\tshowWhile(promise: TPromise, delay?: number): TPromise;\n}\n\nexport interface IProgressRunner {\n\ttotal(value: number): void;\n\tworked(value: number): void;\n\tdone(): void;\n}\n\nexport interface IProgress {\n\treport(item: T): void;\n}\n\nexport const emptyProgress: IProgress = Object.freeze({ report() { } });\n\nexport class Progress implements IProgress {\n\n\tprivate _callback: () => void;\n\tprivate _value: T;\n\n\tconstructor(callback: () => void) {\n\t\tthis._callback = callback;\n\t}\n\n\tget value() {\n\t\treturn this._value;\n\t}\n\n\treport(item: T) {\n\t\tthis._value = item;\n\t\tthis._callback();\n\t}\n}\n\nexport enum ProgressLocation {\n\tScm = 1,\n\tWindow = 10,\n}\n\nexport interface IProgressOptions {\n\tlocation: ProgressLocation;\n\ttitle?: string;\n\ttooltip?: string;\n}\n\nexport interface IProgressStep {\n\tmessage?: string;\n\tpercentage?: number;\n}\n\nexport const IProgressService2 = createDecorator('progressService2');\n\nexport interface IProgressService2 {\n\n\t_serviceBrand: any;\n\n\twithProgress(options: IProgressOptions, task: (progress: IProgress) => TPromise): void;\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'use strict';\n\nimport Types = require('vs/base/common/types');\nimport Assert = require('vs/base/common/assert');\nimport { IInstantiationService, IConstructorSignature0 } from 'vs/platform/instantiation/common/instantiation';\n\nexport interface IRegistry {\n\n\t/**\n\t * Adds the extension functions and properties defined by data to the\n\t * platform. The provided id must be unique.\n\t * @param id a unique identifier\n\t * @param data a contribution\n\t */\n\tadd(id: string, data: any): void;\n\n\t/**\n\t * Returns true iff there is an extension with the provided id.\n\t * @param id an extension idenifier\n\t */\n\tknows(id: string): boolean;\n\n\t/**\n\t * Returns the extension functions and properties defined by the specified key or null.\n\t * @param id an extension idenifier\n\t */\n\tas(id: string): any;\n\tas(id: string): T;\n}\n\nclass RegistryImpl implements IRegistry {\n\n\tprivate data: { [id: string]: any; };\n\n\tconstructor() {\n\t\tthis.data = {};\n\t}\n\n\tpublic add(id: string, data: any): void {\n\t\tAssert.ok(Types.isString(id));\n\t\tAssert.ok(Types.isObject(data));\n\t\tAssert.ok(!this.data.hasOwnProperty(id), 'There is already an extension with this id');\n\n\t\tthis.data[id] = data;\n\t}\n\n\tpublic knows(id: string): boolean {\n\t\treturn this.data.hasOwnProperty(id);\n\t}\n\n\tpublic as(id: string): any {\n\t\treturn this.data[id] || null;\n\t}\n}\n\nexport var Registry = new RegistryImpl();\n\n/**\n * A base class for registries that leverage the instantiation service to create instances.\n */\nexport class BaseRegistry {\n\tprivate toBeInstantiated: IConstructorSignature0[] = [];\n\tprivate instances: T[] = [];\n\tprivate instantiationService: IInstantiationService;\n\n\tpublic setInstantiationService(service: IInstantiationService): void {\n\t\tthis.instantiationService = service;\n\n\t\twhile (this.toBeInstantiated.length > 0) {\n\t\t\tlet entry = this.toBeInstantiated.shift();\n\t\t\tthis.instantiate(entry);\n\t\t}\n\t}\n\n\tprivate instantiate(ctor: IConstructorSignature0): void {\n\t\tlet instance = this.instantiationService.createInstance(ctor);\n\t\tthis.instances.push(instance);\n\t}\n\n\t_register(ctor: IConstructorSignature0): void {\n\t\tif (this.instantiationService) {\n\t\t\tthis.instantiate(ctor);\n\t\t} else {\n\t\t\tthis.toBeInstantiated.push(ctor);\n\t\t}\n\t}\n\n\t_getInstances(): T[] {\n\t\treturn this.instances.slice(0);\n\t}\n\n\t_setInstances(instances: T[]): void {\n\t\tthis.instances = instances;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Registry } from 'vs/platform/registry/common/platform';\nimport { IEditorContributionCtor } from 'vs/editor/browser/editorBrowser';\n\nexport function editorContribution(ctor: IEditorContributionCtor): void {\n\tEditorContributionRegistry.INSTANCE.registerEditorBrowserContribution(ctor);\n}\n\nexport namespace EditorBrowserRegistry {\n\texport function getEditorContributions(): IEditorContributionCtor[] {\n\t\treturn EditorContributionRegistry.INSTANCE.getEditorBrowserContributions();\n\t}\n}\n\nconst Extensions = {\n\tEditorContributions: 'editor.contributions'\n};\n\nclass EditorContributionRegistry {\n\n\tpublic static INSTANCE = new EditorContributionRegistry();\n\n\tprivate editorContributions: IEditorContributionCtor[];\n\n\tconstructor() {\n\t\tthis.editorContributions = [];\n\t}\n\n\tpublic registerEditorBrowserContribution(ctor: IEditorContributionCtor): void {\n\t\tthis.editorContributions.push(ctor);\n\t}\n\n\tpublic getEditorBrowserContributions(): IEditorContributionCtor[] {\n\t\treturn this.editorContributions.slice(0);\n\t}\n}\n\nRegistry.add(Extensions.EditorContributions, EditorContributionRegistry.INSTANCE);\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'use strict';\n\nimport * as nls from 'vs/nls';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { Registry } from 'vs/platform/registry/common/platform';\nimport { ILanguageExtensionPoint } from 'vs/editor/common/services/modeService';\nimport { LanguageConfigurationRegistry } from 'vs/editor/common/modes/languageConfigurationRegistry';\nimport { LanguageIdentifier, LanguageId } from 'vs/editor/common/modes';\n\n// Define extension point ids\nexport var Extensions = {\n\tModesRegistry: 'editor.modesRegistry'\n};\n\nexport class EditorModesRegistry {\n\n\tprivate _languages: ILanguageExtensionPoint[];\n\n\tprivate _onDidAddLanguages: Emitter = new Emitter();\n\tpublic onDidAddLanguages: Event = this._onDidAddLanguages.event;\n\n\tconstructor() {\n\t\tthis._languages = [];\n\t}\n\n\t// --- languages\n\n\tpublic registerLanguage(def: ILanguageExtensionPoint): void {\n\t\tthis._languages.push(def);\n\t\tthis._onDidAddLanguages.fire([def]);\n\t}\n\tpublic registerLanguages(def: ILanguageExtensionPoint[]): void {\n\t\tthis._languages = this._languages.concat(def);\n\t\tthis._onDidAddLanguages.fire(def);\n\t}\n\tpublic getLanguages(): ILanguageExtensionPoint[] {\n\t\treturn this._languages.slice(0);\n\t}\n}\n\nexport var ModesRegistry = new EditorModesRegistry();\nRegistry.add(Extensions.ModesRegistry, ModesRegistry);\n\nexport const PLAINTEXT_MODE_ID = 'plaintext';\nexport const PLAINTEXT_LANGUAGE_IDENTIFIER = new LanguageIdentifier(PLAINTEXT_MODE_ID, LanguageId.PlainText);\n\nModesRegistry.registerLanguage({\n\tid: PLAINTEXT_MODE_ID,\n\textensions: ['.txt', '.gitignore'],\n\taliases: [nls.localize('plainText.alias', \"Plain Text\"), 'text'],\n\tmimetypes: ['text/plain']\n});\nLanguageConfigurationRegistry.register(PLAINTEXT_LANGUAGE_IDENTIFIER, {\n\tbrackets: [\n\t\t['(', ')'],\n\t\t['[', ']'],\n\t\t['{', '}'],\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport network = require('vs/base/common/network');\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { EmitterEvent } from 'vs/base/common/eventEmitter';\nimport { MarkedString } from 'vs/base/common/htmlContent';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport Severity from 'vs/base/common/severity';\nimport URI from 'vs/base/common/uri';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IMarker, IMarkerService } from 'vs/platform/markers/common/markers';\nimport { Range } from 'vs/editor/common/core/range';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { Model } from 'vs/editor/common/model/model';\nimport { IMode, LanguageIdentifier } from 'vs/editor/common/modes';\nimport { IModelService } from 'vs/editor/common/services/modelService';\nimport * as platform from 'vs/base/common/platform';\nimport { IConfigurationService } from 'vs/platform/configuration/common/configuration';\nimport { EDITOR_MODEL_DEFAULTS } from 'vs/editor/common/config/editorOptions';\nimport { PLAINTEXT_LANGUAGE_IDENTIFIER } from 'vs/editor/common/modes/modesRegistry';\nimport { IRawTextSource, TextSource, RawTextSource } from 'vs/editor/common/model/textSource';\nimport * as textModelEvents from 'vs/editor/common/model/textModelEvents';\nimport { ClassName } from 'vs/editor/common/model/textModelWithDecorations';\n\nfunction MODEL_ID(resource: URI): string {\n\treturn resource.toString();\n}\n\nclass ModelData implements IDisposable {\n\tmodel: editorCommon.IModel;\n\n\tprivate _markerDecorations: string[];\n\tprivate _modelEventsListener: IDisposable;\n\n\tconstructor(model: editorCommon.IModel, eventsHandler: (modelData: ModelData, events: EmitterEvent[]) => void) {\n\t\tthis.model = model;\n\n\t\tthis._markerDecorations = [];\n\t\tthis._modelEventsListener = model.addBulkListener((events) => eventsHandler(this, events));\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._markerDecorations = this.model.deltaDecorations(this._markerDecorations, []);\n\t\tthis._modelEventsListener.dispose();\n\t\tthis._modelEventsListener = null;\n\t\tthis.model = null;\n\t}\n\n\tpublic getModelId(): string {\n\t\treturn MODEL_ID(this.model.uri);\n\t}\n\n\tpublic acceptMarkerDecorations(newDecorations: editorCommon.IModelDeltaDecoration[]): void {\n\t\tthis._markerDecorations = this.model.deltaDecorations(this._markerDecorations, newDecorations);\n\t}\n}\n\nclass ModelMarkerHandler {\n\n\tpublic static setMarkers(modelData: ModelData, markerService: IMarkerService): void {\n\n\t\t// Limit to the first 500 errors/warnings\n\t\tconst markers = markerService.read({ resource: modelData.model.uri, take: 500 });\n\n\t\tlet newModelDecorations: editorCommon.IModelDeltaDecoration[] = markers.map((marker) => {\n\t\t\treturn {\n\t\t\t\trange: this._createDecorationRange(modelData.model, marker),\n\t\t\t\toptions: this._createDecorationOption(marker)\n\t\t\t};\n\t\t});\n\n\t\tmodelData.acceptMarkerDecorations(newModelDecorations);\n\t}\n\n\tprivate static _createDecorationRange(model: editorCommon.IModel, rawMarker: IMarker): Range {\n\t\tlet marker = model.validateRange(new Range(rawMarker.startLineNumber, rawMarker.startColumn, rawMarker.endLineNumber, rawMarker.endColumn));\n\t\tlet ret: Range = new Range(marker.startLineNumber, marker.startColumn, marker.endLineNumber, marker.endColumn);\n\t\tif (ret.isEmpty()) {\n\t\t\tlet word = model.getWordAtPosition(ret.getStartPosition());\n\t\t\tif (word) {\n\t\t\t\tret = new Range(ret.startLineNumber, word.startColumn, ret.endLineNumber, word.endColumn);\n\t\t\t} else {\n\t\t\t\tlet maxColumn = model.getLineLastNonWhitespaceColumn(marker.startLineNumber) ||\n\t\t\t\t\tmodel.getLineMaxColumn(marker.startLineNumber);\n\n\t\t\t\tif (maxColumn === 1) {\n\t\t\t\t\t// empty line\n\t\t\t\t\t// console.warn('marker on empty line:', marker);\n\t\t\t\t} else if (ret.endColumn >= maxColumn) {\n\t\t\t\t\t// behind eol\n\t\t\t\t\tret = new Range(ret.startLineNumber, maxColumn - 1, ret.endLineNumber, maxColumn);\n\t\t\t\t} else {\n\t\t\t\t\t// extend marker to width = 1\n\t\t\t\t\tret = new Range(ret.startLineNumber, ret.startColumn, ret.endLineNumber, ret.endColumn + 1);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (rawMarker.endColumn === Number.MAX_VALUE && rawMarker.startColumn === 1 && ret.startLineNumber === ret.endLineNumber) {\n\t\t\tlet minColumn = model.getLineFirstNonWhitespaceColumn(rawMarker.startLineNumber);\n\t\t\tif (minColumn < ret.endColumn) {\n\t\t\t\tret = new Range(ret.startLineNumber, minColumn, ret.endLineNumber, ret.endColumn);\n\t\t\t\trawMarker.startColumn = minColumn;\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t}\n\n\tprivate static _createDecorationOption(marker: IMarker): editorCommon.IModelDecorationOptions {\n\n\t\tlet className: string;\n\t\tlet color: string;\n\t\tlet darkColor: string;\n\t\tlet hcColor: string;\n\n\t\tswitch (marker.severity) {\n\t\t\tcase Severity.Ignore:\n\t\t\t\t// do something\n\t\t\t\tbreak;\n\t\t\tcase Severity.Warning:\n\t\t\tcase Severity.Info:\n\t\t\t\tclassName = ClassName.EditorWarningDecoration;\n\t\t\t\tcolor = 'rgba(18,136,18,0.7)';\n\t\t\t\tdarkColor = 'rgba(18,136,18,0.7)';\n\t\t\t\thcColor = 'rgba(50,255,50,1)';\n\t\t\t\tbreak;\n\t\t\tcase Severity.Error:\n\t\t\tdefault:\n\t\t\t\tclassName = ClassName.EditorErrorDecoration;\n\t\t\t\tcolor = 'rgba(255,18,18,0.7)';\n\t\t\t\tdarkColor = 'rgba(255,18,18,0.7)';\n\t\t\t\thcColor = 'rgba(255,50,50,1)';\n\t\t\t\tbreak;\n\t\t}\n\n\t\tlet hoverMessage: MarkedString[] = null;\n\t\tlet { message, source } = marker;\n\n\t\tif (typeof message === 'string') {\n\t\t\tmessage = message.trim();\n\n\t\t\tif (source) {\n\t\t\t\tif (/\\n/g.test(message)) {\n\t\t\t\t\tmessage = nls.localize('diagAndSourceMultiline', \"[{0}]\\n{1}\", source, message);\n\t\t\t\t} else {\n\t\t\t\t\tmessage = nls.localize('diagAndSource', \"[{0}] {1}\", source, message);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\thoverMessage = [{ language: '_', value: message }];\n\t\t}\n\n\t\treturn {\n\t\t\tstickiness: editorCommon.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\t\tclassName,\n\t\t\thoverMessage,\n\t\t\tshowIfCollapsed: true,\n\t\t\toverviewRuler: {\n\t\t\t\tcolor,\n\t\t\t\tdarkColor,\n\t\t\t\thcColor,\n\t\t\t\tposition: editorCommon.OverviewRulerLane.Right\n\t\t\t}\n\t\t};\n\t}\n}\n\ninterface IRawConfig {\n\tfiles?: {\n\t\teol?: any;\n\t};\n\teditor?: {\n\t\ttabSize?: any;\n\t\tinsertSpaces?: any;\n\t\tdetectIndentation?: any;\n\t\ttrimAutoWhitespace?: any;\n\t};\n}\n\nconst DEFAULT_EOL = (platform.isLinux || platform.isMacintosh) ? editorCommon.DefaultEndOfLine.LF : editorCommon.DefaultEndOfLine.CRLF;\n\nexport class ModelServiceImpl implements IModelService {\n\tpublic _serviceBrand: any;\n\n\tprivate _markerService: IMarkerService;\n\tprivate _markerServiceSubscription: IDisposable;\n\tprivate _configurationService: IConfigurationService;\n\tprivate _configurationServiceSubscription: IDisposable;\n\n\tprivate _onModelAdded: Emitter;\n\tprivate _onModelRemoved: Emitter;\n\tprivate _onModelModeChanged: Emitter<{ model: editorCommon.IModel; oldModeId: string; }>;\n\n\tprivate _modelCreationOptionsByLanguage: {\n\t\t[language: string]: editorCommon.ITextModelCreationOptions;\n\t};\n\n\t/**\n\t * All the models known in the system.\n\t */\n\tprivate _models: { [modelId: string]: ModelData; };\n\n\tconstructor(\n\t\t@IMarkerService markerService: IMarkerService,\n\t\t@IConfigurationService configurationService: IConfigurationService,\n\t) {\n\t\tthis._markerService = markerService;\n\t\tthis._configurationService = configurationService;\n\t\tthis._models = {};\n\t\tthis._modelCreationOptionsByLanguage = Object.create(null);\n\t\tthis._onModelAdded = new Emitter();\n\t\tthis._onModelRemoved = new Emitter();\n\t\tthis._onModelModeChanged = new Emitter<{ model: editorCommon.IModel; oldModeId: string; }>();\n\n\t\tif (this._markerService) {\n\t\t\tthis._markerServiceSubscription = this._markerService.onMarkerChanged(this._handleMarkerChange, this);\n\t\t}\n\n\t\tthis._configurationServiceSubscription = this._configurationService.onDidUpdateConfiguration(e => this._updateModelOptions());\n\t\tthis._updateModelOptions();\n\t}\n\n\tprivate static _readModelOptions(config: IRawConfig): editorCommon.ITextModelCreationOptions {\n\t\tlet tabSize = EDITOR_MODEL_DEFAULTS.tabSize;\n\t\tif (config.editor && typeof config.editor.tabSize !== 'undefined') {\n\t\t\tlet parsedTabSize = parseInt(config.editor.tabSize, 10);\n\t\t\tif (!isNaN(parsedTabSize)) {\n\t\t\t\ttabSize = parsedTabSize;\n\t\t\t}\n\t\t}\n\n\t\tlet insertSpaces = EDITOR_MODEL_DEFAULTS.insertSpaces;\n\t\tif (config.editor && typeof config.editor.insertSpaces !== 'undefined') {\n\t\t\tinsertSpaces = (config.editor.insertSpaces === 'false' ? false : Boolean(config.editor.insertSpaces));\n\t\t}\n\n\t\tlet newDefaultEOL = DEFAULT_EOL;\n\t\tconst eol = config.files && config.files.eol; // TODO@Sandeep (https://github.com/Microsoft/vscode/issues/29119)\n\t\tif (eol === '\\r\\n') {\n\t\t\tnewDefaultEOL = editorCommon.DefaultEndOfLine.CRLF;\n\t\t} else if (eol === '\\n') {\n\t\t\tnewDefaultEOL = editorCommon.DefaultEndOfLine.LF;\n\t\t}\n\n\t\tlet trimAutoWhitespace = EDITOR_MODEL_DEFAULTS.trimAutoWhitespace;\n\t\tif (config.editor && typeof config.editor.trimAutoWhitespace !== 'undefined') {\n\t\t\ttrimAutoWhitespace = (config.editor.trimAutoWhitespace === 'false' ? false : Boolean(config.editor.trimAutoWhitespace));\n\t\t}\n\n\t\tlet detectIndentation = EDITOR_MODEL_DEFAULTS.detectIndentation;\n\t\tif (config.editor && typeof config.editor.detectIndentation !== 'undefined') {\n\t\t\tdetectIndentation = (config.editor.detectIndentation === 'false' ? false : Boolean(config.editor.detectIndentation));\n\t\t}\n\n\t\treturn {\n\t\t\ttabSize: tabSize,\n\t\t\tinsertSpaces: insertSpaces,\n\t\t\tdetectIndentation: detectIndentation,\n\t\t\tdefaultEOL: newDefaultEOL,\n\t\t\ttrimAutoWhitespace: trimAutoWhitespace\n\t\t};\n\t}\n\n\tpublic getCreationOptions(language: string): editorCommon.ITextModelCreationOptions {\n\t\tlet creationOptions = this._modelCreationOptionsByLanguage[language];\n\t\tif (!creationOptions) {\n\t\t\tcreationOptions = ModelServiceImpl._readModelOptions(this._configurationService.getConfiguration(null, { overrideIdentifier: language }));\n\t\t\tthis._modelCreationOptionsByLanguage[language] = creationOptions;\n\t\t}\n\t\treturn creationOptions;\n\t}\n\n\tprivate _updateModelOptions(): void {\n\t\tlet oldOptionsByLanguage = this._modelCreationOptionsByLanguage;\n\t\tthis._modelCreationOptionsByLanguage = Object.create(null);\n\n\t\t// Update options on all models\n\t\tlet keys = Object.keys(this._models);\n\t\tfor (let i = 0, len = keys.length; i < len; i++) {\n\t\t\tlet modelId = keys[i];\n\t\t\tlet modelData = this._models[modelId];\n\t\t\tconst language = modelData.model.getLanguageIdentifier().language;\n\t\t\tconst oldOptions = oldOptionsByLanguage[language];\n\t\t\tconst newOptions = this.getCreationOptions(language);\n\t\t\tModelServiceImpl._setModelOptionsForModel(modelData.model, newOptions, oldOptions);\n\t\t}\n\t}\n\n\tprivate static _setModelOptionsForModel(model: editorCommon.IModel, newOptions: editorCommon.ITextModelCreationOptions, currentOptions: editorCommon.ITextModelCreationOptions): void {\n\t\tif (currentOptions\n\t\t\t&& (currentOptions.detectIndentation === newOptions.detectIndentation)\n\t\t\t&& (currentOptions.insertSpaces === newOptions.insertSpaces)\n\t\t\t&& (currentOptions.tabSize === newOptions.tabSize)\n\t\t\t&& (currentOptions.trimAutoWhitespace === newOptions.trimAutoWhitespace)\n\t\t) {\n\t\t\t// Same indent opts, no need to touch the model\n\t\t\treturn;\n\t\t}\n\n\t\tif (newOptions.detectIndentation) {\n\t\t\tmodel.detectIndentation(newOptions.insertSpaces, newOptions.tabSize);\n\t\t\tmodel.updateOptions({\n\t\t\t\ttrimAutoWhitespace: newOptions.trimAutoWhitespace\n\t\t\t});\n\t\t} else {\n\t\t\tmodel.updateOptions({\n\t\t\t\tinsertSpaces: newOptions.insertSpaces,\n\t\t\t\ttabSize: newOptions.tabSize,\n\t\t\t\ttrimAutoWhitespace: newOptions.trimAutoWhitespace\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic dispose(): void {\n\t\tif (this._markerServiceSubscription) {\n\t\t\tthis._markerServiceSubscription.dispose();\n\t\t}\n\t\tthis._configurationServiceSubscription.dispose();\n\t}\n\n\tprivate _handleMarkerChange(changedResources: URI[]): void {\n\t\tchangedResources.forEach((resource) => {\n\t\t\tlet modelId = MODEL_ID(resource);\n\t\t\tlet modelData = this._models[modelId];\n\t\t\tif (!modelData) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tModelMarkerHandler.setMarkers(modelData, this._markerService);\n\t\t});\n\t}\n\n\tprivate _cleanUp(model: editorCommon.IModel): void {\n\t\t// clean up markers for internal, transient models\n\t\tif (model.uri.scheme === network.Schemas.inMemory\n\t\t\t|| model.uri.scheme === network.Schemas.internal\n\t\t\t|| model.uri.scheme === network.Schemas.vscode) {\n\t\t\tif (this._markerService) {\n\t\t\t\tthis._markerService.read({ resource: model.uri }).map(marker => marker.owner).forEach(owner => this._markerService.remove(owner, [model.uri]));\n\t\t\t}\n\t\t}\n\t}\n\n\t// --- begin IModelService\n\n\tprivate _createModelData(value: string | IRawTextSource, languageIdentifier: LanguageIdentifier, resource: URI): ModelData {\n\t\t// create & save the model\n\t\tconst options = this.getCreationOptions(languageIdentifier.language);\n\t\tconst rawTextSource = (typeof value === 'string' ? RawTextSource.fromString(value) : value);\n\t\tlet model: Model = new Model(rawTextSource, options, languageIdentifier, resource);\n\t\tlet modelId = MODEL_ID(model.uri);\n\n\t\tif (this._models[modelId]) {\n\t\t\t// There already exists a model with this id => this is a programmer error\n\t\t\tthrow new Error('ModelService: Cannot add model because it already exists!');\n\t\t}\n\n\t\tlet modelData = new ModelData(model, (modelData, events) => this._onModelEvents(modelData, events));\n\t\tthis._models[modelId] = modelData;\n\n\t\treturn modelData;\n\t}\n\n\tpublic updateModel(model: editorCommon.IModel, value: string | IRawTextSource): void {\n\t\tlet options = this.getCreationOptions(model.getLanguageIdentifier().language);\n\t\tconst textSource = TextSource.create(value, options.defaultEOL);\n\n\t\t// Return early if the text is already set in that form\n\t\tif (model.equals(textSource)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Otherwise update model\n\t\tmodel.setValueFromTextSource(textSource);\n\t}\n\n\tpublic createModel(value: string | IRawTextSource, modeOrPromise: TPromise | IMode, resource: URI): editorCommon.IModel {\n\t\tlet modelData: ModelData;\n\n\t\tif (!modeOrPromise || TPromise.is(modeOrPromise)) {\n\t\t\tmodelData = this._createModelData(value, PLAINTEXT_LANGUAGE_IDENTIFIER, resource);\n\t\t\tthis.setMode(modelData.model, modeOrPromise);\n\t\t} else {\n\t\t\tmodelData = this._createModelData(value, modeOrPromise.getLanguageIdentifier(), resource);\n\t\t}\n\n\t\t// handle markers (marker service => model)\n\t\tif (this._markerService) {\n\t\t\tModelMarkerHandler.setMarkers(modelData, this._markerService);\n\t\t}\n\n\t\tthis._onModelAdded.fire(modelData.model);\n\n\t\treturn modelData.model;\n\t}\n\n\tpublic setMode(model: editorCommon.IModel, modeOrPromise: TPromise | IMode): void {\n\t\tif (!modeOrPromise) {\n\t\t\treturn;\n\t\t}\n\t\tif (TPromise.is(modeOrPromise)) {\n\t\t\tmodeOrPromise.then((mode) => {\n\t\t\t\tif (!model.isDisposed()) {\n\t\t\t\t\tmodel.setMode(mode.getLanguageIdentifier());\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tmodel.setMode(modeOrPromise.getLanguageIdentifier());\n\t\t}\n\t}\n\n\tpublic destroyModel(resource: URI): void {\n\t\t// We need to support that not all models get disposed through this service (i.e. model.dispose() should work!)\n\t\tlet modelData = this._models[MODEL_ID(resource)];\n\t\tif (!modelData) {\n\t\t\treturn;\n\t\t}\n\t\tmodelData.model.dispose();\n\t}\n\n\tpublic getModels(): editorCommon.IModel[] {\n\t\tlet ret: editorCommon.IModel[] = [];\n\n\t\tlet keys = Object.keys(this._models);\n\t\tfor (let i = 0, len = keys.length; i < len; i++) {\n\t\t\tlet modelId = keys[i];\n\t\t\tret.push(this._models[modelId].model);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\tpublic getModel(resource: URI): editorCommon.IModel {\n\t\tlet modelId = MODEL_ID(resource);\n\t\tlet modelData = this._models[modelId];\n\t\tif (!modelData) {\n\t\t\treturn null;\n\t\t}\n\t\treturn modelData.model;\n\t}\n\n\tpublic get onModelAdded(): Event {\n\t\treturn this._onModelAdded ? this._onModelAdded.event : null;\n\t}\n\n\tpublic get onModelRemoved(): Event {\n\t\treturn this._onModelRemoved ? this._onModelRemoved.event : null;\n\t}\n\n\tpublic get onModelModeChanged(): Event<{ model: editorCommon.IModel; oldModeId: string; }> {\n\t\treturn this._onModelModeChanged ? this._onModelModeChanged.event : null;\n\t}\n\n\t// --- end IModelService\n\n\tprivate _onModelDisposing(model: editorCommon.IModel): void {\n\t\tlet modelId = MODEL_ID(model.uri);\n\t\tlet modelData = this._models[modelId];\n\n\t\tdelete this._models[modelId];\n\t\tmodelData.dispose();\n\n\t\tthis._cleanUp(model);\n\t\tthis._onModelRemoved.fire(model);\n\t}\n\n\tprivate _onModelEvents(modelData: ModelData, events: EmitterEvent[]): void {\n\n\t\t// First look for dispose\n\t\tfor (let i = 0, len = events.length; i < len; i++) {\n\t\t\tlet e = events[i];\n\t\t\tif (e.type === textModelEvents.TextModelEventType.ModelDispose) {\n\t\t\t\tthis._onModelDisposing(modelData.model);\n\t\t\t\t// no more processing since model got disposed\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Second, look for mode change\n\t\tfor (let i = 0, len = events.length; i < len; i++) {\n\t\t\tlet e = events[i];\n\t\t\tif (e.type === textModelEvents.TextModelEventType.ModelLanguageChanged) {\n\t\t\t\tconst model = modelData.model;\n\t\t\t\tconst oldModeId = (e.data).oldLanguage;\n\t\t\t\tconst newModeId = model.getLanguageIdentifier().language;\n\t\t\t\tconst oldOptions = this.getCreationOptions(oldModeId);\n\t\t\t\tconst newOptions = this.getCreationOptions(newModeId);\n\t\t\t\tModelServiceImpl._setModelOptionsForModel(model, newOptions, oldOptions);\n\t\t\t\tthis._onModelModeChanged.fire({ model, oldModeId });\n\t\t\t}\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/css!./dnd';\nimport { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { isMacintosh } from 'vs/base/common/platform';\nimport { KeyCode } from 'vs/base/common/keyCodes';\nimport { ICodeEditor, IEditorMouseEvent, IMouseTarget, MouseTargetType } from 'vs/editor/browser/editorBrowser';\nimport { editorContribution } from 'vs/editor/browser/editorBrowserExtensions';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { DragAndDropCommand } from '../common/dragAndDropCommand';\nimport { ModelDecorationOptions } from 'vs/editor/common/model/textModelWithDecorations';\n\n@editorContribution\nexport class DragAndDropController implements editorCommon.IEditorContribution {\n\n\tprivate static ID = 'editor.contrib.dragAndDrop';\n\n\tprivate _editor: ICodeEditor;\n\tprivate _toUnhook: IDisposable[];\n\tprivate _dragSelection: Selection;\n\tprivate _dndDecorationIds: string[];\n\tprivate _mouseDown: boolean;\n\tprivate _modiferPressed: boolean;\n\tstatic TRIGGER_MODIFIER = isMacintosh ? 'altKey' : 'ctrlKey';\n\tstatic TRIGGER_KEY_VALUE = isMacintosh ? KeyCode.Alt : KeyCode.Ctrl;\n\n\tstatic get(editor: editorCommon.ICommonCodeEditor): DragAndDropController {\n\t\treturn editor.getContribution(DragAndDropController.ID);\n\t}\n\n\tconstructor(editor: ICodeEditor) {\n\t\tthis._editor = editor;\n\t\tthis._toUnhook = [];\n\t\tthis._toUnhook.push(this._editor.onMouseDown((e: IEditorMouseEvent) => this._onEditorMouseDown(e)));\n\t\tthis._toUnhook.push(this._editor.onMouseUp((e: IEditorMouseEvent) => this._onEditorMouseUp(e)));\n\t\tthis._toUnhook.push(this._editor.onMouseDrag((e: IEditorMouseEvent) => this._onEditorMouseDrag(e)));\n\t\tthis._toUnhook.push(this._editor.onMouseDrop((e: IEditorMouseEvent) => this._onEditorMouseDrop(e)));\n\t\tthis._toUnhook.push(this._editor.onKeyDown((e: IKeyboardEvent) => this.onEditorKeyDown(e)));\n\t\tthis._toUnhook.push(this._editor.onKeyUp((e: IKeyboardEvent) => this.onEditorKeyUp(e)));\n\t\tthis._dndDecorationIds = [];\n\t\tthis._mouseDown = false;\n\t\tthis._modiferPressed = false;\n\t\tthis._dragSelection = null;\n\t}\n\n\tprivate onEditorKeyDown(e: IKeyboardEvent): void {\n\t\tif (!this._editor.getConfiguration().dragAndDrop) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (e[DragAndDropController.TRIGGER_MODIFIER]) {\n\t\t\tthis._modiferPressed = true;\n\t\t}\n\n\t\tif (this._mouseDown && e[DragAndDropController.TRIGGER_MODIFIER]) {\n\t\t\tthis._editor.updateOptions({\n\t\t\t\tmouseStyle: 'copy'\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate onEditorKeyUp(e: IKeyboardEvent): void {\n\t\tif (!this._editor.getConfiguration().dragAndDrop) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (e[DragAndDropController.TRIGGER_MODIFIER]) {\n\t\t\tthis._modiferPressed = false;\n\t\t}\n\n\t\tif (this._mouseDown && e.keyCode === DragAndDropController.TRIGGER_KEY_VALUE) {\n\t\t\tthis._editor.updateOptions({\n\t\t\t\tmouseStyle: 'default'\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate _onEditorMouseDown(mouseEvent: IEditorMouseEvent): void {\n\t\tthis._mouseDown = true;\n\t}\n\n\tprivate _onEditorMouseUp(mouseEvent: IEditorMouseEvent): void {\n\t\tthis._mouseDown = false;\n\t\t// Whenever users release the mouse, the drag and drop operation should finish and the cursor should revert to text.\n\t\tthis._editor.updateOptions({\n\t\t\tmouseStyle: 'text'\n\t\t});\n\t}\n\n\tprivate _onEditorMouseDrag(mouseEvent: IEditorMouseEvent): void {\n\t\tlet target = mouseEvent.target;\n\n\t\tif (this._dragSelection === null) {\n\t\t\tlet possibleSelections = this._editor.getSelections().filter(selection => selection.containsPosition(target.position));\n\t\t\tif (possibleSelections.length === 1) {\n\t\t\t\tthis._dragSelection = possibleSelections[0];\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (mouseEvent.event[DragAndDropController.TRIGGER_MODIFIER]) {\n\t\t\tthis._editor.updateOptions({\n\t\t\t\tmouseStyle: 'copy'\n\t\t\t});\n\t\t} else {\n\t\t\tthis._editor.updateOptions({\n\t\t\t\tmouseStyle: 'default'\n\t\t\t});\n\t\t}\n\n\t\tif (this._dragSelection.containsPosition(target.position)) {\n\t\t\tthis._removeDecoration();\n\t\t} else {\n\t\t\tthis.showAt(target.position);\n\t\t}\n\t}\n\n\tprivate _onEditorMouseDrop(mouseEvent: IEditorMouseEvent): void {\n\t\tif (mouseEvent.target && (this._hitContent(mouseEvent.target) || this._hitMargin(mouseEvent.target)) && mouseEvent.target.position) {\n\t\t\tlet newCursorPosition = new Position(mouseEvent.target.position.lineNumber, mouseEvent.target.position.column);\n\n\t\t\tif (this._dragSelection === null) {\n\t\t\t\tlet newSelections = this._editor.getSelections().map(selection => {\n\t\t\t\t\tif (selection.containsPosition(newCursorPosition)) {\n\t\t\t\t\t\treturn new Selection(newCursorPosition.lineNumber, newCursorPosition.column, newCursorPosition.lineNumber, newCursorPosition.column);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn selection;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tthis._editor.setSelections(newSelections);\n\t\t\t} else if (!this._dragSelection.containsPosition(newCursorPosition) ||\n\t\t\t\t(\n\t\t\t\t\t(\n\t\t\t\t\t\tmouseEvent.event[DragAndDropController.TRIGGER_MODIFIER] ||\n\t\t\t\t\t\tthis._modiferPressed\n\t\t\t\t\t) && (\n\t\t\t\t\t\tthis._dragSelection.getEndPosition().equals(newCursorPosition) || this._dragSelection.getStartPosition().equals(newCursorPosition)\n\t\t\t\t\t) // we allow users to paste content beside the selection\n\t\t\t\t)) {\n\t\t\t\tthis._editor.pushUndoStop();\n\t\t\t\tthis._editor.executeCommand(DragAndDropController.ID, new DragAndDropCommand(this._dragSelection, newCursorPosition, mouseEvent.event[DragAndDropController.TRIGGER_MODIFIER] || this._modiferPressed));\n\t\t\t\tthis._editor.pushUndoStop();\n\t\t\t}\n\t\t}\n\n\t\tthis._editor.updateOptions({\n\t\t\tmouseStyle: 'text'\n\t\t});\n\n\t\tthis._removeDecoration();\n\t\tthis._dragSelection = null;\n\t\tthis._mouseDown = false;\n\t}\n\n\tprivate static _DECORATION_OPTIONS = ModelDecorationOptions.register({\n\t\tclassName: 'dnd-target'\n\t});\n\n\tpublic showAt(position: Position): void {\n\t\tthis._editor.changeDecorations(changeAccessor => {\n\t\t\tlet newDecorations: editorCommon.IModelDeltaDecoration[] = [];\n\t\t\tnewDecorations.push({\n\t\t\t\trange: new Range(position.lineNumber, position.column, position.lineNumber, position.column),\n\t\t\t\toptions: DragAndDropController._DECORATION_OPTIONS\n\t\t\t});\n\n\t\t\tthis._dndDecorationIds = changeAccessor.deltaDecorations(this._dndDecorationIds, newDecorations);\n\t\t});\n\t\tthis._editor.revealPosition(position);\n\t}\n\n\tprivate _removeDecoration(): void {\n\t\tthis._editor.changeDecorations(changeAccessor => {\n\t\t\tchangeAccessor.deltaDecorations(this._dndDecorationIds, []);\n\t\t});\n\t}\n\n\tprivate _hitContent(target: IMouseTarget): boolean {\n\t\treturn target.type === MouseTargetType.CONTENT_TEXT ||\n\t\t\ttarget.type === MouseTargetType.CONTENT_EMPTY;\n\t}\n\n\tprivate _hitMargin(target: IMouseTarget): boolean {\n\t\treturn target.type === MouseTargetType.GUTTER_GLYPH_MARGIN ||\n\t\t\ttarget.type === MouseTargetType.GUTTER_LINE_NUMBERS ||\n\t\t\ttarget.type === MouseTargetType.GUTTER_LINE_DECORATIONS;\n\t}\n\n\tpublic getId(): string {\n\t\treturn DragAndDropController.ID;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._removeDecoration();\n\t\tthis._dragSelection = null;\n\t\tthis._mouseDown = false;\n\t\tthis._modiferPressed = false;\n\t\tthis._toUnhook = dispose(this._toUnhook);\n\t}\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'use strict';\n\nimport 'vs/css!./iPadShowKeyboard';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport * as browser from 'vs/base/browser/browser';\nimport * as dom from 'vs/base/browser/dom';\nimport { IEditorContribution } from 'vs/editor/common/editorCommon';\nimport { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from 'vs/editor/browser/editorBrowser';\nimport { editorContribution } from 'vs/editor/browser/editorBrowserExtensions';\n\n@editorContribution\nexport class IPadShowKeyboard implements IEditorContribution {\n\n\tprivate static ID = 'editor.contrib.iPadShowKeyboard';\n\n\tprivate editor: ICodeEditor;\n\tprivate widget: ShowKeyboardWidget;\n\tprivate toDispose: IDisposable[];\n\n\tconstructor(editor: ICodeEditor) {\n\t\tthis.editor = editor;\n\t\tthis.toDispose = [];\n\t\tif (browser.isIPad) {\n\t\t\tthis.toDispose.push(editor.onDidChangeConfiguration(() => this.update()));\n\t\t\tthis.update();\n\t\t}\n\t}\n\n\tprivate update(): void {\n\t\tvar hasWidget = (!!this.widget);\n\t\tvar shouldHaveWidget = (!this.editor.getConfiguration().readOnly);\n\n\t\tif (!hasWidget && shouldHaveWidget) {\n\n\t\t\tthis.widget = new ShowKeyboardWidget(this.editor);\n\n\t\t} else if (hasWidget && !shouldHaveWidget) {\n\n\t\t\tthis.widget.dispose();\n\t\t\tthis.widget = null;\n\n\t\t}\n\t}\n\n\tpublic getId(): string {\n\t\treturn IPadShowKeyboard.ID;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.toDispose = dispose(this.toDispose);\n\t\tif (this.widget) {\n\t\t\tthis.widget.dispose();\n\t\t\tthis.widget = null;\n\t\t}\n\t}\n}\n\nclass ShowKeyboardWidget implements IOverlayWidget {\n\n\tprivate static ID = 'editor.contrib.ShowKeyboardWidget';\n\n\tprivate editor: ICodeEditor;\n\n\tprivate _domNode: HTMLElement;\n\tprivate _toDispose: IDisposable[];\n\n\tconstructor(editor: ICodeEditor) {\n\t\tthis.editor = editor;\n\t\tthis._domNode = document.createElement('textarea');\n\t\tthis._domNode.className = 'iPadShowKeyboard';\n\n\t\tthis._toDispose = [];\n\t\tthis._toDispose.push(dom.addDisposableListener(this._domNode, 'touchstart', (e) => {\n\t\t\tthis.editor.focus();\n\t\t}));\n\t\tthis._toDispose.push(dom.addDisposableListener(this._domNode, 'focus', (e) => {\n\t\t\tthis.editor.focus();\n\t\t}));\n\n\t\tthis.editor.addOverlayWidget(this);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.editor.removeOverlayWidget(this);\n\t\tthis._toDispose = dispose(this._toDispose);\n\t}\n\n\t// ----- IOverlayWidget API\n\n\tpublic getId(): string {\n\t\treturn ShowKeyboardWidget.ID;\n\t}\n\n\tpublic getDomNode(): HTMLElement {\n\t\treturn this._domNode;\n\t}\n\n\tpublic getPosition(): IOverlayWidgetPosition {\n\t\treturn {\n\t\t\tpreference: OverlayWidgetPositionPreference.BOTTOM_RIGHT_CORNER\n\t\t};\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { IJSONSchema } from 'vs/base/common/jsonSchema';\nimport platform = require('vs/platform/registry/common/platform');\nimport { EventEmitter } from 'vs/base/common/eventEmitter';\nimport { IDisposable } from 'vs/base/common/lifecycle';\n\nexport const Extensions = {\n\tJSONContribution: 'base.contributions.json'\n};\n\nexport interface ISchemaContributions {\n\tschemas?: { [id: string]: IJSONSchema };\n}\n\nexport interface IJSONContributionRegistry {\n\n\t/**\n\t * Register a schema to the registry.\n\t */\n\tregisterSchema(uri: string, unresolvedSchemaContent: IJSONSchema): void;\n\n\t/**\n\t * Get all schemas\n\t */\n\tgetSchemaContributions(): ISchemaContributions;\n\n\t/**\n\t * Adds a change listener\n\t */\n\taddRegistryChangedListener(callback: (e: IJSONContributionRegistryEvent) => void): IDisposable;\n\n}\n\nexport interface IJSONContributionRegistryEvent {\n\n}\n\nfunction normalizeId(id: string) {\n\tif (id.length > 0 && id.charAt(id.length - 1) === '#') {\n\t\treturn id.substring(0, id.length - 1);\n\t}\n\treturn id;\n}\n\n\n\nclass JSONContributionRegistry implements IJSONContributionRegistry {\n\tprivate schemasById: { [id: string]: IJSONSchema };\n\tprivate eventEmitter: EventEmitter;\n\n\tconstructor() {\n\t\tthis.schemasById = {};\n\t\tthis.eventEmitter = new EventEmitter();\n\t}\n\n\tpublic addRegistryChangedListener(callback: (e: IJSONContributionRegistryEvent) => void): IDisposable {\n\t\treturn this.eventEmitter.addListener('registryChanged', callback);\n\t}\n\n\tpublic registerSchema(uri: string, unresolvedSchemaContent: IJSONSchema): void {\n\t\tthis.schemasById[normalizeId(uri)] = unresolvedSchemaContent;\n\t\tthis.eventEmitter.emit('registryChanged', {});\n\t}\n\n\tpublic getSchemaContributions(): ISchemaContributions {\n\t\treturn {\n\t\t\tschemas: this.schemasById,\n\t\t};\n\t}\n\n}\n\nconst jsonContributionRegistry = new JSONContributionRegistry();\nplatform.Registry.add(Extensions.JSONContribution, jsonContributionRegistry);","/*---------------------------------------------------------------------------------------------\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'use strict';\n\nimport nls = require('vs/nls');\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { IJSONSchema } from 'vs/base/common/jsonSchema';\nimport { Registry } from 'vs/platform/registry/common/platform';\nimport types = require('vs/base/common/types');\nimport * as strings from 'vs/base/common/strings';\nimport { IJSONContributionRegistry, Extensions as JSONExtensions } from 'vs/platform/jsonschemas/common/jsonContributionRegistry';\n\nexport const Extensions = {\n\tConfiguration: 'base.contributions.configuration'\n};\n\nexport interface IConfigurationRegistry {\n\n\t/**\n\t * Register a configuration to the registry.\n\t */\n\tregisterConfiguration(configuration: IConfigurationNode): void;\n\n\t/**\n\t * Register multiple configurations to the registry.\n\t */\n\tregisterConfigurations(configurations: IConfigurationNode[], validate?: boolean): void;\n\n\tregisterDefaultConfigurations(defaultConfigurations: IDefaultConfigurationExtension[]): void;\n\n\t/**\n\t * Event that fires whenver a configuratio has been\n\t * registered.\n\t */\n\tonDidRegisterConfiguration: Event;\n\n\t/**\n\t * Returns all configuration nodes contributed to this registry.\n\t */\n\tgetConfigurations(): IConfigurationNode[];\n\n\t/**\n\t * Returns all configurations settings of all configuration nodes contributed to this registry.\n\t */\n\tgetConfigurationProperties(): { [qualifiedKey: string]: IConfigurationPropertySchema };\n\n\t/**\n\t * Register the identifiers for editor configurations\n\t */\n\tregisterOverrideIdentifiers(identifiers: string[]): void;\n}\n\nexport enum ConfigurationScope {\n\tWORKSPACE = 1,\n\tFOLDER\n}\n\nexport interface IConfigurationPropertySchema extends IJSONSchema {\n\toverridable?: boolean;\n\tisExecutable?: boolean;\n\tscope?: ConfigurationScope;\n}\n\nexport interface IConfigurationNode {\n\tid?: string;\n\torder?: number;\n\ttype?: string | string[];\n\ttitle?: string;\n\tdescription?: string;\n\tproperties?: { [path: string]: IConfigurationPropertySchema; };\n\tallOf?: IConfigurationNode[];\n\toverridable?: boolean;\n\tscope?: ConfigurationScope;\n}\n\nexport interface IDefaultConfigurationExtension {\n\tid: string;\n\tname: string;\n\tdefaults: { [key: string]: {} };\n}\n\nconst schemaId = 'vscode://schemas/settings';\nexport const editorConfigurationSchemaId = 'vscode://schemas/settings/editor';\nconst contributionRegistry = Registry.as(JSONExtensions.JSONContribution);\n\nclass ConfigurationRegistry implements IConfigurationRegistry {\n\tprivate configurationContributors: IConfigurationNode[];\n\tprivate configurationProperties: { [qualifiedKey: string]: IJSONSchema };\n\tprivate configurationSchema: IJSONSchema;\n\tprivate editorConfigurationSchema: IJSONSchema;\n\tprivate _onDidRegisterConfiguration: Emitter;\n\tprivate overrideIdentifiers: string[] = [];\n\tprivate overridePropertyPattern: string;\n\n\tconstructor() {\n\t\tthis.configurationContributors = [];\n\t\tthis.configurationSchema = { properties: {}, patternProperties: {}, additionalProperties: false, errorMessage: 'Unknown configuration setting' };\n\t\tthis.editorConfigurationSchema = { properties: {}, patternProperties: {}, additionalProperties: false, errorMessage: 'Unknown editor configuration setting' };\n\t\tthis._onDidRegisterConfiguration = new Emitter();\n\t\tthis.configurationProperties = {};\n\t\tthis.computeOverridePropertyPattern();\n\n\t\tcontributionRegistry.registerSchema(schemaId, this.configurationSchema);\n\t\tcontributionRegistry.registerSchema(editorConfigurationSchemaId, this.editorConfigurationSchema);\n\t}\n\n\tpublic get onDidRegisterConfiguration() {\n\t\treturn this._onDidRegisterConfiguration.event;\n\t}\n\n\tpublic registerConfiguration(configuration: IConfigurationNode, validate: boolean = true): void {\n\t\tthis.registerConfigurations([configuration], validate);\n\t}\n\n\tpublic registerConfigurations(configurations: IConfigurationNode[], validate: boolean = true): void {\n\t\tconfigurations.forEach(configuration => {\n\t\t\tthis.validateAndRegisterProperties(configuration, validate); // fills in defaults\n\t\t\tthis.configurationContributors.push(configuration);\n\t\t\tthis.registerJSONConfiguration(configuration);\n\t\t\tthis.updateSchemaForOverrideSettingsConfiguration(configuration);\n\t\t});\n\n\t\tthis._onDidRegisterConfiguration.fire(this);\n\t}\n\n\tpublic registerOverrideIdentifiers(overrideIdentifiers: string[]): void {\n\t\tthis.overrideIdentifiers.push(...overrideIdentifiers);\n\t\tthis.updateOverridePropertyPatternKey();\n\t}\n\n\tpublic registerDefaultConfigurations(defaultConfigurations: IDefaultConfigurationExtension[]): void {\n\t\tconst configurationNode: IConfigurationNode = {\n\t\t\tid: 'defaultOverrides',\n\t\t\ttitle: nls.localize('defaultConfigurations.title', \"Default Configuration Overrides\"),\n\t\t\tproperties: {}\n\t\t};\n\t\tfor (const defaultConfiguration of defaultConfigurations) {\n\t\t\tfor (const key in defaultConfiguration.defaults) {\n\t\t\t\tconst defaultValue = defaultConfiguration.defaults[key];\n\t\t\t\tif (OVERRIDE_PROPERTY_PATTERN.test(key) && typeof defaultValue === 'object') {\n\t\t\t\t\tconfigurationNode.properties[key] = {\n\t\t\t\t\t\ttype: 'object',\n\t\t\t\t\t\tdefault: defaultValue,\n\t\t\t\t\t\tdescription: nls.localize('overrideSettings.description', \"Configure editor settings to be overridden for {0} language.\", key),\n\t\t\t\t\t\t$ref: editorConfigurationSchemaId\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (Object.keys(configurationNode.properties).length) {\n\t\t\tthis.registerConfiguration(configurationNode, false);\n\t\t}\n\t}\n\n\tprivate validateAndRegisterProperties(configuration: IConfigurationNode, validate: boolean = true, scope: ConfigurationScope = ConfigurationScope.WORKSPACE, overridable: boolean = false) {\n\t\tscope = configuration.scope !== void 0 && configuration.scope !== null ? configuration.scope : scope;\n\t\toverridable = configuration.overridable || overridable;\n\t\tlet properties = configuration.properties;\n\t\tif (properties) {\n\t\t\tfor (let key in properties) {\n\t\t\t\tlet message;\n\t\t\t\tif (validate && (message = validateProperty(key))) {\n\t\t\t\t\tconsole.warn(message);\n\t\t\t\t\tdelete properties[key];\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// fill in default values\n\t\t\t\tlet property = properties[key];\n\t\t\t\tlet defaultValue = property.default;\n\t\t\t\tif (types.isUndefined(defaultValue)) {\n\t\t\t\t\tproperty.default = getDefaultValue(property.type);\n\t\t\t\t}\n\t\t\t\t// Inherit overridable property from parent\n\t\t\t\tif (overridable) {\n\t\t\t\t\tproperty.overridable = true;\n\t\t\t\t}\n\t\t\t\tif (property.scope === void 0) {\n\t\t\t\t\tproperty.scope = scope;\n\t\t\t\t}\n\t\t\t\t// add to properties map\n\t\t\t\tthis.configurationProperties[key] = properties[key];\n\t\t\t}\n\t\t}\n\t\tlet subNodes = configuration.allOf;\n\t\tif (subNodes) {\n\t\t\tfor (let node of subNodes) {\n\t\t\t\tthis.validateAndRegisterProperties(node, validate, scope, overridable);\n\t\t\t}\n\t\t}\n\t}\n\n\tvalidateProperty(property: string): boolean {\n\t\treturn !OVERRIDE_PROPERTY_PATTERN.test(property) && this.getConfigurationProperties()[property] !== void 0;\n\t}\n\n\tgetConfigurations(): IConfigurationNode[] {\n\t\treturn this.configurationContributors;\n\t}\n\n\tgetConfigurationProperties(): { [qualifiedKey: string]: IConfigurationPropertySchema } {\n\t\treturn this.configurationProperties;\n\t}\n\n\tprivate registerJSONConfiguration(configuration: IConfigurationNode) {\n\t\tlet configurationSchema = this.configurationSchema;\n\t\tfunction register(configuration: IConfigurationNode) {\n\t\t\tlet properties = configuration.properties;\n\t\t\tif (properties) {\n\t\t\t\tfor (let key in properties) {\n\t\t\t\t\tconfigurationSchema.properties[key] = properties[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet subNodes = configuration.allOf;\n\t\t\tif (subNodes) {\n\t\t\t\tsubNodes.forEach(register);\n\t\t\t}\n\t\t};\n\t\tregister(configuration);\n\t\tcontributionRegistry.registerSchema(schemaId, configurationSchema);\n\t}\n\n\tprivate updateSchemaForOverrideSettingsConfiguration(configuration: IConfigurationNode): void {\n\t\tif (configuration.id !== SETTINGS_OVERRRIDE_NODE_ID) {\n\t\t\tthis.update(configuration, this.editorConfigurationSchema);\n\t\t\tcontributionRegistry.registerSchema(editorConfigurationSchemaId, this.editorConfigurationSchema);\n\t\t}\n\t}\n\n\tprivate updateOverridePropertyPatternKey(): void {\n\t\tlet patternProperties: IJSONSchema = this.configurationSchema.patternProperties[this.overridePropertyPattern];\n\t\tif (!patternProperties) {\n\t\t\tpatternProperties = {\n\t\t\t\ttype: 'object',\n\t\t\t\tdescription: nls.localize('overrideSettings.defaultDescription', \"Configure editor settings to be overridden for a language.\"),\n\t\t\t\terrorMessage: 'Unknown Identifier. Use language identifiers',\n\t\t\t\t$ref: editorConfigurationSchemaId\n\t\t\t};\n\t\t}\n\t\tdelete this.configurationSchema.patternProperties[this.overridePropertyPattern];\n\t\tthis.computeOverridePropertyPattern();\n\t\tthis.configurationSchema.patternProperties[this.overridePropertyPattern] = patternProperties;\n\t\tcontributionRegistry.registerSchema(schemaId, this.configurationSchema);\n\t}\n\n\tprivate update(configuration: IConfigurationNode, overridePropertiesSchema: IJSONSchema): void {\n\t\tlet properties = configuration.properties;\n\t\tif (properties) {\n\t\t\tfor (let key in properties) {\n\t\t\t\tif (properties[key].overridable) {\n\t\t\t\t\toverridePropertiesSchema.properties[key] = this.getConfigurationProperties()[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tlet subNodes = configuration.allOf;\n\t\tif (subNodes) {\n\t\t\tsubNodes.forEach(subNode => this.update(subNode, overridePropertiesSchema));\n\t\t}\n\t}\n\n\tprivate computeOverridePropertyPattern(): void {\n\t\tthis.overridePropertyPattern = this.overrideIdentifiers.length ? OVERRIDE_PATTERN_WITH_SUBSTITUTION.replace('${0}', this.overrideIdentifiers.map(identifier => strings.createRegExp(identifier, false).source).join('|')) : OVERRIDE_PROPERTY;\n\t}\n}\n\nconst SETTINGS_OVERRRIDE_NODE_ID = 'override';\nconst OVERRIDE_PROPERTY = '\\\\[.*\\\\]$';\nconst OVERRIDE_PATTERN_WITH_SUBSTITUTION = '\\\\[(${0})\\\\]$';\nexport const OVERRIDE_PROPERTY_PATTERN = new RegExp(OVERRIDE_PROPERTY);\n\nfunction getDefaultValue(type: string | string[]): any {\n\tconst t = Array.isArray(type) ? (type)[0] : type;\n\tswitch (t) {\n\t\tcase 'boolean':\n\t\t\treturn false;\n\t\tcase 'integer':\n\t\tcase 'number':\n\t\t\treturn 0;\n\t\tcase 'string':\n\t\t\treturn '';\n\t\tcase 'array':\n\t\t\treturn [];\n\t\tcase 'object':\n\t\t\treturn {};\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\n\nconst configurationRegistry = new ConfigurationRegistry();\nRegistry.add(Extensions.Configuration, configurationRegistry);\n\nexport function validateProperty(property: string): string {\n\tif (OVERRIDE_PROPERTY_PATTERN.test(property)) {\n\t\treturn nls.localize('config.property.languageDefault', \"Cannot register '{0}'. This matches property pattern '\\\\\\\\[.*\\\\\\\\]$' for describing language specific editor settings. Use 'configurationDefaults' contribution.\", property);\n\t}\n\tif (configurationRegistry.getConfigurationProperties()[property] !== void 0) {\n\t\treturn nls.localize('config.property.duplicate', \"Cannot register '{0}'. This property is already registered.\", property);\n\t}\n\treturn null;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport * as objects from 'vs/base/common/objects';\nimport * as platform from 'vs/base/common/platform';\nimport { Extensions, IConfigurationRegistry, IConfigurationNode, ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry';\nimport { Registry } from 'vs/platform/registry/common/platform';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { FontInfo, BareFontInfo } from 'vs/editor/common/config/fontInfo';\nimport { EditorZoom } from 'vs/editor/common/config/editorZoom';\nimport * as editorOptions from 'vs/editor/common/config/editorOptions';\nimport EDITOR_DEFAULTS = editorOptions.EDITOR_DEFAULTS;\nimport EDITOR_FONT_DEFAULTS = editorOptions.EDITOR_FONT_DEFAULTS;\nimport EDITOR_MODEL_DEFAULTS = editorOptions.EDITOR_MODEL_DEFAULTS;\n\n/**\n * Control what pressing Tab does.\n * If it is false, pressing Tab or Shift-Tab will be handled by the editor.\n * If it is true, pressing Tab or Shift-Tab will move the browser focus.\n * Defaults to false.\n */\nexport interface ITabFocus {\n\tonDidChangeTabFocus: Event;\n\tgetTabFocusMode(): boolean;\n\tsetTabFocusMode(tabFocusMode: boolean): void;\n}\n\nexport const TabFocus: ITabFocus = new class {\n\tprivate _tabFocus: boolean = false;\n\n\tprivate _onDidChangeTabFocus: Emitter = new Emitter();\n\tpublic onDidChangeTabFocus: Event = this._onDidChangeTabFocus.event;\n\n\tpublic getTabFocusMode(): boolean {\n\t\treturn this._tabFocus;\n\t}\n\n\tpublic setTabFocusMode(tabFocusMode: boolean): void {\n\t\tif (this._tabFocus === tabFocusMode) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._tabFocus = tabFocusMode;\n\t\tthis._onDidChangeTabFocus.fire(this._tabFocus);\n\t}\n};\n\nexport interface IEnvConfiguration {\n\textraEditorClassName: string;\n\touterWidth: number;\n\touterHeight: number;\n\temptySelectionClipboard: boolean;\n\tpixelRatio: number;\n\tzoomLevel: number;\n\taccessibilitySupport: platform.AccessibilitySupport;\n}\n\nexport abstract class CommonEditorConfiguration extends Disposable implements editorCommon.IConfiguration {\n\n\tprotected _rawOptions: editorOptions.IEditorOptions;\n\tprotected _validatedOptions: editorOptions.IValidatedEditorOptions;\n\tpublic editor: editorOptions.InternalEditorOptions;\n\tprivate _isDominatedByLongLines: boolean;\n\tprivate _lineNumbersDigitCount: number;\n\n\tprivate _onDidChange = this._register(new Emitter());\n\tpublic onDidChange: Event = this._onDidChange.event;\n\n\tconstructor(options: editorOptions.IEditorOptions) {\n\t\tsuper();\n\n\t\t// Do a \"deep clone of sorts\" on the incoming options\n\t\tthis._rawOptions = objects.mixin({}, options || {});\n\t\tthis._rawOptions.scrollbar = objects.mixin({}, this._rawOptions.scrollbar || {});\n\t\tthis._rawOptions.minimap = objects.mixin({}, this._rawOptions.minimap || {});\n\t\tthis._rawOptions.find = objects.mixin({}, this._rawOptions.find || {});\n\n\t\tthis._validatedOptions = editorOptions.EditorOptionsValidator.validate(this._rawOptions, EDITOR_DEFAULTS);\n\t\tthis.editor = null;\n\t\tthis._isDominatedByLongLines = false;\n\t\tthis._lineNumbersDigitCount = 1;\n\n\t\tthis._register(EditorZoom.onDidChangeZoomLevel(_ => this._recomputeOptions()));\n\t\tthis._register(TabFocus.onDidChangeTabFocus(_ => this._recomputeOptions()));\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t}\n\n\tprotected _recomputeOptions(): void {\n\t\tconst oldOptions = this.editor;\n\t\tconst newOptions = this._computeInternalOptions();\n\n\t\tif (oldOptions && oldOptions.equals(newOptions)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.editor = newOptions;\n\n\t\tif (oldOptions) {\n\t\t\tthis._onDidChange.fire(oldOptions.createChangeEvent(newOptions));\n\t\t}\n\t}\n\n\tpublic getRawOptions(): editorOptions.IEditorOptions {\n\t\treturn this._rawOptions;\n\t}\n\n\tprivate _computeInternalOptions(): editorOptions.InternalEditorOptions {\n\t\tconst opts = this._validatedOptions;\n\t\tconst partialEnv = this._getEnvConfiguration();\n\t\tconst bareFontInfo = BareFontInfo.createFromRawSettings(this._rawOptions, partialEnv.zoomLevel);\n\t\tconst env: editorOptions.IEnvironmentalOptions = {\n\t\t\touterWidth: partialEnv.outerWidth,\n\t\t\touterHeight: partialEnv.outerHeight,\n\t\t\tfontInfo: this.readConfiguration(bareFontInfo),\n\t\t\textraEditorClassName: partialEnv.extraEditorClassName,\n\t\t\tisDominatedByLongLines: this._isDominatedByLongLines,\n\t\t\tlineNumbersDigitCount: this._lineNumbersDigitCount,\n\t\t\temptySelectionClipboard: partialEnv.emptySelectionClipboard,\n\t\t\tpixelRatio: partialEnv.pixelRatio,\n\t\t\ttabFocusMode: TabFocus.getTabFocusMode(),\n\t\t\taccessibilitySupport: partialEnv.accessibilitySupport\n\t\t};\n\t\treturn editorOptions.InternalEditorOptionsFactory.createInternalEditorOptions(env, opts);\n\t}\n\n\tpublic updateOptions(newOptions: editorOptions.IEditorOptions): void {\n\t\tthis._rawOptions = objects.mixin(this._rawOptions, newOptions || {});\n\t\tthis._validatedOptions = editorOptions.EditorOptionsValidator.validate(this._rawOptions, EDITOR_DEFAULTS);\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic setIsDominatedByLongLines(isDominatedByLongLines: boolean): void {\n\t\tthis._isDominatedByLongLines = isDominatedByLongLines;\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic setMaxLineNumber(maxLineNumber: number): void {\n\t\tlet digitCount = CommonEditorConfiguration._digitCount(maxLineNumber);\n\t\tif (this._lineNumbersDigitCount === digitCount) {\n\t\t\treturn;\n\t\t}\n\t\tthis._lineNumbersDigitCount = digitCount;\n\t\tthis._recomputeOptions();\n\t}\n\n\tprivate static _digitCount(n: number): number {\n\t\tvar r = 0;\n\t\twhile (n) {\n\t\t\tn = Math.floor(n / 10);\n\t\t\tr++;\n\t\t}\n\t\treturn r ? r : 1;\n\t}\n\tprotected abstract _getEnvConfiguration(): IEnvConfiguration;\n\n\tprotected abstract readConfiguration(styling: BareFontInfo): FontInfo;\n\n}\n\nconst configurationRegistry = Registry.as(Extensions.Configuration);\nconst editorConfiguration: IConfigurationNode = {\n\t'id': 'editor',\n\t'order': 5,\n\t'type': 'object',\n\t'title': nls.localize('editorConfigurationTitle', \"Editor\"),\n\t'overridable': true,\n\t'scope': ConfigurationScope.FOLDER,\n\t'properties': {\n\t\t'editor.fontFamily': {\n\t\t\t'type': 'string',\n\t\t\t'default': EDITOR_FONT_DEFAULTS.fontFamily,\n\t\t\t'description': nls.localize('fontFamily', \"Controls the font family.\")\n\t\t},\n\t\t'editor.fontWeight': {\n\t\t\t'type': 'string',\n\t\t\t'enum': ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'],\n\t\t\t'default': EDITOR_FONT_DEFAULTS.fontWeight,\n\t\t\t'description': nls.localize('fontWeight', \"Controls the font weight.\")\n\t\t},\n\t\t'editor.fontSize': {\n\t\t\t'type': 'number',\n\t\t\t'default': EDITOR_FONT_DEFAULTS.fontSize,\n\t\t\t'description': nls.localize('fontSize', \"Controls the font size in pixels.\")\n\t\t},\n\t\t'editor.lineHeight': {\n\t\t\t'type': 'number',\n\t\t\t'default': EDITOR_FONT_DEFAULTS.lineHeight,\n\t\t\t'description': nls.localize('lineHeight', \"Controls the line height. Use 0 to compute the lineHeight from the fontSize.\")\n\t\t},\n\t\t'editor.letterSpacing': {\n\t\t\t'type': 'number',\n\t\t\t'default': EDITOR_FONT_DEFAULTS.letterSpacing,\n\t\t\t'description': nls.localize('letterSpacing', \"Controls the letter spacing in pixels.\")\n\t\t},\n\t\t'editor.lineNumbers': {\n\t\t\t'type': 'string',\n\t\t\t'enum': ['off', 'on', 'relative'],\n\t\t\t'default': 'on',\n\t\t\t'description': nls.localize('lineNumbers', \"Controls the display of line numbers. Possible values are 'on', 'off', and 'relative'. 'relative' shows the line count from the current cursor position.\")\n\t\t},\n\t\t'editor.rulers': {\n\t\t\t'type': 'array',\n\t\t\t'items': {\n\t\t\t\t'type': 'number'\n\t\t\t},\n\t\t\t'default': EDITOR_DEFAULTS.viewInfo.rulers,\n\t\t\t'description': nls.localize('rulers', \"Columns at which to show vertical rulers\")\n\t\t},\n\t\t'editor.wordSeparators': {\n\t\t\t'type': 'string',\n\t\t\t'default': EDITOR_DEFAULTS.wordSeparators,\n\t\t\t'description': nls.localize('wordSeparators', \"Characters that will be used as word separators when doing word related navigations or operations\")\n\t\t},\n\t\t'editor.tabSize': {\n\t\t\t'type': 'number',\n\t\t\t'default': EDITOR_MODEL_DEFAULTS.tabSize,\n\t\t\t'minimum': 1,\n\t\t\t'description': nls.localize('tabSize', \"The number of spaces a tab is equal to. This setting is overriden based on the file contents when `editor.detectIndentation` is on.\"),\n\t\t\t'errorMessage': nls.localize('tabSize.errorMessage', \"Expected 'number'. Note that the value \\\"auto\\\" has been replaced by the `editor.detectIndentation` setting.\")\n\t\t},\n\t\t'editor.insertSpaces': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_MODEL_DEFAULTS.insertSpaces,\n\t\t\t'description': nls.localize('insertSpaces', \"Insert spaces when pressing Tab. This setting is overriden based on the file contents when `editor.detectIndentation` is on.\"),\n\t\t\t'errorMessage': nls.localize('insertSpaces.errorMessage', \"Expected 'boolean'. Note that the value \\\"auto\\\" has been replaced by the `editor.detectIndentation` setting.\")\n\t\t},\n\t\t'editor.detectIndentation': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_MODEL_DEFAULTS.detectIndentation,\n\t\t\t'description': nls.localize('detectIndentation', \"When opening a file, `editor.tabSize` and `editor.insertSpaces` will be detected based on the file contents.\")\n\t\t},\n\t\t'editor.roundedSelection': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.viewInfo.roundedSelection,\n\t\t\t'description': nls.localize('roundedSelection', \"Controls if selections have rounded corners\")\n\t\t},\n\t\t'editor.scrollBeyondLastLine': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.viewInfo.scrollBeyondLastLine,\n\t\t\t'description': nls.localize('scrollBeyondLastLine', \"Controls if the editor will scroll beyond the last line\")\n\t\t},\n\t\t'editor.minimap.enabled': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.viewInfo.minimap.enabled,\n\t\t\t'description': nls.localize('minimap.enabled', \"Controls if the minimap is shown\")\n\t\t},\n\t\t'editor.minimap.showSlider': {\n\t\t\t'type': 'string',\n\t\t\t'enum': ['always', 'mouseover'],\n\t\t\t'default': EDITOR_DEFAULTS.viewInfo.minimap.showSlider,\n\t\t\t'description': nls.localize('minimap.showSlider', \"Controls whether the minimap slider is automatically hidden.\")\n\t\t},\n\t\t'editor.minimap.renderCharacters': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.viewInfo.minimap.renderCharacters,\n\t\t\t'description': nls.localize('minimap.renderCharacters', \"Render the actual characters on a line (as opposed to color blocks)\")\n\t\t},\n\t\t'editor.minimap.maxColumn': {\n\t\t\t'type': 'number',\n\t\t\t'default': EDITOR_DEFAULTS.viewInfo.minimap.maxColumn,\n\t\t\t'description': nls.localize('minimap.maxColumn', \"Limit the width of the minimap to render at most a certain number of columns\")\n\t\t},\n\t\t'editor.find.seedSearchStringFromSelection': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.contribInfo.find.seedSearchStringFromSelection,\n\t\t\t'description': nls.localize('find.seedSearchStringFromSelection', \"Controls if we seed the search string in Find Widget from editor selection\")\n\t\t},\n\t\t'editor.find.autoFindInSelection': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.contribInfo.find.autoFindInSelection,\n\t\t\t'description': nls.localize('find.autoFindInSelection', \"Controls if Find in Selection flag is turned on when multiple characters or lines of text are selected in the editor\")\n\t\t},\n\t\t'editor.wordWrap': {\n\t\t\t'type': 'string',\n\t\t\t'enum': ['off', 'on', 'wordWrapColumn', 'bounded'],\n\t\t\t'enumDescriptions': [\n\t\t\t\tnls.localize('wordWrap.off', \"Lines will never wrap.\"),\n\t\t\t\tnls.localize('wordWrap.on', \"Lines will wrap at the viewport width.\"),\n\t\t\t\tnls.localize({\n\t\t\t\t\tkey: 'wordWrap.wordWrapColumn',\n\t\t\t\t\tcomment: [\n\t\t\t\t\t\t'- `editor.wordWrapColumn` refers to a different setting and should not be localized.'\n\t\t\t\t\t]\n\t\t\t\t}, \"Lines will wrap at `editor.wordWrapColumn`.\"),\n\t\t\t\tnls.localize({\n\t\t\t\t\tkey: 'wordWrap.bounded',\n\t\t\t\t\tcomment: [\n\t\t\t\t\t\t'- viewport means the edge of the visible window size.',\n\t\t\t\t\t\t'- `editor.wordWrapColumn` refers to a different setting and should not be localized.'\n\t\t\t\t\t]\n\t\t\t\t}, \"Lines will wrap at the minimum of viewport and `editor.wordWrapColumn`.\"),\n\t\t\t],\n\t\t\t'default': EDITOR_DEFAULTS.wordWrap,\n\t\t\t'description': nls.localize({\n\t\t\t\tkey: 'wordWrap',\n\t\t\t\tcomment: [\n\t\t\t\t\t'- \\'off\\', \\'on\\', \\'wordWrapColumn\\' and \\'bounded\\' refer to values the setting can take and should not be localized.',\n\t\t\t\t\t'- `editor.wordWrapColumn` refers to a different setting and should not be localized.'\n\t\t\t\t]\n\t\t\t}, \"Controls how lines should wrap. Can be:\\n - 'off' (disable wrapping),\\n - 'on' (viewport wrapping),\\n - 'wordWrapColumn' (wrap at `editor.wordWrapColumn`) or\\n - 'bounded' (wrap at minimum of viewport and `editor.wordWrapColumn`).\")\n\t\t},\n\t\t'editor.wordWrapColumn': {\n\t\t\t'type': 'integer',\n\t\t\t'default': EDITOR_DEFAULTS.wordWrapColumn,\n\t\t\t'minimum': 1,\n\t\t\t'description': nls.localize({\n\t\t\t\tkey: 'wordWrapColumn',\n\t\t\t\tcomment: [\n\t\t\t\t\t'- `editor.wordWrap` refers to a different setting and should not be localized.',\n\t\t\t\t\t'- \\'wordWrapColumn\\' and \\'bounded\\' refer to values the different setting can take and should not be localized.'\n\t\t\t\t]\n\t\t\t}, \"Controls the wrapping column of the editor when `editor.wordWrap` is 'wordWrapColumn' or 'bounded'.\")\n\t\t},\n\t\t'editor.wrappingIndent': {\n\t\t\t'type': 'string',\n\t\t\t'enum': ['none', 'same', 'indent'],\n\t\t\t'default': 'same',\n\t\t\t'description': nls.localize('wrappingIndent', \"Controls the indentation of wrapped lines. Can be one of 'none', 'same' or 'indent'.\")\n\t\t},\n\t\t'editor.mouseWheelScrollSensitivity': {\n\t\t\t'type': 'number',\n\t\t\t'default': EDITOR_DEFAULTS.viewInfo.scrollbar.mouseWheelScrollSensitivity,\n\t\t\t'description': nls.localize('mouseWheelScrollSensitivity', \"A multiplier to be used on the `deltaX` and `deltaY` of mouse wheel scroll events\")\n\t\t},\n\t\t'editor.multiCursorModifier': {\n\t\t\t'type': 'string',\n\t\t\t'enum': ['ctrlCmd', 'alt'],\n\t\t\t'enumDescriptions': [\n\t\t\t\tnls.localize('multiCursorModifier.ctrlCmd', \"Maps to `Control` on Windows and Linux and to `Command` on OSX.\"),\n\t\t\t\tnls.localize('multiCursorModifier.alt', \"Maps to `Alt` on Windows and Linux and to `Option` on OSX.\")\n\t\t\t],\n\t\t\t'default': 'alt',\n\t\t\t'description': nls.localize({\n\t\t\t\tkey: 'multiCursorModifier',\n\t\t\t\tcomment: [\n\t\t\t\t\t'- `ctrlCmd` refers to a value the setting can take and should not be localized.',\n\t\t\t\t\t'- `Control` and `Command` refer to the modifier keys Ctrl or Cmd on the keyboard and can be localized.'\n\t\t\t\t]\n\t\t\t}, \"The modifier to be used to add multiple cursors with the mouse. `ctrlCmd` maps to `Control` on Windows and Linux and to `Command` on OSX. The Go To Definition and Open Link mouse gestures will adapt such that they do not conflict with the multicursor modifier.\")\n\t\t},\n\t\t'editor.quickSuggestions': {\n\t\t\t'anyOf': [\n\t\t\t\t{\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: 'object',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tstrings: {\n\t\t\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\t\t\tdefault: false,\n\t\t\t\t\t\t\tdescription: nls.localize('quickSuggestions.strings', \"Enable quick suggestions inside strings.\")\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcomments: {\n\t\t\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\t\t\tdefault: false,\n\t\t\t\t\t\t\tdescription: nls.localize('quickSuggestions.comments', \"Enable quick suggestions inside comments.\")\n\t\t\t\t\t\t},\n\t\t\t\t\t\tother: {\n\t\t\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\t\t\tdefault: true,\n\t\t\t\t\t\t\tdescription: nls.localize('quickSuggestions.other', \"Enable quick suggestions outside of strings and comments.\")\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t'default': EDITOR_DEFAULTS.contribInfo.quickSuggestions,\n\t\t\t'description': nls.localize('quickSuggestions', \"Controls if suggestions should automatically show up while typing\")\n\t\t},\n\t\t'editor.quickSuggestionsDelay': {\n\t\t\t'type': 'integer',\n\t\t\t'default': EDITOR_DEFAULTS.contribInfo.quickSuggestionsDelay,\n\t\t\t'minimum': 0,\n\t\t\t'description': nls.localize('quickSuggestionsDelay', \"Controls the delay in ms after which quick suggestions will show up\")\n\t\t},\n\t\t'editor.parameterHints': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.contribInfo.parameterHints,\n\t\t\t'description': nls.localize('parameterHints', \"Enables pop-up that shows parameter documentation and type information as you type\")\n\t\t},\n\t\t'editor.autoClosingBrackets': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.autoClosingBrackets,\n\t\t\t'description': nls.localize('autoClosingBrackets', \"Controls if the editor should automatically close brackets after opening them\")\n\t\t},\n\t\t'editor.formatOnType': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.contribInfo.formatOnType,\n\t\t\t'description': nls.localize('formatOnType', \"Controls if the editor should automatically format the line after typing\")\n\t\t},\n\t\t'editor.formatOnPaste': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.contribInfo.formatOnPaste,\n\t\t\t'description': nls.localize('formatOnPaste', \"Controls if 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.\")\n\t\t},\n\t\t'editor.autoIndent': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.autoIndent,\n\t\t\t'description': nls.localize('autoIndent', \"Controls if the editor should automatically adjust the indentation when users type, paste or move lines. Indentation rules of the language must be available. \")\n\t\t},\n\t\t'editor.suggestOnTriggerCharacters': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.contribInfo.suggestOnTriggerCharacters,\n\t\t\t'description': nls.localize('suggestOnTriggerCharacters', \"Controls if suggestions should automatically show up when typing trigger characters\")\n\t\t},\n\t\t'editor.acceptSuggestionOnEnter': {\n\t\t\t'type': 'string',\n\t\t\t'enum': ['on', 'smart', 'off'],\n\t\t\t'default': EDITOR_DEFAULTS.contribInfo.acceptSuggestionOnEnter,\n\t\t\t'description': nls.localize('acceptSuggestionOnEnter', \"Controls if suggestions should be accepted on 'Enter' - in addition to 'Tab'. Helps to avoid ambiguity between inserting new lines or accepting suggestions. The value 'smart' means only accept a suggestion with Enter when it makes a textual change\")\n\t\t},\n\t\t'editor.acceptSuggestionOnCommitCharacter': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.contribInfo.acceptSuggestionOnCommitCharacter,\n\t\t\t'description': nls.localize('acceptSuggestionOnCommitCharacter', \"Controls if suggestions should be accepted on commit characters. For instance in JavaScript the semi-colon (';') can be a commit character that accepts a suggestion and types that character.\")\n\t\t},\n\t\t'editor.snippetSuggestions': {\n\t\t\t'type': 'string',\n\t\t\t'enum': ['top', 'bottom', 'inline', 'none'],\n\t\t\t'default': EDITOR_DEFAULTS.contribInfo.snippetSuggestions,\n\t\t\t'description': nls.localize('snippetSuggestions', \"Controls whether snippets are shown with other suggestions and how they are sorted.\")\n\t\t},\n\t\t'editor.emptySelectionClipboard': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.emptySelectionClipboard,\n\t\t\t'description': nls.localize('emptySelectionClipboard', \"Controls whether copying without a selection copies the current line.\")\n\t\t},\n\t\t'editor.wordBasedSuggestions': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.contribInfo.wordBasedSuggestions,\n\t\t\t'description': nls.localize('wordBasedSuggestions', \"Controls whether completions should be computed based on words in the document.\")\n\t\t},\n\t\t'editor.suggestFontSize': {\n\t\t\t'type': 'integer',\n\t\t\t'default': 0,\n\t\t\t'minimum': 0,\n\t\t\t'description': nls.localize('suggestFontSize', \"Font size for the suggest widget\")\n\t\t},\n\t\t'editor.suggestLineHeight': {\n\t\t\t'type': 'integer',\n\t\t\t'default': 0,\n\t\t\t'minimum': 0,\n\t\t\t'description': nls.localize('suggestLineHeight', \"Line height for the suggest widget\")\n\t\t},\n\t\t'editor.selectionHighlight': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.contribInfo.selectionHighlight,\n\t\t\t'description': nls.localize('selectionHighlight', \"Controls whether the editor should highlight similar matches to the selection\")\n\t\t},\n\t\t'editor.occurrencesHighlight': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.contribInfo.occurrencesHighlight,\n\t\t\t'description': nls.localize('occurrencesHighlight', \"Controls whether the editor should highlight semantic symbol occurrences\")\n\t\t},\n\t\t'editor.overviewRulerLanes': {\n\t\t\t'type': 'integer',\n\t\t\t'default': 3,\n\t\t\t'description': nls.localize('overviewRulerLanes', \"Controls the number of decorations that can show up at the same position in the overview ruler\")\n\t\t},\n\t\t'editor.overviewRulerBorder': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.viewInfo.overviewRulerBorder,\n\t\t\t'description': nls.localize('overviewRulerBorder', \"Controls if a border should be drawn around the overview ruler.\")\n\t\t},\n\t\t'editor.cursorBlinking': {\n\t\t\t'type': 'string',\n\t\t\t'enum': ['blink', 'smooth', 'phase', 'expand', 'solid'],\n\t\t\t'default': editorOptions.blinkingStyleToString(EDITOR_DEFAULTS.viewInfo.cursorBlinking),\n\t\t\t'description': nls.localize('cursorBlinking', \"Control the cursor animation style, possible values are 'blink', 'smooth', 'phase', 'expand' and 'solid'\")\n\t\t},\n\t\t'editor.mouseWheelZoom': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.viewInfo.mouseWheelZoom,\n\t\t\t'description': nls.localize('mouseWheelZoom', \"Zoom the font of the editor when using mouse wheel and holding Ctrl\")\n\t\t},\n\t\t'editor.cursorStyle': {\n\t\t\t'type': 'string',\n\t\t\t'enum': ['block', 'block-outline', 'line', 'line-thin', 'underline', 'underline-thin'],\n\t\t\t'default': editorOptions.cursorStyleToString(EDITOR_DEFAULTS.viewInfo.cursorStyle),\n\t\t\t'description': nls.localize('cursorStyle', \"Controls the cursor style, accepted values are 'block', 'block-outline', 'line', 'line-thin', 'underline' and 'underline-thin'\")\n\t\t},\n\t\t'editor.fontLigatures': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.viewInfo.fontLigatures,\n\t\t\t'description': nls.localize('fontLigatures', \"Enables font ligatures\")\n\t\t},\n\t\t'editor.hideCursorInOverviewRuler': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.viewInfo.hideCursorInOverviewRuler,\n\t\t\t'description': nls.localize('hideCursorInOverviewRuler', \"Controls if the cursor should be hidden in the overview ruler.\")\n\t\t},\n\t\t'editor.renderWhitespace': {\n\t\t\t'type': 'string',\n\t\t\t'enum': ['none', 'boundary', 'all'],\n\t\t\tdefault: EDITOR_DEFAULTS.viewInfo.renderWhitespace,\n\t\t\tdescription: nls.localize('renderWhitespace', \"Controls how the editor should render whitespace characters, possibilities are 'none', 'boundary', and 'all'. The 'boundary' option does not render single spaces between words.\")\n\t\t},\n\t\t'editor.renderControlCharacters': {\n\t\t\t'type': 'boolean',\n\t\t\tdefault: EDITOR_DEFAULTS.viewInfo.renderControlCharacters,\n\t\t\tdescription: nls.localize('renderControlCharacters', \"Controls whether the editor should render control characters\")\n\t\t},\n\t\t'editor.renderIndentGuides': {\n\t\t\t'type': 'boolean',\n\t\t\tdefault: EDITOR_DEFAULTS.viewInfo.renderIndentGuides,\n\t\t\tdescription: nls.localize('renderIndentGuides', \"Controls whether the editor should render indent guides\")\n\t\t},\n\t\t'editor.renderLineHighlight': {\n\t\t\t'type': 'string',\n\t\t\t'enum': ['none', 'gutter', 'line', 'all'],\n\t\t\tdefault: EDITOR_DEFAULTS.viewInfo.renderLineHighlight,\n\t\t\tdescription: nls.localize('renderLineHighlight', \"Controls how the editor should render the current line highlight, possibilities are 'none', 'gutter', 'line', and 'all'.\")\n\t\t},\n\t\t'editor.codeLens': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.contribInfo.codeLens,\n\t\t\t'description': nls.localize('codeLens', \"Controls if the editor shows code lenses\")\n\t\t},\n\t\t'editor.folding': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.contribInfo.folding,\n\t\t\t'description': nls.localize('folding', \"Controls whether the editor has code folding enabled\")\n\t\t},\n\t\t'editor.showFoldingControls': {\n\t\t\t'type': 'string',\n\t\t\t'enum': ['always', 'mouseover'],\n\t\t\t'default': EDITOR_DEFAULTS.contribInfo.showFoldingControls,\n\t\t\t'description': nls.localize('showFoldingControls', \"Controls whether the fold controls on the gutter are automatically hidden.\")\n\t\t},\n\t\t'editor.matchBrackets': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.contribInfo.matchBrackets,\n\t\t\t'description': nls.localize('matchBrackets', \"Highlight matching brackets when one of them is selected.\")\n\t\t},\n\t\t'editor.glyphMargin': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.viewInfo.glyphMargin,\n\t\t\t'description': nls.localize('glyphMargin', \"Controls whether the editor should render the vertical glyph margin. Glyph margin is mostly used for debugging.\")\n\t\t},\n\t\t'editor.useTabStops': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.useTabStops,\n\t\t\t'description': nls.localize('useTabStops', \"Inserting and deleting whitespace follows tab stops\")\n\t\t},\n\t\t'editor.trimAutoWhitespace': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_MODEL_DEFAULTS.trimAutoWhitespace,\n\t\t\t'description': nls.localize('trimAutoWhitespace', \"Remove trailing auto inserted whitespace\")\n\t\t},\n\t\t'editor.stablePeek': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': false,\n\t\t\t'description': nls.localize('stablePeek', \"Keep peek editors open even when double clicking their content or when hitting Escape.\")\n\t\t},\n\t\t'editor.dragAndDrop': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.dragAndDrop,\n\t\t\t'description': nls.localize('dragAndDrop', \"Controls if the editor should allow to move selections via drag and drop.\")\n\t\t},\n\t\t'editor.accessibilitySupport': {\n\t\t\t'type': 'string',\n\t\t\t'enum': ['auto', 'on', 'off'],\n\t\t\t'enumDescriptions': [\n\t\t\t\tnls.localize('accessibilitySupport.auto', \"The editor will use platform APIs to detect when a Screen Reader is attached.\"),\n\t\t\t\tnls.localize('accessibilitySupport.on', \"The editor will be permanently optimized for usage with a Screen Reader.\"),\n\t\t\t\tnls.localize('accessibilitySupport.off', \"The editor will never be optimized for usage with a Screen Reader.\"),\n\t\t\t],\n\t\t\t'default': EDITOR_DEFAULTS.accessibilitySupport,\n\t\t\t'description': nls.localize('accessibilitySupport', \"Controls whether the editor should run in a mode where it is optimized for screen readers.\")\n\t\t},\n\t\t'editor.links': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': EDITOR_DEFAULTS.contribInfo.links,\n\t\t\t'description': nls.localize('links', \"Controls whether the editor should detect links and make them clickable\")\n\t\t},\n\t\t'diffEditor.renderSideBySide': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': true,\n\t\t\t'description': nls.localize('sideBySide', \"Controls if the diff editor shows the diff side by side or inline\")\n\t\t},\n\t\t'diffEditor.ignoreTrimWhitespace': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': true,\n\t\t\t'description': nls.localize('ignoreTrimWhitespace', \"Controls if the diff editor shows changes in leading or trailing whitespace as diffs\")\n\t\t},\n\t\t'diffEditor.renderIndicators': {\n\t\t\t'type': 'boolean',\n\t\t\t'default': true,\n\t\t\t'description': nls.localize('renderIndicators', \"Controls if the diff editor shows +/- indicators for added/removed changes\")\n\t\t}\n\t}\n};\n\nif (platform.isLinux) {\n\teditorConfiguration['properties']['editor.selectionClipboard'] = {\n\t\t'type': 'boolean',\n\t\t'default': EDITOR_DEFAULTS.contribInfo.selectionClipboard,\n\t\t'description': nls.localize('selectionClipboard', \"Controls if the Linux primary clipboard should be supported.\")\n\t};\n}\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport * as mime from 'vs/base/common/mime';\nimport * as strings from 'vs/base/common/strings';\nimport { Registry } from 'vs/platform/registry/common/platform';\nimport { ModesRegistry } from 'vs/editor/common/modes/modesRegistry';\nimport { ILanguageExtensionPoint } from 'vs/editor/common/services/modeService';\nimport { LanguageId, LanguageIdentifier } from 'vs/editor/common/modes';\nimport { NULL_MODE_ID, NULL_LANGUAGE_IDENTIFIER } from 'vs/editor/common/modes/nullMode';\nimport { IConfigurationRegistry, Extensions } from 'vs/platform/configuration/common/configurationRegistry';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nexport interface IResolvedLanguage {\n\tidentifier: LanguageIdentifier;\n\tname: string;\n\tmimetypes: string[];\n\taliases: string[];\n\textensions: string[];\n\tfilenames: string[];\n\tconfigurationFiles: string[];\n}\n\nexport class LanguagesRegistry {\n\n\tprivate _nextLanguageId: number;\n\tprivate _languages: { [id: string]: IResolvedLanguage; };\n\tprivate _languageIds: string[];\n\n\tprivate _mimeTypesMap: { [mimeType: string]: LanguageIdentifier; };\n\tprivate _nameMap: { [name: string]: LanguageIdentifier; };\n\tprivate _lowercaseNameMap: { [name: string]: LanguageIdentifier; };\n\n\tconstructor(useModesRegistry = true) {\n\t\tthis._nextLanguageId = 1;\n\t\tthis._languages = {};\n\t\tthis._mimeTypesMap = {};\n\t\tthis._nameMap = {};\n\t\tthis._lowercaseNameMap = {};\n\t\tthis._languageIds = [];\n\n\t\tif (useModesRegistry) {\n\t\t\tthis._registerLanguages(ModesRegistry.getLanguages());\n\t\t\tModesRegistry.onDidAddLanguages((m) => this._registerLanguages(m));\n\t\t}\n\t}\n\n\t_registerLanguages(desc: ILanguageExtensionPoint[]): void {\n\t\tif (desc.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (let i = 0; i < desc.length; i++) {\n\t\t\tthis._registerLanguage(desc[i]);\n\t\t}\n\n\t\t// Rebuild fast path maps\n\t\tthis._mimeTypesMap = {};\n\t\tthis._nameMap = {};\n\t\tthis._lowercaseNameMap = {};\n\t\tObject.keys(this._languages).forEach((langId) => {\n\t\t\tlet language = this._languages[langId];\n\t\t\tif (language.name) {\n\t\t\t\tthis._nameMap[language.name] = language.identifier;\n\t\t\t}\n\t\t\tlanguage.aliases.forEach((alias) => {\n\t\t\t\tthis._lowercaseNameMap[alias.toLowerCase()] = language.identifier;\n\t\t\t});\n\t\t\tlanguage.mimetypes.forEach((mimetype) => {\n\t\t\t\tthis._mimeTypesMap[mimetype] = language.identifier;\n\t\t\t});\n\t\t});\n\n\t\tRegistry.as(Extensions.Configuration).registerOverrideIdentifiers(ModesRegistry.getLanguages().map(language => language.id));\n\t}\n\n\tprivate _registerLanguage(lang: ILanguageExtensionPoint): void {\n\t\tconst langId = lang.id;\n\n\t\tlet resolvedLanguage: IResolvedLanguage = null;\n\t\tif (hasOwnProperty.call(this._languages, langId)) {\n\t\t\tresolvedLanguage = this._languages[langId];\n\t\t} else {\n\t\t\tlet languageId = this._nextLanguageId++;\n\t\t\tresolvedLanguage = {\n\t\t\t\tidentifier: new LanguageIdentifier(langId, languageId),\n\t\t\t\tname: null,\n\t\t\t\tmimetypes: [],\n\t\t\t\taliases: [],\n\t\t\t\textensions: [],\n\t\t\t\tfilenames: [],\n\t\t\t\tconfigurationFiles: []\n\t\t\t};\n\t\t\tthis._languageIds[languageId] = langId;\n\t\t\tthis._languages[langId] = resolvedLanguage;\n\t\t}\n\n\t\tLanguagesRegistry._mergeLanguage(resolvedLanguage, lang);\n\t}\n\n\tprivate static _mergeLanguage(resolvedLanguage: IResolvedLanguage, lang: ILanguageExtensionPoint): void {\n\t\tconst langId = lang.id;\n\n\t\tlet primaryMime: string = null;\n\n\t\tif (typeof lang.mimetypes !== 'undefined' && Array.isArray(lang.mimetypes)) {\n\t\t\tfor (let i = 0; i < lang.mimetypes.length; i++) {\n\t\t\t\tif (!primaryMime) {\n\t\t\t\t\tprimaryMime = lang.mimetypes[i];\n\t\t\t\t}\n\t\t\t\tresolvedLanguage.mimetypes.push(lang.mimetypes[i]);\n\t\t\t}\n\t\t}\n\n\t\tif (!primaryMime) {\n\t\t\tprimaryMime = `text/x-${langId}`;\n\t\t\tresolvedLanguage.mimetypes.push(primaryMime);\n\t\t}\n\n\t\tif (Array.isArray(lang.extensions)) {\n\t\t\tfor (let extension of lang.extensions) {\n\t\t\t\tmime.registerTextMime({ id: langId, mime: primaryMime, extension: extension });\n\t\t\t\tresolvedLanguage.extensions.push(extension);\n\t\t\t}\n\t\t}\n\n\t\tif (Array.isArray(lang.filenames)) {\n\t\t\tfor (let filename of lang.filenames) {\n\t\t\t\tmime.registerTextMime({ id: langId, mime: primaryMime, filename: filename });\n\t\t\t\tresolvedLanguage.filenames.push(filename);\n\t\t\t}\n\t\t}\n\n\t\tif (Array.isArray(lang.filenamePatterns)) {\n\t\t\tfor (let filenamePattern of lang.filenamePatterns) {\n\t\t\t\tmime.registerTextMime({ id: langId, mime: primaryMime, filepattern: filenamePattern });\n\t\t\t}\n\t\t}\n\n\t\tif (typeof lang.firstLine === 'string' && lang.firstLine.length > 0) {\n\t\t\tlet firstLineRegexStr = lang.firstLine;\n\t\t\tif (firstLineRegexStr.charAt(0) !== '^') {\n\t\t\t\tfirstLineRegexStr = '^' + firstLineRegexStr;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tlet firstLineRegex = new RegExp(firstLineRegexStr);\n\t\t\t\tif (!strings.regExpLeadsToEndlessLoop(firstLineRegex)) {\n\t\t\t\t\tmime.registerTextMime({ id: langId, mime: primaryMime, firstline: firstLineRegex });\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t// Most likely, the regex was bad\n\t\t\t\tonUnexpectedError(err);\n\t\t\t}\n\t\t}\n\n\t\tresolvedLanguage.aliases.push(langId);\n\n\t\tlet langAliases: string[] = null;\n\t\tif (typeof lang.aliases !== 'undefined' && Array.isArray(lang.aliases)) {\n\t\t\tif (lang.aliases.length === 0) {\n\t\t\t\t// signal that this language should not get a name\n\t\t\t\tlangAliases = [null];\n\t\t\t} else {\n\t\t\t\tlangAliases = lang.aliases;\n\t\t\t}\n\t\t}\n\n\t\tif (langAliases !== null) {\n\t\t\tfor (let i = 0; i < langAliases.length; i++) {\n\t\t\t\tif (!langAliases[i] || langAliases[i].length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tresolvedLanguage.aliases.push(langAliases[i]);\n\t\t\t}\n\t\t}\n\n\t\tlet containsAliases = (langAliases !== null && langAliases.length > 0);\n\t\tif (containsAliases && langAliases[0] === null) {\n\t\t\t// signal that this language should not get a name\n\t\t} else {\n\t\t\tlet bestName = (containsAliases ? langAliases[0] : null) || langId;\n\t\t\tif (containsAliases || !resolvedLanguage.name) {\n\t\t\t\tresolvedLanguage.name = bestName;\n\t\t\t}\n\t\t}\n\n\t\tif (typeof lang.configuration === 'string') {\n\t\t\tresolvedLanguage.configurationFiles.push(lang.configuration);\n\t\t}\n\t}\n\n\tpublic isRegisteredMode(mimetypeOrModeId: string): boolean {\n\t\t// Is this a known mime type ?\n\t\tif (hasOwnProperty.call(this._mimeTypesMap, mimetypeOrModeId)) {\n\t\t\treturn true;\n\t\t}\n\t\t// Is this a known mode id ?\n\t\treturn hasOwnProperty.call(this._languages, mimetypeOrModeId);\n\t}\n\n\tpublic getRegisteredModes(): string[] {\n\t\treturn Object.keys(this._languages);\n\t}\n\n\tpublic getRegisteredLanguageNames(): string[] {\n\t\treturn Object.keys(this._nameMap);\n\t}\n\n\tpublic getLanguageName(modeId: string): string {\n\t\tif (!hasOwnProperty.call(this._languages, modeId)) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._languages[modeId].name;\n\t}\n\n\tpublic getModeIdForLanguageNameLowercase(languageNameLower: string): string {\n\t\tif (!hasOwnProperty.call(this._lowercaseNameMap, languageNameLower)) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._lowercaseNameMap[languageNameLower].language;\n\t}\n\n\tpublic getConfigurationFiles(modeId: string): string[] {\n\t\tif (!hasOwnProperty.call(this._languages, modeId)) {\n\t\t\treturn [];\n\t\t}\n\t\treturn this._languages[modeId].configurationFiles || [];\n\t}\n\n\tpublic getMimeForMode(modeId: string): string {\n\t\tif (!hasOwnProperty.call(this._languages, modeId)) {\n\t\t\treturn null;\n\t\t}\n\t\tconst language = this._languages[modeId];\n\t\treturn (language.mimetypes[0] || null);\n\t}\n\n\tpublic extractModeIds(commaSeparatedMimetypesOrCommaSeparatedIds: string): string[] {\n\t\tif (!commaSeparatedMimetypesOrCommaSeparatedIds) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn (\n\t\t\tcommaSeparatedMimetypesOrCommaSeparatedIds.\n\t\t\t\tsplit(',').\n\t\t\t\tmap((mimeTypeOrId) => mimeTypeOrId.trim()).\n\t\t\t\tmap((mimeTypeOrId) => {\n\t\t\t\t\tif (hasOwnProperty.call(this._mimeTypesMap, mimeTypeOrId)) {\n\t\t\t\t\t\treturn this._mimeTypesMap[mimeTypeOrId].language;\n\t\t\t\t\t}\n\t\t\t\t\treturn mimeTypeOrId;\n\t\t\t\t}).\n\t\t\t\tfilter((modeId) => {\n\t\t\t\t\treturn hasOwnProperty.call(this._languages, modeId);\n\t\t\t\t})\n\t\t);\n\t}\n\n\tpublic getLanguageIdentifier(_modeId: string | LanguageId): LanguageIdentifier {\n\t\tif (_modeId === NULL_MODE_ID || _modeId === LanguageId.Null) {\n\t\t\treturn NULL_LANGUAGE_IDENTIFIER;\n\t\t}\n\n\t\tlet modeId: string;\n\t\tif (typeof _modeId === 'string') {\n\t\t\tmodeId = _modeId;\n\t\t} else {\n\t\t\tmodeId = this._languageIds[_modeId];\n\t\t\tif (!modeId) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tif (!hasOwnProperty.call(this._languages, modeId)) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._languages[modeId].identifier;\n\t}\n\n\tpublic getModeIdsFromLanguageName(languageName: string): string[] {\n\t\tif (!languageName) {\n\t\t\treturn [];\n\t\t}\n\t\tif (hasOwnProperty.call(this._nameMap, languageName)) {\n\t\t\treturn [this._nameMap[languageName].language];\n\t\t}\n\t\treturn [];\n\t}\n\n\tpublic getModeIdsFromFilenameOrFirstLine(filename: string, firstLine?: string): string[] {\n\t\tif (!filename && !firstLine) {\n\t\t\treturn [];\n\t\t}\n\t\tvar mimeTypes = mime.guessMimeTypes(filename, firstLine);\n\t\treturn this.extractModeIds(mimeTypes.join(','));\n\t}\n\n\tpublic getExtensions(languageName: string): string[] {\n\t\tif (!hasOwnProperty.call(this._nameMap, languageName)) {\n\t\t\treturn [];\n\t\t}\n\t\tconst languageId = this._nameMap[languageName];\n\t\treturn this._languages[languageId.language].extensions;\n\t}\n\n\tpublic getFilenames(languageName: string): string[] {\n\t\tif (!hasOwnProperty.call(this._nameMap, languageName)) {\n\t\t\treturn [];\n\t\t}\n\t\tconst languageId = this._nameMap[languageName];\n\t\treturn this._languages[languageId.language].filenames;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IMode, LanguageId, LanguageIdentifier } from 'vs/editor/common/modes';\nimport { FrankensteinMode } from 'vs/editor/common/modes/abstractMode';\nimport { LanguagesRegistry } from 'vs/editor/common/services/languagesRegistry';\nimport { IModeLookupResult, IModeService } from 'vs/editor/common/services/modeService';\n\nexport class ModeServiceImpl implements IModeService {\n\tpublic _serviceBrand: any;\n\n\tprivate readonly _instantiatedModes: { [modeId: string]: IMode; };\n\tprivate readonly _registry: LanguagesRegistry;\n\n\tprivate readonly _onDidCreateMode: Emitter = new Emitter();\n\tpublic readonly onDidCreateMode: Event = this._onDidCreateMode.event;\n\n\tconstructor() {\n\t\tthis._instantiatedModes = {};\n\n\t\tthis._registry = new LanguagesRegistry();\n\t}\n\n\tprotected _onReady(): TPromise {\n\t\treturn TPromise.as(true);\n\t}\n\n\tpublic isRegisteredMode(mimetypeOrModeId: string): boolean {\n\t\treturn this._registry.isRegisteredMode(mimetypeOrModeId);\n\t}\n\n\tpublic getRegisteredModes(): string[] {\n\t\treturn this._registry.getRegisteredModes();\n\t}\n\n\tpublic getRegisteredLanguageNames(): string[] {\n\t\treturn this._registry.getRegisteredLanguageNames();\n\t}\n\n\tpublic getExtensions(alias: string): string[] {\n\t\treturn this._registry.getExtensions(alias);\n\t}\n\n\tpublic getFilenames(alias: string): string[] {\n\t\treturn this._registry.getFilenames(alias);\n\t}\n\n\tpublic getMimeForMode(modeId: string): string {\n\t\treturn this._registry.getMimeForMode(modeId);\n\t}\n\n\tpublic getLanguageName(modeId: string): string {\n\t\treturn this._registry.getLanguageName(modeId);\n\t}\n\n\tpublic getModeIdForLanguageName(alias: string): string {\n\t\treturn this._registry.getModeIdForLanguageNameLowercase(alias);\n\t}\n\n\tpublic getModeIdByFilenameOrFirstLine(filename: string, firstLine?: string): string {\n\t\tvar modeIds = this._registry.getModeIdsFromFilenameOrFirstLine(filename, firstLine);\n\n\t\tif (modeIds.length > 0) {\n\t\t\treturn modeIds[0];\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tpublic getModeId(commaSeparatedMimetypesOrCommaSeparatedIds: string): string {\n\t\tvar modeIds = this._registry.extractModeIds(commaSeparatedMimetypesOrCommaSeparatedIds);\n\n\t\tif (modeIds.length > 0) {\n\t\t\treturn modeIds[0];\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tpublic getLanguageIdentifier(modeId: string | LanguageId): LanguageIdentifier {\n\t\treturn this._registry.getLanguageIdentifier(modeId);\n\t}\n\n\tpublic getConfigurationFiles(modeId: string): string[] {\n\t\treturn this._registry.getConfigurationFiles(modeId);\n\t}\n\n\t// --- instantiation\n\n\tpublic lookup(commaSeparatedMimetypesOrCommaSeparatedIds: string): IModeLookupResult[] {\n\t\tvar r: IModeLookupResult[] = [];\n\t\tvar modeIds = this._registry.extractModeIds(commaSeparatedMimetypesOrCommaSeparatedIds);\n\n\t\tfor (var i = 0; i < modeIds.length; i++) {\n\t\t\tvar modeId = modeIds[i];\n\n\t\t\tr.push({\n\t\t\t\tmodeId: modeId,\n\t\t\t\tisInstantiated: this._instantiatedModes.hasOwnProperty(modeId)\n\t\t\t});\n\t\t}\n\n\t\treturn r;\n\t}\n\n\tpublic getMode(commaSeparatedMimetypesOrCommaSeparatedIds: string): IMode {\n\t\tvar modeIds = this._registry.extractModeIds(commaSeparatedMimetypesOrCommaSeparatedIds);\n\n\t\tvar isPlainText = false;\n\t\tfor (var i = 0; i < modeIds.length; i++) {\n\t\t\tif (this._instantiatedModes.hasOwnProperty(modeIds[i])) {\n\t\t\t\treturn this._instantiatedModes[modeIds[i]];\n\t\t\t}\n\t\t\tisPlainText = isPlainText || (modeIds[i] === 'plaintext');\n\t\t}\n\n\t\tif (isPlainText) {\n\t\t\t// Try to do it synchronously\n\t\t\tvar r: IMode = null;\n\t\t\tthis.getOrCreateMode(commaSeparatedMimetypesOrCommaSeparatedIds).then((mode) => {\n\t\t\t\tr = mode;\n\t\t\t}).done(null, onUnexpectedError);\n\t\t\treturn r;\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic getOrCreateMode(commaSeparatedMimetypesOrCommaSeparatedIds: string): TPromise {\n\t\treturn this._onReady().then(() => {\n\t\t\tvar modeId = this.getModeId(commaSeparatedMimetypesOrCommaSeparatedIds);\n\t\t\t// Fall back to plain text if no mode was found\n\t\t\treturn this._getOrCreateMode(modeId || 'plaintext');\n\t\t});\n\t}\n\n\tpublic getOrCreateModeByLanguageName(languageName: string): TPromise {\n\t\treturn this._onReady().then(() => {\n\t\t\tvar modeId = this._getModeIdByLanguageName(languageName);\n\t\t\t// Fall back to plain text if no mode was found\n\t\t\treturn this._getOrCreateMode(modeId || 'plaintext');\n\t\t});\n\t}\n\n\tprivate _getModeIdByLanguageName(languageName: string): string {\n\t\tvar modeIds = this._registry.getModeIdsFromLanguageName(languageName);\n\n\t\tif (modeIds.length > 0) {\n\t\t\treturn modeIds[0];\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tpublic getOrCreateModeByFilenameOrFirstLine(filename: string, firstLine?: string): TPromise {\n\t\treturn this._onReady().then(() => {\n\t\t\tvar modeId = this.getModeIdByFilenameOrFirstLine(filename, firstLine);\n\t\t\t// Fall back to plain text if no mode was found\n\t\t\treturn this._getOrCreateMode(modeId || 'plaintext');\n\t\t});\n\t}\n\n\tprivate _getOrCreateMode(modeId: string): IMode {\n\t\tif (!this._instantiatedModes.hasOwnProperty(modeId)) {\n\t\t\tlet languageIdentifier = this.getLanguageIdentifier(modeId);\n\t\t\tthis._instantiatedModes[modeId] = new FrankensteinMode(languageIdentifier);\n\n\t\t\tthis._onDidCreateMode.fire(this._instantiatedModes[modeId]);\n\t\t}\n\t\treturn this._instantiatedModes[modeId];\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Registry } from 'vs/platform/registry/common/platform';\nimport * as json from 'vs/base/common/json';\nimport { IConfigurationRegistry, Extensions, OVERRIDE_PROPERTY_PATTERN } from 'vs/platform/configuration/common/configurationRegistry';\nimport { ConfigurationModel, IOverrides } from 'vs/platform/configuration/common/configuration';\n\nexport function getDefaultValues(): any {\n\tconst valueTreeRoot: any = Object.create(null);\n\tconst properties = Registry.as(Extensions.Configuration).getConfigurationProperties();\n\n\tfor (let key in properties) {\n\t\tlet value = properties[key].default;\n\t\taddToValueTree(valueTreeRoot, key, value, message => console.error(`Conflict in default settings: ${message}`));\n\t}\n\n\treturn valueTreeRoot;\n}\n\nexport function toValuesTree(properties: { [qualifiedKey: string]: any }, conflictReporter: (message: string) => void): any {\n\tconst root = Object.create(null);\n\n\tfor (let key in properties) {\n\t\taddToValueTree(root, key, properties[key], conflictReporter);\n\t}\n\n\treturn root;\n}\n\nfunction addToValueTree(settingsTreeRoot: any, key: string, value: any, conflictReporter: (message: string) => void): void {\n\tconst segments = key.split('.');\n\tconst last = segments.pop();\n\n\tlet curr = settingsTreeRoot;\n\tfor (let i = 0; i < segments.length; i++) {\n\t\tlet s = segments[i];\n\t\tlet obj = curr[s];\n\t\tswitch (typeof obj) {\n\t\t\tcase 'undefined':\n\t\t\t\tobj = curr[s] = Object.create(null);\n\t\t\t\tbreak;\n\t\t\tcase 'object':\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tconflictReporter(`Ignoring ${key} as ${segments.slice(0, i + 1).join('.')} is ${JSON.stringify(obj)}`);\n\t\t\t\treturn;\n\t\t}\n\t\tcurr = obj;\n\t};\n\n\tif (typeof curr === 'object') {\n\t\tcurr[last] = value; // workaround https://github.com/Microsoft/vscode/issues/13606\n\t} else {\n\t\tconflictReporter(`Ignoring ${key} as ${segments.join('.')} is ${JSON.stringify(curr)}`);\n\t}\n}\n\nexport function getConfigurationKeys(): string[] {\n\tconst properties = Registry.as(Extensions.Configuration).getConfigurationProperties();\n\n\treturn Object.keys(properties);\n}\n\nexport class DefaultConfigurationModel extends ConfigurationModel {\n\n\tconstructor() {\n\t\tsuper(getDefaultValues());\n\t\tthis._keys = getConfigurationKeys();\n\t\tthis._overrides = Object.keys(this._contents)\n\t\t\t.filter(key => OVERRIDE_PROPERTY_PATTERN.test(key))\n\t\t\t.map(key => {\n\t\t\t\treturn >{\n\t\t\t\t\tidentifiers: [overrideIdentifierFromKey(key).trim()],\n\t\t\t\t\tcontents: toValuesTree(this._contents[key], message => console.error(`Conflict in default settings file: ${message}`))\n\t\t\t\t};\n\t\t\t});\n\t}\n\n\tpublic get keys(): string[] {\n\t\treturn this._keys;\n\t}\n}\n\ninterface Overrides extends IOverrides {\n\traw: any;\n}\n\nexport class CustomConfigurationModel extends ConfigurationModel {\n\n\tprotected _parseErrors: any[] = [];\n\n\tconstructor(content: string = '', private name: string = '') {\n\t\tsuper();\n\t\tif (content) {\n\t\t\tthis.update(content);\n\t\t}\n\t}\n\n\tpublic get errors(): any[] {\n\t\treturn this._parseErrors;\n\t}\n\n\tpublic update(content: string): void {\n\t\tlet parsed: T = {};\n\t\tlet overrides: Overrides[] = [];\n\t\tlet currentProperty: string = null;\n\t\tlet currentParent: any = [];\n\t\tlet previousParents: any[] = [];\n\t\tlet parseErrors: json.ParseError[] = [];\n\n\t\tfunction onValue(value: any) {\n\t\t\tif (Array.isArray(currentParent)) {\n\t\t\t\t(currentParent).push(value);\n\t\t\t} else if (currentProperty) {\n\t\t\t\tcurrentParent[currentProperty] = value;\n\t\t\t}\n\t\t\tif (OVERRIDE_PROPERTY_PATTERN.test(currentProperty)) {\n\t\t\t\tonOverrideSettingsValue(currentProperty, value);\n\t\t\t}\n\t\t}\n\n\t\tfunction onOverrideSettingsValue(property: string, value: any): void {\n\t\t\toverrides.push({\n\t\t\t\tidentifiers: [overrideIdentifierFromKey(property).trim()],\n\t\t\t\traw: value,\n\t\t\t\tcontents: null\n\t\t\t});\n\t\t}\n\n\t\tlet visitor: json.JSONVisitor = {\n\t\t\tonObjectBegin: () => {\n\t\t\t\tlet object = {};\n\t\t\t\tonValue(object);\n\t\t\t\tpreviousParents.push(currentParent);\n\t\t\t\tcurrentParent = object;\n\t\t\t\tcurrentProperty = null;\n\t\t\t},\n\t\t\tonObjectProperty: (name: string) => {\n\t\t\t\tcurrentProperty = name;\n\t\t\t},\n\t\t\tonObjectEnd: () => {\n\t\t\t\tcurrentParent = previousParents.pop();\n\t\t\t},\n\t\t\tonArrayBegin: () => {\n\t\t\t\tlet array = [];\n\t\t\t\tonValue(array);\n\t\t\t\tpreviousParents.push(currentParent);\n\t\t\t\tcurrentParent = array;\n\t\t\t\tcurrentProperty = null;\n\t\t\t},\n\t\t\tonArrayEnd: () => {\n\t\t\t\tcurrentParent = previousParents.pop();\n\t\t\t},\n\t\t\tonLiteralValue: onValue,\n\t\t\tonError: (error: json.ParseErrorCode) => {\n\t\t\t\tparseErrors.push({ error: error });\n\t\t\t}\n\t\t};\n\t\tif (content) {\n\t\t\ttry {\n\t\t\t\tjson.visit(content, visitor);\n\t\t\t\tparsed = currentParent[0] || {};\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(`Error while parsing settings file ${this.name}: ${e}`);\n\t\t\t\tthis._parseErrors = [e];\n\t\t\t}\n\t\t}\n\t\tthis.processRaw(parsed);\n\n\t\tconst configurationProperties = Registry.as(Extensions.Configuration).getConfigurationProperties();\n\t\tthis._overrides = overrides.map>(override => {\n\t\t\t// Filter unknown and non-overridable properties\n\t\t\tconst raw = {};\n\t\t\tfor (const key in override.raw) {\n\t\t\t\tif (configurationProperties[key] && configurationProperties[key].overridable) {\n\t\t\t\t\traw[key] = override.raw[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tidentifiers: override.identifiers,\n\t\t\t\tcontents: toValuesTree(raw, message => console.error(`Conflict in settings file ${this.name}: ${message}`))\n\t\t\t};\n\t\t});\n\t}\n\n\tprotected processRaw(raw: T): void {\n\t\tthis._contents = toValuesTree(raw, message => console.error(`Conflict in settings file ${this.name}: ${message}`));\n\t\tthis._keys = Object.keys(raw);\n\t}\n}\n\nexport function overrideIdentifierFromKey(key: string): string {\n\treturn key.substring(1, key.length - 1);\n}\n\nexport function keyFromOverrideIdentifier(overrideIdentifier: string): string {\n\treturn `[${overrideIdentifier}]`;\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'use strict';\n\nimport { SimpleKeybinding, KeyCode, KeybindingType, createKeybinding, Keybinding } from 'vs/base/common/keyCodes';\nimport { OS, OperatingSystem } from 'vs/base/common/platform';\nimport { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';\nimport { CommandsRegistry, ICommandHandler, ICommandHandlerDescription } from 'vs/platform/commands/common/commands';\nimport { Registry } from 'vs/platform/registry/common/platform';\n\nexport interface IKeybindingItem {\n\tkeybinding: Keybinding;\n\tcommand: string;\n\tcommandArgs?: any;\n\twhen: ContextKeyExpr;\n\tweight1: number;\n\tweight2: number;\n}\n\nexport interface IKeybindings {\n\tprimary: number;\n\tsecondary?: number[];\n\twin?: {\n\t\tprimary: number;\n\t\tsecondary?: number[];\n\t};\n\tlinux?: {\n\t\tprimary: number;\n\t\tsecondary?: number[];\n\t};\n\tmac?: {\n\t\tprimary: number;\n\t\tsecondary?: number[];\n\t};\n}\n\nexport interface IKeybindingRule extends IKeybindings {\n\tid: string;\n\tweight: number;\n\twhen: ContextKeyExpr;\n}\n\nexport interface IKeybindingRule2 {\n\tprimary: Keybinding;\n\twin?: { primary: Keybinding; };\n\tlinux?: { primary: Keybinding; };\n\tmac?: { primary: Keybinding; };\n\tid: string;\n\tweight: number;\n\twhen: ContextKeyExpr;\n}\n\nexport interface ICommandAndKeybindingRule extends IKeybindingRule {\n\thandler: ICommandHandler;\n\tdescription?: ICommandHandlerDescription;\n}\n\nexport interface IKeybindingsRegistry {\n\tregisterKeybindingRule(rule: IKeybindingRule): void;\n\tregisterKeybindingRule2(rule: IKeybindingRule2): void;\n\tregisterCommandAndKeybindingRule(desc: ICommandAndKeybindingRule): void;\n\tgetDefaultKeybindings(): IKeybindingItem[];\n\n\tWEIGHT: {\n\t\teditorCore(importance?: number): number;\n\t\teditorContrib(importance?: number): number;\n\t\tworkbenchContrib(importance?: number): number;\n\t\tbuiltinExtension(importance?: number): number;\n\t\texternalExtension(importance?: number): number;\n\t};\n}\n\nclass KeybindingsRegistryImpl implements IKeybindingsRegistry {\n\n\tprivate _keybindings: IKeybindingItem[];\n\n\tpublic WEIGHT = {\n\t\teditorCore: (importance: number = 0): number => {\n\t\t\treturn 0 + importance;\n\t\t},\n\t\teditorContrib: (importance: number = 0): number => {\n\t\t\treturn 100 + importance;\n\t\t},\n\t\tworkbenchContrib: (importance: number = 0): number => {\n\t\t\treturn 200 + importance;\n\t\t},\n\t\tbuiltinExtension: (importance: number = 0): number => {\n\t\t\treturn 300 + importance;\n\t\t},\n\t\texternalExtension: (importance: number = 0): number => {\n\t\t\treturn 400 + importance;\n\t\t}\n\t};\n\n\tconstructor() {\n\t\tthis._keybindings = [];\n\t}\n\n\t/**\n\t * Take current platform into account and reduce to primary & secondary.\n\t */\n\tprivate static bindToCurrentPlatform(kb: IKeybindings): { primary?: number; secondary?: number[]; } {\n\t\tif (OS === OperatingSystem.Windows) {\n\t\t\tif (kb && kb.win) {\n\t\t\t\treturn kb.win;\n\t\t\t}\n\t\t} else if (OS === OperatingSystem.Macintosh) {\n\t\t\tif (kb && kb.mac) {\n\t\t\t\treturn kb.mac;\n\t\t\t}\n\t\t} else {\n\t\t\tif (kb && kb.linux) {\n\t\t\t\treturn kb.linux;\n\t\t\t}\n\t\t}\n\n\t\treturn kb;\n\t}\n\n\t/**\n\t * Take current platform into account and reduce to primary & secondary.\n\t */\n\tprivate static bindToCurrentPlatform2(kb: IKeybindingRule2): { primary?: Keybinding; } {\n\t\tif (OS === OperatingSystem.Windows) {\n\t\t\tif (kb && kb.win) {\n\t\t\t\treturn kb.win;\n\t\t\t}\n\t\t} else if (OS === OperatingSystem.Macintosh) {\n\t\t\tif (kb && kb.mac) {\n\t\t\t\treturn kb.mac;\n\t\t\t}\n\t\t} else {\n\t\t\tif (kb && kb.linux) {\n\t\t\t\treturn kb.linux;\n\t\t\t}\n\t\t}\n\n\t\treturn kb;\n\t}\n\n\tpublic registerKeybindingRule(rule: IKeybindingRule): void {\n\t\tlet actualKb = KeybindingsRegistryImpl.bindToCurrentPlatform(rule);\n\n\t\tif (actualKb && actualKb.primary) {\n\t\t\tthis.registerDefaultKeybinding(createKeybinding(actualKb.primary, OS), rule.id, rule.weight, 0, rule.when);\n\t\t}\n\n\t\tif (actualKb && Array.isArray(actualKb.secondary)) {\n\t\t\tactualKb.secondary.forEach((k, i) => this.registerDefaultKeybinding(createKeybinding(k, OS), rule.id, rule.weight, -i - 1, rule.when));\n\t\t}\n\t}\n\n\tpublic registerKeybindingRule2(rule: IKeybindingRule2): void {\n\t\tlet actualKb = KeybindingsRegistryImpl.bindToCurrentPlatform2(rule);\n\n\t\tif (actualKb && actualKb.primary) {\n\t\t\tthis.registerDefaultKeybinding(actualKb.primary, rule.id, rule.weight, 0, rule.when);\n\t\t}\n\t}\n\n\tpublic registerCommandAndKeybindingRule(desc: ICommandAndKeybindingRule): void {\n\t\tthis.registerKeybindingRule(desc);\n\t\tCommandsRegistry.registerCommand(desc.id, desc);\n\t}\n\n\tprivate static _mightProduceChar(keyCode: KeyCode): boolean {\n\t\tif (keyCode >= KeyCode.KEY_0 && keyCode <= KeyCode.KEY_9) {\n\t\t\treturn true;\n\t\t}\n\t\tif (keyCode >= KeyCode.KEY_A && keyCode <= KeyCode.KEY_Z) {\n\t\t\treturn true;\n\t\t}\n\t\treturn (\n\t\t\tkeyCode === KeyCode.US_SEMICOLON\n\t\t\t|| keyCode === KeyCode.US_EQUAL\n\t\t\t|| keyCode === KeyCode.US_COMMA\n\t\t\t|| keyCode === KeyCode.US_MINUS\n\t\t\t|| keyCode === KeyCode.US_DOT\n\t\t\t|| keyCode === KeyCode.US_SLASH\n\t\t\t|| keyCode === KeyCode.US_BACKTICK\n\t\t\t|| keyCode === KeyCode.ABNT_C1\n\t\t\t|| keyCode === KeyCode.ABNT_C2\n\t\t\t|| keyCode === KeyCode.US_OPEN_SQUARE_BRACKET\n\t\t\t|| keyCode === KeyCode.US_BACKSLASH\n\t\t\t|| keyCode === KeyCode.US_CLOSE_SQUARE_BRACKET\n\t\t\t|| keyCode === KeyCode.US_QUOTE\n\t\t\t|| keyCode === KeyCode.OEM_8\n\t\t\t|| keyCode === KeyCode.OEM_102\n\t\t);\n\t}\n\n\tprivate _assertNoCtrlAlt(keybinding: SimpleKeybinding, commandId: string): void {\n\t\tif (keybinding.ctrlKey && keybinding.altKey && !keybinding.metaKey) {\n\t\t\tif (KeybindingsRegistryImpl._mightProduceChar(keybinding.keyCode)) {\n\t\t\t\tconsole.warn('Ctrl+Alt+ keybindings should not be used by default under Windows. Offender: ', keybinding, ' for ', commandId);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate registerDefaultKeybinding(keybinding: Keybinding, commandId: string, weight1: number, weight2: number, when: ContextKeyExpr): void {\n\t\tif (OS === OperatingSystem.Windows) {\n\t\t\tif (keybinding.type === KeybindingType.Chord) {\n\t\t\t\tthis._assertNoCtrlAlt(keybinding.firstPart, commandId);\n\t\t\t} else {\n\t\t\t\tthis._assertNoCtrlAlt(keybinding, commandId);\n\t\t\t}\n\t\t}\n\t\tthis._keybindings.push({\n\t\t\tkeybinding: keybinding,\n\t\t\tcommand: commandId,\n\t\t\tcommandArgs: null,\n\t\t\twhen: when,\n\t\t\tweight1: weight1,\n\t\t\tweight2: weight2\n\t\t});\n\t}\n\n\tpublic getDefaultKeybindings(): IKeybindingItem[] {\n\t\tlet result = this._keybindings.slice(0);\n\t\tresult.sort(sorter);\n\t\treturn result;\n\t}\n}\nexport let KeybindingsRegistry: IKeybindingsRegistry = new KeybindingsRegistryImpl();\n\n// Define extension point ids\nexport let Extensions = {\n\tEditorModes: 'platform.keybindingsRegistry'\n};\nRegistry.add(Extensions.EditorModes, KeybindingsRegistry);\n\nfunction sorter(a: IKeybindingItem, b: IKeybindingItem): number {\n\tif (a.weight1 !== b.weight1) {\n\t\treturn a.weight1 - b.weight1;\n\t}\n\tif (a.command < b.command) {\n\t\treturn -1;\n\t}\n\tif (a.command > b.command) {\n\t\treturn 1;\n\t}\n\treturn 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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Schemas } from 'vs/base/common/network';\nimport Severity from 'vs/base/common/severity';\nimport URI from 'vs/base/common/uri';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IConfigurationService, IConfigurationServiceEvent, IConfigurationValue, IConfigurationKeys, IConfigurationValues, Configuration, IConfigurationData, ConfigurationModel, IConfigurationOverrides } from 'vs/platform/configuration/common/configuration';\nimport { IEditor, IEditorInput, IEditorOptions, IEditorService, IResourceInput, Position } from 'vs/platform/editor/common/editor';\nimport { ICommandService, ICommand, ICommandEvent, ICommandHandler, CommandsRegistry } from 'vs/platform/commands/common/commands';\nimport { AbstractKeybindingService } from 'vs/platform/keybinding/common/abstractKeybindingService';\nimport { USLayoutResolvedKeybinding } from 'vs/platform/keybinding/common/usLayoutResolvedKeybinding';\nimport { KeybindingResolver } from 'vs/platform/keybinding/common/keybindingResolver';\nimport { IKeybindingEvent, KeybindingSource, IKeyboardEvent } from 'vs/platform/keybinding/common/keybinding';\nimport { ContextKeyExpr, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';\nimport { IConfirmation, IMessageService } from 'vs/platform/message/common/message';\nimport { IWorkspaceContextService, ILegacyWorkspace, IWorkspace } from 'vs/platform/workspace/common/workspace';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { ICodeEditor, IDiffEditor } from 'vs/editor/browser/editorBrowser';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { DefaultConfigurationModel } from 'vs/platform/configuration/common/model';\nimport { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';\nimport { IProgressService, IProgressRunner } from 'vs/platform/progress/common/progress';\nimport { ITextResourceConfigurationService } from 'vs/editor/common/services/resourceConfiguration';\nimport { ITextModelService, ITextModelContentProvider, ITextEditorModel } from 'vs/editor/common/services/resolverService';\nimport { IDisposable, IReference, ImmortalReference, combinedDisposable } from 'vs/base/common/lifecycle';\nimport * as dom from 'vs/base/browser/dom';\nimport { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport { KeybindingsRegistry, IKeybindingItem } from 'vs/platform/keybinding/common/keybindingsRegistry';\nimport { MenuId, IMenu, IMenuService } from 'vs/platform/actions/common/actions';\nimport { Menu } from 'vs/platform/actions/common/menu';\nimport { ITelemetryService, ITelemetryExperiments, ITelemetryInfo } from 'vs/platform/telemetry/common/telemetry';\nimport { ResolvedKeybinding, Keybinding, createKeybinding, SimpleKeybinding } from 'vs/base/common/keyCodes';\nimport { ResolvedKeybindingItem } from 'vs/platform/keybinding/common/resolvedKeybindingItem';\nimport { OS } from 'vs/base/common/platform';\nimport { IRange } from 'vs/editor/common/core/range';\n\nexport class SimpleEditor implements IEditor {\n\n\tpublic input: IEditorInput;\n\tpublic options: IEditorOptions;\n\tpublic position: Position;\n\n\tpublic _widget: editorCommon.IEditor;\n\n\tconstructor(editor: editorCommon.IEditor) {\n\t\tthis._widget = editor;\n\t}\n\n\tpublic getId(): string { return 'editor'; }\n\tpublic getControl(): editorCommon.IEditor { return this._widget; }\n\tpublic getSelection(): Selection { return this._widget.getSelection(); }\n\tpublic focus(): void { this._widget.focus(); }\n\tpublic isVisible(): boolean { return true; }\n\n\tpublic withTypedEditor(codeEditorCallback: (editor: ICodeEditor) => T, diffEditorCallback: (editor: IDiffEditor) => T): T {\n\t\tif (editorCommon.isCommonCodeEditor(this._widget)) {\n\t\t\t// Single Editor\n\t\t\treturn codeEditorCallback(this._widget);\n\t\t} else {\n\t\t\t// Diff Editor\n\t\t\treturn diffEditorCallback(this._widget);\n\t\t}\n\t}\n}\n\nexport class SimpleModel implements ITextEditorModel {\n\n\tprivate model: editorCommon.IModel;\n\tprivate _onDispose: Emitter;\n\n\tconstructor(model: editorCommon.IModel) {\n\t\tthis.model = model;\n\t\tthis._onDispose = new Emitter();\n\t}\n\n\tpublic get onDispose(): Event {\n\t\treturn this._onDispose.event;\n\t}\n\n\tpublic load(): TPromise {\n\t\treturn TPromise.as(this);\n\t}\n\n\tpublic get textEditorModel(): editorCommon.IModel {\n\t\treturn this.model;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._onDispose.fire();\n\t}\n}\n\nexport interface IOpenEditorDelegate {\n\t(url: string): boolean;\n}\n\nexport class SimpleEditorService implements IEditorService {\n\tpublic _serviceBrand: any;\n\n\tprivate editor: SimpleEditor;\n\tprivate openEditorDelegate: IOpenEditorDelegate;\n\n\tconstructor() {\n\t\tthis.openEditorDelegate = null;\n\t}\n\n\tpublic setEditor(editor: editorCommon.IEditor): void {\n\t\tthis.editor = new SimpleEditor(editor);\n\t}\n\n\tpublic setOpenEditorDelegate(openEditorDelegate: IOpenEditorDelegate): void {\n\t\tthis.openEditorDelegate = openEditorDelegate;\n\t}\n\n\tpublic openEditor(typedData: IResourceInput, sideBySide?: boolean): TPromise {\n\t\treturn TPromise.as(this.editor.withTypedEditor(\n\t\t\t(editor) => this.doOpenEditor(editor, typedData),\n\t\t\t(diffEditor) => (\n\t\t\t\tthis.doOpenEditor(diffEditor.getOriginalEditor(), typedData) ||\n\t\t\t\tthis.doOpenEditor(diffEditor.getModifiedEditor(), typedData)\n\t\t\t)\n\t\t));\n\t}\n\n\tprivate doOpenEditor(editor: editorCommon.ICommonCodeEditor, data: IResourceInput): IEditor {\n\t\tlet model = this.findModel(editor, data);\n\t\tif (!model) {\n\t\t\tif (data.resource) {\n\t\t\t\tif (this.openEditorDelegate) {\n\t\t\t\t\tthis.openEditorDelegate(data.resource.toString());\n\t\t\t\t\treturn null;\n\t\t\t\t} else {\n\t\t\t\t\tlet schema = data.resource.scheme;\n\t\t\t\t\tif (schema === Schemas.http || schema === Schemas.https) {\n\t\t\t\t\t\t// This is a fully qualified http or https URL\n\t\t\t\t\t\twindow.open(data.resource.toString());\n\t\t\t\t\t\treturn this.editor;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\tlet selection = data.options.selection;\n\t\tif (selection) {\n\t\t\tif (typeof selection.endLineNumber === 'number' && typeof selection.endColumn === 'number') {\n\t\t\t\teditor.setSelection(selection);\n\t\t\t\teditor.revealRangeInCenter(selection);\n\t\t\t} else {\n\t\t\t\tlet pos = {\n\t\t\t\t\tlineNumber: selection.startLineNumber,\n\t\t\t\t\tcolumn: selection.startColumn\n\t\t\t\t};\n\t\t\t\teditor.setPosition(pos);\n\t\t\t\teditor.revealPositionInCenter(pos);\n\t\t\t}\n\t\t}\n\n\t\treturn this.editor;\n\t}\n\n\tprivate findModel(editor: editorCommon.ICommonCodeEditor, data: IResourceInput): editorCommon.IModel {\n\t\tlet model = editor.getModel();\n\t\tif (model.uri.toString() !== data.resource.toString()) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn model;\n\t}\n}\n\nexport class SimpleEditorModelResolverService implements ITextModelService {\n\tpublic _serviceBrand: any;\n\n\tprivate editor: SimpleEditor;\n\n\tpublic setEditor(editor: editorCommon.IEditor): void {\n\t\tthis.editor = new SimpleEditor(editor);\n\t}\n\n\tpublic createModelReference(resource: URI): TPromise> {\n\t\tlet model: editorCommon.IModel;\n\n\t\tmodel = this.editor.withTypedEditor(\n\t\t\t(editor) => this.findModel(editor, resource),\n\t\t\t(diffEditor) => this.findModel(diffEditor.getOriginalEditor(), resource) || this.findModel(diffEditor.getModifiedEditor(), resource)\n\t\t);\n\n\t\tif (!model) {\n\t\t\treturn TPromise.as(new ImmortalReference(null));\n\t\t}\n\n\t\treturn TPromise.as(new ImmortalReference(new SimpleModel(model)));\n\t}\n\n\tpublic registerTextModelContentProvider(scheme: string, provider: ITextModelContentProvider): IDisposable {\n\t\treturn {\n\t\t\tdispose: function () { /* no op */ }\n\t\t};\n\t}\n\n\tprivate findModel(editor: editorCommon.ICommonCodeEditor, resource: URI): editorCommon.IModel {\n\t\tlet model = editor.getModel();\n\t\tif (model.uri.toString() !== resource.toString()) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn model;\n\t}\n}\n\nexport class SimpleProgressService implements IProgressService {\n\t_serviceBrand: any;\n\n\tprivate static NULL_PROGRESS_RUNNER: IProgressRunner = {\n\t\tdone: () => { },\n\t\ttotal: () => { },\n\t\tworked: () => { }\n\t};\n\n\tshow(infinite: boolean, delay?: number): IProgressRunner;\n\tshow(total: number, delay?: number): IProgressRunner;\n\tshow(): IProgressRunner {\n\t\treturn SimpleProgressService.NULL_PROGRESS_RUNNER;\n\t}\n\n\tshowWhile(promise: TPromise, delay?: number): TPromise {\n\t\treturn null;\n\t}\n}\n\nexport class SimpleMessageService implements IMessageService {\n\tpublic _serviceBrand: any;\n\n\tprivate static Empty = function () { /* nothing */ };\n\n\tpublic show(sev: Severity, message: any): () => void {\n\n\t\tswitch (sev) {\n\t\t\tcase Severity.Error:\n\t\t\t\tconsole.error(message);\n\t\t\t\tbreak;\n\t\t\tcase Severity.Warning:\n\t\t\t\tconsole.warn(message);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tconsole.log(message);\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn SimpleMessageService.Empty;\n\t}\n\n\tpublic hideAll(): void {\n\t\t// No-op\n\t}\n\n\tpublic confirm(confirmation: IConfirmation): boolean {\n\t\tlet messageText = confirmation.message;\n\t\tif (confirmation.detail) {\n\t\t\tmessageText = messageText + '\\n\\n' + confirmation.detail;\n\t\t}\n\n\t\treturn window.confirm(messageText);\n\t}\n}\n\nexport class StandaloneCommandService implements ICommandService {\n\t_serviceBrand: any;\n\n\tprivate readonly _instantiationService: IInstantiationService;\n\tprivate _dynamicCommands: { [id: string]: ICommand; };\n\n\tprivate _onWillExecuteCommand: Emitter = new Emitter();\n\tpublic readonly onWillExecuteCommand: Event = this._onWillExecuteCommand.event;\n\n\tconstructor(instantiationService: IInstantiationService) {\n\t\tthis._instantiationService = instantiationService;\n\t\tthis._dynamicCommands = Object.create(null);\n\t}\n\n\tpublic addCommand(id: string, command: ICommand): IDisposable {\n\t\tthis._dynamicCommands[id] = command;\n\t\treturn {\n\t\t\tdispose: () => {\n\t\t\t\tdelete this._dynamicCommands[id];\n\t\t\t}\n\t\t};\n\t}\n\n\tpublic executeCommand(id: string, ...args: any[]): TPromise {\n\t\tconst command = (CommandsRegistry.getCommand(id) || this._dynamicCommands[id]);\n\t\tif (!command) {\n\t\t\treturn TPromise.wrapError(new Error(`command '${id}' not found`));\n\t\t}\n\n\t\ttry {\n\t\t\tthis._onWillExecuteCommand.fire({ commandId: id });\n\t\t\tconst result = this._instantiationService.invokeFunction.apply(this._instantiationService, [command.handler].concat(args));\n\t\t\treturn TPromise.as(result);\n\t\t} catch (err) {\n\t\t\treturn TPromise.wrapError(err);\n\t\t}\n\t}\n}\n\nexport class StandaloneKeybindingService extends AbstractKeybindingService {\n\tprivate _cachedResolver: KeybindingResolver;\n\tprivate _dynamicKeybindings: IKeybindingItem[];\n\n\tconstructor(\n\t\tcontextKeyService: IContextKeyService,\n\t\tcommandService: ICommandService,\n\t\tmessageService: IMessageService,\n\t\tdomNode: HTMLElement\n\t) {\n\t\tsuper(contextKeyService, commandService, messageService);\n\n\t\tthis._cachedResolver = null;\n\t\tthis._dynamicKeybindings = [];\n\n\t\tthis.toDispose.push(dom.addDisposableListener(domNode, dom.EventType.KEY_DOWN, (e: KeyboardEvent) => {\n\t\t\tlet keyEvent = new StandardKeyboardEvent(e);\n\t\t\tlet shouldPreventDefault = this._dispatch(keyEvent, keyEvent.target);\n\t\t\tif (shouldPreventDefault) {\n\t\t\t\tkeyEvent.preventDefault();\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic addDynamicKeybinding(commandId: string, keybinding: number, handler: ICommandHandler, when: ContextKeyExpr): IDisposable {\n\t\tlet toDispose: IDisposable[] = [];\n\n\t\tthis._dynamicKeybindings.push({\n\t\t\tkeybinding: createKeybinding(keybinding, OS),\n\t\t\tcommand: commandId,\n\t\t\twhen: when,\n\t\t\tweight1: 1000,\n\t\t\tweight2: 0\n\t\t});\n\n\t\ttoDispose.push({\n\t\t\tdispose: () => {\n\t\t\t\tfor (let i = 0; i < this._dynamicKeybindings.length; i++) {\n\t\t\t\t\tlet kb = this._dynamicKeybindings[i];\n\t\t\t\t\tif (kb.command === commandId) {\n\t\t\t\t\t\tthis._dynamicKeybindings.splice(i, 1);\n\t\t\t\t\t\tthis.updateResolver({ source: KeybindingSource.Default });\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tlet commandService = this._commandService;\n\t\tif (commandService instanceof StandaloneCommandService) {\n\t\t\ttoDispose.push(commandService.addCommand(commandId, {\n\t\t\t\thandler: handler\n\t\t\t}));\n\t\t} else {\n\t\t\tthrow new Error('Unknown command service!');\n\t\t}\n\t\tthis.updateResolver({ source: KeybindingSource.Default });\n\n\t\treturn combinedDisposable(toDispose);\n\t}\n\n\tprivate updateResolver(event: IKeybindingEvent): void {\n\t\tthis._cachedResolver = null;\n\t\tthis._onDidUpdateKeybindings.fire(event);\n\t}\n\n\tprotected _getResolver(): KeybindingResolver {\n\t\tif (!this._cachedResolver) {\n\t\t\tconst defaults = this._toNormalizedKeybindingItems(KeybindingsRegistry.getDefaultKeybindings(), true);\n\t\t\tconst overrides = this._toNormalizedKeybindingItems(this._dynamicKeybindings, false);\n\t\t\tthis._cachedResolver = new KeybindingResolver(defaults, overrides);\n\t\t}\n\t\treturn this._cachedResolver;\n\t}\n\n\tprivate _toNormalizedKeybindingItems(items: IKeybindingItem[], isDefault: boolean): ResolvedKeybindingItem[] {\n\t\tlet result: ResolvedKeybindingItem[] = [], resultLen = 0;\n\t\tfor (let i = 0, len = items.length; i < len; i++) {\n\t\t\tconst item = items[i];\n\t\t\tconst when = (item.when ? item.when.normalize() : null);\n\t\t\tconst keybinding = item.keybinding;\n\n\t\t\tif (!keybinding) {\n\t\t\t\t// This might be a removal keybinding item in user settings => accept it\n\t\t\t\tresult[resultLen++] = new ResolvedKeybindingItem(null, item.command, item.commandArgs, when, isDefault);\n\t\t\t} else {\n\t\t\t\tconst resolvedKeybindings = this.resolveKeybinding(keybinding);\n\t\t\t\tfor (let j = 0; j < resolvedKeybindings.length; j++) {\n\t\t\t\t\tresult[resultLen++] = new ResolvedKeybindingItem(resolvedKeybindings[j], item.command, item.commandArgs, when, isDefault);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic resolveKeybinding(keybinding: Keybinding): ResolvedKeybinding[] {\n\t\treturn [new USLayoutResolvedKeybinding(keybinding, OS)];\n\t}\n\n\tpublic resolveKeyboardEvent(keyboardEvent: IKeyboardEvent): ResolvedKeybinding {\n\t\tlet keybinding = new SimpleKeybinding(\n\t\t\tkeyboardEvent.ctrlKey,\n\t\t\tkeyboardEvent.shiftKey,\n\t\t\tkeyboardEvent.altKey,\n\t\t\tkeyboardEvent.metaKey,\n\t\t\tkeyboardEvent.keyCode\n\t\t);\n\t\treturn new USLayoutResolvedKeybinding(keybinding, OS);\n\t}\n\n\tpublic resolveUserBinding(userBinding: string): ResolvedKeybinding[] {\n\t\treturn [];\n\t}\n}\n\nexport class SimpleConfigurationService implements IConfigurationService {\n\n\t_serviceBrand: any;\n\n\tprivate _onDidUpdateConfiguration = new Emitter();\n\tpublic onDidUpdateConfiguration: Event = this._onDidUpdateConfiguration.event;\n\n\tprivate _configuration: Configuration;\n\n\tconstructor() {\n\t\tthis._configuration = new Configuration(new DefaultConfigurationModel(), new ConfigurationModel());\n\t}\n\n\tprivate configuration(): Configuration {\n\t\treturn this._configuration;\n\t}\n\n\tpublic reloadConfiguration(section?: string): TPromise {\n\t\treturn TPromise.as(this.getConfiguration(section));\n\t}\n\n\tpublic getConfiguration(section?: string, options?: IConfigurationOverrides): C {\n\t\treturn this.configuration().getValue(section, options);\n\t}\n\n\tpublic lookup(key: string, options?: IConfigurationOverrides): IConfigurationValue {\n\t\treturn this.configuration().lookup(key, options);\n\t}\n\n\tpublic keys(): IConfigurationKeys {\n\t\treturn this.configuration().keys();\n\t}\n\n\tpublic values(): IConfigurationValues {\n\t\treturn this._configuration.values();\n\t}\n\n\tpublic getConfigurationData(): IConfigurationData {\n\t\treturn this.configuration().toData();\n\t}\n}\n\nexport class SimpleResourceConfigurationService implements ITextResourceConfigurationService {\n\n\t_serviceBrand: any;\n\n\tpublic readonly onDidUpdateConfiguration: Event;\n\tprivate readonly _onDidUpdateConfigurationEmitter = new Emitter();\n\n\tconstructor(private configurationService: SimpleConfigurationService) {\n\t\tthis.configurationService.onDidUpdateConfiguration(() => {\n\t\t\tthis._onDidUpdateConfigurationEmitter.fire();\n\t\t});\n\t}\n\n\tpublic getConfiguration(): T {\n\t\treturn this.configurationService.getConfiguration();\n\t}\n\n}\n\nexport class SimpleMenuService implements IMenuService {\n\n\t_serviceBrand: any;\n\n\tprivate readonly _commandService: ICommandService;\n\n\tconstructor(commandService: ICommandService) {\n\t\tthis._commandService = commandService;\n\t}\n\n\tpublic createMenu(id: MenuId, contextKeyService: IContextKeyService): IMenu {\n\t\treturn new Menu(id, TPromise.as(true), this._commandService, contextKeyService);\n\t}\n}\n\nexport class StandaloneTelemetryService implements ITelemetryService {\n\t_serviceBrand: void;\n\n\tpublic isOptedIn = false;\n\n\tpublic publicLog(eventName: string, data?: any): TPromise {\n\t\treturn TPromise.as(null);\n\t}\n\n\tpublic getTelemetryInfo(): TPromise {\n\t\treturn null;\n\t}\n\n\tpublic getExperiments(): ITelemetryExperiments {\n\t\treturn null;\n\t}\n}\n\nexport class SimpleWorkspaceContextService implements IWorkspaceContextService {\n\n\tpublic _serviceBrand: any;\n\n\tprivate static SCHEME: 'inmemory';\n\n\tprivate readonly _onDidChangeWorkspaceRoots: Emitter = new Emitter();\n\tpublic readonly onDidChangeWorkspaceRoots: Event = this._onDidChangeWorkspaceRoots.event;\n\n\tprivate readonly legacyWorkspace: ILegacyWorkspace;\n\tprivate readonly workspace: IWorkspace;\n\n\tconstructor() {\n\t\tthis.legacyWorkspace = { resource: URI.from({ scheme: SimpleWorkspaceContextService.SCHEME, authority: 'model', path: '/' }) };\n\t\tthis.workspace = { id: '4064f6ec-cb38-4ad0-af64-ee6467e63c82', roots: [this.legacyWorkspace.resource], name: this.legacyWorkspace.resource.fsPath };\n\t}\n\n\tpublic getWorkspace(): ILegacyWorkspace {\n\t\treturn this.legacyWorkspace;\n\t}\n\n\tpublic getWorkspace2(): IWorkspace {\n\t\treturn this.workspace;\n\t}\n\n\tpublic getRoot(resource: URI): URI {\n\t\treturn resource && resource.scheme === SimpleWorkspaceContextService.SCHEME ? this.workspace.roots[0] : void 0;\n\t}\n\n\tpublic hasWorkspace(): boolean {\n\t\treturn true;\n\t}\n\n\tpublic isInsideWorkspace(resource: URI): boolean {\n\t\treturn resource && resource.scheme === SimpleWorkspaceContextService.SCHEME;\n\t}\n\n\tpublic toWorkspaceRelativePath(resource: URI, toOSPath?: boolean): string {\n\t\treturn resource.fsPath;\n\t}\n\n\tpublic toResource(workspaceRelativePath: string): URI {\n\t\treturn URI.file(workspaceRelativePath);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\n\nexport const ID = 'storageService';\n\nexport const IStorageService = createDecorator(ID);\n\nexport interface IStorageService {\n\t_serviceBrand: any;\n\n\t/**\n\t * Store a string value under the given key to local storage.\n\t *\n\t * The optional scope argument allows to define the scope of the operation.\n\t */\n\tstore(key: string, value: any, scope?: StorageScope): void;\n\n\t/**\n\t * Swap the value of a stored element to one of the two provided\n\t * values and use the defaultValue if no element with the given key\n\t * exists.\n\t *\n\t * The optional scope argument allows to define the scope of the operation.\n\t */\n\tswap(key: string, valueA: any, valueB: any, scope?: StorageScope, defaultValue?: any): void;\n\n\t/**\n\t * Delete an element stored under the provided key from local storage.\n\t *\n\t * The optional scope argument allows to define the scope of the operation.\n\t */\n\tremove(key: string, scope?: StorageScope): void;\n\n\t/**\n\t * Retrieve an element stored with the given key from local storage. Use\n\t * the provided defaultValue if the element is null or undefined.\n\t *\n\t * The optional scope argument allows to define the scope of the operation.\n\t */\n\tget(key: string, scope?: StorageScope, defaultValue?: string): string;\n\n\t/**\n\t * Retrieve an element stored with the given key from local storage. Use\n\t * the provided defaultValue if the element is null or undefined. The element\n\t * will be converted to a number using parseInt with a base of 10.\n\t *\n\t * The optional scope argument allows to define the scope of the operation.\n\t */\n\tgetInteger(key: string, scope?: StorageScope, defaultValue?: number): number;\n\n\t/**\n\t * Retrieve an element stored with the given key from local storage. Use\n\t * the provided defaultValue if the element is null or undefined. The element\n\t * will be converted to a boolean.\n\t *\n\t * The optional scope argument allows to define the scope of the operation.\n\t */\n\tgetBoolean(key: string, scope?: StorageScope, defaultValue?: boolean): boolean;\n}\n\nexport enum StorageScope {\n\n\t/**\n\t * The stored data will be scoped to all workspaces of this domain.\n\t */\n\tGLOBAL,\n\n\t/**\n\t * The stored data will be scoped to the current workspace.\n\t */\n\tWORKSPACE\n}\n\n\nexport const NullStorageService: IStorageService = {\n\t_serviceBrand: undefined,\n\tstore() { return undefined; },\n\tswap() { return undefined; },\n\tremove() { return undefined; },\n\tget(a, b, defaultValue) { return defaultValue; },\n\tgetInteger(a, b, defaultValue) { return defaultValue; },\n\tgetBoolean(a, b, defaultValue) { return defaultValue; }\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'use strict';\n\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport * as platform from 'vs/base/common/platform';\nimport * as browser from 'vs/base/browser/browser';\nimport { CommonEditorConfiguration, IEnvConfiguration } from 'vs/editor/common/config/commonEditorConfig';\nimport { IDimension } from 'vs/editor/common/editorCommon';\nimport { FontInfo, BareFontInfo } from 'vs/editor/common/config/fontInfo';\nimport { ElementSizeObserver } from 'vs/editor/browser/config/elementSizeObserver';\nimport { FastDomNode } from 'vs/base/browser/fastDomNode';\nimport { CharWidthRequest, CharWidthRequestType, readCharWidths } from 'vs/editor/browser/config/charWidthReader';\nimport { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';\nimport { IEditorOptions } from 'vs/editor/common/config/editorOptions';\n\nclass CSSBasedConfigurationCache {\n\n\tprivate _keys: { [key: string]: BareFontInfo; };\n\tprivate _values: { [key: string]: FontInfo; };\n\n\tconstructor() {\n\t\tthis._keys = Object.create(null);\n\t\tthis._values = Object.create(null);\n\t}\n\n\tpublic has(item: BareFontInfo): boolean {\n\t\tlet itemId = item.getId();\n\t\treturn !!this._values[itemId];\n\t}\n\n\tpublic get(item: BareFontInfo): FontInfo {\n\t\tlet itemId = item.getId();\n\t\treturn this._values[itemId];\n\t}\n\n\tpublic put(item: BareFontInfo, value: FontInfo): void {\n\t\tlet itemId = item.getId();\n\t\tthis._keys[itemId] = item;\n\t\tthis._values[itemId] = value;\n\t}\n\n\tpublic remove(item: BareFontInfo): void {\n\t\tlet itemId = item.getId();\n\t\tdelete this._keys[itemId];\n\t\tdelete this._values[itemId];\n\t}\n\n\tpublic getKeys(): BareFontInfo[] {\n\t\treturn Object.keys(this._keys).map(id => this._keys[id]);\n\t}\n\n\tpublic getValues(): FontInfo[] {\n\t\treturn Object.keys(this._keys).map(id => this._values[id]);\n\t}\n}\n\nexport function readFontInfo(bareFontInfo: BareFontInfo): FontInfo {\n\treturn CSSBasedConfiguration.INSTANCE.readConfiguration(bareFontInfo);\n}\n\nexport function restoreFontInfo(storageService: IStorageService): void {\n\tlet strStoredFontInfo = storageService.get('editorFontInfo', StorageScope.GLOBAL);\n\tif (typeof strStoredFontInfo !== 'string') {\n\t\treturn;\n\t}\n\tlet storedFontInfo: ISerializedFontInfo[] = null;\n\ttry {\n\t\tstoredFontInfo = JSON.parse(strStoredFontInfo);\n\t} catch (err) {\n\t\treturn;\n\t}\n\tif (!Array.isArray(storedFontInfo)) {\n\t\treturn;\n\t}\n\tCSSBasedConfiguration.INSTANCE.restoreFontInfo(storedFontInfo);\n}\n\nexport function saveFontInfo(storageService: IStorageService): void {\n\tlet knownFontInfo = CSSBasedConfiguration.INSTANCE.saveFontInfo();\n\tstorageService.store('editorFontInfo', JSON.stringify(knownFontInfo), StorageScope.GLOBAL);\n}\n\nexport interface ISerializedFontInfo {\n\treadonly zoomLevel: number;\n\treadonly fontFamily: string;\n\treadonly fontWeight: string;\n\treadonly fontSize: number;\n\treadonly lineHeight: number;\n\treadonly letterSpacing: number;\n\treadonly isMonospace: boolean;\n\treadonly typicalHalfwidthCharacterWidth: number;\n\treadonly typicalFullwidthCharacterWidth: number;\n\treadonly spaceWidth: number;\n\treadonly maxDigitWidth: number;\n}\n\nclass CSSBasedConfiguration extends Disposable {\n\n\tpublic static INSTANCE = new CSSBasedConfiguration();\n\n\tprivate _cache: CSSBasedConfigurationCache;\n\tprivate _evictUntrustedReadingsTimeout: number;\n\n\tprivate _onDidChange = this._register(new Emitter());\n\tpublic onDidChange: Event = this._onDidChange.event;\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._cache = new CSSBasedConfigurationCache();\n\t\tthis._evictUntrustedReadingsTimeout = -1;\n\t}\n\n\tpublic dispose(): void {\n\t\tif (this._evictUntrustedReadingsTimeout !== -1) {\n\t\t\tclearTimeout(this._evictUntrustedReadingsTimeout);\n\t\t\tthis._evictUntrustedReadingsTimeout = -1;\n\t\t}\n\t\tsuper.dispose();\n\t}\n\n\tprivate _writeToCache(item: BareFontInfo, value: FontInfo): void {\n\t\tthis._cache.put(item, value);\n\n\t\tif (!value.isTrusted && this._evictUntrustedReadingsTimeout === -1) {\n\t\t\t// Try reading again after some time\n\t\t\tthis._evictUntrustedReadingsTimeout = setTimeout(() => {\n\t\t\t\tthis._evictUntrustedReadingsTimeout = -1;\n\t\t\t\tthis._evictUntrustedReadings();\n\t\t\t}, 5000);\n\t\t}\n\t}\n\n\tprivate _evictUntrustedReadings(): void {\n\t\tlet values = this._cache.getValues();\n\t\tlet somethingRemoved = false;\n\t\tfor (let i = 0, len = values.length; i < len; i++) {\n\t\t\tlet item = values[i];\n\t\t\tif (!item.isTrusted) {\n\t\t\t\tsomethingRemoved = true;\n\t\t\t\tthis._cache.remove(item);\n\t\t\t}\n\t\t}\n\t\tif (somethingRemoved) {\n\t\t\tthis._onDidChange.fire();\n\t\t}\n\t}\n\n\tpublic saveFontInfo(): ISerializedFontInfo[] {\n\t\t// Only save trusted font info (that has been measured in this running instance)\n\t\treturn this._cache.getValues().filter(item => item.isTrusted);\n\t}\n\n\tpublic restoreFontInfo(savedFontInfo: ISerializedFontInfo[]): void {\n\t\t// Take all the saved font info and insert them in the cache without the trusted flag.\n\t\t// The reason for this is that a font might have been installed on the OS in the meantime.\n\t\tfor (let i = 0, len = savedFontInfo.length; i < len; i++) {\n\t\t\tlet fontInfo = new FontInfo(savedFontInfo[i], false);\n\t\t\tthis._writeToCache(fontInfo, fontInfo);\n\t\t}\n\t}\n\n\tpublic readConfiguration(bareFontInfo: BareFontInfo): FontInfo {\n\t\tif (!this._cache.has(bareFontInfo)) {\n\t\t\tlet readConfig = CSSBasedConfiguration._actualReadConfiguration(bareFontInfo);\n\n\t\t\tif (readConfig.typicalHalfwidthCharacterWidth <= 2 || readConfig.typicalFullwidthCharacterWidth <= 2 || readConfig.spaceWidth <= 2 || readConfig.maxDigitWidth <= 2) {\n\t\t\t\t// Hey, it's Bug 14341 ... we couldn't read\n\t\t\t\treadConfig = new FontInfo({\n\t\t\t\t\tzoomLevel: browser.getZoomLevel(),\n\t\t\t\t\tfontFamily: readConfig.fontFamily,\n\t\t\t\t\tfontWeight: readConfig.fontWeight,\n\t\t\t\t\tfontSize: readConfig.fontSize,\n\t\t\t\t\tlineHeight: readConfig.lineHeight,\n\t\t\t\t\tletterSpacing: readConfig.letterSpacing,\n\t\t\t\t\tisMonospace: readConfig.isMonospace,\n\t\t\t\t\ttypicalHalfwidthCharacterWidth: Math.max(readConfig.typicalHalfwidthCharacterWidth, 5),\n\t\t\t\t\ttypicalFullwidthCharacterWidth: Math.max(readConfig.typicalFullwidthCharacterWidth, 5),\n\t\t\t\t\tspaceWidth: Math.max(readConfig.spaceWidth, 5),\n\t\t\t\t\tmaxDigitWidth: Math.max(readConfig.maxDigitWidth, 5),\n\t\t\t\t}, false);\n\t\t\t}\n\n\t\t\tthis._writeToCache(bareFontInfo, readConfig);\n\t\t}\n\t\treturn this._cache.get(bareFontInfo);\n\t}\n\n\tprivate static createRequest(chr: string, type: CharWidthRequestType, all: CharWidthRequest[], monospace: CharWidthRequest[]): CharWidthRequest {\n\t\tlet result = new CharWidthRequest(chr, type);\n\t\tall.push(result);\n\t\tif (monospace) {\n\t\t\tmonospace.push(result);\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _actualReadConfiguration(bareFontInfo: BareFontInfo): FontInfo {\n\t\tlet all: CharWidthRequest[] = [];\n\t\tlet monospace: CharWidthRequest[] = [];\n\n\t\tconst typicalHalfwidthCharacter = this.createRequest('n', CharWidthRequestType.Regular, all, monospace);\n\t\tconst typicalFullwidthCharacter = this.createRequest('\\uff4d', CharWidthRequestType.Regular, all, null);\n\t\tconst space = this.createRequest(' ', CharWidthRequestType.Regular, all, monospace);\n\t\tconst digit0 = this.createRequest('0', CharWidthRequestType.Regular, all, monospace);\n\t\tconst digit1 = this.createRequest('1', CharWidthRequestType.Regular, all, monospace);\n\t\tconst digit2 = this.createRequest('2', CharWidthRequestType.Regular, all, monospace);\n\t\tconst digit3 = this.createRequest('3', CharWidthRequestType.Regular, all, monospace);\n\t\tconst digit4 = this.createRequest('4', CharWidthRequestType.Regular, all, monospace);\n\t\tconst digit5 = this.createRequest('5', CharWidthRequestType.Regular, all, monospace);\n\t\tconst digit6 = this.createRequest('6', CharWidthRequestType.Regular, all, monospace);\n\t\tconst digit7 = this.createRequest('7', CharWidthRequestType.Regular, all, monospace);\n\t\tconst digit8 = this.createRequest('8', CharWidthRequestType.Regular, all, monospace);\n\t\tconst digit9 = this.createRequest('9', CharWidthRequestType.Regular, all, monospace);\n\n\t\t// monospace test: used for whitespace rendering\n\t\tthis.createRequest('→', CharWidthRequestType.Regular, all, monospace);\n\t\tthis.createRequest('·', CharWidthRequestType.Regular, all, monospace);\n\n\t\t// monospace test: some characters\n\t\tthis.createRequest('|', CharWidthRequestType.Regular, all, monospace);\n\t\tthis.createRequest('/', CharWidthRequestType.Regular, all, monospace);\n\t\tthis.createRequest('-', CharWidthRequestType.Regular, all, monospace);\n\t\tthis.createRequest('_', CharWidthRequestType.Regular, all, monospace);\n\t\tthis.createRequest('i', CharWidthRequestType.Regular, all, monospace);\n\t\tthis.createRequest('l', CharWidthRequestType.Regular, all, monospace);\n\t\tthis.createRequest('m', CharWidthRequestType.Regular, all, monospace);\n\n\t\t// monospace italic test\n\t\tthis.createRequest('|', CharWidthRequestType.Italic, all, monospace);\n\t\tthis.createRequest('_', CharWidthRequestType.Italic, all, monospace);\n\t\tthis.createRequest('i', CharWidthRequestType.Italic, all, monospace);\n\t\tthis.createRequest('l', CharWidthRequestType.Italic, all, monospace);\n\t\tthis.createRequest('m', CharWidthRequestType.Italic, all, monospace);\n\t\tthis.createRequest('n', CharWidthRequestType.Italic, all, monospace);\n\n\t\t// monospace bold test\n\t\tthis.createRequest('|', CharWidthRequestType.Bold, all, monospace);\n\t\tthis.createRequest('_', CharWidthRequestType.Bold, all, monospace);\n\t\tthis.createRequest('i', CharWidthRequestType.Bold, all, monospace);\n\t\tthis.createRequest('l', CharWidthRequestType.Bold, all, monospace);\n\t\tthis.createRequest('m', CharWidthRequestType.Bold, all, monospace);\n\t\tthis.createRequest('n', CharWidthRequestType.Bold, all, monospace);\n\n\t\treadCharWidths(bareFontInfo, all);\n\n\t\tconst maxDigitWidth = Math.max(digit0.width, digit1.width, digit2.width, digit3.width, digit4.width, digit5.width, digit6.width, digit7.width, digit8.width, digit9.width);\n\n\t\tlet isMonospace = true;\n\t\tlet referenceWidth = monospace[0].width;\n\t\tfor (let i = 1, len = monospace.length; i < len; i++) {\n\t\t\tconst diff = referenceWidth - monospace[i].width;\n\t\t\tif (diff < -0.001 || diff > 0.001) {\n\t\t\t\tisMonospace = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// let's trust the zoom level only 2s after it was changed.\n\t\tconst canTrustBrowserZoomLevel = (browser.getTimeSinceLastZoomLevelChanged() > 2000);\n\t\treturn new FontInfo({\n\t\t\tzoomLevel: browser.getZoomLevel(),\n\t\t\tfontFamily: bareFontInfo.fontFamily,\n\t\t\tfontWeight: bareFontInfo.fontWeight,\n\t\t\tfontSize: bareFontInfo.fontSize,\n\t\t\tlineHeight: bareFontInfo.lineHeight,\n\t\t\tletterSpacing: bareFontInfo.letterSpacing,\n\t\t\tisMonospace: isMonospace,\n\t\t\ttypicalHalfwidthCharacterWidth: typicalHalfwidthCharacter.width,\n\t\t\ttypicalFullwidthCharacterWidth: typicalFullwidthCharacter.width,\n\t\t\tspaceWidth: space.width,\n\t\t\tmaxDigitWidth: maxDigitWidth\n\t\t}, canTrustBrowserZoomLevel);\n\t}\n}\n\nexport class Configuration extends CommonEditorConfiguration {\n\n\tpublic static applyFontInfoSlow(domNode: HTMLElement, fontInfo: BareFontInfo): void {\n\t\tdomNode.style.fontFamily = fontInfo.fontFamily;\n\t\tdomNode.style.fontWeight = fontInfo.fontWeight;\n\t\tdomNode.style.fontSize = fontInfo.fontSize + 'px';\n\t\tdomNode.style.lineHeight = fontInfo.lineHeight + 'px';\n\t\tdomNode.style.letterSpacing = fontInfo.letterSpacing + 'px';\n\t}\n\n\tpublic static applyFontInfo(domNode: FastDomNode, fontInfo: BareFontInfo): void {\n\t\tdomNode.setFontFamily(fontInfo.fontFamily);\n\t\tdomNode.setFontWeight(fontInfo.fontWeight);\n\t\tdomNode.setFontSize(fontInfo.fontSize);\n\t\tdomNode.setLineHeight(fontInfo.lineHeight);\n\t\tdomNode.setLetterSpacing(fontInfo.letterSpacing);\n\t}\n\n\tprivate readonly _elementSizeObserver: ElementSizeObserver;\n\n\tconstructor(options: IEditorOptions, referenceDomElement: HTMLElement = null) {\n\t\tsuper(options);\n\n\t\tthis._elementSizeObserver = this._register(new ElementSizeObserver(referenceDomElement, () => this._onReferenceDomElementSizeChanged()));\n\n\t\tthis._register(CSSBasedConfiguration.INSTANCE.onDidChange(() => this._onCSSBasedConfigurationChanged()));\n\n\t\tif (this._validatedOptions.automaticLayout) {\n\t\t\tthis._elementSizeObserver.startObserving();\n\t\t}\n\n\t\tthis._register(browser.onDidChangeZoomLevel(_ => this._recomputeOptions()));\n\t\tthis._register(browser.onDidChangeAccessibilitySupport(() => this._recomputeOptions()));\n\n\t\tthis._recomputeOptions();\n\t}\n\n\tprivate _onReferenceDomElementSizeChanged(): void {\n\t\tthis._recomputeOptions();\n\t}\n\n\tprivate _onCSSBasedConfigurationChanged(): void {\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic observeReferenceElement(dimension?: IDimension): void {\n\t\tthis._elementSizeObserver.observe(dimension);\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t}\n\n\tprivate _getExtraEditorClassName(): string {\n\t\tlet extra = '';\n\t\tif (browser.isIE) {\n\t\t\textra += 'ie ';\n\t\t} else if (browser.isFirefox) {\n\t\t\textra += 'ff ';\n\t\t} else if (browser.isEdge) {\n\t\t\textra += 'edge ';\n\t\t}\n\t\tif (platform.isMacintosh) {\n\t\t\textra += 'mac ';\n\t\t}\n\t\treturn extra;\n\t}\n\n\tprotected _getEnvConfiguration(): IEnvConfiguration {\n\t\treturn {\n\t\t\textraEditorClassName: this._getExtraEditorClassName(),\n\t\t\touterWidth: this._elementSizeObserver.getWidth(),\n\t\t\touterHeight: this._elementSizeObserver.getHeight(),\n\t\t\temptySelectionClipboard: browser.isWebKit,\n\t\t\tpixelRatio: browser.getPixelRatio(),\n\t\t\tzoomLevel: browser.getZoomLevel(),\n\t\t\taccessibilitySupport: browser.getAccessibilitySupport()\n\t\t};\n\t}\n\n\tprotected readConfiguration(bareFontInfo: BareFontInfo): FontInfo {\n\t\treturn CSSBasedConfiguration.INSTANCE.readConfiguration(bareFontInfo);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';\nimport { IConfiguration } from 'vs/editor/common/editorCommon';\nimport { IVisibleLine, VisibleLinesCollection, IVisibleLinesHost } from 'vs/editor/browser/view/viewLayer';\nimport { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay';\nimport { Configuration } from 'vs/editor/browser/config/configuration';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/view/renderingContext';\nimport { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\nimport { ViewPart } from 'vs/editor/browser/view/viewPart';\n\nexport class ViewOverlays extends ViewPart implements IVisibleLinesHost {\n\n\tprivate readonly _visibleLines: VisibleLinesCollection;\n\tprotected readonly domNode: FastDomNode;\n\tprivate _dynamicOverlays: DynamicViewOverlay[];\n\tprivate _isFocused: boolean;\n\n\tconstructor(context: ViewContext) {\n\t\tsuper(context);\n\n\t\tthis._visibleLines = new VisibleLinesCollection(this);\n\t\tthis.domNode = this._visibleLines.domNode;\n\n\t\tthis._dynamicOverlays = [];\n\t\tthis._isFocused = false;\n\n\t\tthis.domNode.setClassName('view-overlays');\n\t}\n\n\tpublic shouldRender(): boolean {\n\t\tif (super.shouldRender()) {\n\t\t\treturn true;\n\t\t}\n\n\t\tfor (let i = 0, len = this._dynamicOverlays.length; i < len; i++) {\n\t\t\tlet dynamicOverlay = this._dynamicOverlays[i];\n\t\t\tif (dynamicOverlay.shouldRender()) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\n\t\tfor (let i = 0, len = this._dynamicOverlays.length; i < len; i++) {\n\t\t\tlet dynamicOverlay = this._dynamicOverlays[i];\n\t\t\tdynamicOverlay.dispose();\n\t\t}\n\t\tthis._dynamicOverlays = null;\n\t}\n\n\tpublic getDomNode(): FastDomNode {\n\t\treturn this.domNode;\n\t}\n\n\t// ---- begin IVisibleLinesHost\n\n\tpublic createVisibleLine(): ViewOverlayLine {\n\t\treturn new ViewOverlayLine(this._context.configuration, this._dynamicOverlays);\n\t}\n\n\t// ---- end IVisibleLinesHost\n\n\tpublic addDynamicOverlay(overlay: DynamicViewOverlay): void {\n\t\tthis._dynamicOverlays.push(overlay);\n\t}\n\n\t// ----- event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tthis._visibleLines.onConfigurationChanged(e);\n\t\tlet startLineNumber = this._visibleLines.getStartLineNumber();\n\t\tlet endLineNumber = this._visibleLines.getEndLineNumber();\n\t\tfor (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n\t\t\tlet line = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\tline.onConfigurationChanged(e);\n\t\t}\n\t\treturn true;\n\t}\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\treturn this._visibleLines.onFlushed(e);\n\t}\n\tpublic onFocusChanged(e: viewEvents.ViewFocusChangedEvent): boolean {\n\t\tthis._isFocused = e.isFocused;\n\t\treturn true;\n\t}\n\tpublic onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn this._visibleLines.onLinesChanged(e);\n\t}\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn this._visibleLines.onLinesDeleted(e);\n\t}\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn this._visibleLines.onLinesInserted(e);\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn this._visibleLines.onScrollChanged(e) || true;\n\t}\n\tpublic onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean {\n\t\treturn this._visibleLines.onTokensChanged(e);\n\t}\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn this._visibleLines.onZonesChanged(e);\n\t}\n\n\t// ----- end event handlers\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\tlet toRender = this._dynamicOverlays.filter(overlay => overlay.shouldRender());\n\n\t\tfor (let i = 0, len = toRender.length; i < len; i++) {\n\t\t\tlet dynamicOverlay = toRender[i];\n\t\t\tdynamicOverlay.prepareRender(ctx);\n\t\t\tdynamicOverlay.onDidRender();\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tpublic render(ctx: RestrictedRenderingContext): void {\n\t\t// Overwriting to bypass `shouldRender` flag\n\t\tthis._viewOverlaysRender(ctx);\n\n\t\tthis.domNode.toggleClassName('focused', this._isFocused);\n\t}\n\n\t_viewOverlaysRender(ctx: RestrictedRenderingContext): void {\n\t\tthis._visibleLines.renderLines(ctx.viewportData);\n\t}\n}\n\nexport class ViewOverlayLine implements IVisibleLine {\n\n\tprivate _configuration: IConfiguration;\n\tprivate _dynamicOverlays: DynamicViewOverlay[];\n\tprivate _domNode: FastDomNode;\n\tprivate _renderedContent: string;\n\tprivate _lineHeight: number;\n\n\tconstructor(configuration: IConfiguration, dynamicOverlays: DynamicViewOverlay[]) {\n\t\tthis._configuration = configuration;\n\t\tthis._lineHeight = this._configuration.editor.lineHeight;\n\t\tthis._dynamicOverlays = dynamicOverlays;\n\n\t\tthis._domNode = null;\n\t\tthis._renderedContent = null;\n\t}\n\n\tpublic getDomNode(): HTMLElement {\n\t\tif (!this._domNode) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._domNode.domNode;\n\t}\n\tpublic setDomNode(domNode: HTMLElement): void {\n\t\tthis._domNode = createFastDomNode(domNode);\n\t}\n\n\tpublic onContentChanged(): void {\n\t\t// Nothing\n\t}\n\tpublic onTokensChanged(): void {\n\t\t// Nothing\n\t}\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): void {\n\t\tif (e.lineHeight) {\n\t\t\tthis._lineHeight = this._configuration.editor.lineHeight;\n\t\t}\n\t}\n\n\tpublic renderLine(lineNumber: number, deltaTop: number, viewportData: ViewportData): string {\n\t\tlet result = '';\n\t\tfor (let i = 0, len = this._dynamicOverlays.length; i < len; i++) {\n\t\t\tlet dynamicOverlay = this._dynamicOverlays[i];\n\t\t\tresult += dynamicOverlay.render(viewportData.startLineNumber, lineNumber);\n\t\t}\n\n\t\tif (this._renderedContent === result) {\n\t\t\t// No rendering needed\n\t\t\treturn null;\n\t\t}\n\n\t\tthis._renderedContent = result;\n\n\t\treturn `
    ${result}
    `;\n\t}\n\n\tpublic layoutLine(lineNumber: number, deltaTop: number): void {\n\t\tif (this._domNode) {\n\t\t\tthis._domNode.setTop(deltaTop);\n\t\t\tthis._domNode.setHeight(this._lineHeight);\n\t\t}\n\t}\n}\n\nexport class ContentViewOverlays extends ViewOverlays {\n\n\tprivate _contentWidth: number;\n\n\tconstructor(context: ViewContext) {\n\t\tsuper(context);\n\n\t\tthis._contentWidth = this._context.configuration.editor.layoutInfo.contentWidth;\n\n\t\tthis.domNode.setHeight(0);\n\t}\n\n\t// --- begin event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tif (e.layoutInfo) {\n\t\t\tthis._contentWidth = this._context.configuration.editor.layoutInfo.contentWidth;\n\t\t}\n\t\treturn super.onConfigurationChanged(e);\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn super.onScrollChanged(e) || e.scrollWidthChanged;\n\t}\n\n\t// --- end event handlers\n\n\t_viewOverlaysRender(ctx: RestrictedRenderingContext): void {\n\t\tsuper._viewOverlaysRender(ctx);\n\n\t\tthis.domNode.setWidth(Math.max(ctx.scrollWidth, this._contentWidth));\n\t}\n}\n\nexport class MarginViewOverlays extends ViewOverlays {\n\n\tprivate _contentLeft: number;\n\n\tconstructor(context: ViewContext) {\n\t\tsuper(context);\n\n\t\tthis._contentLeft = this._context.configuration.editor.layoutInfo.contentLeft;\n\n\t\tthis.domNode.setClassName('margin-view-overlays');\n\t\tthis.domNode.setWidth(1);\n\n\t\tConfiguration.applyFontInfo(this.domNode, this._context.configuration.editor.fontInfo);\n\t}\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tlet shouldRender = false;\n\t\tif (e.fontInfo) {\n\t\t\tConfiguration.applyFontInfo(this.domNode, this._context.configuration.editor.fontInfo);\n\t\t\tshouldRender = true;\n\t\t}\n\t\tif (e.layoutInfo) {\n\t\t\tthis._contentLeft = this._context.configuration.editor.layoutInfo.contentLeft;\n\t\t\tshouldRender = true;\n\t\t}\n\t\treturn super.onConfigurationChanged(e) || shouldRender;\n\t}\n\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn super.onScrollChanged(e) || e.scrollHeightChanged;\n\t}\n\n\t_viewOverlaysRender(ctx: RestrictedRenderingContext): void {\n\t\tsuper._viewOverlaysRender(ctx);\n\t\tlet height = Math.min(ctx.scrollHeight, 1000000);\n\t\tthis.domNode.setHeight(height);\n\t\tthis.domNode.setWidth(this._contentLeft);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport { TextEditorCursorStyle } from 'vs/editor/common/config/editorOptions';\nimport { Configuration } from 'vs/editor/browser/config/configuration';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/view/renderingContext';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\nimport * as dom from 'vs/base/browser/dom';\n\nexport interface IViewCursorRenderData {\n\tdomNode: HTMLElement;\n\tposition: Position;\n\tcontentLeft: number;\n\twidth: number;\n\theight: number;\n}\n\nclass ViewCursorRenderData {\n\tpublic readonly top: number;\n\tpublic readonly left: number;\n\tpublic readonly width: number;\n\tpublic readonly textContent: string;\n\n\tconstructor(top: number, left: number, width: number, textContent: string) {\n\t\tthis.top = top;\n\t\tthis.left = left;\n\t\tthis.width = width;\n\t\tthis.textContent = textContent;\n\t}\n}\n\nexport class ViewCursor {\n\tprivate readonly _context: ViewContext;\n\tprivate readonly _isSecondary: boolean;\n\tprivate readonly _domNode: FastDomNode;\n\n\tprivate _cursorStyle: TextEditorCursorStyle;\n\tprivate _lineHeight: number;\n\tprivate _typicalHalfwidthCharacterWidth: number;\n\n\tprivate _isVisible: boolean;\n\n\tprivate _position: Position;\n\tprivate _isInEditableRange: boolean;\n\n\tprivate _lastRenderedContent: string;\n\tprivate _renderData: ViewCursorRenderData;\n\n\tconstructor(context: ViewContext, isSecondary: boolean) {\n\t\tthis._context = context;\n\t\tthis._isSecondary = isSecondary;\n\n\t\tthis._cursorStyle = this._context.configuration.editor.viewInfo.cursorStyle;\n\t\tthis._lineHeight = this._context.configuration.editor.lineHeight;\n\t\tthis._typicalHalfwidthCharacterWidth = this._context.configuration.editor.fontInfo.typicalHalfwidthCharacterWidth;\n\n\t\tthis._isVisible = true;\n\n\t\t// Create the dom node\n\t\tthis._domNode = createFastDomNode(document.createElement('div'));\n\t\tif (this._isSecondary) {\n\t\t\tthis._domNode.setClassName('cursor secondary');\n\t\t} else {\n\t\t\tthis._domNode.setClassName('cursor');\n\t\t}\n\t\tthis._domNode.setHeight(this._lineHeight);\n\t\tthis._domNode.setTop(0);\n\t\tthis._domNode.setLeft(0);\n\t\tConfiguration.applyFontInfo(this._domNode, this._context.configuration.editor.fontInfo);\n\t\tthis._domNode.setDisplay('none');\n\n\t\tthis.updatePosition(new Position(1, 1));\n\t\tthis._isInEditableRange = true;\n\n\t\tthis._lastRenderedContent = '';\n\t\tthis._renderData = null;\n\t}\n\n\tpublic getDomNode(): FastDomNode {\n\t\treturn this._domNode;\n\t}\n\n\tpublic getIsInEditableRange(): boolean {\n\t\treturn this._isInEditableRange;\n\t}\n\n\tpublic getPosition(): Position {\n\t\treturn this._position;\n\t}\n\n\tpublic show(): void {\n\t\tif (!this._isVisible) {\n\t\t\tthis._domNode.setVisibility('inherit');\n\t\t\tthis._isVisible = true;\n\t\t}\n\t}\n\n\tpublic hide(): void {\n\t\tif (this._isVisible) {\n\t\t\tthis._domNode.setVisibility('hidden');\n\t\t\tthis._isVisible = false;\n\t\t}\n\t}\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tif (e.lineHeight) {\n\t\t\tthis._lineHeight = this._context.configuration.editor.lineHeight;\n\t\t}\n\t\tif (e.viewInfo) {\n\t\t\tthis._cursorStyle = this._context.configuration.editor.viewInfo.cursorStyle;\n\t\t}\n\t\tif (e.fontInfo) {\n\t\t\tConfiguration.applyFontInfo(this._domNode, this._context.configuration.editor.fontInfo);\n\t\t\tthis._typicalHalfwidthCharacterWidth = this._context.configuration.editor.fontInfo.typicalHalfwidthCharacterWidth;\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic onCursorPositionChanged(position: Position, isInEditableRange: boolean): boolean {\n\t\tthis.updatePosition(position);\n\t\tthis._isInEditableRange = isInEditableRange;\n\t\treturn true;\n\t}\n\n\tprivate _prepareRender(ctx: RenderingContext): ViewCursorRenderData {\n\t\tif (this._cursorStyle === TextEditorCursorStyle.Line || this._cursorStyle === TextEditorCursorStyle.LineThin) {\n\t\t\tconst visibleRange = ctx.visibleRangeForPosition(this._position);\n\t\t\tif (!visibleRange) {\n\t\t\t\t// Outside viewport\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tlet width: number;\n\t\t\tif (this._cursorStyle === TextEditorCursorStyle.Line) {\n\t\t\t\twidth = dom.computeScreenAwareSize(2);\n\t\t\t} else {\n\t\t\t\twidth = dom.computeScreenAwareSize(1);\n\t\t\t}\n\t\t\tconst top = ctx.getVerticalOffsetForLineNumber(this._position.lineNumber) - ctx.bigNumbersDelta;\n\t\t\treturn new ViewCursorRenderData(top, visibleRange.left, width, '');\n\t\t}\n\n\t\tconst visibleRangeForCharacter = ctx.linesVisibleRangesForRange(new Range(this._position.lineNumber, this._position.column, this._position.lineNumber, this._position.column + 1), false);\n\n\t\tif (!visibleRangeForCharacter || visibleRangeForCharacter.length === 0 || visibleRangeForCharacter[0].ranges.length === 0) {\n\t\t\t// Outside viewport\n\t\t\treturn null;\n\t\t}\n\n\t\tconst range = visibleRangeForCharacter[0].ranges[0];\n\t\tconst width = range.width < 1 ? this._typicalHalfwidthCharacterWidth : range.width;\n\n\t\tlet textContent = '';\n\t\tif (this._cursorStyle === TextEditorCursorStyle.Block) {\n\t\t\tconst lineContent = this._context.model.getLineContent(this._position.lineNumber);\n\t\t\ttextContent = lineContent.charAt(this._position.column - 1);\n\t\t}\n\n\t\tconst top = ctx.getVerticalOffsetForLineNumber(this._position.lineNumber) - ctx.bigNumbersDelta;\n\t\treturn new ViewCursorRenderData(top, range.left, width, textContent);\n\t}\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\tthis._renderData = this._prepareRender(ctx);\n\t}\n\n\tpublic render(ctx: RestrictedRenderingContext): IViewCursorRenderData {\n\t\tif (!this._renderData) {\n\t\t\tthis._domNode.setDisplay('none');\n\t\t\treturn null;\n\t\t}\n\n\t\tif (this._lastRenderedContent !== this._renderData.textContent) {\n\t\t\tthis._lastRenderedContent = this._renderData.textContent;\n\t\t\tthis._domNode.domNode.textContent = this._lastRenderedContent;\n\t\t}\n\n\t\tthis._domNode.setDisplay('block');\n\t\tthis._domNode.setTop(this._renderData.top);\n\t\tthis._domNode.setLeft(this._renderData.left);\n\t\tthis._domNode.setWidth(this._renderData.width);\n\t\tthis._domNode.setLineHeight(this._lineHeight);\n\t\tthis._domNode.setHeight(this._lineHeight);\n\n\t\treturn {\n\t\t\tdomNode: this._domNode.domNode,\n\t\t\tposition: this._position,\n\t\t\tcontentLeft: this._renderData.left,\n\t\t\theight: this._lineHeight,\n\t\t\twidth: 2\n\t\t};\n\t}\n\n\tprivate updatePosition(newPosition: Position): void {\n\t\tthis._position = newPosition;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\n\nexport const ITelemetryService = createDecorator('telemetryService');\n\nexport interface ITelemetryInfo {\n\tsessionId: string;\n\tmachineId: string;\n\tinstanceId: string;\n}\n\nexport interface ITelemetryData {\n\tfrom?: string;\n\ttarget?: string;\n\t[key: string]: any;\n}\n\nexport interface ITelemetryExperiments {\n\tmergeQuickLinks: boolean;\n}\n\nexport interface ITelemetryService {\n\n\t_serviceBrand: any;\n\n\t/**\n\t * Sends a telemetry event that has been privacy approved.\n\t * Do not call this unless you have been given approval.\n\t */\n\tpublicLog(eventName: string, data?: ITelemetryData): TPromise;\n\n\tgetTelemetryInfo(): TPromise;\n\n\tisOptedIn: boolean;\n\n\tgetExperiments(): ITelemetryExperiments;\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'use strict';\n\nimport { illegalArgument } from 'vs/base/common/errors';\nimport URI from 'vs/base/common/uri';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { ServicesAccessor, IConstructorSignature1 } from 'vs/platform/instantiation/common/instantiation';\nimport { CommandsRegistry, ICommandHandlerDescription } from 'vs/platform/commands/common/commands';\nimport { KeybindingsRegistry, ICommandAndKeybindingRule, IKeybindings } from 'vs/platform/keybinding/common/keybindingsRegistry';\nimport { Registry } from 'vs/platform/registry/common/platform';\nimport { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';\nimport { Position } from 'vs/editor/common/core/position';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { IModelService } from 'vs/editor/common/services/modelService';\nimport { MenuId, MenuRegistry, IMenuItem } from 'vs/platform/actions/common/actions';\nimport { IEditorService } from 'vs/platform/editor/common/editor';\nimport { IContextKeyService, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';\nimport { ICodeEditorService, getCodeEditor } from 'vs/editor/common/services/codeEditorService';\n\nexport type ServicesAccessor = ServicesAccessor;\nexport type ICommonEditorContributionCtor = IConstructorSignature1;\n\n// ----- Generic Command\n\nexport interface ICommandKeybindingsOptions extends IKeybindings {\n\tkbExpr?: ContextKeyExpr;\n\tweight?: number;\n}\nexport interface ICommandOptions {\n\tid: string;\n\tprecondition: ContextKeyExpr;\n\tkbOpts?: ICommandKeybindingsOptions;\n\tdescription?: ICommandHandlerDescription;\n}\nexport abstract class Command {\n\tpublic readonly id: string;\n\tpublic readonly precondition: ContextKeyExpr;\n\tprivate readonly _kbOpts: ICommandKeybindingsOptions;\n\tprivate readonly _description: ICommandHandlerDescription;\n\n\tconstructor(opts: ICommandOptions) {\n\t\tthis.id = opts.id;\n\t\tthis.precondition = opts.precondition;\n\t\tthis._kbOpts = opts.kbOpts;\n\t\tthis._description = opts.description;\n\t}\n\n\tpublic toCommandAndKeybindingRule(defaultWeight: number): ICommandAndKeybindingRule {\n\t\tconst kbOpts = this._kbOpts || { primary: 0 };\n\n\t\tlet kbWhen = kbOpts.kbExpr;\n\t\tif (this.precondition) {\n\t\t\tif (kbWhen) {\n\t\t\t\tkbWhen = ContextKeyExpr.and(kbWhen, this.precondition);\n\t\t\t} else {\n\t\t\t\tkbWhen = this.precondition;\n\t\t\t}\n\t\t}\n\n\t\tconst weight = (typeof kbOpts.weight === 'number' ? kbOpts.weight : defaultWeight);\n\n\t\treturn {\n\t\t\tid: this.id,\n\t\t\thandler: (accessor, args) => this.runCommand(accessor, args),\n\t\t\tweight: weight,\n\t\t\twhen: kbWhen,\n\t\t\tprimary: kbOpts.primary,\n\t\t\tsecondary: kbOpts.secondary,\n\t\t\twin: kbOpts.win,\n\t\t\tlinux: kbOpts.linux,\n\t\t\tmac: kbOpts.mac,\n\t\t\tdescription: this._description\n\t\t};\n\t}\n\n\tpublic abstract runCommand(accessor: ServicesAccessor, args: any): void | TPromise;\n}\n\n// ----- Editor Command & Editor Contribution Command\n\nfunction findFocusedEditor(accessor: ServicesAccessor): editorCommon.ICommonCodeEditor {\n\treturn accessor.get(ICodeEditorService).getFocusedCodeEditor();\n}\nfunction getWorkbenchActiveEditor(accessor: ServicesAccessor): editorCommon.ICommonCodeEditor {\n\tconst editorService = accessor.get(IEditorService);\n\tlet activeEditor = (editorService).getActiveEditor && (editorService).getActiveEditor();\n\treturn getCodeEditor(activeEditor);\n}\n\nexport interface IContributionCommandOptions extends ICommandOptions {\n\thandler: (controller: T) => void;\n}\nexport interface EditorControllerCommand {\n\tnew (opts: IContributionCommandOptions): EditorCommand;\n}\nexport abstract class EditorCommand extends Command {\n\n\t/**\n\t * Create a command class that is bound to a certain editor contribution.\n\t */\n\tpublic static bindToContribution(controllerGetter: (editor: editorCommon.ICommonCodeEditor) => T): EditorControllerCommand {\n\t\treturn class EditorControllerCommandImpl extends EditorCommand {\n\t\t\tprivate _callback: (controller: T) => void;\n\n\t\t\tconstructor(opts: IContributionCommandOptions) {\n\t\t\t\tsuper(opts);\n\n\t\t\t\tthis._callback = opts.handler;\n\t\t\t}\n\n\t\t\tpublic runEditorCommand(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor, args: any): void {\n\t\t\t\tlet controller = controllerGetter(editor);\n\t\t\t\tif (controller) {\n\t\t\t\t\tthis._callback(controllerGetter(editor));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tpublic runCommand(accessor: ServicesAccessor, args: any): void | TPromise {\n\t\t// Find the editor with text focus\n\t\tlet editor = findFocusedEditor(accessor);\n\n\t\tif (!editor) {\n\t\t\t// Fallback to use what the workbench considers the active editor\n\t\t\teditor = getWorkbenchActiveEditor(accessor);\n\t\t}\n\n\t\tif (!editor) {\n\t\t\t// well, at least we tried...\n\t\t\treturn;\n\t\t}\n\n\t\treturn editor.invokeWithinContext((editorAccessor) => {\n\t\t\tconst kbService = editorAccessor.get(IContextKeyService);\n\t\t\tif (!kbService.contextMatchesRules(this.precondition)) {\n\t\t\t\t// precondition does not hold\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treturn this.runEditorCommand(editorAccessor, editor, args);\n\t\t});\n\t}\n\n\tpublic abstract runEditorCommand(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor, args: any): void | TPromise;\n}\n\n// ----- Editor Action\n\nexport interface IEditorCommandMenuOptions {\n\tgroup?: string;\n\torder?: number;\n}\nexport interface IActionOptions extends ICommandOptions {\n\tlabel: string;\n\talias: string;\n\tmenuOpts?: IEditorCommandMenuOptions;\n}\nexport abstract class EditorAction extends EditorCommand {\n\n\tpublic label: string;\n\tpublic alias: string;\n\tprivate menuOpts: IEditorCommandMenuOptions;\n\n\tconstructor(opts: IActionOptions) {\n\t\tsuper(opts);\n\t\tthis.label = opts.label;\n\t\tthis.alias = opts.alias;\n\t\tthis.menuOpts = opts.menuOpts;\n\t}\n\n\tpublic toMenuItem(): IMenuItem {\n\t\tif (!this.menuOpts) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tcommand: {\n\t\t\t\tid: this.id,\n\t\t\t\ttitle: this.label\n\t\t\t},\n\t\t\twhen: this.precondition,\n\t\t\tgroup: this.menuOpts.group,\n\t\t\torder: this.menuOpts.order\n\t\t};\n\t}\n\n\tpublic runEditorCommand(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor, args: any): void | TPromise {\n\t\tthis.reportTelemetry(accessor, editor);\n\t\treturn this.run(accessor, editor, args || {});\n\t}\n\n\tprotected reportTelemetry(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor) {\n\t\taccessor.get(ITelemetryService).publicLog('editorActionInvoked', { name: this.label, id: this.id, ...editor.getTelemetryData() });\n\t}\n\n\tpublic abstract run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor, args: any): void | TPromise;\n}\n\n// --- Registration of commands and actions\n\nexport function editorAction(ctor: { new (): EditorAction; }): void {\n\tCommonEditorRegistry.registerEditorAction(new ctor());\n}\n\nexport function editorCommand(ctor: { new (): EditorCommand }): void {\n\tregisterEditorCommand(new ctor());\n}\n\nexport function registerEditorCommand(editorCommand: T): T {\n\tCommonEditorRegistry.registerEditorCommand(editorCommand);\n\treturn editorCommand;\n}\n\nexport function commonEditorContribution(ctor: ICommonEditorContributionCtor): void {\n\tEditorContributionRegistry.INSTANCE.registerEditorContribution(ctor);\n}\n\nexport module CommonEditorRegistry {\n\n\t// --- Editor Actions\n\n\texport function registerEditorAction(editorAction: EditorAction) {\n\t\tEditorContributionRegistry.INSTANCE.registerEditorAction(editorAction);\n\t}\n\texport function getEditorActions(): EditorAction[] {\n\t\treturn EditorContributionRegistry.INSTANCE.getEditorActions();\n\t}\n\texport function getEditorCommand(commandId: string): EditorCommand {\n\t\treturn EditorContributionRegistry.INSTANCE.getEditorCommand(commandId);\n\t}\n\n\t// --- Editor Contributions\n\n\texport function getEditorContributions(): ICommonEditorContributionCtor[] {\n\t\treturn EditorContributionRegistry.INSTANCE.getEditorContributions();\n\t}\n\n\t// --- Editor Commands\n\n\texport function commandWeight(importance: number = 0): number {\n\t\treturn KeybindingsRegistry.WEIGHT.editorContrib(importance);\n\t}\n\n\texport function registerEditorCommand(editorCommand: EditorCommand): void {\n\t\tEditorContributionRegistry.INSTANCE.registerEditorCommand(editorCommand);\n\t}\n\n\texport function registerLanguageCommand(id: string, handler: (accessor: ServicesAccessor, args: { [n: string]: any }) => any) {\n\t\tCommandsRegistry.registerCommand(id, (accessor, args) => handler(accessor, args || {}));\n\t}\n\n\texport function registerDefaultLanguageCommand(id: string, handler: (model: editorCommon.IModel, position: Position, args: { [n: string]: any }) => any) {\n\t\tregisterLanguageCommand(id, function (accessor, args) {\n\n\t\t\tconst { resource, position } = args;\n\t\t\tif (!(resource instanceof URI)) {\n\t\t\t\tthrow illegalArgument('resource');\n\t\t\t}\n\t\t\tif (!Position.isIPosition(position)) {\n\t\t\t\tthrow illegalArgument('position');\n\t\t\t}\n\n\t\t\tconst model = accessor.get(IModelService).getModel(resource);\n\t\t\tif (!model) {\n\t\t\t\tthrow illegalArgument('Can not find open model for ' + resource);\n\t\t\t}\n\n\t\t\tconst editorPosition = Position.lift(position);\n\n\t\t\treturn handler(model, editorPosition, args);\n\t\t});\n\t}\n}\n\n// Editor extension points\nconst Extensions = {\n\tEditorCommonContributions: 'editor.commonContributions'\n};\n\nclass EditorContributionRegistry {\n\n\tpublic static INSTANCE = new EditorContributionRegistry();\n\n\tprivate editorContributions: ICommonEditorContributionCtor[];\n\tprivate editorActions: EditorAction[];\n\tprivate editorCommands: { [commandId: string]: EditorCommand; };\n\n\tconstructor() {\n\t\tthis.editorContributions = [];\n\t\tthis.editorActions = [];\n\t\tthis.editorCommands = Object.create(null);\n\t}\n\n\tpublic registerEditorContribution(ctor: ICommonEditorContributionCtor): void {\n\t\tthis.editorContributions.push(ctor);\n\t}\n\n\tpublic registerEditorAction(action: EditorAction) {\n\n\t\tlet menuItem = action.toMenuItem();\n\t\tif (menuItem) {\n\t\t\tMenuRegistry.appendMenuItem(MenuId.EditorContext, menuItem);\n\t\t}\n\n\t\tKeybindingsRegistry.registerCommandAndKeybindingRule(action.toCommandAndKeybindingRule(KeybindingsRegistry.WEIGHT.editorContrib()));\n\n\t\tthis.editorActions.push(action);\n\t}\n\n\tpublic getEditorContributions(): ICommonEditorContributionCtor[] {\n\t\treturn this.editorContributions.slice(0);\n\t}\n\n\tpublic getEditorActions(): EditorAction[] {\n\t\treturn this.editorActions.slice(0);\n\t}\n\n\tpublic registerEditorCommand(editorCommand: EditorCommand) {\n\t\tKeybindingsRegistry.registerCommandAndKeybindingRule(editorCommand.toCommandAndKeybindingRule(KeybindingsRegistry.WEIGHT.editorContrib()));\n\t\tthis.editorCommands[editorCommand.id] = editorCommand;\n\t}\n\n\tpublic getEditorCommand(commandId: string): EditorCommand {\n\t\treturn (this.editorCommands[commandId] || null);\n\t}\n\n}\nRegistry.add(Extensions.EditorCommonContributions, EditorContributionRegistry.INSTANCE);\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'use strict';\n\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { Disposable, IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { ServicesAccessor, IInstantiationService } from 'vs/platform/instantiation/common/instantiation';\nimport { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';\nimport { IContextKey, IContextKeyServiceTarget, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';\nimport { CommonEditorConfiguration } from 'vs/editor/common/config/commonEditorConfig';\nimport { Cursor, CursorStateChangedEvent } from 'vs/editor/common/controller/cursor';\nimport { CursorColumns, ICursors, CursorConfiguration } from 'vs/editor/common/controller/cursorCommon';\nimport { Position, IPosition } from 'vs/editor/common/core/position';\nimport { Range, IRange } from 'vs/editor/common/core/range';\nimport { Selection, ISelection } from 'vs/editor/common/core/selection';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { ViewModel } from 'vs/editor/common/viewModel/viewModelImpl';\nimport { hash } from 'vs/base/common/hash';\nimport { EditorModeContext } from 'vs/editor/common/modes/editorModeContext';\nimport {\n\tIModelContentChangedEvent, IModelDecorationsChangedEvent,\n\tIModelLanguageChangedEvent, IModelOptionsChangedEvent, TextModelEventType\n} from 'vs/editor/common/model/textModelEvents';\nimport * as editorOptions from 'vs/editor/common/config/editorOptions';\nimport { ICursorPositionChangedEvent, ICursorSelectionChangedEvent } from 'vs/editor/common/controller/cursorEvents';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';\nimport { VerticalRevealType } from 'vs/editor/common/view/viewEvents';\n\nlet EDITOR_ID = 0;\n\nexport abstract class CommonCodeEditor extends Disposable implements editorCommon.ICommonCodeEditor {\n\n\tprivate readonly _onDidDispose: Emitter = this._register(new Emitter());\n\tpublic readonly onDidDispose: Event = this._onDidDispose.event;\n\n\tprivate readonly _onDidChangeModelContent: Emitter = this._register(new Emitter());\n\tpublic readonly onDidChangeModelContent: Event = this._onDidChangeModelContent.event;\n\n\tprivate readonly _onDidChangeModelLanguage: Emitter = this._register(new Emitter());\n\tpublic readonly onDidChangeModelLanguage: Event = this._onDidChangeModelLanguage.event;\n\n\tprivate readonly _onDidChangeModelOptions: Emitter = this._register(new Emitter());\n\tpublic readonly onDidChangeModelOptions: Event = this._onDidChangeModelOptions.event;\n\n\tprivate readonly _onDidChangeModelDecorations: Emitter = this._register(new Emitter());\n\tpublic readonly onDidChangeModelDecorations: Event = this._onDidChangeModelDecorations.event;\n\n\tprivate readonly _onDidChangeConfiguration: Emitter = this._register(new Emitter());\n\tpublic readonly onDidChangeConfiguration: Event = this._onDidChangeConfiguration.event;\n\n\tprotected readonly _onDidChangeModel: Emitter = this._register(new Emitter());\n\tpublic readonly onDidChangeModel: Event = this._onDidChangeModel.event;\n\n\tprivate readonly _onDidChangeCursorPosition: Emitter = this._register(new Emitter());\n\tpublic readonly onDidChangeCursorPosition: Event = this._onDidChangeCursorPosition.event;\n\n\tprivate readonly _onDidChangeCursorSelection: Emitter = this._register(new Emitter());\n\tpublic readonly onDidChangeCursorSelection: Event = this._onDidChangeCursorSelection.event;\n\n\tprivate readonly _onDidLayoutChange: Emitter = this._register(new Emitter());\n\tpublic readonly onDidLayoutChange: Event = this._onDidLayoutChange.event;\n\n\tprotected readonly _onDidFocusEditorText: Emitter = this._register(new Emitter());\n\tpublic readonly onDidFocusEditorText: Event = this._onDidFocusEditorText.event;\n\n\tprotected readonly _onDidBlurEditorText: Emitter = this._register(new Emitter());\n\tpublic readonly onDidBlurEditorText: Event = this._onDidBlurEditorText.event;\n\n\tprotected readonly _onDidFocusEditor: Emitter = this._register(new Emitter());\n\tpublic readonly onDidFocusEditor: Event = this._onDidFocusEditor.event;\n\n\tprotected readonly _onDidBlurEditor: Emitter = this._register(new Emitter());\n\tpublic readonly onDidBlurEditor: Event = this._onDidBlurEditor.event;\n\n\tprivate readonly _onWillType: Emitter = this._register(new Emitter());\n\tpublic readonly onWillType = this._onWillType.event;\n\n\tprivate readonly _onDidType: Emitter = this._register(new Emitter());\n\tpublic readonly onDidType = this._onDidType.event;\n\n\tprivate readonly _onDidPaste: Emitter = this._register(new Emitter());\n\tpublic readonly onDidPaste = this._onDidPaste.event;\n\n\n\tprotected readonly domElement: IContextKeyServiceTarget;\n\tprotected readonly id: number;\n\tprotected readonly _configuration: CommonEditorConfiguration;\n\n\tprotected _contributions: { [key: string]: editorCommon.IEditorContribution; };\n\tprotected _actions: { [key: string]: editorCommon.IEditorAction; };\n\n\t// --- Members logically associated to a model\n\tprotected model: editorCommon.IModel;\n\tprotected listenersToRemove: IDisposable[];\n\tprotected hasView: boolean;\n\n\tprotected viewModel: ViewModel;\n\tprotected cursor: Cursor;\n\n\tprotected readonly _instantiationService: IInstantiationService;\n\tprotected readonly _contextKeyService: IContextKeyService;\n\n\t/**\n\t * map from \"parent\" decoration type to live decoration ids.\n\t */\n\tprivate _decorationTypeKeysToIds: { [decorationTypeKey: string]: string[] };\n\tprivate _decorationTypeSubtypes: { [decorationTypeKey: string]: { [subtype: string]: boolean } };\n\n\n\tconstructor(\n\t\tdomElement: IContextKeyServiceTarget,\n\t\toptions: editorOptions.IEditorOptions,\n\t\tinstantiationService: IInstantiationService,\n\t\tcontextKeyService: IContextKeyService\n\t) {\n\t\tsuper();\n\t\tthis.domElement = domElement;\n\t\tthis.id = (++EDITOR_ID);\n\t\tthis._decorationTypeKeysToIds = {};\n\t\tthis._decorationTypeSubtypes = {};\n\n\t\toptions = options || {};\n\t\tthis._configuration = this._register(this._createConfiguration(options));\n\t\tthis._register(this._configuration.onDidChange((e) => {\n\t\t\tthis._onDidChangeConfiguration.fire(e);\n\n\t\t\tif (e.layoutInfo) {\n\t\t\t\tthis._onDidLayoutChange.fire(this._configuration.editor.layoutInfo);\n\t\t\t}\n\t\t}));\n\n\t\tthis._contextKeyService = this._register(contextKeyService.createScoped(this.domElement));\n\t\tthis._register(new EditorContextKeysManager(this, this._contextKeyService));\n\t\tthis._register(new EditorModeContext(this, this._contextKeyService));\n\n\t\tthis._instantiationService = instantiationService.createChild(new ServiceCollection([IContextKeyService, this._contextKeyService]));\n\n\t\tthis._attachModel(null);\n\n\t\tthis._contributions = {};\n\t\tthis._actions = {};\n\t}\n\n\tprotected abstract _createConfiguration(options: editorOptions.IEditorOptions): CommonEditorConfiguration;\n\n\tpublic getId(): string {\n\t\treturn this.getEditorType() + ':' + this.id;\n\t}\n\n\tpublic getEditorType(): string {\n\t\treturn editorCommon.EditorType.ICodeEditor;\n\t}\n\n\tpublic destroy(): void {\n\t\tthis.dispose();\n\t}\n\n\tpublic dispose(): void {\n\t\tlet keys = Object.keys(this._contributions);\n\t\tfor (let i = 0, len = keys.length; i < len; i++) {\n\t\t\tlet contributionId = keys[i];\n\t\t\tthis._contributions[contributionId].dispose();\n\t\t}\n\t\tthis._contributions = {};\n\n\t\t// editor actions don't need to be disposed\n\t\tthis._actions = {};\n\n\t\tthis._postDetachModelCleanup(this._detachModel());\n\n\t\tthis._onDidDispose.fire();\n\n\t\tsuper.dispose();\n\t}\n\n\tpublic invokeWithinContext(fn: (accessor: ServicesAccessor) => T): T {\n\t\treturn this._instantiationService.invokeFunction(fn);\n\t}\n\n\tpublic updateOptions(newOptions: editorOptions.IEditorOptions): void {\n\t\tthis._configuration.updateOptions(newOptions);\n\t}\n\n\tpublic getConfiguration(): editorOptions.InternalEditorOptions {\n\t\treturn this._configuration.editor;\n\t}\n\n\tpublic getRawConfiguration(): editorOptions.IEditorOptions {\n\t\treturn this._configuration.getRawOptions();\n\t}\n\n\tpublic getValue(options: { preserveBOM: boolean; lineEnding: string; } = null): string {\n\t\tif (this.model) {\n\t\t\tlet preserveBOM: boolean = (options && options.preserveBOM) ? true : false;\n\t\t\tlet eolPreference = editorCommon.EndOfLinePreference.TextDefined;\n\t\t\tif (options && options.lineEnding && options.lineEnding === '\\n') {\n\t\t\t\teolPreference = editorCommon.EndOfLinePreference.LF;\n\t\t\t} else if (options && options.lineEnding && options.lineEnding === '\\r\\n') {\n\t\t\t\teolPreference = editorCommon.EndOfLinePreference.CRLF;\n\t\t\t}\n\t\t\treturn this.model.getValue(eolPreference, preserveBOM);\n\t\t}\n\t\treturn '';\n\t}\n\n\tpublic setValue(newValue: string): void {\n\t\tif (this.model) {\n\t\t\tthis.model.setValue(newValue);\n\t\t}\n\t}\n\n\tpublic getModel(): editorCommon.IModel {\n\t\treturn this.model;\n\t}\n\n\tpublic setModel(model: editorCommon.IModel = null): void {\n\t\tif (this.model === model) {\n\t\t\t// Current model is the new model\n\t\t\treturn;\n\t\t}\n\n\t\tlet detachedModel = this._detachModel();\n\t\tthis._attachModel(model);\n\n\t\tlet e: editorCommon.IModelChangedEvent = {\n\t\t\toldModelUrl: detachedModel ? detachedModel.uri : null,\n\t\t\tnewModelUrl: model ? model.uri : null\n\t\t};\n\n\t\tthis._onDidChangeModel.fire(e);\n\t\tthis._postDetachModelCleanup(detachedModel);\n\t}\n\n\tpublic getCenteredRangeInViewport(): Range {\n\t\tif (!this.hasView) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.viewModel.getCenteredRangeInViewport();\n\t}\n\n\tpublic getVisibleColumnFromPosition(rawPosition: IPosition): number {\n\t\tif (!this.model) {\n\t\t\treturn rawPosition.column;\n\t\t}\n\n\t\tlet position = this.model.validatePosition(rawPosition);\n\t\tlet tabSize = this.model.getOptions().tabSize;\n\n\t\treturn CursorColumns.visibleColumnFromColumn(this.model.getLineContent(position.lineNumber), position.column, tabSize) + 1;\n\t}\n\n\tpublic getPosition(): Position {\n\t\tif (!this.cursor) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.cursor.getPosition().clone();\n\t}\n\n\tpublic setPosition(position: IPosition, reveal: boolean = false, revealVerticalInCenter: boolean = false, revealHorizontal: boolean = false): void {\n\t\tif (!this.cursor) {\n\t\t\treturn;\n\t\t}\n\t\tif (!Position.isIPosition(position)) {\n\t\t\tthrow new Error('Invalid arguments');\n\t\t}\n\t\tthis.cursor.setSelections('api', [{\n\t\t\tselectionStartLineNumber: position.lineNumber,\n\t\t\tselectionStartColumn: position.column,\n\t\t\tpositionLineNumber: position.lineNumber,\n\t\t\tpositionColumn: position.column\n\t\t}]);\n\t\tif (reveal) {\n\t\t\tthis.revealPosition(position, revealVerticalInCenter, revealHorizontal);\n\t\t}\n\t}\n\n\tprivate _sendRevealRange(modelRange: Range, verticalType: VerticalRevealType, revealHorizontal: boolean): void {\n\t\tif (!this.model || !this.cursor) {\n\t\t\treturn;\n\t\t}\n\t\tif (!Range.isIRange(modelRange)) {\n\t\t\tthrow new Error('Invalid arguments');\n\t\t}\n\t\tconst validatedModelRange = this.model.validateRange(modelRange);\n\t\tconst viewRange = this.viewModel.coordinatesConverter.convertModelRangeToViewRange(validatedModelRange);\n\n\t\tthis.cursor.emitCursorRevealRange(viewRange, verticalType, revealHorizontal);\n\t}\n\n\tpublic revealLine(lineNumber: number): void {\n\t\tthis._revealLine(lineNumber, VerticalRevealType.Simple);\n\t}\n\n\tpublic revealLineInCenter(lineNumber: number): void {\n\t\tthis._revealLine(lineNumber, VerticalRevealType.Center);\n\t}\n\n\tpublic revealLineInCenterIfOutsideViewport(lineNumber: number): void {\n\t\tthis._revealLine(lineNumber, VerticalRevealType.CenterIfOutsideViewport);\n\t}\n\n\tprivate _revealLine(lineNumber: number, revealType: VerticalRevealType): void {\n\t\tif (typeof lineNumber !== 'number') {\n\t\t\tthrow new Error('Invalid arguments');\n\t\t}\n\n\t\tthis._sendRevealRange(\n\t\t\tnew Range(lineNumber, 1, lineNumber, 1),\n\t\t\trevealType,\n\t\t\tfalse\n\t\t);\n\t}\n\n\tpublic revealPosition(position: IPosition, revealVerticalInCenter: boolean = false, revealHorizontal: boolean = false): void {\n\t\tthis._revealPosition(\n\t\t\tposition,\n\t\t\trevealVerticalInCenter ? VerticalRevealType.Center : VerticalRevealType.Simple,\n\t\t\trevealHorizontal\n\t\t);\n\t}\n\n\tpublic revealPositionInCenter(position: IPosition): void {\n\t\tthis._revealPosition(\n\t\t\tposition,\n\t\t\tVerticalRevealType.Center,\n\t\t\ttrue\n\t\t);\n\t}\n\n\tpublic revealPositionInCenterIfOutsideViewport(position: IPosition): void {\n\t\tthis._revealPosition(\n\t\t\tposition,\n\t\t\tVerticalRevealType.CenterIfOutsideViewport,\n\t\t\ttrue\n\t\t);\n\t}\n\n\tprivate _revealPosition(position: IPosition, verticalType: VerticalRevealType, revealHorizontal: boolean): void {\n\t\tif (!Position.isIPosition(position)) {\n\t\t\tthrow new Error('Invalid arguments');\n\t\t}\n\n\t\tthis._sendRevealRange(\n\t\t\tnew Range(position.lineNumber, position.column, position.lineNumber, position.column),\n\t\t\tverticalType,\n\t\t\trevealHorizontal\n\t\t);\n\t}\n\n\tpublic getSelection(): Selection {\n\t\tif (!this.cursor) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.cursor.getSelection().clone();\n\t}\n\n\tpublic getSelections(): Selection[] {\n\t\tif (!this.cursor) {\n\t\t\treturn null;\n\t\t}\n\t\tlet selections = this.cursor.getSelections();\n\t\tlet result: Selection[] = [];\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tresult[i] = selections[i].clone();\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic setSelection(range: IRange, reveal?: boolean, revealVerticalInCenter?: boolean, revealHorizontal?: boolean): void;\n\tpublic setSelection(editorRange: Range, reveal?: boolean, revealVerticalInCenter?: boolean, revealHorizontal?: boolean): void;\n\tpublic setSelection(selection: ISelection, reveal?: boolean, revealVerticalInCenter?: boolean, revealHorizontal?: boolean): void;\n\tpublic setSelection(editorSelection: Selection, reveal?: boolean, revealVerticalInCenter?: boolean, revealHorizontal?: boolean): void;\n\tpublic setSelection(something: any, reveal: boolean = false, revealVerticalInCenter: boolean = false, revealHorizontal: boolean = false): void {\n\t\tlet isSelection = Selection.isISelection(something);\n\t\tlet isRange = Range.isIRange(something);\n\n\t\tif (!isSelection && !isRange) {\n\t\t\tthrow new Error('Invalid arguments');\n\t\t}\n\n\t\tif (isSelection) {\n\t\t\tthis._setSelectionImpl(something, reveal, revealVerticalInCenter, revealHorizontal);\n\t\t} else if (isRange) {\n\t\t\t// act as if it was an IRange\n\t\t\tlet selection: ISelection = {\n\t\t\t\tselectionStartLineNumber: something.startLineNumber,\n\t\t\t\tselectionStartColumn: something.startColumn,\n\t\t\t\tpositionLineNumber: something.endLineNumber,\n\t\t\t\tpositionColumn: something.endColumn\n\t\t\t};\n\t\t\tthis._setSelectionImpl(selection, reveal, revealVerticalInCenter, revealHorizontal);\n\t\t}\n\t}\n\n\tprivate _setSelectionImpl(sel: ISelection, reveal: boolean, revealVerticalInCenter: boolean, revealHorizontal: boolean): void {\n\t\tif (!this.cursor) {\n\t\t\treturn;\n\t\t}\n\t\tlet selection = new Selection(sel.selectionStartLineNumber, sel.selectionStartColumn, sel.positionLineNumber, sel.positionColumn);\n\t\tthis.cursor.setSelections('api', [selection]);\n\t\tif (reveal) {\n\t\t\tthis.revealRange(selection, revealVerticalInCenter, revealHorizontal);\n\t\t}\n\t}\n\n\tpublic revealLines(startLineNumber: number, endLineNumber: number): void {\n\t\tthis._revealLines(\n\t\t\tstartLineNumber,\n\t\t\tendLineNumber,\n\t\t\tVerticalRevealType.Simple\n\t\t);\n\t}\n\n\tpublic revealLinesInCenter(startLineNumber: number, endLineNumber: number): void {\n\t\tthis._revealLines(\n\t\t\tstartLineNumber,\n\t\t\tendLineNumber,\n\t\t\tVerticalRevealType.Center\n\t\t);\n\t}\n\n\tpublic revealLinesInCenterIfOutsideViewport(startLineNumber: number, endLineNumber: number): void {\n\t\tthis._revealLines(\n\t\t\tstartLineNumber,\n\t\t\tendLineNumber,\n\t\t\tVerticalRevealType.CenterIfOutsideViewport\n\t\t);\n\t}\n\n\tprivate _revealLines(startLineNumber: number, endLineNumber: number, verticalType: VerticalRevealType): void {\n\t\tif (typeof startLineNumber !== 'number' || typeof endLineNumber !== 'number') {\n\t\t\tthrow new Error('Invalid arguments');\n\t\t}\n\n\t\tthis._sendRevealRange(\n\t\t\tnew Range(startLineNumber, 1, endLineNumber, 1),\n\t\t\tverticalType,\n\t\t\tfalse\n\t\t);\n\t}\n\n\tpublic revealRange(range: IRange, revealVerticalInCenter: boolean = false, revealHorizontal: boolean = true): void {\n\t\tthis._revealRange(\n\t\t\trange,\n\t\t\trevealVerticalInCenter ? VerticalRevealType.Center : VerticalRevealType.Simple,\n\t\t\trevealHorizontal\n\t\t);\n\t}\n\n\tpublic revealRangeInCenter(range: IRange): void {\n\t\tthis._revealRange(\n\t\t\trange,\n\t\t\tVerticalRevealType.Center,\n\t\t\ttrue\n\t\t);\n\t}\n\n\tpublic revealRangeInCenterIfOutsideViewport(range: IRange): void {\n\t\tthis._revealRange(\n\t\t\trange,\n\t\t\tVerticalRevealType.CenterIfOutsideViewport,\n\t\t\ttrue\n\t\t);\n\t}\n\n\tpublic revealRangeAtTop(range: IRange): void {\n\t\tthis._revealRange(\n\t\t\trange,\n\t\t\tVerticalRevealType.Top,\n\t\t\ttrue\n\t\t);\n\t}\n\n\tprivate _revealRange(range: IRange, verticalType: VerticalRevealType, revealHorizontal: boolean): void {\n\t\tif (!Range.isIRange(range)) {\n\t\t\tthrow new Error('Invalid arguments');\n\t\t}\n\n\t\tthis._sendRevealRange(\n\t\t\tRange.lift(range),\n\t\t\tverticalType,\n\t\t\trevealHorizontal\n\t\t);\n\t}\n\n\tpublic setSelections(ranges: ISelection[]): void {\n\t\tif (!this.cursor) {\n\t\t\treturn;\n\t\t}\n\t\tif (!ranges || ranges.length === 0) {\n\t\t\tthrow new Error('Invalid arguments');\n\t\t}\n\t\tfor (let i = 0, len = ranges.length; i < len; i++) {\n\t\t\tif (!Selection.isISelection(ranges[i])) {\n\t\t\t\tthrow new Error('Invalid arguments');\n\t\t\t}\n\t\t}\n\t\tthis.cursor.setSelections('api', ranges);\n\t}\n\n\tpublic getScrollWidth(): number {\n\t\tif (!this.hasView) {\n\t\t\treturn -1;\n\t\t}\n\t\treturn this.viewModel.viewLayout.getScrollWidth();\n\t}\n\tpublic getScrollLeft(): number {\n\t\tif (!this.hasView) {\n\t\t\treturn -1;\n\t\t}\n\t\treturn this.viewModel.viewLayout.getScrollLeft();\n\t}\n\n\tpublic getScrollHeight(): number {\n\t\tif (!this.hasView) {\n\t\t\treturn -1;\n\t\t}\n\t\treturn this.viewModel.viewLayout.getScrollHeight();\n\t}\n\tpublic getScrollTop(): number {\n\t\tif (!this.hasView) {\n\t\t\treturn -1;\n\t\t}\n\t\treturn this.viewModel.viewLayout.getScrollTop();\n\t}\n\n\tpublic setScrollLeft(newScrollLeft: number): void {\n\t\tif (!this.hasView) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof newScrollLeft !== 'number') {\n\t\t\tthrow new Error('Invalid arguments');\n\t\t}\n\t\tthis.viewModel.viewLayout.setScrollPosition({\n\t\t\tscrollLeft: newScrollLeft\n\t\t});\n\t}\n\tpublic setScrollTop(newScrollTop: number): void {\n\t\tif (!this.hasView) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof newScrollTop !== 'number') {\n\t\t\tthrow new Error('Invalid arguments');\n\t\t}\n\t\tthis.viewModel.viewLayout.setScrollPosition({\n\t\t\tscrollTop: newScrollTop\n\t\t});\n\t}\n\tpublic setScrollPosition(position: editorCommon.INewScrollPosition): void {\n\t\tif (!this.hasView) {\n\t\t\treturn;\n\t\t}\n\t\tthis.viewModel.viewLayout.setScrollPosition(position);\n\t}\n\n\tpublic saveViewState(): editorCommon.ICodeEditorViewState {\n\t\tif (!this.cursor || !this.hasView) {\n\t\t\treturn null;\n\t\t}\n\t\tlet contributionsState: { [key: string]: any } = {};\n\n\t\tlet keys = Object.keys(this._contributions);\n\t\tfor (let i = 0, len = keys.length; i < len; i++) {\n\t\t\tlet id = keys[i];\n\t\t\tlet contribution = this._contributions[id];\n\t\t\tif (typeof contribution.saveViewState === 'function') {\n\t\t\t\tcontributionsState[id] = contribution.saveViewState();\n\t\t\t}\n\t\t}\n\n\t\tlet cursorState = this.cursor.saveState();\n\t\tlet viewState = this.viewModel.viewLayout.saveState();\n\t\treturn {\n\t\t\tcursorState: cursorState,\n\t\t\tviewState: viewState,\n\t\t\tcontributionsState: contributionsState\n\t\t};\n\t}\n\n\tpublic restoreViewState(s: editorCommon.ICodeEditorViewState): void {\n\t\tif (!this.cursor || !this.hasView) {\n\t\t\treturn;\n\t\t}\n\t\tif (s && s.cursorState && s.viewState) {\n\t\t\tlet codeEditorState = s;\n\t\t\tlet cursorState = codeEditorState.cursorState;\n\t\t\tif (Array.isArray(cursorState)) {\n\t\t\t\tthis.cursor.restoreState(cursorState);\n\t\t\t} else {\n\t\t\t\t// Backwards compatibility\n\t\t\t\tthis.cursor.restoreState([cursorState]);\n\t\t\t}\n\t\t\tthis.viewModel.viewLayout.restoreState(codeEditorState.viewState);\n\n\t\t\tlet contributionsState = s.contributionsState || {};\n\t\t\tlet keys = Object.keys(this._contributions);\n\t\t\tfor (let i = 0, len = keys.length; i < len; i++) {\n\t\t\t\tlet id = keys[i];\n\t\t\t\tlet contribution = this._contributions[id];\n\t\t\t\tif (typeof contribution.restoreViewState === 'function') {\n\t\t\t\t\tcontribution.restoreViewState(contributionsState[id]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic onVisible(): void {\n\t}\n\n\tpublic onHide(): void {\n\t}\n\n\tpublic abstract layout(dimension?: editorCommon.IDimension): void;\n\n\tpublic abstract focus(): void;\n\tpublic abstract isFocused(): boolean;\n\tpublic abstract hasWidgetFocus(): boolean;\n\n\tpublic getContribution(id: string): T {\n\t\treturn (this._contributions[id] || null);\n\t}\n\n\tpublic getActions(): editorCommon.IEditorAction[] {\n\t\tlet result: editorCommon.IEditorAction[] = [];\n\n\t\tlet keys = Object.keys(this._actions);\n\t\tfor (let i = 0, len = keys.length; i < len; i++) {\n\t\t\tlet id = keys[i];\n\t\t\tresult.push(this._actions[id]);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic getSupportedActions(): editorCommon.IEditorAction[] {\n\t\tlet result = this.getActions();\n\n\t\tresult = result.filter(action => action.isSupported());\n\n\t\treturn result;\n\t}\n\n\tpublic getAction(id: string): editorCommon.IEditorAction {\n\t\treturn this._actions[id] || null;\n\t}\n\n\tpublic trigger(source: string, handlerId: string, payload: any): void {\n\t\tpayload = payload || {};\n\n\t\t// Special case for typing\n\t\tif (handlerId === editorCommon.Handler.Type) {\n\t\t\tif (!this.cursor || typeof payload.text !== 'string' || payload.text.length === 0) {\n\t\t\t\t// nothing to do\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (source === 'keyboard') {\n\t\t\t\tthis._onWillType.fire(payload.text);\n\t\t\t}\n\t\t\tthis.cursor.trigger(source, handlerId, payload);\n\t\t\tif (source === 'keyboard') {\n\t\t\t\tthis._onDidType.fire(payload.text);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Special case for pasting\n\t\tif (handlerId === editorCommon.Handler.Paste) {\n\t\t\tif (!this.cursor || typeof payload.text !== 'string' || payload.text.length === 0) {\n\t\t\t\t// nothing to do\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst startPosition = this.cursor.getSelection().getStartPosition();\n\t\t\tthis.cursor.trigger(source, handlerId, payload);\n\t\t\tconst endPosition = this.cursor.getSelection().getStartPosition();\n\t\t\tif (source === 'keyboard') {\n\t\t\t\tthis._onDidPaste.fire(\n\t\t\t\t\tnew Range(startPosition.lineNumber, startPosition.column, endPosition.lineNumber, endPosition.column)\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst action = this.getAction(handlerId);\n\t\tif (action) {\n\t\t\tTPromise.as(action.run()).done(null, onUnexpectedError);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.cursor) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst command = CommonEditorRegistry.getEditorCommand(handlerId);\n\t\tif (command) {\n\t\t\tpayload = payload || {};\n\t\t\tpayload.source = source;\n\t\t\tTPromise.as(command.runEditorCommand(null, this, payload)).done(null, onUnexpectedError);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.cursor.trigger(source, handlerId, payload);\n\t}\n\n\tpublic _getCursors(): ICursors {\n\t\treturn this.cursor;\n\t}\n\n\tpublic _getCursorConfiguration(): CursorConfiguration {\n\t\treturn this.cursor.context.config;\n\t}\n\n\tpublic pushUndoStop(): boolean {\n\t\tif (!this.model) {\n\t\t\treturn false;\n\t\t}\n\t\tif (this._configuration.editor.readOnly) {\n\t\t\t// read only editor => sorry!\n\t\t\treturn false;\n\t\t}\n\t\tthis.model.pushStackElement();\n\t\treturn true;\n\t}\n\n\tpublic executeEdits(source: string, edits: editorCommon.IIdentifiedSingleEditOperation[], endCursorState?: Selection[]): boolean {\n\t\tif (!this.cursor) {\n\t\t\t// no view, no cursor\n\t\t\treturn false;\n\t\t}\n\t\tif (this._configuration.editor.readOnly) {\n\t\t\t// read only editor => sorry!\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.model.pushEditOperations(this.cursor.getSelections(), edits, () => {\n\t\t\treturn endCursorState ? endCursorState : this.cursor.getSelections();\n\t\t});\n\n\t\tif (endCursorState) {\n\t\t\tthis.cursor.setSelections(source, endCursorState);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic executeCommand(source: string, command: editorCommon.ICommand): void {\n\t\tif (!this.cursor) {\n\t\t\treturn;\n\t\t}\n\t\tthis.cursor.trigger(source, editorCommon.Handler.ExecuteCommand, command);\n\t}\n\n\tpublic executeCommands(source: string, commands: editorCommon.ICommand[]): void {\n\t\tif (!this.cursor) {\n\t\t\treturn;\n\t\t}\n\t\tthis.cursor.trigger(source, editorCommon.Handler.ExecuteCommands, commands);\n\t}\n\n\tpublic changeDecorations(callback: (changeAccessor: editorCommon.IModelDecorationsChangeAccessor) => any): any {\n\t\tif (!this.model) {\n\t\t\t//\t\t\tconsole.warn('Cannot change decorations on editor that is not attached to a model');\n\t\t\t// callback will not be called\n\t\t\treturn null;\n\t\t}\n\t\treturn this.model.changeDecorations(callback, this.id);\n\t}\n\n\tpublic getLineDecorations(lineNumber: number): editorCommon.IModelDecoration[] {\n\t\tif (!this.model) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.model.getLineDecorations(lineNumber, this.id, this._configuration.editor.readOnly);\n\t}\n\n\tpublic deltaDecorations(oldDecorations: string[], newDecorations: editorCommon.IModelDeltaDecoration[]): string[] {\n\t\tif (!this.model) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (oldDecorations.length === 0 && newDecorations.length === 0) {\n\t\t\treturn oldDecorations;\n\t\t}\n\n\t\treturn this.model.deltaDecorations(oldDecorations, newDecorations, this.id);\n\t}\n\n\tpublic setDecorations(decorationTypeKey: string, decorationOptions: editorCommon.IDecorationOptions[]): void {\n\n\t\tlet newDecorationsSubTypes: { [key: string]: boolean } = {};\n\t\tlet oldDecorationsSubTypes = this._decorationTypeSubtypes[decorationTypeKey] || {};\n\t\tthis._decorationTypeSubtypes[decorationTypeKey] = newDecorationsSubTypes;\n\n\t\tlet newModelDecorations: editorCommon.IModelDeltaDecoration[] = [];\n\n\t\tfor (let decorationOption of decorationOptions) {\n\t\t\tlet typeKey = decorationTypeKey;\n\t\t\tif (decorationOption.renderOptions) {\n\t\t\t\t// identify custom reder options by a hash code over all keys and values\n\t\t\t\t// For custom render options register a decoration type if necessary\n\t\t\t\tlet subType = hash(decorationOption.renderOptions).toString(16);\n\t\t\t\t// The fact that `decorationTypeKey` appears in the typeKey has no influence\n\t\t\t\t// it is just a mechanism to get predictable and unique keys (repeatable for the same options and unique across clients)\n\t\t\t\ttypeKey = decorationTypeKey + '-' + subType;\n\t\t\t\tif (!oldDecorationsSubTypes[subType] && !newDecorationsSubTypes[subType]) {\n\t\t\t\t\t// decoration type did not exist before, register new one\n\t\t\t\t\tthis._registerDecorationType(typeKey, decorationOption.renderOptions, decorationTypeKey);\n\t\t\t\t}\n\t\t\t\tnewDecorationsSubTypes[subType] = true;\n\t\t\t}\n\t\t\tlet opts = this._resolveDecorationOptions(typeKey, !!decorationOption.hoverMessage);\n\t\t\tif (decorationOption.hoverMessage) {\n\t\t\t\topts.hoverMessage = decorationOption.hoverMessage;\n\t\t\t}\n\t\t\tnewModelDecorations.push({ range: decorationOption.range, options: opts });\n\t\t}\n\n\t\t// remove decoration sub types that are no longer used, deregister decoration type if necessary\n\t\tfor (let subType in oldDecorationsSubTypes) {\n\t\t\tif (!newDecorationsSubTypes[subType]) {\n\t\t\t\tthis._removeDecorationType(decorationTypeKey + '-' + subType);\n\t\t\t}\n\t\t}\n\n\t\t// update all decorations\n\t\tlet oldDecorationsIds = this._decorationTypeKeysToIds[decorationTypeKey] || [];\n\t\tthis._decorationTypeKeysToIds[decorationTypeKey] = this.deltaDecorations(oldDecorationsIds, newModelDecorations);\n\t}\n\n\tpublic removeDecorations(decorationTypeKey: string): void {\n\t\t// remove decorations for type and sub type\n\t\tlet oldDecorationsIds = this._decorationTypeKeysToIds[decorationTypeKey];\n\t\tif (oldDecorationsIds) {\n\t\t\tthis.deltaDecorations(oldDecorationsIds, []);\n\t\t}\n\t\tif (this._decorationTypeKeysToIds.hasOwnProperty(decorationTypeKey)) {\n\t\t\tdelete this._decorationTypeKeysToIds[decorationTypeKey];\n\t\t}\n\t\tif (this._decorationTypeSubtypes.hasOwnProperty(decorationTypeKey)) {\n\t\t\tdelete this._decorationTypeSubtypes[decorationTypeKey];\n\t\t}\n\t}\n\n\tpublic getLayoutInfo(): editorOptions.EditorLayoutInfo {\n\t\treturn this._configuration.editor.layoutInfo;\n\t}\n\n\tprotected _attachModel(model: editorCommon.IModel): void {\n\t\tthis.model = model ? model : null;\n\t\tthis.listenersToRemove = [];\n\t\tthis.viewModel = null;\n\t\tthis.cursor = null;\n\n\t\tif (this.model) {\n\t\t\tthis.domElement.setAttribute('data-mode-id', this.model.getLanguageIdentifier().language);\n\t\t\tthis._configuration.setIsDominatedByLongLines(this.model.isDominatedByLongLines());\n\t\t\tthis._configuration.setMaxLineNumber(this.model.getLineCount());\n\n\t\t\tthis.model.onBeforeAttached();\n\n\t\t\tthis.viewModel = new ViewModel(this.id, this._configuration, this.model);\n\n\t\t\tthis.listenersToRemove.push(this.model.addBulkListener((events) => {\n\t\t\t\tfor (let i = 0, len = events.length; i < len; i++) {\n\t\t\t\t\tlet eventType = events[i].type;\n\t\t\t\t\tlet e = events[i].data;\n\n\t\t\t\t\tswitch (eventType) {\n\t\t\t\t\t\tcase TextModelEventType.ModelDecorationsChanged:\n\t\t\t\t\t\t\tthis._onDidChangeModelDecorations.fire(e);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TextModelEventType.ModelLanguageChanged:\n\t\t\t\t\t\t\tthis.domElement.setAttribute('data-mode-id', this.model.getLanguageIdentifier().language);\n\t\t\t\t\t\t\tthis._onDidChangeModelLanguage.fire(e);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TextModelEventType.ModelContentChanged:\n\t\t\t\t\t\t\tthis._onDidChangeModelContent.fire(e);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TextModelEventType.ModelOptionsChanged:\n\t\t\t\t\t\t\tthis._onDidChangeModelOptions.fire(e);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TextModelEventType.ModelDispose:\n\t\t\t\t\t\t\t// Someone might destroy the model from under the editor, so prevent any exceptions by setting a null model\n\t\t\t\t\t\t\tthis.setModel(null);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t// console.warn(\"Unhandled model event: \", e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\tthis.cursor = new Cursor(\n\t\t\t\tthis._configuration,\n\t\t\t\tthis.model,\n\t\t\t\tthis.viewModel\n\t\t\t);\n\n\t\t\tthis._createView();\n\n\t\t\tthis.listenersToRemove.push(this.cursor.onDidChange((e: CursorStateChangedEvent) => {\n\n\t\t\t\tlet positions: Position[] = [];\n\t\t\t\tfor (let i = 0, len = e.selections.length; i < len; i++) {\n\t\t\t\t\tpositions[i] = e.selections[i].getPosition();\n\t\t\t\t}\n\n\t\t\t\tconst e1: ICursorPositionChangedEvent = {\n\t\t\t\t\tposition: positions[0],\n\t\t\t\t\tsecondaryPositions: positions.slice(1),\n\t\t\t\t\treason: e.reason,\n\t\t\t\t\tsource: e.source\n\t\t\t\t};\n\t\t\t\tthis._onDidChangeCursorPosition.fire(e1);\n\n\t\t\t\tconst e2: ICursorSelectionChangedEvent = {\n\t\t\t\t\tselection: e.selections[0],\n\t\t\t\t\tsecondarySelections: e.selections.slice(1),\n\t\t\t\t\tsource: e.source,\n\t\t\t\t\treason: e.reason\n\t\t\t\t};\n\t\t\t\tthis._onDidChangeCursorSelection.fire(e2);\n\t\t\t}));\n\n\t\t} else {\n\t\t\tthis.hasView = false;\n\t\t}\n\t}\n\n\tprotected abstract _createView(): void;\n\n\tprotected _postDetachModelCleanup(detachedModel: editorCommon.IModel): void {\n\t\tif (detachedModel) {\n\t\t\tthis._decorationTypeKeysToIds = {};\n\t\t\tif (this._decorationTypeSubtypes) {\n\t\t\t\tfor (let decorationType in this._decorationTypeSubtypes) {\n\t\t\t\t\tlet subTypes = this._decorationTypeSubtypes[decorationType];\n\t\t\t\t\tfor (let subType in subTypes) {\n\t\t\t\t\t\tthis._removeDecorationType(decorationType + '-' + subType);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._decorationTypeSubtypes = {};\n\t\t\t}\n\t\t\tdetachedModel.removeAllDecorationsWithOwnerId(this.id);\n\t\t}\n\t}\n\n\tprotected _detachModel(): editorCommon.IModel {\n\t\tif (this.model) {\n\t\t\tthis.model.onBeforeDetached();\n\t\t}\n\n\t\tthis.hasView = false;\n\n\t\tthis.listenersToRemove = dispose(this.listenersToRemove);\n\n\t\tif (this.cursor) {\n\t\t\tthis.cursor.dispose();\n\t\t\tthis.cursor = null;\n\t\t}\n\n\t\tif (this.viewModel) {\n\t\t\tthis.viewModel.dispose();\n\t\t\tthis.viewModel = null;\n\t\t}\n\n\t\tlet result = this.model;\n\t\tthis.model = null;\n\n\t\tthis.domElement.removeAttribute('data-mode-id');\n\n\t\treturn result;\n\t}\n\n\tprotected abstract _registerDecorationType(key: string, options: editorCommon.IDecorationRenderOptions, parentTypeKey?: string): void;\n\tprotected abstract _removeDecorationType(key: string): void;\n\tprotected abstract _resolveDecorationOptions(typeKey: string, writable: boolean): editorCommon.IModelDecorationOptions;\n\n\tpublic getTelemetryData(): { [key: string]: any; } {\n\t\treturn null;\n\t}\n}\n\nclass EditorContextKeysManager extends Disposable {\n\n\tprivate _editor: CommonCodeEditor;\n\n\tprivate _editorId: IContextKey;\n\tprivate _editorFocus: IContextKey;\n\tprivate _editorTextFocus: IContextKey;\n\tprivate _editorTabMovesFocus: IContextKey;\n\tprivate _editorReadonly: IContextKey;\n\tprivate _hasMultipleSelections: IContextKey;\n\tprivate _hasNonEmptySelection: IContextKey;\n\n\tconstructor(\n\t\teditor: CommonCodeEditor,\n\t\tcontextKeyService: IContextKeyService\n\t) {\n\t\tsuper();\n\n\t\tthis._editor = editor;\n\n\t\tthis._editorId = contextKeyService.createKey('editorId', editor.getId());\n\t\tthis._editorFocus = EditorContextKeys.focus.bindTo(contextKeyService);\n\t\tthis._editorTextFocus = EditorContextKeys.textFocus.bindTo(contextKeyService);\n\t\tthis._editorTabMovesFocus = EditorContextKeys.tabMovesFocus.bindTo(contextKeyService);\n\t\tthis._editorReadonly = EditorContextKeys.readOnly.bindTo(contextKeyService);\n\t\tthis._hasMultipleSelections = EditorContextKeys.hasMultipleSelections.bindTo(contextKeyService);\n\t\tthis._hasNonEmptySelection = EditorContextKeys.hasNonEmptySelection.bindTo(contextKeyService);\n\n\t\tthis._register(this._editor.onDidChangeConfiguration(() => this._updateFromConfig()));\n\t\tthis._register(this._editor.onDidChangeCursorSelection(() => this._updateFromSelection()));\n\t\tthis._register(this._editor.onDidFocusEditor(() => this._updateFromFocus()));\n\t\tthis._register(this._editor.onDidBlurEditor(() => this._updateFromFocus()));\n\t\tthis._register(this._editor.onDidFocusEditorText(() => this._updateFromFocus()));\n\t\tthis._register(this._editor.onDidBlurEditorText(() => this._updateFromFocus()));\n\n\t\tthis._updateFromConfig();\n\t\tthis._updateFromSelection();\n\t\tthis._updateFromFocus();\n\t}\n\n\tprivate _updateFromConfig(): void {\n\t\tlet config = this._editor.getConfiguration();\n\n\t\tthis._editorTabMovesFocus.set(config.tabFocusMode);\n\t\tthis._editorReadonly.set(config.readOnly);\n\t}\n\n\tprivate _updateFromSelection(): void {\n\t\tlet selections = this._editor.getSelections();\n\t\tif (!selections) {\n\t\t\tthis._hasMultipleSelections.reset();\n\t\t\tthis._hasNonEmptySelection.reset();\n\t\t} else {\n\t\t\tthis._hasMultipleSelections.set(selections.length > 1);\n\t\t\tthis._hasNonEmptySelection.set(selections.some(s => !s.isEmpty()));\n\t\t}\n\t}\n\n\tprivate _updateFromFocus(): void {\n\t\tthis._editorFocus.set(this._editor.hasWidgetFocus());\n\t\tthis._editorTextFocus.set(this._editor.isFocused());\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { CursorState, ICursors, RevealTarget, IColumnSelectData, CursorContext } from 'vs/editor/common/controller/cursorCommon';\nimport { CursorChangeReason } from 'vs/editor/common/controller/cursorEvents';\nimport { CursorMoveCommands, CursorMove as CursorMove_ } from 'vs/editor/common/controller/cursorMoveCommands';\nimport { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';\nimport { registerEditorCommand, ICommandOptions, EditorCommand, Command } from 'vs/editor/common/editorCommonExtensions';\nimport { IColumnSelectResult, ColumnSelection } from 'vs/editor/common/controller/cursorColumnSelection';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { KeyMod, KeyCode } from 'vs/base/common/keyCodes';\nimport { KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry';\nimport H = editorCommon.Handler;\nimport { ICodeEditorService, getCodeEditor } from 'vs/editor/common/services/codeEditorService';\nimport { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';\nimport * as types from 'vs/base/common/types';\nimport { ICommandHandlerDescription } from 'vs/platform/commands/common/commands';\nimport { IEditorService } from 'vs/platform/editor/common/editor';\nimport { TypeOperations } from 'vs/editor/common/controller/cursorTypeOperations';\nimport { DeleteOperations } from 'vs/editor/common/controller/cursorDeleteOperations';\nimport { VerticalRevealType } from 'vs/editor/common/view/viewEvents';\n\nconst CORE_WEIGHT = KeybindingsRegistry.WEIGHT.editorCore();\n\nexport abstract class CoreEditorCommand extends EditorCommand {\n\tpublic runEditorCommand(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor, args: any): void {\n\t\tthis.runCoreEditorCommand(editor._getCursors(), args || {});\n\t}\n\n\tpublic abstract runCoreEditorCommand(cursors: ICursors, args: any): void;\n}\n\nexport namespace EditorScroll_ {\n\n\tconst isEditorScrollArgs = function (arg: any): boolean {\n\t\tif (!types.isObject(arg)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet scrollArg: RawArguments = arg;\n\n\t\tif (!types.isString(scrollArg.to)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!types.isUndefined(scrollArg.by) && !types.isString(scrollArg.by)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!types.isUndefined(scrollArg.value) && !types.isNumber(scrollArg.value)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!types.isUndefined(scrollArg.revealCursor) && !types.isBoolean(scrollArg.revealCursor)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t};\n\n\texport const description = {\n\t\tdescription: 'Scroll editor in the given direction',\n\t\targs: [\n\t\t\t{\n\t\t\t\tname: 'Editor scroll argument object',\n\t\t\t\tdescription: `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`,\n\t\t\t\tconstraint: isEditorScrollArgs\n\t\t\t}\n\t\t]\n\t};\n\n\t/**\n\t * Directions in the view for editor scroll command.\n\t */\n\texport const RawDirection = {\n\t\tUp: 'up',\n\t\tDown: 'down',\n\t};\n\n\t/**\n\t * Units for editor scroll 'by' argument\n\t */\n\texport const RawUnit = {\n\t\tLine: 'line',\n\t\tWrappedLine: 'wrappedLine',\n\t\tPage: 'page',\n\t\tHalfPage: 'halfPage'\n\t};\n\n\t/**\n\t * Arguments for editor scroll command\n\t */\n\texport interface RawArguments {\n\t\tto: string;\n\t\tby?: string;\n\t\tvalue?: number;\n\t\trevealCursor?: boolean;\n\t\tselect?: boolean;\n\t};\n\n\texport function parse(args: RawArguments): ParsedArguments {\n\t\tlet direction: Direction;\n\t\tswitch (args.to) {\n\t\t\tcase RawDirection.Up:\n\t\t\t\tdirection = Direction.Up;\n\t\t\t\tbreak;\n\t\t\tcase RawDirection.Down:\n\t\t\t\tdirection = Direction.Down;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// Illegal arguments\n\t\t\t\treturn null;\n\t\t}\n\n\t\tlet unit: Unit;\n\t\tswitch (args.by) {\n\t\t\tcase RawUnit.Line:\n\t\t\t\tunit = Unit.Line;\n\t\t\t\tbreak;\n\t\t\tcase RawUnit.WrappedLine:\n\t\t\t\tunit = Unit.WrappedLine;\n\t\t\t\tbreak;\n\t\t\tcase RawUnit.Page:\n\t\t\t\tunit = Unit.Page;\n\t\t\t\tbreak;\n\t\t\tcase RawUnit.HalfPage:\n\t\t\t\tunit = Unit.HalfPage;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tunit = Unit.WrappedLine;\n\t\t}\n\n\t\tconst value = Math.floor(args.value || 1);\n\t\tconst revealCursor = !!args.revealCursor;\n\n\t\treturn {\n\t\t\tdirection: direction,\n\t\t\tunit: unit,\n\t\t\tvalue: value,\n\t\t\trevealCursor: revealCursor,\n\t\t\tselect: (!!args.select)\n\t\t};\n\t}\n\n\texport interface ParsedArguments {\n\t\tdirection: Direction;\n\t\tunit: Unit;\n\t\tvalue: number;\n\t\trevealCursor: boolean;\n\t\tselect: boolean;\n\t}\n\n\texport const enum Direction {\n\t\tUp = 1,\n\t\tDown = 2\n\t}\n\n\texport const enum Unit {\n\t\tLine = 1,\n\t\tWrappedLine = 2,\n\t\tPage = 3,\n\t\tHalfPage = 4\n\t}\n}\n\nexport namespace RevealLine_ {\n\n\tconst isRevealLineArgs = function (arg: any): boolean {\n\t\tif (!types.isObject(arg)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet reveaLineArg: RawArguments = arg;\n\n\t\tif (!types.isNumber(reveaLineArg.lineNumber)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!types.isUndefined(reveaLineArg.at) && !types.isString(reveaLineArg.at)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t};\n\n\texport const description = {\n\t\tdescription: 'Reveal the given line at the given logical position',\n\t\targs: [\n\t\t\t{\n\t\t\t\tname: 'Reveal line argument object',\n\t\t\t\tdescription: `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`,\n\t\t\t\tconstraint: isRevealLineArgs\n\t\t\t}\n\t\t]\n\t};\n\n\t/**\n\t * Arguments for reveal line command\n\t */\n\texport interface RawArguments {\n\t\tlineNumber?: number;\n\t\tat?: string;\n\t};\n\n\t/**\n\t * Values for reveal line 'at' argument\n\t */\n\texport const RawAtArgument = {\n\t\tTop: 'top',\n\t\tCenter: 'center',\n\t\tBottom: 'bottom'\n\t};\n}\n\nexport namespace CoreNavigationCommands {\n\n\tclass BaseMoveToCommand extends CoreEditorCommand {\n\n\t\tprivate readonly _inSelectionMode: boolean;\n\n\t\tconstructor(opts: ICommandOptions & { inSelectionMode: boolean; }) {\n\t\t\tsuper(opts);\n\t\t\tthis._inSelectionMode = opts.inSelectionMode;\n\t\t}\n\n\t\tpublic runCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tcursors.context.model.pushStackElement();\n\t\t\tcursors.setStates(\n\t\t\t\targs.source,\n\t\t\t\tCursorChangeReason.Explicit,\n\t\t\t\t[\n\t\t\t\t\tCursorMoveCommands.moveTo(cursors.context, cursors.getPrimaryCursor(), this._inSelectionMode, args.position, args.viewPosition)\n\t\t\t\t]\n\t\t\t);\n\t\t\tcursors.reveal(true, RevealTarget.Primary);\n\t\t}\n\t}\n\n\texport const MoveTo: CoreEditorCommand = registerEditorCommand(new BaseMoveToCommand({\n\t\tid: '_moveTo',\n\t\tinSelectionMode: false,\n\t\tprecondition: null\n\t}));\n\n\texport const MoveToSelect: CoreEditorCommand = registerEditorCommand(new BaseMoveToCommand({\n\t\tid: '_moveToSelect',\n\t\tinSelectionMode: true,\n\t\tprecondition: null\n\t}));\n\n\tabstract class ColumnSelectCommand extends CoreEditorCommand {\n\t\tpublic runCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tcursors.context.model.pushStackElement();\n\t\t\tconst result = this._getColumnSelectResult(cursors.context, cursors.getPrimaryCursor(), cursors.getColumnSelectData(), args);\n\t\t\tcursors.setStates(args.source, CursorChangeReason.Explicit, result.viewStates.map((viewState) => CursorState.fromViewState(viewState)));\n\t\t\tcursors.setColumnSelectData({\n\t\t\t\ttoViewLineNumber: result.toLineNumber,\n\t\t\t\ttoViewVisualColumn: result.toVisualColumn\n\t\t\t});\n\t\t\tcursors.reveal(true, (result.reversed ? RevealTarget.TopMost : RevealTarget.BottomMost));\n\t\t}\n\n\t\tprotected abstract _getColumnSelectResult(context: CursorContext, primary: CursorState, prevColumnSelectData: IColumnSelectData, args: any): IColumnSelectResult;\n\n\t}\n\n\texport const ColumnSelect: CoreEditorCommand = registerEditorCommand(new class extends ColumnSelectCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'columnSelect',\n\t\t\t\tprecondition: null\n\t\t\t});\n\t\t}\n\n\t\tprotected _getColumnSelectResult(context: CursorContext, primary: CursorState, prevColumnSelectData: IColumnSelectData, args: any): IColumnSelectResult {\n\n\t\t\t// validate `args`\n\t\t\tconst validatedPosition = context.model.validatePosition(args.position);\n\n\t\t\tlet validatedViewPosition: Position;\n\t\t\tif (args.viewPosition) {\n\t\t\t\tvalidatedViewPosition = context.validateViewPosition(new Position(args.viewPosition.lineNumber, args.viewPosition.column), validatedPosition);\n\t\t\t} else {\n\t\t\t\tvalidatedViewPosition = context.convertModelPositionToViewPosition(validatedPosition);\n\t\t\t}\n\n\t\t\treturn ColumnSelection.columnSelect(context.config, context.viewModel, primary.viewState.selection, validatedViewPosition.lineNumber, args.mouseColumn - 1);\n\t\t}\n\t});\n\n\texport const CursorColumnSelectLeft: CoreEditorCommand = registerEditorCommand(new class extends ColumnSelectCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'cursorColumnSelectLeft',\n\t\t\t\tprecondition: null,\n\t\t\t\tkbOpts: {\n\t\t\t\t\tweight: CORE_WEIGHT,\n\t\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyCode.LeftArrow,\n\t\t\t\t\tlinux: { primary: 0 }\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tprotected _getColumnSelectResult(context: CursorContext, primary: CursorState, prevColumnSelectData: IColumnSelectData, args: any): IColumnSelectResult {\n\t\t\treturn ColumnSelection.columnSelectLeft(context.config, context.viewModel, primary.viewState, prevColumnSelectData.toViewLineNumber, prevColumnSelectData.toViewVisualColumn);\n\t\t}\n\t});\n\n\texport const CursorColumnSelectRight: CoreEditorCommand = registerEditorCommand(new class extends ColumnSelectCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'cursorColumnSelectRight',\n\t\t\t\tprecondition: null,\n\t\t\t\tkbOpts: {\n\t\t\t\t\tweight: CORE_WEIGHT,\n\t\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyCode.RightArrow,\n\t\t\t\t\tlinux: { primary: 0 }\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tprotected _getColumnSelectResult(context: CursorContext, primary: CursorState, prevColumnSelectData: IColumnSelectData, args: any): IColumnSelectResult {\n\t\t\treturn ColumnSelection.columnSelectRight(context.config, context.viewModel, primary.viewState, prevColumnSelectData.toViewLineNumber, prevColumnSelectData.toViewVisualColumn);\n\t\t}\n\t});\n\n\tclass ColumnSelectUpCommand extends ColumnSelectCommand {\n\n\t\tprivate readonly _isPaged: boolean;\n\n\t\tconstructor(opts: ICommandOptions & { isPaged: boolean; }) {\n\t\t\tsuper(opts);\n\t\t\tthis._isPaged = opts.isPaged;\n\t\t}\n\n\t\tprotected _getColumnSelectResult(context: CursorContext, primary: CursorState, prevColumnSelectData: IColumnSelectData, args: any): IColumnSelectResult {\n\t\t\treturn ColumnSelection.columnSelectUp(context.config, context.viewModel, primary.viewState, this._isPaged, prevColumnSelectData.toViewLineNumber, prevColumnSelectData.toViewVisualColumn);\n\t\t}\n\t}\n\n\texport const CursorColumnSelectUp: CoreEditorCommand = registerEditorCommand(new ColumnSelectUpCommand({\n\t\tisPaged: false,\n\t\tid: 'cursorColumnSelectUp',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyCode.UpArrow,\n\t\t\tlinux: { primary: 0 }\n\t\t}\n\t}));\n\n\texport const CursorColumnSelectPageUp: CoreEditorCommand = registerEditorCommand(new ColumnSelectUpCommand({\n\t\tisPaged: true,\n\t\tid: 'cursorColumnSelectPageUp',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyCode.PageUp,\n\t\t\tlinux: { primary: 0 }\n\t\t}\n\t}));\n\n\tclass ColumnSelectDownCommand extends ColumnSelectCommand {\n\n\t\tprivate readonly _isPaged: boolean;\n\n\t\tconstructor(opts: ICommandOptions & { isPaged: boolean; }) {\n\t\t\tsuper(opts);\n\t\t\tthis._isPaged = opts.isPaged;\n\t\t}\n\n\t\tprotected _getColumnSelectResult(context: CursorContext, primary: CursorState, prevColumnSelectData: IColumnSelectData, args: any): IColumnSelectResult {\n\t\t\treturn ColumnSelection.columnSelectDown(context.config, context.viewModel, primary.viewState, this._isPaged, prevColumnSelectData.toViewLineNumber, prevColumnSelectData.toViewVisualColumn);\n\t\t}\n\t}\n\n\texport const CursorColumnSelectDown: CoreEditorCommand = registerEditorCommand(new ColumnSelectDownCommand({\n\t\tisPaged: false,\n\t\tid: 'cursorColumnSelectDown',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyCode.DownArrow,\n\t\t\tlinux: { primary: 0 }\n\t\t}\n\t}));\n\n\texport const CursorColumnSelectPageDown: CoreEditorCommand = registerEditorCommand(new ColumnSelectDownCommand({\n\t\tisPaged: true,\n\t\tid: 'cursorColumnSelectPageDown',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyCode.PageDown,\n\t\t\tlinux: { primary: 0 }\n\t\t}\n\t}));\n\n\texport class CursorMoveImpl extends CoreEditorCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'cursorMove',\n\t\t\t\tprecondition: null,\n\t\t\t\tdescription: CursorMove_.description\n\t\t\t});\n\t\t}\n\n\t\tpublic runCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tconst parsed = CursorMove_.parse(args);\n\t\t\tif (!parsed) {\n\t\t\t\t// illegal arguments\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._runCursorMove(cursors, args.source, parsed);\n\t\t}\n\n\t\t_runCursorMove(cursors: ICursors, source: string, args: CursorMove_.ParsedArguments): void {\n\t\t\tcursors.context.model.pushStackElement();\n\t\t\tcursors.setStates(\n\t\t\t\tsource,\n\t\t\t\tCursorChangeReason.Explicit,\n\t\t\t\tCursorState.ensureInEditableRange(\n\t\t\t\t\tcursors.context,\n\t\t\t\t\tCursorMoveCommands.move(cursors.context, cursors.getAll(), args)\n\t\t\t\t)\n\t\t\t);\n\t\t\tcursors.reveal(true, RevealTarget.Primary);\n\t\t}\n\t}\n\n\texport const CursorMove: CursorMoveImpl = registerEditorCommand(new CursorMoveImpl());\n\n\tconst enum Constants {\n\t\tPAGE_SIZE_MARKER = -1\n\t}\n\n\tclass CursorMoveBasedCommand extends CoreEditorCommand {\n\n\t\tprivate readonly _staticArgs: CursorMove_.ParsedArguments;\n\n\t\tconstructor(opts: ICommandOptions & { args: CursorMove_.ParsedArguments }) {\n\t\t\tsuper(opts);\n\t\t\tthis._staticArgs = opts.args;\n\t\t}\n\n\t\tpublic runCoreEditorCommand(cursors: ICursors, dynamicArgs: any): void {\n\t\t\tlet args = this._staticArgs;\n\t\t\tif (this._staticArgs.value === Constants.PAGE_SIZE_MARKER) {\n\t\t\t\t// -1 is a marker for page size\n\t\t\t\targs = {\n\t\t\t\t\tdirection: this._staticArgs.direction,\n\t\t\t\t\tunit: this._staticArgs.unit,\n\t\t\t\t\tselect: this._staticArgs.select,\n\t\t\t\t\tvalue: cursors.context.config.pageSize\n\t\t\t\t};\n\t\t\t}\n\t\t\tCursorMove._runCursorMove(cursors, dynamicArgs.source, args);\n\t\t}\n\t}\n\n\texport const CursorLeft: CoreEditorCommand = registerEditorCommand(new CursorMoveBasedCommand({\n\t\targs: {\n\t\t\tdirection: CursorMove_.Direction.Left,\n\t\t\tunit: CursorMove_.Unit.None,\n\t\t\tselect: false,\n\t\t\tvalue: 1\n\t\t},\n\t\tid: 'cursorLeft',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyCode.LeftArrow,\n\t\t\tmac: { primary: KeyCode.LeftArrow, secondary: [KeyMod.WinCtrl | KeyCode.KEY_B] }\n\t\t}\n\t}));\n\n\texport const CursorLeftSelect: CoreEditorCommand = registerEditorCommand(new CursorMoveBasedCommand({\n\t\targs: {\n\t\t\tdirection: CursorMove_.Direction.Left,\n\t\t\tunit: CursorMove_.Unit.None,\n\t\t\tselect: true,\n\t\t\tvalue: 1\n\t\t},\n\t\tid: 'cursorLeftSelect',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyMod.Shift | KeyCode.LeftArrow\n\t\t}\n\t}));\n\n\texport const CursorRight: CoreEditorCommand = registerEditorCommand(new CursorMoveBasedCommand({\n\t\targs: {\n\t\t\tdirection: CursorMove_.Direction.Right,\n\t\t\tunit: CursorMove_.Unit.None,\n\t\t\tselect: false,\n\t\t\tvalue: 1\n\t\t},\n\t\tid: 'cursorRight',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyCode.RightArrow,\n\t\t\tmac: { primary: KeyCode.RightArrow, secondary: [KeyMod.WinCtrl | KeyCode.KEY_F] }\n\t\t}\n\t}));\n\n\texport const CursorRightSelect: CoreEditorCommand = registerEditorCommand(new CursorMoveBasedCommand({\n\t\targs: {\n\t\t\tdirection: CursorMove_.Direction.Right,\n\t\t\tunit: CursorMove_.Unit.None,\n\t\t\tselect: true,\n\t\t\tvalue: 1\n\t\t},\n\t\tid: 'cursorRightSelect',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyMod.Shift | KeyCode.RightArrow\n\t\t}\n\t}));\n\n\texport const CursorUp: CoreEditorCommand = registerEditorCommand(new CursorMoveBasedCommand({\n\t\targs: {\n\t\t\tdirection: CursorMove_.Direction.Up,\n\t\t\tunit: CursorMove_.Unit.WrappedLine,\n\t\t\tselect: false,\n\t\t\tvalue: 1\n\t\t},\n\t\tid: 'cursorUp',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyCode.UpArrow,\n\t\t\tmac: { primary: KeyCode.UpArrow, secondary: [KeyMod.WinCtrl | KeyCode.KEY_P] }\n\t\t}\n\t}));\n\n\texport const CursorUpSelect: CoreEditorCommand = registerEditorCommand(new CursorMoveBasedCommand({\n\t\targs: {\n\t\t\tdirection: CursorMove_.Direction.Up,\n\t\t\tunit: CursorMove_.Unit.WrappedLine,\n\t\t\tselect: true,\n\t\t\tvalue: 1\n\t\t},\n\t\tid: 'cursorUpSelect',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyMod.Shift | KeyCode.UpArrow,\n\t\t\tsecondary: [KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.UpArrow],\n\t\t\tmac: { primary: KeyMod.Shift | KeyCode.UpArrow },\n\t\t\tlinux: { primary: KeyMod.Shift | KeyCode.UpArrow }\n\t\t}\n\t}));\n\n\texport const CursorPageUp: CoreEditorCommand = registerEditorCommand(new CursorMoveBasedCommand({\n\t\targs: {\n\t\t\tdirection: CursorMove_.Direction.Up,\n\t\t\tunit: CursorMove_.Unit.WrappedLine,\n\t\t\tselect: false,\n\t\t\tvalue: Constants.PAGE_SIZE_MARKER\n\t\t},\n\t\tid: 'cursorPageUp',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyCode.PageUp\n\t\t}\n\t}));\n\n\texport const CursorPageUpSelect: CoreEditorCommand = registerEditorCommand(new CursorMoveBasedCommand({\n\t\targs: {\n\t\t\tdirection: CursorMove_.Direction.Up,\n\t\t\tunit: CursorMove_.Unit.WrappedLine,\n\t\t\tselect: true,\n\t\t\tvalue: Constants.PAGE_SIZE_MARKER\n\t\t},\n\t\tid: 'cursorPageUpSelect',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyMod.Shift | KeyCode.PageUp\n\t\t}\n\t}));\n\n\texport const CursorDown: CoreEditorCommand = registerEditorCommand(new CursorMoveBasedCommand({\n\t\targs: {\n\t\t\tdirection: CursorMove_.Direction.Down,\n\t\t\tunit: CursorMove_.Unit.WrappedLine,\n\t\t\tselect: false,\n\t\t\tvalue: 1\n\t\t},\n\t\tid: 'cursorDown',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyCode.DownArrow,\n\t\t\tmac: { primary: KeyCode.DownArrow, secondary: [KeyMod.WinCtrl | KeyCode.KEY_N] }\n\t\t}\n\t}));\n\n\texport const CursorDownSelect: CoreEditorCommand = registerEditorCommand(new CursorMoveBasedCommand({\n\t\targs: {\n\t\t\tdirection: CursorMove_.Direction.Down,\n\t\t\tunit: CursorMove_.Unit.WrappedLine,\n\t\t\tselect: true,\n\t\t\tvalue: 1\n\t\t},\n\t\tid: 'cursorDownSelect',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyMod.Shift | KeyCode.DownArrow,\n\t\t\tsecondary: [KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.DownArrow],\n\t\t\tmac: { primary: KeyMod.Shift | KeyCode.DownArrow },\n\t\t\tlinux: { primary: KeyMod.Shift | KeyCode.DownArrow }\n\t\t}\n\t}));\n\n\texport const CursorPageDown: CoreEditorCommand = registerEditorCommand(new CursorMoveBasedCommand({\n\t\targs: {\n\t\t\tdirection: CursorMove_.Direction.Down,\n\t\t\tunit: CursorMove_.Unit.WrappedLine,\n\t\t\tselect: false,\n\t\t\tvalue: Constants.PAGE_SIZE_MARKER\n\t\t},\n\t\tid: 'cursorPageDown',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyCode.PageDown\n\t\t}\n\t}));\n\n\texport const CursorPageDownSelect: CoreEditorCommand = registerEditorCommand(new CursorMoveBasedCommand({\n\t\targs: {\n\t\t\tdirection: CursorMove_.Direction.Down,\n\t\t\tunit: CursorMove_.Unit.WrappedLine,\n\t\t\tselect: true,\n\t\t\tvalue: Constants.PAGE_SIZE_MARKER\n\t\t},\n\t\tid: 'cursorPageDownSelect',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyMod.Shift | KeyCode.PageDown\n\t\t}\n\t}));\n\n\texport const CreateCursor: CoreEditorCommand = registerEditorCommand(new class extends CoreEditorCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'createCursor',\n\t\t\t\tprecondition: null\n\t\t\t});\n\t\t}\n\n\t\tpublic runCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tconst context = cursors.context;\n\n\t\t\tif (context.config.readOnly || context.model.hasEditableRange()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet newState: CursorState;\n\t\t\tif (args.wholeLine) {\n\t\t\t\tnewState = CursorMoveCommands.line(context, cursors.getPrimaryCursor(), false, args.position, args.viewPosition);\n\t\t\t} else {\n\t\t\t\tnewState = CursorMoveCommands.moveTo(context, cursors.getPrimaryCursor(), false, args.position, args.viewPosition);\n\t\t\t}\n\n\t\t\tconst states = cursors.getAll();\n\n\t\t\t// Check if we should remove a cursor (sort of like a toggle)\n\t\t\tif (states.length > 1) {\n\t\t\t\tconst newModelPosition = (newState.modelState ? newState.modelState.position : null);\n\t\t\t\tconst newViewPosition = (newState.viewState ? newState.viewState.position : null);\n\n\t\t\t\tfor (let i = 0, len = states.length; i < len; i++) {\n\t\t\t\t\tconst state = states[i];\n\n\t\t\t\t\tif (newModelPosition && !state.modelState.selection.containsPosition(newModelPosition)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (newViewPosition && !state.viewState.selection.containsPosition(newViewPosition)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// => Remove the cursor\n\t\t\t\t\tstates.splice(i, 1);\n\n\t\t\t\t\tcursors.context.model.pushStackElement();\n\t\t\t\t\tcursors.setStates(\n\t\t\t\t\t\targs.source,\n\t\t\t\t\t\tCursorChangeReason.Explicit,\n\t\t\t\t\t\tstates\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// => Add the new cursor\n\t\t\tstates.push(newState);\n\n\t\t\tcursors.context.model.pushStackElement();\n\t\t\tcursors.setStates(\n\t\t\t\targs.source,\n\t\t\t\tCursorChangeReason.Explicit,\n\t\t\t\tstates\n\t\t\t);\n\t\t}\n\t});\n\n\texport const LastCursorMoveToSelect: CoreEditorCommand = registerEditorCommand(new class extends CoreEditorCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: '_lastCursorMoveToSelect',\n\t\t\t\tprecondition: null\n\t\t\t});\n\t\t}\n\n\t\tpublic runCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tconst context = cursors.context;\n\n\t\t\tif (context.config.readOnly || context.model.hasEditableRange()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst lastAddedCursorIndex = cursors.getLastAddedCursorIndex();\n\n\t\t\tlet newStates = cursors.getAll().slice(0);\n\t\t\tnewStates[lastAddedCursorIndex] = CursorMoveCommands.moveTo(context, newStates[lastAddedCursorIndex], true, args.position, args.viewPosition);\n\n\t\t\tcursors.context.model.pushStackElement();\n\t\t\tcursors.setStates(\n\t\t\t\targs.source,\n\t\t\t\tCursorChangeReason.Explicit,\n\t\t\t\tnewStates\n\t\t\t);\n\t\t}\n\t});\n\n\tclass HomeCommand extends CoreEditorCommand {\n\n\t\tprivate readonly _inSelectionMode: boolean;\n\n\t\tconstructor(opts: ICommandOptions & { inSelectionMode: boolean; }) {\n\t\t\tsuper(opts);\n\t\t\tthis._inSelectionMode = opts.inSelectionMode;\n\t\t}\n\n\t\tpublic runCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tcursors.context.model.pushStackElement();\n\t\t\tcursors.setStates(\n\t\t\t\targs.source,\n\t\t\t\tCursorChangeReason.Explicit,\n\t\t\t\tCursorState.ensureInEditableRange(\n\t\t\t\t\tcursors.context,\n\t\t\t\t\tCursorMoveCommands.moveToBeginningOfLine(cursors.context, cursors.getAll(), this._inSelectionMode)\n\t\t\t\t)\n\t\t\t);\n\t\t\tcursors.reveal(true, RevealTarget.Primary);\n\t\t}\n\t}\n\n\texport const CursorHome: CoreEditorCommand = registerEditorCommand(new HomeCommand({\n\t\tinSelectionMode: false,\n\t\tid: 'cursorHome',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyCode.Home,\n\t\t\tmac: { primary: KeyCode.Home, secondary: [KeyMod.CtrlCmd | KeyCode.LeftArrow] }\n\t\t}\n\t}));\n\n\texport const CursorHomeSelect: CoreEditorCommand = registerEditorCommand(new HomeCommand({\n\t\tinSelectionMode: true,\n\t\tid: 'cursorHomeSelect',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyMod.Shift | KeyCode.Home,\n\t\t\tmac: { primary: KeyMod.Shift | KeyCode.Home, secondary: [KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.LeftArrow] }\n\t\t}\n\t}));\n\n\texport const CursorLineStart: CoreEditorCommand = registerEditorCommand(new class extends CoreEditorCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'cursorLineStart',\n\t\t\t\tprecondition: null,\n\t\t\t\tkbOpts: {\n\t\t\t\t\tweight: CORE_WEIGHT,\n\t\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\t\tprimary: 0,\n\t\t\t\t\tmac: { primary: KeyMod.WinCtrl | KeyCode.KEY_A }\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tpublic runCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tcursors.context.model.pushStackElement();\n\t\t\tcursors.setStates(\n\t\t\t\targs.source,\n\t\t\t\tCursorChangeReason.Explicit,\n\t\t\t\tCursorState.ensureInEditableRange(\n\t\t\t\t\tcursors.context,\n\t\t\t\t\tthis._exec(cursors.context, cursors.getAll())\n\t\t\t\t)\n\t\t\t);\n\t\t\tcursors.reveal(true, RevealTarget.Primary);\n\t\t}\n\n\t\tprivate _exec(context: CursorContext, cursors: CursorState[]): CursorState[] {\n\t\t\tlet result: CursorState[] = [];\n\t\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\t\tconst cursor = cursors[i];\n\t\t\t\tconst lineNumber = cursor.modelState.position.lineNumber;\n\t\t\t\tresult[i] = CursorState.fromModelState(cursor.modelState.move(false, lineNumber, 1, 0));\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t});\n\n\tclass EndCommand extends CoreEditorCommand {\n\n\t\tprivate readonly _inSelectionMode: boolean;\n\n\t\tconstructor(opts: ICommandOptions & { inSelectionMode: boolean; }) {\n\t\t\tsuper(opts);\n\t\t\tthis._inSelectionMode = opts.inSelectionMode;\n\t\t}\n\n\t\tpublic runCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tcursors.context.model.pushStackElement();\n\t\t\tcursors.setStates(\n\t\t\t\targs.source,\n\t\t\t\tCursorChangeReason.Explicit,\n\t\t\t\tCursorState.ensureInEditableRange(\n\t\t\t\t\tcursors.context,\n\t\t\t\t\tCursorMoveCommands.moveToEndOfLine(cursors.context, cursors.getAll(), this._inSelectionMode)\n\t\t\t\t)\n\t\t\t);\n\t\t\tcursors.reveal(true, RevealTarget.Primary);\n\t\t}\n\t}\n\n\texport const CursorEnd: CoreEditorCommand = registerEditorCommand(new EndCommand({\n\t\tinSelectionMode: false,\n\t\tid: 'cursorEnd',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyCode.End,\n\t\t\tmac: { primary: KeyCode.End, secondary: [KeyMod.CtrlCmd | KeyCode.RightArrow] }\n\t\t}\n\t}));\n\n\texport const CursorEndSelect: CoreEditorCommand = registerEditorCommand(new EndCommand({\n\t\tinSelectionMode: true,\n\t\tid: 'cursorEndSelect',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyMod.Shift | KeyCode.End,\n\t\t\tmac: { primary: KeyMod.Shift | KeyCode.End, secondary: [KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.RightArrow] }\n\t\t}\n\t}));\n\n\texport const CursorLineEnd: CoreEditorCommand = registerEditorCommand(new class extends CoreEditorCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'cursorLineEnd',\n\t\t\t\tprecondition: null,\n\t\t\t\tkbOpts: {\n\t\t\t\t\tweight: CORE_WEIGHT,\n\t\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\t\tprimary: 0,\n\t\t\t\t\tmac: { primary: KeyMod.WinCtrl | KeyCode.KEY_E }\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tpublic runCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tcursors.context.model.pushStackElement();\n\t\t\tcursors.setStates(\n\t\t\t\targs.source,\n\t\t\t\tCursorChangeReason.Explicit,\n\t\t\t\tCursorState.ensureInEditableRange(\n\t\t\t\t\tcursors.context,\n\t\t\t\t\tthis._exec(cursors.context, cursors.getAll())\n\t\t\t\t)\n\t\t\t);\n\t\t\tcursors.reveal(true, RevealTarget.Primary);\n\t\t}\n\n\t\tprivate _exec(context: CursorContext, cursors: CursorState[]): CursorState[] {\n\t\t\tlet result: CursorState[] = [];\n\t\t\tfor (let i = 0, len = cursors.length; i < len; i++) {\n\t\t\t\tconst cursor = cursors[i];\n\t\t\t\tconst lineNumber = cursor.modelState.position.lineNumber;\n\t\t\t\tconst maxColumn = context.model.getLineMaxColumn(lineNumber);\n\t\t\t\tresult[i] = CursorState.fromModelState(cursor.modelState.move(false, lineNumber, maxColumn, 0));\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t});\n\n\tclass TopCommand extends CoreEditorCommand {\n\n\t\tprivate readonly _inSelectionMode: boolean;\n\n\t\tconstructor(opts: ICommandOptions & { inSelectionMode: boolean; }) {\n\t\t\tsuper(opts);\n\t\t\tthis._inSelectionMode = opts.inSelectionMode;\n\t\t}\n\n\t\tpublic runCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tcursors.context.model.pushStackElement();\n\t\t\tcursors.setStates(\n\t\t\t\targs.source,\n\t\t\t\tCursorChangeReason.Explicit,\n\t\t\t\tCursorState.ensureInEditableRange(\n\t\t\t\t\tcursors.context,\n\t\t\t\t\tCursorMoveCommands.moveToBeginningOfBuffer(cursors.context, cursors.getAll(), this._inSelectionMode)\n\t\t\t\t)\n\t\t\t);\n\t\t\tcursors.reveal(true, RevealTarget.Primary);\n\t\t}\n\t}\n\n\texport const CursorTop: CoreEditorCommand = registerEditorCommand(new TopCommand({\n\t\tinSelectionMode: false,\n\t\tid: 'cursorTop',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.Home,\n\t\t\tmac: { primary: KeyMod.CtrlCmd | KeyCode.UpArrow }\n\t\t}\n\t}));\n\n\texport const CursorTopSelect: CoreEditorCommand = registerEditorCommand(new TopCommand({\n\t\tinSelectionMode: true,\n\t\tid: 'cursorTopSelect',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.Home,\n\t\t\tmac: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.UpArrow }\n\t\t}\n\t}));\n\n\tclass BottomCommand extends CoreEditorCommand {\n\n\t\tprivate readonly _inSelectionMode: boolean;\n\n\t\tconstructor(opts: ICommandOptions & { inSelectionMode: boolean; }) {\n\t\t\tsuper(opts);\n\t\t\tthis._inSelectionMode = opts.inSelectionMode;\n\t\t}\n\n\t\tpublic runCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tcursors.context.model.pushStackElement();\n\t\t\tcursors.setStates(\n\t\t\t\targs.source,\n\t\t\t\tCursorChangeReason.Explicit,\n\t\t\t\tCursorState.ensureInEditableRange(\n\t\t\t\t\tcursors.context,\n\t\t\t\t\tCursorMoveCommands.moveToEndOfBuffer(cursors.context, cursors.getAll(), this._inSelectionMode)\n\t\t\t\t)\n\t\t\t);\n\t\t\tcursors.reveal(true, RevealTarget.Primary);\n\t\t}\n\t}\n\n\texport const CursorBottom: CoreEditorCommand = registerEditorCommand(new BottomCommand({\n\t\tinSelectionMode: false,\n\t\tid: 'cursorBottom',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.End,\n\t\t\tmac: { primary: KeyMod.CtrlCmd | KeyCode.DownArrow }\n\t\t}\n\t}));\n\n\texport const CursorBottomSelect: CoreEditorCommand = registerEditorCommand(new BottomCommand({\n\t\tinSelectionMode: true,\n\t\tid: 'cursorBottomSelect',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.End,\n\t\t\tmac: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.DownArrow }\n\t\t}\n\t}));\n\n\texport class EditorScrollImpl extends CoreEditorCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'editorScroll',\n\t\t\t\tprecondition: null,\n\t\t\t\tdescription: EditorScroll_.description\n\t\t\t});\n\t\t}\n\n\t\tpublic runCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tconst parsed = EditorScroll_.parse(args);\n\t\t\tif (!parsed) {\n\t\t\t\t// illegal arguments\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._runEditorScroll(cursors, args.source, parsed);\n\t\t}\n\n\t\t_runEditorScroll(cursors: ICursors, source: string, args: EditorScroll_.ParsedArguments): void {\n\n\t\t\tconst desiredScrollTop = this._computeDesiredScrollTop(cursors.context, args);\n\n\t\t\tif (args.revealCursor) {\n\t\t\t\t// must ensure cursor is in new visible range\n\t\t\t\tconst desiredVisibleViewRange = cursors.context.getCompletelyVisibleViewRangeAtScrollTop(desiredScrollTop);\n\t\t\t\tcursors.setStates(\n\t\t\t\t\tsource,\n\t\t\t\t\tCursorChangeReason.Explicit,\n\t\t\t\t\t[\n\t\t\t\t\t\tCursorMoveCommands.findPositionInViewportIfOutside(cursors.context, cursors.getPrimaryCursor(), desiredVisibleViewRange, args.select)\n\t\t\t\t\t]\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcursors.scrollTo(desiredScrollTop);\n\t\t}\n\n\t\tprivate _computeDesiredScrollTop(context: CursorContext, args: EditorScroll_.ParsedArguments): number {\n\n\t\t\tif (args.unit === EditorScroll_.Unit.Line) {\n\t\t\t\t// scrolling by model lines\n\t\t\t\tconst visibleModelRange = context.getCompletelyVisibleModelRange();\n\n\t\t\t\tlet desiredTopModelLineNumber: number;\n\t\t\t\tif (args.direction === EditorScroll_.Direction.Up) {\n\t\t\t\t\t// must go x model lines up\n\t\t\t\t\tdesiredTopModelLineNumber = Math.max(1, visibleModelRange.startLineNumber - args.value);\n\t\t\t\t} else {\n\t\t\t\t\t// must go x model lines down\n\t\t\t\t\tdesiredTopModelLineNumber = Math.min(context.model.getLineCount(), visibleModelRange.startLineNumber + args.value);\n\t\t\t\t}\n\n\t\t\t\tconst desiredTopViewPosition = context.convertModelPositionToViewPosition(new Position(desiredTopModelLineNumber, 1));\n\t\t\t\treturn context.getVerticalOffsetForViewLine(desiredTopViewPosition.lineNumber);\n\t\t\t}\n\n\t\t\tlet noOfLines: number;\n\t\t\tif (args.unit === EditorScroll_.Unit.Page) {\n\t\t\t\tnoOfLines = context.config.pageSize * args.value;\n\t\t\t} else if (args.unit === EditorScroll_.Unit.HalfPage) {\n\t\t\t\tnoOfLines = Math.round(context.config.pageSize / 2) * args.value;\n\t\t\t} else {\n\t\t\t\tnoOfLines = args.value;\n\t\t\t}\n\t\t\tconst deltaLines = (args.direction === EditorScroll_.Direction.Up ? -1 : 1) * noOfLines;\n\t\t\treturn context.getScrollTop() + deltaLines * context.config.lineHeight;\n\t\t}\n\t}\n\n\texport const EditorScroll: EditorScrollImpl = registerEditorCommand(new EditorScrollImpl());\n\n\texport const ScrollLineUp: CoreEditorCommand = registerEditorCommand(new class extends CoreEditorCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'scrollLineUp',\n\t\t\t\tprecondition: null,\n\t\t\t\tkbOpts: {\n\t\t\t\t\tweight: CORE_WEIGHT,\n\t\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.UpArrow,\n\t\t\t\t\tmac: { primary: KeyMod.WinCtrl | KeyCode.PageUp }\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\trunCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tEditorScroll._runEditorScroll(cursors, args.source, {\n\t\t\t\tdirection: EditorScroll_.Direction.Up,\n\t\t\t\tunit: EditorScroll_.Unit.WrappedLine,\n\t\t\t\tvalue: 1,\n\t\t\t\trevealCursor: false,\n\t\t\t\tselect: false\n\t\t\t});\n\t\t}\n\t});\n\n\texport const ScrollPageUp: CoreEditorCommand = registerEditorCommand(new class extends CoreEditorCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'scrollPageUp',\n\t\t\t\tprecondition: null,\n\t\t\t\tkbOpts: {\n\t\t\t\t\tweight: CORE_WEIGHT,\n\t\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.PageUp,\n\t\t\t\t\twin: { primary: KeyMod.Alt | KeyCode.PageUp },\n\t\t\t\t\tlinux: { primary: KeyMod.Alt | KeyCode.PageUp }\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\trunCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tEditorScroll._runEditorScroll(cursors, args.source, {\n\t\t\t\tdirection: EditorScroll_.Direction.Up,\n\t\t\t\tunit: EditorScroll_.Unit.Page,\n\t\t\t\tvalue: 1,\n\t\t\t\trevealCursor: false,\n\t\t\t\tselect: false\n\t\t\t});\n\t\t}\n\t});\n\n\texport const ScrollLineDown: CoreEditorCommand = registerEditorCommand(new class extends CoreEditorCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'scrollLineDown',\n\t\t\t\tprecondition: null,\n\t\t\t\tkbOpts: {\n\t\t\t\t\tweight: CORE_WEIGHT,\n\t\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.DownArrow,\n\t\t\t\t\tmac: { primary: KeyMod.WinCtrl | KeyCode.PageDown }\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\trunCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tEditorScroll._runEditorScroll(cursors, args.source, {\n\t\t\t\tdirection: EditorScroll_.Direction.Down,\n\t\t\t\tunit: EditorScroll_.Unit.WrappedLine,\n\t\t\t\tvalue: 1,\n\t\t\t\trevealCursor: false,\n\t\t\t\tselect: false\n\t\t\t});\n\t\t}\n\t});\n\n\texport const ScrollPageDown: CoreEditorCommand = registerEditorCommand(new class extends CoreEditorCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'scrollPageDown',\n\t\t\t\tprecondition: null,\n\t\t\t\tkbOpts: {\n\t\t\t\t\tweight: CORE_WEIGHT,\n\t\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.PageDown,\n\t\t\t\t\twin: { primary: KeyMod.Alt | KeyCode.PageDown },\n\t\t\t\t\tlinux: { primary: KeyMod.Alt | KeyCode.PageDown }\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\trunCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tEditorScroll._runEditorScroll(cursors, args.source, {\n\t\t\t\tdirection: EditorScroll_.Direction.Down,\n\t\t\t\tunit: EditorScroll_.Unit.Page,\n\t\t\t\tvalue: 1,\n\t\t\t\trevealCursor: false,\n\t\t\t\tselect: false\n\t\t\t});\n\t\t}\n\t});\n\n\tclass WordCommand extends CoreEditorCommand {\n\n\t\tprivate readonly _inSelectionMode: boolean;\n\n\t\tconstructor(opts: ICommandOptions & { inSelectionMode: boolean; }) {\n\t\t\tsuper(opts);\n\t\t\tthis._inSelectionMode = opts.inSelectionMode;\n\t\t}\n\n\t\tpublic runCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tcursors.context.model.pushStackElement();\n\t\t\tcursors.setStates(\n\t\t\t\targs.source,\n\t\t\t\tCursorChangeReason.Explicit,\n\t\t\t\t[\n\t\t\t\t\tCursorMoveCommands.word(cursors.context, cursors.getPrimaryCursor(), this._inSelectionMode, args.position)\n\t\t\t\t]\n\t\t\t);\n\t\t\tcursors.reveal(true, RevealTarget.Primary);\n\t\t}\n\t}\n\n\texport const WordSelect: CoreEditorCommand = registerEditorCommand(new WordCommand({\n\t\tinSelectionMode: false,\n\t\tid: '_wordSelect',\n\t\tprecondition: null\n\t}));\n\n\texport const WordSelectDrag: CoreEditorCommand = registerEditorCommand(new WordCommand({\n\t\tinSelectionMode: true,\n\t\tid: '_wordSelectDrag',\n\t\tprecondition: null\n\t}));\n\n\texport const LastCursorWordSelect: CoreEditorCommand = registerEditorCommand(new class extends CoreEditorCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'lastCursorWordSelect',\n\t\t\t\tprecondition: null\n\t\t\t});\n\t\t}\n\n\t\tpublic runCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tconst context = cursors.context;\n\t\t\tif (context.config.readOnly || context.model.hasEditableRange()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst lastAddedCursorIndex = cursors.getLastAddedCursorIndex();\n\n\t\t\tlet newStates = cursors.getAll().slice(0);\n\t\t\tnewStates[lastAddedCursorIndex] = CursorMoveCommands.word(context, newStates[lastAddedCursorIndex], true, args.position);\n\n\t\t\tcontext.model.pushStackElement();\n\t\t\tcursors.setStates(\n\t\t\t\targs.source,\n\t\t\t\tCursorChangeReason.Explicit,\n\t\t\t\tnewStates\n\t\t\t);\n\t\t}\n\t});\n\n\tclass LineCommand extends CoreEditorCommand {\n\t\tprivate readonly _inSelectionMode: boolean;\n\n\t\tconstructor(opts: ICommandOptions & { inSelectionMode: boolean; }) {\n\t\t\tsuper(opts);\n\t\t\tthis._inSelectionMode = opts.inSelectionMode;\n\t\t}\n\n\t\tpublic runCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tcursors.context.model.pushStackElement();\n\t\t\tcursors.setStates(\n\t\t\t\targs.source,\n\t\t\t\tCursorChangeReason.Explicit,\n\t\t\t\t[\n\t\t\t\t\tCursorMoveCommands.line(cursors.context, cursors.getPrimaryCursor(), this._inSelectionMode, args.position, args.viewPosition)\n\t\t\t\t]\n\t\t\t);\n\t\t\tcursors.reveal(false, RevealTarget.Primary);\n\t\t}\n\t}\n\n\texport const LineSelect: CoreEditorCommand = registerEditorCommand(new LineCommand({\n\t\tinSelectionMode: false,\n\t\tid: '_lineSelect',\n\t\tprecondition: null\n\t}));\n\n\texport const LineSelectDrag: CoreEditorCommand = registerEditorCommand(new LineCommand({\n\t\tinSelectionMode: true,\n\t\tid: '_lineSelectDrag',\n\t\tprecondition: null\n\t}));\n\n\tclass LastCursorLineCommand extends CoreEditorCommand {\n\t\tprivate readonly _inSelectionMode: boolean;\n\n\t\tconstructor(opts: ICommandOptions & { inSelectionMode: boolean; }) {\n\t\t\tsuper(opts);\n\t\t\tthis._inSelectionMode = opts.inSelectionMode;\n\t\t}\n\n\t\tpublic runCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tconst context = cursors.context;\n\n\t\t\tif (context.config.readOnly || context.model.hasEditableRange()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst lastAddedCursorIndex = cursors.getLastAddedCursorIndex();\n\n\t\t\tlet newStates = cursors.getAll().slice(0);\n\t\t\tnewStates[lastAddedCursorIndex] = CursorMoveCommands.line(cursors.context, newStates[lastAddedCursorIndex], this._inSelectionMode, args.position, args.viewPosition);\n\n\t\t\tcursors.context.model.pushStackElement();\n\t\t\tcursors.setStates(\n\t\t\t\targs.source,\n\t\t\t\tCursorChangeReason.Explicit,\n\t\t\t\tnewStates\n\t\t\t);\n\t\t}\n\t}\n\n\texport const LastCursorLineSelect: CoreEditorCommand = registerEditorCommand(new LastCursorLineCommand({\n\t\tinSelectionMode: false,\n\t\tid: 'lastCursorLineSelect',\n\t\tprecondition: null\n\t}));\n\n\texport const LastCursorLineSelectDrag: CoreEditorCommand = registerEditorCommand(new LastCursorLineCommand({\n\t\tinSelectionMode: true,\n\t\tid: 'lastCursorLineSelectDrag',\n\t\tprecondition: null\n\t}));\n\n\texport const ExpandLineSelection: CoreEditorCommand = registerEditorCommand(new class extends CoreEditorCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'expandLineSelection',\n\t\t\t\tprecondition: null,\n\t\t\t\tkbOpts: {\n\t\t\t\t\tweight: CORE_WEIGHT,\n\t\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.KEY_I\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tpublic runCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tcursors.context.model.pushStackElement();\n\t\t\tcursors.setStates(\n\t\t\t\targs.source,\n\t\t\t\tCursorChangeReason.Explicit,\n\t\t\t\tCursorState.ensureInEditableRange(\n\t\t\t\t\tcursors.context,\n\t\t\t\t\tCursorMoveCommands.expandLineSelection(cursors.context, cursors.getAll())\n\t\t\t\t)\n\t\t\t);\n\t\t\tcursors.reveal(true, RevealTarget.Primary);\n\t\t}\n\n\t});\n\n\texport const CancelSelection: CoreEditorCommand = registerEditorCommand(new class extends CoreEditorCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'cancelSelection',\n\t\t\t\tprecondition: EditorContextKeys.hasNonEmptySelection,\n\t\t\t\tkbOpts: {\n\t\t\t\t\tweight: CORE_WEIGHT,\n\t\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\t\tprimary: KeyCode.Escape,\n\t\t\t\t\tsecondary: [KeyMod.Shift | KeyCode.Escape]\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tpublic runCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tcursors.context.model.pushStackElement();\n\t\t\tcursors.setStates(\n\t\t\t\targs.source,\n\t\t\t\tCursorChangeReason.Explicit,\n\t\t\t\t[\n\t\t\t\t\tCursorMoveCommands.cancelSelection(cursors.context, cursors.getPrimaryCursor())\n\t\t\t\t]\n\t\t\t);\n\t\t\tcursors.reveal(true, RevealTarget.Primary);\n\t\t}\n\t});\n\n\texport const RemoveSecondaryCursors: CoreEditorCommand = registerEditorCommand(new class extends CoreEditorCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'removeSecondaryCursors',\n\t\t\t\tprecondition: EditorContextKeys.hasMultipleSelections,\n\t\t\t\tkbOpts: {\n\t\t\t\t\tweight: CORE_WEIGHT + 1,\n\t\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\t\tprimary: KeyCode.Escape,\n\t\t\t\t\tsecondary: [KeyMod.Shift | KeyCode.Escape]\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tpublic runCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tcursors.context.model.pushStackElement();\n\t\t\tcursors.setStates(\n\t\t\t\targs.source,\n\t\t\t\tCursorChangeReason.Explicit,\n\t\t\t\t[\n\t\t\t\t\tcursors.getPrimaryCursor()\n\t\t\t\t]\n\t\t\t);\n\t\t\tcursors.reveal(true, RevealTarget.Primary);\n\t\t}\n\t});\n\n\texport const RevealLine: CoreEditorCommand = registerEditorCommand(new class extends CoreEditorCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'revealLine',\n\t\t\t\tprecondition: null,\n\t\t\t\tdescription: RevealLine_.description\n\t\t\t});\n\t\t}\n\n\t\tpublic runCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tconst revealLineArg = args;\n\t\t\tlet lineNumber = revealLineArg.lineNumber + 1;\n\t\t\tif (lineNumber < 1) {\n\t\t\t\tlineNumber = 1;\n\t\t\t}\n\t\t\tconst lineCount = cursors.context.model.getLineCount();\n\t\t\tif (lineNumber > lineCount) {\n\t\t\t\tlineNumber = lineCount;\n\t\t\t}\n\n\t\t\tconst range = new Range(\n\t\t\t\tlineNumber, 1,\n\t\t\t\tlineNumber, cursors.context.model.getLineMaxColumn(lineNumber)\n\t\t\t);\n\n\t\t\tlet revealAt = VerticalRevealType.Simple;\n\t\t\tif (revealLineArg.at) {\n\t\t\t\tswitch (revealLineArg.at) {\n\t\t\t\t\tcase RevealLine_.RawAtArgument.Top:\n\t\t\t\t\t\trevealAt = VerticalRevealType.Top;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase RevealLine_.RawAtArgument.Center:\n\t\t\t\t\t\trevealAt = VerticalRevealType.Center;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase RevealLine_.RawAtArgument.Bottom:\n\t\t\t\t\t\trevealAt = VerticalRevealType.Bottom;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst viewRange = cursors.context.convertModelRangeToViewRange(range);\n\n\t\t\tcursors.revealRange(false, viewRange, revealAt);\n\t\t}\n\t});\n\n\texport const SelectAll: CoreEditorCommand = registerEditorCommand(new class extends CoreEditorCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'selectAll',\n\t\t\t\tprecondition: null\n\t\t\t});\n\t\t}\n\n\t\tpublic runCoreEditorCommand(cursors: ICursors, args: any): void {\n\t\t\tcursors.context.model.pushStackElement();\n\t\t\tcursors.setStates(\n\t\t\t\targs.source,\n\t\t\t\tCursorChangeReason.Explicit,\n\t\t\t\t[\n\t\t\t\t\tCursorMoveCommands.selectAll(cursors.context, cursors.getPrimaryCursor())\n\t\t\t\t]\n\t\t\t);\n\t\t}\n\t});\n}\n\nexport namespace CoreEditingCommands {\n\n\texport const LineBreakInsert: EditorCommand = registerEditorCommand(new class extends EditorCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'lineBreakInsert',\n\t\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\t\tkbOpts: {\n\t\t\t\t\tweight: CORE_WEIGHT,\n\t\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\t\tprimary: null,\n\t\t\t\t\tmac: { primary: KeyMod.WinCtrl | KeyCode.KEY_O }\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tpublic runEditorCommand(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor, args: any): void {\n\t\t\teditor.pushUndoStop();\n\t\t\teditor.executeCommands(this.id, TypeOperations.lineBreakInsert(editor._getCursorConfiguration(), editor.getModel(), editor.getSelections()));\n\t\t}\n\t});\n\n\texport const Outdent: EditorCommand = registerEditorCommand(new class extends EditorCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'outdent',\n\t\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\t\tkbOpts: {\n\t\t\t\t\tweight: CORE_WEIGHT,\n\t\t\t\t\tkbExpr: ContextKeyExpr.and(\n\t\t\t\t\t\tEditorContextKeys.textFocus,\n\t\t\t\t\t\tEditorContextKeys.tabDoesNotMoveFocus\n\t\t\t\t\t),\n\t\t\t\t\tprimary: KeyMod.Shift | KeyCode.Tab\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tpublic runEditorCommand(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor, args: any): void {\n\t\t\teditor.pushUndoStop();\n\t\t\teditor.executeCommands(this.id, TypeOperations.outdent(editor._getCursorConfiguration(), editor.getModel(), editor.getSelections()));\n\t\t\teditor.pushUndoStop();\n\t\t}\n\t});\n\n\texport const Tab: EditorCommand = registerEditorCommand(new class extends EditorCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'tab',\n\t\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\t\tkbOpts: {\n\t\t\t\t\tweight: CORE_WEIGHT,\n\t\t\t\t\tkbExpr: ContextKeyExpr.and(\n\t\t\t\t\t\tEditorContextKeys.textFocus,\n\t\t\t\t\t\tEditorContextKeys.tabDoesNotMoveFocus\n\t\t\t\t\t),\n\t\t\t\t\tprimary: KeyCode.Tab\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tpublic runEditorCommand(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor, args: any): void {\n\t\t\teditor.pushUndoStop();\n\t\t\teditor.executeCommands(this.id, TypeOperations.tab(editor._getCursorConfiguration(), editor.getModel(), editor.getSelections()));\n\t\t\teditor.pushUndoStop();\n\t\t}\n\t});\n\n\texport const DeleteLeft: EditorCommand = registerEditorCommand(new class extends EditorCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'deleteLeft',\n\t\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\t\tkbOpts: {\n\t\t\t\t\tweight: CORE_WEIGHT,\n\t\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\t\tprimary: KeyCode.Backspace,\n\t\t\t\t\tsecondary: [KeyMod.Shift | KeyCode.Backspace],\n\t\t\t\t\tmac: { primary: KeyCode.Backspace, secondary: [KeyMod.Shift | KeyCode.Backspace, KeyMod.WinCtrl | KeyCode.KEY_H, KeyMod.WinCtrl | KeyCode.Backspace] }\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tpublic runEditorCommand(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor, args: any): void {\n\t\t\tconst [shouldPushStackElementBefore, commands] = DeleteOperations.deleteLeft(editor._getCursorConfiguration(), editor.getModel(), editor.getSelections());\n\t\t\tif (shouldPushStackElementBefore) {\n\t\t\t\teditor.pushUndoStop();\n\t\t\t}\n\t\t\teditor.executeCommands(this.id, commands);\n\t\t}\n\t});\n\n\texport const DeleteRight: EditorCommand = registerEditorCommand(new class extends EditorCommand {\n\t\tconstructor() {\n\t\t\tsuper({\n\t\t\t\tid: 'deleteRight',\n\t\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\t\tkbOpts: {\n\t\t\t\t\tweight: CORE_WEIGHT,\n\t\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\t\tprimary: KeyCode.Delete,\n\t\t\t\t\tmac: { primary: KeyCode.Delete, secondary: [KeyMod.WinCtrl | KeyCode.KEY_D, KeyMod.WinCtrl | KeyCode.Delete] }\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tpublic runEditorCommand(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor, args: any): void {\n\t\t\tconst [shouldPushStackElementBefore, commands] = DeleteOperations.deleteRight(editor._getCursorConfiguration(), editor.getModel(), editor.getSelections());\n\t\t\tif (shouldPushStackElementBefore) {\n\t\t\t\teditor.pushUndoStop();\n\t\t\t}\n\t\t\teditor.executeCommands(this.id, commands);\n\t\t}\n\t});\n\n}\n\nnamespace Config {\n\n\tfunction findFocusedEditor(accessor: ServicesAccessor): editorCommon.ICommonCodeEditor {\n\t\treturn accessor.get(ICodeEditorService).getFocusedCodeEditor();\n\t}\n\n\tfunction getWorkbenchActiveEditor(accessor: ServicesAccessor): editorCommon.ICommonCodeEditor {\n\t\tconst editorService = accessor.get(IEditorService);\n\t\tlet activeEditor = (editorService).getActiveEditor && (editorService).getActiveEditor();\n\t\treturn getCodeEditor(activeEditor);\n\t}\n\n\tfunction registerCommand(command: Command) {\n\t\tKeybindingsRegistry.registerCommandAndKeybindingRule(command.toCommandAndKeybindingRule(CORE_WEIGHT));\n\t}\n\n\t/**\n\t * A command that will:\n\t * 1. invoke a command on the focused editor.\n\t * 2. otherwise, invoke a browser built-in command on the `activeElement`.\n\t * 3. otherwise, invoke a command on the workbench active editor.\n\t */\n\tclass EditorOrNativeTextInputCommand extends Command {\n\n\t\tprivate readonly _editorHandler: string | EditorCommand;\n\t\tprivate readonly _inputHandler: string;\n\n\t\tconstructor(opts: ICommandOptions & { editorHandler: string | EditorCommand; inputHandler: string; }) {\n\t\t\tsuper(opts);\n\t\t\tthis._editorHandler = opts.editorHandler;\n\t\t\tthis._inputHandler = opts.inputHandler;\n\t\t}\n\n\t\tpublic runCommand(accessor: ServicesAccessor, args: any): void {\n\n\t\t\tlet focusedEditor = findFocusedEditor(accessor);\n\t\t\t// Only if editor text focus (i.e. not if editor has widget focus).\n\t\t\tif (focusedEditor && focusedEditor.isFocused()) {\n\t\t\t\treturn this._runEditorHandler(focusedEditor, args);\n\t\t\t}\n\n\t\t\t// Ignore this action when user is focussed on an element that allows for entering text\n\t\t\tlet activeElement = document.activeElement;\n\t\t\tif (activeElement && ['input', 'textarea'].indexOf(activeElement.tagName.toLowerCase()) >= 0) {\n\t\t\t\tdocument.execCommand(this._inputHandler);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Redirecting to last active editor\n\t\t\tlet activeEditor = getWorkbenchActiveEditor(accessor);\n\t\t\tif (activeEditor) {\n\t\t\t\tactiveEditor.focus();\n\t\t\t\treturn this._runEditorHandler(activeEditor, args);\n\t\t\t}\n\t\t}\n\n\t\tprivate _runEditorHandler(editor: editorCommon.ICommonCodeEditor, args: any): void {\n\t\t\tlet HANDLER = this._editorHandler;\n\t\t\tif (typeof HANDLER === 'string') {\n\t\t\t\teditor.trigger('keyboard', HANDLER, args);\n\t\t\t} else {\n\t\t\t\targs = args || {};\n\t\t\t\targs.source = 'keyboard';\n\t\t\t\tHANDLER.runEditorCommand(null, editor, args);\n\t\t\t}\n\t\t}\n\t}\n\n\tregisterCommand(new EditorOrNativeTextInputCommand({\n\t\teditorHandler: CoreNavigationCommands.SelectAll,\n\t\tinputHandler: 'selectAll',\n\t\tid: 'editor.action.selectAll',\n\t\tprecondition: null,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: null,\n\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.KEY_A\n\t\t}\n\t}));\n\n\tregisterCommand(new EditorOrNativeTextInputCommand({\n\t\teditorHandler: H.Undo,\n\t\tinputHandler: 'undo',\n\t\tid: H.Undo,\n\t\tprecondition: EditorContextKeys.writable,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.KEY_Z\n\t\t}\n\t}));\n\n\tregisterCommand(new EditorOrNativeTextInputCommand({\n\t\teditorHandler: H.Redo,\n\t\tinputHandler: 'redo',\n\t\tid: H.Redo,\n\t\tprecondition: EditorContextKeys.writable,\n\t\tkbOpts: {\n\t\t\tweight: CORE_WEIGHT,\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.KEY_Y,\n\t\t\tsecondary: [KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_Z],\n\t\t\tmac: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_Z }\n\t\t}\n\t}));\n\n\t/**\n\t * A command that will invoke a command on the focused editor.\n\t */\n\tclass EditorHandlerCommand extends Command {\n\n\t\tprivate readonly _handlerId: string;\n\n\t\tconstructor(id: string, handlerId: string) {\n\t\t\tsuper({\n\t\t\t\tid: id,\n\t\t\t\tprecondition: null\n\t\t\t});\n\t\t\tthis._handlerId = handlerId;\n\t\t}\n\n\t\tpublic runCommand(accessor: ServicesAccessor, args: any): void {\n\t\t\tconst editor = findFocusedEditor(accessor);\n\t\t\tif (!editor) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\teditor.trigger('keyboard', this._handlerId, args);\n\t\t}\n\t}\n\n\tfunction registerOverwritableCommand(handlerId: string): void {\n\t\tregisterCommand(new EditorHandlerCommand('default:' + handlerId, handlerId));\n\t\tregisterCommand(new EditorHandlerCommand(handlerId, handlerId));\n\t}\n\n\tregisterOverwritableCommand(H.Type);\n\tregisterOverwritableCommand(H.ReplacePreviousChar);\n\tregisterOverwritableCommand(H.CompositionStart);\n\tregisterOverwritableCommand(H.CompositionEnd);\n\tregisterOverwritableCommand(H.Paste);\n\tregisterOverwritableCommand(H.Cut);\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'use strict';\n\nimport { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport { Position } from 'vs/editor/common/core/position';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { IEditorMouseEvent } from 'vs/editor/browser/editorBrowser';\nimport { ICommandService } from 'vs/platform/commands/common/commands';\nimport { IViewModel } from 'vs/editor/common/viewModel/viewModel';\nimport { ViewOutgoingEvents } from 'vs/editor/browser/view/viewOutgoingEvents';\nimport { CoreNavigationCommands, CoreEditorCommand } from 'vs/editor/common/controller/coreCommands';\nimport { Configuration } from 'vs/editor/browser/config/configuration';\n\nexport interface ExecCoreEditorCommandFunc {\n\t(editorCommand: CoreEditorCommand, args: any): void;\n}\n\nexport interface IMouseDispatchData {\n\tposition: Position;\n\t/**\n\t * Desired mouse column (e.g. when position.column gets clamped to text length -- clicking after text on a line).\n\t */\n\tmouseColumn: number;\n\tstartedOnLineNumbers: boolean;\n\n\tinSelectionMode: boolean;\n\tmouseDownCount: number;\n\taltKey: boolean;\n\tctrlKey: boolean;\n\tmetaKey: boolean;\n\tshiftKey: boolean;\n}\n\nexport class ViewController {\n\n\tprivate readonly configuration: Configuration;\n\tprivate readonly viewModel: IViewModel;\n\tprivate readonly _execCoreEditorCommandFunc: ExecCoreEditorCommandFunc;\n\tprivate readonly outgoingEvents: ViewOutgoingEvents;\n\tprivate readonly commandService: ICommandService;\n\n\tconstructor(\n\t\tconfiguration: Configuration,\n\t\tviewModel: IViewModel,\n\t\texecCommandFunc: ExecCoreEditorCommandFunc,\n\t\toutgoingEvents: ViewOutgoingEvents,\n\t\tcommandService: ICommandService\n\t) {\n\t\tthis.configuration = configuration;\n\t\tthis.viewModel = viewModel;\n\t\tthis._execCoreEditorCommandFunc = execCommandFunc;\n\t\tthis.outgoingEvents = outgoingEvents;\n\t\tthis.commandService = commandService;\n\t}\n\n\tprivate _execMouseCommand(editorCommand: CoreEditorCommand, args: any): void {\n\t\targs.source = 'mouse';\n\t\tthis._execCoreEditorCommandFunc(editorCommand, args);\n\t}\n\n\tpublic paste(source: string, text: string, pasteOnNewLine: boolean): void {\n\t\tthis.commandService.executeCommand(editorCommon.Handler.Paste, {\n\t\t\ttext: text,\n\t\t\tpasteOnNewLine: pasteOnNewLine,\n\t\t});\n\t}\n\n\tpublic type(source: string, text: string): void {\n\t\tthis.commandService.executeCommand(editorCommon.Handler.Type, {\n\t\t\ttext: text\n\t\t});\n\t}\n\n\tpublic replacePreviousChar(source: string, text: string, replaceCharCnt: number): void {\n\t\tthis.commandService.executeCommand(editorCommon.Handler.ReplacePreviousChar, {\n\t\t\ttext: text,\n\t\t\treplaceCharCnt: replaceCharCnt\n\t\t});\n\t}\n\n\tpublic compositionStart(source: string): void {\n\t\tthis.commandService.executeCommand(editorCommon.Handler.CompositionStart, {});\n\t}\n\n\tpublic compositionEnd(source: string): void {\n\t\tthis.commandService.executeCommand(editorCommon.Handler.CompositionEnd, {});\n\t}\n\n\tpublic cut(source: string): void {\n\t\tthis.commandService.executeCommand(editorCommon.Handler.Cut, {});\n\t}\n\n\tprivate _validateViewColumn(viewPosition: Position): Position {\n\t\tlet minColumn = this.viewModel.getLineMinColumn(viewPosition.lineNumber);\n\t\tif (viewPosition.column < minColumn) {\n\t\t\treturn new Position(viewPosition.lineNumber, minColumn);\n\t\t}\n\t\treturn viewPosition;\n\t}\n\n\tprivate _hasMulticursorModifier(data: IMouseDispatchData): boolean {\n\t\tswitch (this.configuration.editor.multiCursorModifier) {\n\t\t\tcase 'altKey':\n\t\t\t\treturn data.altKey;\n\t\t\tcase 'ctrlKey':\n\t\t\t\treturn data.ctrlKey;\n\t\t\tcase 'metaKey':\n\t\t\t\treturn data.metaKey;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate _hasNonMulticursorModifier(data: IMouseDispatchData): boolean {\n\t\tswitch (this.configuration.editor.multiCursorModifier) {\n\t\t\tcase 'altKey':\n\t\t\t\treturn data.ctrlKey || data.metaKey;\n\t\t\tcase 'ctrlKey':\n\t\t\t\treturn data.altKey || data.metaKey;\n\t\t\tcase 'metaKey':\n\t\t\t\treturn data.ctrlKey || data.altKey;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic dispatchMouse(data: IMouseDispatchData): void {\n\t\tif (data.startedOnLineNumbers) {\n\t\t\t// If the dragging started on the gutter, then have operations work on the entire line\n\t\t\tif (this._hasMulticursorModifier(data)) {\n\t\t\t\tif (data.inSelectionMode) {\n\t\t\t\t\tthis.lastCursorLineSelect(data.position);\n\t\t\t\t} else {\n\t\t\t\t\tthis.createCursor(data.position, true);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (data.inSelectionMode) {\n\t\t\t\t\tthis.lineSelectDrag(data.position);\n\t\t\t\t} else {\n\t\t\t\t\tthis.lineSelect(data.position);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (data.mouseDownCount >= 4) {\n\t\t\tthis.selectAll();\n\t\t} else if (data.mouseDownCount === 3) {\n\t\t\tif (this._hasMulticursorModifier(data)) {\n\t\t\t\tif (data.inSelectionMode) {\n\t\t\t\t\tthis.lastCursorLineSelectDrag(data.position);\n\t\t\t\t} else {\n\t\t\t\t\tthis.lastCursorLineSelect(data.position);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (data.inSelectionMode) {\n\t\t\t\t\tthis.lineSelectDrag(data.position);\n\t\t\t\t} else {\n\t\t\t\t\tthis.lineSelect(data.position);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (data.mouseDownCount === 2) {\n\t\t\tif (this._hasMulticursorModifier(data)) {\n\t\t\t\tthis.lastCursorWordSelect(data.position);\n\t\t\t} else {\n\t\t\t\tif (data.inSelectionMode) {\n\t\t\t\t\tthis.wordSelectDrag(data.position);\n\t\t\t\t} else {\n\t\t\t\t\tthis.wordSelect(data.position);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (this._hasMulticursorModifier(data)) {\n\t\t\t\tif (!this._hasNonMulticursorModifier(data)) {\n\t\t\t\t\tif (data.shiftKey) {\n\t\t\t\t\t\tthis.columnSelect(data.position, data.mouseColumn);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Do multi-cursor operations only when purely alt is pressed\n\t\t\t\t\t\tif (data.inSelectionMode) {\n\t\t\t\t\t\t\tthis.lastCursorMoveToSelect(data.position);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.createCursor(data.position, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (data.inSelectionMode) {\n\t\t\t\t\tthis.moveToSelect(data.position);\n\t\t\t\t} else {\n\t\t\t\t\tthis.moveTo(data.position);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _usualArgs(viewPosition: Position) {\n\t\tviewPosition = this._validateViewColumn(viewPosition);\n\t\treturn {\n\t\t\tposition: this.convertViewToModelPosition(viewPosition),\n\t\t\tviewPosition: viewPosition\n\t\t};\n\t}\n\n\tpublic moveTo(viewPosition: Position): void {\n\t\tthis._execMouseCommand(CoreNavigationCommands.MoveTo, this._usualArgs(viewPosition));\n\t}\n\n\tprivate moveToSelect(viewPosition: Position): void {\n\t\tthis._execMouseCommand(CoreNavigationCommands.MoveToSelect, this._usualArgs(viewPosition));\n\t}\n\n\tprivate columnSelect(viewPosition: Position, mouseColumn: number): void {\n\t\tviewPosition = this._validateViewColumn(viewPosition);\n\t\tthis._execMouseCommand(CoreNavigationCommands.ColumnSelect, {\n\t\t\tposition: this.convertViewToModelPosition(viewPosition),\n\t\t\tviewPosition: viewPosition,\n\t\t\tmouseColumn: mouseColumn\n\t\t});\n\t}\n\n\tprivate createCursor(viewPosition: Position, wholeLine: boolean): void {\n\t\tviewPosition = this._validateViewColumn(viewPosition);\n\t\tthis._execMouseCommand(CoreNavigationCommands.CreateCursor, {\n\t\t\tposition: this.convertViewToModelPosition(viewPosition),\n\t\t\tviewPosition: viewPosition,\n\t\t\twholeLine: wholeLine\n\t\t});\n\t}\n\n\tprivate lastCursorMoveToSelect(viewPosition: Position): void {\n\t\tthis._execMouseCommand(CoreNavigationCommands.LastCursorMoveToSelect, this._usualArgs(viewPosition));\n\t}\n\n\tprivate wordSelect(viewPosition: Position): void {\n\t\tthis._execMouseCommand(CoreNavigationCommands.WordSelect, this._usualArgs(viewPosition));\n\t}\n\n\tprivate wordSelectDrag(viewPosition: Position): void {\n\t\tthis._execMouseCommand(CoreNavigationCommands.WordSelectDrag, this._usualArgs(viewPosition));\n\t}\n\n\tprivate lastCursorWordSelect(viewPosition: Position): void {\n\t\tthis._execMouseCommand(CoreNavigationCommands.LastCursorWordSelect, this._usualArgs(viewPosition));\n\t}\n\n\tprivate lineSelect(viewPosition: Position): void {\n\t\tthis._execMouseCommand(CoreNavigationCommands.LineSelect, this._usualArgs(viewPosition));\n\t}\n\n\tprivate lineSelectDrag(viewPosition: Position): void {\n\t\tthis._execMouseCommand(CoreNavigationCommands.LineSelectDrag, this._usualArgs(viewPosition));\n\t}\n\n\tprivate lastCursorLineSelect(viewPosition: Position): void {\n\t\tthis._execMouseCommand(CoreNavigationCommands.LastCursorLineSelect, this._usualArgs(viewPosition));\n\t}\n\n\tprivate lastCursorLineSelectDrag(viewPosition: Position): void {\n\t\tthis._execMouseCommand(CoreNavigationCommands.LastCursorLineSelectDrag, this._usualArgs(viewPosition));\n\t}\n\n\tprivate selectAll(): void {\n\t\tthis._execMouseCommand(CoreNavigationCommands.SelectAll, {});\n\t}\n\n\t// ----------------------\n\n\tprivate convertViewToModelPosition(viewPosition: Position): Position {\n\t\treturn this.viewModel.coordinatesConverter.convertViewPositionToModelPosition(viewPosition);\n\t}\n\n\tpublic emitKeyDown(e: IKeyboardEvent): void {\n\t\tthis.outgoingEvents.emitKeyDown(e);\n\t}\n\n\tpublic emitKeyUp(e: IKeyboardEvent): void {\n\t\tthis.outgoingEvents.emitKeyUp(e);\n\t}\n\n\tpublic emitContextMenu(e: IEditorMouseEvent): void {\n\t\tthis.outgoingEvents.emitContextMenu(e);\n\t}\n\n\tpublic emitMouseMove(e: IEditorMouseEvent): void {\n\t\tthis.outgoingEvents.emitMouseMove(e);\n\t}\n\n\tpublic emitMouseLeave(e: IEditorMouseEvent): void {\n\t\tthis.outgoingEvents.emitMouseLeave(e);\n\t}\n\n\tpublic emitMouseUp(e: IEditorMouseEvent): void {\n\t\tthis.outgoingEvents.emitMouseUp(e);\n\t}\n\n\tpublic emitMouseDown(e: IEditorMouseEvent): void {\n\t\tthis.outgoingEvents.emitMouseDown(e);\n\t}\n\n\tpublic emitMouseDrag(e: IEditorMouseEvent): void {\n\t\tthis.outgoingEvents.emitMouseDrag(e);\n\t}\n\n\tpublic emitMouseDrop(e: IEditorMouseEvent): void {\n\t\tthis.outgoingEvents.emitMouseDrop(e);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport { ICommand, ICommonCodeEditor } from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { IActionOptions, editorAction, EditorAction, ServicesAccessor } from 'vs/editor/common/editorCommonExtensions';\nimport { MoveCaretCommand } from './moveCaretCommand';\n\nclass MoveCaretAction extends EditorAction {\n\n\tprivate left: boolean;\n\n\tconstructor(left: boolean, opts: IActionOptions) {\n\t\tsuper(opts);\n\n\t\tthis.left = left;\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\n\t\tvar commands: ICommand[] = [];\n\t\tvar selections = editor.getSelections();\n\n\t\tfor (var i = 0; i < selections.length; i++) {\n\t\t\tcommands.push(new MoveCaretCommand(selections[i], this.left));\n\t\t}\n\n\t\teditor.pushUndoStop();\n\t\teditor.executeCommands(this.id, commands);\n\t\teditor.pushUndoStop();\n\t}\n}\n\n@editorAction\nclass MoveCaretLeftAction extends MoveCaretAction {\n\tconstructor() {\n\t\tsuper(true, {\n\t\t\tid: 'editor.action.moveCarretLeftAction',\n\t\t\tlabel: nls.localize('caret.moveLeft', \"Move Caret Left\"),\n\t\t\talias: 'Move Caret Left',\n\t\t\tprecondition: EditorContextKeys.writable\n\t\t});\n\t}\n}\n\n@editorAction\nclass MoveCaretRightAction extends MoveCaretAction {\n\tconstructor() {\n\t\tsuper(false, {\n\t\t\tid: 'editor.action.moveCarretRightAction',\n\t\t\tlabel: nls.localize('caret.moveRight', \"Move Caret Right\"),\n\t\t\talias: 'Move Caret Right',\n\t\t\tprecondition: EditorContextKeys.writable\n\t\t});\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { Range } from 'vs/editor/common/core/range';\nimport { ICommand, ICommonCodeEditor } from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { editorAction, EditorAction, ServicesAccessor } from 'vs/editor/common/editorCommonExtensions';\nimport { ReplaceCommand } from 'vs/editor/common/commands/replaceCommand';\n\n@editorAction\nclass TransposeLettersAction extends EditorAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.transposeLetters',\n\t\t\tlabel: nls.localize('transposeLetters.label', \"Transpose Letters\"),\n\t\t\talias: 'Transpose Letters',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: 0,\n\t\t\t\tmac: {\n\t\t\t\t\tprimary: KeyMod.WinCtrl | KeyCode.KEY_T\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\t\tlet model = editor.getModel();\n\t\tlet commands: ICommand[] = [];\n\t\tlet selections = editor.getSelections();\n\n\t\tfor (let i = 0; i < selections.length; i++) {\n\t\t\tlet selection = selections[i];\n\t\t\tif (!selection.isEmpty()) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet lineNumber = selection.startLineNumber;\n\t\t\tlet column = selection.startColumn;\n\t\t\tif (column === 1) {\n\t\t\t\t// at the beginning of line\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet maxColumn = model.getLineMaxColumn(lineNumber);\n\t\t\tif (column === maxColumn) {\n\t\t\t\t// at the end of line\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet lineContent = model.getLineContent(lineNumber);\n\t\t\tlet charToTheLeft = lineContent.charAt(column - 2);\n\t\t\tlet charToTheRight = lineContent.charAt(column - 1);\n\n\t\t\tlet replaceRange = new Range(lineNumber, column - 1, lineNumber, column + 1);\n\n\t\t\tcommands.push(new ReplaceCommand(replaceRange, charToTheRight + charToTheLeft));\n\t\t}\n\n\t\tif (commands.length > 0) {\n\t\t\teditor.pushUndoStop();\n\t\t\teditor.executeCommands(this.id, commands);\n\t\t\teditor.pushUndoStop();\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/css!./clipboard';\nimport * as nls from 'vs/nls';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport * as browser from 'vs/base/browser/browser';\nimport * as platform from 'vs/base/common/platform';\nimport { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';\nimport { ICodeEditorService } from 'vs/editor/common/services/codeEditorService';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { editorAction, IActionOptions, EditorAction, ICommandKeybindingsOptions } from 'vs/editor/common/editorCommonExtensions';\nimport { CopyOptions } from 'vs/editor/browser/controller/textAreaInput';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\n\nconst CLIPBOARD_CONTEXT_MENU_GROUP = '9_cutcopypaste';\n\nconst supportsCut = (platform.isNative || document.queryCommandSupported('cut'));\nconst supportsCopy = (platform.isNative || document.queryCommandSupported('copy'));\n// IE and Edge have trouble with setting html content in clipboard\nconst supportsCopyWithSyntaxHighlighting = (supportsCopy && !browser.isEdgeOrIE);\n// Chrome incorrectly returns true for document.queryCommandSupported('paste')\n// when the paste feature is available but the calling script has insufficient\n// privileges to actually perform the action\nconst supportsPaste = (platform.isNative || (!browser.isChrome && document.queryCommandSupported('paste')));\n\ntype ExecCommand = 'cut' | 'copy' | 'paste';\n\nfunction conditionalEditorAction(condition: boolean) {\n\tif (!condition) {\n\t\treturn () => { };\n\t}\n\treturn editorAction;\n}\n\nabstract class ExecCommandAction extends EditorAction {\n\n\tprivate browserCommand: ExecCommand;\n\n\tconstructor(browserCommand: ExecCommand, opts: IActionOptions) {\n\t\tsuper(opts);\n\t\tthis.browserCommand = browserCommand;\n\t}\n\n\tpublic runCommand(accessor: ServicesAccessor, args: any): void {\n\t\tlet focusedEditor = accessor.get(ICodeEditorService).getFocusedCodeEditor();\n\t\t// Only if editor text focus (i.e. not if editor has widget focus).\n\t\tif (focusedEditor && focusedEditor.isFocused()) {\n\t\t\tfocusedEditor.trigger('keyboard', this.id, args);\n\t\t\treturn;\n\t\t}\n\n\t\tdocument.execCommand(this.browserCommand);\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\t\teditor.focus();\n\t\tdocument.execCommand(this.browserCommand);\n\t}\n}\n\n@conditionalEditorAction(supportsCut)\nclass ExecCommandCutAction extends ExecCommandAction {\n\n\tconstructor() {\n\t\tlet kbOpts: ICommandKeybindingsOptions = {\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.KEY_X,\n\t\t\twin: { primary: KeyMod.CtrlCmd | KeyCode.KEY_X, secondary: [KeyMod.Shift | KeyCode.Delete] }\n\t\t};\n\t\t// Do not bind cut keybindings in the browser,\n\t\t// since browsers do that for us and it avoids security prompts\n\t\tif (!platform.isNative) {\n\t\t\tkbOpts = null;\n\t\t}\n\t\tsuper('cut', {\n\t\t\tid: 'editor.action.clipboardCutAction',\n\t\t\tlabel: nls.localize('actions.clipboard.cutLabel', \"Cut\"),\n\t\t\talias: 'Cut',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: kbOpts,\n\t\t\tmenuOpts: {\n\t\t\t\tgroup: CLIPBOARD_CONTEXT_MENU_GROUP,\n\t\t\t\torder: 1\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\t\tconst emptySelectionClipboard = editor.getConfiguration().emptySelectionClipboard;\n\n\t\tif (!emptySelectionClipboard && editor.getSelection().isEmpty()) {\n\t\t\treturn;\n\t\t}\n\n\t\tsuper.run(accessor, editor);\n\t}\n}\n\n@conditionalEditorAction(supportsCopy)\nclass ExecCommandCopyAction extends ExecCommandAction {\n\n\tconstructor() {\n\t\tlet kbOpts: ICommandKeybindingsOptions = {\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.KEY_C,\n\t\t\twin: { primary: KeyMod.CtrlCmd | KeyCode.KEY_C, secondary: [KeyMod.CtrlCmd | KeyCode.Insert] }\n\t\t};\n\t\t// Do not bind copy keybindings in the browser,\n\t\t// since browsers do that for us and it avoids security prompts\n\t\tif (!platform.isNative) {\n\t\t\tkbOpts = null;\n\t\t}\n\n\t\tsuper('copy', {\n\t\t\tid: 'editor.action.clipboardCopyAction',\n\t\t\tlabel: nls.localize('actions.clipboard.copyLabel', \"Copy\"),\n\t\t\talias: 'Copy',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: kbOpts,\n\t\t\tmenuOpts: {\n\t\t\t\tgroup: CLIPBOARD_CONTEXT_MENU_GROUP,\n\t\t\t\torder: 2\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\t\tconst emptySelectionClipboard = editor.getConfiguration().emptySelectionClipboard;\n\n\t\tif (!emptySelectionClipboard && editor.getSelection().isEmpty()) {\n\t\t\treturn;\n\t\t}\n\n\t\tsuper.run(accessor, editor);\n\t}\n}\n\n@conditionalEditorAction(supportsPaste)\nclass ExecCommandPasteAction extends ExecCommandAction {\n\n\tconstructor() {\n\t\tlet kbOpts: ICommandKeybindingsOptions = {\n\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.KEY_V,\n\t\t\twin: { primary: KeyMod.CtrlCmd | KeyCode.KEY_V, secondary: [KeyMod.Shift | KeyCode.Insert] }\n\t\t};\n\t\t// Do not bind paste keybindings in the browser,\n\t\t// since browsers do that for us and it avoids security prompts\n\t\tif (!platform.isNative) {\n\t\t\tkbOpts = null;\n\t\t}\n\n\t\tsuper('paste', {\n\t\t\tid: 'editor.action.clipboardPasteAction',\n\t\t\tlabel: nls.localize('actions.clipboard.pasteLabel', \"Paste\"),\n\t\t\talias: 'Paste',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: kbOpts,\n\t\t\tmenuOpts: {\n\t\t\t\tgroup: CLIPBOARD_CONTEXT_MENU_GROUP,\n\t\t\t\torder: 3\n\t\t\t}\n\t\t});\n\t}\n}\n\n@conditionalEditorAction(supportsCopyWithSyntaxHighlighting)\nclass ExecCommandCopyWithSyntaxHighlightingAction extends ExecCommandAction {\n\n\tconstructor() {\n\t\tsuper('copy', {\n\t\t\tid: 'editor.action.clipboardCopyWithSyntaxHighlightingAction',\n\t\t\tlabel: nls.localize('actions.clipboard.copyWithSyntaxHighlightingLabel', \"Copy With Syntax Highlighting\"),\n\t\t\talias: 'Copy With Syntax Highlighting',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: null\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\t\tconst emptySelectionClipboard = editor.getConfiguration().emptySelectionClipboard;\n\n\t\tif (!emptySelectionClipboard && editor.getSelection().isEmpty()) {\n\t\t\treturn;\n\t\t}\n\n\t\tCopyOptions.forceCopyWithSyntaxHighlighting = true;\n\t\tsuper.run(accessor, editor);\n\t\tCopyOptions.forceCopyWithSyntaxHighlighting = false;\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { illegalArgument, onUnexpectedExternalError } from 'vs/base/common/errors';\nimport { mergeSort } from 'vs/base/common/arrays';\nimport URI from 'vs/base/common/uri';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IModel } from 'vs/editor/common/editorCommon';\nimport { CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';\nimport { CodeLensProviderRegistry, CodeLensProvider, ICodeLensSymbol } from 'vs/editor/common/modes';\nimport { IModelService } from 'vs/editor/common/services/modelService';\nimport { asWinJsPromise } from 'vs/base/common/async';\n\nexport interface ICodeLensData {\n\tsymbol: ICodeLensSymbol;\n\tprovider: CodeLensProvider;\n}\n\nexport function getCodeLensData(model: IModel): TPromise {\n\n\tconst symbols: ICodeLensData[] = [];\n\tconst provider = CodeLensProviderRegistry.ordered(model);\n\n\tconst promises = provider.map(provider => asWinJsPromise(token => provider.provideCodeLenses(model, token)).then(result => {\n\t\tif (Array.isArray(result)) {\n\t\t\tfor (let symbol of result) {\n\t\t\t\tsymbols.push({ symbol, provider });\n\t\t\t}\n\t\t}\n\t}, onUnexpectedExternalError));\n\n\treturn TPromise.join(promises).then(() => {\n\n\t\treturn mergeSort(symbols, (a, b) => {\n\t\t\t// sort by lineNumber, provider-rank, and column\n\t\t\tif (a.symbol.range.startLineNumber < b.symbol.range.startLineNumber) {\n\t\t\t\treturn -1;\n\t\t\t} else if (a.symbol.range.startLineNumber > b.symbol.range.startLineNumber) {\n\t\t\t\treturn 1;\n\t\t\t} else if (provider.indexOf(a.provider) < provider.indexOf(b.provider)) {\n\t\t\t\treturn -1;\n\t\t\t} else if (provider.indexOf(a.provider) > provider.indexOf(b.provider)) {\n\t\t\t\treturn 1;\n\t\t\t} else if (a.symbol.range.startColumn < b.symbol.range.startColumn) {\n\t\t\t\treturn -1;\n\t\t\t} else if (a.symbol.range.startColumn > b.symbol.range.startColumn) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t});\n\t});\n}\n\nCommonEditorRegistry.registerLanguageCommand('_executeCodeLensProvider', function (accessor, args) {\n\n\tconst { resource } = args;\n\tif (!(resource instanceof URI)) {\n\t\tthrow illegalArgument();\n\t}\n\n\tconst model = accessor.get(IModelService).getModel(resource);\n\tif (!model) {\n\t\tthrow illegalArgument();\n\t}\n\n\treturn getCodeLensData(model).then(value => value.map(item => item.symbol));\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'use strict';\n\nimport * as nls from 'vs/nls';\nimport { KeyCode, KeyMod, KeyChord } from 'vs/base/common/keyCodes';\nimport { ICommand, ICommonCodeEditor } from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { editorAction, IActionOptions, EditorAction, ServicesAccessor } from 'vs/editor/common/editorCommonExtensions';\nimport { BlockCommentCommand } from './blockCommentCommand';\nimport { LineCommentCommand, Type } from './lineCommentCommand';\n\nabstract class CommentLineAction extends EditorAction {\n\n\tprivate _type: Type;\n\n\tconstructor(type: Type, opts: IActionOptions) {\n\t\tsuper(opts);\n\t\tthis._type = type;\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\t\tlet model = editor.getModel();\n\t\tif (!model) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar commands: ICommand[] = [];\n\t\tvar selections = editor.getSelections();\n\t\tvar opts = model.getOptions();\n\n\t\tfor (var i = 0; i < selections.length; i++) {\n\t\t\tcommands.push(new LineCommentCommand(selections[i], opts.tabSize, this._type));\n\t\t}\n\n\t\teditor.pushUndoStop();\n\t\teditor.executeCommands(this.id, commands);\n\t\teditor.pushUndoStop();\n\t}\n\n}\n\n@editorAction\nclass ToggleCommentLineAction extends CommentLineAction {\n\tconstructor() {\n\t\tsuper(Type.Toggle, {\n\t\t\tid: 'editor.action.commentLine',\n\t\t\tlabel: nls.localize('comment.line', \"Toggle Line Comment\"),\n\t\t\talias: 'Toggle Line Comment',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.US_SLASH\n\t\t\t}\n\t\t});\n\t}\n}\n\n@editorAction\nclass AddLineCommentAction extends CommentLineAction {\n\tconstructor() {\n\t\tsuper(Type.ForceAdd, {\n\t\t\tid: 'editor.action.addCommentLine',\n\t\t\tlabel: nls.localize('comment.line.add', \"Add Line Comment\"),\n\t\t\talias: 'Add Line Comment',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.KEY_C)\n\t\t\t}\n\t\t});\n\t}\n}\n\n@editorAction\nclass RemoveLineCommentAction extends CommentLineAction {\n\tconstructor() {\n\t\tsuper(Type.ForceRemove, {\n\t\t\tid: 'editor.action.removeCommentLine',\n\t\t\tlabel: nls.localize('comment.line.remove', \"Remove Line Comment\"),\n\t\t\talias: 'Remove Line Comment',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.KEY_U)\n\t\t\t}\n\t\t});\n\t}\n}\n\n@editorAction\nclass BlockCommentAction extends EditorAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.blockComment',\n\t\t\tlabel: nls.localize('comment.block', \"Toggle Block Comment\"),\n\t\t\talias: 'Toggle Block Comment',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.Shift | KeyMod.Alt | KeyCode.KEY_A,\n\t\t\t\tlinux: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_A }\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\t\tvar commands: ICommand[] = [];\n\t\tvar selections = editor.getSelections();\n\n\t\tfor (var i = 0; i < selections.length; i++) {\n\t\t\tcommands.push(new BlockCommentCommand(selections[i]));\n\t\t}\n\n\t\teditor.pushUndoStop();\n\t\teditor.executeCommands(this.id, commands);\n\t\teditor.pushUndoStop();\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport { IAction } from 'vs/base/common/actions';\nimport { ResolvedKeybinding, KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport * as dom from 'vs/base/browser/dom';\nimport { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport { ActionItem, Separator } from 'vs/base/browser/ui/actionbar/actionbar';\nimport { IContextMenuService, IContextViewService } from 'vs/platform/contextview/browser/contextView';\nimport { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';\nimport { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';\nimport { IMenuService, MenuId } from 'vs/platform/actions/common/actions';\nimport { ICommonCodeEditor, IEditorContribution, IScrollEvent } from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { editorAction, ServicesAccessor, EditorAction } from 'vs/editor/common/editorCommonExtensions';\nimport { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser';\nimport { editorContribution } from 'vs/editor/browser/editorBrowserExtensions';\n\nexport interface IPosition {\n\tx: number;\n\ty: number;\n}\n\n@editorContribution\nexport class ContextMenuController implements IEditorContribution {\n\n\tprivate static ID = 'editor.contrib.contextmenu';\n\n\tpublic static get(editor: ICommonCodeEditor): ContextMenuController {\n\t\treturn editor.getContribution(ContextMenuController.ID);\n\t}\n\n\tprivate _toDispose: IDisposable[] = [];\n\tprivate _contextMenuIsBeingShownCount: number = 0;\n\tprivate _editor: ICodeEditor;\n\n\tconstructor(\n\t\teditor: ICodeEditor,\n\t\t@IContextMenuService private _contextMenuService: IContextMenuService,\n\t\t@IContextViewService private _contextViewService: IContextViewService,\n\t\t@IContextKeyService private _contextKeyService: IContextKeyService,\n\t\t@IKeybindingService private _keybindingService: IKeybindingService,\n\t\t@IMenuService private _menuService: IMenuService\n\t) {\n\t\tthis._editor = editor;\n\n\t\tthis._toDispose.push(this._editor.onContextMenu((e: IEditorMouseEvent) => this._onContextMenu(e)));\n\t\tthis._toDispose.push(this._editor.onDidScrollChange((e: IScrollEvent) => {\n\t\t\tif (this._contextMenuIsBeingShownCount > 0) {\n\t\t\t\tthis._contextViewService.hideContextView();\n\t\t\t}\n\t\t}));\n\t\tthis._toDispose.push(this._editor.onKeyDown((e: IKeyboardEvent) => {\n\t\t\tif (e.keyCode === KeyCode.ContextMenu) {\n\t\t\t\t// Chrome is funny like that\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t\tthis.showContextMenu();\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate _onContextMenu(e: IEditorMouseEvent): void {\n\t\tif (!this._editor.getConfiguration().contribInfo.contextmenu) {\n\t\t\tthis._editor.focus();\n\t\t\t// Ensure the cursor is at the position of the mouse click\n\t\t\tif (e.target.position && !this._editor.getSelection().containsPosition(e.target.position)) {\n\t\t\t\tthis._editor.setPosition(e.target.position);\n\t\t\t}\n\t\t\treturn; // Context menu is turned off through configuration\n\t\t}\n\n\t\tif (e.target.type === MouseTargetType.OVERLAY_WIDGET) {\n\t\t\treturn; // allow native menu on widgets to support right click on input field for example in find\n\t\t}\n\n\t\te.event.preventDefault();\n\n\t\tif (e.target.type !== MouseTargetType.CONTENT_TEXT && e.target.type !== MouseTargetType.CONTENT_EMPTY && e.target.type !== MouseTargetType.TEXTAREA) {\n\t\t\treturn; // only support mouse click into text or native context menu key for now\n\t\t}\n\n\t\t// Ensure the editor gets focus if it hasn't, so the right events are being sent to other contributions\n\t\tthis._editor.focus();\n\n\t\t// Ensure the cursor is at the position of the mouse click\n\t\tif (e.target.position && !this._editor.getSelection().containsPosition(e.target.position)) {\n\t\t\tthis._editor.setPosition(e.target.position);\n\t\t}\n\n\t\t// Unless the user triggerd the context menu through Shift+F10, use the mouse position as menu position\n\t\tvar forcedPosition: IPosition;\n\t\tif (e.target.type !== MouseTargetType.TEXTAREA) {\n\t\t\tforcedPosition = { x: e.event.posx, y: e.event.posy + 1 };\n\t\t}\n\n\t\t// Show the context menu\n\t\tthis.showContextMenu(forcedPosition);\n\t}\n\n\tpublic showContextMenu(forcedPosition?: IPosition): void {\n\t\tif (!this._editor.getConfiguration().contribInfo.contextmenu) {\n\t\t\treturn; // Context menu is turned off through configuration\n\t\t}\n\n\t\tif (!this._contextMenuService) {\n\t\t\tthis._editor.focus();\n\t\t\treturn;\t// We need the context menu service to function\n\t\t}\n\n\t\t// Find actions available for menu\n\t\tvar menuActions = this._getMenuActions();\n\n\t\t// Show menu if we have actions to show\n\t\tif (menuActions.length > 0) {\n\t\t\tthis._doShowContextMenu(menuActions, forcedPosition);\n\t\t}\n\t}\n\n\tprivate _getMenuActions(): IAction[] {\n\t\tconst result: IAction[] = [];\n\n\t\tlet contextMenu = this._menuService.createMenu(MenuId.EditorContext, this._contextKeyService);\n\t\tconst groups = contextMenu.getActions({ arg: this._editor.getModel().uri });\n\t\tcontextMenu.dispose();\n\n\t\tfor (let group of groups) {\n\t\t\tconst [, actions] = group;\n\t\t\tresult.push(...actions);\n\t\t\tresult.push(new Separator());\n\t\t}\n\t\tresult.pop(); // remove last separator\n\t\treturn result;\n\t}\n\n\tprivate _doShowContextMenu(actions: IAction[], forcedPosition: IPosition = null): void {\n\n\t\t// Disable hover\n\t\tvar oldHoverSetting = this._editor.getConfiguration().contribInfo.hover;\n\t\tthis._editor.updateOptions({\n\t\t\thover: false\n\t\t});\n\n\t\tvar menuPosition = forcedPosition;\n\t\tif (!menuPosition) {\n\t\t\t// Ensure selection is visible\n\t\t\tthis._editor.revealPosition(this._editor.getPosition());\n\n\t\t\tthis._editor.render();\n\t\t\tvar cursorCoords = this._editor.getScrolledVisiblePosition(this._editor.getPosition());\n\n\t\t\t// Translate to absolute editor position\n\t\t\tvar editorCoords = dom.getDomNodePagePosition(this._editor.getDomNode());\n\t\t\tvar posx = editorCoords.left + cursorCoords.left;\n\t\t\tvar posy = editorCoords.top + cursorCoords.top + cursorCoords.height;\n\n\t\t\tmenuPosition = { x: posx, y: posy };\n\t\t}\n\n\t\t// Show menu\n\t\tthis._contextMenuIsBeingShownCount++;\n\t\tthis._contextMenuService.showContextMenu({\n\t\t\tgetAnchor: () => menuPosition,\n\n\t\t\tgetActions: () => {\n\t\t\t\treturn TPromise.as(actions);\n\t\t\t},\n\n\t\t\tgetActionItem: (action) => {\n\t\t\t\tvar keybinding = this._keybindingFor(action);\n\t\t\t\tif (keybinding) {\n\t\t\t\t\treturn new ActionItem(action, action, { label: true, keybinding: keybinding.getLabel(), isMenu: true });\n\t\t\t\t}\n\n\t\t\t\tvar customActionItem = action;\n\t\t\t\tif (typeof customActionItem.getActionItem === 'function') {\n\t\t\t\t\treturn customActionItem.getActionItem();\n\t\t\t\t}\n\n\t\t\t\treturn new ActionItem(action, action, { icon: true, label: true, isMenu: true });\n\t\t\t},\n\n\t\t\tgetKeyBinding: (action): ResolvedKeybinding => {\n\t\t\t\treturn this._keybindingFor(action);\n\t\t\t},\n\n\t\t\tonHide: (wasCancelled: boolean) => {\n\t\t\t\tthis._contextMenuIsBeingShownCount--;\n\t\t\t\tthis._editor.focus();\n\t\t\t\tthis._editor.updateOptions({\n\t\t\t\t\thover: oldHoverSetting\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _keybindingFor(action: IAction): ResolvedKeybinding {\n\t\treturn this._keybindingService.lookupKeybinding(action.id);\n\t}\n\n\tpublic getId(): string {\n\t\treturn ContextMenuController.ID;\n\t}\n\n\tpublic dispose(): void {\n\t\tif (this._contextMenuIsBeingShownCount > 0) {\n\t\t\tthis._contextViewService.hideContextView();\n\t\t}\n\n\t\tthis._toDispose = dispose(this._toDispose);\n\t}\n}\n\n@editorAction\nclass ShowContextMenu extends EditorAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.showContextMenu',\n\t\t\tlabel: nls.localize('action.showContextMenu.label', \"Show Editor Context Menu\"),\n\t\t\talias: 'Show Editor Context Menu',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.Shift | KeyCode.F10\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\t\tlet contribution = ContextMenuController.get(editor);\n\t\tcontribution.showContextMenu();\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { editorCommand, ServicesAccessor, EditorCommand } from 'vs/editor/common/editorCommonExtensions';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { ICommonCodeEditor, IEditorContribution } from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { ICodeEditor } from 'vs/editor/browser/editorBrowser';\nimport { editorContribution } from 'vs/editor/browser/editorBrowserExtensions';\n\nclass CursorState {\n\treadonly selections: Selection[];\n\n\tconstructor(selections: Selection[]) {\n\t\tthis.selections = selections;\n\t}\n\n\tpublic equals(other: CursorState): boolean {\n\t\tconst thisLen = this.selections.length;\n\t\tconst otherLen = other.selections.length;\n\t\tif (thisLen !== otherLen) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (let i = 0; i < thisLen; i++) {\n\t\t\tif (!this.selections[i].equalsSelection(other.selections[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n}\n\n@editorContribution\nexport class CursorUndoController extends Disposable implements IEditorContribution {\n\n\tprivate static ID = 'editor.contrib.cursorUndoController';\n\n\tpublic static get(editor: ICommonCodeEditor): CursorUndoController {\n\t\treturn editor.getContribution(CursorUndoController.ID);\n\t}\n\n\tprivate readonly _editor: ICodeEditor;\n\tprivate _isCursorUndo: boolean;\n\n\tprivate _undoStack: CursorState[];\n\tprivate _prevState: CursorState;\n\n\tconstructor(editor: ICodeEditor) {\n\t\tsuper();\n\t\tthis._editor = editor;\n\t\tthis._isCursorUndo = false;\n\n\t\tthis._undoStack = [];\n\t\tthis._prevState = this._readState();\n\n\t\tthis._register(editor.onDidChangeModel((e) => {\n\t\t\tthis._undoStack = [];\n\t\t\tthis._prevState = null;\n\t\t}));\n\t\tthis._register(editor.onDidChangeModelContent((e) => {\n\t\t\tthis._undoStack = [];\n\t\t\tthis._prevState = null;\n\t\t}));\n\t\tthis._register(editor.onDidChangeCursorSelection((e) => {\n\n\t\t\tif (!this._isCursorUndo && this._prevState) {\n\t\t\t\tthis._undoStack.push(this._prevState);\n\t\t\t\tif (this._undoStack.length > 50) {\n\t\t\t\t\t// keep the cursor undo stack bounded\n\t\t\t\t\tthis._undoStack = this._undoStack.splice(0, this._undoStack.length - 50);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._prevState = this._readState();\n\t\t}));\n\t}\n\n\tprivate _readState(): CursorState {\n\t\tif (!this._editor.getModel()) {\n\t\t\t// no model => no state\n\t\t\treturn null;\n\t\t}\n\n\t\treturn new CursorState(this._editor.getSelections());\n\t}\n\n\tpublic getId(): string {\n\t\treturn CursorUndoController.ID;\n\t}\n\n\tpublic cursorUndo(): void {\n\t\tconst currState = new CursorState(this._editor.getSelections());\n\n\t\twhile (this._undoStack.length > 0) {\n\t\t\tconst prevState = this._undoStack.pop();\n\n\t\t\tif (!prevState.equals(currState)) {\n\t\t\t\tthis._isCursorUndo = true;\n\t\t\t\tthis._editor.setSelections(prevState.selections);\n\t\t\t\tthis._isCursorUndo = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n}\n\n@editorCommand\nexport class CursorUndo extends EditorCommand {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'cursorUndo',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.KEY_U\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic runEditorCommand(accessor: ServicesAccessor, editor: ICommonCodeEditor, args: any): void {\n\t\tCursorUndoController.get(editor).cursorUndo();\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport { HistoryNavigator } from 'vs/base/common/history';\nimport { KeyCode, KeyMod, KeyChord } from 'vs/base/common/keyCodes';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { ContextKeyExpr, RawContextKey, IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport * as strings from 'vs/base/common/strings';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { editorAction, commonEditorContribution, ServicesAccessor, EditorAction, EditorCommand, CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';\nimport { FIND_IDS, FindModelBoundToEditorModel, ToggleCaseSensitiveKeybinding, ToggleRegexKeybinding, ToggleWholeWordKeybinding, ToggleSearchScopeKeybinding, ShowPreviousFindTermKeybinding, ShowNextFindTermKeybinding } from 'vs/editor/contrib/find/common/findModel';\nimport { FindReplaceState, FindReplaceStateChangedEvent, INewFindReplaceState } from 'vs/editor/contrib/find/common/findState';\nimport { DocumentHighlightProviderRegistry } from 'vs/editor/common/modes';\nimport { RunOnceScheduler, Delayer } from 'vs/base/common/async';\nimport { CursorChangeReason, ICursorSelectionChangedEvent } from 'vs/editor/common/controller/cursorEvents';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';\nimport { ModelDecorationOptions } from 'vs/editor/common/model/textModelWithDecorations';\n\nexport const enum FindStartFocusAction {\n\tNoFocusChange,\n\tFocusFindInput,\n\tFocusReplaceInput\n}\n\nexport interface IFindStartOptions {\n\tforceRevealReplace: boolean;\n\tseedSearchStringFromSelection: boolean;\n\tshouldFocus: FindStartFocusAction;\n\tshouldAnimate: boolean;\n}\n\nexport const CONTEXT_FIND_WIDGET_VISIBLE = new RawContextKey('findWidgetVisible', false);\nexport const CONTEXT_FIND_WIDGET_NOT_VISIBLE: ContextKeyExpr = CONTEXT_FIND_WIDGET_VISIBLE.toNegated();\nexport const CONTEXT_FIND_INPUT_FOCUSSED = new RawContextKey('findInputFocussed', false);\n\nexport class CommonFindController extends Disposable implements editorCommon.IEditorContribution {\n\n\tprivate static ID = 'editor.contrib.findController';\n\n\tprivate _editor: editorCommon.ICommonCodeEditor;\n\tprivate _findWidgetVisible: IContextKey;\n\tprotected _state: FindReplaceState;\n\tprivate _currentHistoryNavigator: HistoryNavigator;\n\tprotected _updateHistoryDelayer: Delayer;\n\tprivate _model: FindModelBoundToEditorModel;\n\tprivate _storageService: IStorageService;\n\n\tpublic static get(editor: editorCommon.ICommonCodeEditor): CommonFindController {\n\t\treturn editor.getContribution(CommonFindController.ID);\n\t}\n\n\tconstructor(editor: editorCommon.ICommonCodeEditor, @IContextKeyService contextKeyService: IContextKeyService, @IStorageService storageService: IStorageService) {\n\t\tsuper();\n\t\tthis._editor = editor;\n\t\tthis._findWidgetVisible = CONTEXT_FIND_WIDGET_VISIBLE.bindTo(contextKeyService);\n\t\tthis._storageService = storageService;\n\n\t\tthis._updateHistoryDelayer = new Delayer(500);\n\t\tthis._currentHistoryNavigator = new HistoryNavigator();\n\t\tthis._state = this._register(new FindReplaceState());\n\t\tthis.loadQueryState();\n\t\tthis._register(this._state.addChangeListener((e) => this._onStateChanged(e)));\n\n\t\tthis._model = null;\n\n\t\tthis._register(this._editor.onDidChangeModel(() => {\n\t\t\tlet shouldRestartFind = (this._editor.getModel() && this._state.isRevealed);\n\n\t\t\tthis.disposeModel();\n\n\t\t\tthis._state.change({\n\t\t\t\tsearchScope: null,\n\t\t\t\tmatchCase: this._storageService.getBoolean('editor.matchCase', StorageScope.WORKSPACE, false),\n\t\t\t\twholeWord: this._storageService.getBoolean('editor.wholeWord', StorageScope.WORKSPACE, false),\n\t\t\t\tisRegex: this._storageService.getBoolean('editor.isRegex', StorageScope.WORKSPACE, false)\n\t\t\t}, false);\n\n\t\t\tif (shouldRestartFind) {\n\t\t\t\tthis._start({\n\t\t\t\t\tforceRevealReplace: false,\n\t\t\t\t\tseedSearchStringFromSelection: false,\n\t\t\t\t\tshouldFocus: FindStartFocusAction.NoFocusChange,\n\t\t\t\t\tshouldAnimate: false,\n\t\t\t\t});\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.disposeModel();\n\t\tsuper.dispose();\n\t}\n\n\tprivate disposeModel(): void {\n\t\tif (this._model) {\n\t\t\tthis._model.dispose();\n\t\t\tthis._model = null;\n\t\t}\n\t}\n\n\tpublic getId(): string {\n\t\treturn CommonFindController.ID;\n\t}\n\n\tprivate _onStateChanged(e: FindReplaceStateChangedEvent): void {\n\t\tthis.saveQueryState(e);\n\n\t\tif (e.updateHistory && e.searchString) {\n\t\t\tthis._delayedUpdateHistory();\n\t\t}\n\t\tif (e.isRevealed) {\n\t\t\tif (this._state.isRevealed) {\n\t\t\t\tthis._findWidgetVisible.set(true);\n\t\t\t} else {\n\t\t\t\tthis._findWidgetVisible.reset();\n\t\t\t\tthis.disposeModel();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate saveQueryState(e: FindReplaceStateChangedEvent) {\n\t\tif (e.isRegex && typeof this._state.isRegex !== 'undefined') {\n\t\t\tthis._storageService.store('editor.isRegex', this._state.isRegex, StorageScope.WORKSPACE);\n\t\t}\n\t\tif (e.wholeWord && typeof this._state.wholeWord !== 'undefined') {\n\t\t\tthis._storageService.store('editor.wholeWord', this._state.wholeWord, StorageScope.WORKSPACE);\n\t\t}\n\t\tif (e.matchCase && typeof this._state.matchCase !== 'undefined') {\n\t\t\tthis._storageService.store('editor.matchCase', this._state.matchCase, StorageScope.WORKSPACE);\n\t\t}\n\t}\n\n\tprivate loadQueryState() {\n\t\tthis._state.change({\n\t\t\tmatchCase: this._storageService.getBoolean('editor.matchCase', StorageScope.WORKSPACE, this._state.matchCase),\n\t\t\twholeWord: this._storageService.getBoolean('editor.wholeWord', StorageScope.WORKSPACE, this._state.wholeWord),\n\t\t\tisRegex: this._storageService.getBoolean('editor.isRegex', StorageScope.WORKSPACE, this._state.isRegex)\n\t\t}, false);\n\t}\n\n\tprotected _delayedUpdateHistory() {\n\t\tthis._updateHistoryDelayer.trigger(this._updateHistory.bind(this));\n\t}\n\n\tprotected _updateHistory() {\n\t\tif (this._state.searchString) {\n\t\t\tthis._currentHistoryNavigator.add(this._state.searchString);\n\t\t}\n\t}\n\n\tpublic getState(): FindReplaceState {\n\t\treturn this._state;\n\t}\n\n\tpublic getHistory(): HistoryNavigator {\n\t\treturn this._currentHistoryNavigator;\n\t}\n\n\tpublic closeFindWidget(): void {\n\t\tthis._state.change({\n\t\t\tisRevealed: false,\n\t\t\tsearchScope: null\n\t\t}, false);\n\t\tthis._editor.focus();\n\t}\n\n\tpublic toggleCaseSensitive(): void {\n\t\tthis._state.change({ matchCase: !this._state.matchCase }, false);\n\t}\n\n\tpublic toggleWholeWords(): void {\n\t\tthis._state.change({ wholeWord: !this._state.wholeWord }, false);\n\t}\n\n\tpublic toggleRegex(): void {\n\t\tthis._state.change({ isRegex: !this._state.isRegex }, false);\n\t}\n\n\tpublic toggleSearchScope(): void {\n\t\tif (this._state.searchScope) {\n\t\t\tthis._state.change({ searchScope: null }, true);\n\t\t} else {\n\t\t\tlet selection = this._editor.getSelection();\n\t\t\tif (selection.endColumn === 1 && selection.endLineNumber > selection.startLineNumber) {\n\t\t\t\tselection = selection.setEndPosition(selection.endLineNumber - 1, 1);\n\t\t\t}\n\t\t\tif (!selection.isEmpty()) {\n\t\t\t\tthis._state.change({ searchScope: selection }, true);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic setSearchString(searchString: string): void {\n\t\tthis._state.change({ searchString: searchString }, false);\n\t}\n\n\tpublic highlightFindOptions(): void {\n\t\t// overwritten in subclass\n\t}\n\n\tpublic getSelectionSearchString(): string {\n\t\tlet selection = this._editor.getSelection();\n\n\t\tif (selection.startLineNumber === selection.endLineNumber) {\n\t\t\tif (selection.isEmpty()) {\n\t\t\t\tlet wordAtPosition = this._editor.getModel().getWordAtPosition(selection.getStartPosition());\n\t\t\t\tif (wordAtPosition) {\n\t\t\t\t\treturn wordAtPosition.word;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this._editor.getModel().getValueInRange(selection);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprotected _start(opts: IFindStartOptions): void {\n\t\tthis.disposeModel();\n\n\t\tif (!this._editor.getModel()) {\n\t\t\t// cannot do anything with an editor that doesn't have a model...\n\t\t\treturn;\n\t\t}\n\n\t\tlet stateChanges: INewFindReplaceState = {\n\t\t\tisRevealed: true\n\t\t};\n\n\t\t// Consider editor selection and overwrite the state with it\n\t\tif (opts.seedSearchStringFromSelection && this._editor.getConfiguration().contribInfo.find.seedSearchStringFromSelection) {\n\t\t\tlet selectionSearchString = this.getSelectionSearchString();\n\t\t\tif (selectionSearchString) {\n\t\t\t\tif (this._state.isRegex) {\n\t\t\t\t\tstateChanges.searchString = strings.escapeRegExpCharacters(selectionSearchString);\n\t\t\t\t} else {\n\t\t\t\t\tstateChanges.searchString = selectionSearchString;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Overwrite isReplaceRevealed\n\t\tif (opts.forceRevealReplace) {\n\t\t\tstateChanges.isReplaceRevealed = true;\n\t\t} else if (!this._findWidgetVisible.get()) {\n\t\t\tstateChanges.isReplaceRevealed = false;\n\t\t}\n\n\n\t\tthis._state.change(stateChanges, false);\n\n\t\tif (!this._model) {\n\t\t\tthis._model = new FindModelBoundToEditorModel(this._editor, this._state);\n\t\t}\n\t}\n\n\tpublic start(opts: IFindStartOptions): void {\n\t\tthis._start(opts);\n\t}\n\n\tpublic moveToNextMatch(): boolean {\n\t\tif (this._model) {\n\t\t\tthis._model.moveToNextMatch();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic moveToPrevMatch(): boolean {\n\t\tif (this._model) {\n\t\t\tthis._model.moveToPrevMatch();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic replace(): boolean {\n\t\tif (this._model) {\n\t\t\tthis._model.replace();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic replaceAll(): boolean {\n\t\tif (this._model) {\n\t\t\tthis._model.replaceAll();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic selectAllMatches(): boolean {\n\t\tif (this._model) {\n\t\t\tthis._model.selectAllMatches();\n\t\t\tthis._editor.focus();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic showPreviousFindTerm(): boolean {\n\t\tlet previousTerm = this._currentHistoryNavigator.previous();\n\t\tif (previousTerm) {\n\t\t\tthis._state.change({ searchString: previousTerm }, false, false);\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic showNextFindTerm(): boolean {\n\t\tlet nextTerm = this._currentHistoryNavigator.next();\n\t\tif (nextTerm) {\n\t\t\tthis._state.change({ searchString: nextTerm }, false, false);\n\t\t}\n\t\treturn true;\n\t}\n}\n\n@editorAction\nexport class StartFindAction extends EditorAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: FIND_IDS.StartFindAction,\n\t\t\tlabel: nls.localize('startFindAction', \"Find\"),\n\t\t\talias: 'Find',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: null,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.KEY_F,\n\t\t\t\tmac: {\n\t\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.KEY_F,\n\t\t\t\t\tsecondary: [KeyMod.CtrlCmd | KeyCode.KEY_E]\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\t\tlet controller = CommonFindController.get(editor);\n\t\tif (controller) {\n\t\t\tcontroller.start({\n\t\t\t\tforceRevealReplace: false,\n\t\t\t\tseedSearchStringFromSelection: true,\n\t\t\t\tshouldFocus: FindStartFocusAction.FocusFindInput,\n\t\t\t\tshouldAnimate: true\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport abstract class MatchFindAction extends EditorAction {\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\t\tlet controller = CommonFindController.get(editor);\n\t\tif (controller && !this._run(controller)) {\n\t\t\tcontroller.start({\n\t\t\t\tforceRevealReplace: false,\n\t\t\t\tseedSearchStringFromSelection: (controller.getState().searchString.length === 0),\n\t\t\t\tshouldFocus: FindStartFocusAction.NoFocusChange,\n\t\t\t\tshouldAnimate: true\n\t\t\t});\n\t\t\tthis._run(controller);\n\t\t}\n\t}\n\n\tprotected abstract _run(controller: CommonFindController): boolean;\n}\n\n@editorAction\nexport class NextMatchFindAction extends MatchFindAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: FIND_IDS.NextMatchFindAction,\n\t\t\tlabel: nls.localize('findNextMatchAction', \"Find Next\"),\n\t\t\talias: 'Find Next',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.focus,\n\t\t\t\tprimary: KeyCode.F3,\n\t\t\t\tmac: { primary: KeyMod.CtrlCmd | KeyCode.KEY_G, secondary: [KeyCode.F3] }\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected _run(controller: CommonFindController): boolean {\n\t\treturn controller.moveToNextMatch();\n\t}\n}\n\n@editorAction\nexport class PreviousMatchFindAction extends MatchFindAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: FIND_IDS.PreviousMatchFindAction,\n\t\t\tlabel: nls.localize('findPreviousMatchAction', \"Find Previous\"),\n\t\t\talias: 'Find Previous',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.focus,\n\t\t\t\tprimary: KeyMod.Shift | KeyCode.F3,\n\t\t\t\tmac: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_G, secondary: [KeyMod.Shift | KeyCode.F3] }\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected _run(controller: CommonFindController): boolean {\n\t\treturn controller.moveToPrevMatch();\n\t}\n}\n\nexport abstract class SelectionMatchFindAction extends EditorAction {\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\t\tlet controller = CommonFindController.get(editor);\n\t\tif (!controller) {\n\t\t\treturn;\n\t\t}\n\t\tlet selectionSearchString = controller.getSelectionSearchString();\n\t\tif (selectionSearchString) {\n\t\t\tcontroller.setSearchString(selectionSearchString);\n\t\t}\n\t\tif (!this._run(controller)) {\n\t\t\tcontroller.start({\n\t\t\t\tforceRevealReplace: false,\n\t\t\t\tseedSearchStringFromSelection: false,\n\t\t\t\tshouldFocus: FindStartFocusAction.NoFocusChange,\n\t\t\t\tshouldAnimate: true\n\t\t\t});\n\t\t\tthis._run(controller);\n\t\t}\n\t}\n\n\tprotected abstract _run(controller: CommonFindController): boolean;\n}\n\n@editorAction\nexport class NextSelectionMatchFindAction extends SelectionMatchFindAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: FIND_IDS.NextSelectionMatchFindAction,\n\t\t\tlabel: nls.localize('nextSelectionMatchFindAction', \"Find Next Selection\"),\n\t\t\talias: 'Find Next Selection',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.focus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.F3\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected _run(controller: CommonFindController): boolean {\n\t\treturn controller.moveToNextMatch();\n\t}\n}\n\n@editorAction\nexport class PreviousSelectionMatchFindAction extends SelectionMatchFindAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: FIND_IDS.PreviousSelectionMatchFindAction,\n\t\t\tlabel: nls.localize('previousSelectionMatchFindAction', \"Find Previous Selection\"),\n\t\t\talias: 'Find Previous Selection',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.focus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.F3\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected _run(controller: CommonFindController): boolean {\n\t\treturn controller.moveToPrevMatch();\n\t}\n}\n\n@editorAction\nexport class StartFindReplaceAction extends EditorAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: FIND_IDS.StartFindReplaceAction,\n\t\t\tlabel: nls.localize('startReplace', \"Replace\"),\n\t\t\talias: 'Replace',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: null,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.KEY_H,\n\t\t\t\tmac: { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KEY_F }\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\t\tif (editor.getConfiguration().readOnly) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet controller = CommonFindController.get(editor);\n\t\tlet currentSelection = editor.getSelection();\n\t\t// we only seed search string from selection when the current selection is single line and not empty.\n\t\tlet seedSearchStringFromSelection = !currentSelection.isEmpty() &&\n\t\t\tcurrentSelection.startLineNumber === currentSelection.endLineNumber;\n\t\tlet oldSearchString = controller.getState().searchString;\n\t\t// if the existing search string in find widget is empty and we don't seed search string from selection, it means the Find Input\n\t\t// is still empty, so we should focus the Find Input instead of Replace Input.\n\t\tlet shouldFocus = (!!oldSearchString || seedSearchStringFromSelection) ?\n\t\t\tFindStartFocusAction.FocusReplaceInput : FindStartFocusAction.FocusFindInput;\n\n\t\tif (controller) {\n\t\t\tcontroller.start({\n\t\t\t\tforceRevealReplace: true,\n\t\t\t\tseedSearchStringFromSelection: seedSearchStringFromSelection,\n\t\t\t\tshouldFocus: shouldFocus,\n\t\t\t\tshouldAnimate: true\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport interface IMultiCursorFindInput {\n\tchangeFindSearchString: boolean;\n\tallowMultiline: boolean;\n\thighlightFindOptions: boolean;\n}\n\nexport interface IMultiCursorFindResult {\n\tsearchText: string;\n\tmatchCase: boolean;\n\twholeWord: boolean;\n\n\tcurrentMatch: Selection;\n}\n\nfunction multiCursorFind(editor: editorCommon.ICommonCodeEditor, input: IMultiCursorFindInput): IMultiCursorFindResult {\n\tlet controller = CommonFindController.get(editor);\n\tif (!controller) {\n\t\treturn null;\n\t}\n\tlet state = controller.getState();\n\tlet searchText: string;\n\tlet currentMatch: Selection;\n\n\t// In any case, if the find widget was ever opened, the options are taken from it\n\tlet wholeWord = state.wholeWord;\n\tlet matchCase = state.matchCase;\n\n\t// Find widget owns what we search for if:\n\t// - focus is not in the editor (i.e. it is in the find widget)\n\t// - and the search widget is visible\n\t// - and the search string is non-empty\n\tif (!editor.isFocused() && state.isRevealed && state.searchString.length > 0) {\n\t\t// Find widget owns what is searched for\n\t\tsearchText = state.searchString;\n\t} else {\n\t\t// Selection owns what is searched for\n\t\tlet s = editor.getSelection();\n\n\t\tif (s.startLineNumber !== s.endLineNumber && !input.allowMultiline) {\n\t\t\t// multiline forbidden\n\t\t\treturn null;\n\t\t}\n\n\t\tif (s.isEmpty()) {\n\t\t\t// selection is empty => expand to current word\n\t\t\tlet word = editor.getModel().getWordAtPosition(s.getStartPosition());\n\t\t\tif (!word) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tsearchText = word.word;\n\t\t\tcurrentMatch = new Selection(s.startLineNumber, word.startColumn, s.startLineNumber, word.endColumn);\n\t\t} else {\n\t\t\tsearchText = editor.getModel().getValueInRange(s).replace(/\\r\\n/g, '\\n');\n\t\t}\n\t\tif (input.changeFindSearchString) {\n\t\t\tcontroller.setSearchString(searchText);\n\t\t}\n\t}\n\n\tif (input.highlightFindOptions) {\n\t\tcontroller.highlightFindOptions();\n\t}\n\n\treturn {\n\t\tsearchText: searchText,\n\t\tmatchCase: matchCase,\n\t\twholeWord: wholeWord,\n\t\tcurrentMatch: currentMatch\n\t};\n}\n\nexport abstract class SelectNextFindMatchAction extends EditorAction {\n\tprotected _getNextMatch(editor: editorCommon.ICommonCodeEditor): Selection {\n\t\tlet r = multiCursorFind(editor, {\n\t\t\tchangeFindSearchString: true,\n\t\t\tallowMultiline: true,\n\t\t\thighlightFindOptions: true\n\t\t});\n\t\tif (!r) {\n\t\t\treturn null;\n\t\t}\n\t\tif (r.currentMatch) {\n\t\t\treturn r.currentMatch;\n\t\t}\n\n\t\tlet allSelections = editor.getSelections();\n\t\tlet lastAddedSelection = allSelections[allSelections.length - 1];\n\n\t\tlet nextMatch = editor.getModel().findNextMatch(r.searchText, lastAddedSelection.getEndPosition(), false, r.matchCase, r.wholeWord ? editor.getConfiguration().wordSeparators : null, false);\n\n\t\tif (!nextMatch) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn new Selection(nextMatch.range.startLineNumber, nextMatch.range.startColumn, nextMatch.range.endLineNumber, nextMatch.range.endColumn);\n\t}\n}\n\nexport abstract class SelectPreviousFindMatchAction extends EditorAction {\n\tprotected _getPreviousMatch(editor: editorCommon.ICommonCodeEditor): Selection {\n\t\tlet r = multiCursorFind(editor, {\n\t\t\tchangeFindSearchString: true,\n\t\t\tallowMultiline: true,\n\t\t\thighlightFindOptions: true\n\t\t});\n\t\tif (!r) {\n\t\t\treturn null;\n\t\t}\n\t\tif (r.currentMatch) {\n\t\t\treturn r.currentMatch;\n\t\t}\n\n\t\tlet allSelections = editor.getSelections();\n\t\tlet lastAddedSelection = allSelections[allSelections.length - 1];\n\n\t\tlet previousMatch = editor.getModel().findPreviousMatch(r.searchText, lastAddedSelection.getStartPosition(), false, r.matchCase, r.wholeWord ? editor.getConfiguration().wordSeparators : null, false);\n\n\t\tif (!previousMatch) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn new Selection(previousMatch.range.startLineNumber, previousMatch.range.startColumn, previousMatch.range.endLineNumber, previousMatch.range.endColumn);\n\t}\n}\n\n@editorAction\nexport class AddSelectionToNextFindMatchAction extends SelectNextFindMatchAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: FIND_IDS.AddSelectionToNextFindMatchAction,\n\t\t\tlabel: nls.localize('addSelectionToNextFindMatch', \"Add Selection To Next Find Match\"),\n\t\t\talias: 'Add Selection To Next Find Match',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.focus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.KEY_D\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\t\tconst allSelections = editor.getSelections();\n\n\t\t// If there are mulitple cursors, handle the case where they do not all select the same text.\n\t\tif (allSelections.length > 1) {\n\t\t\tconst model = editor.getModel();\n\t\t\tconst controller = CommonFindController.get(editor);\n\t\t\tif (!controller) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst findState = controller.getState();\n\t\t\tconst caseSensitive = findState.matchCase;\n\n\t\t\tlet selectionsContainSameText = true;\n\n\t\t\tlet selectedText = model.getValueInRange(allSelections[0]);\n\t\t\tif (!caseSensitive) {\n\t\t\t\tselectedText = selectedText.toLowerCase();\n\t\t\t}\n\t\t\tfor (let i = 1, len = allSelections.length; i < len; i++) {\n\t\t\t\tlet selection = allSelections[i];\n\t\t\t\tif (selection.isEmpty()) {\n\t\t\t\t\tselectionsContainSameText = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tlet thisSelectedText = model.getValueInRange(selection);\n\t\t\t\tif (!caseSensitive) {\n\t\t\t\t\tthisSelectedText = thisSelectedText.toLowerCase();\n\t\t\t\t}\n\t\t\t\tif (selectedText !== thisSelectedText) {\n\t\t\t\t\tselectionsContainSameText = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!selectionsContainSameText) {\n\t\t\t\tlet resultingSelections: Selection[] = [];\n\t\t\t\tfor (let i = 0, len = allSelections.length; i < len; i++) {\n\t\t\t\t\tlet selection = allSelections[i];\n\t\t\t\t\tif (selection.isEmpty()) {\n\t\t\t\t\t\tlet word = editor.getModel().getWordAtPosition(selection.getStartPosition());\n\t\t\t\t\t\tif (word) {\n\t\t\t\t\t\t\tresultingSelections[i] = new Selection(selection.startLineNumber, word.startColumn, selection.startLineNumber, word.endColumn);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tresultingSelections[i] = selection;\n\t\t\t\t}\n\t\t\t\teditor.setSelections(resultingSelections);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tlet nextMatch = this._getNextMatch(editor);\n\n\t\tif (!nextMatch) {\n\t\t\treturn;\n\t\t}\n\n\t\teditor.setSelections(allSelections.concat(nextMatch));\n\t\teditor.revealRangeInCenterIfOutsideViewport(nextMatch);\n\t}\n}\n\n@editorAction\nexport class AddSelectionToPreviousFindMatchAction extends SelectPreviousFindMatchAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: FIND_IDS.AddSelectionToPreviousFindMatchAction,\n\t\t\tlabel: nls.localize('addSelectionToPreviousFindMatch', \"Add Selection To Previous Find Match\"),\n\t\t\talias: 'Add Selection To Previous Find Match',\n\t\t\tprecondition: null\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\t\tlet previousMatch = this._getPreviousMatch(editor);\n\n\t\tif (!previousMatch) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet allSelections = editor.getSelections();\n\t\teditor.setSelections(allSelections.concat(previousMatch));\n\t\teditor.revealRangeInCenterIfOutsideViewport(previousMatch);\n\t}\n}\n\n@editorAction\nexport class MoveSelectionToNextFindMatchAction extends SelectNextFindMatchAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: FIND_IDS.MoveSelectionToNextFindMatchAction,\n\t\t\tlabel: nls.localize('moveSelectionToNextFindMatch', \"Move Last Selection To Next Find Match\"),\n\t\t\talias: 'Move Last Selection To Next Find Match',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.focus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.KEY_D)\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\t\tlet nextMatch = this._getNextMatch(editor);\n\n\t\tif (!nextMatch) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet allSelections = editor.getSelections();\n\t\teditor.setSelections(allSelections.slice(0, allSelections.length - 1).concat(nextMatch));\n\t\teditor.revealRangeInCenterIfOutsideViewport(nextMatch);\n\t}\n}\n\n@editorAction\nexport class MoveSelectionToPreviousFindMatchAction extends SelectPreviousFindMatchAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: FIND_IDS.MoveSelectionToPreviousFindMatchAction,\n\t\t\tlabel: nls.localize('moveSelectionToPreviousFindMatch', \"Move Last Selection To Previous Find Match\"),\n\t\t\talias: 'Move Last Selection To Previous Find Match',\n\t\t\tprecondition: null\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\t\tlet previousMatch = this._getPreviousMatch(editor);\n\n\t\tif (!previousMatch) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet allSelections = editor.getSelections();\n\t\teditor.setSelections(allSelections.slice(0, allSelections.length - 1).concat(previousMatch));\n\t\teditor.revealRangeInCenterIfOutsideViewport(previousMatch);\n\t}\n}\n\nexport abstract class AbstractSelectHighlightsAction extends EditorAction {\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\t\tlet controller = CommonFindController.get(editor);\n\t\tif (!controller) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet matches: Range[] = null;\n\n\t\tconst findState = controller.getState();\n\t\tif (findState.isRevealed && findState.isRegex && findState.searchString.length > 0) {\n\n\t\t\tmatches = editor.getModel().findMatches(findState.searchString, true, findState.isRegex, findState.matchCase, findState.wholeWord ? editor.getConfiguration().wordSeparators : null, false).map(m => m.range);\n\n\t\t} else {\n\n\t\t\tlet r = multiCursorFind(editor, {\n\t\t\t\tchangeFindSearchString: true,\n\t\t\t\tallowMultiline: true,\n\t\t\t\thighlightFindOptions: true\n\t\t\t});\n\t\t\tif (!r) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tmatches = editor.getModel().findMatches(r.searchText, true, false, r.matchCase, r.wholeWord ? editor.getConfiguration().wordSeparators : null, false).map(m => m.range);\n\t\t}\n\n\t\tif (matches.length > 0) {\n\t\t\tlet editorSelection = editor.getSelection();\n\t\t\tfor (let i = 0, len = matches.length; i < len; i++) {\n\t\t\t\tlet match = matches[i];\n\t\t\t\tlet intersection = match.intersectRanges(editorSelection);\n\t\t\t\tif (intersection) {\n\t\t\t\t\t// bingo!\n\t\t\t\t\tmatches.splice(i, 1);\n\t\t\t\t\tmatches.unshift(match);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\teditor.setSelections(matches.map(m => new Selection(m.startLineNumber, m.startColumn, m.endLineNumber, m.endColumn)));\n\t\t}\n\t}\n}\n\n@editorAction\nexport class SelectHighlightsAction extends AbstractSelectHighlightsAction {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.selectHighlights',\n\t\t\tlabel: nls.localize('selectAllOccurrencesOfFindMatch', \"Select All Occurrences of Find Match\"),\n\t\t\talias: 'Select All Occurrences of Find Match',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.focus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_L\n\t\t\t}\n\t\t});\n\t}\n}\n\n@editorAction\nexport class CompatChangeAll extends AbstractSelectHighlightsAction {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.changeAll',\n\t\t\tlabel: nls.localize('changeAll.label', \"Change All Occurrences\"),\n\t\t\talias: 'Change All Occurrences',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.F2\n\t\t\t},\n\t\t\tmenuOpts: {\n\t\t\t\tgroup: '1_modification',\n\t\t\t\torder: 1.2\n\t\t\t}\n\t\t});\n\t}\n}\n\nclass SelectionHighlighterState {\n\tpublic readonly lastWordUnderCursor: Selection;\n\tpublic readonly searchText: string;\n\tpublic readonly matchCase: boolean;\n\tpublic readonly wordSeparators: string;\n\n\tconstructor(lastWordUnderCursor: Selection, searchText: string, matchCase: boolean, wordSeparators: string) {\n\t\tthis.searchText = searchText;\n\t\tthis.matchCase = matchCase;\n\t\tthis.wordSeparators = wordSeparators;\n\t}\n\n\t/**\n\t * Everything equals except for `lastWordUnderCursor`\n\t */\n\tpublic static softEquals(a: SelectionHighlighterState, b: SelectionHighlighterState): boolean {\n\t\tif (!a && !b) {\n\t\t\treturn true;\n\t\t}\n\t\tif (!a || !b) {\n\t\t\treturn false;\n\t\t}\n\t\treturn (\n\t\t\ta.searchText === b.searchText\n\t\t\t&& a.matchCase === b.matchCase\n\t\t\t&& a.wordSeparators === b.wordSeparators\n\t\t);\n\t}\n}\n\n@commonEditorContribution\nexport class SelectionHighlighter extends Disposable implements editorCommon.IEditorContribution {\n\tprivate static ID = 'editor.contrib.selectionHighlighter';\n\n\tprivate editor: editorCommon.ICommonCodeEditor;\n\tprivate _isEnabled: boolean;\n\tprivate decorations: string[];\n\tprivate updateSoon: RunOnceScheduler;\n\tprivate state: SelectionHighlighterState;\n\n\tconstructor(editor: editorCommon.ICommonCodeEditor) {\n\t\tsuper();\n\t\tthis.editor = editor;\n\t\tthis._isEnabled = editor.getConfiguration().contribInfo.selectionHighlight;\n\t\tthis.decorations = [];\n\t\tthis.updateSoon = this._register(new RunOnceScheduler(() => this._update(), 300));\n\t\tthis.state = null;\n\n\t\tthis._register(editor.onDidChangeConfiguration((e) => {\n\t\t\tthis._isEnabled = editor.getConfiguration().contribInfo.selectionHighlight;\n\t\t}));\n\t\tthis._register(editor.onDidChangeCursorSelection((e: ICursorSelectionChangedEvent) => {\n\n\t\t\tif (!this._isEnabled) {\n\t\t\t\t// Early exit if nothing needs to be done!\n\t\t\t\t// Leave some form of early exit check here if you wish to continue being a cursor position change listener ;)\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (e.selection.isEmpty()) {\n\t\t\t\tif (e.reason === CursorChangeReason.Explicit) {\n\t\t\t\t\tif (this.state && (!this.state.lastWordUnderCursor || !this.state.lastWordUnderCursor.containsPosition(e.selection.getStartPosition()))) {\n\t\t\t\t\t\t// no longer valid\n\t\t\t\t\t\tthis._setState(null);\n\t\t\t\t\t}\n\t\t\t\t\tthis.updateSoon.schedule();\n\t\t\t\t} else {\n\t\t\t\t\tthis._setState(null);\n\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._update();\n\t\t\t}\n\t\t}));\n\t\tthis._register(editor.onDidChangeModel((e) => {\n\t\t\tthis._setState(null);\n\t\t}));\n\t\tthis._register(CommonFindController.get(editor).getState().addChangeListener((e) => {\n\t\t\tthis._update();\n\t\t}));\n\t}\n\n\tpublic getId(): string {\n\t\treturn SelectionHighlighter.ID;\n\t}\n\n\tprivate _update(): void {\n\t\tthis._setState(SelectionHighlighter._createState(this._isEnabled, this.editor));\n\t}\n\n\tprivate static _createState(isEnabled: boolean, editor: editorCommon.ICommonCodeEditor): SelectionHighlighterState {\n\t\tconst model = editor.getModel();\n\t\tif (!model) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst config = editor.getConfiguration();\n\n\t\tlet lastWordUnderCursor: Selection = null;\n\t\tif (!isEnabled) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst r = multiCursorFind(editor, {\n\t\t\tchangeFindSearchString: false,\n\t\t\tallowMultiline: false,\n\t\t\thighlightFindOptions: false\n\t\t});\n\t\tif (!r) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst hasFindOccurrences = DocumentHighlightProviderRegistry.has(model);\n\t\tif (r.currentMatch) {\n\t\t\t// This is an empty selection\n\t\t\tif (hasFindOccurrences) {\n\t\t\t\t// Do not interfere with semantic word highlighting in the no selection case\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (!config.contribInfo.occurrencesHighlight) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlastWordUnderCursor = r.currentMatch;\n\t\t}\n\t\tif (/^[ \\t]+$/.test(r.searchText)) {\n\t\t\t// whitespace only selection\n\t\t\treturn null;\n\t\t}\n\t\tif (r.searchText.length > 200) {\n\t\t\t// very long selection\n\t\t\treturn null;\n\t\t}\n\n\t\tconst controller = CommonFindController.get(editor);\n\t\tif (!controller) {\n\t\t\treturn null;\n\t\t}\n\t\tconst findState = controller.getState();\n\t\tconst caseSensitive = findState.matchCase;\n\n\t\tconst selections = editor.getSelections();\n\t\tlet firstSelectedText = model.getValueInRange(selections[0]);\n\t\tif (!caseSensitive) {\n\t\t\tfirstSelectedText = firstSelectedText.toLowerCase();\n\t\t}\n\t\tfor (let i = 1; i < selections.length; i++) {\n\t\t\tlet selectedText = model.getValueInRange(selections[i]);\n\t\t\tif (!caseSensitive) {\n\t\t\t\tselectedText = selectedText.toLowerCase();\n\t\t\t}\n\t\t\tif (firstSelectedText !== selectedText) {\n\t\t\t\t// not all selections have the same text\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\treturn new SelectionHighlighterState(lastWordUnderCursor, r.searchText, r.matchCase, r.wholeWord ? editor.getConfiguration().wordSeparators : null);\n\t}\n\n\n\tprivate _setState(state: SelectionHighlighterState): void {\n\t\tif (SelectionHighlighterState.softEquals(this.state, state)) {\n\t\t\tthis.state = state;\n\t\t\treturn;\n\t\t}\n\t\tthis.state = state;\n\n\t\tif (!this.state) {\n\t\t\tif (this.decorations.length > 0) {\n\t\t\t\tthis.decorations = this.editor.deltaDecorations(this.decorations, []);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst model = this.editor.getModel();\n\t\tconst hasFindOccurrences = DocumentHighlightProviderRegistry.has(model);\n\n\t\tlet allMatches = model.findMatches(this.state.searchText, true, false, this.state.matchCase, this.state.wordSeparators, false).map(m => m.range);\n\t\tallMatches.sort(Range.compareRangesUsingStarts);\n\n\t\tlet selections = this.editor.getSelections();\n\t\tselections.sort(Range.compareRangesUsingStarts);\n\n\t\t// do not overlap with selection (issue #64 and #512)\n\t\tlet matches: Range[] = [];\n\t\tfor (let i = 0, j = 0, len = allMatches.length, lenJ = selections.length; i < len;) {\n\t\t\tconst match = allMatches[i];\n\n\t\t\tif (j >= lenJ) {\n\t\t\t\t// finished all editor selections\n\t\t\t\tmatches.push(match);\n\t\t\t\ti++;\n\t\t\t} else {\n\t\t\t\tconst cmp = Range.compareRangesUsingStarts(match, selections[j]);\n\t\t\t\tif (cmp < 0) {\n\t\t\t\t\t// match is before sel\n\t\t\t\t\tmatches.push(match);\n\t\t\t\t\ti++;\n\t\t\t\t} else if (cmp > 0) {\n\t\t\t\t\t// sel is before match\n\t\t\t\t\tj++;\n\t\t\t\t} else {\n\t\t\t\t\t// sel is equal to match\n\t\t\t\t\ti++;\n\t\t\t\t\tj++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst decorations = matches.map(r => {\n\t\t\treturn {\n\t\t\t\trange: r,\n\t\t\t\t// Show in overviewRuler only if model has no semantic highlighting\n\t\t\t\toptions: (hasFindOccurrences ? SelectionHighlighter._SELECTION_HIGHLIGHT : SelectionHighlighter._SELECTION_HIGHLIGHT_OVERVIEW)\n\t\t\t};\n\t\t});\n\n\t\tthis.decorations = this.editor.deltaDecorations(this.decorations, decorations);\n\t}\n\n\tprivate static _SELECTION_HIGHLIGHT_OVERVIEW = ModelDecorationOptions.register({\n\t\tstickiness: editorCommon.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\tclassName: 'selectionHighlight',\n\t\toverviewRuler: {\n\t\t\tcolor: '#A0A0A0',\n\t\t\tdarkColor: '#A0A0A0',\n\t\t\tposition: editorCommon.OverviewRulerLane.Center\n\t\t}\n\t});\n\n\tprivate static _SELECTION_HIGHLIGHT = ModelDecorationOptions.register({\n\t\tstickiness: editorCommon.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\tclassName: 'selectionHighlight',\n\t});\n\n\tpublic dispose(): void {\n\t\tthis._setState(null);\n\t\tsuper.dispose();\n\t}\n}\n\nconst FindCommand = EditorCommand.bindToContribution(CommonFindController.get);\n\nCommonEditorRegistry.registerEditorCommand(new FindCommand({\n\tid: FIND_IDS.CloseFindWidgetCommand,\n\tprecondition: CONTEXT_FIND_WIDGET_VISIBLE,\n\thandler: x => x.closeFindWidget(),\n\tkbOpts: {\n\t\tweight: CommonEditorRegistry.commandWeight(5),\n\t\tkbExpr: EditorContextKeys.focus,\n\t\tprimary: KeyCode.Escape,\n\t\tsecondary: [KeyMod.Shift | KeyCode.Escape]\n\t}\n}));\n\nCommonEditorRegistry.registerEditorCommand(new FindCommand({\n\tid: FIND_IDS.ToggleCaseSensitiveCommand,\n\tprecondition: null,\n\thandler: x => x.toggleCaseSensitive(),\n\tkbOpts: {\n\t\tweight: CommonEditorRegistry.commandWeight(5),\n\t\tkbExpr: EditorContextKeys.focus,\n\t\tprimary: ToggleCaseSensitiveKeybinding.primary,\n\t\tmac: ToggleCaseSensitiveKeybinding.mac,\n\t\twin: ToggleCaseSensitiveKeybinding.win,\n\t\tlinux: ToggleCaseSensitiveKeybinding.linux\n\t}\n}));\n\nCommonEditorRegistry.registerEditorCommand(new FindCommand({\n\tid: FIND_IDS.ToggleWholeWordCommand,\n\tprecondition: null,\n\thandler: x => x.toggleWholeWords(),\n\tkbOpts: {\n\t\tweight: CommonEditorRegistry.commandWeight(5),\n\t\tkbExpr: EditorContextKeys.focus,\n\t\tprimary: ToggleWholeWordKeybinding.primary,\n\t\tmac: ToggleWholeWordKeybinding.mac,\n\t\twin: ToggleWholeWordKeybinding.win,\n\t\tlinux: ToggleWholeWordKeybinding.linux\n\t}\n}));\n\nCommonEditorRegistry.registerEditorCommand(new FindCommand({\n\tid: FIND_IDS.ToggleRegexCommand,\n\tprecondition: null,\n\thandler: x => x.toggleRegex(),\n\tkbOpts: {\n\t\tweight: CommonEditorRegistry.commandWeight(5),\n\t\tkbExpr: EditorContextKeys.focus,\n\t\tprimary: ToggleRegexKeybinding.primary,\n\t\tmac: ToggleRegexKeybinding.mac,\n\t\twin: ToggleRegexKeybinding.win,\n\t\tlinux: ToggleRegexKeybinding.linux\n\t}\n}));\n\nCommonEditorRegistry.registerEditorCommand(new FindCommand({\n\tid: FIND_IDS.ToggleSearchScopeCommand,\n\tprecondition: null,\n\thandler: x => x.toggleSearchScope(),\n\tkbOpts: {\n\t\tweight: CommonEditorRegistry.commandWeight(5),\n\t\tkbExpr: EditorContextKeys.focus,\n\t\tprimary: ToggleSearchScopeKeybinding.primary,\n\t\tmac: ToggleSearchScopeKeybinding.mac,\n\t\twin: ToggleSearchScopeKeybinding.win,\n\t\tlinux: ToggleSearchScopeKeybinding.linux\n\t}\n}));\n\nCommonEditorRegistry.registerEditorCommand(new FindCommand({\n\tid: FIND_IDS.ReplaceOneAction,\n\tprecondition: CONTEXT_FIND_WIDGET_VISIBLE,\n\thandler: x => x.replace(),\n\tkbOpts: {\n\t\tweight: CommonEditorRegistry.commandWeight(5),\n\t\tkbExpr: EditorContextKeys.focus,\n\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_1\n\t}\n}));\n\nCommonEditorRegistry.registerEditorCommand(new FindCommand({\n\tid: FIND_IDS.ReplaceAllAction,\n\tprecondition: CONTEXT_FIND_WIDGET_VISIBLE,\n\thandler: x => x.replaceAll(),\n\tkbOpts: {\n\t\tweight: CommonEditorRegistry.commandWeight(5),\n\t\tkbExpr: EditorContextKeys.focus,\n\t\tprimary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.Enter\n\t}\n}));\n\nCommonEditorRegistry.registerEditorCommand(new FindCommand({\n\tid: FIND_IDS.SelectAllMatchesAction,\n\tprecondition: CONTEXT_FIND_WIDGET_VISIBLE,\n\thandler: x => x.selectAllMatches(),\n\tkbOpts: {\n\t\tweight: CommonEditorRegistry.commandWeight(5),\n\t\tkbExpr: EditorContextKeys.focus,\n\t\tprimary: KeyMod.Alt | KeyCode.Enter\n\t}\n}));\n\nCommonEditorRegistry.registerEditorCommand(new FindCommand({\n\tid: FIND_IDS.ShowPreviousFindTermAction,\n\tprecondition: CONTEXT_FIND_WIDGET_VISIBLE,\n\thandler: x => x.showPreviousFindTerm(),\n\tkbOpts: {\n\t\tweight: CommonEditorRegistry.commandWeight(5),\n\t\tkbExpr: ContextKeyExpr.and(CONTEXT_FIND_INPUT_FOCUSSED, EditorContextKeys.focus),\n\t\tprimary: ShowPreviousFindTermKeybinding.primary,\n\t\tmac: ShowPreviousFindTermKeybinding.mac,\n\t\twin: ShowPreviousFindTermKeybinding.win,\n\t\tlinux: ShowPreviousFindTermKeybinding.linux\n\t}\n}));\n\nCommonEditorRegistry.registerEditorCommand(new FindCommand({\n\tid: FIND_IDS.ShowNextFindTermAction,\n\tprecondition: CONTEXT_FIND_WIDGET_VISIBLE,\n\thandler: x => x.showNextFindTerm(),\n\tkbOpts: {\n\t\tweight: CommonEditorRegistry.commandWeight(5),\n\t\tkbExpr: ContextKeyExpr.and(CONTEXT_FIND_INPUT_FOCUSSED, EditorContextKeys.focus),\n\t\tprimary: ShowNextFindTermKeybinding.primary,\n\t\tmac: ShowNextFindTermKeybinding.mac,\n\t\twin: ShowNextFindTermKeybinding.win,\n\t\tlinux: ShowNextFindTermKeybinding.linux\n\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 *--------------------------------------------------------------------------------------------*/\n/// \n\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport * as types from 'vs/base/common/types';\nimport * as dom from 'vs/base/browser/dom';\nimport { RunOnceScheduler } from 'vs/base/common/async';\nimport { KeyCode, KeyMod, KeyChord } from 'vs/base/common/keyCodes';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { Range } from 'vs/editor/common/core/range';\nimport { editorAction, ServicesAccessor, EditorAction, CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';\nimport { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser';\nimport { editorContribution } from 'vs/editor/browser/editorBrowserExtensions';\nimport { CollapsibleRegion, getCollapsibleRegionsToFoldAtLine, getCollapsibleRegionsToUnfoldAtLine, doesLineBelongsToCollapsibleRegion, IFoldingRange } from 'vs/editor/contrib/folding/common/foldingModel';\nimport { computeRanges, limitByIndent } from 'vs/editor/contrib/folding/common/indentFoldStrategy';\nimport { IFoldingController, ID } from 'vs/editor/contrib/folding/common/folding';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { IConfigurationChangedEvent } from 'vs/editor/common/config/editorOptions';\n\n@editorContribution\nexport class FoldingController implements IFoldingController {\n\n\tstatic MAX_FOLDING_REGIONS = 5000;\n\n\tpublic static get(editor: editorCommon.ICommonCodeEditor): FoldingController {\n\t\treturn editor.getContribution(ID);\n\t}\n\n\tprivate editor: ICodeEditor;\n\tprivate _isEnabled: boolean;\n\tprivate _showFoldingControls: 'always' | 'mouseover';\n\tprivate globalToDispose: IDisposable[];\n\n\tprivate computeToken: number;\n\tprivate cursorChangedScheduler: RunOnceScheduler;\n\tprivate contentChangedScheduler: RunOnceScheduler;\n\tprivate localToDispose: IDisposable[];\n\n\tprivate decorations: CollapsibleRegion[];\n\n\tconstructor(editor: ICodeEditor) {\n\t\tthis.editor = editor;\n\t\tthis._isEnabled = this.editor.getConfiguration().contribInfo.folding;\n\t\tthis._showFoldingControls = this.editor.getConfiguration().contribInfo.showFoldingControls;\n\n\t\tthis.globalToDispose = [];\n\t\tthis.localToDispose = [];\n\t\tthis.decorations = [];\n\t\tthis.computeToken = 0;\n\n\t\tthis.globalToDispose.push(this.editor.onDidChangeModel(() => this.onModelChanged()));\n\t\tthis.globalToDispose.push(this.editor.onDidChangeConfiguration((e: IConfigurationChangedEvent) => {\n\t\t\tlet oldIsEnabled = this._isEnabled;\n\t\t\tthis._isEnabled = this.editor.getConfiguration().contribInfo.folding;\n\t\t\tif (oldIsEnabled !== this._isEnabled) {\n\t\t\t\tthis.onModelChanged();\n\t\t\t}\n\t\t\tlet oldShowFoldingControls = this._showFoldingControls;\n\t\t\tthis._showFoldingControls = this.editor.getConfiguration().contribInfo.showFoldingControls;\n\t\t\tif (oldShowFoldingControls !== this._showFoldingControls) {\n\t\t\t\tthis.updateHideFoldIconClass();\n\t\t\t}\n\t\t}));\n\n\t\tthis.onModelChanged();\n\t}\n\n\tpublic getId(): string {\n\t\treturn ID;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.cleanState();\n\t\tthis.globalToDispose = dispose(this.globalToDispose);\n\t}\n\n\tprivate updateHideFoldIconClass(): void {\n\t\tlet domNode = this.editor.getDomNode();\n\t\tif (domNode) {\n\t\t\tdom.toggleClass(domNode, 'alwaysShowFoldIcons', this._showFoldingControls === 'always');\n\t\t}\n\t}\n\n\t/**\n\t * Store view state.\n\t */\n\tpublic saveViewState(): any {\n\t\tlet model = this.editor.getModel();\n\t\tif (!model) {\n\t\t\treturn {};\n\t\t}\n\t\tvar collapsedRegions: IFoldingRange[] = [];\n\t\tthis.decorations.forEach(d => {\n\t\t\tif (d.isCollapsed) {\n\t\t\t\tvar range = d.getDecorationRange(model);\n\t\t\t\tif (range) {\n\t\t\t\t\tcollapsedRegions.push({ startLineNumber: range.startLineNumber, endLineNumber: range.endLineNumber, indent: d.indent, isCollapsed: true });\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn { collapsedRegions: collapsedRegions, lineCount: model.getLineCount() };\n\t}\n\n\t/**\n\t * Restore view state.\n\t */\n\tpublic restoreViewState(state: any): void {\n\t\tlet model = this.editor.getModel();\n\t\tif (!model) {\n\t\t\treturn;\n\t\t}\n\t\tif (!this._isEnabled) {\n\t\t\treturn;\n\t\t}\n\t\tif (!state || !Array.isArray(state.collapsedRegions) || state.collapsedRegions.length === 0 || state.lineCount !== model.getLineCount()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// State should be applied on the clean state\n\t\t// Clean the state\n\t\tthis.cleanState();\n\t\t// apply state\n\t\tthis.applyRegions(state.collapsedRegions);\n\t\t// Start listening to the model\n\t\tthis.onModelChanged();\n\t}\n\n\tprivate cleanState(): void {\n\t\tthis.localToDispose = dispose(this.localToDispose);\n\t}\n\n\tprivate applyRegions(regions: IFoldingRange[]) {\n\t\tlet model = this.editor.getModel();\n\t\tif (!model) {\n\t\t\treturn;\n\t\t}\n\t\tlet updateHiddenRegions = false;\n\t\tregions = limitByIndent(regions, FoldingController.MAX_FOLDING_REGIONS).sort((r1, r2) => r1.startLineNumber - r2.startLineNumber);\n\n\t\tthis.editor.changeDecorations(changeAccessor => {\n\n\t\t\tlet newDecorations: CollapsibleRegion[] = [];\n\n\t\t\tlet k = 0, i = 0;\n\t\t\twhile (i < this.decorations.length && k < regions.length) {\n\t\t\t\tlet dec = this.decorations[i];\n\t\t\t\tlet decRange = dec.getDecorationRange(model);\n\t\t\t\tif (!decRange) {\n\t\t\t\t\tupdateHiddenRegions = updateHiddenRegions || dec.isCollapsed;\n\t\t\t\t\tdec.dispose(changeAccessor);\n\t\t\t\t\ti++;\n\t\t\t\t} else {\n\t\t\t\t\twhile (k < regions.length && decRange.startLineNumber > regions[k].startLineNumber) {\n\t\t\t\t\t\tlet region = regions[k];\n\t\t\t\t\t\tupdateHiddenRegions = updateHiddenRegions || region.isCollapsed;\n\t\t\t\t\t\tnewDecorations.push(new CollapsibleRegion(region, model, changeAccessor));\n\t\t\t\t\t\tk++;\n\t\t\t\t\t}\n\t\t\t\t\tif (k < regions.length) {\n\t\t\t\t\t\tlet currRange = regions[k];\n\t\t\t\t\t\tif (decRange.startLineNumber < currRange.startLineNumber) {\n\t\t\t\t\t\t\tupdateHiddenRegions = updateHiddenRegions || dec.isCollapsed;\n\t\t\t\t\t\t\tdec.dispose(changeAccessor);\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t} else if (decRange.startLineNumber === currRange.startLineNumber) {\n\t\t\t\t\t\t\tif (dec.isCollapsed && (dec.startLineNumber !== currRange.startLineNumber || dec.endLineNumber !== currRange.endLineNumber)) {\n\t\t\t\t\t\t\t\tupdateHiddenRegions = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcurrRange.isCollapsed = dec.isCollapsed; // preserve collapse state\n\t\t\t\t\t\t\tdec.update(currRange, model, changeAccessor);\n\t\t\t\t\t\t\tnewDecorations.push(dec);\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\tk++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (i < this.decorations.length) {\n\t\t\t\tlet dec = this.decorations[i];\n\t\t\t\tupdateHiddenRegions = updateHiddenRegions || dec.isCollapsed;\n\t\t\t\tdec.dispose(changeAccessor);\n\t\t\t\ti++;\n\t\t\t}\n\t\t\twhile (k < regions.length) {\n\t\t\t\tlet region = regions[k];\n\t\t\t\tupdateHiddenRegions = updateHiddenRegions || region.isCollapsed;\n\t\t\t\tnewDecorations.push(new CollapsibleRegion(region, model, changeAccessor));\n\t\t\t\tk++;\n\t\t\t}\n\t\t\tthis.decorations = newDecorations;\n\t\t});\n\t\tif (updateHiddenRegions) {\n\t\t\tthis.updateHiddenAreas();\n\t\t}\n\n\t}\n\n\tprivate onModelChanged(): void {\n\t\tthis.cleanState();\n\t\tthis.updateHideFoldIconClass();\n\n\t\tlet model = this.editor.getModel();\n\t\tif (!this._isEnabled || !model) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.computeAndApplyCollapsibleRegions();\n\t\tthis.contentChangedScheduler = new RunOnceScheduler(() => this.computeAndApplyCollapsibleRegions(), 200);\n\t\tthis.cursorChangedScheduler = new RunOnceScheduler(() => this.revealCursor(), 200);\n\t\tthis.localToDispose.push(this.contentChangedScheduler);\n\t\tthis.localToDispose.push(this.cursorChangedScheduler);\n\n\t\tthis.localToDispose.push(this.editor.onDidChangeModelContent(e => this.contentChangedScheduler.schedule()));\n\t\tthis.localToDispose.push(this.editor.onDidChangeCursorPosition((e) => {\n\n\t\t\tif (!this._isEnabled) {\n\t\t\t\t// Early exit if nothing needs to be done!\n\t\t\t\t// Leave some form of early exit check here if you wish to continue being a cursor position change listener ;)\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.cursorChangedScheduler.schedule();\n\t\t}));\n\t\tthis.localToDispose.push(this.editor.onMouseDown(e => this.onEditorMouseDown(e)));\n\t\tthis.localToDispose.push(this.editor.onMouseUp(e => this.onEditorMouseUp(e)));\n\n\t\tthis.localToDispose.push({ dispose: () => this.disposeDecorations() });\n\t}\n\n\tprivate computeAndApplyCollapsibleRegions(): void {\n\t\tlet model = this.editor.getModel();\n\t\tthis.applyRegions(model ? computeRanges(model) : []);\n\t}\n\n\tprivate disposeDecorations() {\n\t\tthis.editor.changeDecorations(changeAccessor => {\n\t\t\tthis.decorations.forEach(dec => dec.dispose(changeAccessor));\n\t\t});\n\t\tthis.decorations = [];\n\t\tthis.editor.setHiddenAreas([]);\n\t}\n\n\tprivate revealCursor() {\n\t\tlet model = this.editor.getModel();\n\t\tif (!model) {\n\t\t\treturn;\n\t\t}\n\t\tlet hasChanges = false;\n\t\tlet selections = this.editor.getSelections();\n\n\t\tthis.editor.changeDecorations(changeAccessor => {\n\t\t\treturn this.decorations.forEach(dec => {\n\t\t\t\tif (dec.isCollapsed) {\n\t\t\t\t\tlet decRange = dec.getDecorationRange(model);\n\t\t\t\t\tif (decRange) {\n\t\t\t\t\t\tfor (let selection of selections) {\n\t\t\t\t\t\t\t// reveal if cursor in in one of the collapsed line (not the first)\n\t\t\t\t\t\t\tif (decRange.startLineNumber < selection.selectionStartLineNumber && selection.selectionStartLineNumber <= decRange.endLineNumber) {\n\t\t\t\t\t\t\t\tdec.setCollapsed(false, changeAccessor);\n\t\t\t\t\t\t\t\thasChanges = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tif (hasChanges) {\n\t\t\tthis.updateHiddenAreas(this.editor.getPosition().lineNumber);\n\t\t}\n\t}\n\n\tprivate mouseDownInfo: { lineNumber: number, iconClicked: boolean };\n\n\tprivate onEditorMouseDown(e: IEditorMouseEvent): void {\n\t\tthis.mouseDownInfo = null;\n\n\t\tif (this.decorations.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tlet range = e.target.range;\n\t\tif (!range) {\n\t\t\treturn;\n\t\t}\n\t\tif (!e.event.leftButton) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet model = this.editor.getModel();\n\n\t\tlet iconClicked = false;\n\t\tswitch (e.target.type) {\n\t\t\tcase MouseTargetType.GUTTER_LINE_DECORATIONS:\n\t\t\t\ticonClicked = true;\n\t\t\t\tbreak;\n\t\t\tcase MouseTargetType.CONTENT_EMPTY:\n\t\t\tcase MouseTargetType.CONTENT_TEXT:\n\t\t\t\tif (range.startColumn === model.getLineMaxColumn(range.startLineNumber)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\n\t\tthis.mouseDownInfo = { lineNumber: range.startLineNumber, iconClicked };\n\t}\n\n\tprivate onEditorMouseUp(e: IEditorMouseEvent): void {\n\t\tif (!this.mouseDownInfo) {\n\t\t\treturn;\n\t\t}\n\t\tlet lineNumber = this.mouseDownInfo.lineNumber;\n\t\tlet iconClicked = this.mouseDownInfo.iconClicked;\n\n\t\tlet range = e.target.range;\n\t\tif (!range || range.startLineNumber !== lineNumber) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet model = this.editor.getModel();\n\n\t\tif (iconClicked) {\n\t\t\tif (e.target.type !== MouseTargetType.GUTTER_LINE_DECORATIONS) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\tif (range.startColumn !== model.getLineMaxColumn(lineNumber)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tthis.editor.changeDecorations(changeAccessor => {\n\t\t\tfor (let i = 0; i < this.decorations.length; i++) {\n\t\t\t\tlet dec = this.decorations[i];\n\t\t\t\tlet decRange = dec.getDecorationRange(model);\n\t\t\t\tif (decRange && decRange.startLineNumber === lineNumber) {\n\t\t\t\t\tif (iconClicked || dec.isCollapsed) {\n\t\t\t\t\t\tdec.setCollapsed(!dec.isCollapsed, changeAccessor);\n\t\t\t\t\t\tthis.updateHiddenAreas(lineNumber);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate updateHiddenAreas(focusLine?: number): void {\n\t\tlet model = this.editor.getModel();\n\t\tvar selections: Selection[] = this.editor.getSelections();\n\t\tvar updateSelections = false;\n\t\tlet hiddenAreas: Range[] = [];\n\t\tthis.decorations.filter(dec => dec.isCollapsed).forEach(dec => {\n\t\t\tlet decRange = dec.getDecorationRange(model);\n\t\t\tif (!decRange) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\thiddenAreas.push(new Range(decRange.startLineNumber + 1, 1, decRange.endLineNumber, 1));\n\t\t\tselections.forEach((selection, i) => {\n\t\t\t\tif (Range.containsPosition(decRange, selection.getStartPosition())) {\n\t\t\t\t\tselections[i] = selection = selection.setStartPosition(decRange.startLineNumber, model.getLineMaxColumn(decRange.startLineNumber));\n\t\t\t\t\tupdateSelections = true;\n\t\t\t\t}\n\t\t\t\tif (Range.containsPosition(decRange, selection.getEndPosition())) {\n\t\t\t\t\tselections[i] = selection.setEndPosition(decRange.startLineNumber, model.getLineMaxColumn(decRange.startLineNumber));\n\t\t\t\t\tupdateSelections = true;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tif (updateSelections) {\n\t\t\tthis.editor.setSelections(selections);\n\t\t}\n\t\tthis.editor.setHiddenAreas(hiddenAreas);\n\t\tif (focusLine) {\n\t\t\tthis.editor.revealPositionInCenterIfOutsideViewport({ lineNumber: focusLine, column: 1 });\n\t\t}\n\t}\n\n\tpublic unfold(levels: number): void {\n\t\tlet model = this.editor.getModel();\n\t\tlet hasChanges = false;\n\t\tlet selections = this.editor.getSelections();\n\t\tlet selectionsHasChanged = false;\n\t\tselections.forEach((selection, index) => {\n\t\t\tlet toUnfold: CollapsibleRegion[] = getCollapsibleRegionsToUnfoldAtLine(this.decorations, model, selection.startLineNumber, levels);\n\t\t\tif (toUnfold.length > 0) {\n\t\t\t\ttoUnfold.forEach((collapsibleRegion, index) => {\n\t\t\t\t\tthis.editor.changeDecorations(changeAccessor => {\n\t\t\t\t\t\tcollapsibleRegion.setCollapsed(false, changeAccessor);\n\t\t\t\t\t\thasChanges = true;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (!doesLineBelongsToCollapsibleRegion(toUnfold[0].foldingRange, selection.startLineNumber)) {\n\t\t\t\t\tlet lineNumber = toUnfold[0].startLineNumber, column = model.getLineMaxColumn(toUnfold[0].startLineNumber);\n\t\t\t\t\tselections[index] = selection.setEndPosition(lineNumber, column).setStartPosition(lineNumber, column);\n\t\t\t\t\tselectionsHasChanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tif (selectionsHasChanged) {\n\t\t\tthis.editor.setSelections(selections);\n\t\t}\n\t\tif (hasChanges) {\n\t\t\tthis.updateHiddenAreas(selections[0].startLineNumber);\n\t\t}\n\t}\n\n\tpublic fold(levels: number, up: boolean): void {\n\t\tlet hasChanges = false;\n\t\tlet selections = this.editor.getSelections();\n\t\tselections.forEach(selection => {\n\t\t\tlet lineNumber = selection.startLineNumber;\n\t\t\tlet toFold: CollapsibleRegion[] = getCollapsibleRegionsToFoldAtLine(this.decorations, this.editor.getModel(), lineNumber, levels, up);\n\t\t\ttoFold.forEach(collapsibleRegion => this.editor.changeDecorations(changeAccessor => {\n\t\t\t\tcollapsibleRegion.setCollapsed(true, changeAccessor);\n\t\t\t\thasChanges = true;\n\t\t\t}));\n\t\t});\n\t\tif (hasChanges) {\n\t\t\tthis.updateHiddenAreas(selections[0].startLineNumber);\n\t\t}\n\t}\n\n\tpublic foldUnfoldRecursively(isFold: boolean): void {\n\t\tlet hasChanges = false;\n\t\tlet model = this.editor.getModel();\n\t\tlet selections = this.editor.getSelections();\n\t\tselections.forEach(selection => {\n\t\t\tlet lineNumber = selection.startLineNumber;\n\t\t\tlet endLineNumber: number;\n\t\t\tlet decToFoldUnfold: CollapsibleRegion[] = [];\n\t\t\tfor (let i = 0, len = this.decorations.length; i < len; i++) {\n\t\t\t\tlet dec = this.decorations[i];\n\t\t\t\tlet decRange = dec.getDecorationRange(model);\n\t\t\t\tif (!decRange) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (decRange.startLineNumber >= lineNumber && (decRange.endLineNumber <= endLineNumber || typeof endLineNumber === 'undefined')) {\n\t\t\t\t\t//Protect against cursor not being in decoration and lower decoration folding/unfolding\n\t\t\t\t\tif (decRange.startLineNumber !== lineNumber && typeof endLineNumber === 'undefined') {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tendLineNumber = endLineNumber || decRange.endLineNumber;\n\t\t\t\t\tdecToFoldUnfold.push(dec);\n\t\t\t\t}\n\t\t\t};\n\t\t\tif (decToFoldUnfold.length > 0) {\n\t\t\t\tdecToFoldUnfold.forEach(dec => {\n\t\t\t\t\tthis.editor.changeDecorations(changeAccessor => {\n\t\t\t\t\t\tdec.setCollapsed(isFold, changeAccessor);\n\t\t\t\t\t\thasChanges = true;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tif (hasChanges) {\n\t\t\tthis.updateHiddenAreas(selections[0].startLineNumber);\n\t\t}\n\t}\n\n\tpublic foldAll(): void {\n\t\tthis.changeAll(true);\n\t}\n\n\tpublic unfoldAll(): void {\n\t\tthis.changeAll(false);\n\t}\n\n\tprivate changeAll(collapse: boolean): void {\n\t\tif (this.decorations.length > 0) {\n\t\t\tlet hasChanges = true;\n\t\t\tthis.editor.changeDecorations(changeAccessor => {\n\t\t\t\tthis.decorations.forEach(d => {\n\t\t\t\t\tif (collapse !== d.isCollapsed) {\n\t\t\t\t\t\td.setCollapsed(collapse, changeAccessor);\n\t\t\t\t\t\thasChanges = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t\tif (hasChanges) {\n\t\t\t\tthis.updateHiddenAreas(this.editor.getPosition().lineNumber);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic foldLevel(foldLevel: number, selectedLineNumbers: number[]): void {\n\t\tlet model = this.editor.getModel();\n\t\tlet foldingRegionStack: Range[] = [model.getFullModelRange()]; // sentinel\n\n\t\tlet hasChanges = false;\n\t\tthis.editor.changeDecorations(changeAccessor => {\n\t\t\tthis.decorations.forEach(dec => {\n\t\t\t\tlet decRange = dec.getDecorationRange(model);\n\t\t\t\tif (decRange) {\n\t\t\t\t\twhile (!Range.containsRange(foldingRegionStack[foldingRegionStack.length - 1], decRange)) {\n\t\t\t\t\t\tfoldingRegionStack.pop();\n\t\t\t\t\t}\n\t\t\t\t\tfoldingRegionStack.push(decRange);\n\t\t\t\t\tif (foldingRegionStack.length === foldLevel + 1 && !dec.isCollapsed && !selectedLineNumbers.some(lineNumber => decRange.startLineNumber < lineNumber && lineNumber <= decRange.endLineNumber)) {\n\t\t\t\t\t\tdec.setCollapsed(true, changeAccessor);\n\t\t\t\t\t\thasChanges = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tif (hasChanges) {\n\t\t\tthis.updateHiddenAreas(selectedLineNumbers[0]);\n\t\t}\n\t}\n}\n\nabstract class FoldingAction extends EditorAction {\n\n\tabstract invoke(foldingController: FoldingController, editor: editorCommon.ICommonCodeEditor, args: T): void;\n\n\tpublic runEditorCommand(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor, args: T): void | TPromise {\n\t\tlet foldingController = FoldingController.get(editor);\n\t\tif (!foldingController) {\n\t\t\treturn;\n\t\t}\n\t\tthis.reportTelemetry(accessor, editor);\n\t\tthis.invoke(foldingController, editor, args);\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\n\t}\n}\n\ninterface FoldingArguments {\n\tlevels?: number;\n\tdirection?: 'up' | 'down';\n}\n\nfunction foldingArgumentsConstraint(args: any) {\n\tif (!types.isUndefined(args)) {\n\t\tif (!types.isObject(args)) {\n\t\t\treturn false;\n\t\t}\n\t\tconst foldingArgs: FoldingArguments = args;\n\t\tif (!types.isUndefined(foldingArgs.levels) && !types.isNumber(foldingArgs.levels)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!types.isUndefined(foldingArgs.direction) && !types.isString(foldingArgs.direction)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n@editorAction\nclass UnfoldAction extends FoldingAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.unfold',\n\t\t\tlabel: nls.localize('unfoldAction.label', \"Unfold\"),\n\t\t\talias: 'Unfold',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.US_CLOSE_SQUARE_BRACKET,\n\t\t\t\tmac: {\n\t\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.US_CLOSE_SQUARE_BRACKET\n\t\t\t\t}\n\t\t\t},\n\t\t\tdescription: {\n\t\t\t\tdescription: 'Unfold the content in the editor',\n\t\t\t\targs: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Unfold editor argument',\n\t\t\t\t\t\tdescription: `Property-value pairs that can be passed through this argument:\n\t\t\t\t\t\t\t* 'level': Number of levels to unfold\n\t\t\t\t\t\t`,\n\t\t\t\t\t\tconstraint: foldingArgumentsConstraint\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(foldingController: FoldingController, editor: editorCommon.ICommonCodeEditor, args: FoldingArguments): void {\n\t\tfoldingController.unfold(args ? args.levels || 1 : 1);\n\t}\n}\n\n@editorAction\nclass UnFoldRecursivelyAction extends FoldingAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.unfoldRecursively',\n\t\t\tlabel: nls.localize('unFoldRecursivelyAction.label', \"Unfold Recursively\"),\n\t\t\talias: 'Unfold Recursively',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.US_CLOSE_SQUARE_BRACKET)\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(foldingController: FoldingController, editor: editorCommon.ICommonCodeEditor, args: any): void {\n\t\tfoldingController.foldUnfoldRecursively(false);\n\t}\n}\n\n@editorAction\nclass FoldAction extends FoldingAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.fold',\n\t\t\tlabel: nls.localize('foldAction.label', \"Fold\"),\n\t\t\talias: 'Fold',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.US_OPEN_SQUARE_BRACKET,\n\t\t\t\tmac: {\n\t\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.US_OPEN_SQUARE_BRACKET\n\t\t\t\t}\n\t\t\t},\n\t\t\tdescription: {\n\t\t\t\tdescription: 'Fold the content in the editor',\n\t\t\t\targs: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Fold editor argument',\n\t\t\t\t\t\tdescription: `Property-value pairs that can be passed through this argument:\n\t\t\t\t\t\t\t* 'levels': Number of levels to fold\n\t\t\t\t\t\t\t* 'up': If 'true', folds given number of levels up otherwise folds down\n\t\t\t\t\t\t`,\n\t\t\t\t\t\tconstraint: foldingArgumentsConstraint\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(foldingController: FoldingController, editor: editorCommon.ICommonCodeEditor, args: FoldingArguments): void {\n\t\targs = args ? args : { levels: 1, direction: 'up' };\n\t\tfoldingController.fold(args.levels || 1, args.direction === 'up');\n\t}\n}\n\n@editorAction\nclass FoldRecursivelyAction extends FoldingAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.foldRecursively',\n\t\t\tlabel: nls.localize('foldRecursivelyAction.label', \"Fold Recursively\"),\n\t\t\talias: 'Fold Recursively',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.US_OPEN_SQUARE_BRACKET)\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(foldingController: FoldingController, editor: editorCommon.ICommonCodeEditor): void {\n\t\tfoldingController.foldUnfoldRecursively(true);\n\t}\n}\n\n@editorAction\nclass FoldAllAction extends FoldingAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.foldAll',\n\t\t\tlabel: nls.localize('foldAllAction.label', \"Fold All\"),\n\t\t\talias: 'Fold All',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.KEY_0)\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(foldingController: FoldingController, editor: editorCommon.ICommonCodeEditor): void {\n\t\tfoldingController.foldAll();\n\t}\n}\n\n@editorAction\nclass UnfoldAllAction extends FoldingAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.unfoldAll',\n\t\t\tlabel: nls.localize('unfoldAllAction.label', \"Unfold All\"),\n\t\t\talias: 'Unfold All',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.KEY_J)\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(foldingController: FoldingController, editor: editorCommon.ICommonCodeEditor): void {\n\t\tfoldingController.unfoldAll();\n\t}\n}\n\nclass FoldLevelAction extends FoldingAction {\n\tprivate static ID_PREFIX = 'editor.foldLevel';\n\tpublic static ID = (level: number) => FoldLevelAction.ID_PREFIX + level;\n\n\tprivate getFoldingLevel() {\n\t\treturn parseInt(this.id.substr(FoldLevelAction.ID_PREFIX.length));\n\t}\n\n\tprivate getSelectedLines(editor: editorCommon.ICommonCodeEditor) {\n\t\treturn editor.getSelections().map(s => s.startLineNumber);\n\t}\n\n\tinvoke(foldingController: FoldingController, editor: editorCommon.ICommonCodeEditor): void {\n\t\tfoldingController.foldLevel(this.getFoldingLevel(), this.getSelectedLines(editor));\n\t}\n}\n\nfor (let i = 1; i <= 9; i++) {\n\tCommonEditorRegistry.registerEditorAction(\n\t\tnew FoldLevelAction({\n\t\t\tid: FoldLevelAction.ID(i),\n\t\t\tlabel: nls.localize('foldLevelAction.label', \"Fold Level {0}\", i),\n\t\t\talias: `Fold Level ${i}`,\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | (KeyCode.KEY_0 + i))\n\t\t\t}\n\t\t})\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { illegalArgument, onUnexpectedExternalError } from 'vs/base/common/errors';\nimport URI from 'vs/base/common/uri';\nimport { isFalsyOrEmpty } from 'vs/base/common/arrays';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { Range } from 'vs/editor/common/core/range';\nimport { IReadOnlyModel } from 'vs/editor/common/editorCommon';\nimport { CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';\nimport { DocumentFormattingEditProviderRegistry, DocumentRangeFormattingEditProviderRegistry, OnTypeFormattingEditProviderRegistry, FormattingOptions, TextEdit } from 'vs/editor/common/modes';\nimport { IModelService } from 'vs/editor/common/services/modelService';\nimport { asWinJsPromise, sequence } from 'vs/base/common/async';\nimport { Position } from 'vs/editor/common/core/position';\n\nexport function getDocumentRangeFormattingEdits(model: IReadOnlyModel, range: Range, options: FormattingOptions): TPromise {\n\n\tconst providers = DocumentRangeFormattingEditProviderRegistry.ordered(model);\n\n\tif (providers.length === 0) {\n\t\treturn TPromise.as(undefined);\n\t}\n\n\tlet result: TextEdit[];\n\treturn sequence(providers.map(provider => {\n\t\tif (isFalsyOrEmpty(result)) {\n\t\t\treturn () => {\n\t\t\t\treturn asWinJsPromise(token => provider.provideDocumentRangeFormattingEdits(model, range, options, token)).then(value => {\n\t\t\t\t\tresult = value;\n\t\t\t\t}, onUnexpectedExternalError);\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t})).then(() => result);\n}\n\nexport function getDocumentFormattingEdits(model: IReadOnlyModel, options: FormattingOptions): TPromise {\n\tconst providers = DocumentFormattingEditProviderRegistry.ordered(model);\n\n\t// try range formatters when no document formatter is registered\n\tif (providers.length === 0) {\n\t\treturn getDocumentRangeFormattingEdits(model, model.getFullModelRange(), options);\n\t}\n\n\tlet result: TextEdit[];\n\treturn sequence(providers.map(provider => {\n\t\tif (isFalsyOrEmpty(result)) {\n\t\t\treturn () => {\n\t\t\t\treturn asWinJsPromise(token => provider.provideDocumentFormattingEdits(model, options, token)).then(value => {\n\t\t\t\t\tresult = value;\n\t\t\t\t}, onUnexpectedExternalError);\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t})).then(() => result);\n}\n\nexport function getOnTypeFormattingEdits(model: IReadOnlyModel, position: Position, ch: string, options: FormattingOptions): TPromise {\n\tconst [support] = OnTypeFormattingEditProviderRegistry.ordered(model);\n\tif (!support) {\n\t\treturn TPromise.as(undefined);\n\t}\n\tif (support.autoFormatTriggerCharacters.indexOf(ch) < 0) {\n\t\treturn TPromise.as(undefined);\n\t}\n\n\treturn asWinJsPromise((token) => {\n\t\treturn support.provideOnTypeFormattingEdits(model, position, ch, options, token);\n\t}).then(r => r, onUnexpectedExternalError);\n}\n\nCommonEditorRegistry.registerLanguageCommand('_executeFormatRangeProvider', function (accessor, args) {\n\tconst { resource, range, options } = args;\n\tif (!(resource instanceof URI) || !Range.isIRange(range)) {\n\t\tthrow illegalArgument();\n\t}\n\tconst model = accessor.get(IModelService).getModel(resource);\n\tif (!model) {\n\t\tthrow illegalArgument('resource');\n\t}\n\treturn getDocumentRangeFormattingEdits(model, Range.lift(range), options);\n});\n\nCommonEditorRegistry.registerLanguageCommand('_executeFormatDocumentProvider', function (accessor, args) {\n\tconst { resource, options } = args;\n\tif (!(resource instanceof URI)) {\n\t\tthrow illegalArgument('resource');\n\t}\n\tconst model = accessor.get(IModelService).getModel(resource);\n\tif (!model) {\n\t\tthrow illegalArgument('resource');\n\t}\n\n\treturn getDocumentFormattingEdits(model, options);\n});\n\nCommonEditorRegistry.registerDefaultLanguageCommand('_executeFormatOnTypeProvider', function (model, position, args) {\n\tconst { ch, options } = args;\n\tif (typeof ch !== 'string') {\n\t\tthrow illegalArgument('ch');\n\t}\n\treturn getOnTypeFormattingEdits(model, position, ch, options);\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'use strict';\n\nimport * as nls from 'vs/nls';\nimport { isFalsyOrEmpty } from 'vs/base/common/arrays';\nimport { KeyCode, KeyMod, KeyChord } from 'vs/base/common/keyCodes';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';\nimport { editorAction, ServicesAccessor, EditorAction, commonEditorContribution } from 'vs/editor/common/editorCommonExtensions';\nimport { OnTypeFormattingEditProviderRegistry, DocumentRangeFormattingEditProviderRegistry } from 'vs/editor/common/modes';\nimport { getOnTypeFormattingEdits, getDocumentFormattingEdits, getDocumentRangeFormattingEdits } from '../common/format';\nimport { EditOperationsCommand } from '../common/formatCommand';\nimport { CommandsRegistry } from 'vs/platform/commands/common/commands';\nimport { ICodeEditorService } from 'vs/editor/common/services/codeEditorService';\nimport { IEditorWorkerService } from 'vs/editor/common/services/editorWorkerService';\nimport { CharacterSet } from 'vs/editor/common/core/characterClassifier';\nimport { Range } from 'vs/editor/common/core/range';\nimport { alert } from 'vs/base/browser/ui/aria/aria';\nimport { EditorState, CodeEditorStateFlag } from 'vs/editor/common/core/editorState';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\n\n\nfunction alertFormattingEdits(edits: editorCommon.ISingleEditOperation[]): void {\n\n\tedits = edits.filter(edit => edit.range);\n\tif (!edits.length) {\n\t\treturn;\n\t}\n\n\tlet { range } = edits[0];\n\tfor (let i = 1; i < edits.length; i++) {\n\t\trange = Range.plusRange(range, edits[i].range);\n\t}\n\tconst { startLineNumber, endLineNumber } = range;\n\tif (startLineNumber === endLineNumber) {\n\t\tif (edits.length === 1) {\n\t\t\talert(nls.localize('hint11', \"Made 1 formatting edit on line {0}\", startLineNumber));\n\t\t} else {\n\t\t\talert(nls.localize('hintn1', \"Made {0} formatting edits on line {1}\", edits.length, startLineNumber));\n\t\t}\n\t} else {\n\t\tif (edits.length === 1) {\n\t\t\talert(nls.localize('hint1n', \"Made 1 formatting edit between lines {0} and {1}\", startLineNumber, endLineNumber));\n\t\t} else {\n\t\t\talert(nls.localize('hintnn', \"Made {0} formatting edits between lines {1} and {2}\", edits.length, startLineNumber, endLineNumber));\n\t\t}\n\t}\n}\n\n@commonEditorContribution\nclass FormatOnType implements editorCommon.IEditorContribution {\n\n\tprivate static ID = 'editor.contrib.autoFormat';\n\n\tprivate editor: editorCommon.ICommonCodeEditor;\n\tprivate workerService: IEditorWorkerService;\n\tprivate callOnDispose: IDisposable[];\n\tprivate callOnModel: IDisposable[];\n\n\tconstructor(editor: editorCommon.ICommonCodeEditor, @IEditorWorkerService workerService: IEditorWorkerService) {\n\t\tthis.editor = editor;\n\t\tthis.workerService = workerService;\n\t\tthis.callOnDispose = [];\n\t\tthis.callOnModel = [];\n\n\t\tthis.callOnDispose.push(editor.onDidChangeConfiguration(() => this.update()));\n\t\tthis.callOnDispose.push(editor.onDidChangeModel(() => this.update()));\n\t\tthis.callOnDispose.push(editor.onDidChangeModelLanguage(() => this.update()));\n\t\tthis.callOnDispose.push(OnTypeFormattingEditProviderRegistry.onDidChange(this.update, this));\n\t}\n\n\tprivate update(): void {\n\n\t\t// clean up\n\t\tthis.callOnModel = dispose(this.callOnModel);\n\n\t\t// we are disabled\n\t\tif (!this.editor.getConfiguration().contribInfo.formatOnType) {\n\t\t\treturn;\n\t\t}\n\n\t\t// no model\n\t\tif (!this.editor.getModel()) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar model = this.editor.getModel();\n\n\t\t// no support\n\t\tvar [support] = OnTypeFormattingEditProviderRegistry.ordered(model);\n\t\tif (!support || !support.autoFormatTriggerCharacters) {\n\t\t\treturn;\n\t\t}\n\n\t\t// register typing listeners that will trigger the format\n\t\tlet triggerChars = new CharacterSet();\n\t\tfor (let ch of support.autoFormatTriggerCharacters) {\n\t\t\ttriggerChars.add(ch.charCodeAt(0));\n\t\t}\n\t\tthis.callOnModel.push(this.editor.onDidType((text: string) => {\n\t\t\tlet lastCharCode = text.charCodeAt(text.length - 1);\n\t\t\tif (triggerChars.has(lastCharCode)) {\n\t\t\t\tthis.trigger(String.fromCharCode(lastCharCode));\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate trigger(ch: string): void {\n\n\t\tif (this.editor.getSelections().length > 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar model = this.editor.getModel(),\n\t\t\tposition = this.editor.getPosition(),\n\t\t\tcanceled = false;\n\n\t\t// install a listener that checks if edits happens before the\n\t\t// position on which we format right now. If so, we won't\n\t\t// apply the format edits\n\t\tvar unbind = this.editor.onDidChangeModelContent((e) => {\n\t\t\tif (e.isFlush) {\n\t\t\t\t// a model.setValue() was called\n\t\t\t\t// cancel only once\n\t\t\t\tcanceled = true;\n\t\t\t\tunbind.dispose();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (let i = 0, len = e.changes.length; i < len; i++) {\n\t\t\t\tconst change = e.changes[i];\n\t\t\t\tif (change.range.endLineNumber <= position.lineNumber) {\n\t\t\t\t\t// cancel only once\n\t\t\t\t\tcanceled = true;\n\t\t\t\t\tunbind.dispose();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t});\n\n\t\tlet modelOpts = model.getOptions();\n\n\t\tgetOnTypeFormattingEdits(model, position, ch, {\n\t\t\ttabSize: modelOpts.tabSize,\n\t\t\tinsertSpaces: modelOpts.insertSpaces\n\t\t}).then(edits => {\n\t\t\treturn this.workerService.computeMoreMinimalEdits(model.uri, edits, []);\n\t\t}).then(edits => {\n\n\t\t\tunbind.dispose();\n\n\t\t\tif (canceled || isFalsyOrEmpty(edits)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tEditOperationsCommand.execute(this.editor, edits);\n\t\t\talertFormattingEdits(edits);\n\n\t\t}, (err) => {\n\t\t\tunbind.dispose();\n\t\t\tthrow err;\n\t\t});\n\t}\n\n\tpublic getId(): string {\n\t\treturn FormatOnType.ID;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.callOnDispose = dispose(this.callOnDispose);\n\t\tthis.callOnModel = dispose(this.callOnModel);\n\t}\n}\n\n@commonEditorContribution\nclass FormatOnPaste implements editorCommon.IEditorContribution {\n\n\tprivate static ID = 'editor.contrib.formatOnPaste';\n\n\tprivate editor: editorCommon.ICommonCodeEditor;\n\tprivate workerService: IEditorWorkerService;\n\tprivate callOnDispose: IDisposable[];\n\tprivate callOnModel: IDisposable[];\n\n\tconstructor(editor: editorCommon.ICommonCodeEditor, @IEditorWorkerService workerService: IEditorWorkerService) {\n\t\tthis.editor = editor;\n\t\tthis.workerService = workerService;\n\t\tthis.callOnDispose = [];\n\t\tthis.callOnModel = [];\n\n\t\tthis.callOnDispose.push(editor.onDidChangeConfiguration(() => this.update()));\n\t\tthis.callOnDispose.push(editor.onDidChangeModel(() => this.update()));\n\t\tthis.callOnDispose.push(editor.onDidChangeModelLanguage(() => this.update()));\n\t\tthis.callOnDispose.push(DocumentRangeFormattingEditProviderRegistry.onDidChange(this.update, this));\n\t}\n\n\tprivate update(): void {\n\n\t\t// clean up\n\t\tthis.callOnModel = dispose(this.callOnModel);\n\n\t\t// we are disabled\n\t\tif (!this.editor.getConfiguration().contribInfo.formatOnPaste) {\n\t\t\treturn;\n\t\t}\n\n\t\t// no model\n\t\tif (!this.editor.getModel()) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet model = this.editor.getModel();\n\n\t\t// no support\n\t\tlet [support] = DocumentRangeFormattingEditProviderRegistry.ordered(model);\n\t\tif (!support || !support.provideDocumentRangeFormattingEdits) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.callOnModel.push(this.editor.onDidPaste((range: Range) => {\n\t\t\tthis.trigger(range);\n\t\t}));\n\t}\n\n\tprivate trigger(range: Range): void {\n\t\tif (this.editor.getSelections().length > 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst model = this.editor.getModel();\n\t\tconst { tabSize, insertSpaces } = model.getOptions();\n\t\tconst state = new EditorState(this.editor, CodeEditorStateFlag.Value | CodeEditorStateFlag.Position);\n\n\t\tgetDocumentRangeFormattingEdits(model, range, { tabSize, insertSpaces }).then(edits => {\n\t\t\treturn this.workerService.computeMoreMinimalEdits(model.uri, edits, []);\n\t\t}).then(edits => {\n\t\t\tif (!state.validate(this.editor) || isFalsyOrEmpty(edits)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tEditOperationsCommand.execute(this.editor, edits);\n\t\t\talertFormattingEdits(edits);\n\t\t});\n\t}\n\n\tpublic getId(): string {\n\t\treturn FormatOnPaste.ID;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.callOnDispose = dispose(this.callOnDispose);\n\t\tthis.callOnModel = dispose(this.callOnModel);\n\t}\n}\n\nexport abstract class AbstractFormatAction extends EditorAction {\n\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): TPromise {\n\n\t\tconst workerService = accessor.get(IEditorWorkerService);\n\n\t\tconst formattingPromise = this._getFormattingEdits(editor);\n\t\tif (!formattingPromise) {\n\t\t\treturn TPromise.as(void 0);\n\t\t}\n\n\t\t// Capture the state of the editor\n\t\tconst state = new EditorState(editor, CodeEditorStateFlag.Value | CodeEditorStateFlag.Position);\n\n\t\t// Receive formatted value from worker\n\t\treturn formattingPromise.then(edits => workerService.computeMoreMinimalEdits(editor.getModel().uri, edits, editor.getSelections())).then(edits => {\n\t\t\tif (!state.validate(editor) || isFalsyOrEmpty(edits)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tEditOperationsCommand.execute(editor, edits);\n\t\t\talertFormattingEdits(edits);\n\t\t\teditor.focus();\n\t\t});\n\t}\n\n\tprotected abstract _getFormattingEdits(editor: editorCommon.ICommonCodeEditor): TPromise;\n}\n\n\n@editorAction\nexport class FormatDocumentAction extends AbstractFormatAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.formatDocument',\n\t\t\tlabel: nls.localize('formatDocument.label', \"Format Document\"),\n\t\t\talias: 'Format Document',\n\t\t\tprecondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasDocumentFormattingProvider),\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.Shift | KeyMod.Alt | KeyCode.KEY_F,\n\t\t\t\t// secondary: [KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.KEY_D)],\n\t\t\t\tlinux: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_I }\n\t\t\t},\n\t\t\tmenuOpts: {\n\t\t\t\tgroup: '1_modification',\n\t\t\t\torder: 1.3\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected _getFormattingEdits(editor: editorCommon.ICommonCodeEditor): TPromise {\n\t\tconst model = editor.getModel();\n\t\tconst { tabSize, insertSpaces } = model.getOptions();\n\t\treturn getDocumentFormattingEdits(model, { tabSize, insertSpaces });\n\t}\n}\n\n@editorAction\nexport class FormatSelectionAction extends AbstractFormatAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.formatSelection',\n\t\t\tlabel: nls.localize('formatSelection.label', \"Format Selection\"),\n\t\t\talias: 'Format Code',\n\t\t\tprecondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasDocumentSelectionFormattingProvider, EditorContextKeys.hasNonEmptySelection),\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.KEY_F)\n\t\t\t},\n\t\t\tmenuOpts: {\n\t\t\t\tgroup: '1_modification',\n\t\t\t\torder: 1.31\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected _getFormattingEdits(editor: editorCommon.ICommonCodeEditor): TPromise {\n\t\tconst model = editor.getModel();\n\t\tconst { tabSize, insertSpaces } = model.getOptions();\n\t\treturn getDocumentRangeFormattingEdits(model, editor.getSelection(), { tabSize, insertSpaces });\n\t}\n}\n\n// this is the old format action that does both (format document OR format selection)\n// and we keep it here such that existing keybinding configurations etc will still work\nCommandsRegistry.registerCommand('editor.action.format', accessor => {\n\tconst editor = accessor.get(ICodeEditorService).getFocusedCodeEditor();\n\tif (editor) {\n\t\treturn new class extends AbstractFormatAction {\n\t\t\tconstructor() {\n\t\t\t\tsuper({});\n\t\t\t}\n\t\t\t_getFormattingEdits(editor: editorCommon.ICommonCodeEditor): TPromise {\n\t\t\t\tconst model = editor.getModel();\n\t\t\t\tconst editorSelection = editor.getSelection();\n\t\t\t\tconst { tabSize, insertSpaces } = model.getOptions();\n\n\t\t\t\treturn editorSelection.isEmpty()\n\t\t\t\t\t? getDocumentFormattingEdits(model, { tabSize, insertSpaces })\n\t\t\t\t\t: getDocumentRangeFormattingEdits(model, editorSelection, { tabSize, insertSpaces });\n\t\t\t}\n\t\t}().run(accessor, editor);\n\t}\n\treturn 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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { onUnexpectedExternalError } from 'vs/base/common/errors';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IReadOnlyModel } from 'vs/editor/common/editorCommon';\nimport { CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';\nimport LanguageFeatureRegistry from 'vs/editor/common/modes/languageFeatureRegistry';\nimport { DefinitionProviderRegistry, ImplementationProviderRegistry, TypeDefinitionProviderRegistry, Location } from 'vs/editor/common/modes';\nimport { CancellationToken } from 'vs/base/common/cancellation';\nimport { asWinJsPromise } from 'vs/base/common/async';\nimport { Position } from 'vs/editor/common/core/position';\n\nfunction outputResults(promises: TPromise[]) {\n\treturn TPromise.join(promises).then(allReferences => {\n\t\tlet result: Location[] = [];\n\t\tfor (let references of allReferences) {\n\t\t\tif (Array.isArray(references)) {\n\t\t\t\tresult.push(...references);\n\t\t\t} else if (references) {\n\t\t\t\tresult.push(references);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t});\n}\n\nfunction getDefinitions(\n\tmodel: IReadOnlyModel,\n\tposition: Position,\n\tregistry: LanguageFeatureRegistry,\n\tprovide: (provider: T, model: IReadOnlyModel, position: Position, token: CancellationToken) => Location | Location[] | Thenable\n): TPromise {\n\tconst provider = registry.ordered(model);\n\n\t// get results\n\tconst promises = provider.map((provider, idx) => {\n\t\treturn asWinJsPromise((token) => {\n\t\t\treturn provide(provider, model, position, token);\n\t\t}).then(result => {\n\t\t\treturn result;\n\t\t}, err => {\n\t\t\tonUnexpectedExternalError(err);\n\t\t});\n\t});\n\treturn outputResults(promises);\n}\n\n\nexport function getDefinitionsAtPosition(model: IReadOnlyModel, position: Position): TPromise {\n\treturn getDefinitions(model, position, DefinitionProviderRegistry, (provider, model, position, token) => {\n\t\treturn provider.provideDefinition(model, position, token);\n\t});\n}\n\nexport function getImplementationsAtPosition(model: IReadOnlyModel, position: Position): TPromise {\n\treturn getDefinitions(model, position, ImplementationProviderRegistry, (provider, model, position, token) => {\n\t\treturn provider.provideImplementation(model, position, token);\n\t});\n}\n\nexport function getTypeDefinitionsAtPosition(model: IReadOnlyModel, position: Position): TPromise {\n\treturn getDefinitions(model, position, TypeDefinitionProviderRegistry, (provider, model, position, token) => {\n\t\treturn provider.provideTypeDefinition(model, position, token);\n\t});\n}\n\nCommonEditorRegistry.registerDefaultLanguageCommand('_executeDefinitionProvider', getDefinitionsAtPosition);\nCommonEditorRegistry.registerDefaultLanguageCommand('_executeImplementationProvider', getImplementationsAtPosition);\nCommonEditorRegistry.registerDefaultLanguageCommand('_executeTypeDefinitionProvider', getTypeDefinitionsAtPosition);","/*---------------------------------------------------------------------------------------------\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'use strict';\n\nimport { coalesce } from 'vs/base/common/arrays';\nimport { onUnexpectedExternalError } from 'vs/base/common/errors';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IReadOnlyModel } from 'vs/editor/common/editorCommon';\nimport { CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';\nimport { Hover, HoverProviderRegistry } from 'vs/editor/common/modes';\nimport { asWinJsPromise } from 'vs/base/common/async';\nimport { Position } from 'vs/editor/common/core/position';\n\nexport function getHover(model: IReadOnlyModel, position: Position): TPromise {\n\n\tconst supports = HoverProviderRegistry.ordered(model);\n\tconst values: Hover[] = [];\n\n\tconst promises = supports.map((support, idx) => {\n\t\treturn asWinJsPromise((token) => {\n\t\t\treturn support.provideHover(model, position, token);\n\t\t}).then((result) => {\n\t\t\tif (result) {\n\t\t\t\tlet hasRange = (typeof result.range !== 'undefined');\n\t\t\t\tlet hasHtmlContent = (typeof result.contents !== 'undefined' && result.contents && result.contents.length > 0);\n\t\t\t\tif (hasRange && hasHtmlContent) {\n\t\t\t\t\tvalues[idx] = result;\n\t\t\t\t}\n\t\t\t}\n\t\t}, err => {\n\t\t\tonUnexpectedExternalError(err);\n\t\t});\n\t});\n\n\treturn TPromise.join(promises).then(() => coalesce(values));\n}\n\nCommonEditorRegistry.registerDefaultLanguageCommand('_executeHoverProvider', getHover);","/*---------------------------------------------------------------------------------------------\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'use strict';\n\nimport * as nls from 'vs/nls';\nimport URI from 'vs/base/common/uri';\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { $ } from 'vs/base/browser/dom';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { renderMarkedString } from 'vs/base/browser/htmlContentRenderer';\nimport { IOpenerService, NullOpenerService } from 'vs/platform/opener/common/opener';\nimport { IModeService } from 'vs/editor/common/services/modeService';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Position } from 'vs/editor/common/core/position';\nimport { HoverProviderRegistry, Hover } from 'vs/editor/common/modes';\nimport { tokenizeToString } from 'vs/editor/common/modes/textToHtmlTokenizer';\nimport { ICodeEditor } from 'vs/editor/browser/editorBrowser';\nimport { getHover } from '../common/hover';\nimport { HoverOperation, IHoverComputer } from './hoverOperation';\nimport { ContentHoverWidget } from './hoverWidgets';\nimport { textToMarkedString, MarkedString } from 'vs/base/common/htmlContent';\nimport { ModelDecorationOptions } from 'vs/editor/common/model/textModelWithDecorations';\n\nclass ModesContentComputer implements IHoverComputer {\n\n\tprivate _editor: ICodeEditor;\n\tprivate _result: Hover[];\n\tprivate _range: Range;\n\n\tconstructor(editor: ICodeEditor) {\n\t\tthis._editor = editor;\n\t\tthis._range = null;\n\t}\n\n\tsetRange(range: Range): void {\n\t\tthis._range = range;\n\t\tthis._result = [];\n\t}\n\n\tclearResult(): void {\n\t\tthis._result = [];\n\t}\n\n\tcomputeAsync(): TPromise {\n\t\tconst model = this._editor.getModel();\n\n\t\tif (!HoverProviderRegistry.has(model)) {\n\t\t\treturn TPromise.as(null);\n\t\t}\n\n\t\treturn getHover(model, new Position(\n\t\t\tthis._range.startLineNumber,\n\t\t\tthis._range.startColumn\n\t\t));\n\t}\n\n\tcomputeSync(): Hover[] {\n\t\tconst lineNumber = this._range.startLineNumber;\n\n\t\tif (lineNumber > this._editor.getModel().getLineCount()) {\n\t\t\t// Illegal line number => no results\n\t\t\treturn [];\n\t\t}\n\n\t\tconst hasHoverContent = (contents: MarkedString | MarkedString[]) => {\n\t\t\treturn contents && (!Array.isArray(contents) || (contents).length > 0);\n\t\t};\n\n\t\tconst maxColumn = this._editor.getModel().getLineMaxColumn(lineNumber);\n\t\tconst lineDecorations = this._editor.getLineDecorations(lineNumber);\n\n\t\tconst result = lineDecorations.map(d => {\n\t\t\tconst startColumn = (d.range.startLineNumber === lineNumber) ? d.range.startColumn : 1;\n\t\t\tconst endColumn = (d.range.endLineNumber === lineNumber) ? d.range.endColumn : maxColumn;\n\n\t\t\tif (startColumn > this._range.startColumn || this._range.endColumn > endColumn || !hasHoverContent(d.options.hoverMessage)) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst range = new Range(this._range.startLineNumber, startColumn, this._range.startLineNumber, endColumn);\n\t\t\tlet contents: MarkedString[];\n\n\t\t\tif (d.options.hoverMessage) {\n\t\t\t\tif (Array.isArray(d.options.hoverMessage)) {\n\t\t\t\t\tcontents = [...d.options.hoverMessage];\n\t\t\t\t} else {\n\t\t\t\t\tcontents = [d.options.hoverMessage];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { contents, range };\n\t\t});\n\n\t\treturn result.filter(d => !!d);\n\t}\n\n\tonResult(result: Hover[], isFromSynchronousComputation: boolean): void {\n\t\t// Always put synchronous messages before asynchronous ones\n\t\tif (isFromSynchronousComputation) {\n\t\t\tthis._result = result.concat(this._result);\n\t\t} else {\n\t\t\tthis._result = this._result.concat(result);\n\t\t}\n\t}\n\n\tgetResult(): Hover[] {\n\t\treturn this._result.slice(0);\n\t}\n\n\tgetResultWithLoadingMessage(): Hover[] {\n\t\treturn this._result.slice(0).concat([this._getLoadingMessage()]);\n\t}\n\n\tprivate _getLoadingMessage(): Hover {\n\t\treturn {\n\t\t\trange: this._range,\n\t\t\tcontents: [textToMarkedString(nls.localize('modesContentHover.loading', \"Loading...\"))]\n\t\t};\n\t}\n}\n\nexport class ModesContentHoverWidget extends ContentHoverWidget {\n\n\tstatic ID = 'editor.contrib.modesContentHoverWidget';\n\n\tprivate _messages: Hover[];\n\tprivate _lastRange: Range;\n\tprivate _computer: ModesContentComputer;\n\tprivate _hoverOperation: HoverOperation;\n\tprivate _highlightDecorations: string[];\n\tprivate _isChangingDecorations: boolean;\n\tprivate _openerService: IOpenerService;\n\tprivate _modeService: IModeService;\n\tprivate _shouldFocus: boolean;\n\n\tconstructor(editor: ICodeEditor, openerService: IOpenerService, modeService: IModeService) {\n\t\tsuper(ModesContentHoverWidget.ID, editor);\n\n\t\tthis._computer = new ModesContentComputer(this._editor);\n\t\tthis._highlightDecorations = [];\n\t\tthis._isChangingDecorations = false;\n\t\tthis._openerService = openerService || NullOpenerService;\n\t\tthis._modeService = modeService;\n\n\t\tthis._hoverOperation = new HoverOperation(\n\t\t\tthis._computer,\n\t\t\t(result: Hover[]) => this._withResult(result, true),\n\t\t\tnull,\n\t\t\t(result: any) => this._withResult(result, false)\n\t\t);\n\t}\n\n\tdispose(): void {\n\t\tthis._hoverOperation.cancel();\n\t\tsuper.dispose();\n\t}\n\n\tonModelDecorationsChanged(): void {\n\t\tif (this._isChangingDecorations) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.isVisible) {\n\t\t\t// The decorations have changed and the hover is visible,\n\t\t\t// we need to recompute the displayed text\n\t\t\tthis._hoverOperation.cancel();\n\t\t\tthis._computer.clearResult();\n\t\t\tthis._hoverOperation.start();\n\t\t}\n\t}\n\n\tstartShowingAt(range: Range, focus: boolean): void {\n\t\tif (this._lastRange && this._lastRange.equalsRange(range)) {\n\t\t\t// We have to show the widget at the exact same range as before, so no work is needed\n\t\t\treturn;\n\t\t}\n\n\t\tthis._hoverOperation.cancel();\n\n\t\tif (this.isVisible) {\n\t\t\t// The range might have changed, but the hover is visible\n\t\t\t// Instead of hiding it completely, filter out messages that are still in the new range and\n\t\t\t// kick off a new computation\n\t\t\tif (this._showAtPosition.lineNumber !== range.startLineNumber) {\n\t\t\t\tthis.hide();\n\t\t\t} else {\n\t\t\t\tvar filteredMessages: Hover[] = [];\n\t\t\t\tfor (var i = 0, len = this._messages.length; i < len; i++) {\n\t\t\t\t\tvar msg = this._messages[i];\n\t\t\t\t\tvar rng = msg.range;\n\t\t\t\t\tif (rng.startColumn <= range.startColumn && rng.endColumn >= range.endColumn) {\n\t\t\t\t\t\tfilteredMessages.push(msg);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (filteredMessages.length > 0) {\n\t\t\t\t\tthis._renderMessages(range, filteredMessages);\n\t\t\t\t} else {\n\t\t\t\t\tthis.hide();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._lastRange = range;\n\t\tthis._computer.setRange(range);\n\t\tthis._shouldFocus = focus;\n\t\tthis._hoverOperation.start();\n\t}\n\n\thide(): void {\n\t\tthis._lastRange = null;\n\t\tthis._hoverOperation.cancel();\n\t\tsuper.hide();\n\t\tthis._isChangingDecorations = true;\n\t\tthis._highlightDecorations = this._editor.deltaDecorations(this._highlightDecorations, []);\n\t\tthis._isChangingDecorations = false;\n\t}\n\n\t_withResult(result: Hover[], complete: boolean): void {\n\t\tthis._messages = result;\n\n\t\tif (this._lastRange && this._messages.length > 0) {\n\t\t\tthis._renderMessages(this._lastRange, this._messages);\n\t\t} else if (complete) {\n\t\t\tthis.hide();\n\t\t}\n\t}\n\n\tprivate _renderMessages(renderRange: Range, messages: Hover[]): void {\n\n\t\t// update column from which to show\n\t\tvar renderColumn = Number.MAX_VALUE,\n\t\t\thighlightRange = messages[0].range,\n\t\t\tfragment = document.createDocumentFragment();\n\n\t\tmessages.forEach((msg) => {\n\t\t\tif (!msg.range) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\trenderColumn = Math.min(renderColumn, msg.range.startColumn);\n\t\t\thighlightRange = Range.plusRange(highlightRange, msg.range);\n\n\t\t\tmsg.contents\n\t\t\t\t.filter(contents => !!contents)\n\t\t\t\t.forEach(contents => {\n\t\t\t\t\tconst renderedContents = renderMarkedString(contents, {\n\t\t\t\t\t\tactionCallback: (content) => {\n\t\t\t\t\t\t\tthis._openerService.open(URI.parse(content)).then(void 0, onUnexpectedError);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcodeBlockRenderer: (languageAlias, value): string | TPromise => {\n\t\t\t\t\t\t\t// In markdown,\n\t\t\t\t\t\t\t// it is possible that we stumble upon language aliases (e.g.js instead of javascript)\n\t\t\t\t\t\t\t// it is possible no alias is given in which case we fall back to the current editor lang\n\t\t\t\t\t\t\tconst modeId = languageAlias\n\t\t\t\t\t\t\t\t? this._modeService.getModeIdForLanguageName(languageAlias)\n\t\t\t\t\t\t\t\t: this._editor.getModel().getLanguageIdentifier().language;\n\n\t\t\t\t\t\t\treturn this._modeService.getOrCreateMode(modeId).then(_ => {\n\t\t\t\t\t\t\t\treturn `
    ${tokenizeToString(value, modeId)}
    `;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tfragment.appendChild($('div.hover-row', null, renderedContents));\n\t\t\t\t});\n\t\t});\n\n\t\t// show\n\t\tthis.showAt(new Position(renderRange.startLineNumber, renderColumn), this._shouldFocus);\n\n\t\tthis.updateContents(fragment);\n\n\t\tthis._isChangingDecorations = true;\n\t\tthis._highlightDecorations = this._editor.deltaDecorations(this._highlightDecorations, [{\n\t\t\trange: highlightRange,\n\t\t\toptions: ModesContentHoverWidget._DECORATION_OPTIONS\n\t\t}]);\n\t\tthis._isChangingDecorations = false;\n\t}\n\n\tprivate static _DECORATION_OPTIONS = ModelDecorationOptions.register({\n\t\tclassName: 'hoverHighlight'\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport { KeyCode, KeyMod, KeyChord } from 'vs/base/common/keyCodes';\nimport { SortLinesCommand } from 'vs/editor/contrib/linesOperations/common/sortLinesCommand';\nimport { EditOperation } from 'vs/editor/common/core/editOperation';\nimport { TrimTrailingWhitespaceCommand } from 'vs/editor/common/commands/trimTrailingWhitespaceCommand';\nimport { ICommand, ICommonCodeEditor, IIdentifiedSingleEditOperation } from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { ReplaceCommand, ReplaceCommandThatPreservesSelection } from 'vs/editor/common/commands/replaceCommand';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { editorAction, ServicesAccessor, IActionOptions, EditorAction } from 'vs/editor/common/editorCommonExtensions';\nimport { CopyLinesCommand } from './copyLinesCommand';\nimport { DeleteLinesCommand } from './deleteLinesCommand';\nimport { MoveLinesCommand } from './moveLinesCommand';\nimport { TypeOperations } from 'vs/editor/common/controller/cursorTypeOperations';\nimport { CoreEditingCommands } from 'vs/editor/common/controller/coreCommands';\n\n// copy lines\n\nabstract class AbstractCopyLinesAction extends EditorAction {\n\n\tprivate down: boolean;\n\n\tconstructor(down: boolean, opts: IActionOptions) {\n\t\tsuper(opts);\n\t\tthis.down = down;\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\n\t\tvar commands: ICommand[] = [];\n\t\tvar selections = editor.getSelections();\n\n\t\tfor (var i = 0; i < selections.length; i++) {\n\t\t\tcommands.push(new CopyLinesCommand(selections[i], this.down));\n\t\t}\n\n\t\teditor.pushUndoStop();\n\t\teditor.executeCommands(this.id, commands);\n\t\teditor.pushUndoStop();\n\t}\n}\n\n@editorAction\nclass CopyLinesUpAction extends AbstractCopyLinesAction {\n\tconstructor() {\n\t\tsuper(false, {\n\t\t\tid: 'editor.action.copyLinesUpAction',\n\t\t\tlabel: nls.localize('lines.copyUp', \"Copy Line Up\"),\n\t\t\talias: 'Copy Line Up',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.Alt | KeyMod.Shift | KeyCode.UpArrow,\n\t\t\t\tlinux: { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyMod.Shift | KeyCode.UpArrow }\n\t\t\t}\n\t\t});\n\t}\n}\n\n@editorAction\nclass CopyLinesDownAction extends AbstractCopyLinesAction {\n\tconstructor() {\n\t\tsuper(true, {\n\t\t\tid: 'editor.action.copyLinesDownAction',\n\t\t\tlabel: nls.localize('lines.copyDown', \"Copy Line Down\"),\n\t\t\talias: 'Copy Line Down',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.Alt | KeyMod.Shift | KeyCode.DownArrow,\n\t\t\t\tlinux: { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyMod.Shift | KeyCode.DownArrow }\n\t\t\t}\n\t\t});\n\t}\n}\n\n// move lines\n\nabstract class AbstractMoveLinesAction extends EditorAction {\n\n\tprivate down: boolean;\n\n\tconstructor(down: boolean, opts: IActionOptions) {\n\t\tsuper(opts);\n\t\tthis.down = down;\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\n\t\tvar commands: ICommand[] = [];\n\t\tvar selections = editor.getSelections();\n\t\tvar autoIndent = editor.getConfiguration().autoIndent;\n\n\t\tfor (var i = 0; i < selections.length; i++) {\n\t\t\tcommands.push(new MoveLinesCommand(selections[i], this.down, autoIndent));\n\t\t}\n\n\t\teditor.pushUndoStop();\n\t\teditor.executeCommands(this.id, commands);\n\t\teditor.pushUndoStop();\n\t}\n}\n\n@editorAction\nclass MoveLinesUpAction extends AbstractMoveLinesAction {\n\tconstructor() {\n\t\tsuper(false, {\n\t\t\tid: 'editor.action.moveLinesUpAction',\n\t\t\tlabel: nls.localize('lines.moveUp', \"Move Line Up\"),\n\t\t\talias: 'Move Line Up',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.Alt | KeyCode.UpArrow,\n\t\t\t\tlinux: { primary: KeyMod.Alt | KeyCode.UpArrow }\n\t\t\t}\n\t\t});\n\t}\n}\n\n@editorAction\nclass MoveLinesDownAction extends AbstractMoveLinesAction {\n\tconstructor() {\n\t\tsuper(true, {\n\t\t\tid: 'editor.action.moveLinesDownAction',\n\t\t\tlabel: nls.localize('lines.moveDown', \"Move Line Down\"),\n\t\t\talias: 'Move Line Down',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.Alt | KeyCode.DownArrow,\n\t\t\t\tlinux: { primary: KeyMod.Alt | KeyCode.DownArrow }\n\t\t\t}\n\t\t});\n\t}\n}\n\nabstract class AbstractSortLinesAction extends EditorAction {\n\tprivate descending: boolean;\n\n\tconstructor(descending: boolean, opts: IActionOptions) {\n\t\tsuper(opts);\n\t\tthis.descending = descending;\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\n\t\tif (!SortLinesCommand.canRun(editor.getModel(), editor.getSelection(), this.descending)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar command = new SortLinesCommand(editor.getSelection(), this.descending);\n\n\t\teditor.pushUndoStop();\n\t\teditor.executeCommands(this.id, [command]);\n\t\teditor.pushUndoStop();\n\t}\n}\n\n@editorAction\nclass SortLinesAscendingAction extends AbstractSortLinesAction {\n\tconstructor() {\n\t\tsuper(false, {\n\t\t\tid: 'editor.action.sortLinesAscending',\n\t\t\tlabel: nls.localize('lines.sortAscending', \"Sort Lines Ascending\"),\n\t\t\talias: 'Sort Lines Ascending',\n\t\t\tprecondition: EditorContextKeys.writable\n\t\t});\n\t}\n}\n\n@editorAction\nclass SortLinesDescendingAction extends AbstractSortLinesAction {\n\tconstructor() {\n\t\tsuper(true, {\n\t\t\tid: 'editor.action.sortLinesDescending',\n\t\t\tlabel: nls.localize('lines.sortDescending', \"Sort Lines Descending\"),\n\t\t\talias: 'Sort Lines Descending',\n\t\t\tprecondition: EditorContextKeys.writable\n\t\t});\n\t}\n}\n\n@editorAction\nexport class TrimTrailingWhitespaceAction extends EditorAction {\n\n\tpublic static ID = 'editor.action.trimTrailingWhitespace';\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: TrimTrailingWhitespaceAction.ID,\n\t\t\tlabel: nls.localize('lines.trimTrailingWhitespace', \"Trim Trailing Whitespace\"),\n\t\t\talias: 'Trim Trailing Whitespace',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.KEY_X)\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\n\t\tvar command = new TrimTrailingWhitespaceCommand(editor.getSelection());\n\n\t\teditor.pushUndoStop();\n\t\teditor.executeCommands(this.id, [command]);\n\t\teditor.pushUndoStop();\n\t}\n}\n\n// delete lines\n\ninterface IDeleteLinesOperation {\n\tstartLineNumber: number;\n\tendLineNumber: number;\n\tpositionColumn: number;\n}\n\nabstract class AbstractRemoveLinesAction extends EditorAction {\n\t_getLinesToRemove(editor: ICommonCodeEditor): IDeleteLinesOperation[] {\n\t\t// Construct delete operations\n\t\tvar operations: IDeleteLinesOperation[] = editor.getSelections().map((s) => {\n\n\t\t\tvar endLineNumber = s.endLineNumber;\n\t\t\tif (s.startLineNumber < s.endLineNumber && s.endColumn === 1) {\n\t\t\t\tendLineNumber -= 1;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tstartLineNumber: s.startLineNumber,\n\t\t\t\tendLineNumber: endLineNumber,\n\t\t\t\tpositionColumn: s.positionColumn\n\t\t\t};\n\t\t});\n\n\t\t// Sort delete operations\n\t\toperations.sort((a, b) => {\n\t\t\treturn a.startLineNumber - b.startLineNumber;\n\t\t});\n\n\t\t// Merge delete operations on consecutive lines\n\t\tvar mergedOperations: IDeleteLinesOperation[] = [];\n\t\tvar previousOperation = operations[0];\n\t\tfor (var i = 1; i < operations.length; i++) {\n\t\t\tif (previousOperation.endLineNumber + 1 === operations[i].startLineNumber) {\n\t\t\t\t// Merge current operations into the previous one\n\t\t\t\tpreviousOperation.endLineNumber = operations[i].endLineNumber;\n\t\t\t} else {\n\t\t\t\t// Push previous operation\n\t\t\t\tmergedOperations.push(previousOperation);\n\t\t\t\tpreviousOperation = operations[i];\n\t\t\t}\n\t\t}\n\t\t// Push the last operation\n\t\tmergedOperations.push(previousOperation);\n\n\t\treturn mergedOperations;\n\t}\n}\n\n@editorAction\nclass DeleteLinesAction extends AbstractRemoveLinesAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.deleteLines',\n\t\t\tlabel: nls.localize('lines.delete', \"Delete Line\"),\n\t\t\talias: 'Delete Line',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_K\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\n\t\tvar ops = this._getLinesToRemove(editor);\n\n\t\t// Finally, construct the delete lines commands\n\t\tvar commands: ICommand[] = ops.map((op) => {\n\t\t\treturn new DeleteLinesCommand(op.startLineNumber, op.endLineNumber, op.positionColumn);\n\t\t});\n\n\t\teditor.pushUndoStop();\n\t\teditor.executeCommands(this.id, commands);\n\t\teditor.pushUndoStop();\n\t}\n}\n\n@editorAction\nexport class IndentLinesAction extends EditorAction {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.indentLines',\n\t\t\tlabel: nls.localize('lines.indent', \"Indent Line\"),\n\t\t\talias: 'Indent Line',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.US_CLOSE_SQUARE_BRACKET\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\t\teditor.pushUndoStop();\n\t\teditor.executeCommands(this.id, TypeOperations.indent(editor._getCursorConfiguration(), editor.getModel(), editor.getSelections()));\n\t\teditor.pushUndoStop();\n\t}\n}\n\n@editorAction\nclass OutdentLinesAction extends EditorAction {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.outdentLines',\n\t\t\tlabel: nls.localize('lines.outdent', \"Outdent Line\"),\n\t\t\talias: 'Outdent Line',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.US_OPEN_SQUARE_BRACKET\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\t\tCoreEditingCommands.Outdent.runEditorCommand(null, editor, null);\n\t}\n}\n\n@editorAction\nexport class InsertLineBeforeAction extends EditorAction {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.insertLineBefore',\n\t\t\tlabel: nls.localize('lines.insertBefore', \"Insert Line Above\"),\n\t\t\talias: 'Insert Line Above',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.Enter\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\t\teditor.pushUndoStop();\n\t\teditor.executeCommands(this.id, TypeOperations.lineInsertBefore(editor._getCursorConfiguration(), editor.getModel(), editor.getSelections()));\n\t}\n}\n\n@editorAction\nexport class InsertLineAfterAction extends EditorAction {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.insertLineAfter',\n\t\t\tlabel: nls.localize('lines.insertAfter', \"Insert Line Below\"),\n\t\t\talias: 'Insert Line Below',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.Enter\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\t\teditor.pushUndoStop();\n\t\teditor.executeCommands(this.id, TypeOperations.lineInsertAfter(editor._getCursorConfiguration(), editor.getModel(), editor.getSelections()));\n\t}\n}\n\nexport abstract class AbstractDeleteAllToBoundaryAction extends EditorAction {\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\t\tconst primaryCursor = editor.getSelection();\n\t\tlet rangesToDelete = this._getRangesToDelete(editor);\n\t\t// merge overlapping selections\n\t\tlet effectiveRanges: Range[] = [];\n\n\t\tfor (let i = 0, count = rangesToDelete.length - 1; i < count; i++) {\n\t\t\tlet range = rangesToDelete[i];\n\t\t\tlet nextRange = rangesToDelete[i + 1];\n\n\t\t\tif (Range.intersectRanges(range, nextRange) === null) {\n\t\t\t\teffectiveRanges.push(range);\n\t\t\t} else {\n\t\t\t\trangesToDelete[i + 1] = Range.plusRange(range, nextRange);\n\t\t\t}\n\t\t}\n\n\t\teffectiveRanges.push(rangesToDelete[rangesToDelete.length - 1]);\n\n\t\tlet endCursorState = this._getEndCursorState(primaryCursor, effectiveRanges);\n\t\tlet edits: IIdentifiedSingleEditOperation[] = effectiveRanges.map(range => {\n\t\t\tendCursorState.push(new Selection(range.startLineNumber, range.startColumn, range.startLineNumber, range.startColumn));\n\t\t\treturn EditOperation.replace(range, '');\n\t\t});\n\n\t\teditor.executeEdits(this.id, edits, endCursorState);\n\t}\n\n\t/**\n\t * Compute the cursor state after the edit operations were applied.\n\t */\n\tprotected abstract _getEndCursorState(primaryCursor: Range, rangesToDelete: Range[]): Selection[];\n\n\tprotected abstract _getRangesToDelete(editor: ICommonCodeEditor): Range[];\n}\n\n@editorAction\nexport class DeleteAllLeftAction extends AbstractDeleteAllToBoundaryAction {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'deleteAllLeft',\n\t\t\tlabel: nls.localize('lines.deleteAllLeft', \"Delete All Left\"),\n\t\t\talias: 'Delete All Left',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: null,\n\t\t\t\tmac: { primary: KeyMod.CtrlCmd | KeyCode.Backspace }\n\t\t\t}\n\t\t});\n\t}\n\n\t_getEndCursorState(primaryCursor: Range, rangesToDelete: Range[]): Selection[] {\n\t\tlet endPrimaryCursor: Selection;\n\t\tlet endCursorState: Selection[] = [];\n\n\t\tfor (let i = 0, len = rangesToDelete.length; i < len; i++) {\n\t\t\tlet range = rangesToDelete[i];\n\t\t\tlet endCursor = new Selection(rangesToDelete[i].startLineNumber, rangesToDelete[i].startColumn, rangesToDelete[i].startLineNumber, rangesToDelete[i].startColumn);\n\n\t\t\tif (range.intersectRanges(primaryCursor)) {\n\t\t\t\tendPrimaryCursor = endCursor;\n\t\t\t} else {\n\t\t\t\tendCursorState.push(endCursor);\n\t\t\t}\n\t\t}\n\n\t\tif (endPrimaryCursor) {\n\t\t\tendCursorState.unshift(endPrimaryCursor);\n\t\t}\n\n\t\treturn endCursorState;\n\t}\n\n\t_getRangesToDelete(editor: ICommonCodeEditor): Range[] {\n\t\tlet rangesToDelete: Range[] = editor.getSelections();\n\n\t\trangesToDelete.sort(Range.compareRangesUsingStarts);\n\t\trangesToDelete = rangesToDelete.map(selection => {\n\t\t\tif (selection.isEmpty()) {\n\t\t\t\treturn new Range(selection.startLineNumber, 1, selection.startLineNumber, selection.startColumn);\n\t\t\t} else {\n\t\t\t\treturn selection;\n\t\t\t}\n\t\t});\n\n\t\treturn rangesToDelete;\n\t}\n}\n\n@editorAction\nexport class DeleteAllRightAction extends AbstractDeleteAllToBoundaryAction {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'deleteAllRight',\n\t\t\tlabel: nls.localize('lines.deleteAllRight', \"Delete All Right\"),\n\t\t\talias: 'Delete All Right',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: null,\n\t\t\t\tmac: { primary: KeyMod.WinCtrl | KeyCode.KEY_K, secondary: [KeyMod.CtrlCmd | KeyCode.Delete] }\n\t\t\t}\n\t\t});\n\t}\n\n\t_getEndCursorState(primaryCursor: Range, rangesToDelete: Range[]): Selection[] {\n\t\tlet endPrimaryCursor: Selection;\n\t\tlet endCursorState: Selection[] = [];\n\t\tfor (let i = 0, len = rangesToDelete.length, offset = 0; i < len; i++) {\n\t\t\tlet range = rangesToDelete[i];\n\t\t\tlet endCursor = new Selection(range.startLineNumber - offset, range.startColumn, range.startLineNumber - offset, range.startColumn);\n\n\t\t\tif (range.intersectRanges(primaryCursor)) {\n\t\t\t\tendPrimaryCursor = endCursor;\n\t\t\t} else {\n\t\t\t\tendCursorState.push(endCursor);\n\t\t\t}\n\t\t}\n\n\t\tif (endPrimaryCursor) {\n\t\t\tendCursorState.unshift(endPrimaryCursor);\n\t\t}\n\n\t\treturn endCursorState;\n\t}\n\n\t_getRangesToDelete(editor: ICommonCodeEditor): Range[] {\n\t\tlet model = editor.getModel();\n\n\t\tlet rangesToDelete: Range[] = editor.getSelections().map((sel) => {\n\t\t\tif (sel.isEmpty()) {\n\t\t\t\tconst maxColumn = model.getLineMaxColumn(sel.startLineNumber);\n\n\t\t\t\tif (sel.startColumn === maxColumn) {\n\t\t\t\t\treturn new Range(sel.startLineNumber, sel.startColumn, sel.startLineNumber + 1, 1);\n\t\t\t\t} else {\n\t\t\t\t\treturn new Range(sel.startLineNumber, sel.startColumn, sel.startLineNumber, maxColumn);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn sel;\n\t\t});\n\n\t\trangesToDelete.sort(Range.compareRangesUsingStarts);\n\t\treturn rangesToDelete;\n\t}\n}\n\n@editorAction\nexport class JoinLinesAction extends EditorAction {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.joinLines',\n\t\t\tlabel: nls.localize('lines.joinLines', \"Join Lines\"),\n\t\t\talias: 'Join Lines',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: 0,\n\t\t\t\tmac: { primary: KeyMod.WinCtrl | KeyCode.KEY_J }\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\t\tlet selections = editor.getSelections();\n\t\tlet primaryCursor = editor.getSelection();\n\n\t\tselections.sort(Range.compareRangesUsingStarts);\n\t\tlet reducedSelections: Selection[] = [];\n\n\t\tlet lastSelection = selections.reduce((previousValue, currentValue) => {\n\t\t\tif (previousValue.isEmpty()) {\n\t\t\t\tif (previousValue.endLineNumber === currentValue.startLineNumber) {\n\t\t\t\t\tif (primaryCursor.equalsSelection(previousValue)) {\n\t\t\t\t\t\tprimaryCursor = currentValue;\n\t\t\t\t\t}\n\t\t\t\t\treturn currentValue;\n\t\t\t\t}\n\n\t\t\t\tif (currentValue.startLineNumber > previousValue.endLineNumber + 1) {\n\t\t\t\t\treducedSelections.push(previousValue);\n\t\t\t\t\treturn currentValue;\n\t\t\t\t} else {\n\t\t\t\t\treturn new Selection(previousValue.startLineNumber, previousValue.startColumn, currentValue.endLineNumber, currentValue.endColumn);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (currentValue.startLineNumber > previousValue.endLineNumber) {\n\t\t\t\t\treducedSelections.push(previousValue);\n\t\t\t\t\treturn currentValue;\n\t\t\t\t} else {\n\t\t\t\t\treturn new Selection(previousValue.startLineNumber, previousValue.startColumn, currentValue.endLineNumber, currentValue.endColumn);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treducedSelections.push(lastSelection);\n\n\t\tlet model = editor.getModel();\n\t\tlet edits = [];\n\t\tlet endCursorState = [];\n\t\tlet endPrimaryCursor = primaryCursor;\n\t\tlet lineOffset = 0;\n\n\t\tfor (let i = 0, len = reducedSelections.length; i < len; i++) {\n\t\t\tlet selection = reducedSelections[i];\n\t\t\tlet startLineNumber = selection.startLineNumber;\n\t\t\tlet startColumn = 1;\n\t\t\tlet endLineNumber: number,\n\t\t\t\tendColumn: number,\n\t\t\t\tcolumnDeltaOffset: number;\n\n\t\t\tlet selectionEndPositionOffset = model.getLineContent(selection.endLineNumber).length - selection.endColumn;\n\n\t\t\tif (selection.isEmpty() || selection.startLineNumber === selection.endLineNumber) {\n\t\t\t\tlet position = selection.getStartPosition();\n\t\t\t\tif (position.lineNumber < model.getLineCount()) {\n\t\t\t\t\tendLineNumber = startLineNumber + 1;\n\t\t\t\t\tendColumn = model.getLineMaxColumn(endLineNumber);\n\t\t\t\t} else {\n\t\t\t\t\tendLineNumber = position.lineNumber;\n\t\t\t\t\tendColumn = model.getLineMaxColumn(position.lineNumber);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tendLineNumber = selection.endLineNumber;\n\t\t\t\tendColumn = model.getLineMaxColumn(endLineNumber);\n\t\t\t}\n\n\t\t\tlet trimmedLinesContent = model.getLineContent(startLineNumber);\n\n\t\t\tfor (let i = startLineNumber + 1; i <= endLineNumber; i++) {\n\t\t\t\tlet lineText = model.getLineContent(i);\n\t\t\t\tlet firstNonWhitespaceIdx = model.getLineFirstNonWhitespaceColumn(i);\n\n\t\t\t\tif (firstNonWhitespaceIdx >= 1) {\n\t\t\t\t\tlet insertSpace = true;\n\t\t\t\t\tif (trimmedLinesContent === '') {\n\t\t\t\t\t\tinsertSpace = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (insertSpace && (trimmedLinesContent.charAt(trimmedLinesContent.length - 1) === ' ' ||\n\t\t\t\t\t\ttrimmedLinesContent.charAt(trimmedLinesContent.length - 1) === '\\t')) {\n\t\t\t\t\t\tinsertSpace = false;\n\t\t\t\t\t\ttrimmedLinesContent = trimmedLinesContent.replace(/[\\s\\uFEFF\\xA0]+$/g, ' ');\n\t\t\t\t\t}\n\n\t\t\t\t\tlet lineTextWithoutIndent = lineText.substr(firstNonWhitespaceIdx - 1);\n\n\t\t\t\t\ttrimmedLinesContent += (insertSpace ? ' ' : '') + lineTextWithoutIndent;\n\n\t\t\t\t\tif (insertSpace) {\n\t\t\t\t\t\tcolumnDeltaOffset = lineTextWithoutIndent.length + 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcolumnDeltaOffset = lineTextWithoutIndent.length;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcolumnDeltaOffset = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet deleteSelection = new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n\n\t\t\tif (!deleteSelection.isEmpty()) {\n\t\t\t\tlet resultSelection: Selection;\n\n\t\t\t\tif (selection.isEmpty()) {\n\t\t\t\t\tedits.push(EditOperation.replace(deleteSelection, trimmedLinesContent));\n\t\t\t\t\tresultSelection = new Selection(deleteSelection.startLineNumber - lineOffset, trimmedLinesContent.length - columnDeltaOffset + 1, startLineNumber - lineOffset, trimmedLinesContent.length - columnDeltaOffset + 1);\n\t\t\t\t} else {\n\t\t\t\t\tif (selection.startLineNumber === selection.endLineNumber) {\n\t\t\t\t\t\tedits.push(EditOperation.replace(deleteSelection, trimmedLinesContent));\n\t\t\t\t\t\tresultSelection = new Selection(selection.startLineNumber - lineOffset, selection.startColumn,\n\t\t\t\t\t\t\tselection.endLineNumber - lineOffset, selection.endColumn);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tedits.push(EditOperation.replace(deleteSelection, trimmedLinesContent));\n\t\t\t\t\t\tresultSelection = new Selection(selection.startLineNumber - lineOffset, selection.startColumn,\n\t\t\t\t\t\t\tselection.startLineNumber - lineOffset, trimmedLinesContent.length - selectionEndPositionOffset);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (Range.intersectRanges(deleteSelection, primaryCursor) !== null) {\n\t\t\t\t\tendPrimaryCursor = resultSelection;\n\t\t\t\t} else {\n\t\t\t\t\tendCursorState.push(resultSelection);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlineOffset += deleteSelection.endLineNumber - deleteSelection.startLineNumber;\n\t\t}\n\n\t\tendCursorState.unshift(endPrimaryCursor);\n\t\teditor.executeEdits(this.id, edits, endCursorState);\n\n\t}\n}\n\n@editorAction\nexport class TransposeAction extends EditorAction {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.transpose',\n\t\t\tlabel: nls.localize('editor.transpose', \"Transpose characters around the cursor\"),\n\t\t\talias: 'Transpose characters around the cursor',\n\t\t\tprecondition: EditorContextKeys.writable\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\t\tlet selections = editor.getSelections();\n\t\tlet model = editor.getModel();\n\t\tlet commands: ICommand[] = [];\n\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tlet selection = selections[i];\n\n\t\t\tif (!selection.isEmpty()) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet cursor = selection.getStartPosition();\n\t\t\tlet maxColumn = model.getLineMaxColumn(cursor.lineNumber);\n\n\t\t\tif (cursor.column >= maxColumn) {\n\t\t\t\tif (cursor.lineNumber === model.getLineCount()) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// The cursor is at the end of current line and current line is not empty\n\t\t\t\t// then we transpose the character before the cursor and the line break if there is any following line.\n\t\t\t\tlet deleteSelection = new Range(cursor.lineNumber, Math.max(1, cursor.column - 1), cursor.lineNumber + 1, 1);\n\t\t\t\tlet chars = model.getValueInRange(deleteSelection).split('').reverse().join('');\n\n\t\t\t\tcommands.push(new ReplaceCommand(new Selection(cursor.lineNumber, Math.max(1, cursor.column - 1), cursor.lineNumber + 1, 1), chars));\n\t\t\t} else {\n\t\t\t\tlet deleteSelection = new Range(cursor.lineNumber, Math.max(1, cursor.column - 1), cursor.lineNumber, cursor.column + 1);\n\t\t\t\tlet chars = model.getValueInRange(deleteSelection).split('').reverse().join('');\n\t\t\t\tcommands.push(new ReplaceCommandThatPreservesSelection(deleteSelection, chars,\n\t\t\t\t\tnew Selection(cursor.lineNumber, cursor.column + 1, cursor.lineNumber, cursor.column + 1)));\n\t\t\t}\n\t\t}\n\n\t\teditor.pushUndoStop();\n\t\teditor.executeCommands(this.id, commands);\n\t\teditor.pushUndoStop();\n\t}\n}\n\nexport abstract class AbstractCaseAction extends EditorAction {\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\t\tlet selections = editor.getSelections();\n\t\tlet model = editor.getModel();\n\t\tlet commands: ICommand[] = [];\n\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tlet selection = selections[i];\n\t\t\tif (selection.isEmpty()) {\n\t\t\t\tlet cursor = selection.getStartPosition();\n\t\t\t\tlet word = model.getWordAtPosition(cursor);\n\n\t\t\t\tif (!word) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet wordRange = new Range(cursor.lineNumber, word.startColumn, cursor.lineNumber, word.endColumn);\n\t\t\t\tlet text = model.getValueInRange(wordRange);\n\t\t\t\tcommands.push(new ReplaceCommandThatPreservesSelection(wordRange, this._modifyText(text),\n\t\t\t\t\tnew Selection(cursor.lineNumber, cursor.column, cursor.lineNumber, cursor.column)));\n\n\t\t\t} else {\n\t\t\t\tlet text = model.getValueInRange(selection);\n\t\t\t\tcommands.push(new ReplaceCommandThatPreservesSelection(selection, this._modifyText(text), selection));\n\t\t\t}\n\t\t}\n\n\t\teditor.pushUndoStop();\n\t\teditor.executeCommands(this.id, commands);\n\t\teditor.pushUndoStop();\n\t}\n\n\tprotected abstract _modifyText(text: string): string;\n}\n\n@editorAction\nexport class UpperCaseAction extends AbstractCaseAction {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.transformToUppercase',\n\t\t\tlabel: nls.localize('editor.transformToUppercase', \"Transform to Uppercase\"),\n\t\t\talias: 'Transform to Uppercase',\n\t\t\tprecondition: EditorContextKeys.writable\n\t\t});\n\t}\n\n\tprotected _modifyText(text: string): string {\n\t\treturn text.toLocaleUpperCase();\n\t}\n}\n\n@editorAction\nexport class LowerCaseAction extends AbstractCaseAction {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.transformToLowercase',\n\t\t\tlabel: nls.localize('editor.transformToLowercase', \"Transform to Lowercase\"),\n\t\t\talias: 'Transform to Lowercase',\n\t\t\tprecondition: EditorContextKeys.writable\n\t\t});\n\t}\n\n\tprotected _modifyText(text: string): string {\n\t\treturn text.toLocaleLowerCase();\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { ICommonCodeEditor } from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { editorAction, ServicesAccessor, EditorAction } from 'vs/editor/common/editorCommonExtensions';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { CursorChangeReason } from 'vs/editor/common/controller/cursorEvents';\nimport { CursorMoveCommands } from 'vs/editor/common/controller/cursorMoveCommands';\nimport { CursorState, RevealTarget } from 'vs/editor/common/controller/cursorCommon';\n\n@editorAction\nexport class InsertCursorAbove extends EditorAction {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.insertCursorAbove',\n\t\t\tlabel: nls.localize('mutlicursor.insertAbove', \"Add Cursor Above\"),\n\t\t\talias: 'Add Cursor Above',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.UpArrow,\n\t\t\t\tlinux: {\n\t\t\t\t\tprimary: KeyMod.Shift | KeyMod.Alt | KeyCode.UpArrow,\n\t\t\t\t\tsecondary: [KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.UpArrow]\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor, args: any): void {\n\t\tconst cursors = editor._getCursors();\n\t\tconst context = cursors.context;\n\n\t\tif (context.config.readOnly) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontext.model.pushStackElement();\n\t\tcursors.setStates(\n\t\t\targs.source,\n\t\t\tCursorChangeReason.Explicit,\n\t\t\tCursorState.ensureInEditableRange(\n\t\t\t\tcontext,\n\t\t\t\tCursorMoveCommands.addCursorUp(context, cursors.getAll())\n\t\t\t)\n\t\t);\n\t\tcursors.reveal(true, RevealTarget.TopMost);\n\t}\n}\n\n@editorAction\nexport class InsertCursorBelow extends EditorAction {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.insertCursorBelow',\n\t\t\tlabel: nls.localize('mutlicursor.insertBelow', \"Add Cursor Below\"),\n\t\t\talias: 'Add Cursor Below',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.DownArrow,\n\t\t\t\tlinux: {\n\t\t\t\t\tprimary: KeyMod.Shift | KeyMod.Alt | KeyCode.DownArrow,\n\t\t\t\t\tsecondary: [KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.DownArrow]\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor, args: any): void {\n\t\tconst cursors = editor._getCursors();\n\t\tconst context = cursors.context;\n\n\t\tif (context.config.readOnly) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontext.model.pushStackElement();\n\t\tcursors.setStates(\n\t\t\targs.source,\n\t\t\tCursorChangeReason.Explicit,\n\t\t\tCursorState.ensureInEditableRange(\n\t\t\t\tcontext,\n\t\t\t\tCursorMoveCommands.addCursorDown(context, cursors.getAll())\n\t\t\t)\n\t\t);\n\t\tcursors.reveal(true, RevealTarget.BottomMost);\n\t}\n}\n\n@editorAction\nclass InsertCursorAtEndOfEachLineSelected extends EditorAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.insertCursorAtEndOfEachLineSelected',\n\t\t\tlabel: nls.localize('mutlicursor.insertAtEndOfEachLineSelected', \"Add Cursors to Line Ends\"),\n\t\t\talias: 'Add Cursors to Line Ends',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.Shift | KeyMod.Alt | KeyCode.KEY_I\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate getCursorsForSelection(selection: Selection, editor: ICommonCodeEditor): Selection[] {\n\t\tif (selection.isEmpty()) {\n\t\t\treturn [];\n\t\t}\n\n\t\tlet model = editor.getModel();\n\t\tlet newSelections: Selection[] = [];\n\t\tfor (let i = selection.startLineNumber; i < selection.endLineNumber; i++) {\n\t\t\tlet currentLineMaxColumn = model.getLineMaxColumn(i);\n\t\t\tnewSelections.push(new Selection(i, currentLineMaxColumn, i, currentLineMaxColumn));\n\t\t}\n\t\tif (selection.endColumn > 1) {\n\t\t\tnewSelections.push(new Selection(selection.endLineNumber, selection.endColumn, selection.endLineNumber, selection.endColumn));\n\t\t}\n\n\t\treturn newSelections;\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\t\tlet selections = editor.getSelections();\n\t\tlet newSelections = selections\n\t\t\t.map((selection) => this.getCursorsForSelection(selection, editor))\n\t\t\t.reduce((prev, curr) => { return prev.concat(curr); });\n\n\t\tif (newSelections.length > 0) {\n\t\t\teditor.setSelections(newSelections);\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { onUnexpectedExternalError } from 'vs/base/common/errors';\nimport { IReadOnlyModel } from 'vs/editor/common/editorCommon';\nimport { CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';\nimport { SignatureHelp, SignatureHelpProviderRegistry } from 'vs/editor/common/modes';\nimport { asWinJsPromise, sequence } from 'vs/base/common/async';\nimport { Position } from 'vs/editor/common/core/position';\nimport { RawContextKey } from 'vs/platform/contextkey/common/contextkey';\n\nexport const Context = {\n\tVisible: new RawContextKey('parameterHintsVisible', false),\n\tMultipleSignatures: new RawContextKey('parameterHintsMultipleSignatures', false),\n};\n\nexport function provideSignatureHelp(model: IReadOnlyModel, position: Position): TPromise {\n\n\tconst supports = SignatureHelpProviderRegistry.ordered(model);\n\tlet result: SignatureHelp;\n\n\treturn sequence(supports.map(support => () => {\n\n\t\tif (result) {\n\t\t\t// stop when there is a result\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn asWinJsPromise(token => support.provideSignatureHelp(model, position, token)).then(thisResult => {\n\t\t\tresult = thisResult;\n\t\t}, onUnexpectedExternalError);\n\n\t})).then(() => result);\n}\n\nCommonEditorRegistry.registerDefaultLanguageCommand('_executeSignatureHelpProvider', provideSignatureHelp);","/*---------------------------------------------------------------------------------------------\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'use strict';\n\nimport URI from 'vs/base/common/uri';\nimport { IReadOnlyModel } from 'vs/editor/common/editorCommon';\nimport { Range } from 'vs/editor/common/core/range';\nimport { CodeAction, CodeActionProviderRegistry } from 'vs/editor/common/modes';\nimport { asWinJsPromise } from 'vs/base/common/async';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { onUnexpectedExternalError, illegalArgument } from 'vs/base/common/errors';\nimport { IModelService } from 'vs/editor/common/services/modelService';\nimport { CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';\n\nexport function getCodeActions(model: IReadOnlyModel, range: Range): TPromise {\n\n\tconst allResults: CodeAction[] = [];\n\tconst promises = CodeActionProviderRegistry.all(model).map(support => {\n\t\treturn asWinJsPromise(token => support.provideCodeActions(model, range, token)).then(result => {\n\t\t\tif (Array.isArray(result)) {\n\t\t\t\tallResults.push(...result);\n\t\t\t}\n\t\t}, err => {\n\t\t\tonUnexpectedExternalError(err);\n\t\t});\n\t});\n\n\treturn TPromise.join(promises).then(() => allResults);\n}\n\nCommonEditorRegistry.registerLanguageCommand('_executeCodeActionProvider', function (accessor, args) {\n\n\tconst { resource, range } = args;\n\tif (!(resource instanceof URI) || !Range.isIRange(range)) {\n\t\tthrow illegalArgument();\n\t}\n\n\tconst model = accessor.get(IModelService).getModel(resource);\n\tif (!model) {\n\t\tthrow illegalArgument();\n\t}\n\n\treturn getCodeActions(model, model.validateRange(range));\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'use strict';\n\nimport * as arrays from 'vs/base/common/arrays';\nimport Event, { Emitter, debounceEvent } from 'vs/base/common/event';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport URI from 'vs/base/common/uri';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IMarker, IMarkerService } from 'vs/platform/markers/common/markers';\nimport { Range } from 'vs/editor/common/core/range';\nimport { ICommonCodeEditor } from 'vs/editor/common/editorCommon';\nimport { CodeActionProviderRegistry, CodeAction } from 'vs/editor/common/modes';\nimport { getCodeActions } from './quickFix';\nimport { Position } from 'vs/editor/common/core/position';\n\n\nexport class QuickFixOracle {\n\n\tprivate _disposables: IDisposable[] = [];\n\tprivate _currentRange: Range;\n\n\tconstructor(\n\t\tprivate _editor: ICommonCodeEditor,\n\t\tprivate _markerService: IMarkerService,\n\t\tprivate _signalChange: (e: QuickFixComputeEvent) => any,\n\t\tdelay: number = 250\n\t) {\n\t\tthis._disposables.push(\n\t\t\tdebounceEvent(this._markerService.onMarkerChanged, (last, cur) => last ? last.concat(cur) : cur, delay / 2)(e => this._onMarkerChanges(e)),\n\t\t\tdebounceEvent(this._editor.onDidChangeCursorPosition, last => last, delay)(e => this._onCursorChange())\n\t\t);\n\t}\n\n\tdispose(): void {\n\t\tthis._disposables = dispose(this._disposables);\n\t}\n\n\ttrigger(type: 'manual' | 'auto'): void {\n\t\tlet range = this._rangeAtPosition();\n\t\tif (!range) {\n\t\t\trange = this._editor.getSelection();\n\t\t}\n\t\tthis._signalChange({\n\t\t\ttype,\n\t\t\trange,\n\t\t\tposition: this._editor.getPosition(),\n\t\t\tfixes: range && getCodeActions(this._editor.getModel(), this._editor.getModel().validateRange(range))\n\t\t});\n\n\t}\n\n\tprivate _onMarkerChanges(resources: URI[]): void {\n\t\tconst { uri } = this._editor.getModel();\n\t\tfor (const resource of resources) {\n\t\t\tif (resource.toString() === uri.toString()) {\n\t\t\t\tthis._currentRange = undefined;\n\t\t\t\tthis._onCursorChange();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _onCursorChange(): void {\n\t\tconst range = this._rangeAtPosition();\n\t\tif (!Range.equalsRange(this._currentRange, range)) {\n\t\t\tthis._currentRange = range;\n\t\t\tthis._signalChange({\n\t\t\t\ttype: 'auto',\n\t\t\t\trange,\n\t\t\t\tposition: this._editor.getPosition(),\n\t\t\t\tfixes: range && getCodeActions(this._editor.getModel(), this._editor.getModel().validateRange(range))\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate _rangeAtPosition(): Range {\n\n\t\t// (1) check with non empty selection\n\t\tconst selection = this._editor.getSelection();\n\t\tif (!selection.isEmpty()) {\n\t\t\treturn selection;\n\t\t}\n\n\t\t// (2) check with diagnostics markers\n\t\tconst marker = this._markerAtPosition();\n\t\tif (marker) {\n\t\t\treturn Range.lift(marker);\n\t\t}\n\n\t\t// (3) check with word\n\t\treturn this._wordAtPosition();\n\t}\n\n\tprivate _markerAtPosition(): IMarker {\n\n\t\tconst position = this._editor.getPosition();\n\t\tconst { uri } = this._editor.getModel();\n\t\tconst markers = this._markerService.read({ resource: uri }).sort(Range.compareRangesUsingStarts);\n\n\t\tlet idx = arrays.findFirst(markers, marker => marker.endLineNumber >= position.lineNumber);\n\t\twhile (idx < markers.length && markers[idx].endLineNumber >= position.lineNumber) {\n\t\t\tconst marker = markers[idx];\n\t\t\tif (Range.containsPosition(marker, position)) {\n\t\t\t\treturn marker;\n\t\t\t}\n\t\t\tidx++;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate _wordAtPosition(): Range {\n\t\tconst pos = this._editor.getPosition();\n\t\tconst model = this._editor.getModel();\n\t\tconst info = model.getWordAtPosition(pos);\n\t\tif (info) {\n\t\t\treturn new Range(pos.lineNumber, info.startColumn, pos.lineNumber, info.endColumn);\n\t\t}\n\t\treturn undefined;\n\t}\n}\n\nexport interface QuickFixComputeEvent {\n\ttype: 'auto' | 'manual';\n\trange: Range;\n\tposition: Position;\n\tfixes: TPromise;\n}\n\nexport class QuickFixModel {\n\n\tprivate _editor: ICommonCodeEditor;\n\tprivate _markerService: IMarkerService;\n\tprivate _quickFixOracle: QuickFixOracle;\n\tprivate _onDidChangeFixes = new Emitter();\n\tprivate _disposables: IDisposable[] = [];\n\n\tconstructor(editor: ICommonCodeEditor, markerService: IMarkerService) {\n\t\tthis._editor = editor;\n\t\tthis._markerService = markerService;\n\n\t\tthis._disposables.push(this._editor.onDidChangeModel(() => this._update()));\n\t\tthis._disposables.push(this._editor.onDidChangeModelLanguage(() => this._update()));\n\t\tthis._disposables.push(CodeActionProviderRegistry.onDidChange(this._update, this));\n\n\t\tthis._update();\n\t}\n\n\tdispose(): void {\n\t\tthis._disposables = dispose(this._disposables);\n\t\tdispose(this._quickFixOracle);\n\t}\n\n\tget onDidChangeFixes(): Event {\n\t\treturn this._onDidChangeFixes.event;\n\t}\n\n\tprivate _update(): void {\n\n\t\tif (this._quickFixOracle) {\n\t\t\tthis._quickFixOracle.dispose();\n\t\t\tthis._quickFixOracle = undefined;\n\t\t\tthis._onDidChangeFixes.fire(undefined);\n\t\t}\n\n\t\tif (this._editor.getModel()\n\t\t\t&& CodeActionProviderRegistry.has(this._editor.getModel())\n\t\t\t&& !this._editor.getConfiguration().readOnly) {\n\n\t\t\tthis._quickFixOracle = new QuickFixOracle(this._editor, this._markerService, p => this._onDidChangeFixes.fire(p));\n\t\t\tthis._quickFixOracle.trigger('auto');\n\t\t}\n\t}\n\n\ttrigger(type: 'auto' | 'manual'): void {\n\t\tif (this._quickFixOracle) {\n\t\t\tthis._quickFixOracle.trigger(type);\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { ICommandService } from 'vs/platform/commands/common/commands';\nimport { IContextMenuService } from 'vs/platform/contextview/browser/contextView';\nimport { ContextKeyExpr, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';\nimport { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';\nimport { IMarkerService } from 'vs/platform/markers/common/markers';\nimport { ICommonCodeEditor, IEditorContribution, IReadOnlyModel } from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { Range } from 'vs/editor/common/core/range';\nimport { editorAction, ServicesAccessor, EditorAction } from 'vs/editor/common/editorCommonExtensions';\nimport { ICodeEditor } from 'vs/editor/browser/editorBrowser';\nimport { editorContribution } from 'vs/editor/browser/editorBrowserExtensions';\nimport { CodeAction, CodeActionProviderRegistry } from 'vs/editor/common/modes';\nimport { asWinJsPromise } from 'vs/base/common/async';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { onUnexpectedExternalError } from 'vs/base/common/errors';\nimport { QuickFixContextMenu } from './quickFixWidget';\nimport { LightBulbWidget } from './lightBulbWidget';\nimport { QuickFixModel, QuickFixComputeEvent } from './quickFixModel';\n\n@editorContribution\nexport class QuickFixController implements IEditorContribution {\n\n\tprivate static ID = 'editor.contrib.quickFixController';\n\n\tpublic static get(editor: ICommonCodeEditor): QuickFixController {\n\t\treturn editor.getContribution(QuickFixController.ID);\n\t}\n\n\tprivate _editor: ICodeEditor;\n\tprivate _model: QuickFixModel;\n\tprivate _quickFixContextMenu: QuickFixContextMenu;\n\tprivate _lightBulbWidget: LightBulbWidget;\n\tprivate _disposables: IDisposable[] = [];\n\n\tconstructor(editor: ICodeEditor,\n\t\t@IMarkerService markerService: IMarkerService,\n\t\t@IContextKeyService contextKeyService: IContextKeyService,\n\t\t@ICommandService commandService: ICommandService,\n\t\t@IContextMenuService contextMenuService: IContextMenuService,\n\t\t@IKeybindingService private _keybindingService: IKeybindingService\n\t) {\n\t\tthis._editor = editor;\n\t\tthis._model = new QuickFixModel(this._editor, markerService);\n\t\tthis._quickFixContextMenu = new QuickFixContextMenu(editor, contextMenuService, commandService);\n\t\tthis._lightBulbWidget = new LightBulbWidget(editor);\n\n\t\tthis._updateLightBulbTitle();\n\n\t\tthis._disposables.push(\n\t\t\tthis._quickFixContextMenu.onDidExecuteCodeAction(_ => this._model.trigger('auto')),\n\t\t\tthis._lightBulbWidget.onClick(this._handleLightBulbSelect, this),\n\t\t\tthis._model.onDidChangeFixes(e => this._onQuickFixEvent(e)),\n\t\t\tthis._keybindingService.onDidUpdateKeybindings(this._updateLightBulbTitle, this)\n\t\t);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._model.dispose();\n\t\tdispose(this._disposables);\n\t}\n\n\tprivate _onQuickFixEvent(e: QuickFixComputeEvent): void {\n\t\tif (e && e.type === 'manual') {\n\t\t\tthis._quickFixContextMenu.show(e.fixes, e.position);\n\n\t\t} else if (e && e.fixes) {\n\t\t\t// auto magically triggered\n\t\t\t// * update an existing list of code actions\n\t\t\t// * manage light bulb\n\t\t\tif (this._quickFixContextMenu.isVisible) {\n\t\t\t\tthis._quickFixContextMenu.show(e.fixes, e.position);\n\t\t\t} else {\n\t\t\t\tthis._lightBulbWidget.model = e;\n\t\t\t}\n\t\t} else {\n\t\t\tthis._lightBulbWidget.hide();\n\t\t}\n\t}\n\n\tpublic getId(): string {\n\t\treturn QuickFixController.ID;\n\t}\n\n\tprivate _handleLightBulbSelect(coords: { x: number, y: number }): void {\n\t\tthis._quickFixContextMenu.show(this._lightBulbWidget.model.fixes, coords);\n\t}\n\n\tpublic triggerFromEditorSelection(): void {\n\t\tthis._model.trigger('manual');\n\t}\n\n\tprivate _updateLightBulbTitle(): void {\n\t\tconst kb = this._keybindingService.lookupKeybinding(QuickFixAction.Id);\n\t\tlet title: string;\n\t\tif (kb) {\n\t\t\ttitle = nls.localize('quickFixWithKb', \"Show Fixes ({0})\", kb.getLabel());\n\t\t} else {\n\t\t\ttitle = nls.localize('quickFix', \"Show Fixes\");\n\t\t}\n\t\tthis._lightBulbWidget.title = title;\n\t}\n}\n\n@editorAction\nexport class QuickFixAction extends EditorAction {\n\n\tstatic Id = 'editor.action.quickFix';\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: QuickFixAction.Id,\n\t\t\tlabel: nls.localize('quickfix.trigger.label', \"Quick Fix\"),\n\t\t\talias: 'Quick Fix',\n\t\t\tprecondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasCodeActionsProvider),\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.US_DOT\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\t\tlet controller = QuickFixController.get(editor);\n\t\tif (controller) {\n\t\t\tcontroller.triggerFromEditorSelection();\n\t\t}\n\t}\n}\n\n\nexport function getCodeActions(model: IReadOnlyModel, range: Range): TPromise {\n\n\tconst allResults: CodeAction[] = [];\n\tconst promises = CodeActionProviderRegistry.all(model).map(support => {\n\t\treturn asWinJsPromise(token => support.provideCodeActions(model, range, token)).then(result => {\n\t\t\tif (Array.isArray(result)) {\n\t\t\t\tallResults.push(...result);\n\t\t\t}\n\t\t}, err => {\n\t\t\tonUnexpectedExternalError(err);\n\t\t});\n\t});\n\n\treturn TPromise.join(promises).then(() => allResults);\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'use strict';\n\nimport { illegalArgument, onUnexpectedExternalError } from 'vs/base/common/errors';\nimport URI from 'vs/base/common/uri';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { Range } from 'vs/editor/common/core/range';\nimport { IModel } from 'vs/editor/common/editorCommon';\nimport { CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';\nimport { SymbolInformation, DocumentSymbolProviderRegistry, IOutline } from 'vs/editor/common/modes';\nimport { IModelService } from 'vs/editor/common/services/modelService';\nimport { asWinJsPromise } from 'vs/base/common/async';\n\nexport function getDocumentSymbols(model: IModel): TPromise {\n\n\tlet entries: SymbolInformation[] = [];\n\n\tlet promises = DocumentSymbolProviderRegistry.all(model).map(support => {\n\n\t\treturn asWinJsPromise((token) => {\n\t\t\treturn support.provideDocumentSymbols(model, token);\n\t\t}).then(result => {\n\t\t\tif (Array.isArray(result)) {\n\t\t\t\tentries.push(...result);\n\t\t\t}\n\t\t}, err => {\n\t\t\tonUnexpectedExternalError(err);\n\t\t});\n\t});\n\n\treturn TPromise.join(promises).then(() => {\n\t\tlet flatEntries: SymbolInformation[] = [];\n\t\tflatten(flatEntries, entries, '');\n\t\tflatEntries.sort(compareEntriesUsingStart);\n\n\t\treturn {\n\t\t\tentries: flatEntries,\n\t\t};\n\t});\n}\n\nfunction compareEntriesUsingStart(a: SymbolInformation, b: SymbolInformation): number {\n\treturn Range.compareRangesUsingStarts(Range.lift(a.location.range), Range.lift(b.location.range));\n}\n\nfunction flatten(bucket: SymbolInformation[], entries: SymbolInformation[], overrideContainerLabel: string): void {\n\tfor (let entry of entries) {\n\t\tbucket.push({\n\t\t\tkind: entry.kind,\n\t\t\tlocation: entry.location,\n\t\t\tname: entry.name,\n\t\t\tcontainerName: entry.containerName || overrideContainerLabel\n\t\t});\n\t}\n}\n\n\nCommonEditorRegistry.registerLanguageCommand('_executeDocumentSymbolProvider', function (accessor, args) {\n\tconst { resource } = args;\n\tif (!(resource instanceof URI)) {\n\t\tthrow illegalArgument('resource');\n\t}\n\tconst model = accessor.get(IModelService).getModel(resource);\n\tif (!model) {\n\t\tthrow illegalArgument('resource');\n\t}\n\treturn getDocumentSymbols(model);\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'use strict';\n\nimport * as nls from 'vs/nls';\nimport * as arrays from 'vs/base/common/arrays';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';\nimport { Range } from 'vs/editor/common/core/range';\nimport { ICommonCodeEditor, IEditorContribution } from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { editorAction, ServicesAccessor, IActionOptions, EditorAction, commonEditorContribution } from 'vs/editor/common/editorCommonExtensions';\nimport { TokenSelectionSupport, ILogicalSelectionEntry } from './tokenSelectionSupport';\nimport { ICursorPositionChangedEvent } from 'vs/editor/common/controller/cursorEvents';\n\n// --- selection state machine\n\nclass State {\n\n\tpublic editor: ICommonCodeEditor;\n\tpublic next: State;\n\tpublic previous: State;\n\tpublic selection: Range;\n\n\tconstructor(editor: ICommonCodeEditor) {\n\t\tthis.editor = editor;\n\t\tthis.next = null;\n\t\tthis.previous = null;\n\t\tthis.selection = editor.getSelection();\n\t}\n}\n\n// --- shared state between grow and shrink actions\nvar state: State = null;\nvar ignoreSelection = false;\n\n// -- action implementation\n\n@commonEditorContribution\nclass SmartSelectController implements IEditorContribution {\n\n\tprivate static ID = 'editor.contrib.smartSelectController';\n\n\tpublic static get(editor: ICommonCodeEditor): SmartSelectController {\n\t\treturn editor.getContribution(SmartSelectController.ID);\n\t}\n\n\tprivate _tokenSelectionSupport: TokenSelectionSupport;\n\n\tconstructor(\n\t\tprivate editor: ICommonCodeEditor,\n\t\t@IInstantiationService instantiationService: IInstantiationService\n\t) {\n\t\tthis._tokenSelectionSupport = instantiationService.createInstance(TokenSelectionSupport);\n\t}\n\n\tpublic dispose(): void {\n\t}\n\n\tpublic getId(): string {\n\t\treturn SmartSelectController.ID;\n\t}\n\n\tpublic run(forward: boolean): TPromise {\n\n\t\tvar selection = this.editor.getSelection();\n\t\tvar model = this.editor.getModel();\n\n\t\t// forget about current state\n\t\tif (state) {\n\t\t\tif (state.editor !== this.editor) {\n\t\t\t\tstate = null;\n\t\t\t}\n\t\t}\n\n\t\tvar promise: TPromise = TPromise.as(null);\n\t\tif (!state) {\n\t\t\tpromise = this._tokenSelectionSupport.getRangesToPosition(model.uri, selection.getStartPosition()).then((elements: ILogicalSelectionEntry[]) => {\n\n\t\t\t\tif (arrays.isFalsyOrEmpty(elements)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar lastState: State;\n\t\t\t\telements.filter((element) => {\n\t\t\t\t\t// filter ranges inside the selection\n\t\t\t\t\tvar selection = this.editor.getSelection();\n\t\t\t\t\tvar range = new Range(element.range.startLineNumber, element.range.startColumn, element.range.endLineNumber, element.range.endColumn);\n\t\t\t\t\treturn range.containsPosition(selection.getStartPosition()) && range.containsPosition(selection.getEndPosition());\n\n\t\t\t\t}).forEach((element) => {\n\t\t\t\t\t// create ranges\n\t\t\t\t\tvar range = element.range;\n\t\t\t\t\tvar state = new State(this.editor);\n\t\t\t\t\tstate.selection = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);\n\t\t\t\t\tif (lastState) {\n\t\t\t\t\t\tstate.next = lastState;\n\t\t\t\t\t\tlastState.previous = state;\n\t\t\t\t\t}\n\t\t\t\t\tlastState = state;\n\t\t\t\t});\n\n\t\t\t\t// insert current selection\n\t\t\t\tvar editorState = new State(this.editor);\n\t\t\t\teditorState.next = lastState;\n\t\t\t\tif (lastState) {\n\t\t\t\t\tlastState.previous = editorState;\n\t\t\t\t}\n\t\t\t\tstate = editorState;\n\n\t\t\t\t// listen to caret move and forget about state\n\t\t\t\tvar unhook = this.editor.onDidChangeCursorPosition((e: ICursorPositionChangedEvent) => {\n\t\t\t\t\tif (ignoreSelection) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tstate = null;\n\t\t\t\t\tunhook.dispose();\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn promise.then(() => {\n\n\t\t\tif (!state) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tstate = forward ? state.next : state.previous;\n\t\t\tif (!state) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tignoreSelection = true;\n\t\t\ttry {\n\t\t\t\tthis.editor.setSelection(state.selection);\n\t\t\t} finally {\n\t\t\t\tignoreSelection = false;\n\t\t\t}\n\n\t\t\treturn;\n\t\t});\n\t}\n}\n\nabstract class AbstractSmartSelect extends EditorAction {\n\n\tprivate _forward: boolean;\n\n\tconstructor(forward: boolean, opts: IActionOptions) {\n\t\tsuper(opts);\n\t\tthis._forward = forward;\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): TPromise {\n\t\tlet controller = SmartSelectController.get(editor);\n\t\tif (controller) {\n\t\t\treturn controller.run(this._forward);\n\t\t}\n\t\treturn undefined;\n\t}\n}\n\n@editorAction\nclass GrowSelectionAction extends AbstractSmartSelect {\n\tconstructor() {\n\t\tsuper(true, {\n\t\t\tid: 'editor.action.smartSelect.grow',\n\t\t\tlabel: nls.localize('smartSelect.grow', \"Expand Select\"),\n\t\t\talias: 'Expand Select',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.Shift | KeyMod.Alt | KeyCode.RightArrow,\n\t\t\t\tmac: { primary: KeyMod.CtrlCmd | KeyMod.WinCtrl | KeyMod.Shift | KeyCode.RightArrow }\n\t\t\t}\n\t\t});\n\t}\n}\n\n@editorAction\nclass ShrinkSelectionAction extends AbstractSmartSelect {\n\tconstructor() {\n\t\tsuper(false, {\n\t\t\tid: 'editor.action.smartSelect.shrink',\n\t\t\tlabel: nls.localize('smartSelect.shrink', \"Shrink Select\"),\n\t\t\talias: 'Shrink Select',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.Shift | KeyMod.Alt | KeyCode.LeftArrow,\n\t\t\t\tmac: { primary: KeyMod.CtrlCmd | KeyMod.WinCtrl | KeyMod.Shift | KeyCode.LeftArrow }\n\t\t\t}\n\t\t});\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { RawContextKey, IContextKey, IContextKeyService, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';\nimport { ICommonCodeEditor } from 'vs/editor/common/editorCommon';\nimport { commonEditorContribution, CommonEditorRegistry, EditorCommand } from 'vs/editor/common/editorCommonExtensions';\nimport { dispose, IDisposable } from 'vs/base/common/lifecycle';\nimport { SnippetSession } from './snippetSession';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\n\n@commonEditorContribution\nexport class SnippetController2 {\n\n\tstatic get(editor: ICommonCodeEditor): SnippetController2 {\n\t\treturn editor.getContribution('snippetController2');\n\t}\n\n\tstatic InSnippetMode = new RawContextKey('inSnippetMode', false);\n\tstatic HasNextTabstop = new RawContextKey('hasNextTabstop', false);\n\tstatic HasPrevTabstop = new RawContextKey('hasPrevTabstop', false);\n\n\tprivate readonly _inSnippet: IContextKey;\n\tprivate readonly _hasNextTabstop: IContextKey;\n\tprivate readonly _hasPrevTabstop: IContextKey;\n\n\tprivate _session: SnippetSession;\n\tprivate _snippetListener: IDisposable[] = [];\n\tprivate _modelVersionId: number;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICommonCodeEditor,\n\t\t@IContextKeyService contextKeyService: IContextKeyService\n\t) {\n\t\tthis._inSnippet = SnippetController2.InSnippetMode.bindTo(contextKeyService);\n\t\tthis._hasNextTabstop = SnippetController2.HasNextTabstop.bindTo(contextKeyService);\n\t\tthis._hasPrevTabstop = SnippetController2.HasPrevTabstop.bindTo(contextKeyService);\n\t}\n\n\tdispose(): void {\n\t\tthis._inSnippet.reset();\n\t\tthis._hasPrevTabstop.reset();\n\t\tthis._hasNextTabstop.reset();\n\t\tdispose(this._session);\n\t}\n\n\tgetId(): string {\n\t\treturn 'snippetController2';\n\t}\n\n\tinsert(\n\t\ttemplate: string,\n\t\toverwriteBefore: number = 0, overwriteAfter: number = 0,\n\t\tundoStopBefore: boolean = true, undoStopAfter: boolean = true\n\t): void {\n\n\t\t// don't listen while inserting the snippet\n\t\t// as that is the inflight state causing cancelation\n\t\tthis._snippetListener = dispose(this._snippetListener);\n\n\t\tif (undoStopBefore) {\n\t\t\tthis._editor.getModel().pushStackElement();\n\t\t}\n\n\t\tif (!this._session) {\n\t\t\tthis._modelVersionId = this._editor.getModel().getAlternativeVersionId();\n\t\t\tthis._session = new SnippetSession(this._editor, template, overwriteBefore, overwriteAfter);\n\t\t\tthis._session.insert();\n\t\t} else {\n\t\t\tthis._session.merge(template, overwriteBefore, overwriteAfter);\n\t\t}\n\n\t\tif (undoStopAfter) {\n\t\t\tthis._editor.getModel().pushStackElement();\n\t\t}\n\n\t\tthis._snippetListener = [\n\t\t\tthis._editor.onDidChangeModel(() => this.cancel()),\n\t\t\tthis._editor.onDidChangeCursorSelection(() => this._updateState())\n\t\t];\n\t\tthis._updateState();\n\t}\n\n\tprivate _updateState(): void {\n\t\tif (!this._session) {\n\t\t\t// canceled in the meanwhile\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._modelVersionId === this._editor.getModel().getAlternativeVersionId()) {\n\t\t\t// undo until the 'before' state happened\n\t\t\t// and makes use cancel snippet mode\n\t\t\treturn this.cancel();\n\t\t}\n\n\t\tif (!this._session.hasPlaceholder) {\n\t\t\t// don't listen for selection changes and don't\n\t\t\t// update context keys when the snippet is plain text\n\t\t\treturn this.cancel();\n\t\t}\n\n\t\tif (this._session.isAtLastPlaceholder || !this._session.isSelectionWithinPlaceholders()) {\n\t\t\treturn this.cancel();\n\t\t}\n\n\t\tthis._inSnippet.set(true);\n\t\tthis._hasPrevTabstop.set(!this._session.isAtFirstPlaceholder);\n\t\tthis._hasNextTabstop.set(!this._session.isAtLastPlaceholder);\n\t}\n\n\tfinish(): void {\n\t\twhile (this._inSnippet.get()) {\n\t\t\tthis.next();\n\t\t}\n\t}\n\n\tcancel(): void {\n\t\tthis._inSnippet.reset();\n\t\tthis._hasPrevTabstop.reset();\n\t\tthis._hasNextTabstop.reset();\n\t\tdispose(this._snippetListener);\n\t\tdispose(this._session);\n\t\tthis._session = undefined;\n\t\tthis._modelVersionId = -1;\n\t}\n\n\tprev(): void {\n\t\tthis._session.prev();\n\t\tthis._updateState();\n\t}\n\n\tnext(): void {\n\t\tthis._session.next();\n\t\tthis._updateState();\n\t}\n}\n\n\nconst CommandCtor = EditorCommand.bindToContribution(SnippetController2.get);\n\nCommonEditorRegistry.registerEditorCommand(new CommandCtor({\n\tid: 'jumpToNextSnippetPlaceholder',\n\tprecondition: ContextKeyExpr.and(SnippetController2.InSnippetMode, SnippetController2.HasNextTabstop),\n\thandler: ctrl => ctrl.next(),\n\tkbOpts: {\n\t\tweight: CommonEditorRegistry.commandWeight(30),\n\t\tkbExpr: EditorContextKeys.textFocus,\n\t\tprimary: KeyCode.Tab\n\t}\n}));\nCommonEditorRegistry.registerEditorCommand(new CommandCtor({\n\tid: 'jumpToPrevSnippetPlaceholder',\n\tprecondition: ContextKeyExpr.and(SnippetController2.InSnippetMode, SnippetController2.HasPrevTabstop),\n\thandler: ctrl => ctrl.prev(),\n\tkbOpts: {\n\t\tweight: CommonEditorRegistry.commandWeight(30),\n\t\tkbExpr: EditorContextKeys.textFocus,\n\t\tprimary: KeyMod.Shift | KeyCode.Tab\n\t}\n}));\nCommonEditorRegistry.registerEditorCommand(new CommandCtor({\n\tid: 'leaveSnippet',\n\tprecondition: SnippetController2.InSnippetMode,\n\thandler: ctrl => ctrl.cancel(),\n\tkbOpts: {\n\t\tweight: CommonEditorRegistry.commandWeight(30),\n\t\tkbExpr: EditorContextKeys.textFocus,\n\t\tprimary: KeyCode.Escape,\n\t\tsecondary: [KeyMod.Shift | KeyCode.Escape]\n\t}\n}));\n\nCommonEditorRegistry.registerEditorCommand(new CommandCtor({\n\tid: 'acceptSnippet',\n\tprecondition: SnippetController2.InSnippetMode,\n\thandler: ctrl => ctrl.finish(),\n\t// kbOpts: {\n\t// \tweight: CommonEditorRegistry.commandWeight(30),\n\t// \tkbExpr: EditorContextKeys.textFocus,\n\t// \tprimary: KeyCode.Enter,\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { sequence, asWinJsPromise } from 'vs/base/common/async';\nimport { isFalsyOrEmpty } from 'vs/base/common/arrays';\nimport { compareIgnoreCase } from 'vs/base/common/strings';\nimport { assign } from 'vs/base/common/objects';\nimport { onUnexpectedExternalError } from 'vs/base/common/errors';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IModel } from 'vs/editor/common/editorCommon';\nimport { CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';\nimport { ISuggestResult, ISuggestSupport, ISuggestion, SuggestRegistry } from 'vs/editor/common/modes';\nimport { Position, IPosition } from 'vs/editor/common/core/position';\nimport { RawContextKey } from 'vs/platform/contextkey/common/contextkey';\n\nexport const Context = {\n\tVisible: new RawContextKey('suggestWidgetVisible', false),\n\tMultipleSuggestions: new RawContextKey('suggestWidgetMultipleSuggestions', false),\n\tMakesTextEdit: new RawContextKey('suggestionMakesTextEdit', true),\n\tAcceptOnKey: new RawContextKey('suggestionSupportsAcceptOnKey', true),\n\tAcceptSuggestionsOnEnter: new RawContextKey('acceptSuggestionOnEnter', true)\n};\n\nexport interface ISuggestionItem {\n\tposition: IPosition;\n\tsuggestion: ISuggestion;\n\tcontainer: ISuggestResult;\n\tsupport: ISuggestSupport;\n\tresolve(): TPromise;\n}\n\nexport type SnippetConfig = 'top' | 'bottom' | 'inline' | 'none';\n\nlet _snippetSuggestSupport: ISuggestSupport;\n\nexport function setSnippetSuggestSupport(support: ISuggestSupport): ISuggestSupport {\n\tconst old = _snippetSuggestSupport;\n\t_snippetSuggestSupport = support;\n\treturn old;\n}\n\nexport function provideSuggestionItems(model: IModel, position: Position, snippetConfig: SnippetConfig = 'bottom', onlyFrom?: ISuggestSupport[]): TPromise {\n\n\tconst allSuggestions: ISuggestionItem[] = [];\n\tconst acceptSuggestion = createSuggesionFilter(snippetConfig);\n\n\tposition = position.clone();\n\n\t// get provider groups, always add snippet suggestion provider\n\tconst supports = SuggestRegistry.orderedGroups(model);\n\n\t// add snippets provider unless turned off\n\tif (snippetConfig !== 'none' && _snippetSuggestSupport) {\n\t\tsupports.unshift([_snippetSuggestSupport]);\n\t}\n\n\t// add suggestions from contributed providers - providers are ordered in groups of\n\t// equal score and once a group produces a result the process stops\n\tlet hasResult = false;\n\tconst factory = supports.map(supports => {\n\t\treturn () => {\n\t\t\t// stop when we have a result\n\t\t\tif (hasResult) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\t// for each support in the group ask for suggestions\n\t\t\treturn TPromise.join(supports.map(support => {\n\n\t\t\t\tif (!isFalsyOrEmpty(onlyFrom) && onlyFrom.indexOf(support) < 0) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\treturn asWinJsPromise(token => support.provideCompletionItems(model, position, token)).then(container => {\n\n\t\t\t\t\tconst len = allSuggestions.length;\n\n\t\t\t\t\tif (container && !isFalsyOrEmpty(container.suggestions)) {\n\t\t\t\t\t\tfor (let suggestion of container.suggestions) {\n\t\t\t\t\t\t\tif (acceptSuggestion(suggestion)) {\n\n\t\t\t\t\t\t\t\tfixOverwriteBeforeAfter(suggestion, container);\n\n\t\t\t\t\t\t\t\tallSuggestions.push({\n\t\t\t\t\t\t\t\t\tposition,\n\t\t\t\t\t\t\t\t\tcontainer,\n\t\t\t\t\t\t\t\t\tsuggestion,\n\t\t\t\t\t\t\t\t\tsupport,\n\t\t\t\t\t\t\t\t\tresolve: createSuggestionResolver(support, suggestion, model, position)\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (len !== allSuggestions.length && support !== _snippetSuggestSupport) {\n\t\t\t\t\t\thasResult = true;\n\t\t\t\t\t}\n\n\t\t\t\t}, onUnexpectedExternalError);\n\t\t\t}));\n\t\t};\n\t});\n\n\tconst result = sequence(factory).then(() => allSuggestions.sort(getSuggestionComparator(snippetConfig)));\n\n\t// result.then(items => {\n\t// \tconsole.log(model.getWordUntilPosition(position), items.map(item => `${item.suggestion.label}, type=${item.suggestion.type}, incomplete?${item.container.incomplete}, overwriteBefore=${item.suggestion.overwriteBefore}`));\n\t// \treturn items;\n\t// }, err => {\n\t// \tconsole.warn(model.getWordUntilPosition(position), err);\n\t// });\n\n\treturn result;\n}\n\nfunction fixOverwriteBeforeAfter(suggestion: ISuggestion, container: ISuggestResult): void {\n\tif (typeof suggestion.overwriteBefore !== 'number') {\n\t\tsuggestion.overwriteBefore = 0;\n\t}\n\tif (typeof suggestion.overwriteAfter !== 'number' || suggestion.overwriteAfter < 0) {\n\t\tsuggestion.overwriteAfter = 0;\n\t}\n}\n\nfunction createSuggestionResolver(provider: ISuggestSupport, suggestion: ISuggestion, model: IModel, position: Position): () => TPromise {\n\treturn () => {\n\t\tif (typeof provider.resolveCompletionItem === 'function') {\n\t\t\treturn asWinJsPromise(token => provider.resolveCompletionItem(model, position, suggestion, token))\n\t\t\t\t.then(value => { assign(suggestion, value); });\n\t\t}\n\t\treturn TPromise.as(void 0);\n\t};\n}\n\nfunction createSuggesionFilter(snippetConfig: SnippetConfig): (candidate: ISuggestion) => boolean {\n\tif (snippetConfig === 'none') {\n\t\treturn suggestion => suggestion.type !== 'snippet';\n\t} else {\n\t\treturn () => true;\n\t}\n}\nfunction defaultComparator(a: ISuggestionItem, b: ISuggestionItem): number {\n\n\tlet ret = 0;\n\n\t// check with 'sortText'\n\tif (typeof a.suggestion.sortText === 'string' && typeof b.suggestion.sortText === 'string') {\n\t\tret = compareIgnoreCase(a.suggestion.sortText, b.suggestion.sortText);\n\t}\n\n\t// check with 'label'\n\tif (ret === 0) {\n\t\tret = compareIgnoreCase(a.suggestion.label, b.suggestion.label);\n\t}\n\n\t// check with 'type' and lower snippets\n\tif (ret === 0 && a.suggestion.type !== b.suggestion.type) {\n\t\tif (a.suggestion.type === 'snippet') {\n\t\t\tret = 1;\n\t\t} else if (b.suggestion.type === 'snippet') {\n\t\t\tret = -1;\n\t\t}\n\t}\n\n\treturn ret;\n}\n\nfunction snippetUpComparator(a: ISuggestionItem, b: ISuggestionItem): number {\n\tif (a.suggestion.type !== b.suggestion.type) {\n\t\tif (a.suggestion.type === 'snippet') {\n\t\t\treturn -1;\n\t\t} else if (b.suggestion.type === 'snippet') {\n\t\t\treturn 1;\n\t\t}\n\t}\n\treturn defaultComparator(a, b);\n}\n\nfunction snippetDownComparator(a: ISuggestionItem, b: ISuggestionItem): number {\n\tif (a.suggestion.type !== b.suggestion.type) {\n\t\tif (a.suggestion.type === 'snippet') {\n\t\t\treturn 1;\n\t\t} else if (b.suggestion.type === 'snippet') {\n\t\t\treturn -1;\n\t\t}\n\t}\n\treturn defaultComparator(a, b);\n}\n\nexport function getSuggestionComparator(snippetConfig: SnippetConfig): (a: ISuggestionItem, b: ISuggestionItem) => number {\n\tif (snippetConfig === 'top') {\n\t\treturn snippetUpComparator;\n\t} else if (snippetConfig === 'bottom') {\n\t\treturn snippetDownComparator;\n\t} else {\n\t\treturn defaultComparator;\n\t}\n}\n\nCommonEditorRegistry.registerDefaultLanguageCommand('_executeCompletionItemProvider', (model, position, args) => {\n\n\tconst result: ISuggestResult = {\n\t\tincomplete: false,\n\t\tsuggestions: []\n\t};\n\n\treturn provideSuggestionItems(model, position).then(items => {\n\n\t\tfor (const { container, suggestion } of items) {\n\t\t\tresult.incomplete = result.incomplete || container.incomplete;\n\t\t\tresult.suggestions.push(suggestion);\n\t\t}\n\n\t\treturn result;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { isFalsyOrEmpty } from 'vs/base/common/arrays';\nimport { TimeoutTimer } from 'vs/base/common/async';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { ICommonCodeEditor, IModel, IWordAtPosition } from 'vs/editor/common/editorCommon';\nimport { ISuggestSupport, SuggestRegistry, StandardTokenType } from 'vs/editor/common/modes';\nimport { Position } from 'vs/editor/common/core/position';\nimport { provideSuggestionItems, getSuggestionComparator, ISuggestionItem } from './suggest';\nimport { CompletionModel } from './completionModel';\nimport { CursorChangeReason, ICursorSelectionChangedEvent } from 'vs/editor/common/controller/cursorEvents';\n\nexport interface ICancelEvent {\n\tretrigger: boolean;\n}\n\nexport interface ITriggerEvent {\n\tauto: boolean;\n}\n\nexport interface ISuggestEvent {\n\tcompletionModel: CompletionModel;\n\tisFrozen: boolean;\n\tauto: boolean;\n}\n\nexport class LineContext {\n\n\tstatic shouldAutoTrigger(editor: ICommonCodeEditor): boolean {\n\t\tconst model = editor.getModel();\n\t\tif (!model) {\n\t\t\treturn false;\n\t\t}\n\t\tconst pos = editor.getPosition();\n\t\tconst word = model.getWordAtPosition(pos);\n\t\tif (!word) {\n\t\t\treturn false;\n\t\t}\n\t\tif (word.endColumn !== pos.column) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!isNaN(Number(word.word))) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tstatic isInEditableRange(editor: ICommonCodeEditor): boolean {\n\t\tconst model = editor.getModel();\n\t\tconst position = editor.getPosition();\n\t\tif (model.hasEditableRange()) {\n\t\t\tconst editableRange = model.getEditableRange();\n\t\t\tif (!editableRange.containsPosition(position)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\treadonly lineNumber: number;\n\treadonly column: number;\n\treadonly leadingLineContent: string;\n\treadonly leadingWord: IWordAtPosition;\n\treadonly auto: boolean;\n\n\tconstructor(model: IModel, position: Position, auto: boolean) {\n\t\tthis.leadingLineContent = model.getLineContent(position.lineNumber).substr(0, position.column - 1);\n\t\tthis.leadingWord = model.getWordUntilPosition(position);\n\t\tthis.lineNumber = position.lineNumber;\n\t\tthis.column = position.column;\n\t\tthis.auto = auto;\n\t}\n}\n\nexport const enum State {\n\tIdle = 0,\n\tManual = 1,\n\tAuto = 2\n}\n\nexport class SuggestModel implements IDisposable {\n\n\tprivate toDispose: IDisposable[] = [];\n\tprivate quickSuggestDelay: number;\n\tprivate triggerCharacterListener: IDisposable;\n\tprivate triggerAutoSuggestPromise: TPromise;\n\tprivate triggerRefilter = new TimeoutTimer();\n\tprivate _state: State;\n\n\tprivate requestPromise: TPromise;\n\tprivate context: LineContext;\n\tprivate currentPosition: Position;\n\n\tprivate completionModel: CompletionModel;\n\n\tprivate _onDidCancel: Emitter = new Emitter();\n\tget onDidCancel(): Event { return this._onDidCancel.event; }\n\n\tprivate _onDidTrigger: Emitter = new Emitter();\n\tget onDidTrigger(): Event { return this._onDidTrigger.event; }\n\n\tprivate _onDidSuggest: Emitter = new Emitter();\n\tget onDidSuggest(): Event { return this._onDidSuggest.event; }\n\n\tconstructor(private editor: ICommonCodeEditor) {\n\t\tthis._state = State.Idle;\n\t\tthis.triggerAutoSuggestPromise = null;\n\t\tthis.requestPromise = null;\n\t\tthis.completionModel = null;\n\t\tthis.context = null;\n\t\tthis.currentPosition = editor.getPosition() || new Position(1, 1);\n\n\t\t// wire up various listeners\n\t\tthis.toDispose.push(this.editor.onDidChangeModel(() => {\n\t\t\tthis.updateTriggerCharacters();\n\t\t\tthis.cancel();\n\t\t}));\n\t\tthis.toDispose.push(editor.onDidChangeModelLanguage(() => {\n\t\t\tthis.updateTriggerCharacters();\n\t\t\tthis.cancel();\n\t\t}));\n\t\tthis.toDispose.push(this.editor.onDidChangeConfiguration(() => {\n\t\t\tthis.updateTriggerCharacters();\n\t\t\tthis.updateQuickSuggest();\n\t\t}));\n\t\tthis.toDispose.push(SuggestRegistry.onDidChange(() => {\n\t\t\tthis.updateTriggerCharacters();\n\t\t\tthis.updateActiveSuggestSession();\n\t\t}));\n\t\tthis.toDispose.push(this.editor.onDidChangeCursorSelection(e => {\n\t\t\tthis.onCursorChange(e);\n\t\t}));\n\n\t\tthis.updateTriggerCharacters();\n\t\tthis.updateQuickSuggest();\n\t}\n\n\tdispose(): void {\n\t\tdispose([this._onDidCancel, this._onDidSuggest, this._onDidTrigger, this.triggerCharacterListener, this.triggerRefilter]);\n\t\tthis.toDispose = dispose(this.toDispose);\n\t\tthis.cancel();\n\t}\n\n\t// --- handle configuration & precondition changes\n\n\tprivate updateQuickSuggest(): void {\n\t\tthis.quickSuggestDelay = this.editor.getConfiguration().contribInfo.quickSuggestionsDelay;\n\n\t\tif (isNaN(this.quickSuggestDelay) || (!this.quickSuggestDelay && this.quickSuggestDelay !== 0) || this.quickSuggestDelay < 0) {\n\t\t\tthis.quickSuggestDelay = 10;\n\t\t}\n\t}\n\n\tprivate updateTriggerCharacters(): void {\n\n\t\tdispose(this.triggerCharacterListener);\n\n\t\tif (this.editor.getConfiguration().readOnly\n\t\t\t|| !this.editor.getModel()\n\t\t\t|| !this.editor.getConfiguration().contribInfo.suggestOnTriggerCharacters) {\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst supportsByTriggerCharacter: { [ch: string]: ISuggestSupport[] } = Object.create(null);\n\t\tfor (const support of SuggestRegistry.all(this.editor.getModel())) {\n\t\t\tif (isFalsyOrEmpty(support.triggerCharacters)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (const ch of support.triggerCharacters) {\n\t\t\t\tconst array = supportsByTriggerCharacter[ch];\n\t\t\t\tif (!array) {\n\t\t\t\t\tsupportsByTriggerCharacter[ch] = [support];\n\t\t\t\t} else {\n\t\t\t\t\tarray.push(support);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.triggerCharacterListener = this.editor.onDidType(text => {\n\t\t\tconst lastChar = text.charAt(text.length - 1);\n\t\t\tconst supports = supportsByTriggerCharacter[lastChar];\n\n\t\t\tif (supports) {\n\t\t\t\t// keep existing items that where not computed by the\n\t\t\t\t// supports/providers that want to trigger now\n\t\t\t\tconst items: ISuggestionItem[] = [];\n\t\t\t\tif (this.completionModel) {\n\t\t\t\t\tfor (const item of this.completionModel.items) {\n\t\t\t\t\t\tif (supports.indexOf(item.support) < 0) {\n\t\t\t\t\t\t\titems.push(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.trigger(true, Boolean(this.completionModel), supports, items);\n\t\t\t}\n\t\t});\n\t}\n\n\t// --- trigger/retrigger/cancel suggest\n\n\tget state(): State {\n\t\treturn this._state;\n\t}\n\n\tcancel(retrigger: boolean = false): void {\n\n\t\tif (this.triggerAutoSuggestPromise) {\n\t\t\tthis.triggerAutoSuggestPromise.cancel();\n\t\t\tthis.triggerAutoSuggestPromise = null;\n\t\t}\n\n\t\tif (this.requestPromise) {\n\t\t\tthis.requestPromise.cancel();\n\t\t\tthis.requestPromise = null;\n\t\t}\n\n\t\tthis._state = State.Idle;\n\t\tthis.completionModel = null;\n\t\tthis.context = null;\n\n\t\tthis._onDidCancel.fire({ retrigger });\n\t}\n\n\tprivate updateActiveSuggestSession(): void {\n\t\tif (this._state !== State.Idle) {\n\t\t\tif (!SuggestRegistry.has(this.editor.getModel())) {\n\t\t\t\tthis.cancel();\n\t\t\t} else {\n\t\t\t\tthis.trigger(this._state === State.Auto, true);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate onCursorChange(e: ICursorSelectionChangedEvent): void {\n\n\t\tconst prevPosition = this.currentPosition;\n\t\tthis.currentPosition = this.editor.getPosition();\n\n\t\tif (!e.selection.isEmpty()\n\t\t\t|| e.source !== 'keyboard'\n\t\t\t|| e.reason !== CursorChangeReason.NotSet) {\n\n\t\t\tif (this._state === State.Idle) {\n\t\t\t\t// Early exit if nothing needs to be done!\n\t\t\t\t// Leave some form of early exit check here if you wish to continue being a cursor position change listener ;)\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.cancel();\n\t\t\treturn;\n\t\t}\n\n\t\tif (!SuggestRegistry.has(this.editor.getModel())) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst model = this.editor.getModel();\n\t\tif (!model) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._state === State.Idle) {\n\n\t\t\t// trigger 24x7 IntelliSense when idle, enabled, when cursor\n\t\t\t// moved RIGHT, and when at a good position\n\t\t\tif (this.editor.getConfiguration().contribInfo.quickSuggestions !== false\n\t\t\t\t&& prevPosition.isBefore(this.currentPosition)\n\t\t\t) {\n\n\t\t\t\tthis.cancel();\n\n\t\t\t\tif (LineContext.shouldAutoTrigger(this.editor)) {\n\t\t\t\t\tthis.triggerAutoSuggestPromise = TPromise.timeout(this.quickSuggestDelay);\n\t\t\t\t\tthis.triggerAutoSuggestPromise.then(() => {\n\t\t\t\t\t\tconst model = this.editor.getModel();\n\t\t\t\t\t\tconst pos = this.editor.getPosition();\n\n\t\t\t\t\t\tif (!model) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// validate enabled now\n\t\t\t\t\t\tconst { quickSuggestions } = this.editor.getConfiguration().contribInfo;\n\t\t\t\t\t\tif (quickSuggestions === false) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t} else if (quickSuggestions === true) {\n\t\t\t\t\t\t\t// all good\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmodel.forceTokenization(pos.lineNumber);\n\t\t\t\t\t\t\tconst { tokenType } = model\n\t\t\t\t\t\t\t\t.getLineTokens(pos.lineNumber)\n\t\t\t\t\t\t\t\t.findTokenAtOffset(pos.column - 1);\n\n\t\t\t\t\t\t\tconst inValidScope = quickSuggestions.other && tokenType === StandardTokenType.Other\n\t\t\t\t\t\t\t\t|| quickSuggestions.comments && tokenType === StandardTokenType.Comment\n\t\t\t\t\t\t\t\t|| quickSuggestions.strings && tokenType === StandardTokenType.String;\n\n\t\t\t\t\t\t\tif (!inValidScope) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.triggerAutoSuggestPromise = null;\n\t\t\t\t\t\tthis.trigger(true);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\t\t\t// refine active suggestion\n\t\t\tthis.triggerRefilter.cancelAndSet(() => {\n\t\t\t\tconst position = this.editor.getPosition();\n\t\t\t\tconst ctx = new LineContext(model, position, this._state === State.Auto);\n\t\t\t\tthis.onNewContext(ctx);\n\t\t\t}, 25);\n\t\t}\n\t}\n\n\tpublic trigger(auto: boolean, retrigger: boolean = false, onlyFrom?: ISuggestSupport[], existingItems?: ISuggestionItem[]): void {\n\n\t\tconst model = this.editor.getModel();\n\n\t\tif (!model) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst ctx = new LineContext(model, this.editor.getPosition(), auto);\n\n\t\tif (!LineContext.isInEditableRange(this.editor)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Cancel previous requests, change state & update UI\n\t\tthis.cancel(retrigger);\n\t\tthis._state = auto ? State.Auto : State.Manual;\n\t\tthis._onDidTrigger.fire({ auto });\n\n\t\t// Capture context when request was sent\n\t\tthis.context = ctx;\n\n\t\tthis.requestPromise = provideSuggestionItems(model, this.editor.getPosition(),\n\t\t\tthis.editor.getConfiguration().contribInfo.snippetSuggestions,\n\t\t\tonlyFrom\n\t\t).then(items => {\n\n\t\t\tthis.requestPromise = null;\n\t\t\tif (this._state === State.Idle) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst model = this.editor.getModel();\n\t\t\tif (!model) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!isFalsyOrEmpty(existingItems)) {\n\t\t\t\tconst cmpFn = getSuggestionComparator(this.editor.getConfiguration().contribInfo.snippetSuggestions);\n\t\t\t\titems = items.concat(existingItems).sort(cmpFn);\n\t\t\t}\n\n\t\t\tconst ctx = new LineContext(model, this.editor.getPosition(), auto);\n\t\t\tthis.completionModel = new CompletionModel(items, this.context.column, {\n\t\t\t\tleadingLineContent: ctx.leadingLineContent,\n\t\t\t\tcharacterCountDelta: this.context ? ctx.column - this.context.column : 0\n\t\t\t}, this.editor.getConfiguration().contribInfo.snippetSuggestions);\n\t\t\tthis.onNewContext(ctx);\n\n\t\t}).then(null, onUnexpectedError);\n\t}\n\n\tprivate onNewContext(ctx: LineContext): void {\n\n\t\tif (!this.context) {\n\t\t\t// happens when 24x7 IntelliSense is enabled and still in its delay\n\t\t\treturn;\n\t\t}\n\n\t\tif (ctx.lineNumber !== this.context.lineNumber) {\n\t\t\t// e.g. happens when pressing Enter while IntelliSense is computed\n\t\t\tthis.cancel();\n\t\t\treturn;\n\t\t}\n\n\t\tif (ctx.column < this.context.column) {\n\t\t\t// typed -> moved cursor LEFT -> retrigger if still on a word\n\t\t\tif (ctx.leadingWord.word) {\n\t\t\t\tthis.trigger(this.context.auto, true);\n\t\t\t} else {\n\t\t\t\tthis.cancel();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.completionModel) {\n\t\t\t// happens when IntelliSense is not yet computed\n\t\t\treturn;\n\t\t}\n\n\t\tif (ctx.column > this.context.column && this.completionModel.incomplete && ctx.leadingWord.word.length !== 0) {\n\t\t\t// typed -> moved cursor RIGHT & incomple model & still on a word -> retrigger\n\t\t\tconst { complete, incomplete } = this.completionModel.resolveIncompleteInfo();\n\t\t\tthis.trigger(this._state === State.Auto, true, incomplete, complete);\n\n\t\t} else {\n\t\t\t// typed -> moved cursor RIGHT -> update UI\n\t\t\tlet oldLineContext = this.completionModel.lineContext;\n\t\t\tlet isFrozen = false;\n\n\t\t\tthis.completionModel.lineContext = {\n\t\t\t\tleadingLineContent: ctx.leadingLineContent,\n\t\t\t\tcharacterCountDelta: ctx.column - this.context.column\n\t\t\t};\n\n\t\t\tif (this.completionModel.items.length === 0) {\n\n\t\t\t\tif (LineContext.shouldAutoTrigger(this.editor) && this.context.leadingWord.endColumn < ctx.leadingWord.startColumn) {\n\t\t\t\t\t// retrigger when heading into a new word\n\t\t\t\t\tthis.trigger(this.context.auto, true);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!this.context.auto) {\n\t\t\t\t\t// freeze when IntelliSense was manually requested\n\t\t\t\t\tthis.completionModel.lineContext = oldLineContext;\n\t\t\t\t\tisFrozen = this.completionModel.items.length > 0;\n\n\t\t\t\t\tif (isFrozen && ctx.leadingWord.word.length === 0) {\n\t\t\t\t\t\t// there were results before but now there aren't\n\t\t\t\t\t\t// and also we are not on a word anymore -> cancel\n\t\t\t\t\t\tthis.cancel();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\t// nothing left\n\t\t\t\t\tthis.cancel();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._onDidSuggest.fire({\n\t\t\t\tcompletionModel: this.completionModel,\n\t\t\t\tauto: this.context.auto,\n\t\t\t\tisFrozen,\n\t\t\t});\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { ICommonCodeEditor } from 'vs/editor/common/editorCommon';\nimport { editorAction, ServicesAccessor, EditorAction } from 'vs/editor/common/editorCommonExtensions';\nimport { TabFocus } from 'vs/editor/common/config/commonEditorConfig';\n\n@editorAction\nexport class ToggleTabFocusModeAction extends EditorAction {\n\n\tpublic static ID = 'editor.action.toggleTabFocusMode';\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: ToggleTabFocusModeAction.ID,\n\t\t\tlabel: nls.localize({ key: 'toggle.tabMovesFocus', comment: ['Turn on/off use of tab key for moving focus around VS Code'] }, \"Toggle Tab Key Moves Focus\"),\n\t\t\talias: 'Toggle Tab Key Moves Focus',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: null,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.KEY_M,\n\t\t\t\tmac: { primary: KeyMod.WinCtrl | KeyMod.Shift | KeyCode.KEY_M }\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\t\tlet oldValue = TabFocus.getTabFocusMode();\n\t\tTabFocus.setTabFocusMode(!oldValue);\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { ICommonCodeEditor, IModel } from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { editorCommand, ServicesAccessor, EditorCommand, ICommandOptions } from 'vs/editor/common/editorCommonExtensions';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport { WordNavigationType, WordOperations } from 'vs/editor/common/controller/cursorWordOperations';\nimport { ReplaceCommand } from 'vs/editor/common/commands/replaceCommand';\nimport { getMapForWordSeparators, WordCharacterClassifier } from 'vs/editor/common/controller/wordCharacterClassifier';\nimport { CursorState } from 'vs/editor/common/controller/cursorCommon';\nimport { CursorChangeReason } from 'vs/editor/common/controller/cursorEvents';\n\nexport interface MoveWordOptions extends ICommandOptions {\n\tinSelectionMode: boolean;\n\twordNavigationType: WordNavigationType;\n}\n\nexport abstract class MoveWordCommand extends EditorCommand {\n\n\tprivate readonly _inSelectionMode: boolean;\n\tprivate readonly _wordNavigationType: WordNavigationType;\n\n\tconstructor(opts: MoveWordOptions) {\n\t\tsuper(opts);\n\t\tthis._inSelectionMode = opts.inSelectionMode;\n\t\tthis._wordNavigationType = opts.wordNavigationType;\n\t}\n\n\tpublic runEditorCommand(accessor: ServicesAccessor, editor: ICommonCodeEditor, args: any): void {\n\t\tconst config = editor.getConfiguration();\n\t\tconst wordSeparators = getMapForWordSeparators(config.wordSeparators);\n\t\tconst model = editor.getModel();\n\t\tconst selections = editor.getSelections();\n\n\t\tconst result = selections.map((sel) => {\n\t\t\tconst inPosition = new Position(sel.positionLineNumber, sel.positionColumn);\n\t\t\tconst outPosition = this._move(wordSeparators, model, inPosition, this._wordNavigationType);\n\t\t\treturn this._moveTo(sel, outPosition, this._inSelectionMode);\n\t\t});\n\n\t\teditor._getCursors().setStates('moveWordCommand', CursorChangeReason.NotSet, result.map(r => CursorState.fromModelSelection(r)));\n\t\tif (result.length === 1) {\n\t\t\tconst pos = new Position(result[0].positionLineNumber, result[0].positionColumn);\n\t\t\teditor.revealPosition(pos, false, true);\n\t\t}\n\t}\n\n\tprivate _moveTo(from: Selection, to: Position, inSelectionMode: boolean): Selection {\n\t\tif (inSelectionMode) {\n\t\t\t// move just position\n\t\t\treturn new Selection(\n\t\t\t\tfrom.selectionStartLineNumber,\n\t\t\t\tfrom.selectionStartColumn,\n\t\t\t\tto.lineNumber,\n\t\t\t\tto.column\n\t\t\t);\n\t\t} else {\n\t\t\t// move everything\n\t\t\treturn new Selection(\n\t\t\t\tto.lineNumber,\n\t\t\t\tto.column,\n\t\t\t\tto.lineNumber,\n\t\t\t\tto.column\n\t\t\t);\n\t\t}\n\t}\n\n\tprotected abstract _move(wordSeparators: WordCharacterClassifier, model: IModel, position: Position, wordNavigationType: WordNavigationType): Position;\n}\n\nexport class WordLeftCommand extends MoveWordCommand {\n\tprotected _move(wordSeparators: WordCharacterClassifier, model: IModel, position: Position, wordNavigationType: WordNavigationType): Position {\n\t\treturn WordOperations.moveWordLeft(wordSeparators, model, position, wordNavigationType);\n\t}\n}\n\nexport class WordRightCommand extends MoveWordCommand {\n\tprotected _move(wordSeparators: WordCharacterClassifier, model: IModel, position: Position, wordNavigationType: WordNavigationType): Position {\n\t\treturn WordOperations.moveWordRight(wordSeparators, model, position, wordNavigationType);\n\t}\n}\n\n@editorCommand\nexport class CursorWordStartLeft extends WordLeftCommand {\n\tconstructor() {\n\t\tsuper({\n\t\t\tinSelectionMode: false,\n\t\t\twordNavigationType: WordNavigationType.WordStart,\n\t\t\tid: 'cursorWordStartLeft',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.LeftArrow,\n\t\t\t\tmac: { primary: KeyMod.Alt | KeyCode.LeftArrow }\n\t\t\t}\n\t\t});\n\t}\n}\n\n@editorCommand\nexport class CursorWordEndLeft extends WordLeftCommand {\n\tconstructor() {\n\t\tsuper({\n\t\t\tinSelectionMode: false,\n\t\t\twordNavigationType: WordNavigationType.WordEnd,\n\t\t\tid: 'cursorWordEndLeft',\n\t\t\tprecondition: null\n\t\t});\n\t}\n}\n\n@editorCommand\nexport class CursorWordLeft extends WordLeftCommand {\n\tconstructor() {\n\t\tsuper({\n\t\t\tinSelectionMode: false,\n\t\t\twordNavigationType: WordNavigationType.WordStart,\n\t\t\tid: 'cursorWordLeft',\n\t\t\tprecondition: null\n\t\t});\n\t}\n}\n\n@editorCommand\nexport class CursorWordStartLeftSelect extends WordLeftCommand {\n\tconstructor() {\n\t\tsuper({\n\t\t\tinSelectionMode: true,\n\t\t\twordNavigationType: WordNavigationType.WordStart,\n\t\t\tid: 'cursorWordStartLeftSelect',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.LeftArrow,\n\t\t\t\tmac: { primary: KeyMod.Alt | KeyMod.Shift | KeyCode.LeftArrow }\n\t\t\t}\n\t\t});\n\t}\n}\n\n@editorCommand\nexport class CursorWordEndLeftSelect extends WordLeftCommand {\n\tconstructor() {\n\t\tsuper({\n\t\t\tinSelectionMode: true,\n\t\t\twordNavigationType: WordNavigationType.WordEnd,\n\t\t\tid: 'cursorWordEndLeftSelect',\n\t\t\tprecondition: null\n\t\t});\n\t}\n}\n\n@editorCommand\nexport class CursorWordLeftSelect extends WordLeftCommand {\n\tconstructor() {\n\t\tsuper({\n\t\t\tinSelectionMode: true,\n\t\t\twordNavigationType: WordNavigationType.WordStart,\n\t\t\tid: 'cursorWordLeftSelect',\n\t\t\tprecondition: null\n\t\t});\n\t}\n}\n\n@editorCommand\nexport class CursorWordStartRight extends WordRightCommand {\n\tconstructor() {\n\t\tsuper({\n\t\t\tinSelectionMode: false,\n\t\t\twordNavigationType: WordNavigationType.WordStart,\n\t\t\tid: 'cursorWordStartRight',\n\t\t\tprecondition: null\n\t\t});\n\t}\n}\n\n@editorCommand\nexport class CursorWordEndRight extends WordRightCommand {\n\tconstructor() {\n\t\tsuper({\n\t\t\tinSelectionMode: false,\n\t\t\twordNavigationType: WordNavigationType.WordEnd,\n\t\t\tid: 'cursorWordEndRight',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.RightArrow,\n\t\t\t\tmac: { primary: KeyMod.Alt | KeyCode.RightArrow }\n\t\t\t}\n\t\t});\n\t}\n}\n\n@editorCommand\nexport class CursorWordRight extends WordRightCommand {\n\tconstructor() {\n\t\tsuper({\n\t\t\tinSelectionMode: false,\n\t\t\twordNavigationType: WordNavigationType.WordEnd,\n\t\t\tid: 'cursorWordRight',\n\t\t\tprecondition: null\n\t\t});\n\t}\n}\n\n@editorCommand\nexport class CursorWordStartRightSelect extends WordRightCommand {\n\tconstructor() {\n\t\tsuper({\n\t\t\tinSelectionMode: true,\n\t\t\twordNavigationType: WordNavigationType.WordStart,\n\t\t\tid: 'cursorWordStartRightSelect',\n\t\t\tprecondition: null\n\t\t});\n\t}\n}\n\n@editorCommand\nexport class CursorWordEndRightSelect extends WordRightCommand {\n\tconstructor() {\n\t\tsuper({\n\t\t\tinSelectionMode: true,\n\t\t\twordNavigationType: WordNavigationType.WordEnd,\n\t\t\tid: 'cursorWordEndRightSelect',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.RightArrow,\n\t\t\t\tmac: { primary: KeyMod.Alt | KeyMod.Shift | KeyCode.RightArrow }\n\t\t\t}\n\t\t});\n\t}\n}\n\n@editorCommand\nexport class CursorWordRightSelect extends WordRightCommand {\n\tconstructor() {\n\t\tsuper({\n\t\t\tinSelectionMode: true,\n\t\t\twordNavigationType: WordNavigationType.WordEnd,\n\t\t\tid: 'cursorWordRightSelect',\n\t\t\tprecondition: null\n\t\t});\n\t}\n}\n\nexport interface DeleteWordOptions extends ICommandOptions {\n\twhitespaceHeuristics: boolean;\n\twordNavigationType: WordNavigationType;\n}\n\nexport abstract class DeleteWordCommand extends EditorCommand {\n\tprivate readonly _whitespaceHeuristics: boolean;\n\tprivate readonly _wordNavigationType: WordNavigationType;\n\n\tconstructor(opts: DeleteWordOptions) {\n\t\tsuper(opts);\n\t\tthis._whitespaceHeuristics = opts.whitespaceHeuristics;\n\t\tthis._wordNavigationType = opts.wordNavigationType;\n\t}\n\n\tpublic runEditorCommand(accessor: ServicesAccessor, editor: ICommonCodeEditor, args: any): void {\n\t\tconst config = editor.getConfiguration();\n\t\tconst wordSeparators = getMapForWordSeparators(config.wordSeparators);\n\t\tconst model = editor.getModel();\n\t\tconst selections = editor.getSelections();\n\n\t\tconst commands = selections.map((sel) => {\n\t\t\tconst deleteRange = this._delete(wordSeparators, model, sel, this._whitespaceHeuristics, this._wordNavigationType);\n\t\t\treturn new ReplaceCommand(deleteRange, '');\n\t\t});\n\n\t\teditor.pushUndoStop();\n\t\teditor.executeCommands(this.id, commands);\n\t\teditor.pushUndoStop();\n\t}\n\n\tprotected abstract _delete(wordSeparators: WordCharacterClassifier, model: IModel, selection: Selection, whitespaceHeuristics: boolean, wordNavigationType: WordNavigationType): Range;\n}\n\nexport class DeleteWordLeftCommand extends DeleteWordCommand {\n\tprotected _delete(wordSeparators: WordCharacterClassifier, model: IModel, selection: Selection, whitespaceHeuristics: boolean, wordNavigationType: WordNavigationType): Range {\n\t\tlet r = WordOperations.deleteWordLeft(wordSeparators, model, selection, whitespaceHeuristics, wordNavigationType);\n\t\tif (r) {\n\t\t\treturn r;\n\t\t}\n\t\treturn new Range(1, 1, 1, 1);\n\t}\n}\n\nexport class DeleteWordRightCommand extends DeleteWordCommand {\n\tprotected _delete(wordSeparators: WordCharacterClassifier, model: IModel, selection: Selection, whitespaceHeuristics: boolean, wordNavigationType: WordNavigationType): Range {\n\t\tlet r = WordOperations.deleteWordRight(wordSeparators, model, selection, whitespaceHeuristics, wordNavigationType);\n\t\tif (r) {\n\t\t\treturn r;\n\t\t}\n\t\tconst lineCount = model.getLineCount();\n\t\tconst maxColumn = model.getLineMaxColumn(lineCount);\n\t\treturn new Range(lineCount, maxColumn, lineCount, maxColumn);\n\t}\n}\n\n@editorCommand\nexport class DeleteWordStartLeft extends DeleteWordLeftCommand {\n\tconstructor() {\n\t\tsuper({\n\t\t\twhitespaceHeuristics: false,\n\t\t\twordNavigationType: WordNavigationType.WordStart,\n\t\t\tid: 'deleteWordStartLeft',\n\t\t\tprecondition: EditorContextKeys.writable\n\t\t});\n\t}\n}\n\n@editorCommand\nexport class DeleteWordEndLeft extends DeleteWordLeftCommand {\n\tconstructor() {\n\t\tsuper({\n\t\t\twhitespaceHeuristics: false,\n\t\t\twordNavigationType: WordNavigationType.WordEnd,\n\t\t\tid: 'deleteWordEndLeft',\n\t\t\tprecondition: EditorContextKeys.writable\n\t\t});\n\t}\n}\n\n@editorCommand\nexport class DeleteWordLeft extends DeleteWordLeftCommand {\n\tconstructor() {\n\t\tsuper({\n\t\t\twhitespaceHeuristics: true,\n\t\t\twordNavigationType: WordNavigationType.WordStart,\n\t\t\tid: 'deleteWordLeft',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.Backspace,\n\t\t\t\tmac: { primary: KeyMod.Alt | KeyCode.Backspace }\n\t\t\t}\n\t\t});\n\t}\n}\n\n@editorCommand\nexport class DeleteWordStartRight extends DeleteWordRightCommand {\n\tconstructor() {\n\t\tsuper({\n\t\t\twhitespaceHeuristics: false,\n\t\t\twordNavigationType: WordNavigationType.WordStart,\n\t\t\tid: 'deleteWordStartRight',\n\t\t\tprecondition: EditorContextKeys.writable\n\t\t});\n\t}\n}\n\n@editorCommand\nexport class DeleteWordEndRight extends DeleteWordRightCommand {\n\tconstructor() {\n\t\tsuper({\n\t\t\twhitespaceHeuristics: false,\n\t\t\twordNavigationType: WordNavigationType.WordEnd,\n\t\t\tid: 'deleteWordEndRight',\n\t\t\tprecondition: EditorContextKeys.writable\n\t\t});\n\t}\n}\n\n@editorCommand\nexport class DeleteWordRight extends DeleteWordRightCommand {\n\tconstructor() {\n\t\tsuper({\n\t\t\twhitespaceHeuristics: true,\n\t\t\twordNavigationType: WordNavigationType.WordEnd,\n\t\t\tid: 'deleteWordRight',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.Delete,\n\t\t\t\tmac: { primary: KeyMod.Alt | KeyCode.Delete }\n\t\t\t}\n\t\t});\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport { ICommonCodeEditor } from 'vs/editor/common/editorCommon';\nimport { editorAction, EditorAction, ServicesAccessor } from 'vs/editor/common/editorCommonExtensions';\nimport { IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneThemeService';\n\n@editorAction\nclass ToggleHighContrast extends EditorAction {\n\n\tprivate _originalThemeName: string;\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.toggleHighContrast',\n\t\t\tlabel: nls.localize('toggleHighContrast', \"Toggle High Contrast Theme\"),\n\t\t\talias: 'Toggle High Contrast Theme',\n\t\t\tprecondition: null\n\t\t});\n\t\tthis._originalThemeName = null;\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\t\tconst standaloneThemeService = accessor.get(IStandaloneThemeService);\n\t\tif (this._originalThemeName) {\n\t\t\t// We must toggle back to the integrator's theme\n\t\t\tstandaloneThemeService.setTheme(this._originalThemeName);\n\t\t\tthis._originalThemeName = null;\n\t\t} else {\n\t\t\tthis._originalThemeName = standaloneThemeService.getTheme().themeName;\n\t\t\tstandaloneThemeService.setTheme('hc-black');\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { IContextViewService, IContextViewDelegate } from './contextView';\nimport { ContextView } from 'vs/base/browser/ui/contextview/contextview';\nimport { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';\nimport { IMessageService } from 'vs/platform/message/common/message';\n\nexport class ContextViewService implements IContextViewService {\n\tpublic _serviceBrand: any;\n\n\tprivate contextView: ContextView;\n\n\tconstructor(\n\t\tcontainer: HTMLElement,\n\t\t@ITelemetryService telemetryService: ITelemetryService,\n\t\t@IMessageService messageService: IMessageService\n\t) {\n\t\tthis.contextView = new ContextView(container);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.contextView.dispose();\n\t}\n\n\t// ContextView\n\n\tpublic setContainer(container: HTMLElement): void {\n\t\tthis.contextView.setContainer(container);\n\t}\n\n\tpublic showContextView(delegate: IContextViewDelegate): void {\n\t\tthis.contextView.show(delegate);\n\t}\n\n\tpublic layout(): void {\n\t\tthis.contextView.layout();\n\t}\n\n\tpublic hideContextView(data?: any): void {\n\t\tthis.contextView.hide(data);\n\t}\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'use strict';\n\nimport platform = require('vs/platform/registry/common/platform');\nimport { IJSONSchema } from 'vs/base/common/jsonSchema';\nimport { Color, RGBA } from 'vs/base/common/color';\nimport { ITheme } from 'vs/platform/theme/common/themeService';\n\nimport nls = require('vs/nls');\n\n// ------ API types\n\nexport type ColorIdentifier = string;\n\nexport interface ColorContribution {\n\treadonly id: ColorIdentifier;\n\treadonly description: string;\n\treadonly defaults: ColorDefaults;\n}\n\n\nexport interface ColorFunction {\n\t(theme: ITheme): Color;\n}\n\nexport interface ColorDefaults {\n\tlight: ColorValue;\n\tdark: ColorValue;\n\thc: ColorValue;\n}\n\n/**\n * A Color Value is either a color literal, a refence to other color or a derived color\n */\nexport type ColorValue = Color | string | ColorIdentifier | ColorFunction;\n\n// color registry\nexport const Extensions = {\n\tColorContribution: 'base.contributions.colors'\n};\n\nexport interface IColorRegistry {\n\n\t/**\n\t * Register a color to the registry.\n\t * @param id The color id as used in theme descrition files\n\t * @param defaults The default values\n\t * @description the description\n\t */\n\tregisterColor(id: string, defaults: ColorDefaults, description: string): ColorIdentifier;\n\n\t/**\n\t * Get all color contributions\n\t */\n\tgetColors(): ColorContribution[];\n\n\t/**\n\t * Gets the default color of the given id\n\t */\n\tresolveDefaultColor(id: ColorIdentifier, theme: ITheme): Color;\n\n\t/**\n\t * JSON schema of all colors\n\t */\n\tgetColorSchema(): IJSONSchema;\n\n}\n\nconst colorPattern = '^#([0-9A-Fa-f]{3,4}|([0-9A-Fa-f]{2}){3,4})$';\nconst colorPatternErrorMessage = nls.localize('invalid.color', 'Invalid color format. Use #RGB, #RGBA, #RRGGBB or #RRGGBBAA');\n\nclass ColorRegistry implements IColorRegistry {\n\tprivate colorsById: { [key: string]: ColorContribution };\n\tprivate colorSchema: IJSONSchema = { type: 'object', description: nls.localize('schema.colors', \"Colors used in the workbench.\"), properties: {}, additionalProperties: false };\n\n\tconstructor() {\n\t\tthis.colorsById = {};\n\t}\n\n\tpublic registerColor(id: string, defaults: ColorDefaults, description: string): ColorIdentifier {\n\t\tlet colorContribution = { id, description, defaults };\n\t\tthis.colorsById[id] = colorContribution;\n\t\tthis.colorSchema.properties[id] = { type: 'string', description, format: 'color', pattern: colorPattern, patternErrorMessage: colorPatternErrorMessage };\n\t\treturn id;\n\t}\n\n\tpublic getColors(): ColorContribution[] {\n\t\treturn Object.keys(this.colorsById).map(id => this.colorsById[id]);\n\t}\n\n\tpublic resolveDefaultColor(id: ColorIdentifier, theme: ITheme): Color {\n\t\tlet colorDesc = this.colorsById[id];\n\t\tif (colorDesc && colorDesc.defaults) {\n\t\t\tlet colorValue = colorDesc.defaults[theme.type];\n\t\t\treturn resolveColorValue(colorValue, theme);\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic getColorSchema(): IJSONSchema {\n\t\treturn this.colorSchema;\n\t}\n\n\tpublic toString() {\n\t\tlet sorter = (a: string, b: string) => {\n\t\t\tlet cat1 = a.indexOf('.') === -1 ? 0 : 1;\n\t\t\tlet cat2 = b.indexOf('.') === -1 ? 0 : 1;\n\t\t\tif (cat1 !== cat2) {\n\t\t\t\treturn cat1 - cat2;\n\t\t\t}\n\t\t\treturn a.localeCompare(b);\n\t\t};\n\n\t\treturn Object.keys(this.colorsById).sort(sorter).map(k => `- \\`${k}\\`: ${this.colorsById[k].description}`).join('\\n');\n\t}\n\n}\n\nconst colorRegistry = new ColorRegistry();\nplatform.Registry.add(Extensions.ColorContribution, colorRegistry);\n\nexport function registerColor(id: string, defaults: ColorDefaults, description: string): ColorIdentifier {\n\treturn colorRegistry.registerColor(id, defaults, description);\n}\n\n// ----- base colors\n\nexport const foreground = registerColor('foreground', { dark: '#CCCCCC', light: '#6C6C6C', 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 descriptionForeground = registerColor('descriptionForeground', { light: transparent(foreground, 0.7), dark: transparent(foreground, 0.7), hc: transparent(foreground, 0.7) }, nls.localize('descriptionForeground', \"Foreground color for description text providing additional information, for example for a label.\"));\n\nexport const focusBorder = registerColor('focusBorder', { dark: Color.fromHex('#0E639C').transparent(0.6), 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.\"));\n\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.\"));\n\nexport const selectionBackground = registerColor('selection.background', { light: null, dark: null, hc: null }, nls.localize('selectionBackground', \"The background color of text selections in the workbench (e.g. for input fields or text areas). Note that this does not apply to selections within the editor.\"));\n\n// ------ text colors\n\nexport const textSeparatorForeground = registerColor('textSeparator.foreground', { light: '#0000002e', dark: '#ffffff2e', hc: Color.black }, nls.localize('textSeparatorForeground', \"Color for text separators.\"));\nexport const textLinkForeground = registerColor('textLink.foreground', { light: '#4080D0', dark: '#4080D0', hc: '#4080D0' }, nls.localize('textLinkForeground', \"Foreground color for links in text.\"));\nexport const textLinkActiveForeground = registerColor('textLink.activeForeground', { light: '#4080D0', dark: '#4080D0', hc: '#4080D0' }, nls.localize('textLinkActiveForeground', \"Foreground color for active links in text.\"));\nexport const textPreformatForeground = registerColor('textPreformat.foreground', { light: '#A31515', dark: '#D7BA7D', hc: '#D7BA7D' }, nls.localize('textPreformatForeground', \"Foreground color for preformatted text segments.\"));\nexport const textBlockQuoteBackground = registerColor('textBlockQuote.background', { light: '#7f7f7f1a', dark: '#7f7f7f1a', hc: null }, nls.localize('textBlockQuoteBackground', \"Background color for block quotes in text.\"));\nexport const textBlockQuoteBorder = registerColor('textBlockQuote.border', { light: '#007acc80', dark: '#007acc80', hc: Color.white }, nls.localize('textBlockQuoteBorder', \"Border color for block quotes in text.\"));\nexport const textCodeBlockBackground = registerColor('textCodeBlock.background', { light: '#dcdcdc66', dark: '#0a0a0a66', hc: Color.black }, nls.localize('textCodeBlockBackground', \"Background color for code blocks in text.\"));\n\n// ----- widgets\nexport const widgetShadow = registerColor('widget.shadow', { dark: '#000000', light: '#A8A8A8', hc: null }, nls.localize('widgetShadow', 'Shadow color of widgets such as find/replace inside the editor.'));\n\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: '#007ACC', light: '#007ACC', hc: activeContrastBorder }, nls.localize('inputBoxActiveOptionBorder', \"Border color of activated options in input fields.\"));\nexport const inputPlaceholderForeground = registerColor('input.placeholderForeground', { dark: null, light: null, hc: null }, nls.localize('inputPlaceholderForeground', \"Input box foreground color for placeholder text.\"));\n\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 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 information warning.\"));\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 inputValidationErrorBorder = registerColor('inputValidation.errorBorder', { dark: '#BE1100', light: '#BE1100', hc: contrastBorder }, nls.localize('inputValidationErrorBorder', \"Input validation border color for error severity.\"));\n\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 selectBorder = registerColor('dropdown.border', { dark: selectBackground, light: '#CECECE', hc: contrastBorder }, nls.localize('dropdownBorder', \"Dropdown border.\"));\n\nexport const listFocusBackground = registerColor('list.focusBackground', { dark: '#073655', light: '#DCEBFC', 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 listActiveSelectionBackground = registerColor('list.activeSelectionBackground', { dark: '#094771', light: '#3399FF', 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 listInactiveSelectionBackground = registerColor('list.inactiveSelectionBackground', { dark: '#3F3F46', light: '#CCCEDB', 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 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: listFocusBackground, light: listFocusBackground, 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: '#0097fb', light: '#007acc', hc: focusBorder }, nls.localize('highlight', 'List/Tree foreground color of the match highlights when searching inside the list/tree.'));\n\nexport const pickerGroupForeground = registerColor('pickerGroup.foreground', { dark: Color.fromHex('#0097FB').transparent(0.6), light: Color.fromHex('#007ACC').transparent(0.6), 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\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.\"));\n\nexport const badgeBackground = registerColor('badge.background', { dark: '#4D4D4D', light: '#BEBEBE', 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: Color.white, hc: Color.white }, nls.localize('badgeForeground', \"Badge foreground color. Badges are small information labels, e.g. for search results count.\"));\n\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', \"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', \"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', \"Slider background color when active.\"));\n\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.\"));\n\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/**\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/**\n * Editor widgets\n */\nexport const editorWidgetBackground = registerColor('editorWidget.background', { dark: '#2D2D30', light: '#EFEFF2', hc: '#0C141F' }, nls.localize('editorWidgetBackground', 'Background 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.'));\n\n\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.\"));\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.'));\n\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.\"));\nexport const editorFindRangeHighlight = registerColor('editor.findRangeHighlightBackground', { dark: '#3a3d4166', light: '#b4b4b44d', hc: null }, nls.localize('findRangeHighlight', \"Color the range limiting the search.\"));\n\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.'));\nexport const editorHoverBackground = registerColor('editorHoverWidget.background', { light: editorWidgetBackground, dark: editorWidgetBackground, hc: editorWidgetBackground }, nls.localize('hoverBackground', 'Background 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.'));\n\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/**\n * Diff Editor Colors\n */\nexport const defaultInsertColor = Color.fromRGBA(new RGBA(155, 185, 85, 255 * 0.2));\nexport const defaultRemoveColor = Color.fromRGBA(new RGBA(255, 0, 0, 255 * 0.2));\n\nexport const diffInserted = registerColor('diffEditor.insertedTextBackground', { dark: defaultInsertColor, light: defaultInsertColor, hc: null }, nls.localize('diffEditorInserted', 'Background color for text that got inserted.'));\nexport const diffRemoved = registerColor('diffEditor.removedTextBackground', { dark: defaultRemoveColor, light: defaultRemoveColor, hc: null }, nls.localize('diffEditorRemoved', 'Background color for text that got removed.'));\n\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.'));\n\n/**\n * Merge-conflict colors\n */\n\nconst headerTransparency = 0.5;\nconst currentBaseColor = Color.fromHex('#40C8AE').transparent(headerTransparency);\nconst incomingBaseColor = Color.fromHex('#40A6FF').transparent(headerTransparency);\nconst commonBaseColor = Color.fromHex('#606060').transparent(0.4);\nconst contentTransparency = 0.4;\nconst rulerTransparency = 1;\n\nexport const mergeCurrentHeaderBackground = registerColor('merge.currentHeaderBackground', { dark: currentBaseColor, light: currentBaseColor, hc: null }, nls.localize('mergeCurrentHeaderBackground', 'Current header background in inline merge-conflicts.'));\nexport const mergeCurrentContentBackground = registerColor('merge.currentContentBackground', { dark: transparent(mergeCurrentHeaderBackground, contentTransparency), light: transparent(mergeCurrentHeaderBackground, contentTransparency), hc: transparent(mergeCurrentHeaderBackground, contentTransparency) }, nls.localize('mergeCurrentContentBackground', 'Current content background in inline merge-conflicts.'));\nexport const mergeIncomingHeaderBackground = registerColor('merge.incomingHeaderBackground', { dark: incomingBaseColor, light: incomingBaseColor, hc: null }, nls.localize('mergeIncomingHeaderBackground', 'Incoming header background in inline merge-conflicts.'));\nexport const mergeIncomingContentBackground = registerColor('merge.incomingContentBackground', { dark: transparent(mergeIncomingHeaderBackground, contentTransparency), light: transparent(mergeIncomingHeaderBackground, contentTransparency), hc: transparent(mergeIncomingHeaderBackground, contentTransparency) }, nls.localize('mergeIncomingContentBackground', 'Incoming content background in inline merge-conflicts.'));\nexport const mergeCommonHeaderBackground = registerColor('merge.commonHeaderBackground', { dark: commonBaseColor, light: commonBaseColor, hc: null }, nls.localize('mergeCommonHeaderBackground', 'Common ancestor header background in inline merge-conflicts.'));\nexport const mergeCommonContentBackground = registerColor('merge.commonContentBackground', { dark: transparent(mergeCommonHeaderBackground, contentTransparency), light: transparent(mergeCommonHeaderBackground, contentTransparency), hc: transparent(mergeCommonHeaderBackground, contentTransparency) }, nls.localize('mergeCommonContentBackground', 'Common ancester content background in inline merge-conflicts.'));\n\nexport const mergeBorder = registerColor('merge.border', { dark: null, light: null, hc: '#C3DF6F' }, nls.localize('mergeBorder', 'Border color on headers and the splitter in inline merge-conflicts.'));\n\nexport const overviewRulerCurrentContentForeground = registerColor('editorOverviewRuler.currentContentForeground', { dark: transparent(mergeCurrentHeaderBackground, rulerTransparency), light: transparent(mergeCurrentHeaderBackground, rulerTransparency), hc: mergeBorder }, nls.localize('overviewRulerCurrentContentForeground', 'Current overview ruler foreground for inline merge-conflicts.'));\nexport const overviewRulerIncomingContentForeground = registerColor('editorOverviewRuler.incomingContentForeground', { dark: transparent(mergeIncomingHeaderBackground, rulerTransparency), light: transparent(mergeIncomingHeaderBackground, rulerTransparency), hc: mergeBorder }, nls.localize('overviewRulerIncomingContentForeground', 'Incoming overview ruler foreground for inline merge-conflicts.'));\nexport const overviewRulerCommonContentForeground = registerColor('editorOverviewRuler.commonContentForeground', { dark: transparent(mergeCommonHeaderBackground, rulerTransparency), light: transparent(mergeCommonHeaderBackground, rulerTransparency), hc: mergeBorder }, nls.localize('overviewRulerCommonContentForeground', 'Common ancestor overview ruler foreground for inline merge-conflicts.'));\n\n// ----- color functions\n\nexport function darken(colorValue: ColorValue, factor: number): ColorFunction {\n\treturn (theme) => {\n\t\tlet color = resolveColorValue(colorValue, theme);\n\t\tif (color) {\n\t\t\treturn color.darken(factor);\n\t\t}\n\t\treturn null;\n\t};\n}\n\nexport function lighten(colorValue: ColorValue, factor: number): ColorFunction {\n\treturn (theme) => {\n\t\tlet color = resolveColorValue(colorValue, theme);\n\t\tif (color) {\n\t\t\treturn color.lighten(factor);\n\t\t}\n\t\treturn null;\n\t};\n}\n\nexport function transparent(colorValue: ColorValue, factor: number): ColorFunction {\n\treturn (theme) => {\n\t\tlet color = resolveColorValue(colorValue, theme);\n\t\tif (color) {\n\t\t\treturn color.transparent(factor);\n\t\t}\n\t\treturn null;\n\t};\n}\n\nexport function oneOf(...colorValues: ColorValue[]): ColorFunction {\n\treturn (theme) => {\n\t\tfor (let colorValue of colorValues) {\n\t\t\tlet color = resolveColorValue(colorValue, theme);\n\t\t\tif (color) {\n\t\t\t\treturn color;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n}\n\nfunction lessProminent(colorValue: ColorValue, backgroundColorValue: ColorValue, factor: number, transparency: number): ColorFunction {\n\treturn (theme) => {\n\t\tlet from = resolveColorValue(colorValue, theme);\n\t\tif (from) {\n\t\t\tlet backgroundColor = resolveColorValue(backgroundColorValue, theme);\n\t\t\tif (backgroundColor) {\n\t\t\t\tif (from.isDarkerThan(backgroundColor)) {\n\t\t\t\t\treturn Color.getLighterColor(from, backgroundColor, factor).transparent(transparency);\n\t\t\t\t}\n\t\t\t\treturn Color.getDarkerColor(from, backgroundColor, factor).transparent(transparency);\n\t\t\t}\n\t\t\treturn from.transparent(factor * transparency);\n\t\t}\n\t\treturn null;\n\t};\n}\n\n// ----- implementation\n\n/**\n * @param colorValue Resolve a color value in the context of a theme\n */\nfunction resolveColorValue(colorValue: ColorValue, theme: ITheme): Color {\n\tif (colorValue === null) {\n\t\treturn null;\n\t} else if (typeof colorValue === 'string') {\n\t\tif (colorValue[0] === '#') {\n\t\t\treturn Color.fromHex(colorValue);\n\t\t}\n\t\treturn theme.getColor(colorValue);\n\t} else if (colorValue instanceof Color) {\n\t\treturn colorValue;\n\t} else if (typeof colorValue === 'function') {\n\t\treturn colorValue(theme);\n\t}\n\treturn null;\n}\n\n// setTimeout(_ => console.log(colorRegistry.toString()), 5000);\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { ITheme, IThemeService } from 'vs/platform/theme/common/themeService';\nimport { inputBackground, inputForeground, ColorIdentifier, selectForeground, selectBackground, selectBorder, inputBorder, foreground, editorBackground, contrastBorder, inputActiveOptionBorder, listFocusBackground, listFocusForeground, listActiveSelectionBackground, listActiveSelectionForeground, listInactiveSelectionForeground, listInactiveSelectionBackground, listHoverBackground, listHoverForeground, listDropBackground, pickerGroupBorder, pickerGroupForeground, widgetShadow, inputValidationInfoBorder, inputValidationInfoBackground, inputValidationWarningBorder, inputValidationWarningBackground, inputValidationErrorBorder, inputValidationErrorBackground, activeContrastBorder, buttonForeground, buttonBackground, buttonHoverBackground, ColorFunction, lighten, badgeBackground, badgeForeground, progressBarBackground } from 'vs/platform/theme/common/colorRegistry';\nimport { IDisposable } from 'vs/base/common/lifecycle';\n\nexport type styleFn = (colors: { [name: string]: ColorIdentifier }) => void;\n\nexport interface IThemable {\n\tstyle: styleFn;\n}\n\nexport function attachStyler(themeService: IThemeService, optionsMapping: { [optionsKey: string]: ColorIdentifier | ColorFunction }, widgetOrCallback: IThemable | styleFn): IDisposable {\n\tfunction applyStyles(theme: ITheme): void {\n\t\tconst styles = Object.create(null);\n\t\tfor (let key in optionsMapping) {\n\t\t\tconst value = optionsMapping[key];\n\t\t\tif (typeof value === 'string') {\n\t\t\t\tstyles[key] = theme.getColor(value);\n\t\t\t} else if (typeof value === 'function') {\n\t\t\t\tstyles[key] = value(theme);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof widgetOrCallback === 'function') {\n\t\t\twidgetOrCallback(styles);\n\t\t} else {\n\t\t\twidgetOrCallback.style(styles);\n\t\t}\n\t}\n\n\tapplyStyles(themeService.getTheme());\n\n\treturn themeService.onThemeChange(applyStyles);\n}\n\nexport function attachCheckboxStyler(widget: IThemable, themeService: IThemeService, style?: { inputActiveOptionBorderColor?: ColorIdentifier }): IDisposable {\n\treturn attachStyler(themeService, {\n\t\tinputActiveOptionBorder: (style && style.inputActiveOptionBorderColor) || inputActiveOptionBorder\n\t}, widget);\n}\n\nexport function attachBadgeStyler(widget: IThemable, themeService: IThemeService, style?:\n\t{\n\t\tbadgeBackground?: ColorIdentifier,\n\t\tbadgeForeground?: ColorIdentifier\n\t}): IDisposable {\n\treturn attachStyler(themeService, {\n\t\tbadgeBackground: (style && style.badgeBackground) || badgeBackground,\n\t\tbadgeForeground: (style && style.badgeForeground) || badgeForeground,\n\t\tbadgeBorder: contrastBorder\n\t}, widget);\n}\n\nexport function attachInputBoxStyler(widget: IThemable, themeService: IThemeService, style?:\n\t{\n\t\tinputBackground?: ColorIdentifier,\n\t\tinputForeground?: ColorIdentifier,\n\t\tinputBorder?: ColorIdentifier,\n\t\tinputValidationInfoBorder?: ColorIdentifier,\n\t\tinputValidationInfoBackground?: ColorIdentifier,\n\t\tinputValidationWarningBorder?: ColorIdentifier,\n\t\tinputValidationWarningBackground?: ColorIdentifier,\n\t\tinputValidationErrorBorder?: ColorIdentifier,\n\t\tinputValidationErrorBackground?: ColorIdentifier\n\t}): IDisposable {\n\treturn attachStyler(themeService, {\n\t\tinputBackground: (style && style.inputBackground) || inputBackground,\n\t\tinputForeground: (style && style.inputForeground) || inputForeground,\n\t\tinputBorder: (style && style.inputBorder) || inputBorder,\n\t\tinputValidationInfoBorder: (style && style.inputValidationInfoBorder) || inputValidationInfoBorder,\n\t\tinputValidationInfoBackground: (style && style.inputValidationInfoBackground) || inputValidationInfoBackground,\n\t\tinputValidationWarningBorder: (style && style.inputValidationWarningBorder) || inputValidationWarningBorder,\n\t\tinputValidationWarningBackground: (style && style.inputValidationWarningBackground) || inputValidationWarningBackground,\n\t\tinputValidationErrorBorder: (style && style.inputValidationErrorBorder) || inputValidationErrorBorder,\n\t\tinputValidationErrorBackground: (style && style.inputValidationErrorBackground) || inputValidationErrorBackground\n\t}, widget);\n}\n\nexport function attachSelectBoxStyler(widget: IThemable, themeService: IThemeService, style?: { selectBackground?: ColorIdentifier, selectForeground?: ColorIdentifier, selectBorder?: ColorIdentifier }): IDisposable {\n\treturn attachStyler(themeService, {\n\t\tselectBackground: (style && style.selectBackground) || selectBackground,\n\t\tselectForeground: (style && style.selectForeground) || selectForeground,\n\t\tselectBorder: (style && style.selectBorder) || selectBorder\n\t}, widget);\n}\n\nexport function attachFindInputBoxStyler(widget: IThemable, themeService: IThemeService, style?:\n\t{\n\t\tinputBackground?: ColorIdentifier,\n\t\tinputForeground?: ColorIdentifier,\n\t\tinputBorder?: ColorIdentifier,\n\t\tinputActiveOptionBorder?: ColorIdentifier,\n\t\tinputValidationInfoBorder?: ColorIdentifier,\n\t\tinputValidationInfoBackground?: ColorIdentifier,\n\t\tinputValidationWarningBorder?: ColorIdentifier,\n\t\tinputValidationWarningBackground?: ColorIdentifier,\n\t\tinputValidationErrorBorder?: ColorIdentifier,\n\t\tinputValidationErrorBackground?: ColorIdentifier\n\t}): IDisposable {\n\treturn attachStyler(themeService, {\n\t\tinputBackground: (style && style.inputBackground) || inputBackground,\n\t\tinputForeground: (style && style.inputForeground) || inputForeground,\n\t\tinputBorder: (style && style.inputBorder) || inputBorder,\n\t\tinputActiveOptionBorder: (style && style.inputActiveOptionBorder) || inputActiveOptionBorder,\n\t\tinputValidationInfoBorder: (style && style.inputValidationInfoBorder) || inputValidationInfoBorder,\n\t\tinputValidationInfoBackground: (style && style.inputValidationInfoBackground) || inputValidationInfoBackground,\n\t\tinputValidationWarningBorder: (style && style.inputValidationWarningBorder) || inputValidationWarningBorder,\n\t\tinputValidationWarningBackground: (style && style.inputValidationWarningBackground) || inputValidationWarningBackground,\n\t\tinputValidationErrorBorder: (style && style.inputValidationErrorBorder) || inputValidationErrorBorder,\n\t\tinputValidationErrorBackground: (style && style.inputValidationErrorBackground) || inputValidationErrorBackground\n\t}, widget);\n}\n\nexport function attachQuickOpenStyler(widget: IThemable, themeService: IThemeService, style?: {\n\tforeground?: ColorIdentifier,\n\tbackground?: ColorIdentifier,\n\tborderColor?: ColorIdentifier,\n\twidgetShadow?: ColorIdentifier,\n\tprogressBarBackground?: ColorIdentifier,\n\tinputBackground?: ColorIdentifier,\n\tinputForeground?: ColorIdentifier,\n\tinputBorder?: ColorIdentifier,\n\tinputValidationInfoBorder?: ColorIdentifier,\n\tinputValidationInfoBackground?: ColorIdentifier,\n\tinputValidationWarningBorder?: ColorIdentifier,\n\tinputValidationWarningBackground?: ColorIdentifier,\n\tinputValidationErrorBorder?: ColorIdentifier,\n\tinputValidationErrorBackground?: ColorIdentifier\n\tpickerGroupForeground?: ColorIdentifier,\n\tpickerGroupBorder?: ColorIdentifier,\n\tlistFocusBackground?: ColorIdentifier,\n\tlistFocusForeground?: ColorIdentifier,\n\tlistActiveSelectionBackground?: ColorIdentifier,\n\tlistActiveSelectionForeground?: ColorIdentifier,\n\tlistFocusAndSelectionBackground?: ColorIdentifier,\n\tlistFocusAndSelectionForeground?: ColorIdentifier,\n\tlistInactiveSelectionBackground?: ColorIdentifier,\n\tlistInactiveSelectionForeground?: ColorIdentifier,\n\tlistHoverBackground?: ColorIdentifier,\n\tlistHoverForeground?: ColorIdentifier,\n\tlistDropBackground?: ColorIdentifier,\n\tlistFocusOutline?: ColorIdentifier,\n\tlistSelectionOutline?: ColorIdentifier,\n\tlistHoverOutline?: ColorIdentifier\n}): IDisposable {\n\treturn attachStyler(themeService, {\n\t\tforeground: (style && style.foreground) || foreground,\n\t\tbackground: (style && style.background) || editorBackground,\n\t\tborderColor: style && style.borderColor || contrastBorder,\n\t\twidgetShadow: style && style.widgetShadow || widgetShadow,\n\t\tprogressBarBackground: style && style.progressBarBackground || progressBarBackground,\n\t\tpickerGroupForeground: style && style.pickerGroupForeground || pickerGroupForeground,\n\t\tpickerGroupBorder: style && style.pickerGroupBorder || pickerGroupBorder,\n\t\tinputBackground: (style && style.inputBackground) || inputBackground,\n\t\tinputForeground: (style && style.inputForeground) || inputForeground,\n\t\tinputBorder: (style && style.inputBorder) || inputBorder,\n\t\tinputValidationInfoBorder: (style && style.inputValidationInfoBorder) || inputValidationInfoBorder,\n\t\tinputValidationInfoBackground: (style && style.inputValidationInfoBackground) || inputValidationInfoBackground,\n\t\tinputValidationWarningBorder: (style && style.inputValidationWarningBorder) || inputValidationWarningBorder,\n\t\tinputValidationWarningBackground: (style && style.inputValidationWarningBackground) || inputValidationWarningBackground,\n\t\tinputValidationErrorBorder: (style && style.inputValidationErrorBorder) || inputValidationErrorBorder,\n\t\tinputValidationErrorBackground: (style && style.inputValidationErrorBackground) || inputValidationErrorBackground,\n\t\tlistFocusBackground: (style && style.listFocusBackground) || listFocusBackground,\n\t\tlistFocusForeground: (style && style.listFocusForeground) || listFocusForeground,\n\t\tlistActiveSelectionBackground: (style && style.listActiveSelectionBackground) || lighten(listActiveSelectionBackground, 0.1),\n\t\tlistActiveSelectionForeground: (style && style.listActiveSelectionForeground) || listActiveSelectionForeground,\n\t\tlistFocusAndSelectionBackground: style && style.listFocusAndSelectionBackground || listActiveSelectionBackground,\n\t\tlistFocusAndSelectionForeground: (style && style.listFocusAndSelectionForeground) || listActiveSelectionForeground,\n\t\tlistInactiveSelectionBackground: (style && style.listInactiveSelectionBackground) || listInactiveSelectionBackground,\n\t\tlistInactiveSelectionForeground: (style && style.listInactiveSelectionForeground) || listInactiveSelectionForeground,\n\t\tlistHoverBackground: (style && style.listHoverBackground) || listHoverBackground,\n\t\tlistHoverForeground: (style && style.listHoverForeground) || listHoverForeground,\n\t\tlistDropBackground: (style && style.listDropBackground) || listDropBackground,\n\t\tlistFocusOutline: (style && style.listFocusOutline) || activeContrastBorder,\n\t\tlistSelectionOutline: (style && style.listSelectionOutline) || activeContrastBorder,\n\t\tlistHoverOutline: (style && style.listHoverOutline) || activeContrastBorder\n\t}, widget);\n}\n\nexport function attachListStyler(widget: IThemable, themeService: IThemeService, style?: {\n\tlistFocusBackground?: ColorIdentifier,\n\tlistFocusForeground?: ColorIdentifier,\n\tlistActiveSelectionBackground?: ColorIdentifier,\n\tlistActiveSelectionForeground?: ColorIdentifier,\n\tlistFocusAndSelectionBackground?: ColorIdentifier,\n\tlistFocusAndSelectionForeground?: ColorIdentifier,\n\tlistInactiveFocusBackground?: ColorIdentifier,\n\tlistInactiveSelectionBackground?: ColorIdentifier,\n\tlistInactiveSelectionForeground?: ColorIdentifier,\n\tlistHoverBackground?: ColorIdentifier,\n\tlistHoverForeground?: ColorIdentifier,\n\tlistDropBackground?: ColorIdentifier,\n\tlistFocusOutline?: ColorIdentifier,\n\tlistInactiveFocusOutline?: ColorIdentifier,\n\tlistSelectionOutline?: ColorIdentifier,\n\tlistHoverOutline?: ColorIdentifier,\n}): IDisposable {\n\treturn attachStyler(themeService, {\n\t\tlistFocusBackground: (style && style.listFocusBackground) || listFocusBackground,\n\t\tlistFocusForeground: (style && style.listFocusForeground) || listFocusForeground,\n\t\tlistActiveSelectionBackground: (style && style.listActiveSelectionBackground) || lighten(listActiveSelectionBackground, 0.1),\n\t\tlistActiveSelectionForeground: (style && style.listActiveSelectionForeground) || listActiveSelectionForeground,\n\t\tlistFocusAndSelectionBackground: style && style.listFocusAndSelectionBackground || listActiveSelectionBackground,\n\t\tlistFocusAndSelectionForeground: (style && style.listFocusAndSelectionForeground) || listActiveSelectionForeground,\n\t\tlistInactiveFocusBackground: (style && style.listInactiveFocusBackground),\n\t\tlistInactiveSelectionBackground: (style && style.listInactiveSelectionBackground) || listInactiveSelectionBackground,\n\t\tlistInactiveSelectionForeground: (style && style.listInactiveSelectionForeground) || listInactiveSelectionForeground,\n\t\tlistHoverBackground: (style && style.listHoverBackground) || listHoverBackground,\n\t\tlistHoverForeground: (style && style.listHoverForeground) || listHoverForeground,\n\t\tlistDropBackground: (style && style.listDropBackground) || listDropBackground,\n\t\tlistFocusOutline: (style && style.listFocusOutline) || activeContrastBorder,\n\t\tlistSelectionOutline: (style && style.listSelectionOutline) || activeContrastBorder,\n\t\tlistHoverOutline: (style && style.listHoverOutline) || activeContrastBorder,\n\t\tlistInactiveFocusOutline: style && style.listInactiveFocusOutline // not defined by default, only opt-in\n\t}, widget);\n}\n\nexport function attachButtonStyler(widget: IThemable, themeService: IThemeService, style?: { buttonForeground?: ColorIdentifier, buttonBackground?: ColorIdentifier, buttonHoverBackground?: ColorIdentifier }): IDisposable {\n\treturn attachStyler(themeService, {\n\t\tbuttonForeground: (style && style.buttonForeground) || buttonForeground,\n\t\tbuttonBackground: (style && style.buttonBackground) || buttonBackground,\n\t\tbuttonHoverBackground: (style && style.buttonHoverBackground) || buttonHoverBackground,\n\t\tbuttonBorder: contrastBorder\n\t}, widget);\n}\n\nexport function attachProgressBarStyler(widget: IThemable, themeService: IThemeService, style?: { progressBarBackground?: ColorIdentifier }): IDisposable {\n\treturn attachStyler(themeService, {\n\t\tprogressBarBackground: (style && style.progressBarBackground) || progressBarBackground\n\t}, widget);\n}\n\nexport function attachStylerCallback(themeService: IThemeService, colors: { [name: string]: ColorIdentifier }, callback: styleFn): IDisposable {\n\treturn attachStyler(themeService, colors, callback);\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'use strict';\n\nimport { $, Dimension } from 'vs/base/browser/builder';\nimport { QuickOpenModel } from 'vs/base/parts/quickopen/browser/quickOpenModel';\nimport { QuickOpenWidget } from 'vs/base/parts/quickopen/browser/quickOpenWidget';\nimport { IAutoFocus } from 'vs/base/parts/quickopen/common/quickOpen';\nimport { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from 'vs/editor/browser/editorBrowser';\nimport { attachQuickOpenStyler } from 'vs/platform/theme/common/styler';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { IThemeService } from 'vs/platform/theme/common/themeService';\n\nexport interface IQuickOpenEditorWidgetOptions {\n\tinputAriaLabel: string;\n}\n\nexport class QuickOpenEditorWidget implements IOverlayWidget {\n\n\tprivate static ID = 'editor.contrib.quickOpenEditorWidget';\n\n\tprivate codeEditor: ICodeEditor;\n\tprivate themeService: IThemeService;\n\tprivate visible: boolean;\n\tprivate quickOpenWidget: QuickOpenWidget;\n\tprivate domNode: HTMLElement;\n\tprivate styler: IDisposable;\n\n\tconstructor(codeEditor: ICodeEditor, onOk: () => void, onCancel: () => void, onType: (value: string) => void, configuration: IQuickOpenEditorWidgetOptions, themeService: IThemeService) {\n\t\tthis.codeEditor = codeEditor;\n\t\tthis.themeService = themeService;\n\n\t\tthis.create(onOk, onCancel, onType, configuration);\n\t}\n\n\tprivate create(onOk: () => void, onCancel: () => void, onType: (value: string) => void, configuration: IQuickOpenEditorWidgetOptions): void {\n\t\tthis.domNode = $().div().getHTMLElement();\n\n\t\tthis.quickOpenWidget = new QuickOpenWidget(\n\t\t\tthis.domNode,\n\t\t\t{\n\t\t\t\tonOk: onOk,\n\t\t\t\tonCancel: onCancel,\n\t\t\t\tonType: onType\n\t\t\t}, {\n\t\t\t\tinputPlaceHolder: null,\n\t\t\t\tinputAriaLabel: configuration.inputAriaLabel,\n\t\t\t\tkeyboardSupport: true\n\t\t\t},\n\t\t\tnull\n\t\t);\n\t\tthis.styler = attachQuickOpenStyler(this.quickOpenWidget, this.themeService);\n\n\t\tthis.quickOpenWidget.create();\n\t\tthis.codeEditor.addOverlayWidget(this);\n\t}\n\n\tpublic setInput(model: QuickOpenModel, focus: IAutoFocus): void {\n\t\tthis.quickOpenWidget.setInput(model, focus);\n\t}\n\n\tpublic getId(): string {\n\t\treturn QuickOpenEditorWidget.ID;\n\t}\n\n\tpublic getDomNode(): HTMLElement {\n\t\treturn this.domNode;\n\t}\n\n\tpublic destroy(): void {\n\t\tthis.codeEditor.removeOverlayWidget(this);\n\t\tthis.quickOpenWidget.dispose();\n\t\tthis.styler.dispose();\n\t}\n\n\tpublic isVisible(): boolean {\n\t\treturn this.visible;\n\t}\n\n\tpublic show(value: string): void {\n\t\tthis.visible = true;\n\n\t\tvar editorLayout = this.codeEditor.getLayoutInfo();\n\t\tif (editorLayout) {\n\t\t\tthis.quickOpenWidget.layout(new Dimension(editorLayout.width, editorLayout.height));\n\t\t}\n\n\t\tthis.quickOpenWidget.show(value);\n\t\tthis.codeEditor.layoutOverlayWidget(this);\n\t}\n\n\tpublic hide(): void {\n\t\tthis.visible = false;\n\t\tthis.quickOpenWidget.hide();\n\t\tthis.codeEditor.layoutOverlayWidget(this);\n\t}\n\n\tpublic getPosition(): IOverlayWidgetPosition {\n\t\tif (this.visible) {\n\t\t\treturn {\n\t\t\t\tpreference: OverlayWidgetPositionPreference.TOP_CENTER\n\t\t\t};\n\t\t}\n\n\t\treturn null;\n\t}\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'use strict';\n\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\nimport { Color } from 'vs/base/common/color';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport platform = require('vs/platform/registry/common/platform');\nimport { ColorIdentifier } from 'vs/platform/theme/common/colorRegistry';\nimport Event, { Emitter } from 'vs/base/common/event';\n\nexport let IThemeService = createDecorator('themeService');\n\nexport interface ThemeColor {\n\tid: string;\n}\n\n// base themes\nexport const DARK: ThemeType = 'dark';\nexport const LIGHT: ThemeType = 'light';\nexport const HIGH_CONTRAST: ThemeType = 'hc';\nexport type ThemeType = 'light' | 'dark' | 'hc';\n\nexport function getThemeTypeSelector(type: ThemeType): string {\n\tswitch (type) {\n\t\tcase DARK: return 'vs-dark';\n\t\tcase HIGH_CONTRAST: return 'hc-black';\n\t\tdefault: return 'vs';\n\t}\n}\n\nexport interface ITheme {\n\treadonly type: ThemeType;\n\n\t/**\n\t * Resolves the color of the given color identifer. If the theme does not\n\t * specify the color, the default color is returned unless useDefault is set to false.\n\t * @param color the id of the color\n\t * @param useDefault specifies if the default color should be used. If not set, the default is used.\n\t */\n\tgetColor(color: ColorIdentifier, useDefault?: boolean): Color;\n\n\t/**\n\t * Returns wheter the theme defines a value for the color. If not, that means the\n\t * default color will be used.\n\t */\n\tdefines(color: ColorIdentifier): boolean;\n}\n\nexport interface ICssStyleCollector {\n\taddRule(rule: string): void;\n}\n\nexport interface IThemingParticipant {\n\t(theme: ITheme, collector: ICssStyleCollector): void;\n}\n\nexport interface IThemeService {\n\t_serviceBrand: any;\n\n\tgetTheme(): ITheme;\n\n\t/**\n\t * Register a theming participant that is invoked after every theme change.\n\t */\n\tonThemeChange: Event;\n\n}\n\n// static theming participant\nexport const Extensions = {\n\tThemingContribution: 'base.contributions.theming'\n};\n\nexport interface IThemingRegistry {\n\n\t/**\n\t * Register a theming participant that is invoked on every theme change.\n\t */\n\tonThemeChange(participant: IThemingParticipant): IDisposable;\n\n\tgetThemingParticipants(): IThemingParticipant[];\n\n\treadonly onThemingParticipantAdded: Event;\n}\n\nclass ThemingRegistry implements IThemingRegistry {\n\tprivate themingParticipants: IThemingParticipant[] = [];\n\tprivate onThemingParticipantAddedEmitter: Emitter;\n\n\tconstructor() {\n\t\tthis.themingParticipants = [];\n\t\tthis.onThemingParticipantAddedEmitter = new Emitter();\n\t}\n\n\tpublic onThemeChange(participant: IThemingParticipant): IDisposable {\n\t\tthis.themingParticipants.push(participant);\n\t\tthis.onThemingParticipantAddedEmitter.fire(participant);\n\t\treturn {\n\t\t\tdispose: () => {\n\t\t\t\tconst idx = this.themingParticipants.indexOf(participant);\n\t\t\t\tthis.themingParticipants.splice(idx, 1);\n\t\t\t}\n\t\t};\n\t}\n\n\tpublic get onThemingParticipantAdded(): Event {\n\t\treturn this.onThemingParticipantAddedEmitter.event;\n\t}\n\n\tpublic getThemingParticipants(): IThemingParticipant[] {\n\t\treturn this.themingParticipants;\n\t}\n}\n\nlet themingRegistry = new ThemingRegistry();\nplatform.Registry.add(Extensions.ThemingContribution, themingRegistry);\n\nexport function registerThemingParticipant(participant: IThemingParticipant): IDisposable {\n\treturn themingRegistry.onThemeChange(participant);\n}\n\n/**\n * Tag function for strings containing css rules\n */\nexport function cssRule(literals, ...placeholders) {\n\tlet result = '';\n\tfor (let i = 0; i < placeholders.length; i++) {\n\t\tresult += literals[i];\n\t\tlet placeholder = placeholders[i];\n\t\tif (placeholder === null) {\n\t\t\tresult += 'transparent';\n\t\t} else {\n\t\t\tresult += placeholder.toString();\n\t\t}\n\t}\n\tresult += literals[literals.length - 1];\n\treturn result;\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'use strict';\n\nimport * as strings from 'vs/base/common/strings';\nimport URI from 'vs/base/common/uri';\nimport * as dom from 'vs/base/browser/dom';\nimport {\n\tIDecorationRenderOptions, IModelDecorationOptions, IModelDecorationOverviewRulerOptions, IThemeDecorationRenderOptions,\n\tIContentDecorationRenderOptions, OverviewRulerLane, TrackedRangeStickiness, isThemeColor\n} from 'vs/editor/common/editorCommon';\nimport { AbstractCodeEditorService } from 'vs/editor/common/services/abstractCodeEditorService';\nimport { IDisposable, dispose as disposeAll } from 'vs/base/common/lifecycle';\nimport { IThemeService, ITheme, ThemeColor } from 'vs/platform/theme/common/themeService';\n\nexport class CodeEditorServiceImpl extends AbstractCodeEditorService {\n\n\tprivate _styleSheet: HTMLStyleElement;\n\tprivate _decorationOptionProviders: { [key: string]: IModelDecorationOptionsProvider };\n\tprivate _themeService: IThemeService;\n\n\tconstructor( @IThemeService themeService: IThemeService, styleSheet = dom.createStyleSheet()) {\n\t\tsuper();\n\t\tthis._styleSheet = styleSheet;\n\t\tthis._decorationOptionProviders = Object.create(null);\n\t\tthis._themeService = themeService;\n\t}\n\n\tpublic registerDecorationType(key: string, options: IDecorationRenderOptions, parentTypeKey?: string): void {\n\t\tlet provider = this._decorationOptionProviders[key];\n\t\tif (!provider) {\n\t\t\tlet providerArgs: ProviderArguments = {\n\t\t\t\tstyleSheet: this._styleSheet,\n\t\t\t\tkey: key,\n\t\t\t\tparentTypeKey: parentTypeKey,\n\t\t\t\toptions: options\n\t\t\t};\n\t\t\tif (!parentTypeKey) {\n\t\t\t\tprovider = new DecorationTypeOptionsProvider(this._themeService, providerArgs);\n\t\t\t} else {\n\t\t\t\tprovider = new DecorationSubTypeOptionsProvider(this._themeService, providerArgs);\n\t\t\t}\n\t\t\tthis._decorationOptionProviders[key] = provider;\n\t\t}\n\t\tprovider.refCount++;\n\t}\n\n\tpublic removeDecorationType(key: string): void {\n\t\tlet provider = this._decorationOptionProviders[key];\n\t\tif (provider) {\n\t\t\tprovider.refCount--;\n\t\t\tif (provider.refCount <= 0) {\n\t\t\t\tdelete this._decorationOptionProviders[key];\n\t\t\t\tprovider.dispose();\n\t\t\t\tthis.listCodeEditors().forEach((ed) => ed.removeDecorations(key));\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic resolveDecorationOptions(decorationTypeKey: string, writable: boolean): IModelDecorationOptions {\n\t\tlet provider = this._decorationOptionProviders[decorationTypeKey];\n\t\tif (!provider) {\n\t\t\tthrow new Error('Unknown decoration type key: ' + decorationTypeKey);\n\t\t}\n\t\treturn provider.getOptions(this, writable);\n\t}\n\n}\n\ninterface IModelDecorationOptionsProvider extends IDisposable {\n\trefCount: number;\n\tgetOptions(codeEditorService: AbstractCodeEditorService, writable: boolean): IModelDecorationOptions;\n}\n\nclass DecorationSubTypeOptionsProvider implements IModelDecorationOptionsProvider {\n\n\tpublic refCount: number;\n\n\tprivate _parentTypeKey: string;\n\tprivate _beforeContentRules: DecorationCSSRules;\n\tprivate _afterContentRules: DecorationCSSRules;\n\n\tconstructor(themeService: IThemeService, providerArgs: ProviderArguments) {\n\t\tthis._parentTypeKey = providerArgs.parentTypeKey;\n\t\tthis.refCount = 0;\n\n\t\tthis._beforeContentRules = new DecorationCSSRules(ModelDecorationCSSRuleType.BeforeContentClassName, providerArgs, themeService);\n\t\tthis._afterContentRules = new DecorationCSSRules(ModelDecorationCSSRuleType.AfterContentClassName, providerArgs, themeService);\n\t}\n\n\tpublic getOptions(codeEditorService: AbstractCodeEditorService, writable: boolean): IModelDecorationOptions {\n\t\tlet options = codeEditorService.resolveDecorationOptions(this._parentTypeKey, true);\n\t\tif (this._beforeContentRules) {\n\t\t\toptions.beforeContentClassName = this._beforeContentRules.className;\n\t\t}\n\t\tif (this._afterContentRules) {\n\t\t\toptions.afterContentClassName = this._afterContentRules.className;\n\t\t}\n\t\treturn options;\n\t}\n\n\tpublic dispose(): void {\n\t\tif (this._beforeContentRules) {\n\t\t\tthis._beforeContentRules.dispose();\n\t\t\tthis._beforeContentRules = null;\n\t\t}\n\t\tif (this._afterContentRules) {\n\t\t\tthis._afterContentRules.dispose();\n\t\t\tthis._afterContentRules = null;\n\t\t}\n\t}\n}\n\ninterface ProviderArguments {\n\tstyleSheet: HTMLStyleElement;\n\tkey: string;\n\tparentTypeKey?: string;\n\toptions: IDecorationRenderOptions;\n}\n\n\nclass DecorationTypeOptionsProvider implements IModelDecorationOptionsProvider {\n\n\tprivate _disposables: IDisposable[];\n\tpublic refCount: number;\n\n\tpublic className: string;\n\tpublic inlineClassName: string;\n\tpublic beforeContentClassName: string;\n\tpublic afterContentClassName: string;\n\tpublic glyphMarginClassName: string;\n\tpublic isWholeLine: boolean;\n\tpublic overviewRuler: IModelDecorationOverviewRulerOptions;\n\tpublic stickiness: TrackedRangeStickiness;\n\n\tconstructor(themeService: IThemeService, providerArgs: ProviderArguments) {\n\t\tthis.refCount = 0;\n\t\tthis._disposables = [];\n\n\t\tlet createCSSRules = (type: ModelDecorationCSSRuleType) => {\n\t\t\tlet rules = new DecorationCSSRules(type, providerArgs, themeService);\n\t\t\tif (rules.hasContent) {\n\t\t\t\tthis._disposables.push(rules);\n\t\t\t\treturn rules.className;\n\t\t\t}\n\t\t\treturn void 0;\n\t\t};\n\n\t\tthis.className = createCSSRules(ModelDecorationCSSRuleType.ClassName);\n\t\tthis.inlineClassName = createCSSRules(ModelDecorationCSSRuleType.InlineClassName);\n\t\tthis.beforeContentClassName = createCSSRules(ModelDecorationCSSRuleType.BeforeContentClassName);\n\t\tthis.afterContentClassName = createCSSRules(ModelDecorationCSSRuleType.AfterContentClassName);\n\t\tthis.glyphMarginClassName = createCSSRules(ModelDecorationCSSRuleType.GlyphMarginClassName);\n\n\t\tlet options = providerArgs.options;\n\t\tthis.isWholeLine = Boolean(options.isWholeLine);\n\t\tthis.stickiness = options.rangeBehavior;\n\n\t\tlet lightOverviewRulerColor = options.light && options.light.overviewRulerColor || options.overviewRulerColor;\n\t\tlet darkOverviewRulerColor = options.dark && options.dark.overviewRulerColor || options.overviewRulerColor;\n\t\tif (\n\t\t\ttypeof lightOverviewRulerColor !== 'undefined'\n\t\t\t|| typeof darkOverviewRulerColor !== 'undefined'\n\t\t) {\n\t\t\tthis.overviewRuler = {\n\t\t\t\tcolor: lightOverviewRulerColor || darkOverviewRulerColor,\n\t\t\t\tdarkColor: darkOverviewRulerColor || lightOverviewRulerColor,\n\t\t\t\tposition: options.overviewRulerLane || OverviewRulerLane.Center\n\t\t\t};\n\t\t}\n\t}\n\n\tpublic getOptions(codeEditorService: AbstractCodeEditorService, writable: boolean): IModelDecorationOptions {\n\t\tif (!writable) {\n\t\t\treturn this;\n\t\t}\n\t\treturn {\n\t\t\tinlineClassName: this.inlineClassName,\n\t\t\tbeforeContentClassName: this.beforeContentClassName,\n\t\t\tafterContentClassName: this.afterContentClassName,\n\t\t\tclassName: this.className,\n\t\t\tglyphMarginClassName: this.glyphMarginClassName,\n\t\t\tisWholeLine: this.isWholeLine,\n\t\t\toverviewRuler: this.overviewRuler,\n\t\t\tstickiness: this.stickiness\n\t\t};\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._disposables = disposeAll(this._disposables);\n\t}\n}\n\n\nconst _CSS_MAP = {\n\tcolor: 'color:{0} !important;',\n\tbackgroundColor: 'background-color:{0};',\n\n\toutline: 'outline:{0};',\n\toutlineColor: 'outline-color:{0};',\n\toutlineStyle: 'outline-style:{0};',\n\toutlineWidth: 'outline-width:{0};',\n\n\tborder: 'border:{0};',\n\tborderColor: 'border-color:{0};',\n\tborderRadius: 'border-radius:{0};',\n\tborderSpacing: 'border-spacing:{0};',\n\tborderStyle: 'border-style:{0};',\n\tborderWidth: 'border-width:{0};',\n\n\ttextDecoration: 'text-decoration:{0};',\n\tcursor: 'cursor:{0};',\n\tletterSpacing: 'letter-spacing:{0};',\n\n\tgutterIconPath: 'background:url(\\'{0}\\') center center no-repeat;',\n\tgutterIconSize: 'background-size:{0};',\n\n\tcontentText: 'content:\\'{0}\\';',\n\tcontentIconPath: 'content:url(\\'{0}\\');',\n\tmargin: 'margin:{0};',\n\twidth: 'width:{0};',\n\theight: 'height:{0};'\n};\n\n\nclass DecorationCSSRules {\n\n\tprivate _theme: ITheme;\n\tprivate _className: string;\n\tprivate _unThemedSelector: string;\n\tprivate _hasContent: boolean;\n\tprivate _ruleType: ModelDecorationCSSRuleType;\n\tprivate _themeListener: IDisposable;\n\tprivate _providerArgs: ProviderArguments;\n\tprivate _usesThemeColors: boolean;\n\n\tpublic constructor(ruleType: ModelDecorationCSSRuleType, providerArgs: ProviderArguments, themeService: IThemeService) {\n\t\tthis._theme = themeService.getTheme();\n\t\tthis._ruleType = ruleType;\n\t\tthis._providerArgs = providerArgs;\n\t\tthis._usesThemeColors = false;\n\t\tthis._hasContent = false;\n\n\t\tlet className = CSSNameHelper.getClassName(this._providerArgs.key, ruleType);\n\t\tif (this._providerArgs.parentTypeKey) {\n\t\t\tclassName = className + ' ' + CSSNameHelper.getClassName(this._providerArgs.parentTypeKey, ruleType);\n\t\t}\n\t\tthis._className = className;\n\n\t\tthis._unThemedSelector = CSSNameHelper.getSelector(this._providerArgs.key, this._providerArgs.parentTypeKey, ruleType);\n\n\t\tthis._buildCSS();\n\n\t\tif (this._usesThemeColors) {\n\t\t\tthis._themeListener = themeService.onThemeChange(theme => {\n\t\t\t\tthis._theme = themeService.getTheme();\n\t\t\t\tthis._removeCSS();\n\t\t\t\tthis._buildCSS();\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic dispose() {\n\t\tif (this._hasContent) {\n\t\t\tthis._removeCSS();\n\t\t\tthis._hasContent = false;\n\t\t}\n\t\tif (this._themeListener) {\n\t\t\tthis._themeListener.dispose();\n\t\t\tthis._themeListener = null;\n\t\t}\n\t}\n\n\tpublic get hasContent(): boolean {\n\t\treturn this._hasContent;\n\t}\n\n\tpublic get className(): string {\n\t\treturn this._className;\n\t}\n\n\tprivate _buildCSS(): void {\n\t\tlet options = this._providerArgs.options;\n\t\tlet unthemedCSS, lightCSS, darkCSS: string;\n\t\tswitch (this._ruleType) {\n\t\t\tcase ModelDecorationCSSRuleType.ClassName:\n\t\t\t\tunthemedCSS = this.getCSSTextForModelDecorationClassName(options);\n\t\t\t\tlightCSS = this.getCSSTextForModelDecorationClassName(options.light);\n\t\t\t\tdarkCSS = this.getCSSTextForModelDecorationClassName(options.dark);\n\t\t\t\tbreak;\n\t\t\tcase ModelDecorationCSSRuleType.InlineClassName:\n\t\t\t\tunthemedCSS = this.getCSSTextForModelDecorationInlineClassName(options);\n\t\t\t\tlightCSS = this.getCSSTextForModelDecorationInlineClassName(options.light);\n\t\t\t\tdarkCSS = this.getCSSTextForModelDecorationInlineClassName(options.dark);\n\t\t\t\tbreak;\n\t\t\tcase ModelDecorationCSSRuleType.GlyphMarginClassName:\n\t\t\t\tunthemedCSS = this.getCSSTextForModelDecorationGlyphMarginClassName(options);\n\t\t\t\tlightCSS = this.getCSSTextForModelDecorationGlyphMarginClassName(options.light);\n\t\t\t\tdarkCSS = this.getCSSTextForModelDecorationGlyphMarginClassName(options.dark);\n\t\t\t\tbreak;\n\t\t\tcase ModelDecorationCSSRuleType.BeforeContentClassName:\n\t\t\t\tunthemedCSS = this.getCSSTextForModelDecorationContentClassName(options.before);\n\t\t\t\tlightCSS = this.getCSSTextForModelDecorationContentClassName(options.light && options.light.before);\n\t\t\t\tdarkCSS = this.getCSSTextForModelDecorationContentClassName(options.dark && options.dark.before);\n\t\t\t\tbreak;\n\t\t\tcase ModelDecorationCSSRuleType.AfterContentClassName:\n\t\t\t\tunthemedCSS = this.getCSSTextForModelDecorationContentClassName(options.after);\n\t\t\t\tlightCSS = this.getCSSTextForModelDecorationContentClassName(options.light && options.light.after);\n\t\t\t\tdarkCSS = this.getCSSTextForModelDecorationContentClassName(options.dark && options.dark.after);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error('Unknown rule type: ' + this._ruleType);\n\t\t}\n\t\tlet sheet = this._providerArgs.styleSheet.sheet;\n\n\t\tlet hasContent = false;\n\t\tif (unthemedCSS.length > 0) {\n\t\t\tsheet.insertRule(`${this._unThemedSelector} {${unthemedCSS}}`, 0);\n\t\t\thasContent = true;\n\t\t}\n\t\tif (lightCSS.length > 0) {\n\t\t\tsheet.insertRule(`.vs${this._unThemedSelector} {${lightCSS}}`, 0);\n\t\t\thasContent = true;\n\t\t}\n\t\tif (darkCSS.length > 0) {\n\t\t\tsheet.insertRule(`.vs-dark${this._unThemedSelector}, .hc-black${this._unThemedSelector} {${darkCSS}}`, 0);\n\t\t\thasContent = true;\n\t\t}\n\t\tthis._hasContent = hasContent;\n\t}\n\n\tprivate _removeCSS(): void {\n\t\tdom.removeCSSRulesContainingSelector(this._unThemedSelector, this._providerArgs.styleSheet);\n\t}\n\n\t/**\n\t * Build the CSS for decorations styled via `className`.\n\t */\n\tprivate getCSSTextForModelDecorationClassName(opts: IThemeDecorationRenderOptions): string {\n\t\tif (!opts) {\n\t\t\treturn '';\n\t\t}\n\t\tlet cssTextArr: string[] = [];\n\t\tthis.collectCSSText(opts, ['backgroundColor'], cssTextArr);\n\t\tthis.collectCSSText(opts, ['outline', 'outlineColor', 'outlineStyle', 'outlineWidth'], cssTextArr);\n\t\tthis.collectBorderSettingsCSSText(opts, cssTextArr);\n\t\treturn cssTextArr.join('');\n\t}\n\n\t/**\n\t * Build the CSS for decorations styled via `inlineClassName`.\n\t */\n\tprivate getCSSTextForModelDecorationInlineClassName(opts: IThemeDecorationRenderOptions): string {\n\t\tif (!opts) {\n\t\t\treturn '';\n\t\t}\n\t\tlet cssTextArr: string[] = [];\n\t\tthis.collectCSSText(opts, ['textDecoration', 'cursor', 'color', 'letterSpacing'], cssTextArr);\n\t\treturn cssTextArr.join('');\n\t}\n\n\t/**\n\t * Build the CSS for decorations styled before or after content.\n\t */\n\tprivate getCSSTextForModelDecorationContentClassName(opts: IContentDecorationRenderOptions): string {\n\t\tif (!opts) {\n\t\t\treturn '';\n\t\t}\n\t\tlet cssTextArr: string[] = [];\n\n\t\tif (typeof opts !== 'undefined') {\n\t\t\tthis.collectBorderSettingsCSSText(opts, cssTextArr);\n\t\t\tif (typeof opts.contentIconPath === 'string') {\n\t\t\t\tcssTextArr.push(strings.format(_CSS_MAP.contentIconPath, URI.file(opts.contentIconPath).toString().replace(/'/g, '%27')));\n\t\t\t} else if (opts.contentIconPath instanceof URI) {\n\t\t\t\tcssTextArr.push(strings.format(_CSS_MAP.contentIconPath, opts.contentIconPath.toString(true).replace(/'/g, '%27')));\n\t\t\t}\n\t\t\tif (typeof opts.contentText === 'string') {\n\t\t\t\tconst truncated = opts.contentText.match(/^.*$/m)[0]; // only take first line\n\t\t\t\tconst escaped = truncated.replace(/['\\\\]/g, '\\\\$&');\n\n\t\t\t\tcssTextArr.push(strings.format(_CSS_MAP.contentText, escaped));\n\t\t\t}\n\t\t\tthis.collectCSSText(opts, ['textDecoration', 'color', 'backgroundColor', 'margin'], cssTextArr);\n\t\t\tif (this.collectCSSText(opts, ['width', 'height'], cssTextArr)) {\n\t\t\t\tcssTextArr.push('display:inline-block;');\n\t\t\t}\n\t\t}\n\n\t\treturn cssTextArr.join('');\n\t}\n\n\t/**\n\t * Build the CSS for decorations styled via `glpyhMarginClassName`.\n\t */\n\tprivate getCSSTextForModelDecorationGlyphMarginClassName(opts: IThemeDecorationRenderOptions): string {\n\t\tif (!opts) {\n\t\t\treturn '';\n\t\t}\n\t\tlet cssTextArr = [];\n\n\t\tif (typeof opts.gutterIconPath !== 'undefined') {\n\t\t\tif (typeof opts.gutterIconPath === 'string') {\n\t\t\t\tcssTextArr.push(strings.format(_CSS_MAP.gutterIconPath, URI.file(opts.gutterIconPath).toString()));\n\t\t\t} else {\n\t\t\t\tcssTextArr.push(strings.format(_CSS_MAP.gutterIconPath, opts.gutterIconPath.toString(true).replace(/'/g, '%27')));\n\t\t\t}\n\t\t\tif (typeof opts.gutterIconSize !== 'undefined') {\n\t\t\t\tcssTextArr.push(strings.format(_CSS_MAP.gutterIconSize, opts.gutterIconSize));\n\t\t\t}\n\t\t}\n\n\t\treturn cssTextArr.join('');\n\t}\n\n\tprivate collectBorderSettingsCSSText(opts: any, cssTextArr: string[]): boolean {\n\t\tif (this.collectCSSText(opts, ['border', 'borderColor', 'borderRadius', 'borderSpacing', 'borderStyle', 'borderWidth'], cssTextArr)) {\n\t\t\tcssTextArr.push(strings.format('box-sizing: border-box;'));\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate collectCSSText(opts: any, properties: string[], cssTextArr: string[]): boolean {\n\t\tlet lenBefore = cssTextArr.length;\n\t\tfor (let property of properties) {\n\t\t\tlet value = this.resolveValue(opts[property]);\n\t\t\tif (typeof value === 'string') {\n\t\t\t\tcssTextArr.push(strings.format(_CSS_MAP[property], value));\n\t\t\t}\n\t\t}\n\t\treturn cssTextArr.length !== lenBefore;\n\t}\n\n\tprivate resolveValue(value: string | ThemeColor): string {\n\t\tif (isThemeColor(value)) {\n\t\t\tthis._usesThemeColors = true;\n\t\t\tlet color = this._theme.getColor(value.id);\n\t\t\tif (color) {\n\t\t\t\treturn color.toString();\n\t\t\t}\n\t\t\treturn 'transparent';\n\t\t}\n\t\treturn value;\n\t}\n}\n\nconst enum ModelDecorationCSSRuleType {\n\tClassName = 0,\n\tInlineClassName = 1,\n\tGlyphMarginClassName = 2,\n\tBeforeContentClassName = 3,\n\tAfterContentClassName = 4\n}\n\nclass CSSNameHelper {\n\n\tpublic static getClassName(key: string, type: ModelDecorationCSSRuleType): string {\n\t\treturn 'ced-' + key + '-' + type;\n\t}\n\n\tpublic static getSelector(key: string, parentKey: string, ruleType: ModelDecorationCSSRuleType): string {\n\t\tlet selector = '.monaco-editor .' + this.getClassName(key, ruleType);\n\t\tif (parentKey) {\n\t\t\tselector = selector + '.' + this.getClassName(parentKey, ruleType);\n\t\t}\n\t\tif (ruleType === ModelDecorationCSSRuleType.BeforeContentClassName) {\n\t\t\tselector += '::before';\n\t\t} else if (ruleType === ModelDecorationCSSRuleType.AfterContentClassName) {\n\t\t\tselector += '::after';\n\t\t}\n\t\treturn selector;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as dom from 'vs/base/browser/dom';\nimport { ScrollableElementCreationOptions, ScrollableElementChangeOptions } from 'vs/base/browser/ui/scrollbar/scrollableElementOptions';\nimport { IOverviewRulerLayoutInfo, ScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement';\nimport { INewScrollPosition } from 'vs/editor/common/editorCommon';\nimport { ViewPart, PartFingerprint, PartFingerprints } from 'vs/editor/browser/view/viewPart';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\nimport { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/view/renderingContext';\nimport { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';\nimport { getThemeTypeSelector } from 'vs/platform/theme/common/themeService';\nimport { IMouseEvent } from 'vs/base/browser/mouseEvent';\nimport { ISimplifiedMouseEvent } from 'vs/base/browser/ui/scrollbar/abstractScrollbar';\n\nexport class EditorScrollbar extends ViewPart {\n\n\tprivate scrollbar: ScrollableElement;\n\tprivate scrollbarDomNode: FastDomNode;\n\n\tconstructor(\n\t\tcontext: ViewContext,\n\t\tlinesContent: FastDomNode,\n\t\tviewDomNode: FastDomNode,\n\t\toverflowGuardDomNode: FastDomNode\n\t) {\n\t\tsuper(context);\n\n\t\tconst editor = this._context.configuration.editor;\n\t\tconst configScrollbarOpts = editor.viewInfo.scrollbar;\n\n\t\tlet scrollbarOptions: ScrollableElementCreationOptions = {\n\t\t\tlistenOnDomNode: viewDomNode.domNode,\n\t\t\tclassName: 'editor-scrollable' + ' ' + getThemeTypeSelector(context.theme.type),\n\t\t\tuseShadows: false,\n\t\t\tlazyRender: true,\n\n\t\t\tvertical: configScrollbarOpts.vertical,\n\t\t\thorizontal: configScrollbarOpts.horizontal,\n\t\t\tverticalHasArrows: configScrollbarOpts.verticalHasArrows,\n\t\t\thorizontalHasArrows: configScrollbarOpts.horizontalHasArrows,\n\t\t\tverticalScrollbarSize: configScrollbarOpts.verticalScrollbarSize,\n\t\t\tverticalSliderSize: configScrollbarOpts.verticalSliderSize,\n\t\t\thorizontalScrollbarSize: configScrollbarOpts.horizontalScrollbarSize,\n\t\t\thorizontalSliderSize: configScrollbarOpts.horizontalSliderSize,\n\t\t\thandleMouseWheel: configScrollbarOpts.handleMouseWheel,\n\t\t\tarrowSize: configScrollbarOpts.arrowSize,\n\t\t\tmouseWheelScrollSensitivity: configScrollbarOpts.mouseWheelScrollSensitivity,\n\t\t};\n\n\t\tthis.scrollbar = this._register(new ScrollableElement(linesContent.domNode, scrollbarOptions, this._context.viewLayout.scrollable));\n\t\tPartFingerprints.write(this.scrollbar.getDomNode(), PartFingerprint.ScrollableElement);\n\n\t\tthis.scrollbarDomNode = createFastDomNode(this.scrollbar.getDomNode());\n\t\tthis.scrollbarDomNode.setPosition('absolute');\n\t\tthis._setLayout();\n\n\t\t// When having a zone widget that calls .focus() on one of its dom elements,\n\t\t// the browser will try desperately to reveal that dom node, unexpectedly\n\t\t// changing the .scrollTop of this.linesContent\n\n\t\tlet onBrowserDesperateReveal = (domNode: HTMLElement, lookAtScrollTop: boolean, lookAtScrollLeft: boolean) => {\n\t\t\tlet newScrollPosition: INewScrollPosition = {};\n\n\t\t\tif (lookAtScrollTop) {\n\t\t\t\tlet deltaTop = domNode.scrollTop;\n\t\t\t\tif (deltaTop) {\n\t\t\t\t\tnewScrollPosition.scrollTop = this._context.viewLayout.getScrollTop() + deltaTop;\n\t\t\t\t\tdomNode.scrollTop = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (lookAtScrollLeft) {\n\t\t\t\tlet deltaLeft = domNode.scrollLeft;\n\t\t\t\tif (deltaLeft) {\n\t\t\t\t\tnewScrollPosition.scrollLeft = this._context.viewLayout.getScrollLeft() + deltaLeft;\n\t\t\t\t\tdomNode.scrollLeft = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._context.viewLayout.setScrollPosition(newScrollPosition);\n\t\t};\n\n\t\t// I've seen this happen both on the view dom node & on the lines content dom node.\n\t\tthis._register(dom.addDisposableListener(viewDomNode.domNode, 'scroll', (e: Event) => onBrowserDesperateReveal(viewDomNode.domNode, true, true)));\n\t\tthis._register(dom.addDisposableListener(linesContent.domNode, 'scroll', (e: Event) => onBrowserDesperateReveal(linesContent.domNode, true, false)));\n\t\tthis._register(dom.addDisposableListener(overflowGuardDomNode.domNode, 'scroll', (e: Event) => onBrowserDesperateReveal(overflowGuardDomNode.domNode, true, false)));\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t}\n\n\tprivate _setLayout(): void {\n\t\tconst layoutInfo = this._context.configuration.editor.layoutInfo;\n\n\t\tthis.scrollbarDomNode.setLeft(layoutInfo.contentLeft);\n\t\tthis.scrollbarDomNode.setWidth(layoutInfo.contentWidth + layoutInfo.minimapWidth);\n\t\tthis.scrollbarDomNode.setHeight(layoutInfo.contentHeight);\n\t}\n\n\tpublic getOverviewRulerLayoutInfo(): IOverviewRulerLayoutInfo {\n\t\treturn this.scrollbar.getOverviewRulerLayoutInfo();\n\t}\n\n\tpublic getDomNode(): FastDomNode {\n\t\treturn this.scrollbarDomNode;\n\t}\n\n\tpublic delegateVerticalScrollbarMouseDown(browserEvent: IMouseEvent): void {\n\t\tthis.scrollbar.delegateVerticalScrollbarMouseDown(browserEvent);\n\t}\n\n\tpublic delegateSliderMouseDown(e: ISimplifiedMouseEvent, onDragFinished: () => void): void {\n\t\tthis.scrollbar.delegateSliderMouseDown(e, onDragFinished);\n\t}\n\n\t// --- begin event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tif (e.viewInfo) {\n\t\t\tconst editor = this._context.configuration.editor;\n\t\t\tlet newOpts: ScrollableElementChangeOptions = {\n\t\t\t\thandleMouseWheel: editor.viewInfo.scrollbar.handleMouseWheel,\n\t\t\t\tmouseWheelScrollSensitivity: editor.viewInfo.scrollbar.mouseWheelScrollSensitivity\n\t\t\t};\n\t\t\tthis.scrollbar.updateOptions(newOpts);\n\t\t}\n\t\tif (e.layoutInfo) {\n\t\t\tthis._setLayout();\n\t\t}\n\t\treturn true;\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean {\n\t\tthis.scrollbar.updateClassName('editor-scrollable' + ' ' + getThemeTypeSelector(this._context.theme.type));\n\t\treturn true;\n\t}\n\n\t// --- end event handlers\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\t// Nothing to do\n\t}\n\n\tpublic render(ctx: RestrictedRenderingContext): void {\n\t\tthis.scrollbar.renderNow();\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as browser from 'vs/base/browser/browser';\nimport * as platform from 'vs/base/common/platform';\nimport * as strings from 'vs/base/common/strings';\nimport { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';\nimport { IConfiguration } from 'vs/editor/common/editorCommon';\nimport { LineDecoration } from 'vs/editor/common/viewLayout/lineDecorations';\nimport { renderViewLine, RenderLineInput, CharacterMapping } from 'vs/editor/common/viewLayout/viewLineRenderer';\nimport { IVisibleLine } from 'vs/editor/browser/view/viewLayer';\nimport { RangeUtil } from 'vs/editor/browser/viewParts/lines/rangeUtil';\nimport { HorizontalRange } from 'vs/editor/common/view/renderingContext';\nimport { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData';\nimport { ThemeType, HIGH_CONTRAST } from 'vs/platform/theme/common/themeService';\n\nconst canUseFastRenderedViewLine = (function () {\n\tif (platform.isNative) {\n\t\t// In VSCode we know very well when the zoom level changes\n\t\treturn true;\n\t}\n\n\tif (platform.isLinux || browser.isFirefox || browser.isSafari) {\n\t\t// On Linux, it appears that zooming affects char widths (in pixels), which is unexpected.\n\t\t// --\n\t\t// Even though we read character widths correctly, having read them at a specific zoom level\n\t\t// does not mean they are the same at the current zoom level.\n\t\t// --\n\t\t// This could be improved if we ever figure out how to get an event when browsers zoom,\n\t\t// but until then we have to stick with reading client rects.\n\t\t// --\n\t\t// The same has been observed with Firefox on Windows7\n\t\t// --\n\t\t// The same has been oversved with Safari\n\t\treturn false;\n\t}\n\n\treturn true;\n})();\n\nconst alwaysRenderInlineSelection = (browser.isEdgeOrIE);\n\nexport class DomReadingContext {\n\n\tprivate readonly _domNode: HTMLElement;\n\tprivate _clientRectDeltaLeft: number;\n\tprivate _clientRectDeltaLeftRead: boolean;\n\tpublic get clientRectDeltaLeft(): number {\n\t\tif (!this._clientRectDeltaLeftRead) {\n\t\t\tthis._clientRectDeltaLeftRead = true;\n\t\t\tthis._clientRectDeltaLeft = this._domNode.getBoundingClientRect().left;\n\t\t}\n\t\treturn this._clientRectDeltaLeft;\n\t}\n\n\tpublic readonly endNode: HTMLElement;\n\n\tconstructor(domNode: HTMLElement, endNode: HTMLElement) {\n\t\tthis._domNode = domNode;\n\t\tthis._clientRectDeltaLeft = 0;\n\t\tthis._clientRectDeltaLeftRead = false;\n\t\tthis.endNode = endNode;\n\t}\n\n}\n\nexport class ViewLineOptions {\n\tpublic readonly themeType: ThemeType;\n\tpublic readonly renderWhitespace: 'none' | 'boundary' | 'all';\n\tpublic readonly renderControlCharacters: boolean;\n\tpublic readonly spaceWidth: number;\n\tpublic readonly useMonospaceOptimizations: boolean;\n\tpublic readonly lineHeight: number;\n\tpublic readonly stopRenderingLineAfter: number;\n\tpublic readonly fontLigatures: boolean;\n\n\tconstructor(config: IConfiguration, themeType: ThemeType) {\n\t\tthis.themeType = themeType;\n\t\tthis.renderWhitespace = config.editor.viewInfo.renderWhitespace;\n\t\tthis.renderControlCharacters = config.editor.viewInfo.renderControlCharacters;\n\t\tthis.spaceWidth = config.editor.fontInfo.spaceWidth;\n\t\tthis.useMonospaceOptimizations = (\n\t\t\tconfig.editor.fontInfo.isMonospace\n\t\t\t&& !config.editor.viewInfo.disableMonospaceOptimizations\n\t\t);\n\t\tthis.lineHeight = config.editor.lineHeight;\n\t\tthis.stopRenderingLineAfter = config.editor.viewInfo.stopRenderingLineAfter;\n\t\tthis.fontLigatures = config.editor.viewInfo.fontLigatures;\n\t}\n\n\tpublic equals(other: ViewLineOptions): boolean {\n\t\treturn (\n\t\t\tthis.themeType === other.themeType\n\t\t\t&& this.renderWhitespace === other.renderWhitespace\n\t\t\t&& this.renderControlCharacters === other.renderControlCharacters\n\t\t\t&& this.spaceWidth === other.spaceWidth\n\t\t\t&& this.useMonospaceOptimizations === other.useMonospaceOptimizations\n\t\t\t&& this.lineHeight === other.lineHeight\n\t\t\t&& this.stopRenderingLineAfter === other.stopRenderingLineAfter\n\t\t\t&& this.fontLigatures === other.fontLigatures\n\t\t);\n\t}\n}\n\nexport class ViewLine implements IVisibleLine {\n\n\tpublic static CLASS_NAME = 'view-line';\n\n\tprivate _options: ViewLineOptions;\n\tprivate _isMaybeInvalid: boolean;\n\tprivate _renderedViewLine: IRenderedViewLine;\n\n\tconstructor(options: ViewLineOptions) {\n\t\tthis._options = options;\n\t\tthis._isMaybeInvalid = true;\n\t\tthis._renderedViewLine = null;\n\t}\n\n\t// --- begin IVisibleLineData\n\n\tpublic getDomNode(): HTMLElement {\n\t\tif (this._renderedViewLine && this._renderedViewLine.domNode) {\n\t\t\treturn this._renderedViewLine.domNode.domNode;\n\t\t}\n\t\treturn null;\n\t}\n\tpublic setDomNode(domNode: HTMLElement): void {\n\t\tif (this._renderedViewLine) {\n\t\t\tthis._renderedViewLine.domNode = createFastDomNode(domNode);\n\t\t} else {\n\t\t\tthrow new Error('I have no rendered view line to set the dom node to...');\n\t\t}\n\t}\n\n\tpublic onContentChanged(): void {\n\t\tthis._isMaybeInvalid = true;\n\t}\n\tpublic onTokensChanged(): void {\n\t\tthis._isMaybeInvalid = true;\n\t}\n\tpublic onDecorationsChanged(): void {\n\t\tthis._isMaybeInvalid = true;\n\t}\n\tpublic onOptionsChanged(newOptions: ViewLineOptions): void {\n\t\tthis._isMaybeInvalid = true;\n\t\tthis._options = newOptions;\n\t}\n\tpublic onSelectionChanged(): boolean {\n\t\tif (alwaysRenderInlineSelection || this._options.themeType === HIGH_CONTRAST) {\n\t\t\tthis._isMaybeInvalid = true;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic renderLine(lineNumber: number, deltaTop: number, viewportData: ViewportData): string {\n\t\tif (this._isMaybeInvalid === false) {\n\t\t\t// it appears that nothing relevant has changed\n\t\t\treturn null;\n\t\t}\n\n\t\tthis._isMaybeInvalid = false;\n\n\t\tconst lineData = viewportData.getViewLineRenderingData(lineNumber);\n\t\tconst options = this._options;\n\t\tconst actualInlineDecorations = LineDecoration.filter(lineData.inlineDecorations, lineNumber, lineData.minColumn, lineData.maxColumn);\n\n\t\tif (alwaysRenderInlineSelection || options.themeType === HIGH_CONTRAST) {\n\t\t\tconst selections = viewportData.selections;\n\t\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\t\tconst selection = selections[i];\n\n\t\t\t\tif (selection.endLineNumber < lineNumber || selection.startLineNumber > lineNumber) {\n\t\t\t\t\t// Selection does not intersect line\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet startColumn = (selection.startLineNumber === lineNumber ? selection.startColumn : lineData.minColumn);\n\t\t\t\tlet endColumn = (selection.endLineNumber === lineNumber ? selection.endColumn : lineData.maxColumn);\n\n\t\t\t\tif (startColumn < endColumn) {\n\t\t\t\t\tactualInlineDecorations.push(new LineDecoration(startColumn, endColumn, 'inline-selected-text', false));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet renderLineInput = new RenderLineInput(\n\t\t\toptions.useMonospaceOptimizations,\n\t\t\tlineData.content,\n\t\t\tlineData.mightContainRTL,\n\t\t\tlineData.minColumn - 1,\n\t\t\tlineData.tokens,\n\t\t\tactualInlineDecorations,\n\t\t\tlineData.tabSize,\n\t\t\toptions.spaceWidth,\n\t\t\toptions.stopRenderingLineAfter,\n\t\t\toptions.renderWhitespace,\n\t\t\toptions.renderControlCharacters,\n\t\t\toptions.fontLigatures\n\t\t);\n\n\t\tif (this._renderedViewLine && this._renderedViewLine.input.equals(renderLineInput)) {\n\t\t\t// no need to do anything, we have the same render input\n\t\t\treturn null;\n\t\t}\n\n\t\tconst output = renderViewLine(renderLineInput);\n\n\t\tlet renderedViewLine: IRenderedViewLine = null;\n\t\tif (canUseFastRenderedViewLine && options.useMonospaceOptimizations && !output.containsForeignElements) {\n\t\t\tlet isRegularASCII = true;\n\t\t\tif (lineData.mightContainNonBasicASCII) {\n\t\t\t\tisRegularASCII = strings.isBasicASCII(lineData.content);\n\t\t\t}\n\n\t\t\tif (isRegularASCII && lineData.content.length < 1000) {\n\t\t\t\t// Browser rounding errors have been observed in Chrome and IE, so using the fast\n\t\t\t\t// view line only for short lines. Please test before removing the length check...\n\t\t\t\trenderedViewLine = new FastRenderedViewLine(\n\t\t\t\t\tthis._renderedViewLine ? this._renderedViewLine.domNode : null,\n\t\t\t\t\trenderLineInput,\n\t\t\t\t\toutput.characterMapping\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (!renderedViewLine) {\n\t\t\trenderedViewLine = createRenderedLine(\n\t\t\t\tthis._renderedViewLine ? this._renderedViewLine.domNode : null,\n\t\t\t\trenderLineInput,\n\t\t\t\toutput.characterMapping,\n\t\t\t\toutput.containsRTL,\n\t\t\t\toutput.containsForeignElements\n\t\t\t);\n\t\t}\n\n\t\tthis._renderedViewLine = renderedViewLine;\n\n\t\treturn `
    ${output.html}
    `;\n\t}\n\n\tpublic layoutLine(lineNumber: number, deltaTop: number): void {\n\t\tif (this._renderedViewLine && this._renderedViewLine.domNode) {\n\t\t\tthis._renderedViewLine.domNode.setTop(deltaTop);\n\t\t\tthis._renderedViewLine.domNode.setHeight(this._options.lineHeight);\n\t\t}\n\t}\n\n\t// --- end IVisibleLineData\n\n\tpublic getWidth(): number {\n\t\tif (!this._renderedViewLine) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn this._renderedViewLine.getWidth();\n\t}\n\n\tpublic getVisibleRangesForRange(startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] {\n\t\tstartColumn = Math.min(this._renderedViewLine.input.lineContent.length + 1, Math.max(1, startColumn));\n\t\tendColumn = Math.min(this._renderedViewLine.input.lineContent.length + 1, Math.max(1, endColumn));\n\t\treturn this._renderedViewLine.getVisibleRangesForRange(startColumn, endColumn, context);\n\t}\n\n\tpublic getColumnOfNodeOffset(lineNumber: number, spanNode: HTMLElement, offset: number): number {\n\t\treturn this._renderedViewLine.getColumnOfNodeOffset(lineNumber, spanNode, offset);\n\t}\n}\n\ninterface IRenderedViewLine {\n\tdomNode: FastDomNode;\n\treadonly input: RenderLineInput;\n\tgetWidth(): number;\n\tgetVisibleRangesForRange(startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[];\n\tgetColumnOfNodeOffset(lineNumber: number, spanNode: HTMLElement, offset: number): number;\n}\n\n/**\n * A rendered line which is guaranteed to contain only regular ASCII and is rendered with a monospace font.\n */\nclass FastRenderedViewLine implements IRenderedViewLine {\n\n\tpublic domNode: FastDomNode;\n\tpublic readonly input: RenderLineInput;\n\n\tprivate readonly _characterMapping: CharacterMapping;\n\tprivate readonly _charWidth: number;\n\tprivate _charOffset: Uint32Array;\n\n\tconstructor(domNode: FastDomNode, renderLineInput: RenderLineInput, characterMapping: CharacterMapping) {\n\t\tthis.domNode = domNode;\n\t\tthis.input = renderLineInput;\n\n\t\tthis._characterMapping = characterMapping;\n\t\tthis._charWidth = renderLineInput.spaceWidth;\n\t\tthis._charOffset = null;\n\t}\n\n\tprivate static _createCharOffset(characterMapping: CharacterMapping): Uint32Array {\n\t\tconst partLengths = characterMapping.getPartLengths();\n\t\tconst len = characterMapping.length;\n\n\t\tlet result = new Uint32Array(len);\n\t\tlet currentPartIndex = 0;\n\t\tlet currentPartOffset = 0;\n\t\tfor (let ch = 0; ch < len; ch++) {\n\t\t\tconst partData = characterMapping.charOffsetToPartData(ch);\n\t\t\tconst partIndex = CharacterMapping.getPartIndex(partData);\n\t\t\tconst charIndex = CharacterMapping.getCharIndex(partData);\n\n\t\t\twhile (currentPartIndex < partIndex) {\n\t\t\t\tcurrentPartOffset += partLengths[currentPartIndex];\n\t\t\t\tcurrentPartIndex++;\n\t\t\t}\n\n\t\t\tresult[ch] = currentPartOffset + charIndex;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate _getOrCreateCharOffset(): Uint32Array {\n\t\tif (this._charOffset === null) {\n\t\t\tthis._charOffset = FastRenderedViewLine._createCharOffset(this._characterMapping);\n\t\t}\n\t\treturn this._charOffset;\n\t}\n\n\tpublic getWidth(): number {\n\t\tconst charOffset = this._getOrCreateCharOffset();\n\t\treturn this._getCharPosition(charOffset.length);\n\t}\n\n\tpublic getVisibleRangesForRange(startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] {\n\t\tstartColumn = startColumn | 0; // @perf\n\t\tendColumn = endColumn | 0; // @perf\n\t\tconst stopRenderingLineAfter = this.input.stopRenderingLineAfter | 0; // @perf\n\n\t\tif (stopRenderingLineAfter !== -1 && startColumn > stopRenderingLineAfter && endColumn > stopRenderingLineAfter) {\n\t\t\t// This range is obviously not visible\n\t\t\treturn null;\n\t\t}\n\n\t\tif (stopRenderingLineAfter !== -1 && startColumn > stopRenderingLineAfter) {\n\t\t\tstartColumn = stopRenderingLineAfter;\n\t\t}\n\n\t\tif (stopRenderingLineAfter !== -1 && endColumn > stopRenderingLineAfter) {\n\t\t\tendColumn = stopRenderingLineAfter;\n\t\t}\n\n\t\tconst startPosition = this._getCharPosition(startColumn);\n\t\tconst endPosition = this._getCharPosition(endColumn);\n\t\treturn [new HorizontalRange(startPosition, endPosition - startPosition)];\n\t}\n\n\tprivate _getCharPosition(column: number): number {\n\t\tconst charOffset = this._getOrCreateCharOffset();\n\t\tif (charOffset.length === 0) {\n\t\t\t// No characters on this line\n\t\t\treturn 0;\n\t\t}\n\t\treturn Math.round(this._charWidth * charOffset[column - 1]);\n\t}\n\n\tpublic getColumnOfNodeOffset(lineNumber: number, spanNode: HTMLElement, offset: number): number {\n\t\tlet spanNodeTextContentLength = spanNode.textContent.length;\n\n\t\tlet spanIndex = -1;\n\t\twhile (spanNode) {\n\t\t\tspanNode = spanNode.previousSibling;\n\t\t\tspanIndex++;\n\t\t}\n\n\t\tlet charOffset = this._characterMapping.partDataToCharOffset(spanIndex, spanNodeTextContentLength, offset);\n\t\treturn charOffset + 1;\n\t}\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\n\tpublic domNode: FastDomNode;\n\tpublic readonly input: RenderLineInput;\n\n\tprotected readonly _characterMapping: CharacterMapping;\n\tprivate readonly _isWhitespaceOnly: boolean;\n\tprivate readonly _containsForeignElements: boolean;\n\tprivate _cachedWidth: number;\n\n\t/**\n\t * This is a map that is used only when the line is guaranteed to have no RTL text.\n\t */\n\tprivate _pixelOffsetCache: Int32Array;\n\n\tconstructor(domNode: FastDomNode, renderLineInput: RenderLineInput, characterMapping: CharacterMapping, containsRTL: boolean, containsForeignElements: boolean) {\n\t\tthis.domNode = domNode;\n\t\tthis.input = renderLineInput;\n\t\tthis._characterMapping = characterMapping;\n\t\tthis._isWhitespaceOnly = /^\\s*$/.test(renderLineInput.lineContent);\n\t\tthis._containsForeignElements = containsForeignElements;\n\t\tthis._cachedWidth = -1;\n\n\t\tthis._pixelOffsetCache = null;\n\t\tif (!containsRTL) {\n\t\t\tthis._pixelOffsetCache = new Int32Array(this._characterMapping.length + 1);\n\t\t\tfor (let column = 0, len = this._characterMapping.length; column <= len; column++) {\n\t\t\t\tthis._pixelOffsetCache[column] = -1;\n\t\t\t}\n\t\t}\n\t}\n\n\t// --- Reading from the DOM methods\n\n\tprotected _getReadingTarget(): HTMLElement {\n\t\treturn this.domNode.domNode.firstChild;\n\t}\n\n\t/**\n\t * Width of the line in pixels\n\t */\n\tpublic getWidth(): number {\n\t\tif (this._cachedWidth === -1) {\n\t\t\tthis._cachedWidth = this._getReadingTarget().offsetWidth;\n\t\t}\n\t\treturn this._cachedWidth;\n\t}\n\n\t/**\n\t * Visible ranges for a model range\n\t */\n\tpublic getVisibleRangesForRange(startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] {\n\t\tstartColumn = startColumn | 0; // @perf\n\t\tendColumn = endColumn | 0; // @perf\n\t\tconst stopRenderingLineAfter = this.input.stopRenderingLineAfter | 0; // @perf\n\n\t\tif (stopRenderingLineAfter !== -1 && startColumn > stopRenderingLineAfter && endColumn > stopRenderingLineAfter) {\n\t\t\t// This range is obviously not visible\n\t\t\treturn null;\n\t\t}\n\n\t\tif (stopRenderingLineAfter !== -1 && startColumn > stopRenderingLineAfter) {\n\t\t\tstartColumn = stopRenderingLineAfter;\n\t\t}\n\n\t\tif (stopRenderingLineAfter !== -1 && endColumn > stopRenderingLineAfter) {\n\t\t\tendColumn = stopRenderingLineAfter;\n\t\t}\n\n\t\tif (this._pixelOffsetCache !== null) {\n\t\t\t// the text is LTR\n\t\t\tlet startOffset = this._readPixelOffset(startColumn, context);\n\t\t\tif (startOffset === -1) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlet endOffset = this._readPixelOffset(endColumn, context);\n\t\t\tif (endOffset === -1) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn [new HorizontalRange(startOffset, endOffset - startOffset)];\n\t\t}\n\n\t\treturn this._readVisibleRangesForRange(startColumn, endColumn, context);\n\t}\n\n\tprotected _readVisibleRangesForRange(startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] {\n\t\tif (startColumn === endColumn) {\n\t\t\tlet pixelOffset = this._readPixelOffset(startColumn, context);\n\t\t\tif (pixelOffset === -1) {\n\t\t\t\treturn null;\n\t\t\t} else {\n\t\t\t\treturn [new HorizontalRange(pixelOffset, 0)];\n\t\t\t}\n\t\t} else {\n\t\t\treturn this._readRawVisibleRangesForRange(startColumn, endColumn, context);\n\t\t}\n\t}\n\n\tprotected _readPixelOffset(column: number, context: DomReadingContext): number {\n\t\tif (this._characterMapping.length === 0) {\n\t\t\t// This line is empty\n\t\t\treturn 0;\n\t\t}\n\n\t\tif (this._pixelOffsetCache !== null) {\n\t\t\t// the text is LTR\n\n\t\t\tlet cachedPixelOffset = this._pixelOffsetCache[column];\n\t\t\tif (cachedPixelOffset !== -1) {\n\t\t\t\treturn cachedPixelOffset;\n\t\t\t}\n\n\t\t\tlet result = this._actualReadPixelOffset(column, context);\n\t\t\tthis._pixelOffsetCache[column] = result;\n\t\t\treturn result;\n\t\t}\n\n\t\treturn this._actualReadPixelOffset(column, context);\n\t}\n\n\tprivate _actualReadPixelOffset(column: number, context: DomReadingContext): number {\n\n\t\tif (column === this._characterMapping.length && this._isWhitespaceOnly && !this._containsForeignElements) {\n\t\t\t// This branch helps in the case of whitespace only lines which have a width set\n\t\t\treturn this.getWidth();\n\t\t}\n\n\t\tlet partData = this._characterMapping.charOffsetToPartData(column - 1);\n\t\tlet partIndex = CharacterMapping.getPartIndex(partData);\n\t\tlet charOffsetInPart = CharacterMapping.getCharIndex(partData);\n\n\t\tlet r = RangeUtil.readHorizontalRanges(this._getReadingTarget(), partIndex, charOffsetInPart, partIndex, charOffsetInPart, context.clientRectDeltaLeft, context.endNode);\n\t\tif (!r || r.length === 0) {\n\t\t\treturn -1;\n\t\t}\n\t\treturn r[0].left;\n\t}\n\n\tprivate _readRawVisibleRangesForRange(startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] {\n\n\t\tif (startColumn === 1 && endColumn === this._characterMapping.length) {\n\t\t\t// This branch helps IE with bidi text & gives a performance boost to other browsers when reading visible ranges for an entire line\n\n\t\t\treturn [new HorizontalRange(0, this.getWidth())];\n\t\t}\n\n\t\tlet startPartData = this._characterMapping.charOffsetToPartData(startColumn - 1);\n\t\tlet startPartIndex = CharacterMapping.getPartIndex(startPartData);\n\t\tlet startCharOffsetInPart = CharacterMapping.getCharIndex(startPartData);\n\n\t\tlet endPartData = this._characterMapping.charOffsetToPartData(endColumn - 1);\n\t\tlet endPartIndex = CharacterMapping.getPartIndex(endPartData);\n\t\tlet endCharOffsetInPart = CharacterMapping.getCharIndex(endPartData);\n\n\t\treturn RangeUtil.readHorizontalRanges(this._getReadingTarget(), startPartIndex, startCharOffsetInPart, endPartIndex, endCharOffsetInPart, context.clientRectDeltaLeft, context.endNode);\n\t}\n\n\t/**\n\t * Returns the column for the text found at a specific offset inside a rendered dom node\n\t */\n\tpublic getColumnOfNodeOffset(lineNumber: number, spanNode: HTMLElement, offset: number): number {\n\t\tlet spanNodeTextContentLength = spanNode.textContent.length;\n\n\t\tlet spanIndex = -1;\n\t\twhile (spanNode) {\n\t\t\tspanNode = spanNode.previousSibling;\n\t\t\tspanIndex++;\n\t\t}\n\n\t\tlet charOffset = this._characterMapping.partDataToCharOffset(spanIndex, spanNodeTextContentLength, offset);\n\t\treturn charOffset + 1;\n\t}\n}\n\nclass WebKitRenderedViewLine extends RenderedViewLine {\n\tprotected _readVisibleRangesForRange(startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] {\n\t\tlet output = super._readVisibleRangesForRange(startColumn, endColumn, context);\n\n\t\tif (!output || output.length === 0 || startColumn === endColumn || (startColumn === 1 && endColumn === this._characterMapping.length)) {\n\t\t\treturn output;\n\t\t}\n\n\t\t// WebKit is buggy and returns an expanded range (to contain words in some cases)\n\t\t// The last client rect is enlarged (I think)\n\n\t\t// This is an attempt to patch things up\n\t\t// Find position of previous column\n\t\tlet beforeEndPixelOffset = this._readPixelOffset(endColumn - 1, context);\n\t\t// Find position of last column\n\t\tlet endPixelOffset = this._readPixelOffset(endColumn, context);\n\n\t\tif (beforeEndPixelOffset !== -1 && endPixelOffset !== -1) {\n\t\t\tlet isLTR = (beforeEndPixelOffset <= endPixelOffset);\n\t\t\tlet lastRange = output[output.length - 1];\n\n\t\t\tif (isLTR && lastRange.left < endPixelOffset) {\n\t\t\t\t// Trim down the width of the last visible range to not go after the last column's position\n\t\t\t\tlastRange.width = endPixelOffset - lastRange.left;\n\t\t\t}\n\t\t}\n\n\t\treturn output;\n\t}\n}\n\nconst createRenderedLine: (domNode: FastDomNode, renderLineInput: RenderLineInput, characterMapping: CharacterMapping, containsRTL: boolean, containsForeignElements: boolean) => RenderedViewLine = (function () {\n\tif (browser.isWebKit) {\n\t\treturn createWebKitRenderedLine;\n\t}\n\treturn createNormalRenderedLine;\n})();\n\nfunction createWebKitRenderedLine(domNode: FastDomNode, renderLineInput: RenderLineInput, characterMapping: CharacterMapping, containsRTL: boolean, containsForeignElements: boolean): RenderedViewLine {\n\treturn new WebKitRenderedViewLine(domNode, renderLineInput, characterMapping, containsRTL, containsForeignElements);\n}\n\nfunction createNormalRenderedLine(domNode: FastDomNode, renderLineInput: RenderLineInput, characterMapping: CharacterMapping, containsRTL: boolean, containsForeignElements: boolean): RenderedViewLine {\n\treturn 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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range as EditorRange } from 'vs/editor/common/core/range';\nimport { MouseTargetType, IMouseTarget } from 'vs/editor/browser/editorBrowser';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { IPointerHandlerHelper } from 'vs/editor/browser/controller/mouseHandler';\nimport { EditorMouseEvent, PageCoordinates, ClientCoordinates, EditorPagePosition } from 'vs/editor/browser/editorDom';\nimport * as browser from 'vs/base/browser/browser';\nimport { IViewCursorRenderData } from 'vs/editor/browser/viewParts/viewCursors/viewCursor';\nimport { PartFingerprint, PartFingerprints } from 'vs/editor/browser/view/viewPart';\nimport { IViewModel } from 'vs/editor/common/viewModel/viewModel';\nimport { EditorLayoutInfo } from 'vs/editor/common/config/editorOptions';\nimport { ViewLine } from 'vs/editor/browser/viewParts/lines/viewLine';\n\nexport interface IViewZoneData {\n\tviewZoneId: number;\n\tpositionBefore: Position;\n\tpositionAfter: Position;\n\tposition: Position;\n\tafterLineNumber: number;\n}\n\ninterface IETextRange {\n\tboundingHeight: number;\n\tboundingLeft: number;\n\tboundingTop: number;\n\tboundingWidth: number;\n\thtmlText: string;\n\toffsetLeft: number;\n\toffsetTop: number;\n\ttext: string;\n\tcollapse(start?: boolean): void;\n\tcompareEndPoints(how: string, sourceRange: IETextRange): number;\n\tduplicate(): IETextRange;\n\texecCommand(cmdID: string, showUI?: boolean, value?: any): boolean;\n\texecCommandShowHelp(cmdID: string): boolean;\n\texpand(Unit: string): boolean;\n\tfindText(string: string, count?: number, flags?: number): boolean;\n\tgetBookmark(): string;\n\tgetBoundingClientRect(): ClientRect;\n\tgetClientRects(): ClientRectList;\n\tinRange(range: IETextRange): boolean;\n\tisEqual(range: IETextRange): boolean;\n\tmove(unit: string, count?: number): number;\n\tmoveEnd(unit: string, count?: number): number;\n\tmoveStart(unit: string, count?: number): number;\n\tmoveToBookmark(bookmark: string): boolean;\n\tmoveToElementText(element: Element): void;\n\tmoveToPoint(x: number, y: number): void;\n\tparentElement(): Element;\n\tpasteHTML(html: string): void;\n\tqueryCommandEnabled(cmdID: string): boolean;\n\tqueryCommandIndeterm(cmdID: string): boolean;\n\tqueryCommandState(cmdID: string): boolean;\n\tqueryCommandSupported(cmdID: string): boolean;\n\tqueryCommandText(cmdID: string): string;\n\tqueryCommandValue(cmdID: string): any;\n\tscrollIntoView(fStart?: boolean): void;\n\tselect(): void;\n\tsetEndPoint(how: string, SourceRange: IETextRange): void;\n}\n\ndeclare var IETextRange: {\n\tprototype: IETextRange;\n\tnew (): IETextRange;\n};\n\ninterface IHitTestResult {\n\tposition: Position;\n\thitTarget: Element;\n}\n\nexport class MouseTarget implements IMouseTarget {\n\n\tpublic readonly element: Element;\n\tpublic readonly type: MouseTargetType;\n\tpublic readonly mouseColumn: number;\n\tpublic readonly position: Position;\n\tpublic readonly range: EditorRange;\n\tpublic readonly detail: any;\n\n\tconstructor(element: Element, type: MouseTargetType, mouseColumn: number = 0, position: Position = null, range: EditorRange = null, detail: any = null) {\n\t\tthis.element = element;\n\t\tthis.type = type;\n\t\tthis.mouseColumn = mouseColumn;\n\t\tthis.position = position;\n\t\tif (!range && position) {\n\t\t\trange = new EditorRange(position.lineNumber, position.column, position.lineNumber, position.column);\n\t\t}\n\t\tthis.range = range;\n\t\tthis.detail = detail;\n\t}\n\n\tprivate static _typeToString(type: MouseTargetType): string {\n\t\tif (type === MouseTargetType.TEXTAREA) {\n\t\t\treturn 'TEXTAREA';\n\t\t}\n\t\tif (type === MouseTargetType.GUTTER_GLYPH_MARGIN) {\n\t\t\treturn 'GUTTER_GLYPH_MARGIN';\n\t\t}\n\t\tif (type === MouseTargetType.GUTTER_LINE_NUMBERS) {\n\t\t\treturn 'GUTTER_LINE_NUMBERS';\n\t\t}\n\t\tif (type === MouseTargetType.GUTTER_LINE_DECORATIONS) {\n\t\t\treturn 'GUTTER_LINE_DECORATIONS';\n\t\t}\n\t\tif (type === MouseTargetType.GUTTER_VIEW_ZONE) {\n\t\t\treturn 'GUTTER_VIEW_ZONE';\n\t\t}\n\t\tif (type === MouseTargetType.CONTENT_TEXT) {\n\t\t\treturn 'CONTENT_TEXT';\n\t\t}\n\t\tif (type === MouseTargetType.CONTENT_EMPTY) {\n\t\t\treturn 'CONTENT_EMPTY';\n\t\t}\n\t\tif (type === MouseTargetType.CONTENT_VIEW_ZONE) {\n\t\t\treturn 'CONTENT_VIEW_ZONE';\n\t\t}\n\t\tif (type === MouseTargetType.CONTENT_WIDGET) {\n\t\t\treturn 'CONTENT_WIDGET';\n\t\t}\n\t\tif (type === MouseTargetType.OVERVIEW_RULER) {\n\t\t\treturn 'OVERVIEW_RULER';\n\t\t}\n\t\tif (type === MouseTargetType.SCROLLBAR) {\n\t\t\treturn 'SCROLLBAR';\n\t\t}\n\t\tif (type === MouseTargetType.OVERLAY_WIDGET) {\n\t\t\treturn 'OVERLAY_WIDGET';\n\t\t}\n\t\treturn 'UNKNOWN';\n\t}\n\n\tpublic static toString(target: IMouseTarget): string {\n\t\treturn this._typeToString(target.type) + ': ' + target.position + ' - ' + target.range + ' - ' + target.detail;\n\t}\n\n\tpublic toString(): string {\n\t\treturn MouseTarget.toString(this);\n\t}\n}\n\nclass ElementPath {\n\n\tpublic static isTextArea(path: Uint8Array): boolean {\n\t\treturn (\n\t\t\tpath.length === 2\n\t\t\t&& path[0] === PartFingerprint.OverflowGuard\n\t\t\t&& path[1] === PartFingerprint.TextArea\n\t\t);\n\t}\n\n\tpublic static isChildOfViewLines(path: Uint8Array): boolean {\n\t\treturn (\n\t\t\tpath.length >= 4\n\t\t\t&& path[0] === PartFingerprint.OverflowGuard\n\t\t\t&& path[3] === PartFingerprint.ViewLines\n\t\t);\n\t}\n\n\tpublic static isChildOfScrollableElement(path: Uint8Array): boolean {\n\t\treturn (\n\t\t\tpath.length >= 2\n\t\t\t&& path[0] === PartFingerprint.OverflowGuard\n\t\t\t&& path[1] === PartFingerprint.ScrollableElement\n\t\t);\n\t}\n\n\tpublic static isChildOfMinimap(path: Uint8Array): boolean {\n\t\treturn (\n\t\t\tpath.length >= 2\n\t\t\t&& path[0] === PartFingerprint.OverflowGuard\n\t\t\t&& path[1] === PartFingerprint.Minimap\n\t\t);\n\t}\n\n\tpublic static isChildOfContentWidgets(path: Uint8Array): boolean {\n\t\treturn (\n\t\t\tpath.length >= 4\n\t\t\t&& path[0] === PartFingerprint.OverflowGuard\n\t\t\t&& path[3] === PartFingerprint.ContentWidgets\n\t\t);\n\t}\n\n\tpublic static isChildOfOverflowingContentWidgets(path: Uint8Array): boolean {\n\t\treturn (\n\t\t\tpath.length >= 1\n\t\t\t&& path[0] === PartFingerprint.OverflowingContentWidgets\n\t\t);\n\t}\n\n\tpublic static isChildOfOverlayWidgets(path: Uint8Array): boolean {\n\t\treturn (\n\t\t\tpath.length >= 2\n\t\t\t&& path[0] === PartFingerprint.OverflowGuard\n\t\t\t&& path[1] === PartFingerprint.OverlayWidgets\n\t\t);\n\t}\n}\n\nclass HitTestContext {\n\n\tpublic readonly model: IViewModel;\n\tpublic readonly layoutInfo: EditorLayoutInfo;\n\tpublic readonly viewDomNode: HTMLElement;\n\tpublic readonly lineHeight: number;\n\tpublic readonly typicalHalfwidthCharacterWidth: number;\n\tpublic readonly lastViewCursorsRenderData: IViewCursorRenderData[];\n\n\tprivate readonly _context: ViewContext;\n\tprivate readonly _viewHelper: IPointerHandlerHelper;\n\n\tconstructor(context: ViewContext, viewHelper: IPointerHandlerHelper, lastViewCursorsRenderData: IViewCursorRenderData[]) {\n\t\tthis.model = context.model;\n\t\tthis.layoutInfo = context.configuration.editor.layoutInfo;\n\t\tthis.viewDomNode = viewHelper.viewDomNode;\n\t\tthis.lineHeight = context.configuration.editor.lineHeight;\n\t\tthis.typicalHalfwidthCharacterWidth = context.configuration.editor.fontInfo.typicalHalfwidthCharacterWidth;\n\t\tthis.lastViewCursorsRenderData = lastViewCursorsRenderData;\n\t\tthis._context = context;\n\t\tthis._viewHelper = viewHelper;\n\t}\n\n\tpublic getZoneAtCoord(mouseVerticalOffset: number): IViewZoneData {\n\t\t// The target is either a view zone or the empty space after the last view-line\n\t\tlet viewZoneWhitespace = this._context.viewLayout.getWhitespaceAtVerticalOffset(mouseVerticalOffset);\n\n\t\tif (viewZoneWhitespace) {\n\t\t\tlet viewZoneMiddle = viewZoneWhitespace.verticalOffset + viewZoneWhitespace.height / 2,\n\t\t\t\tlineCount = this._context.model.getLineCount(),\n\t\t\t\tpositionBefore: Position = null,\n\t\t\t\tposition: Position,\n\t\t\t\tpositionAfter: Position = null;\n\n\t\t\tif (viewZoneWhitespace.afterLineNumber !== lineCount) {\n\t\t\t\t// There are more lines after this view zone\n\t\t\t\tpositionAfter = new Position(viewZoneWhitespace.afterLineNumber + 1, 1);\n\t\t\t}\n\t\t\tif (viewZoneWhitespace.afterLineNumber > 0) {\n\t\t\t\t// There are more lines above this view zone\n\t\t\t\tpositionBefore = new Position(viewZoneWhitespace.afterLineNumber, this._context.model.getLineMaxColumn(viewZoneWhitespace.afterLineNumber));\n\t\t\t}\n\n\t\t\tif (positionAfter === null) {\n\t\t\t\tposition = positionBefore;\n\t\t\t} else if (positionBefore === null) {\n\t\t\t\tposition = positionAfter;\n\t\t\t} else if (mouseVerticalOffset < viewZoneMiddle) {\n\t\t\t\tposition = positionBefore;\n\t\t\t} else {\n\t\t\t\tposition = positionAfter;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tviewZoneId: viewZoneWhitespace.id,\n\t\t\t\tafterLineNumber: viewZoneWhitespace.afterLineNumber,\n\t\t\t\tpositionBefore: positionBefore,\n\t\t\t\tpositionAfter: positionAfter,\n\t\t\t\tposition: position\n\t\t\t};\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic getFullLineRangeAtCoord(mouseVerticalOffset: number): { range: EditorRange; isAfterLines: boolean; } {\n\t\tif (this._context.viewLayout.isAfterLines(mouseVerticalOffset)) {\n\t\t\t// Below the last line\n\t\t\tlet lineNumber = this._context.model.getLineCount();\n\t\t\tlet maxLineColumn = this._context.model.getLineMaxColumn(lineNumber);\n\t\t\treturn {\n\t\t\t\trange: new EditorRange(lineNumber, maxLineColumn, lineNumber, maxLineColumn),\n\t\t\t\tisAfterLines: true\n\t\t\t};\n\t\t}\n\n\t\tlet lineNumber = this._context.viewLayout.getLineNumberAtVerticalOffset(mouseVerticalOffset);\n\t\tlet maxLineColumn = this._context.model.getLineMaxColumn(lineNumber);\n\t\treturn {\n\t\t\trange: new EditorRange(lineNumber, 1, lineNumber, maxLineColumn),\n\t\t\tisAfterLines: false\n\t\t};\n\t}\n\n\tpublic getLineNumberAtVerticalOffset(mouseVerticalOffset: number): number {\n\t\treturn this._context.viewLayout.getLineNumberAtVerticalOffset(mouseVerticalOffset);\n\t}\n\n\tpublic isAfterLines(mouseVerticalOffset: number): boolean {\n\t\treturn this._context.viewLayout.isAfterLines(mouseVerticalOffset);\n\t}\n\n\tpublic getVerticalOffsetForLineNumber(lineNumber: number): number {\n\t\treturn this._context.viewLayout.getVerticalOffsetForLineNumber(lineNumber);\n\t}\n\n\tpublic findAttribute(element: Element, attr: string): string {\n\t\treturn HitTestContext._findAttribute(element, attr, this._viewHelper.viewDomNode);\n\t}\n\n\tprivate static _findAttribute(element: Element, attr: string, stopAt: Element): string {\n\t\twhile (element && element !== document.body) {\n\t\t\tif (element.hasAttribute && element.hasAttribute(attr)) {\n\t\t\t\treturn element.getAttribute(attr);\n\t\t\t}\n\t\t\tif (element === stopAt) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\telement = element.parentNode;\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic getLineWidth(lineNumber: number): number {\n\t\treturn this._viewHelper.getLineWidth(lineNumber);\n\t}\n\n\tpublic visibleRangeForPosition2(lineNumber: number, column: number) {\n\t\treturn this._viewHelper.visibleRangeForPosition2(lineNumber, column);\n\t}\n\n\tpublic getPositionFromDOMInfo(spanNode: HTMLElement, offset: number): Position {\n\t\treturn this._viewHelper.getPositionFromDOMInfo(spanNode, offset);\n\t}\n\n\tpublic getScrollTop(): number {\n\t\treturn this._context.viewLayout.getScrollTop();\n\t}\n\n\tpublic getScrollLeft(): number {\n\t\treturn this._context.viewLayout.getScrollLeft();\n\t}\n}\n\nabstract class BareHitTestRequest {\n\n\tpublic readonly editorPos: EditorPagePosition;\n\tpublic readonly pos: PageCoordinates;\n\tpublic readonly mouseVerticalOffset: number;\n\tpublic readonly isInMarginArea: boolean;\n\tpublic readonly isInContentArea: boolean;\n\tpublic readonly mouseContentHorizontalOffset: number;\n\n\tprotected readonly mouseColumn: number;\n\n\tconstructor(ctx: HitTestContext, editorPos: EditorPagePosition, pos: PageCoordinates) {\n\t\tthis.editorPos = editorPos;\n\t\tthis.pos = pos;\n\n\t\tthis.mouseVerticalOffset = Math.max(0, ctx.getScrollTop() + pos.y - editorPos.y);\n\t\tthis.mouseContentHorizontalOffset = ctx.getScrollLeft() + pos.x - editorPos.x - ctx.layoutInfo.contentLeft;\n\t\tthis.isInMarginArea = (pos.x - editorPos.x < ctx.layoutInfo.contentLeft);\n\t\tthis.isInContentArea = !this.isInMarginArea;\n\t\tthis.mouseColumn = Math.max(0, MouseTargetFactory._getMouseColumn(this.mouseContentHorizontalOffset, ctx.typicalHalfwidthCharacterWidth));\n\t}\n}\n\nclass HitTestRequest extends BareHitTestRequest {\n\tprivate readonly _ctx: HitTestContext;\n\tpublic readonly target: Element;\n\tpublic readonly targetPath: Uint8Array;\n\n\tconstructor(ctx: HitTestContext, editorPos: EditorPagePosition, pos: PageCoordinates, target: Element) {\n\t\tsuper(ctx, editorPos, pos);\n\t\tthis._ctx = ctx;\n\n\t\tif (target) {\n\t\t\tthis.target = target;\n\t\t\tthis.targetPath = PartFingerprints.collect(target, ctx.viewDomNode);\n\t\t} else {\n\t\t\tthis.target = null;\n\t\t\tthis.targetPath = new Uint8Array(0);\n\t\t}\n\t}\n\n\tpublic toString(): string {\n\t\treturn `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\t}\n\n\tpublic fulfill(type: MouseTargetType, position: Position = null, range: EditorRange = null, detail: any = null): MouseTarget {\n\t\treturn new MouseTarget(this.target, type, this.mouseColumn, position, range, detail);\n\t}\n\n\tpublic withTarget(target: Element): HitTestRequest {\n\t\treturn new HitTestRequest(this._ctx, this.editorPos, this.pos, target);\n\t}\n}\n\nexport class MouseTargetFactory {\n\n\tprivate _context: ViewContext;\n\tprivate _viewHelper: IPointerHandlerHelper;\n\n\tconstructor(context: ViewContext, viewHelper: IPointerHandlerHelper) {\n\t\tthis._context = context;\n\t\tthis._viewHelper = viewHelper;\n\t}\n\n\tpublic mouseTargetIsWidget(e: EditorMouseEvent): boolean {\n\t\tlet t = e.target;\n\t\tlet path = PartFingerprints.collect(t, this._viewHelper.viewDomNode);\n\n\t\t// Is it a content widget?\n\t\tif (ElementPath.isChildOfContentWidgets(path) || ElementPath.isChildOfOverflowingContentWidgets(path)) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Is it an overlay widget?\n\t\tif (ElementPath.isChildOfOverlayWidgets(path)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tpublic createMouseTarget(lastViewCursorsRenderData: IViewCursorRenderData[], editorPos: EditorPagePosition, pos: PageCoordinates, target: HTMLElement): IMouseTarget {\n\t\tconst ctx = new HitTestContext(this._context, this._viewHelper, lastViewCursorsRenderData);\n\t\tconst request = new HitTestRequest(ctx, editorPos, pos, target);\n\t\ttry {\n\t\t\tlet r = MouseTargetFactory._createMouseTarget(ctx, request, false);\n\t\t\t// console.log(r.toString());\n\t\t\treturn r;\n\t\t} catch (err) {\n\t\t\t// console.log(err);\n\t\t\treturn request.fulfill(MouseTargetType.UNKNOWN);\n\t\t}\n\t}\n\n\tprivate static _createMouseTarget(ctx: HitTestContext, request: HitTestRequest, domHitTestExecuted: boolean): MouseTarget {\n\n\t\t// console.log(`${domHitTestExecuted ? '=>' : ''}CAME IN REQUEST: ${request}`);\n\n\t\t// First ensure the request has a target\n\t\tif (request.target === null) {\n\t\t\tif (domHitTestExecuted) {\n\t\t\t\t// Still no target... and we have already executed hit test...\n\t\t\t\treturn request.fulfill(MouseTargetType.UNKNOWN);\n\t\t\t}\n\n\t\t\tconst hitTestResult = MouseTargetFactory._doHitTest(ctx, request);\n\n\t\t\tif (hitTestResult.position) {\n\t\t\t\treturn MouseTargetFactory.createMouseTargetFromHitTestPosition(ctx, request, hitTestResult.position.lineNumber, hitTestResult.position.column);\n\t\t\t}\n\n\t\t\treturn this._createMouseTarget(ctx, request.withTarget(hitTestResult.hitTarget), true);\n\t\t}\n\n\t\tlet result: MouseTarget = null;\n\n\t\tresult = result || MouseTargetFactory._hitTestContentWidget(ctx, request);\n\t\tresult = result || MouseTargetFactory._hitTestOverlayWidget(ctx, request);\n\t\tresult = result || MouseTargetFactory._hitTestMinimap(ctx, request);\n\t\tresult = result || MouseTargetFactory._hitTestScrollbarSlider(ctx, request);\n\t\tresult = result || MouseTargetFactory._hitTestViewZone(ctx, request);\n\t\tresult = result || MouseTargetFactory._hitTestMargin(ctx, request);\n\t\tresult = result || MouseTargetFactory._hitTestViewCursor(ctx, request);\n\t\tresult = result || MouseTargetFactory._hitTestTextArea(ctx, request);\n\t\tresult = result || MouseTargetFactory._hitTestViewLines(ctx, request, domHitTestExecuted);\n\t\tresult = result || MouseTargetFactory._hitTestScrollbar(ctx, request);\n\n\t\treturn (result || request.fulfill(MouseTargetType.UNKNOWN));\n\t}\n\n\tprivate static _hitTestContentWidget(ctx: HitTestContext, request: HitTestRequest): MouseTarget {\n\t\t// Is it a content widget?\n\t\tif (ElementPath.isChildOfContentWidgets(request.targetPath) || ElementPath.isChildOfOverflowingContentWidgets(request.targetPath)) {\n\t\t\tlet widgetId = ctx.findAttribute(request.target, 'widgetId');\n\t\t\tif (widgetId) {\n\t\t\t\treturn request.fulfill(MouseTargetType.CONTENT_WIDGET, null, null, widgetId);\n\t\t\t} else {\n\t\t\t\treturn request.fulfill(MouseTargetType.UNKNOWN);\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate static _hitTestOverlayWidget(ctx: HitTestContext, request: HitTestRequest): MouseTarget {\n\t\t// Is it an overlay widget?\n\t\tif (ElementPath.isChildOfOverlayWidgets(request.targetPath)) {\n\t\t\tlet widgetId = ctx.findAttribute(request.target, 'widgetId');\n\t\t\tif (widgetId) {\n\t\t\t\treturn request.fulfill(MouseTargetType.OVERLAY_WIDGET, null, null, widgetId);\n\t\t\t} else {\n\t\t\t\treturn request.fulfill(MouseTargetType.UNKNOWN);\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate static _hitTestViewCursor(ctx: HitTestContext, request: HitTestRequest): MouseTarget {\n\n\t\tif (request.target) {\n\t\t\t// Check if we've hit a painted cursor\n\t\t\tconst lastViewCursorsRenderData = ctx.lastViewCursorsRenderData;\n\n\t\t\tfor (let i = 0, len = lastViewCursorsRenderData.length; i < len; i++) {\n\t\t\t\tconst d = lastViewCursorsRenderData[i];\n\n\t\t\t\tif (request.target === d.domNode) {\n\t\t\t\t\treturn request.fulfill(MouseTargetType.CONTENT_TEXT, d.position);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (request.isInContentArea) {\n\t\t\t// Edge has a bug when hit-testing the exact position of a cursor,\n\t\t\t// instead of returning the correct dom node, it returns the\n\t\t\t// first or last rendered view line dom node, therefore help it out\n\t\t\t// and first check if we are on top of a cursor\n\n\t\t\tconst lastViewCursorsRenderData = ctx.lastViewCursorsRenderData;\n\t\t\tconst mouseContentHorizontalOffset = request.mouseContentHorizontalOffset;\n\t\t\tconst mouseVerticalOffset = request.mouseVerticalOffset;\n\n\t\t\tfor (let i = 0, len = lastViewCursorsRenderData.length; i < len; i++) {\n\t\t\t\tconst d = lastViewCursorsRenderData[i];\n\n\t\t\t\tif (mouseContentHorizontalOffset < d.contentLeft) {\n\t\t\t\t\t// mouse position is to the left of the cursor\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (mouseContentHorizontalOffset > d.contentLeft + d.width) {\n\t\t\t\t\t// mouse position is to the right of the cursor\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst cursorVerticalOffset = ctx.getVerticalOffsetForLineNumber(d.position.lineNumber);\n\n\t\t\t\tif (\n\t\t\t\t\tcursorVerticalOffset <= mouseVerticalOffset\n\t\t\t\t\t&& mouseVerticalOffset <= cursorVerticalOffset + d.height\n\t\t\t\t) {\n\t\t\t\t\treturn request.fulfill(MouseTargetType.CONTENT_TEXT, d.position);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate static _hitTestViewZone(ctx: HitTestContext, request: HitTestRequest): MouseTarget {\n\t\tlet viewZoneData = ctx.getZoneAtCoord(request.mouseVerticalOffset);\n\t\tif (viewZoneData) {\n\t\t\tlet mouseTargetType = (request.isInContentArea ? MouseTargetType.CONTENT_VIEW_ZONE : MouseTargetType.GUTTER_VIEW_ZONE);\n\t\t\treturn request.fulfill(mouseTargetType, viewZoneData.position, null, viewZoneData);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate static _hitTestTextArea(ctx: HitTestContext, request: HitTestRequest): MouseTarget {\n\t\t// Is it the textarea?\n\t\tif (ElementPath.isTextArea(request.targetPath)) {\n\t\t\treturn request.fulfill(MouseTargetType.TEXTAREA);\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate static _hitTestMargin(ctx: HitTestContext, request: HitTestRequest): MouseTarget {\n\t\tif (request.isInMarginArea) {\n\t\t\tlet res = ctx.getFullLineRangeAtCoord(request.mouseVerticalOffset);\n\t\t\tlet pos = res.range.getStartPosition();\n\n\t\t\tlet offset = Math.abs(request.pos.x - request.editorPos.x);\n\t\t\tif (offset <= ctx.layoutInfo.glyphMarginWidth) {\n\t\t\t\t// On the glyph margin\n\t\t\t\treturn request.fulfill(MouseTargetType.GUTTER_GLYPH_MARGIN, pos, res.range, res.isAfterLines);\n\t\t\t}\n\t\t\toffset -= ctx.layoutInfo.glyphMarginWidth;\n\n\t\t\tif (offset <= ctx.layoutInfo.lineNumbersWidth) {\n\t\t\t\t// On the line numbers\n\t\t\t\treturn request.fulfill(MouseTargetType.GUTTER_LINE_NUMBERS, pos, res.range, res.isAfterLines);\n\t\t\t}\n\t\t\toffset -= ctx.layoutInfo.lineNumbersWidth;\n\n\t\t\t// On the line decorations\n\t\t\treturn request.fulfill(MouseTargetType.GUTTER_LINE_DECORATIONS, pos, res.range, res.isAfterLines);\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate static _hitTestViewLines(ctx: HitTestContext, request: HitTestRequest, domHitTestExecuted: boolean): MouseTarget {\n\t\tif (!ElementPath.isChildOfViewLines(request.targetPath)) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Check if it is below any lines and any view zones\n\t\tif (ctx.isAfterLines(request.mouseVerticalOffset)) {\n\t\t\t// This most likely indicates it happened after the last view-line\n\t\t\tconst lineCount = ctx.model.getLineCount();\n\t\t\tconst maxLineColumn = ctx.model.getLineMaxColumn(lineCount);\n\t\t\treturn request.fulfill(MouseTargetType.CONTENT_EMPTY, new Position(lineCount, maxLineColumn));\n\t\t}\n\n\t\tif (domHitTestExecuted) {\n\t\t\t// We have already executed hit test...\n\t\t\treturn request.fulfill(MouseTargetType.UNKNOWN);\n\t\t}\n\n\t\tconst hitTestResult = MouseTargetFactory._doHitTest(ctx, request);\n\n\t\tif (hitTestResult.position) {\n\t\t\treturn MouseTargetFactory.createMouseTargetFromHitTestPosition(ctx, request, hitTestResult.position.lineNumber, hitTestResult.position.column);\n\t\t}\n\n\t\treturn this._createMouseTarget(ctx, request.withTarget(hitTestResult.hitTarget), true);\n\t}\n\n\tprivate static _hitTestMinimap(ctx: HitTestContext, request: HitTestRequest): MouseTarget {\n\t\tif (ElementPath.isChildOfMinimap(request.targetPath)) {\n\t\t\tconst possibleLineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);\n\t\t\tconst maxColumn = ctx.model.getLineMaxColumn(possibleLineNumber);\n\t\t\treturn request.fulfill(MouseTargetType.SCROLLBAR, new Position(possibleLineNumber, maxColumn));\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate static _hitTestScrollbarSlider(ctx: HitTestContext, request: HitTestRequest): MouseTarget {\n\t\tif (ElementPath.isChildOfScrollableElement(request.targetPath)) {\n\t\t\tif (request.target && request.target.nodeType === 1) {\n\t\t\t\tlet className = request.target.className;\n\t\t\t\tif (className && /\\b(slider|scrollbar)\\b/.test(className)) {\n\t\t\t\t\tconst possibleLineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);\n\t\t\t\t\tconst maxColumn = ctx.model.getLineMaxColumn(possibleLineNumber);\n\t\t\t\t\treturn request.fulfill(MouseTargetType.SCROLLBAR, new Position(possibleLineNumber, maxColumn));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate static _hitTestScrollbar(ctx: HitTestContext, request: HitTestRequest): MouseTarget {\n\t\t// Is it the overview ruler?\n\t\t// Is it a child of the scrollable element?\n\t\tif (ElementPath.isChildOfScrollableElement(request.targetPath)) {\n\t\t\tconst possibleLineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);\n\t\t\tconst maxColumn = ctx.model.getLineMaxColumn(possibleLineNumber);\n\t\t\treturn request.fulfill(MouseTargetType.SCROLLBAR, new Position(possibleLineNumber, maxColumn));\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tpublic getMouseColumn(editorPos: EditorPagePosition, pos: PageCoordinates): number {\n\t\tlet layoutInfo = this._context.configuration.editor.layoutInfo;\n\t\tlet mouseContentHorizontalOffset = this._context.viewLayout.getScrollLeft() + pos.x - editorPos.x - layoutInfo.contentLeft;\n\t\treturn MouseTargetFactory._getMouseColumn(mouseContentHorizontalOffset, this._context.configuration.editor.fontInfo.typicalHalfwidthCharacterWidth);\n\t}\n\n\tpublic static _getMouseColumn(mouseContentHorizontalOffset: number, typicalHalfwidthCharacterWidth: number): number {\n\t\tif (mouseContentHorizontalOffset < 0) {\n\t\t\treturn 1;\n\t\t}\n\t\tlet chars = Math.round(mouseContentHorizontalOffset / typicalHalfwidthCharacterWidth);\n\t\treturn (chars + 1);\n\t}\n\n\tprivate static createMouseTargetFromHitTestPosition(ctx: HitTestContext, request: HitTestRequest, lineNumber: number, column: number): MouseTarget {\n\t\tlet pos = new Position(lineNumber, column);\n\n\t\tlet lineWidth = ctx.getLineWidth(lineNumber);\n\n\t\tif (request.mouseContentHorizontalOffset > lineWidth) {\n\t\t\tif (browser.isEdge && pos.column === 1) {\n\t\t\t\t// See https://github.com/Microsoft/vscode/issues/10875\n\t\t\t\treturn request.fulfill(MouseTargetType.CONTENT_EMPTY, new Position(lineNumber, ctx.model.getLineMaxColumn(lineNumber)));\n\t\t\t}\n\t\t\treturn request.fulfill(MouseTargetType.CONTENT_EMPTY, pos);\n\t\t}\n\n\t\tlet visibleRange = ctx.visibleRangeForPosition2(lineNumber, column);\n\n\t\tif (!visibleRange) {\n\t\t\treturn request.fulfill(MouseTargetType.UNKNOWN, pos);\n\t\t}\n\n\t\tlet columnHorizontalOffset = visibleRange.left;\n\n\t\tif (request.mouseContentHorizontalOffset === columnHorizontalOffset) {\n\t\t\treturn request.fulfill(MouseTargetType.CONTENT_TEXT, pos);\n\t\t}\n\n\t\tlet mouseIsBetween: boolean;\n\t\tif (column > 1) {\n\t\t\tlet prevColumnHorizontalOffset = visibleRange.left;\n\t\t\tmouseIsBetween = false;\n\t\t\tmouseIsBetween = mouseIsBetween || (prevColumnHorizontalOffset < request.mouseContentHorizontalOffset && request.mouseContentHorizontalOffset < columnHorizontalOffset); // LTR case\n\t\t\tmouseIsBetween = mouseIsBetween || (columnHorizontalOffset < request.mouseContentHorizontalOffset && request.mouseContentHorizontalOffset < prevColumnHorizontalOffset); // RTL case\n\t\t\tif (mouseIsBetween) {\n\t\t\t\tlet rng = new EditorRange(lineNumber, column, lineNumber, column - 1);\n\t\t\t\treturn request.fulfill(MouseTargetType.CONTENT_TEXT, pos, rng);\n\t\t\t}\n\t\t}\n\n\t\tlet lineMaxColumn = ctx.model.getLineMaxColumn(lineNumber);\n\t\tif (column < lineMaxColumn) {\n\t\t\tlet nextColumnVisibleRange = ctx.visibleRangeForPosition2(lineNumber, column + 1);\n\t\t\tif (nextColumnVisibleRange) {\n\t\t\t\tlet nextColumnHorizontalOffset = nextColumnVisibleRange.left;\n\t\t\t\tmouseIsBetween = false;\n\t\t\t\tmouseIsBetween = mouseIsBetween || (columnHorizontalOffset < request.mouseContentHorizontalOffset && request.mouseContentHorizontalOffset < nextColumnHorizontalOffset); // LTR case\n\t\t\t\tmouseIsBetween = mouseIsBetween || (nextColumnHorizontalOffset < request.mouseContentHorizontalOffset && request.mouseContentHorizontalOffset < columnHorizontalOffset); // RTL case\n\t\t\t\tif (mouseIsBetween) {\n\t\t\t\t\tlet rng = new EditorRange(lineNumber, column, lineNumber, column + 1);\n\t\t\t\t\treturn request.fulfill(MouseTargetType.CONTENT_TEXT, pos, rng);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn request.fulfill(MouseTargetType.CONTENT_TEXT, pos);\n\t}\n\n\t/**\n\t * Most probably WebKit browsers and Edge\n\t */\n\tprivate static _doHitTestWithCaretRangeFromPoint(ctx: HitTestContext, request: BareHitTestRequest): IHitTestResult {\n\n\t\t// In Chrome, especially on Linux it is possible to click between lines,\n\t\t// so try to adjust the `hity` below so that it lands in the center of a line\n\t\tlet lineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);\n\t\tlet lineVerticalOffset = ctx.getVerticalOffsetForLineNumber(lineNumber);\n\t\tlet lineCenteredVerticalOffset = lineVerticalOffset + Math.floor(ctx.lineHeight / 2);\n\t\tlet adjustedPageY = request.pos.y + (lineCenteredVerticalOffset - request.mouseVerticalOffset);\n\n\t\tif (adjustedPageY <= request.editorPos.y) {\n\t\t\tadjustedPageY = request.editorPos.y + 1;\n\t\t}\n\t\tif (adjustedPageY >= request.editorPos.y + ctx.layoutInfo.height) {\n\t\t\tadjustedPageY = request.editorPos.y + ctx.layoutInfo.height - 1;\n\t\t}\n\n\t\tlet adjustedPage = new PageCoordinates(request.pos.x, adjustedPageY);\n\n\t\tlet r = this._actualDoHitTestWithCaretRangeFromPoint(ctx, adjustedPage.toClientCoordinates());\n\t\tif (r.position) {\n\t\t\treturn r;\n\t\t}\n\n\t\t// Also try to hit test without the adjustment (for the edge cases that we are near the top or bottom)\n\t\treturn this._actualDoHitTestWithCaretRangeFromPoint(ctx, request.pos.toClientCoordinates());\n\t}\n\n\tprivate static _actualDoHitTestWithCaretRangeFromPoint(ctx: HitTestContext, coords: ClientCoordinates): IHitTestResult {\n\n\t\tlet range: Range = document.caretRangeFromPoint(coords.clientX, coords.clientY);\n\n\t\tif (!range || !range.startContainer) {\n\t\t\treturn {\n\t\t\t\tposition: null,\n\t\t\t\thitTarget: null\n\t\t\t};\n\t\t}\n\n\t\t// Chrome always hits a TEXT_NODE, while Edge sometimes hits a token span\n\t\tlet startContainer = range.startContainer;\n\t\tlet hitTarget: HTMLElement;\n\n\t\tif (startContainer.nodeType === startContainer.TEXT_NODE) {\n\t\t\t// startContainer is expected to be the token text\n\t\t\tlet parent1 = startContainer.parentNode; // expected to be the token span\n\t\t\tlet parent2 = parent1 ? parent1.parentNode : null; // expected to be the view line container span\n\t\t\tlet parent3 = parent2 ? parent2.parentNode : null; // expected to be the view line div\n\t\t\tlet parent3ClassName = parent3 && parent3.nodeType === parent3.ELEMENT_NODE ? (parent3).className : null;\n\n\t\t\tif (parent3ClassName === ViewLine.CLASS_NAME) {\n\t\t\t\tlet p = ctx.getPositionFromDOMInfo(parent1, range.startOffset);\n\t\t\t\treturn {\n\t\t\t\t\tposition: p,\n\t\t\t\t\thitTarget: null\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\thitTarget = startContainer.parentNode;\n\t\t\t}\n\t\t} else if (startContainer.nodeType === startContainer.ELEMENT_NODE) {\n\t\t\t// startContainer is expected to be the token span\n\t\t\tlet parent1 = startContainer.parentNode; // expected to be the view line container span\n\t\t\tlet parent2 = parent1 ? parent1.parentNode : null; // expected to be the view line div\n\t\t\tlet parent2ClassName = parent2 && parent2.nodeType === parent2.ELEMENT_NODE ? (parent2).className : null;\n\n\t\t\tif (parent2ClassName === ViewLine.CLASS_NAME) {\n\t\t\t\tlet p = ctx.getPositionFromDOMInfo(startContainer, (startContainer).textContent.length);\n\t\t\t\treturn {\n\t\t\t\t\tposition: p,\n\t\t\t\t\thitTarget: null\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\thitTarget = startContainer;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tposition: null,\n\t\t\thitTarget: hitTarget\n\t\t};\n\t}\n\n\t/**\n\t * Most probably Gecko\n\t */\n\tprivate static _doHitTestWithCaretPositionFromPoint(ctx: HitTestContext, coords: ClientCoordinates): IHitTestResult {\n\t\tlet hitResult: { offsetNode: Node; offset: number; } = (document).caretPositionFromPoint(coords.clientX, coords.clientY);\n\n\t\tif (hitResult.offsetNode.nodeType === hitResult.offsetNode.TEXT_NODE) {\n\t\t\t// offsetNode is expected to be the token text\n\t\t\tlet parent1 = hitResult.offsetNode.parentNode; // expected to be the token span\n\t\t\tlet parent2 = parent1 ? parent1.parentNode : null; // expected to be the view line container span\n\t\t\tlet parent3 = parent2 ? parent2.parentNode : null; // expected to be the view line div\n\t\t\tlet parent3ClassName = parent3 && parent3.nodeType === parent3.ELEMENT_NODE ? (parent3).className : null;\n\n\t\t\tif (parent3ClassName === ViewLine.CLASS_NAME) {\n\t\t\t\tlet p = ctx.getPositionFromDOMInfo(hitResult.offsetNode.parentNode, hitResult.offset);\n\t\t\t\treturn {\n\t\t\t\t\tposition: p,\n\t\t\t\t\thitTarget: null\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tposition: null,\n\t\t\t\t\thitTarget: hitResult.offsetNode.parentNode\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tposition: null,\n\t\t\thitTarget: hitResult.offsetNode\n\t\t};\n\t}\n\n\t/**\n\t * Most probably IE\n\t */\n\tprivate static _doHitTestWithMoveToPoint(ctx: HitTestContext, coords: ClientCoordinates): IHitTestResult {\n\t\tlet resultPosition: Position = null;\n\t\tlet resultHitTarget: Element = null;\n\n\t\tlet textRange: IETextRange = (document.body).createTextRange();\n\t\ttry {\n\t\t\ttextRange.moveToPoint(coords.clientX, coords.clientY);\n\t\t} catch (err) {\n\t\t\treturn {\n\t\t\t\tposition: null,\n\t\t\t\thitTarget: null\n\t\t\t};\n\t\t}\n\n\t\ttextRange.collapse(true);\n\n\t\t// Now, let's do our best to figure out what we hit :)\n\t\tlet parentElement = textRange ? textRange.parentElement() : null;\n\t\tlet parent1 = parentElement ? parentElement.parentNode : null;\n\t\tlet parent2 = parent1 ? parent1.parentNode : null;\n\n\t\tlet parent2ClassName = parent2 && parent2.nodeType === parent2.ELEMENT_NODE ? (parent2).className : '';\n\n\t\tif (parent2ClassName === ViewLine.CLASS_NAME) {\n\t\t\tlet rangeToContainEntireSpan = textRange.duplicate();\n\t\t\trangeToContainEntireSpan.moveToElementText(parentElement);\n\t\t\trangeToContainEntireSpan.setEndPoint('EndToStart', textRange);\n\n\t\t\tresultPosition = ctx.getPositionFromDOMInfo(parentElement, rangeToContainEntireSpan.text.length);\n\t\t\t// Move range out of the span node, IE doesn't like having many ranges in\n\t\t\t// the same spot and will act badly for lines containing dashes ('-')\n\t\t\trangeToContainEntireSpan.moveToElementText(ctx.viewDomNode);\n\t\t} else {\n\t\t\t// Looks like we've hit the hover or something foreign\n\t\t\tresultHitTarget = parentElement;\n\t\t}\n\n\t\t// Move range out of the span node, IE doesn't like having many ranges in\n\t\t// the same spot and will act badly for lines containing dashes ('-')\n\t\ttextRange.moveToElementText(ctx.viewDomNode);\n\n\t\treturn {\n\t\t\tposition: resultPosition,\n\t\t\thitTarget: resultHitTarget\n\t\t};\n\t}\n\n\tprivate static _doHitTest(ctx: HitTestContext, request: BareHitTestRequest): IHitTestResult {\n\t\t// State of the art (18.10.2012):\n\t\t// The spec says browsers should support document.caretPositionFromPoint, but nobody implemented it (http://dev.w3.org/csswg/cssom-view/)\n\t\t// Gecko:\n\t\t// - they tried to implement it once, but failed: https://bugzilla.mozilla.org/show_bug.cgi?id=654352\n\t\t// - however, they do give out rangeParent/rangeOffset properties on mouse events\n\t\t// Webkit:\n\t\t// - they have implemented a previous version of the spec which was using document.caretRangeFromPoint\n\t\t// IE:\n\t\t// - they have a proprietary method on ranges, moveToPoint: https://msdn.microsoft.com/en-us/library/ie/ms536632(v=vs.85).aspx\n\n\t\t// 24.08.2016: Edge has added WebKit's document.caretRangeFromPoint, but it is quite buggy\n\t\t// - when hit testing the cursor it returns the first or the last line in the viewport\n\t\t// - it inconsistently hits text nodes or span nodes, while WebKit only hits text nodes\n\t\t// - 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\n\n\t\t// Thank you browsers for making this so 'easy' :)\n\n\t\tif (document.caretRangeFromPoint) {\n\n\t\t\treturn this._doHitTestWithCaretRangeFromPoint(ctx, request);\n\n\t\t} else if ((document).caretPositionFromPoint) {\n\n\t\t\treturn this._doHitTestWithCaretPositionFromPoint(ctx, request.pos.toClientCoordinates());\n\n\t\t} else if ((document.body).createTextRange) {\n\n\t\t\treturn this._doHitTestWithMoveToPoint(ctx, request.pos.toClientCoordinates());\n\n\t\t}\n\n\t\treturn {\n\t\t\tposition: null,\n\t\t\thitTarget: null\n\t\t};\n\t}\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'use strict';\n\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport * as platform from 'vs/base/common/platform';\nimport * as browser from 'vs/base/browser/browser';\nimport * as dom from 'vs/base/browser/dom';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { ViewEventHandler } from 'vs/editor/common/viewModel/viewEventHandler';\nimport { MouseTarget, MouseTargetFactory, IViewZoneData } from 'vs/editor/browser/controller/mouseTarget';\nimport * as editorBrowser from 'vs/editor/browser/editorBrowser';\nimport { TimeoutTimer, RunOnceScheduler } from 'vs/base/common/async';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { HorizontalRange } from 'vs/editor/common/view/renderingContext';\nimport { EditorMouseEventFactory, GlobalEditorMouseMoveMonitor, EditorMouseEvent, createEditorPagePosition, ClientCoordinates } from 'vs/editor/browser/editorDom';\nimport { StandardMouseWheelEvent } from 'vs/base/browser/mouseEvent';\nimport { EditorZoom } from 'vs/editor/common/config/editorZoom';\nimport { IViewCursorRenderData } from 'vs/editor/browser/viewParts/viewCursors/viewCursor';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\nimport { ViewController } from 'vs/editor/browser/view/viewController';\n\n/**\n * Merges mouse events when mouse move events are throttled\n */\nfunction createMouseMoveEventMerger(mouseTargetFactory: MouseTargetFactory) {\n\treturn function (lastEvent: EditorMouseEvent, currentEvent: EditorMouseEvent): EditorMouseEvent {\n\t\tlet targetIsWidget = false;\n\t\tif (mouseTargetFactory) {\n\t\t\ttargetIsWidget = mouseTargetFactory.mouseTargetIsWidget(currentEvent);\n\t\t}\n\t\tif (!targetIsWidget) {\n\t\t\tcurrentEvent.preventDefault();\n\t\t}\n\t\treturn currentEvent;\n\t};\n}\n\nexport interface IPointerHandlerHelper {\n\tviewDomNode: HTMLElement;\n\tlinesContentDomNode: HTMLElement;\n\n\tfocusTextArea(): void;\n\n\t/**\n\t * Get the last rendered information of the cursors.\n\t */\n\tgetLastViewCursorsRenderData(): IViewCursorRenderData[];\n\n\tshouldSuppressMouseDownOnViewZone(viewZoneId: number): boolean;\n\tshouldSuppressMouseDownOnWidget(widgetId: string): boolean;\n\n\t/**\n\t * Decode a position from a rendered dom node\n\t */\n\tgetPositionFromDOMInfo(spanNode: HTMLElement, offset: number): Position;\n\n\tvisibleRangeForPosition2(lineNumber: number, column: number): HorizontalRange;\n\tgetLineWidth(lineNumber: number): number;\n}\n\nexport class MouseHandler extends ViewEventHandler {\n\n\tstatic MOUSE_MOVE_MINIMUM_TIME = 100; // ms\n\n\tprotected _context: ViewContext;\n\tprotected viewController: ViewController;\n\tprotected viewHelper: IPointerHandlerHelper;\n\tprotected mouseTargetFactory: MouseTargetFactory;\n\tprivate _asyncFocus: RunOnceScheduler;\n\n\tprivate _mouseDownOperation: MouseDownOperation;\n\tprivate lastMouseLeaveTime: number;\n\n\tconstructor(context: ViewContext, viewController: ViewController, viewHelper: IPointerHandlerHelper) {\n\t\tsuper();\n\n\t\tthis._context = context;\n\t\tthis.viewController = viewController;\n\t\tthis.viewHelper = viewHelper;\n\t\tthis.mouseTargetFactory = new MouseTargetFactory(this._context, viewHelper);\n\n\t\tthis._mouseDownOperation = this._register(new MouseDownOperation(\n\t\t\tthis._context,\n\t\t\tthis.viewController,\n\t\t\tthis.viewHelper,\n\t\t\t(e, testEventTarget) => this._createMouseTarget(e, testEventTarget),\n\t\t\t(e) => this._getMouseColumn(e)\n\t\t));\n\n\t\tthis._asyncFocus = this._register(new RunOnceScheduler(() => this.viewHelper.focusTextArea(), 0));\n\n\t\tthis.lastMouseLeaveTime = -1;\n\n\t\tlet mouseEvents = new EditorMouseEventFactory(this.viewHelper.viewDomNode);\n\n\t\tthis._register(mouseEvents.onContextMenu(this.viewHelper.viewDomNode, (e) => this._onContextMenu(e, true)));\n\n\t\tthis._register(mouseEvents.onMouseMoveThrottled(this.viewHelper.viewDomNode,\n\t\t\t(e) => this._onMouseMove(e),\n\t\t\tcreateMouseMoveEventMerger(this.mouseTargetFactory), MouseHandler.MOUSE_MOVE_MINIMUM_TIME));\n\n\t\tthis._register(mouseEvents.onMouseUp(this.viewHelper.viewDomNode, (e) => this._onMouseUp(e)));\n\n\t\tthis._register(mouseEvents.onMouseLeave(this.viewHelper.viewDomNode, (e) => this._onMouseLeave(e)));\n\n\t\tthis._register(mouseEvents.onMouseDown(this.viewHelper.viewDomNode, (e) => this._onMouseDown(e)));\n\n\t\tlet onMouseWheel = (browserEvent: MouseWheelEvent) => {\n\t\t\tif (!this._context.configuration.editor.viewInfo.mouseWheelZoom) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet e = new StandardMouseWheelEvent(browserEvent);\n\t\t\tif (e.browserEvent.ctrlKey || e.browserEvent.metaKey) {\n\t\t\t\tlet zoomLevel: number = EditorZoom.getZoomLevel();\n\t\t\t\tlet delta = e.deltaY > 0 ? 1 : -1;\n\t\t\t\tEditorZoom.setZoomLevel(zoomLevel + delta);\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t};\n\t\tthis._register(dom.addDisposableListener(this.viewHelper.viewDomNode, 'mousewheel', onMouseWheel, true));\n\t\tthis._register(dom.addDisposableListener(this.viewHelper.viewDomNode, 'DOMMouseScroll', onMouseWheel, true));\n\n\t\tthis._context.addEventHandler(this);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._context.removeEventHandler(this);\n\t\tsuper.dispose();\n\t}\n\n\t// --- begin event handlers\n\tpublic onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean {\n\t\tthis._mouseDownOperation.onCursorStateChanged(e);\n\t\treturn false;\n\t}\n\tprivate _isFocused = false;\n\tpublic onFocusChanged(e: viewEvents.ViewFocusChangedEvent): boolean {\n\t\tthis._isFocused = e.isFocused;\n\t\treturn false;\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\tthis._mouseDownOperation.onScrollChanged();\n\t\treturn false;\n\t}\n\t// --- end event handlers\n\n\tpublic getTargetAtClientPoint(clientX: number, clientY: number): editorBrowser.IMouseTarget {\n\t\tlet clientPos = new ClientCoordinates(clientX, clientY);\n\t\tlet pos = clientPos.toPageCoordinates();\n\t\tlet editorPos = createEditorPagePosition(this.viewHelper.viewDomNode);\n\n\t\tif (pos.y < editorPos.y || pos.y > editorPos.y + editorPos.height || pos.x < editorPos.x || pos.x > editorPos.x + editorPos.width) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet lastViewCursorsRenderData = this.viewHelper.getLastViewCursorsRenderData();\n\t\treturn this.mouseTargetFactory.createMouseTarget(lastViewCursorsRenderData, editorPos, pos, null);\n\t}\n\n\tprotected _createMouseTarget(e: EditorMouseEvent, testEventTarget: boolean): editorBrowser.IMouseTarget {\n\t\tlet lastViewCursorsRenderData = this.viewHelper.getLastViewCursorsRenderData();\n\t\treturn this.mouseTargetFactory.createMouseTarget(lastViewCursorsRenderData, e.editorPos, e.pos, testEventTarget ? e.target : null);\n\t}\n\n\tprivate _getMouseColumn(e: EditorMouseEvent): number {\n\t\treturn this.mouseTargetFactory.getMouseColumn(e.editorPos, e.pos);\n\t}\n\n\tprotected _onContextMenu(e: EditorMouseEvent, testEventTarget: boolean): void {\n\t\tthis.viewController.emitContextMenu({\n\t\t\tevent: e,\n\t\t\ttarget: this._createMouseTarget(e, testEventTarget)\n\t\t});\n\t}\n\n\tprivate _onMouseMove(e: EditorMouseEvent): void {\n\t\tif (this._mouseDownOperation.isActive()) {\n\t\t\t// In selection/drag operation\n\t\t\treturn;\n\t\t}\n\t\tlet actualMouseMoveTime = e.timestamp;\n\t\tif (actualMouseMoveTime < this.lastMouseLeaveTime) {\n\t\t\t// Due to throttling, this event occurred before the mouse left the editor, therefore ignore it.\n\t\t\treturn;\n\t\t}\n\n\t\tthis.viewController.emitMouseMove({\n\t\t\tevent: e,\n\t\t\ttarget: this._createMouseTarget(e, true)\n\t\t});\n\t}\n\n\tprivate _onMouseLeave(e: EditorMouseEvent): void {\n\t\tthis.lastMouseLeaveTime = (new Date()).getTime();\n\t\tthis.viewController.emitMouseLeave({\n\t\t\tevent: e,\n\t\t\ttarget: null\n\t\t});\n\t}\n\n\tpublic _onMouseUp(e: EditorMouseEvent): void {\n\t\tthis.viewController.emitMouseUp({\n\t\t\tevent: e,\n\t\t\ttarget: this._createMouseTarget(e, true)\n\t\t});\n\t}\n\n\tpublic _onMouseDown(e: EditorMouseEvent): void {\n\t\tlet t = this._createMouseTarget(e, true);\n\n\t\tlet targetIsContent = (t.type === editorBrowser.MouseTargetType.CONTENT_TEXT || t.type === editorBrowser.MouseTargetType.CONTENT_EMPTY);\n\t\tlet targetIsGutter = (t.type === editorBrowser.MouseTargetType.GUTTER_GLYPH_MARGIN || t.type === editorBrowser.MouseTargetType.GUTTER_LINE_NUMBERS || t.type === editorBrowser.MouseTargetType.GUTTER_LINE_DECORATIONS);\n\t\tlet targetIsLineNumbers = (t.type === editorBrowser.MouseTargetType.GUTTER_LINE_NUMBERS);\n\t\tlet selectOnLineNumbers = this._context.configuration.editor.viewInfo.selectOnLineNumbers;\n\t\tlet targetIsViewZone = (t.type === editorBrowser.MouseTargetType.CONTENT_VIEW_ZONE || t.type === editorBrowser.MouseTargetType.GUTTER_VIEW_ZONE);\n\t\tlet targetIsWidget = (t.type === editorBrowser.MouseTargetType.CONTENT_WIDGET);\n\n\t\tlet shouldHandle = e.leftButton;\n\t\tif (platform.isMacintosh && e.ctrlKey) {\n\t\t\tshouldHandle = false;\n\t\t}\n\n\t\tlet focus = () => {\n\t\t\t// In IE11, if the focus is in the browser's address bar and\n\t\t\t// then you click in the editor, calling preventDefault()\n\t\t\t// will not move focus properly (focus remains the address bar)\n\t\t\tif (browser.isIE && !this._isFocused) {\n\t\t\t\tthis._asyncFocus.schedule();\n\t\t\t} else {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.viewHelper.focusTextArea();\n\t\t\t}\n\t\t};\n\n\t\tif (shouldHandle && (targetIsContent || (targetIsLineNumbers && selectOnLineNumbers))) {\n\t\t\tfocus();\n\t\t\tthis._mouseDownOperation.start(t.type, e);\n\n\t\t} else if (targetIsGutter) {\n\t\t\t// Do not steal focus\n\t\t\te.preventDefault();\n\t\t} else if (targetIsViewZone) {\n\t\t\tlet viewZoneData = t.detail;\n\t\t\tif (this.viewHelper.shouldSuppressMouseDownOnViewZone(viewZoneData.viewZoneId)) {\n\t\t\t\tfocus();\n\t\t\t\tthis._mouseDownOperation.start(t.type, e);\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t} else if (targetIsWidget && this.viewHelper.shouldSuppressMouseDownOnWidget(t.detail)) {\n\t\t\tfocus();\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tthis.viewController.emitMouseDown({\n\t\t\tevent: e,\n\t\t\ttarget: t\n\t\t});\n\t}\n}\n\nclass MouseDownOperation extends Disposable {\n\n\tprivate readonly _context: ViewContext;\n\tprivate readonly _viewController: ViewController;\n\tprivate readonly _viewHelper: IPointerHandlerHelper;\n\tprivate readonly _createMouseTarget: (e: EditorMouseEvent, testEventTarget: boolean) => editorBrowser.IMouseTarget;\n\tprivate readonly _getMouseColumn: (e: EditorMouseEvent) => number;\n\n\tprivate readonly _mouseMoveMonitor: GlobalEditorMouseMoveMonitor;\n\tprivate readonly _onScrollTimeout: TimeoutTimer;\n\tprivate readonly _mouseState: MouseDownState;\n\n\tprivate _currentSelection: Selection;\n\tprivate _isActive: boolean;\n\tprivate _lastMouseEvent: EditorMouseEvent;\n\n\tconstructor(\n\t\tcontext: ViewContext,\n\t\tviewController: ViewController,\n\t\tviewHelper: IPointerHandlerHelper,\n\t\tcreateMouseTarget: (e: EditorMouseEvent, testEventTarget: boolean) => editorBrowser.IMouseTarget,\n\t\tgetMouseColumn: (e: EditorMouseEvent) => number\n\t) {\n\t\tsuper();\n\t\tthis._context = context;\n\t\tthis._viewController = viewController;\n\t\tthis._viewHelper = viewHelper;\n\t\tthis._createMouseTarget = createMouseTarget;\n\t\tthis._getMouseColumn = getMouseColumn;\n\n\t\tthis._mouseMoveMonitor = this._register(new GlobalEditorMouseMoveMonitor(this._viewHelper.viewDomNode));\n\t\tthis._onScrollTimeout = this._register(new TimeoutTimer());\n\t\tthis._mouseState = new MouseDownState();\n\n\t\tthis._currentSelection = new Selection(1, 1, 1, 1);\n\t\tthis._isActive = false;\n\t\tthis._lastMouseEvent = null;\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t}\n\n\tpublic isActive(): boolean {\n\t\treturn this._isActive;\n\t}\n\n\tprivate _onMouseDownThenMove(e: EditorMouseEvent): void {\n\t\tthis._lastMouseEvent = e;\n\t\tthis._mouseState.setModifiers(e);\n\n\t\tlet position = this._findMousePosition(e, true);\n\t\tif (!position) {\n\t\t\t// Ignoring because position is unknown\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._mouseState.isDragAndDrop) {\n\t\t\tthis._viewController.emitMouseDrag({\n\t\t\t\tevent: e,\n\t\t\t\ttarget: position\n\t\t\t});\n\t\t} else {\n\t\t\tthis._dispatchMouse(position, true);\n\t\t}\n\t}\n\n\tpublic start(targetType: editorBrowser.MouseTargetType, e: EditorMouseEvent): void {\n\t\tthis._lastMouseEvent = e;\n\n\t\tthis._mouseState.setStartedOnLineNumbers(targetType === editorBrowser.MouseTargetType.GUTTER_LINE_NUMBERS);\n\t\tthis._mouseState.setModifiers(e);\n\t\tlet position = this._findMousePosition(e, true);\n\t\tif (!position) {\n\t\t\t// Ignoring because position is unknown\n\t\t\treturn;\n\t\t}\n\n\t\tthis._mouseState.trySetCount(e.detail, position.position);\n\n\t\t// Overwrite the detail of the MouseEvent, as it will be sent out in an event and contributions might rely on it.\n\t\te.detail = this._mouseState.count;\n\n\t\tif (!this._context.configuration.editor.readOnly\n\t\t\t&& this._context.configuration.editor.dragAndDrop\n\t\t\t&& !this._mouseState.altKey // we don't support multiple mouse\n\t\t\t&& e.detail < 2 // only single click on a selection can work\n\t\t\t&& !this._isActive // the mouse is not down yet\n\t\t\t&& !this._currentSelection.isEmpty() // we don't drag single cursor\n\t\t\t&& this._currentSelection.containsPosition(position.position) // single click on a selection\n\t\t) {\n\t\t\tthis._mouseState.isDragAndDrop = true;\n\t\t\tthis._isActive = true;\n\n\t\t\tthis._mouseMoveMonitor.startMonitoring(\n\t\t\t\tcreateMouseMoveEventMerger(null),\n\t\t\t\t(e) => this._onMouseDownThenMove(e),\n\t\t\t\t() => {\n\t\t\t\t\tlet position = this._findMousePosition(this._lastMouseEvent, true);\n\n\t\t\t\t\tthis._viewController.emitMouseDrop({\n\t\t\t\t\t\tevent: this._lastMouseEvent,\n\t\t\t\t\t\ttarget: position ? this._createMouseTarget(this._lastMouseEvent, true) : null // Ignoring because position is unknown, e.g., Content View Zone\n\t\t\t\t\t});\n\n\t\t\t\t\tthis._stop();\n\t\t\t\t}\n\t\t\t);\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis._mouseState.isDragAndDrop = false;\n\t\tthis._dispatchMouse(position, e.shiftKey);\n\n\t\tif (!this._isActive) {\n\t\t\tthis._isActive = true;\n\t\t\tthis._mouseMoveMonitor.startMonitoring(\n\t\t\t\tcreateMouseMoveEventMerger(null),\n\t\t\t\t(e) => this._onMouseDownThenMove(e),\n\t\t\t\t() => this._stop()\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate _stop(): void {\n\t\tthis._isActive = false;\n\t\tthis._onScrollTimeout.cancel();\n\t}\n\n\tpublic onScrollChanged(): void {\n\t\tif (!this._isActive) {\n\t\t\treturn;\n\t\t}\n\t\tthis._onScrollTimeout.setIfNotSet(() => {\n\t\t\tlet position = this._findMousePosition(this._lastMouseEvent, false);\n\t\t\tif (!position) {\n\t\t\t\t// Ignoring because position is unknown\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this._mouseState.isDragAndDrop) {\n\t\t\t\t// Ignoring because users are dragging the text\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._dispatchMouse(position, true);\n\t\t}, 10);\n\t}\n\n\tpublic onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): void {\n\t\tthis._currentSelection = e.selections[0];\n\t}\n\n\tprivate _getPositionOutsideEditor(e: EditorMouseEvent): MouseTarget {\n\t\tconst editorContent = e.editorPos;\n\t\tconst model = this._context.model;\n\t\tconst viewLayout = this._context.viewLayout;\n\n\t\tconst mouseColumn = this._getMouseColumn(e);\n\n\t\tif (e.posy < editorContent.y) {\n\t\t\tlet aboveLineNumber = viewLayout.getLineNumberAtVerticalOffset(Math.max(viewLayout.getScrollTop() - (editorContent.y - e.posy), 0));\n\t\t\treturn new MouseTarget(null, editorBrowser.MouseTargetType.OUTSIDE_EDITOR, mouseColumn, new Position(aboveLineNumber, 1));\n\t\t}\n\n\t\tif (e.posy > editorContent.y + editorContent.height) {\n\t\t\tlet belowLineNumber = viewLayout.getLineNumberAtVerticalOffset(viewLayout.getScrollTop() + (e.posy - editorContent.y));\n\t\t\treturn new MouseTarget(null, editorBrowser.MouseTargetType.OUTSIDE_EDITOR, mouseColumn, new Position(belowLineNumber, model.getLineMaxColumn(belowLineNumber)));\n\t\t}\n\n\t\tlet possibleLineNumber = viewLayout.getLineNumberAtVerticalOffset(viewLayout.getScrollTop() + (e.posy - editorContent.y));\n\n\t\tif (e.posx < editorContent.x) {\n\t\t\treturn new MouseTarget(null, editorBrowser.MouseTargetType.OUTSIDE_EDITOR, mouseColumn, new Position(possibleLineNumber, 1));\n\t\t}\n\n\t\tif (e.posx > editorContent.x + editorContent.width) {\n\t\t\treturn new MouseTarget(null, editorBrowser.MouseTargetType.OUTSIDE_EDITOR, mouseColumn, new Position(possibleLineNumber, model.getLineMaxColumn(possibleLineNumber)));\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate _findMousePosition(e: EditorMouseEvent, testEventTarget: boolean): MouseTarget {\n\t\tlet positionOutsideEditor = this._getPositionOutsideEditor(e);\n\t\tif (positionOutsideEditor) {\n\t\t\treturn positionOutsideEditor;\n\t\t}\n\n\t\tlet t = this._createMouseTarget(e, testEventTarget);\n\t\tlet hintedPosition = t.position;\n\t\tif (!hintedPosition) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (t.type === editorBrowser.MouseTargetType.CONTENT_VIEW_ZONE || t.type === editorBrowser.MouseTargetType.GUTTER_VIEW_ZONE) {\n\t\t\t// Force position on view zones to go above or below depending on where selection started from\n\t\t\tlet selectionStart = new Position(this._currentSelection.selectionStartLineNumber, this._currentSelection.selectionStartColumn);\n\t\t\tlet viewZoneData = t.detail;\n\t\t\tlet positionBefore = viewZoneData.positionBefore;\n\t\t\tlet positionAfter = viewZoneData.positionAfter;\n\n\t\t\tif (positionBefore && positionAfter) {\n\t\t\t\tif (positionBefore.isBefore(selectionStart)) {\n\t\t\t\t\treturn new MouseTarget(t.element, t.type, t.mouseColumn, positionBefore, null, t.detail);\n\t\t\t\t} else {\n\t\t\t\t\treturn new MouseTarget(t.element, t.type, t.mouseColumn, positionAfter, null, t.detail);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn t;\n\t}\n\n\tprivate _dispatchMouse(position: MouseTarget, inSelectionMode: boolean): void {\n\t\tthis._viewController.dispatchMouse({\n\t\t\tposition: position.position,\n\t\t\tmouseColumn: position.mouseColumn,\n\t\t\tstartedOnLineNumbers: this._mouseState.startedOnLineNumbers,\n\n\t\t\tinSelectionMode: inSelectionMode,\n\t\t\tmouseDownCount: this._mouseState.count,\n\t\t\taltKey: this._mouseState.altKey,\n\t\t\tctrlKey: this._mouseState.ctrlKey,\n\t\t\tmetaKey: this._mouseState.metaKey,\n\t\t\tshiftKey: this._mouseState.shiftKey,\n\t\t});\n\t}\n}\n\nclass MouseDownState {\n\n\tprivate static CLEAR_MOUSE_DOWN_COUNT_TIME = 400; // ms\n\n\tprivate _altKey: boolean;\n\tpublic get altKey(): boolean { return this._altKey; }\n\n\tprivate _ctrlKey: boolean;\n\tpublic get ctrlKey(): boolean { return this._ctrlKey; }\n\n\tprivate _metaKey: boolean;\n\tpublic get metaKey(): boolean { return this._metaKey; }\n\n\tprivate _shiftKey: boolean;\n\tpublic get shiftKey(): boolean { return this._shiftKey; }\n\n\tprivate _startedOnLineNumbers: boolean;\n\tpublic get startedOnLineNumbers(): boolean { return this._startedOnLineNumbers; }\n\n\tprivate _lastMouseDownPosition: Position;\n\tprivate _lastMouseDownPositionEqualCount: number;\n\tprivate _lastMouseDownCount: number;\n\tprivate _lastSetMouseDownCountTime: number;\n\tpublic isDragAndDrop: boolean;\n\n\tconstructor() {\n\t\tthis._altKey = false;\n\t\tthis._ctrlKey = false;\n\t\tthis._metaKey = false;\n\t\tthis._shiftKey = false;\n\t\tthis._startedOnLineNumbers = false;\n\t\tthis._lastMouseDownPosition = null;\n\t\tthis._lastMouseDownPositionEqualCount = 0;\n\t\tthis._lastMouseDownCount = 0;\n\t\tthis._lastSetMouseDownCountTime = 0;\n\t\tthis.isDragAndDrop = false;\n\t}\n\n\tpublic get count(): number {\n\t\treturn this._lastMouseDownCount;\n\t}\n\n\tpublic setModifiers(source: EditorMouseEvent) {\n\t\tthis._altKey = source.altKey;\n\t\tthis._ctrlKey = source.ctrlKey;\n\t\tthis._metaKey = source.metaKey;\n\t\tthis._shiftKey = source.shiftKey;\n\t}\n\n\tpublic setStartedOnLineNumbers(startedOnLineNumbers: boolean): void {\n\t\tthis._startedOnLineNumbers = startedOnLineNumbers;\n\t}\n\n\tpublic trySetCount(setMouseDownCount: number, newMouseDownPosition: Position): void {\n\t\t// 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\t\tlet currentTime = (new Date()).getTime();\n\t\tif (currentTime - this._lastSetMouseDownCountTime > MouseDownState.CLEAR_MOUSE_DOWN_COUNT_TIME) {\n\t\t\tsetMouseDownCount = 1;\n\t\t}\n\t\tthis._lastSetMouseDownCountTime = currentTime;\n\n\t\t// 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\t\tif (setMouseDownCount > this._lastMouseDownCount + 1) {\n\t\t\tsetMouseDownCount = this._lastMouseDownCount + 1;\n\t\t}\n\n\t\t// c. Invalidate multiple clicking if the logical position is different\n\t\tif (this._lastMouseDownPosition && this._lastMouseDownPosition.equals(newMouseDownPosition)) {\n\t\t\tthis._lastMouseDownPositionEqualCount++;\n\t\t} else {\n\t\t\tthis._lastMouseDownPositionEqualCount = 1;\n\t\t}\n\t\tthis._lastMouseDownPosition = newMouseDownPosition;\n\n\t\t// Finally set the lastMouseDownCount\n\t\tthis._lastMouseDownCount = Math.min(setMouseDownCount, this._lastMouseDownPositionEqualCount);\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport * as dom from 'vs/base/browser/dom';\nimport { EventType, Gesture, GestureEvent } from 'vs/base/browser/touch';\nimport { MouseHandler, IPointerHandlerHelper } from 'vs/editor/browser/controller/mouseHandler';\nimport { IMouseTarget } from 'vs/editor/browser/editorBrowser';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { EditorMouseEvent } from 'vs/editor/browser/editorDom';\nimport { ViewController } from 'vs/editor/browser/view/viewController';\n\ninterface IThrottledGestureEvent {\n\ttranslationX: number;\n\ttranslationY: number;\n}\n\nfunction gestureChangeEventMerger(lastEvent: IThrottledGestureEvent, currentEvent: MSGestureEvent): IThrottledGestureEvent {\n\tlet r = {\n\t\ttranslationY: currentEvent.translationY,\n\t\ttranslationX: currentEvent.translationX\n\t};\n\tif (lastEvent) {\n\t\tr.translationY += lastEvent.translationY;\n\t\tr.translationX += lastEvent.translationX;\n\t}\n\treturn r;\n};\n\n/**\n * Basically IE10 and IE11\n */\nclass MsPointerHandler extends MouseHandler implements IDisposable {\n\n\tprivate _lastPointerType: string;\n\tprivate _installGestureHandlerTimeout: number;\n\n\tconstructor(context: ViewContext, viewController: ViewController, viewHelper: IPointerHandlerHelper) {\n\t\tsuper(context, viewController, viewHelper);\n\n\t\tthis.viewHelper.linesContentDomNode.style.msTouchAction = 'none';\n\t\tthis.viewHelper.linesContentDomNode.style.msContentZooming = 'none';\n\n\t\t// TODO@Alex -> this expects that the view is added in 100 ms, might not be the case\n\t\t// This handler should be added when the dom node is in the dom tree\n\t\tthis._installGestureHandlerTimeout = window.setTimeout(() => {\n\t\t\tthis._installGestureHandlerTimeout = -1;\n\t\t\tif ((window).MSGesture) {\n\t\t\t\tlet touchGesture = new MSGesture();\n\t\t\t\tlet penGesture = new MSGesture();\n\t\t\t\ttouchGesture.target = this.viewHelper.linesContentDomNode;\n\t\t\t\tpenGesture.target = this.viewHelper.linesContentDomNode;\n\t\t\t\tthis.viewHelper.linesContentDomNode.addEventListener('MSPointerDown', (e: MSPointerEvent) => {\n\t\t\t\t\t// Circumvent IE11 breaking change in e.pointerType & TypeScript's stale definitions\n\t\t\t\t\tlet pointerType = e.pointerType;\n\t\t\t\t\tif (pointerType === ((e).MSPOINTER_TYPE_MOUSE || 'mouse')) {\n\t\t\t\t\t\tthis._lastPointerType = 'mouse';\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else if (pointerType === ((e).MSPOINTER_TYPE_TOUCH || 'touch')) {\n\t\t\t\t\t\tthis._lastPointerType = 'touch';\n\t\t\t\t\t\ttouchGesture.addPointer(e.pointerId);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._lastPointerType = 'pen';\n\t\t\t\t\t\tpenGesture.addPointer(e.pointerId);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tthis._register(dom.addDisposableThrottledListener(this.viewHelper.linesContentDomNode, 'MSGestureChange', (e) => this._onGestureChange(e), gestureChangeEventMerger));\n\t\t\t\tthis._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, 'MSGestureTap', (e) => this._onCaptureGestureTap(e), true));\n\t\t\t}\n\t\t}, 100);\n\t\tthis._lastPointerType = 'mouse';\n\t}\n\n\tpublic _onMouseDown(e: EditorMouseEvent): void {\n\t\tif (this._lastPointerType === 'mouse') {\n\t\t\tsuper._onMouseDown(e);\n\t\t}\n\t}\n\n\tprivate _onCaptureGestureTap(rawEvent: MSGestureEvent): void {\n\t\tlet e = new EditorMouseEvent(rawEvent, this.viewHelper.viewDomNode);\n\t\tlet t = this._createMouseTarget(e, false);\n\t\tif (t.position) {\n\t\t\tthis.viewController.moveTo(t.position);\n\t\t}\n\t\t// IE does not want to focus when coming in from the browser's address bar\n\t\tif ((e.browserEvent).fromElement) {\n\t\t\te.preventDefault();\n\t\t\tthis.viewHelper.focusTextArea();\n\t\t} else {\n\t\t\t// TODO@Alex -> cancel this is focus is lost\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.viewHelper.focusTextArea();\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate _onGestureChange(e: IThrottledGestureEvent): void {\n\t\tconst viewLayout = this._context.viewLayout;\n\t\tviewLayout.setScrollPosition({\n\t\t\tscrollLeft: viewLayout.getScrollLeft() - e.translationX,\n\t\t\tscrollTop: viewLayout.getScrollTop() - e.translationY,\n\t\t});\n\t}\n\n\tpublic dispose(): void {\n\t\twindow.clearTimeout(this._installGestureHandlerTimeout);\n\t\tsuper.dispose();\n\t}\n}\n\n/**\n * Basically Edge but should be modified to handle any pointerEnabled, even without support of MSGesture\n */\nclass StandardPointerHandler extends MouseHandler implements IDisposable {\n\n\tprivate _lastPointerType: string;\n\tprivate _installGestureHandlerTimeout: number;\n\n\tconstructor(context: ViewContext, viewController: ViewController, viewHelper: IPointerHandlerHelper) {\n\t\tsuper(context, viewController, viewHelper);\n\n\t\tthis.viewHelper.linesContentDomNode.style.touchAction = 'none';\n\n\t\t// TODO@Alex -> this expects that the view is added in 100 ms, might not be the case\n\t\t// This handler should be added when the dom node is in the dom tree\n\t\tthis._installGestureHandlerTimeout = window.setTimeout(() => {\n\t\t\tthis._installGestureHandlerTimeout = -1;\n\n\t\t\t// TODO@Alex: replace the usage of MSGesture here with something that works across all browsers\n\t\t\tif ((window).MSGesture) {\n\t\t\t\tlet touchGesture = new MSGesture();\n\t\t\t\tlet penGesture = new MSGesture();\n\t\t\t\ttouchGesture.target = this.viewHelper.linesContentDomNode;\n\t\t\t\tpenGesture.target = this.viewHelper.linesContentDomNode;\n\t\t\t\tthis.viewHelper.linesContentDomNode.addEventListener('pointerdown', (e: MSPointerEvent) => {\n\t\t\t\t\tlet pointerType = e.pointerType;\n\t\t\t\t\tif (pointerType === 'mouse') {\n\t\t\t\t\t\tthis._lastPointerType = 'mouse';\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else if (pointerType === 'touch') {\n\t\t\t\t\t\tthis._lastPointerType = 'touch';\n\t\t\t\t\t\ttouchGesture.addPointer(e.pointerId);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._lastPointerType = 'pen';\n\t\t\t\t\t\tpenGesture.addPointer(e.pointerId);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tthis._register(dom.addDisposableThrottledListener(this.viewHelper.linesContentDomNode, 'MSGestureChange', (e) => this._onGestureChange(e), gestureChangeEventMerger));\n\t\t\t\tthis._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, 'MSGestureTap', (e) => this._onCaptureGestureTap(e), true));\n\t\t\t}\n\t\t}, 100);\n\t\tthis._lastPointerType = 'mouse';\n\t}\n\n\tpublic _onMouseDown(e: EditorMouseEvent): void {\n\t\tif (this._lastPointerType === 'mouse') {\n\t\t\tsuper._onMouseDown(e);\n\t\t}\n\t}\n\n\tprivate _onCaptureGestureTap(rawEvent: MSGestureEvent): void {\n\t\tlet e = new EditorMouseEvent(rawEvent, this.viewHelper.viewDomNode);\n\t\tlet t = this._createMouseTarget(e, false);\n\t\tif (t.position) {\n\t\t\tthis.viewController.moveTo(t.position);\n\t\t}\n\t\t// IE does not want to focus when coming in from the browser's address bar\n\t\tif ((e.browserEvent).fromElement) {\n\t\t\te.preventDefault();\n\t\t\tthis.viewHelper.focusTextArea();\n\t\t} else {\n\t\t\t// TODO@Alex -> cancel this is focus is lost\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.viewHelper.focusTextArea();\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate _onGestureChange(e: IThrottledGestureEvent): void {\n\t\tconst viewLayout = this._context.viewLayout;\n\t\tviewLayout.setScrollPosition({\n\t\t\tscrollLeft: viewLayout.getScrollLeft() - e.translationX,\n\t\t\tscrollTop: viewLayout.getScrollTop() - e.translationY,\n\t\t});\n\t}\n\n\tpublic dispose(): void {\n\t\twindow.clearTimeout(this._installGestureHandlerTimeout);\n\t\tsuper.dispose();\n\t}\n}\n\nclass TouchHandler extends MouseHandler {\n\n\tprivate gesture: Gesture;\n\n\tconstructor(context: ViewContext, viewController: ViewController, viewHelper: IPointerHandlerHelper) {\n\t\tsuper(context, viewController, viewHelper);\n\n\t\tthis.gesture = new Gesture(this.viewHelper.linesContentDomNode);\n\n\t\tthis._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, EventType.Tap, (e) => this.onTap(e)));\n\t\tthis._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, EventType.Change, (e) => this.onChange(e)));\n\t\tthis._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, EventType.Contextmenu, (e: MouseEvent) => this._onContextMenu(new EditorMouseEvent(e, this.viewHelper.viewDomNode), false)));\n\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.gesture.dispose();\n\t\tsuper.dispose();\n\t}\n\n\tprivate onTap(event: GestureEvent): void {\n\t\tevent.preventDefault();\n\n\t\tthis.viewHelper.focusTextArea();\n\n\t\tlet target = this._createMouseTarget(new EditorMouseEvent(event, this.viewHelper.viewDomNode), false);\n\n\t\tif (target.position) {\n\t\t\tthis.viewController.moveTo(target.position);\n\t\t}\n\t}\n\n\tprivate onChange(e: GestureEvent): void {\n\t\tconst viewLayout = this._context.viewLayout;\n\t\tviewLayout.setScrollPosition({\n\t\t\tscrollLeft: viewLayout.getScrollLeft() - e.translationX,\n\t\t\tscrollTop: viewLayout.getScrollTop() - e.translationY,\n\t\t});\n\t}\n}\n\nexport class PointerHandler implements IDisposable {\n\tprivate handler: MouseHandler;\n\n\tconstructor(context: ViewContext, viewController: ViewController, viewHelper: IPointerHandlerHelper) {\n\t\tif (window.navigator.msPointerEnabled) {\n\t\t\tthis.handler = new MsPointerHandler(context, viewController, viewHelper);\n\t\t} else if ((window).TouchEvent) {\n\t\t\tthis.handler = new TouchHandler(context, viewController, viewHelper);\n\t\t} else if (window.navigator.pointerEnabled) {\n\t\t\tthis.handler = new StandardPointerHandler(context, viewController, viewHelper);\n\t\t} else {\n\t\t\tthis.handler = new MouseHandler(context, viewController, viewHelper);\n\t\t}\n\t}\n\n\tpublic getTargetAtClientPoint(clientX: number, clientY: number): IMouseTarget {\n\t\treturn this.handler.getTargetAtClientPoint(clientX, clientY);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.handler.dispose();\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport { IViewModel } from 'vs/editor/common/viewModel/viewModel';\nimport { IScrollEvent } from 'vs/editor/common/editorCommon';\nimport { IEditorMouseEvent, IMouseTarget, MouseTargetType } from 'vs/editor/browser/editorBrowser';\nimport { MouseTarget } from 'vs/editor/browser/controller/mouseTarget';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\nimport Event, { Emitter } from 'vs/base/common/event';\n\nexport class ViewOutgoingEvents extends Disposable {\n\n\tprivate readonly _onDidScroll: Emitter = this._register(new Emitter());\n\tpublic readonly onDidScroll: Event = this._onDidScroll.event;\n\n\tprivate readonly _onDidGainFocus: Emitter = this._register(new Emitter());\n\tpublic readonly onDidGainFocus: Event = this._onDidGainFocus.event;\n\n\tprivate readonly _onDidLoseFocus: Emitter = this._register(new Emitter());\n\tpublic readonly onDidLoseFocus: Event = this._onDidLoseFocus.event;\n\n\tprivate readonly _onKeyDown: Emitter = this._register(new Emitter());\n\tpublic readonly onKeyDown: Event = this._onKeyDown.event;\n\n\tprivate readonly _onKeyUp: Emitter = this._register(new Emitter());\n\tpublic readonly onKeyUp: Event = this._onKeyUp.event;\n\n\tprivate readonly _onContextMenu: Emitter = this._register(new Emitter());\n\tpublic readonly onContextMenu: Event = this._onContextMenu.event;\n\n\tprivate readonly _onMouseMove: Emitter = this._register(new Emitter());\n\tpublic readonly onMouseMove: Event = this._onMouseMove.event;\n\n\tprivate readonly _onMouseLeave: Emitter = this._register(new Emitter());\n\tpublic readonly onMouseLeave: Event = this._onMouseLeave.event;\n\n\tprivate readonly _onMouseUp: Emitter = this._register(new Emitter());\n\tpublic readonly onMouseUp: Event = this._onMouseUp.event;\n\n\tprivate readonly _onMouseDown: Emitter = this._register(new Emitter());\n\tpublic readonly onMouseDown: Event = this._onMouseDown.event;\n\n\tprivate readonly _onMouseDrag: Emitter = this._register(new Emitter());\n\tpublic readonly onMouseDrag: Event = this._onMouseDrag.event;\n\n\tprivate readonly _onMouseDrop: Emitter = this._register(new Emitter());\n\tpublic readonly onMouseDrop: Event = this._onMouseDrop.event;\n\n\tprivate _viewModel: IViewModel;\n\n\tconstructor(viewModel: IViewModel) {\n\t\tsuper();\n\t\tthis._viewModel = viewModel;\n\t}\n\n\tpublic emitScrollChanged(e: viewEvents.ViewScrollChangedEvent): void {\n\t\tthis._onDidScroll.fire(e);\n\t}\n\n\tpublic emitViewFocusGained(): void {\n\t\tthis._onDidGainFocus.fire();\n\t}\n\n\tpublic emitViewFocusLost(): void {\n\t\tthis._onDidLoseFocus.fire();\n\t}\n\n\tpublic emitKeyDown(e: IKeyboardEvent): void {\n\t\tthis._onKeyDown.fire(e);\n\t}\n\n\tpublic emitKeyUp(e: IKeyboardEvent): void {\n\t\tthis._onKeyUp.fire(e);\n\t}\n\n\tpublic emitContextMenu(e: IEditorMouseEvent): void {\n\t\tthis._onContextMenu.fire(this._convertViewToModelMouseEvent(e));\n\t}\n\n\tpublic emitMouseMove(e: IEditorMouseEvent): void {\n\t\tthis._onMouseMove.fire(this._convertViewToModelMouseEvent(e));\n\t}\n\n\tpublic emitMouseLeave(e: IEditorMouseEvent): void {\n\t\tthis._onMouseLeave.fire(this._convertViewToModelMouseEvent(e));\n\t}\n\n\tpublic emitMouseUp(e: IEditorMouseEvent): void {\n\t\tthis._onMouseUp.fire(this._convertViewToModelMouseEvent(e));\n\t}\n\n\tpublic emitMouseDown(e: IEditorMouseEvent): void {\n\t\tthis._onMouseDown.fire(this._convertViewToModelMouseEvent(e));\n\t}\n\n\tpublic emitMouseDrag(e: IEditorMouseEvent): void {\n\t\tthis._onMouseDrag.fire(this._convertViewToModelMouseEvent(e));\n\t}\n\n\tpublic emitMouseDrop(e: IEditorMouseEvent): void {\n\t\tthis._onMouseDrop.fire(this._convertViewToModelMouseEvent(e));\n\t}\n\n\tprivate _convertViewToModelMouseEvent(e: IEditorMouseEvent): IEditorMouseEvent {\n\t\tif (e.target) {\n\t\t\treturn {\n\t\t\t\tevent: e.event,\n\t\t\t\ttarget: this._convertViewToModelMouseTarget(e.target)\n\t\t\t};\n\t\t}\n\t\treturn e;\n\t}\n\n\tprivate _convertViewToModelMouseTarget(target: IMouseTarget): IMouseTarget {\n\t\treturn new ExternalMouseTarget(\n\t\t\ttarget.element,\n\t\t\ttarget.type,\n\t\t\ttarget.mouseColumn,\n\t\t\ttarget.position ? this._convertViewToModelPosition(target.position) : null,\n\t\t\ttarget.range ? this._convertViewToModelRange(target.range) : null,\n\t\t\ttarget.detail\n\t\t);\n\t}\n\n\tprivate _convertViewToModelPosition(viewPosition: Position): Position {\n\t\treturn this._viewModel.coordinatesConverter.convertViewPositionToModelPosition(viewPosition);\n\t}\n\n\tprivate _convertViewToModelRange(viewRange: Range): Range {\n\t\treturn this._viewModel.coordinatesConverter.convertViewRangeToModelRange(viewRange);\n\t}\n}\n\nclass ExternalMouseTarget implements IMouseTarget {\n\n\tpublic readonly element: Element;\n\tpublic readonly type: MouseTargetType;\n\tpublic readonly mouseColumn: number;\n\tpublic readonly position: Position;\n\tpublic readonly range: Range;\n\tpublic readonly detail: any;\n\n\tconstructor(element: Element, type: MouseTargetType, mouseColumn: number, position: Position, range: Range, detail: any) {\n\t\tthis.element = element;\n\t\tthis.type = type;\n\t\tthis.mouseColumn = mouseColumn;\n\t\tthis.position = position;\n\t\tthis.range = range;\n\t\tthis.detail = detail;\n\t}\n\n\tpublic toString(): string {\n\t\treturn MouseTarget.toString(this);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport 'vs/css!./viewLines';\nimport { RunOnceScheduler } from 'vs/base/common/async';\nimport { FastDomNode } from 'vs/base/browser/fastDomNode';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Position } from 'vs/editor/common/core/position';\nimport { VisibleLinesCollection, IVisibleLinesHost } from 'vs/editor/browser/view/viewLayer';\nimport { ViewLineOptions, DomReadingContext, ViewLine } from 'vs/editor/browser/viewParts/lines/viewLine';\nimport { Configuration } from 'vs/editor/browser/config/configuration';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData';\nimport { IViewLines, HorizontalRange, LineVisibleRanges } from 'vs/editor/common/view/renderingContext';\nimport { Viewport } from 'vs/editor/common/viewModel/viewModel';\nimport { ViewPart, PartFingerprint, PartFingerprints } from 'vs/editor/browser/view/viewPart';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\n\nclass LastRenderedData {\n\n\tprivate _currentVisibleRange: Range;\n\n\tconstructor() {\n\t\tthis._currentVisibleRange = new Range(1, 1, 1, 1);\n\t}\n\n\tpublic getCurrentVisibleRange(): Range {\n\t\treturn this._currentVisibleRange;\n\t}\n\n\tpublic setCurrentVisibleRange(currentVisibleRange: Range): void {\n\t\tthis._currentVisibleRange = currentVisibleRange;\n\t}\n}\n\nexport class ViewLines extends ViewPart implements IVisibleLinesHost, IViewLines {\n\t/**\n\t * Adds this ammount of pixels to the right of lines (no-one wants to type near the edge of the viewport)\n\t */\n\tprivate static HORIZONTAL_EXTRA_PX = 30;\n\n\tprivate readonly _linesContent: FastDomNode;\n\tprivate readonly _textRangeRestingSpot: HTMLElement;\n\tprivate readonly _visibleLines: VisibleLinesCollection;\n\tprivate readonly domNode: FastDomNode;\n\n\t// --- config\n\tprivate _lineHeight: number;\n\tprivate _typicalHalfwidthCharacterWidth: number;\n\tprivate _isViewportWrapping: boolean;\n\tprivate _revealHorizontalRightPadding: number;\n\tprivate _canUseLayerHinting: boolean;\n\tprivate _viewLineOptions: ViewLineOptions;\n\n\t// --- width\n\tprivate _maxLineWidth: number;\n\tprivate _asyncUpdateLineWidths: RunOnceScheduler;\n\n\tprivate _lastCursorRevealRangeHorizontallyEvent: viewEvents.ViewRevealRangeRequestEvent;\n\tprivate _lastRenderedData: LastRenderedData;\n\n\tconstructor(context: ViewContext, linesContent: FastDomNode) {\n\t\tsuper(context);\n\t\tthis._linesContent = linesContent;\n\t\tthis._textRangeRestingSpot = document.createElement('div');\n\t\tthis._visibleLines = new VisibleLinesCollection(this);\n\t\tthis.domNode = this._visibleLines.domNode;\n\n\t\tconst conf = this._context.configuration;\n\n\t\tthis._lineHeight = conf.editor.lineHeight;\n\t\tthis._typicalHalfwidthCharacterWidth = conf.editor.fontInfo.typicalHalfwidthCharacterWidth;\n\t\tthis._isViewportWrapping = conf.editor.wrappingInfo.isViewportWrapping;\n\t\tthis._revealHorizontalRightPadding = conf.editor.viewInfo.revealHorizontalRightPadding;\n\t\tthis._canUseLayerHinting = conf.editor.canUseLayerHinting;\n\t\tthis._viewLineOptions = new ViewLineOptions(conf, this._context.theme.type);\n\n\t\tPartFingerprints.write(this.domNode, PartFingerprint.ViewLines);\n\t\tthis.domNode.setClassName('view-lines');\n\t\tConfiguration.applyFontInfo(this.domNode, conf.editor.fontInfo);\n\n\t\t// --- width & height\n\t\tthis._maxLineWidth = 0;\n\t\tthis._asyncUpdateLineWidths = new RunOnceScheduler(() => {\n\t\t\tthis._updateLineWidths();\n\t\t}, 200);\n\n\t\tthis._lastRenderedData = new LastRenderedData();\n\n\t\tthis._lastCursorRevealRangeHorizontallyEvent = null;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._asyncUpdateLineWidths.dispose();\n\t\tsuper.dispose();\n\t}\n\n\tpublic getDomNode(): FastDomNode {\n\t\treturn this.domNode;\n\t}\n\n\t// ---- begin IVisibleLinesHost\n\n\tpublic createVisibleLine(): ViewLine {\n\t\treturn new ViewLine(this._viewLineOptions);\n\t}\n\n\t// ---- end IVisibleLinesHost\n\n\t// ---- begin view event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tthis._visibleLines.onConfigurationChanged(e);\n\t\tif (e.wrappingInfo) {\n\t\t\tthis._maxLineWidth = 0;\n\t\t}\n\n\t\tconst conf = this._context.configuration;\n\n\t\tif (e.lineHeight) {\n\t\t\tthis._lineHeight = conf.editor.lineHeight;\n\t\t}\n\t\tif (e.fontInfo) {\n\t\t\tthis._typicalHalfwidthCharacterWidth = conf.editor.fontInfo.typicalHalfwidthCharacterWidth;\n\t\t}\n\t\tif (e.wrappingInfo) {\n\t\t\tthis._isViewportWrapping = conf.editor.wrappingInfo.isViewportWrapping;\n\t\t}\n\t\tif (e.viewInfo) {\n\t\t\tthis._revealHorizontalRightPadding = conf.editor.viewInfo.revealHorizontalRightPadding;\n\t\t}\n\t\tif (e.canUseLayerHinting) {\n\t\t\tthis._canUseLayerHinting = conf.editor.canUseLayerHinting;\n\t\t}\n\t\tif (e.fontInfo) {\n\t\t\tConfiguration.applyFontInfo(this.domNode, conf.editor.fontInfo);\n\t\t}\n\n\t\tthis._onOptionsMaybeChanged();\n\n\t\tif (e.layoutInfo) {\n\t\t\tthis._maxLineWidth = 0;\n\t\t}\n\n\t\treturn true;\n\t}\n\tprivate _onOptionsMaybeChanged(): boolean {\n\t\tconst conf = this._context.configuration;\n\n\t\tlet newViewLineOptions = new ViewLineOptions(conf, this._context.theme.type);\n\t\tif (!this._viewLineOptions.equals(newViewLineOptions)) {\n\t\t\tthis._viewLineOptions = newViewLineOptions;\n\n\t\t\tlet startLineNumber = this._visibleLines.getStartLineNumber();\n\t\t\tlet endLineNumber = this._visibleLines.getEndLineNumber();\n\t\t\tfor (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n\t\t\t\tlet line = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\t\tline.onOptionsChanged(this._viewLineOptions);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\tpublic onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean {\n\t\tlet rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tlet rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tlet r = false;\n\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\tr = this._visibleLines.getVisibleLine(lineNumber).onSelectionChanged() || r;\n\t\t}\n\t\treturn r;\n\t}\n\tpublic onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean {\n\t\tif (true/*e.inlineDecorationsChanged*/) {\n\t\t\tlet rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\t\tlet rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\t\tthis._visibleLines.getVisibleLine(lineNumber).onDecorationsChanged();\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\tlet shouldRender = this._visibleLines.onFlushed(e);\n\t\tthis._maxLineWidth = 0;\n\t\treturn shouldRender;\n\t}\n\tpublic onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn this._visibleLines.onLinesChanged(e);\n\t}\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn this._visibleLines.onLinesDeleted(e);\n\t}\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn this._visibleLines.onLinesInserted(e);\n\t}\n\tpublic onRevealRangeRequest(e: viewEvents.ViewRevealRangeRequestEvent): boolean {\n\t\tlet newScrollTop = this._computeScrollTopToRevealRange(this._context.viewLayout.getCurrentViewport(), e.range, e.verticalType);\n\n\t\tif (e.revealHorizontal) {\n\t\t\tthis._lastCursorRevealRangeHorizontallyEvent = e;\n\t\t}\n\n\t\tthis._context.viewLayout.setScrollPosition({ // TODO@Alex: scrolling vertically can be moved to the view model\n\t\t\tscrollTop: newScrollTop\n\t\t});\n\n\t\treturn true;\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\tthis.domNode.setWidth(e.scrollWidth);\n\t\treturn this._visibleLines.onScrollChanged(e) || true;\n\t}\n\n\tpublic onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean {\n\t\treturn this._visibleLines.onTokensChanged(e);\n\t}\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn this._visibleLines.onZonesChanged(e);\n\t}\n\tpublic onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean {\n\t\treturn this._onOptionsMaybeChanged();\n\t}\n\n\t// ---- end view event handlers\n\n\t// ----------- HELPERS FOR OTHERS\n\n\tpublic getPositionFromDOMInfo(spanNode: HTMLElement, offset: number): Position {\n\t\tlet viewLineDomNode = this._getViewLineDomNode(spanNode);\n\t\tif (viewLineDomNode === null) {\n\t\t\t// Couldn't find view line node\n\t\t\treturn null;\n\t\t}\n\t\tlet lineNumber = this._getLineNumberFor(viewLineDomNode);\n\n\t\tif (lineNumber === -1) {\n\t\t\t// Couldn't find view line node\n\t\t\treturn null;\n\t\t}\n\n\t\tif (lineNumber < 1 || lineNumber > this._context.model.getLineCount()) {\n\t\t\t// lineNumber is outside range\n\t\t\treturn null;\n\t\t}\n\n\t\tif (this._context.model.getLineMaxColumn(lineNumber) === 1) {\n\t\t\t// Line is empty\n\t\t\treturn new Position(lineNumber, 1);\n\t\t}\n\n\t\tlet rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tlet rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tif (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\n\t\t\t// Couldn't find line\n\t\t\treturn null;\n\t\t}\n\n\t\tlet column = this._visibleLines.getVisibleLine(lineNumber).getColumnOfNodeOffset(lineNumber, spanNode, offset);\n\t\tlet minColumn = this._context.model.getLineMinColumn(lineNumber);\n\t\tif (column < minColumn) {\n\t\t\tcolumn = minColumn;\n\t\t}\n\t\treturn new Position(lineNumber, column);\n\t}\n\n\tprivate _getViewLineDomNode(node: HTMLElement): HTMLElement {\n\t\twhile (node && node.nodeType === 1) {\n\t\t\tif (node.className === ViewLine.CLASS_NAME) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tnode = node.parentElement;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * @returns the line number of this view line dom node.\n\t */\n\tprivate _getLineNumberFor(domNode: HTMLElement): number {\n\t\tlet startLineNumber = this._visibleLines.getStartLineNumber();\n\t\tlet endLineNumber = this._visibleLines.getEndLineNumber();\n\t\tfor (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n\t\t\tlet line = this._visibleLines.getVisibleLine(lineNumber);\n\t\t\tif (domNode === line.getDomNode()) {\n\t\t\t\treturn lineNumber;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\n\tpublic getLineWidth(lineNumber: number): number {\n\t\tlet rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tlet rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tif (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\n\t\t\t// Couldn't find line\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn this._visibleLines.getVisibleLine(lineNumber).getWidth();\n\t}\n\n\tpublic linesVisibleRangesForRange(range: Range, includeNewLines: boolean): LineVisibleRanges[] {\n\t\tif (this.shouldRender()) {\n\t\t\t// Cannot read from the DOM because it is dirty\n\t\t\t// i.e. the model & the dom are out of sync, so I'd be reading something stale\n\t\t\treturn null;\n\t\t}\n\n\t\tlet originalEndLineNumber = range.endLineNumber;\n\t\trange = Range.intersectRanges(range, this._lastRenderedData.getCurrentVisibleRange());\n\t\tif (!range) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet visibleRanges: LineVisibleRanges[] = [];\n\t\tlet domReadingContext = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);\n\n\t\tlet nextLineModelLineNumber: number;\n\t\tif (includeNewLines) {\n\t\t\tnextLineModelLineNumber = this._context.model.coordinatesConverter.convertViewPositionToModelPosition(new Position(range.startLineNumber, 1)).lineNumber;\n\t\t}\n\n\t\tlet rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tlet rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tfor (let lineNumber = range.startLineNumber; lineNumber <= range.endLineNumber; lineNumber++) {\n\n\t\t\tif (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet startColumn = lineNumber === range.startLineNumber ? range.startColumn : 1;\n\t\t\tlet endColumn = lineNumber === range.endLineNumber ? range.endColumn : this._context.model.getLineMaxColumn(lineNumber);\n\t\t\tlet visibleRangesForLine = this._visibleLines.getVisibleLine(lineNumber).getVisibleRangesForRange(startColumn, endColumn, domReadingContext);\n\n\t\t\tif (!visibleRangesForLine || visibleRangesForLine.length === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (includeNewLines && lineNumber < originalEndLineNumber) {\n\t\t\t\tlet currentLineModelLineNumber = nextLineModelLineNumber;\n\t\t\t\tnextLineModelLineNumber = this._context.model.coordinatesConverter.convertViewPositionToModelPosition(new Position(lineNumber + 1, 1)).lineNumber;\n\n\t\t\t\tif (currentLineModelLineNumber !== nextLineModelLineNumber) {\n\t\t\t\t\tvisibleRangesForLine[visibleRangesForLine.length - 1].width += this._typicalHalfwidthCharacterWidth;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvisibleRanges.push(new LineVisibleRanges(lineNumber, visibleRangesForLine));\n\t\t}\n\n\t\tif (visibleRanges.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn visibleRanges;\n\t}\n\n\tpublic visibleRangesForRange2(range: Range): HorizontalRange[] {\n\n\t\tif (this.shouldRender()) {\n\t\t\t// Cannot read from the DOM because it is dirty\n\t\t\t// i.e. the model & the dom are out of sync, so I'd be reading something stale\n\t\t\treturn null;\n\t\t}\n\n\t\trange = Range.intersectRanges(range, this._lastRenderedData.getCurrentVisibleRange());\n\t\tif (!range) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet result: HorizontalRange[] = [];\n\t\tlet domReadingContext = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);\n\n\t\tlet rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tlet rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\t\tfor (let lineNumber = range.startLineNumber; lineNumber <= range.endLineNumber; lineNumber++) {\n\n\t\t\tif (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet startColumn = lineNumber === range.startLineNumber ? range.startColumn : 1;\n\t\t\tlet endColumn = lineNumber === range.endLineNumber ? range.endColumn : this._context.model.getLineMaxColumn(lineNumber);\n\t\t\tlet visibleRangesForLine = this._visibleLines.getVisibleLine(lineNumber).getVisibleRangesForRange(startColumn, endColumn, domReadingContext);\n\n\t\t\tif (!visibleRangesForLine || visibleRangesForLine.length === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tresult = result.concat(visibleRangesForLine);\n\t\t}\n\n\t\tif (result.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// --- implementation\n\n\tprivate _updateLineWidths(): void {\n\t\tlet rendStartLineNumber = this._visibleLines.getStartLineNumber();\n\t\tlet rendEndLineNumber = this._visibleLines.getEndLineNumber();\n\n\t\tlet localMaxLineWidth = 1;\n\t\tfor (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n\t\t\tlet widthInPx = this._visibleLines.getVisibleLine(lineNumber).getWidth();\n\t\t\tlocalMaxLineWidth = Math.max(localMaxLineWidth, widthInPx);\n\t\t}\n\n\t\tif (rendStartLineNumber === 1 && rendEndLineNumber === this._context.model.getLineCount()) {\n\t\t\t// we know the max line width for all the lines\n\t\t\tthis._maxLineWidth = 0;\n\t\t}\n\n\t\tthis._ensureMaxLineWidth(localMaxLineWidth);\n\t}\n\n\tpublic prepareRender(): void {\n\t\tthrow new Error('Not supported');\n\t}\n\n\tpublic render(): void {\n\t\tthrow new Error('Not supported');\n\t}\n\n\tpublic renderText(viewportData: ViewportData): void {\n\t\t// (1) render lines - ensures lines are in the DOM\n\t\tthis._visibleLines.renderLines(viewportData);\n\t\tthis._lastRenderedData.setCurrentVisibleRange(viewportData.visibleRange);\n\t\tthis.domNode.setWidth(this._context.viewLayout.getScrollWidth());\n\t\tthis.domNode.setHeight(Math.min(this._context.viewLayout.getScrollHeight(), 1000000));\n\n\t\t// (2) compute horizontal scroll position:\n\t\t// - this must happen after the lines are in the DOM since it might need a line that rendered just now\n\t\t// - it might change `scrollWidth` and `scrollLeft`\n\t\tif (this._lastCursorRevealRangeHorizontallyEvent) {\n\t\t\tlet revealHorizontalRange = this._lastCursorRevealRangeHorizontallyEvent.range;\n\t\t\tthis._lastCursorRevealRangeHorizontallyEvent = null;\n\n\t\t\t// allow `visibleRangesForRange2` to work\n\t\t\tthis.onDidRender();\n\n\t\t\t// compute new scroll position\n\t\t\tlet newScrollLeft = this._computeScrollLeftToRevealRange(revealHorizontalRange);\n\n\t\t\tlet isViewportWrapping = this._isViewportWrapping;\n\t\t\tif (!isViewportWrapping) {\n\t\t\t\t// ensure `scrollWidth` is large enough\n\t\t\t\tthis._ensureMaxLineWidth(newScrollLeft.maxHorizontalOffset);\n\t\t\t}\n\n\t\t\t// set `scrollLeft`\n\t\t\tthis._context.viewLayout.setScrollPosition({\n\t\t\t\tscrollLeft: newScrollLeft.scrollLeft\n\t\t\t});\n\t\t}\n\n\t\t// (3) handle scrolling\n\t\tthis._linesContent.setLayerHinting(this._canUseLayerHinting);\n\t\tconst adjustedScrollTop = this._context.viewLayout.getScrollTop() - viewportData.bigNumbersDelta;\n\t\tthis._linesContent.setTop(-adjustedScrollTop);\n\t\tthis._linesContent.setLeft(-this._context.viewLayout.getScrollLeft());\n\n\t\t// Update max line width (not so important, it is just so the horizontal scrollbar doesn't get too small)\n\t\tthis._asyncUpdateLineWidths.schedule();\n\t}\n\n\t// --- width\n\n\tprivate _ensureMaxLineWidth(lineWidth: number): void {\n\t\tlet iLineWidth = Math.ceil(lineWidth);\n\t\tif (this._maxLineWidth < iLineWidth) {\n\t\t\tthis._maxLineWidth = iLineWidth;\n\t\t\tthis._context.viewLayout.onMaxLineWidthChanged(this._maxLineWidth);\n\t\t}\n\t}\n\n\tprivate _computeScrollTopToRevealRange(viewport: Viewport, range: Range, verticalType: viewEvents.VerticalRevealType): number {\n\t\tlet viewportStartY = viewport.top;\n\t\tlet viewportHeight = viewport.height;\n\t\tlet viewportEndY = viewportStartY + viewportHeight;\n\t\tlet boxStartY: number;\n\t\tlet boxEndY: number;\n\n\t\t// Have a box that includes one extra line height (for the horizontal scrollbar)\n\t\tboxStartY = this._context.viewLayout.getVerticalOffsetForLineNumber(range.startLineNumber);\n\t\tboxEndY = this._context.viewLayout.getVerticalOffsetForLineNumber(range.endLineNumber) + this._lineHeight;\n\t\tif (verticalType === viewEvents.VerticalRevealType.Simple || verticalType === viewEvents.VerticalRevealType.Bottom) {\n\t\t\t// Reveal one line more when the last line would be covered by the scrollbar - arrow down case or revealing a line explicitly at bottom\n\t\t\tboxEndY += this._lineHeight;\n\t\t}\n\n\t\tlet newScrollTop: number;\n\n\t\tif (verticalType === viewEvents.VerticalRevealType.Center || verticalType === viewEvents.VerticalRevealType.CenterIfOutsideViewport) {\n\t\t\tif (verticalType === viewEvents.VerticalRevealType.CenterIfOutsideViewport && viewportStartY <= boxStartY && boxEndY <= viewportEndY) {\n\t\t\t\t// Box is already in the viewport... do nothing\n\t\t\t\tnewScrollTop = viewportStartY;\n\t\t\t} else {\n\t\t\t\t// Box is outside the viewport... center it\n\t\t\t\tlet boxMiddleY = (boxStartY + boxEndY) / 2;\n\t\t\t\tnewScrollTop = Math.max(0, boxMiddleY - viewportHeight / 2);\n\t\t\t}\n\t\t} else {\n\t\t\tnewScrollTop = this._computeMinimumScrolling(viewportStartY, viewportEndY, boxStartY, boxEndY, verticalType === viewEvents.VerticalRevealType.Top, verticalType === viewEvents.VerticalRevealType.Bottom);\n\t\t}\n\n\t\treturn newScrollTop;\n\t}\n\n\tprivate _computeScrollLeftToRevealRange(range: Range): { scrollLeft: number; maxHorizontalOffset: number; } {\n\n\t\tlet maxHorizontalOffset = 0;\n\n\t\tif (range.startLineNumber !== range.endLineNumber) {\n\t\t\t// Two or more lines? => scroll to base (That's how you see most of the two lines)\n\t\t\treturn {\n\t\t\t\tscrollLeft: 0,\n\t\t\t\tmaxHorizontalOffset: maxHorizontalOffset\n\t\t\t};\n\t\t}\n\n\t\tlet viewport = this._context.viewLayout.getCurrentViewport();\n\t\tlet viewportStartX = viewport.left;\n\t\tlet viewportEndX = viewportStartX + viewport.width;\n\n\t\tlet visibleRanges = this.visibleRangesForRange2(range);\n\t\tlet boxStartX = Number.MAX_VALUE;\n\t\tlet boxEndX = 0;\n\n\t\tif (!visibleRanges) {\n\t\t\t// Unknown\n\t\t\treturn {\n\t\t\t\tscrollLeft: viewportStartX,\n\t\t\t\tmaxHorizontalOffset: maxHorizontalOffset\n\t\t\t};\n\t\t}\n\n\t\tfor (let i = 0; i < visibleRanges.length; i++) {\n\t\t\tlet visibleRange = visibleRanges[i];\n\t\t\tif (visibleRange.left < boxStartX) {\n\t\t\t\tboxStartX = visibleRange.left;\n\t\t\t}\n\t\t\tif (visibleRange.left + visibleRange.width > boxEndX) {\n\t\t\t\tboxEndX = visibleRange.left + visibleRange.width;\n\t\t\t}\n\t\t}\n\n\t\tmaxHorizontalOffset = boxEndX;\n\n\t\tboxStartX = Math.max(0, boxStartX - ViewLines.HORIZONTAL_EXTRA_PX);\n\t\tboxEndX += this._revealHorizontalRightPadding;\n\n\t\tlet newScrollLeft = this._computeMinimumScrolling(viewportStartX, viewportEndX, boxStartX, boxEndX);\n\t\treturn {\n\t\t\tscrollLeft: newScrollLeft,\n\t\t\tmaxHorizontalOffset: maxHorizontalOffset\n\t\t};\n\t}\n\n\tprivate _computeMinimumScrolling(viewportStart: number, viewportEnd: number, boxStart: number, boxEnd: number, revealAtStart?: boolean, revealAtEnd?: boolean): number {\n\t\tviewportStart = viewportStart | 0;\n\t\tviewportEnd = viewportEnd | 0;\n\t\tboxStart = boxStart | 0;\n\t\tboxEnd = boxEnd | 0;\n\t\trevealAtStart = !!revealAtStart;\n\t\trevealAtEnd = !!revealAtEnd;\n\n\t\tlet viewportLength = viewportEnd - viewportStart;\n\t\tlet boxLength = boxEnd - boxStart;\n\n\t\tif (boxLength < viewportLength) {\n\t\t\t// The box would fit in the viewport\n\n\t\t\tif (revealAtStart) {\n\t\t\t\treturn boxStart;\n\t\t\t}\n\n\t\t\tif (revealAtEnd) {\n\t\t\t\treturn Math.max(0, boxEnd - viewportLength);\n\t\t\t}\n\n\t\t\tif (boxStart < viewportStart) {\n\t\t\t\t// The box is above the viewport\n\t\t\t\treturn boxStart;\n\t\t\t} else if (boxEnd > viewportEnd) {\n\t\t\t\t// The box is below the viewport\n\t\t\t\treturn Math.max(0, boxEnd - viewportLength);\n\t\t\t}\n\t\t} else {\n\t\t\t// The box would not fit in the viewport\n\t\t\t// Reveal the beginning of the box\n\t\t\treturn boxStart;\n\t\t}\n\n\t\treturn viewportStart;\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/css!./minimap';\nimport { ViewPart, PartFingerprint, PartFingerprints } from 'vs/editor/browser/view/viewPart';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/view/renderingContext';\nimport { getOrCreateMinimapCharRenderer } from 'vs/editor/common/view/runtimeMinimapCharRenderer';\nimport * as dom from 'vs/base/browser/dom';\nimport { MinimapCharRenderer, MinimapTokensColorTracker, Constants } from 'vs/editor/common/view/minimapCharRenderer';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { CharCode } from 'vs/base/common/charCode';\nimport { ViewLineData } from 'vs/editor/common/viewModel/viewModel';\nimport { ColorId } from 'vs/editor/common/modes';\nimport { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { RenderedLinesCollection, ILine } from 'vs/editor/browser/view/viewLayer';\nimport { Range } from 'vs/editor/common/core/range';\nimport { RGBA } from 'vs/base/common/color';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\nimport { GlobalMouseMoveMonitor, IStandardMouseMoveEventData, standardMouseMoveMerger } from 'vs/base/browser/globalMouseMoveMonitor';\nimport * as platform from 'vs/base/common/platform';\nimport { registerThemingParticipant } from 'vs/platform/theme/common/themeService';\nimport { scrollbarSliderBackground, scrollbarSliderHoverBackground, scrollbarSliderActiveBackground, scrollbarShadow } from 'vs/platform/theme/common/colorRegistry';\n\nconst enum RenderMinimap {\n\tNone = 0,\n\tSmall = 1,\n\tLarge = 2,\n\tSmallBlocks = 3,\n\tLargeBlocks = 4,\n}\n\nfunction getMinimapLineHeight(renderMinimap: RenderMinimap): number {\n\tif (renderMinimap === RenderMinimap.Large) {\n\t\treturn Constants.x2_CHAR_HEIGHT;\n\t}\n\tif (renderMinimap === RenderMinimap.LargeBlocks) {\n\t\treturn Constants.x2_CHAR_HEIGHT + 2;\n\t}\n\tif (renderMinimap === RenderMinimap.Small) {\n\t\treturn Constants.x1_CHAR_HEIGHT;\n\t}\n\t// RenderMinimap.SmallBlocks\n\treturn Constants.x1_CHAR_HEIGHT + 1;\n}\n\nfunction getMinimapCharWidth(renderMinimap: RenderMinimap): number {\n\tif (renderMinimap === RenderMinimap.Large) {\n\t\treturn Constants.x2_CHAR_WIDTH;\n\t}\n\tif (renderMinimap === RenderMinimap.LargeBlocks) {\n\t\treturn Constants.x2_CHAR_WIDTH;\n\t}\n\tif (renderMinimap === RenderMinimap.Small) {\n\t\treturn Constants.x1_CHAR_WIDTH;\n\t}\n\t// RenderMinimap.SmallBlocks\n\treturn Constants.x1_CHAR_WIDTH;\n}\n\n/**\n * The orthogonal distance to the slider at which dragging \"resets\". This implements \"snapping\"\n */\nconst MOUSE_DRAG_RESET_DISTANCE = 140;\n\nclass MinimapOptions {\n\n\tpublic readonly renderMinimap: RenderMinimap;\n\n\tpublic readonly scrollBeyondLastLine: boolean;\n\n\tpublic readonly showSlider: 'always' | 'mouseover';\n\n\tpublic readonly pixelRatio: number;\n\n\tpublic readonly typicalHalfwidthCharacterWidth: number;\n\n\tpublic readonly lineHeight: number;\n\n\t/**\n\t * container dom node width (in CSS px)\n\t */\n\tpublic readonly minimapWidth: number;\n\t/**\n\t * container dom node height (in CSS px)\n\t */\n\tpublic readonly minimapHeight: number;\n\n\t/**\n\t * canvas backing store width (in device px)\n\t */\n\tpublic readonly canvasInnerWidth: number;\n\t/**\n\t * canvas backing store height (in device px)\n\t */\n\tpublic readonly canvasInnerHeight: number;\n\n\t/**\n\t * canvas width (in CSS px)\n\t */\n\tpublic readonly canvasOuterWidth: number;\n\t/**\n\t * canvas height (in CSS px)\n\t */\n\tpublic readonly canvasOuterHeight: number;\n\n\tconstructor(configuration: editorCommon.IConfiguration) {\n\t\tconst pixelRatio = configuration.editor.pixelRatio;\n\t\tconst layoutInfo = configuration.editor.layoutInfo;\n\t\tconst viewInfo = configuration.editor.viewInfo;\n\t\tconst fontInfo = configuration.editor.fontInfo;\n\n\t\tthis.renderMinimap = layoutInfo.renderMinimap | 0;\n\t\tthis.scrollBeyondLastLine = viewInfo.scrollBeyondLastLine;\n\t\tthis.showSlider = viewInfo.minimap.showSlider;\n\t\tthis.pixelRatio = pixelRatio;\n\t\tthis.typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n\t\tthis.lineHeight = configuration.editor.lineHeight;\n\t\tthis.minimapWidth = layoutInfo.minimapWidth;\n\t\tthis.minimapHeight = layoutInfo.height;\n\n\t\tthis.canvasInnerWidth = Math.max(1, Math.floor(pixelRatio * this.minimapWidth));\n\t\tthis.canvasInnerHeight = Math.max(1, Math.floor(pixelRatio * this.minimapHeight));\n\n\t\tthis.canvasOuterWidth = this.canvasInnerWidth / pixelRatio;\n\t\tthis.canvasOuterHeight = this.canvasInnerHeight / pixelRatio;\n\t}\n\n\tpublic equals(other: MinimapOptions): boolean {\n\t\treturn (this.renderMinimap === other.renderMinimap\n\t\t\t&& this.scrollBeyondLastLine === other.scrollBeyondLastLine\n\t\t\t&& this.showSlider === other.showSlider\n\t\t\t&& this.pixelRatio === other.pixelRatio\n\t\t\t&& this.typicalHalfwidthCharacterWidth === other.typicalHalfwidthCharacterWidth\n\t\t\t&& this.lineHeight === other.lineHeight\n\t\t\t&& this.minimapWidth === other.minimapWidth\n\t\t\t&& this.minimapHeight === other.minimapHeight\n\t\t\t&& this.canvasInnerWidth === other.canvasInnerWidth\n\t\t\t&& this.canvasInnerHeight === other.canvasInnerHeight\n\t\t\t&& this.canvasOuterWidth === other.canvasOuterWidth\n\t\t\t&& this.canvasOuterHeight === other.canvasOuterHeight\n\t\t);\n\t}\n}\n\nclass MinimapLayout {\n\n\t/**\n\t * The given editor scrollTop (input).\n\t */\n\tpublic readonly scrollTop: number;\n\n\t/**\n\t* The given editor scrollHeight (input).\n\t*/\n\tpublic readonly scrollHeight: number;\n\n\tprivate readonly _computedSliderRatio: number;\n\n\t/**\n\t * slider dom node top (in CSS px)\n\t */\n\tpublic readonly sliderTop: number;\n\t/**\n\t * slider dom node height (in CSS px)\n\t */\n\tpublic readonly sliderHeight: number;\n\n\t/**\n\t * minimap render start line number.\n\t */\n\tpublic readonly startLineNumber: number;\n\t/**\n\t * minimap render end line number.\n\t */\n\tpublic readonly endLineNumber: number;\n\n\tconstructor(\n\t\tscrollTop: number,\n\t\tscrollHeight: number,\n\t\tcomputedSliderRatio: number,\n\t\tsliderTop: number,\n\t\tsliderHeight: number,\n\t\tstartLineNumber: number,\n\t\tendLineNumber: number\n\t) {\n\t\tthis.scrollTop = scrollTop;\n\t\tthis.scrollHeight = scrollHeight;\n\t\tthis._computedSliderRatio = computedSliderRatio;\n\t\tthis.sliderTop = sliderTop;\n\t\tthis.sliderHeight = sliderHeight;\n\t\tthis.startLineNumber = startLineNumber;\n\t\tthis.endLineNumber = endLineNumber;\n\t}\n\n\t/**\n\t * Compute a desired `scrollPosition` such that the slider moves by `delta`.\n\t */\n\tpublic getDesiredScrollTopFromDelta(delta: number): number {\n\t\tlet desiredSliderPosition = this.sliderTop + delta;\n\t\treturn Math.round(desiredSliderPosition / this._computedSliderRatio);\n\t}\n\n\tpublic static create(\n\t\toptions: MinimapOptions,\n\t\tviewportStartLineNumber: number,\n\t\tviewportEndLineNumber: number,\n\t\tviewportHeight: number,\n\t\tviewportContainsWhitespaceGaps: boolean,\n\t\tlineCount: number,\n\t\tscrollTop: number,\n\t\tscrollHeight: number,\n\t\tpreviousLayout: MinimapLayout\n\t): MinimapLayout {\n\t\tconst pixelRatio = options.pixelRatio;\n\t\tconst minimapLineHeight = getMinimapLineHeight(options.renderMinimap);\n\t\tconst minimapLinesFitting = Math.floor(options.canvasInnerHeight / minimapLineHeight);\n\t\tconst lineHeight = options.lineHeight;\n\n\t\t// The visible line count in a viewport can change due to a number of reasons:\n\t\t// a) with the same viewport width, different scroll positions can result in partial lines being visible:\n\t\t// e.g. for a line height of 20, and a viewport height of 600\n\t\t// * scrollTop = 0 => visible lines are [1, 30]\n\t\t// * scrollTop = 10 => visible lines are [1, 31] (with lines 1 and 31 partially visible)\n\t\t// * scrollTop = 20 => visible lines are [2, 31]\n\t\t// b) whitespace gaps might make their way in the viewport (which results in a decrease in the visible line count)\n\t\t// 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)\n\n\t\t// We must first establish a desirable slider height.\n\t\tlet sliderHeight: number;\n\t\tif (viewportContainsWhitespaceGaps && viewportEndLineNumber !== lineCount) {\n\t\t\t// case b) from above: there are whitespace gaps in the viewport.\n\t\t\t// In this case, the height of the slider directly reflects the visible line count.\n\t\t\tconst viewportLineCount = viewportEndLineNumber - viewportStartLineNumber + 1;\n\t\t\tsliderHeight = Math.floor(viewportLineCount * minimapLineHeight / pixelRatio);\n\t\t} else {\n\t\t\t// The slider has a stable height\n\t\t\tconst expectedViewportLineCount = viewportHeight / lineHeight;\n\t\t\tsliderHeight = Math.floor(expectedViewportLineCount * minimapLineHeight / pixelRatio);\n\t\t}\n\n\t\tlet maxMinimapSliderTop: number;\n\t\tif (options.scrollBeyondLastLine) {\n\t\t\t// The minimap slider, when dragged all the way down, will contain the last line at its top\n\t\t\tmaxMinimapSliderTop = (lineCount - 1) * minimapLineHeight / pixelRatio;\n\t\t} else {\n\t\t\t// The minimap slider, when dragged all the way down, will contain the last line at its bottom\n\t\t\tmaxMinimapSliderTop = Math.max(0, lineCount * minimapLineHeight / pixelRatio - sliderHeight);\n\t\t}\n\t\tmaxMinimapSliderTop = Math.min(options.minimapHeight - sliderHeight, maxMinimapSliderTop);\n\n\t\t// The slider can move from 0 to `maxMinimapSliderTop`\n\t\t// in the same way `scrollTop` can move from 0 to `scrollHeight` - `viewportHeight`.\n\t\tconst computedSliderRatio = (maxMinimapSliderTop) / (scrollHeight - viewportHeight);\n\t\tconst sliderTop = (scrollTop * computedSliderRatio);\n\n\t\tif (minimapLinesFitting >= lineCount) {\n\t\t\t// All lines fit in the minimap\n\t\t\tconst startLineNumber = 1;\n\t\t\tconst endLineNumber = lineCount;\n\n\t\t\treturn new MinimapLayout(scrollTop, scrollHeight, computedSliderRatio, sliderTop, sliderHeight, startLineNumber, endLineNumber);\n\t\t} else {\n\t\t\tlet startLineNumber = Math.max(1, Math.floor(viewportStartLineNumber - sliderTop * pixelRatio / minimapLineHeight));\n\n\t\t\t// Avoid flickering caused by a partial viewport start line\n\t\t\t// by being consistent w.r.t. the previous layout decision\n\t\t\tif (previousLayout && previousLayout.scrollHeight === scrollHeight) {\n\t\t\t\tif (previousLayout.scrollTop > scrollTop) {\n\t\t\t\t\t// Scrolling up => never increase `startLineNumber`\n\t\t\t\t\tstartLineNumber = Math.min(startLineNumber, previousLayout.startLineNumber);\n\t\t\t\t}\n\t\t\t\tif (previousLayout.scrollTop < scrollTop) {\n\t\t\t\t\t// Scrolling down => never decrease `startLineNumber`\n\t\t\t\t\tstartLineNumber = Math.max(startLineNumber, previousLayout.startLineNumber);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst endLineNumber = Math.min(lineCount, startLineNumber + minimapLinesFitting - 1);\n\n\t\t\treturn new MinimapLayout(scrollTop, scrollHeight, computedSliderRatio, sliderTop, sliderHeight, startLineNumber, endLineNumber);\n\t\t}\n\t}\n}\n\nclass MinimapLine implements ILine {\n\n\tpublic static INVALID = new MinimapLine(-1);\n\n\tdy: number;\n\n\tconstructor(dy: number) {\n\t\tthis.dy = dy;\n\t}\n\n\tpublic onContentChanged(): void {\n\t\tthis.dy = -1;\n\t}\n\n\tpublic onTokensChanged(): void {\n\t\tthis.dy = -1;\n\t}\n}\n\nclass RenderData {\n\t/**\n\t * last rendered layout.\n\t */\n\tpublic readonly renderedLayout: MinimapLayout;\n\tprivate readonly _imageData: ImageData;\n\tprivate readonly _renderedLines: RenderedLinesCollection;\n\n\tconstructor(\n\t\trenderedLayout: MinimapLayout,\n\t\timageData: ImageData,\n\t\tlines: MinimapLine[]\n\t) {\n\t\tthis.renderedLayout = renderedLayout;\n\t\tthis._imageData = imageData;\n\t\tthis._renderedLines = new RenderedLinesCollection(\n\t\t\t() => MinimapLine.INVALID\n\t\t);\n\t\tthis._renderedLines._set(renderedLayout.startLineNumber, lines);\n\t}\n\n\t/**\n\t * Check if the current RenderData matches accurately the new desired layout and no painting is needed.\n\t */\n\tpublic linesEquals(layout: MinimapLayout): boolean {\n\t\tif (this.renderedLayout.startLineNumber !== layout.startLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (this.renderedLayout.endLineNumber !== layout.endLineNumber) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst tmp = this._renderedLines._get();\n\t\tconst lines = tmp.lines;\n\t\tfor (let i = 0, len = lines.length; i < len; i++) {\n\t\t\tif (lines[i].dy === -1) {\n\t\t\t\t// This line is invalid\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t_get(): { imageData: ImageData; rendLineNumberStart: number; lines: MinimapLine[]; } {\n\t\tlet tmp = this._renderedLines._get();\n\t\treturn {\n\t\t\timageData: this._imageData,\n\t\t\trendLineNumberStart: tmp.rendLineNumberStart,\n\t\t\tlines: tmp.lines\n\t\t};\n\t}\n\n\tpublic onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn this._renderedLines.onLinesChanged(e.fromLineNumber, e.toLineNumber);\n\t}\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): void {\n\t\tthis._renderedLines.onLinesDeleted(e.fromLineNumber, e.toLineNumber);\n\t}\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): void {\n\t\tthis._renderedLines.onLinesInserted(e.fromLineNumber, e.toLineNumber);\n\t}\n\tpublic onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean {\n\t\treturn this._renderedLines.onTokensChanged(e.ranges);\n\t}\n}\n\n/**\n * Some sort of double buffering.\n *\n * Keeps two buffers around that will be rotated for painting.\n * Always gives a buffer that is filled with the background color.\n */\nclass MinimapBuffers {\n\n\tprivate readonly _backgroundFillData: Uint8ClampedArray;\n\tprivate readonly _buffers: [ImageData, ImageData];\n\tprivate _lastUsedBuffer: number;\n\n\tconstructor(ctx: CanvasRenderingContext2D, WIDTH: number, HEIGHT: number, background: RGBA) {\n\t\tthis._backgroundFillData = MinimapBuffers._createBackgroundFillData(WIDTH, HEIGHT, background);\n\t\tthis._buffers = [\n\t\t\tctx.createImageData(WIDTH, HEIGHT),\n\t\t\tctx.createImageData(WIDTH, HEIGHT)\n\t\t];\n\t\tthis._lastUsedBuffer = 0;\n\t}\n\n\tpublic getBuffer(): ImageData {\n\t\t// rotate buffers\n\t\tthis._lastUsedBuffer = 1 - this._lastUsedBuffer;\n\t\tlet result = this._buffers[this._lastUsedBuffer];\n\n\t\t// fill with background color\n\t\tresult.data.set(this._backgroundFillData);\n\n\t\treturn result;\n\t}\n\n\tprivate static _createBackgroundFillData(WIDTH: number, HEIGHT: number, background: RGBA): Uint8ClampedArray {\n\t\tconst backgroundR = background.r;\n\t\tconst backgroundG = background.g;\n\t\tconst backgroundB = background.b;\n\n\t\tlet result = new Uint8ClampedArray(WIDTH * HEIGHT * 4);\n\t\tlet offset = 0;\n\t\tfor (let i = 0; i < HEIGHT; i++) {\n\t\t\tfor (let j = 0; j < WIDTH; j++) {\n\t\t\t\tresult[offset] = backgroundR;\n\t\t\t\tresult[offset + 1] = backgroundG;\n\t\t\t\tresult[offset + 2] = backgroundB;\n\t\t\t\tresult[offset + 3] = 255;\n\t\t\t\toffset += 4;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n}\n\nexport class Minimap extends ViewPart {\n\n\tprivate readonly _domNode: FastDomNode;\n\tprivate readonly _shadow: FastDomNode;\n\tprivate readonly _canvas: FastDomNode;\n\tprivate readonly _slider: FastDomNode;\n\tprivate readonly _sliderHorizontal: FastDomNode;\n\tprivate readonly _tokensColorTracker: MinimapTokensColorTracker;\n\tprivate readonly _mouseDownListener: IDisposable;\n\tprivate readonly _sliderMouseMoveMonitor: GlobalMouseMoveMonitor;\n\tprivate readonly _sliderMouseDownListener: IDisposable;\n\n\tprivate readonly _minimapCharRenderer: MinimapCharRenderer;\n\n\tprivate _options: MinimapOptions;\n\tprivate _lastRenderData: RenderData;\n\tprivate _buffers: MinimapBuffers;\n\n\tconstructor(context: ViewContext) {\n\t\tsuper(context);\n\n\t\tthis._options = new MinimapOptions(this._context.configuration);\n\t\tthis._lastRenderData = null;\n\t\tthis._buffers = null;\n\n\t\tthis._domNode = createFastDomNode(document.createElement('div'));\n\t\tPartFingerprints.write(this._domNode, PartFingerprint.Minimap);\n\t\tthis._domNode.setClassName(this._getMinimapDomNodeClassName());\n\t\tthis._domNode.setPosition('absolute');\n\t\tthis._domNode.setAttribute('role', 'presentation');\n\t\tthis._domNode.setAttribute('aria-hidden', 'true');\n\t\tthis._domNode.setRight(this._context.configuration.editor.layoutInfo.verticalScrollbarWidth);\n\n\t\tthis._shadow = createFastDomNode(document.createElement('div'));\n\t\tthis._shadow.setClassName('minimap-shadow-hidden');\n\t\tthis._domNode.appendChild(this._shadow);\n\n\t\tthis._canvas = createFastDomNode(document.createElement('canvas'));\n\t\tthis._canvas.setPosition('absolute');\n\t\tthis._canvas.setLeft(0);\n\t\tthis._domNode.appendChild(this._canvas);\n\n\t\tthis._slider = createFastDomNode(document.createElement('div'));\n\t\tthis._slider.setPosition('absolute');\n\t\tthis._slider.setClassName('minimap-slider');\n\t\tthis._slider.setLayerHinting(true);\n\t\tthis._domNode.appendChild(this._slider);\n\n\t\tthis._sliderHorizontal = createFastDomNode(document.createElement('div'));\n\t\tthis._sliderHorizontal.setPosition('absolute');\n\t\tthis._sliderHorizontal.setClassName('minimap-slider-horizontal');\n\t\tthis._slider.appendChild(this._sliderHorizontal);\n\n\t\tthis._tokensColorTracker = MinimapTokensColorTracker.getInstance();\n\n\t\tthis._minimapCharRenderer = getOrCreateMinimapCharRenderer();\n\n\t\tthis._applyLayout();\n\n\t\tthis._mouseDownListener = dom.addStandardDisposableListener(this._canvas.domNode, 'mousedown', (e) => {\n\t\t\te.preventDefault();\n\n\t\t\tconst renderMinimap = this._options.renderMinimap;\n\t\t\tif (renderMinimap === RenderMinimap.None) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!this._lastRenderData) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst minimapLineHeight = getMinimapLineHeight(renderMinimap);\n\t\t\tconst internalOffsetY = this._options.pixelRatio * e.browserEvent.offsetY;\n\t\t\tconst lineIndex = Math.floor(internalOffsetY / minimapLineHeight);\n\n\t\t\tlet lineNumber = lineIndex + this._lastRenderData.renderedLayout.startLineNumber;\n\t\t\tlineNumber = Math.min(lineNumber, this._context.model.getLineCount());\n\n\t\t\tthis._context.privateViewEventBus.emit(new viewEvents.ViewRevealRangeRequestEvent(\n\t\t\t\tnew Range(lineNumber, 1, lineNumber, 1),\n\t\t\t\tviewEvents.VerticalRevealType.Center,\n\t\t\t\tfalse\n\t\t\t));\n\t\t});\n\n\t\tthis._sliderMouseMoveMonitor = new GlobalMouseMoveMonitor();\n\n\t\tthis._sliderMouseDownListener = dom.addStandardDisposableListener(this._slider.domNode, 'mousedown', (e) => {\n\t\t\te.preventDefault();\n\t\t\tif (e.leftButton && this._lastRenderData) {\n\n\t\t\t\tconst initialMousePosition = e.posy;\n\t\t\t\tconst initialMouseOrthogonalPosition = e.posx;\n\t\t\t\tconst initialSliderState = this._lastRenderData.renderedLayout;\n\t\t\t\tthis._slider.toggleClassName('active', true);\n\n\t\t\t\tthis._sliderMouseMoveMonitor.startMonitoring(\n\t\t\t\t\tstandardMouseMoveMerger,\n\t\t\t\t\t(mouseMoveData: IStandardMouseMoveEventData) => {\n\t\t\t\t\t\tconst mouseOrthogonalDelta = Math.abs(mouseMoveData.posx - initialMouseOrthogonalPosition);\n\n\t\t\t\t\t\tif (platform.isWindows && mouseOrthogonalDelta > MOUSE_DRAG_RESET_DISTANCE) {\n\t\t\t\t\t\t\t// The mouse has wondered away from the scrollbar => reset dragging\n\t\t\t\t\t\t\tthis._context.viewLayout.setScrollPosition({\n\t\t\t\t\t\t\t\tscrollTop: initialSliderState.scrollTop\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst mouseDelta = mouseMoveData.posy - initialMousePosition;\n\t\t\t\t\t\tthis._context.viewLayout.setScrollPosition({\n\t\t\t\t\t\t\tscrollTop: initialSliderState.getDesiredScrollTopFromDelta(mouseDelta)\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis._slider.toggleClassName('active', false);\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._mouseDownListener.dispose();\n\t\tthis._sliderMouseMoveMonitor.dispose();\n\t\tthis._sliderMouseDownListener.dispose();\n\t\tsuper.dispose();\n\t}\n\n\tprivate _getMinimapDomNodeClassName(): string {\n\t\tif (this._options.showSlider === 'always') {\n\t\t\treturn 'minimap slider-always';\n\t\t}\n\t\treturn 'minimap slider-mouseover';\n\t}\n\n\tpublic getDomNode(): FastDomNode {\n\t\treturn this._domNode;\n\t}\n\n\tprivate _applyLayout(): void {\n\t\tthis._domNode.setWidth(this._options.minimapWidth);\n\t\tthis._domNode.setHeight(this._options.minimapHeight);\n\t\tthis._shadow.setHeight(this._options.minimapHeight);\n\t\tthis._canvas.setWidth(this._options.canvasOuterWidth);\n\t\tthis._canvas.setHeight(this._options.canvasOuterHeight);\n\t\tthis._canvas.domNode.width = this._options.canvasInnerWidth;\n\t\tthis._canvas.domNode.height = this._options.canvasInnerHeight;\n\t\tthis._slider.setWidth(this._options.minimapWidth);\n\t}\n\n\tprivate _getBuffer(): ImageData {\n\t\tif (!this._buffers) {\n\t\t\tthis._buffers = new MinimapBuffers(\n\t\t\t\tthis._canvas.domNode.getContext('2d'),\n\t\t\t\tthis._options.canvasInnerWidth,\n\t\t\t\tthis._options.canvasInnerHeight,\n\t\t\t\tthis._tokensColorTracker.getColor(ColorId.DefaultBackground)\n\t\t\t);\n\t\t}\n\t\treturn this._buffers.getBuffer();\n\t}\n\n\tprivate _onOptionsMaybeChanged(): boolean {\n\t\tlet opts = new MinimapOptions(this._context.configuration);\n\t\tif (this._options.equals(opts)) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._options = opts;\n\t\tthis._lastRenderData = null;\n\t\tthis._buffers = null;\n\t\tthis._applyLayout();\n\t\tthis._domNode.setClassName(this._getMinimapDomNodeClassName());\n\t\treturn true;\n\t}\n\n\t// ---- begin view event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\treturn this._onOptionsMaybeChanged();\n\t}\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\tthis._lastRenderData = null;\n\t\treturn true;\n\t}\n\tpublic onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\tif (this._lastRenderData) {\n\t\t\treturn this._lastRenderData.onLinesChanged(e);\n\t\t}\n\t\treturn false;\n\t}\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\tif (this._lastRenderData) {\n\t\t\tthis._lastRenderData.onLinesDeleted(e);\n\t\t}\n\t\treturn true;\n\t}\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\tif (this._lastRenderData) {\n\t\t\tthis._lastRenderData.onLinesInserted(e);\n\t\t}\n\t\treturn true;\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean {\n\t\tif (this._lastRenderData) {\n\t\t\treturn this._lastRenderData.onTokensChanged(e);\n\t\t}\n\t\treturn false;\n\t}\n\tpublic onTokensColorsChanged(e: viewEvents.ViewTokensColorsChangedEvent): boolean {\n\t\tthis._lastRenderData = null;\n\t\tthis._buffers = null;\n\t\treturn true;\n\t}\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\tthis._lastRenderData = null;\n\t\treturn true;\n\t}\n\n\t// --- end event handlers\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\t// Nothing to read\n\t}\n\n\tpublic render(renderingCtx: RestrictedRenderingContext): void {\n\t\tconst renderMinimap = this._options.renderMinimap;\n\t\tif (renderMinimap === RenderMinimap.None) {\n\t\t\tthis._shadow.setClassName('minimap-shadow-hidden');\n\t\t\treturn;\n\t\t}\n\t\tif (renderingCtx.scrollLeft + renderingCtx.viewportWidth >= renderingCtx.scrollWidth) {\n\t\t\tthis._shadow.setClassName('minimap-shadow-hidden');\n\t\t} else {\n\t\t\tthis._shadow.setClassName('minimap-shadow-visible');\n\t\t}\n\n\t\tconst layout = MinimapLayout.create(\n\t\t\tthis._options,\n\t\t\trenderingCtx.visibleRange.startLineNumber,\n\t\t\trenderingCtx.visibleRange.endLineNumber,\n\t\t\trenderingCtx.viewportHeight,\n\t\t\t(renderingCtx.viewportData.whitespaceViewportData.length > 0),\n\t\t\tthis._context.model.getLineCount(),\n\t\t\trenderingCtx.scrollTop,\n\t\t\trenderingCtx.scrollHeight,\n\t\t\tthis._lastRenderData ? this._lastRenderData.renderedLayout : null\n\t\t);\n\t\tthis._slider.setTop(layout.sliderTop);\n\t\tthis._slider.setHeight(layout.sliderHeight);\n\n\t\t// Compute horizontal slider coordinates\n\t\tconst scrollLeftChars = renderingCtx.scrollLeft / this._options.typicalHalfwidthCharacterWidth;\n\t\tconst horizontalSliderLeft = Math.min(this._options.minimapWidth, Math.round(scrollLeftChars * getMinimapCharWidth(this._options.renderMinimap) / this._options.pixelRatio));\n\t\tthis._sliderHorizontal.setLeft(horizontalSliderLeft);\n\t\tthis._sliderHorizontal.setWidth(this._options.minimapWidth - horizontalSliderLeft);\n\t\tthis._sliderHorizontal.setTop(0);\n\t\tthis._sliderHorizontal.setHeight(layout.sliderHeight);\n\n\t\tthis._lastRenderData = this.renderLines(layout);\n\t}\n\n\tprivate renderLines(layout: MinimapLayout): RenderData {\n\t\tconst renderMinimap = this._options.renderMinimap;\n\t\tconst startLineNumber = layout.startLineNumber;\n\t\tconst endLineNumber = layout.endLineNumber;\n\t\tconst minimapLineHeight = getMinimapLineHeight(renderMinimap);\n\n\t\t// Check if nothing changed w.r.t. lines from last frame\n\t\tif (this._lastRenderData && this._lastRenderData.linesEquals(layout)) {\n\t\t\tconst _lastData = this._lastRenderData._get();\n\t\t\t// Nice!! Nothing changed from last frame\n\t\t\treturn new RenderData(layout, _lastData.imageData, _lastData.lines);\n\t\t}\n\n\t\t// Oh well!! We need to repaint some lines...\n\n\t\tconst imageData = this._getBuffer();\n\n\t\t// Render untouched lines by using last rendered data.\n\t\tlet needed = Minimap._renderUntouchedLines(\n\t\t\timageData,\n\t\t\tstartLineNumber,\n\t\t\tendLineNumber,\n\t\t\tminimapLineHeight,\n\t\t\tthis._lastRenderData\n\t\t);\n\n\t\t// Fetch rendering info from view model for rest of lines that need rendering.\n\t\tconst lineInfo = this._context.model.getMinimapLinesRenderingData(startLineNumber, endLineNumber, needed);\n\t\tconst tabSize = lineInfo.tabSize;\n\t\tconst background = this._tokensColorTracker.getColor(ColorId.DefaultBackground);\n\t\tconst useLighterFont = this._tokensColorTracker.backgroundIsLight();\n\n\t\t// Render the rest of lines\n\t\tlet dy = 0;\n\t\tlet renderedLines: MinimapLine[] = [];\n\t\tfor (let lineIndex = 0, lineCount = endLineNumber - startLineNumber + 1; lineIndex < lineCount; lineIndex++) {\n\t\t\tif (needed[lineIndex]) {\n\t\t\t\tMinimap._renderLine(\n\t\t\t\t\timageData,\n\t\t\t\t\tbackground,\n\t\t\t\t\tuseLighterFont,\n\t\t\t\t\trenderMinimap,\n\t\t\t\t\tthis._tokensColorTracker,\n\t\t\t\t\tthis._minimapCharRenderer,\n\t\t\t\t\tdy,\n\t\t\t\t\ttabSize,\n\t\t\t\t\tlineInfo.data[lineIndex]\n\t\t\t\t);\n\t\t\t}\n\t\t\trenderedLines[lineIndex] = new MinimapLine(dy);\n\t\t\tdy += minimapLineHeight;\n\t\t}\n\n\t\t// Finally, paint to the canvas\n\t\tconst ctx = this._canvas.domNode.getContext('2d');\n\t\tctx.putImageData(imageData, 0, 0);\n\n\t\t// Save rendered data for reuse on next frame if possible\n\t\treturn new RenderData(\n\t\t\tlayout,\n\t\t\timageData,\n\t\t\trenderedLines\n\t\t);\n\t}\n\n\tprivate static _renderUntouchedLines(\n\t\ttarget: ImageData,\n\t\tstartLineNumber: number,\n\t\tendLineNumber: number,\n\t\tminimapLineHeight: number,\n\t\tlastRenderData: RenderData,\n\t): boolean[] {\n\n\t\tlet needed: boolean[] = [];\n\t\tif (!lastRenderData) {\n\t\t\tfor (let i = 0, len = endLineNumber - startLineNumber + 1; i < len; i++) {\n\t\t\t\tneeded[i] = true;\n\t\t\t}\n\t\t\treturn needed;\n\t\t}\n\n\t\tconst _lastData = lastRenderData._get();\n\t\tconst lastTargetData = _lastData.imageData.data;\n\t\tconst lastStartLineNumber = _lastData.rendLineNumberStart;\n\t\tconst lastLines = _lastData.lines;\n\t\tconst lastLinesLength = lastLines.length;\n\t\tconst WIDTH = target.width;\n\t\tconst targetData = target.data;\n\n\t\tlet copySourceStart = -1;\n\t\tlet copySourceEnd = -1;\n\t\tlet copyDestStart = -1;\n\t\tlet copyDestEnd = -1;\n\n\t\tlet dest_dy = 0;\n\t\tfor (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n\t\t\tconst lineIndex = lineNumber - startLineNumber;\n\t\t\tconst lastLineIndex = lineNumber - lastStartLineNumber;\n\t\t\tconst source_dy = (lastLineIndex >= 0 && lastLineIndex < lastLinesLength ? lastLines[lastLineIndex].dy : -1);\n\n\t\t\tif (source_dy === -1) {\n\t\t\t\tneeded[lineIndex] = true;\n\t\t\t\tdest_dy += minimapLineHeight;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet sourceStart = source_dy * WIDTH * 4;\n\t\t\tlet sourceEnd = (source_dy + minimapLineHeight) * WIDTH * 4;\n\t\t\tlet destStart = dest_dy * WIDTH * 4;\n\t\t\tlet destEnd = (dest_dy + minimapLineHeight) * WIDTH * 4;\n\n\t\t\tif (copySourceEnd === sourceStart && copyDestEnd === destStart) {\n\t\t\t\t// contiguous zone => extend copy request\n\t\t\t\tcopySourceEnd = sourceEnd;\n\t\t\t\tcopyDestEnd = destEnd;\n\t\t\t} else {\n\t\t\t\tif (copySourceStart !== -1) {\n\t\t\t\t\t// flush existing copy request\n\t\t\t\t\ttargetData.set(lastTargetData.subarray(copySourceStart, copySourceEnd), copyDestStart);\n\t\t\t\t}\n\t\t\t\tcopySourceStart = sourceStart;\n\t\t\t\tcopySourceEnd = sourceEnd;\n\t\t\t\tcopyDestStart = destStart;\n\t\t\t\tcopyDestEnd = destEnd;\n\t\t\t}\n\n\t\t\tneeded[lineIndex] = false;\n\t\t\tdest_dy += minimapLineHeight;\n\t\t}\n\n\t\tif (copySourceStart !== -1) {\n\t\t\t// flush existing copy request\n\t\t\ttargetData.set(lastTargetData.subarray(copySourceStart, copySourceEnd), copyDestStart);\n\t\t}\n\n\t\treturn needed;\n\t}\n\n\tprivate static _renderLine(\n\t\ttarget: ImageData,\n\t\tbackgroundColor: RGBA,\n\t\tuseLighterFont: boolean,\n\t\trenderMinimap: RenderMinimap,\n\t\tcolorTracker: MinimapTokensColorTracker,\n\t\tminimapCharRenderer: MinimapCharRenderer,\n\t\tdy: number,\n\t\ttabSize: number,\n\t\tlineData: ViewLineData\n\t): void {\n\t\tconst content = lineData.content;\n\t\tconst tokens = lineData.tokens;\n\t\tconst charWidth = getMinimapCharWidth(renderMinimap);\n\t\tconst maxDx = target.width - charWidth;\n\n\t\tlet dx = 0;\n\t\tlet charIndex = 0;\n\t\tlet tabsCharDelta = 0;\n\n\t\tfor (let tokenIndex = 0, tokensLen = tokens.length; tokenIndex < tokensLen; tokenIndex++) {\n\t\t\tconst token = tokens[tokenIndex];\n\t\t\tconst tokenEndIndex = token.endIndex;\n\t\t\tconst tokenColorId = token.getForeground();\n\t\t\tconst tokenColor = colorTracker.getColor(tokenColorId);\n\n\t\t\tfor (; charIndex < tokenEndIndex; charIndex++) {\n\t\t\t\tif (dx > maxDx) {\n\t\t\t\t\t// hit edge of minimap\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst charCode = content.charCodeAt(charIndex);\n\n\t\t\t\tif (charCode === CharCode.Tab) {\n\t\t\t\t\tlet insertSpacesCount = tabSize - (charIndex + tabsCharDelta) % tabSize;\n\t\t\t\t\ttabsCharDelta += insertSpacesCount - 1;\n\t\t\t\t\t// No need to render anything since tab is invisible\n\t\t\t\t\tdx += insertSpacesCount * charWidth;\n\t\t\t\t} else if (charCode === CharCode.Space) {\n\t\t\t\t\t// No need to render anything since space is invisible\n\t\t\t\t\tdx += charWidth;\n\t\t\t\t} else {\n\t\t\t\t\tif (renderMinimap === RenderMinimap.Large) {\n\t\t\t\t\t\tminimapCharRenderer.x2RenderChar(target, dx, dy, charCode, tokenColor, backgroundColor, useLighterFont);\n\t\t\t\t\t} else if (renderMinimap === RenderMinimap.Small) {\n\t\t\t\t\t\tminimapCharRenderer.x1RenderChar(target, dx, dy, charCode, tokenColor, backgroundColor, useLighterFont);\n\t\t\t\t\t} else if (renderMinimap === RenderMinimap.LargeBlocks) {\n\t\t\t\t\t\tminimapCharRenderer.x2BlockRenderChar(target, dx, dy, tokenColor, backgroundColor, useLighterFont);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// RenderMinimap.SmallBlocks\n\t\t\t\t\t\tminimapCharRenderer.x1BlockRenderChar(target, dx, dy, tokenColor, backgroundColor, useLighterFont);\n\t\t\t\t\t}\n\t\t\t\t\tdx += charWidth;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tconst sliderBackground = theme.getColor(scrollbarSliderBackground);\n\tif (sliderBackground) {\n\t\tconst halfSliderBackground = sliderBackground.transparent(0.5);\n\t\tcollector.addRule(`.monaco-editor .minimap-slider, .monaco-editor .minimap-slider .minimap-slider-horizontal { background: ${halfSliderBackground}; }`);\n\t}\n\tconst sliderHoverBackground = theme.getColor(scrollbarSliderHoverBackground);\n\tif (sliderHoverBackground) {\n\t\tconst halfSliderHoverBackground = sliderHoverBackground.transparent(0.5);\n\t\tcollector.addRule(`.monaco-editor .minimap-slider:hover, .monaco-editor .minimap-slider:hover .minimap-slider-horizontal { background: ${halfSliderHoverBackground}; }`);\n\t}\n\tconst sliderActiveBackground = theme.getColor(scrollbarSliderActiveBackground);\n\tif (sliderActiveBackground) {\n\t\tconst halfSliderActiveBackground = sliderActiveBackground.transparent(0.5);\n\t\tcollector.addRule(`.monaco-editor .minimap-slider.active, .monaco-editor .minimap-slider.active .minimap-slider-horizontal { background: ${halfSliderActiveBackground}; }`);\n\t}\n\tconst shadow = theme.getColor(scrollbarShadow);\n\tif (shadow) {\n\t\tcollector.addRule(`.monaco-editor .minimap-shadow-visible { box-shadow: ${shadow} -6px 0 6px -6px inset; }`);\n\t}\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'use strict';\n\nimport 'vs/css!./scrollDecoration';\nimport { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';\nimport { ViewPart } from 'vs/editor/browser/view/viewPart';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/view/renderingContext';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\nimport { registerThemingParticipant } from 'vs/platform/theme/common/themeService';\nimport { scrollbarShadow } from 'vs/platform/theme/common/colorRegistry';\n\nexport class ScrollDecorationViewPart extends ViewPart {\n\n\tprivate _domNode: FastDomNode;\n\tprivate _scrollTop: number;\n\tprivate _width: number;\n\tprivate _shouldShow: boolean;\n\tprivate _useShadows: boolean;\n\n\tconstructor(context: ViewContext) {\n\t\tsuper(context);\n\n\t\tthis._scrollTop = 0;\n\t\tthis._width = 0;\n\t\tthis._updateWidth();\n\t\tthis._shouldShow = false;\n\t\tthis._useShadows = this._context.configuration.editor.viewInfo.scrollbar.useShadows;\n\t\tthis._domNode = createFastDomNode(document.createElement('div'));\n\t\tthis._domNode.setAttribute('role', 'presentation');\n\t\tthis._domNode.setAttribute('aria-hidden', 'true');\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t}\n\n\tprivate _updateShouldShow(): boolean {\n\t\tlet newShouldShow = (this._useShadows && this._scrollTop > 0);\n\t\tif (this._shouldShow !== newShouldShow) {\n\t\t\tthis._shouldShow = newShouldShow;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic getDomNode(): FastDomNode {\n\t\treturn this._domNode;\n\t}\n\n\tprivate _updateWidth(): boolean {\n\t\tconst layoutInfo = this._context.configuration.editor.layoutInfo;\n\t\tlet newWidth = layoutInfo.width - layoutInfo.minimapWidth;\n\t\tif (this._width !== newWidth) {\n\t\t\tthis._width = newWidth;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t// --- begin event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tlet shouldRender = false;\n\t\tif (e.viewInfo) {\n\t\t\tthis._useShadows = this._context.configuration.editor.viewInfo.scrollbar.useShadows;\n\t\t}\n\t\tif (e.layoutInfo) {\n\t\t\tshouldRender = this._updateWidth();\n\t\t}\n\t\treturn this._updateShouldShow() || shouldRender;\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\tthis._scrollTop = e.scrollTop;\n\t\treturn this._updateShouldShow();\n\t}\n\n\t// --- end event handlers\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\t// Nothing to read\n\t}\n\n\tpublic render(ctx: RestrictedRenderingContext): void {\n\t\tthis._domNode.setWidth(this._width);\n\t\tthis._domNode.setClassName(this._shouldShow ? 'scroll-decoration' : '');\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tlet shadow = theme.getColor(scrollbarShadow);\n\tif (shadow) {\n\t\tcollector.addRule(`.monaco-editor .scroll-decoration { box-shadow: ${shadow} 0 6px 6px -6px inset; }`);\n\t}\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'use strict';\n\nimport 'vs/css!./selections';\nimport { registerThemingParticipant } from 'vs/platform/theme/common/themeService';\nimport { editorSelectionBackground, editorInactiveSelection, editorSelectionForeground } from 'vs/platform/theme/common/colorRegistry';\nimport { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { HorizontalRange, LineVisibleRanges, RenderingContext } from 'vs/editor/common/view/renderingContext';\nimport { Range } from 'vs/editor/common/core/range';\nimport * as browser from 'vs/base/browser/browser';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\n\nconst enum CornerStyle {\n\tEXTERN,\n\tINTERN,\n\tFLAT\n}\n\ninterface IVisibleRangeEndPointStyle {\n\ttop: CornerStyle;\n\tbottom: CornerStyle;\n}\n\nclass HorizontalRangeWithStyle {\n\tpublic left: number;\n\tpublic width: number;\n\tpublic startStyle: IVisibleRangeEndPointStyle;\n\tpublic endStyle: IVisibleRangeEndPointStyle;\n\n\tconstructor(other: HorizontalRange) {\n\t\tthis.left = other.left;\n\t\tthis.width = other.width;\n\t\tthis.startStyle = null;\n\t\tthis.endStyle = null;\n\t}\n}\n\nclass LineVisibleRangesWithStyle {\n\tpublic lineNumber: number;\n\tpublic ranges: HorizontalRangeWithStyle[];\n\n\tconstructor(lineNumber: number, ranges: HorizontalRangeWithStyle[]) {\n\t\tthis.lineNumber = lineNumber;\n\t\tthis.ranges = ranges;\n\t}\n}\n\nfunction toStyledRange(item: HorizontalRange): HorizontalRangeWithStyle {\n\treturn new HorizontalRangeWithStyle(item);\n}\n\nfunction toStyled(item: LineVisibleRanges): LineVisibleRangesWithStyle {\n\treturn new LineVisibleRangesWithStyle(item.lineNumber, item.ranges.map(toStyledRange));\n}\n\n// TODO@Alex: Remove this once IE11 fixes Bug #524217\n// The problem in IE11 is that it does some sort of auto-zooming to accomodate for displays with different pixel density.\n// Unfortunately, this auto-zooming is buggy around dealing with rounded borders\nconst isIEWithZoomingIssuesNearRoundedBorders = browser.isEdgeOrIE;\n\n\nexport class SelectionsOverlay extends DynamicViewOverlay {\n\n\tprivate static SELECTION_CLASS_NAME = 'selected-text';\n\tprivate static SELECTION_TOP_LEFT = 'top-left-radius';\n\tprivate static SELECTION_BOTTOM_LEFT = 'bottom-left-radius';\n\tprivate static SELECTION_TOP_RIGHT = 'top-right-radius';\n\tprivate static SELECTION_BOTTOM_RIGHT = 'bottom-right-radius';\n\tprivate static EDITOR_BACKGROUND_CLASS_NAME = 'monaco-editor-background';\n\n\tprivate static ROUNDED_PIECE_WIDTH = 10;\n\n\tprivate _context: ViewContext;\n\tprivate _lineHeight: number;\n\tprivate _roundedSelection: boolean;\n\tprivate _selections: Range[];\n\tprivate _renderResult: string[];\n\n\tconstructor(context: ViewContext) {\n\t\tsuper();\n\t\tthis._context = context;\n\t\tthis._lineHeight = this._context.configuration.editor.lineHeight;\n\t\tthis._roundedSelection = this._context.configuration.editor.viewInfo.roundedSelection;\n\t\tthis._selections = [];\n\t\tthis._renderResult = null;\n\t\tthis._context.addEventHandler(this);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._context.removeEventHandler(this);\n\t\tthis._context = null;\n\t\tthis._selections = null;\n\t\tthis._renderResult = null;\n\t\tsuper.dispose();\n\t}\n\n\t// --- begin event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tif (e.lineHeight) {\n\t\t\tthis._lineHeight = this._context.configuration.editor.lineHeight;\n\t\t}\n\t\tif (e.viewInfo) {\n\t\t\tthis._roundedSelection = this._context.configuration.editor.viewInfo.roundedSelection;\n\t\t}\n\t\treturn true;\n\t}\n\tpublic onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean {\n\t\tthis._selections = e.selections.slice(0);\n\t\treturn true;\n\t}\n\tpublic onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean {\n\t\t// true for inline decorations that can end up relayouting text\n\t\treturn true;//e.inlineDecorationsChanged;\n\t}\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn e.scrollTopChanged;\n\t}\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\n\t// --- end event handlers\n\n\tprivate _visibleRangesHaveGaps(linesVisibleRanges: LineVisibleRangesWithStyle[]): boolean {\n\n\t\tfor (let i = 0, len = linesVisibleRanges.length; i < len; i++) {\n\t\t\tlet lineVisibleRanges = linesVisibleRanges[i];\n\n\t\t\tif (lineVisibleRanges.ranges.length > 1) {\n\t\t\t\t// There are two ranges on the same line\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate _enrichVisibleRangesWithStyle(linesVisibleRanges: LineVisibleRangesWithStyle[], previousFrame: LineVisibleRangesWithStyle[]): void {\n\t\tlet previousFrameTop: HorizontalRangeWithStyle = null;\n\t\tlet previousFrameBottom: HorizontalRangeWithStyle = null;\n\n\t\tif (previousFrame && previousFrame.length > 0 && linesVisibleRanges.length > 0) {\n\n\t\t\tlet topLineNumber = linesVisibleRanges[0].lineNumber;\n\t\t\tfor (let i = 0; !previousFrameTop && i < previousFrame.length; i++) {\n\t\t\t\tif (previousFrame[i].lineNumber === topLineNumber) {\n\t\t\t\t\tpreviousFrameTop = previousFrame[i].ranges[0];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet bottomLineNumber = linesVisibleRanges[linesVisibleRanges.length - 1].lineNumber;\n\t\t\tfor (let i = previousFrame.length - 1; !previousFrameBottom && i >= 0; i--) {\n\t\t\t\tif (previousFrame[i].lineNumber === bottomLineNumber) {\n\t\t\t\t\tpreviousFrameBottom = previousFrame[i].ranges[0];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (previousFrameTop && !previousFrameTop.startStyle) {\n\t\t\t\tpreviousFrameTop = null;\n\t\t\t}\n\t\t\tif (previousFrameBottom && !previousFrameBottom.startStyle) {\n\t\t\t\tpreviousFrameBottom = null;\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = 0, len = linesVisibleRanges.length; i < len; i++) {\n\t\t\t// We know for a fact that there is precisely one range on each line\n\t\t\tlet curLineRange = linesVisibleRanges[i].ranges[0];\n\t\t\tlet curLeft = curLineRange.left;\n\t\t\tlet curRight = curLineRange.left + curLineRange.width;\n\n\t\t\tlet startStyle = {\n\t\t\t\ttop: CornerStyle.EXTERN,\n\t\t\t\tbottom: CornerStyle.EXTERN\n\t\t\t};\n\n\t\t\tlet endStyle = {\n\t\t\t\ttop: CornerStyle.EXTERN,\n\t\t\t\tbottom: CornerStyle.EXTERN\n\t\t\t};\n\n\t\t\tif (i > 0) {\n\t\t\t\t// Look above\n\t\t\t\tlet prevLeft = linesVisibleRanges[i - 1].ranges[0].left;\n\t\t\t\tlet prevRight = linesVisibleRanges[i - 1].ranges[0].left + linesVisibleRanges[i - 1].ranges[0].width;\n\n\t\t\t\tif (curLeft === prevLeft) {\n\t\t\t\t\tstartStyle.top = CornerStyle.FLAT;\n\t\t\t\t} else if (curLeft > prevLeft) {\n\t\t\t\t\tstartStyle.top = CornerStyle.INTERN;\n\t\t\t\t}\n\n\t\t\t\tif (curRight === prevRight) {\n\t\t\t\t\tendStyle.top = CornerStyle.FLAT;\n\t\t\t\t} else if (prevLeft < curRight && curRight < prevRight) {\n\t\t\t\t\tendStyle.top = CornerStyle.INTERN;\n\t\t\t\t}\n\t\t\t} else if (previousFrameTop) {\n\t\t\t\t// Accept some hick-ups near the viewport edges to save on repaints\n\t\t\t\tstartStyle.top = previousFrameTop.startStyle.top;\n\t\t\t\tendStyle.top = previousFrameTop.endStyle.top;\n\t\t\t}\n\n\t\t\tif (i + 1 < len) {\n\t\t\t\t// Look below\n\t\t\t\tlet nextLeft = linesVisibleRanges[i + 1].ranges[0].left;\n\t\t\t\tlet nextRight = linesVisibleRanges[i + 1].ranges[0].left + linesVisibleRanges[i + 1].ranges[0].width;\n\n\t\t\t\tif (curLeft === nextLeft) {\n\t\t\t\t\tstartStyle.bottom = CornerStyle.FLAT;\n\t\t\t\t} else if (nextLeft < curLeft && curLeft < nextRight) {\n\t\t\t\t\tstartStyle.bottom = CornerStyle.INTERN;\n\t\t\t\t}\n\n\t\t\t\tif (curRight === nextRight) {\n\t\t\t\t\tendStyle.bottom = CornerStyle.FLAT;\n\t\t\t\t} else if (curRight < nextRight) {\n\t\t\t\t\tendStyle.bottom = CornerStyle.INTERN;\n\t\t\t\t}\n\t\t\t} else if (previousFrameBottom) {\n\t\t\t\t// Accept some hick-ups near the viewport edges to save on repaints\n\t\t\t\tstartStyle.bottom = previousFrameBottom.startStyle.bottom;\n\t\t\t\tendStyle.bottom = previousFrameBottom.endStyle.bottom;\n\t\t\t}\n\n\t\t\tcurLineRange.startStyle = startStyle;\n\t\t\tcurLineRange.endStyle = endStyle;\n\t\t}\n\t}\n\n\tprivate _getVisibleRangesWithStyle(selection: Range, ctx: RenderingContext, previousFrame: LineVisibleRangesWithStyle[]): LineVisibleRangesWithStyle[] {\n\t\tlet _linesVisibleRanges = ctx.linesVisibleRangesForRange(selection, true) || [];\n\t\tlet linesVisibleRanges = _linesVisibleRanges.map(toStyled);\n\t\tlet visibleRangesHaveGaps = this._visibleRangesHaveGaps(linesVisibleRanges);\n\n\t\tif (!isIEWithZoomingIssuesNearRoundedBorders && !visibleRangesHaveGaps && this._roundedSelection) {\n\t\t\tthis._enrichVisibleRangesWithStyle(linesVisibleRanges, previousFrame);\n\t\t}\n\n\t\t// The visible ranges are sorted TOP-BOTTOM and LEFT-RIGHT\n\t\treturn linesVisibleRanges;\n\t}\n\n\tprivate _createSelectionPiece(top: number, height: string, className: string, left: number, width: number): string {\n\t\treturn (\n\t\t\t'
    '\n\t\t);\n\t}\n\n\tprivate _actualRenderOneSelection(output2: string[], visibleStartLineNumber: number, hasMultipleSelections: boolean, visibleRanges: LineVisibleRangesWithStyle[]): void {\n\t\tlet visibleRangesHaveStyle = (visibleRanges.length > 0 && visibleRanges[0].ranges[0].startStyle);\n\t\tlet fullLineHeight = (this._lineHeight).toString();\n\t\tlet reducedLineHeight = (this._lineHeight - 1).toString();\n\n\t\tlet firstLineNumber = (visibleRanges.length > 0 ? visibleRanges[0].lineNumber : 0);\n\t\tlet lastLineNumber = (visibleRanges.length > 0 ? visibleRanges[visibleRanges.length - 1].lineNumber : 0);\n\n\t\tfor (let i = 0, len = visibleRanges.length; i < len; i++) {\n\t\t\tlet lineVisibleRanges = visibleRanges[i];\n\t\t\tlet lineNumber = lineVisibleRanges.lineNumber;\n\t\t\tlet lineIndex = lineNumber - visibleStartLineNumber;\n\n\t\t\tlet lineHeight = hasMultipleSelections ? (lineNumber === lastLineNumber || lineNumber === firstLineNumber ? reducedLineHeight : fullLineHeight) : fullLineHeight;\n\t\t\tlet top = hasMultipleSelections ? (lineNumber === firstLineNumber ? 1 : 0) : 0;\n\n\t\t\tlet lineOutput = '';\n\n\t\t\tfor (let j = 0, lenJ = lineVisibleRanges.ranges.length; j < lenJ; j++) {\n\t\t\t\tlet visibleRange = lineVisibleRanges.ranges[j];\n\n\t\t\t\tif (visibleRangesHaveStyle) {\n\t\t\t\t\tif (visibleRange.startStyle.top === CornerStyle.INTERN || visibleRange.startStyle.bottom === CornerStyle.INTERN) {\n\t\t\t\t\t\t// Reverse rounded corner to the left\n\n\t\t\t\t\t\t// First comes the selection (blue layer)\n\t\t\t\t\t\tlineOutput += this._createSelectionPiece(top, lineHeight, SelectionsOverlay.SELECTION_CLASS_NAME, visibleRange.left - SelectionsOverlay.ROUNDED_PIECE_WIDTH, SelectionsOverlay.ROUNDED_PIECE_WIDTH);\n\n\t\t\t\t\t\t// Second comes the background (white layer) with inverse border radius\n\t\t\t\t\t\tlet className = SelectionsOverlay.EDITOR_BACKGROUND_CLASS_NAME;\n\t\t\t\t\t\tif (visibleRange.startStyle.top === CornerStyle.INTERN) {\n\t\t\t\t\t\t\tclassName += ' ' + SelectionsOverlay.SELECTION_TOP_RIGHT;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (visibleRange.startStyle.bottom === CornerStyle.INTERN) {\n\t\t\t\t\t\t\tclassName += ' ' + SelectionsOverlay.SELECTION_BOTTOM_RIGHT;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlineOutput += this._createSelectionPiece(top, lineHeight, className, visibleRange.left - SelectionsOverlay.ROUNDED_PIECE_WIDTH, SelectionsOverlay.ROUNDED_PIECE_WIDTH);\n\t\t\t\t\t}\n\t\t\t\t\tif (visibleRange.endStyle.top === CornerStyle.INTERN || visibleRange.endStyle.bottom === CornerStyle.INTERN) {\n\t\t\t\t\t\t// Reverse rounded corner to the right\n\n\t\t\t\t\t\t// First comes the selection (blue layer)\n\t\t\t\t\t\tlineOutput += this._createSelectionPiece(top, lineHeight, SelectionsOverlay.SELECTION_CLASS_NAME, visibleRange.left + visibleRange.width, SelectionsOverlay.ROUNDED_PIECE_WIDTH);\n\n\t\t\t\t\t\t// Second comes the background (white layer) with inverse border radius\n\t\t\t\t\t\tlet className = SelectionsOverlay.EDITOR_BACKGROUND_CLASS_NAME;\n\t\t\t\t\t\tif (visibleRange.endStyle.top === CornerStyle.INTERN) {\n\t\t\t\t\t\t\tclassName += ' ' + SelectionsOverlay.SELECTION_TOP_LEFT;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (visibleRange.endStyle.bottom === CornerStyle.INTERN) {\n\t\t\t\t\t\t\tclassName += ' ' + SelectionsOverlay.SELECTION_BOTTOM_LEFT;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlineOutput += this._createSelectionPiece(top, lineHeight, className, visibleRange.left + visibleRange.width, SelectionsOverlay.ROUNDED_PIECE_WIDTH);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet className = SelectionsOverlay.SELECTION_CLASS_NAME;\n\t\t\t\tif (visibleRangesHaveStyle) {\n\t\t\t\t\tif (visibleRange.startStyle.top === CornerStyle.EXTERN) {\n\t\t\t\t\t\tclassName += ' ' + SelectionsOverlay.SELECTION_TOP_LEFT;\n\t\t\t\t\t}\n\t\t\t\t\tif (visibleRange.startStyle.bottom === CornerStyle.EXTERN) {\n\t\t\t\t\t\tclassName += ' ' + SelectionsOverlay.SELECTION_BOTTOM_LEFT;\n\t\t\t\t\t}\n\t\t\t\t\tif (visibleRange.endStyle.top === CornerStyle.EXTERN) {\n\t\t\t\t\t\tclassName += ' ' + SelectionsOverlay.SELECTION_TOP_RIGHT;\n\t\t\t\t\t}\n\t\t\t\t\tif (visibleRange.endStyle.bottom === CornerStyle.EXTERN) {\n\t\t\t\t\t\tclassName += ' ' + SelectionsOverlay.SELECTION_BOTTOM_RIGHT;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlineOutput += this._createSelectionPiece(top, lineHeight, className, visibleRange.left, visibleRange.width);\n\t\t\t}\n\n\t\t\toutput2[lineIndex] += lineOutput;\n\t\t}\n\t}\n\n\tprivate _previousFrameVisibleRangesWithStyle: LineVisibleRangesWithStyle[][] = [];\n\tpublic prepareRender(ctx: RenderingContext): void {\n\n\t\tlet output: string[] = [];\n\t\tlet visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n\t\tlet visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n\t\tfor (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n\t\t\tlet lineIndex = lineNumber - visibleStartLineNumber;\n\t\t\toutput[lineIndex] = '';\n\t\t}\n\n\t\tlet thisFrameVisibleRangesWithStyle: LineVisibleRangesWithStyle[][] = [];\n\t\tfor (let i = 0, len = this._selections.length; i < len; i++) {\n\t\t\tlet selection = this._selections[i];\n\t\t\tif (selection.isEmpty()) {\n\t\t\t\tthisFrameVisibleRangesWithStyle.push(null);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet visibleRangesWithStyle = this._getVisibleRangesWithStyle(selection, ctx, this._previousFrameVisibleRangesWithStyle[i]);\n\t\t\tthisFrameVisibleRangesWithStyle.push(visibleRangesWithStyle);\n\t\t\tthis._actualRenderOneSelection(output, visibleStartLineNumber, this._selections.length > 1, visibleRangesWithStyle);\n\t\t}\n\n\t\tthis._previousFrameVisibleRangesWithStyle = thisFrameVisibleRangesWithStyle;\n\t\tthis._renderResult = output;\n\t}\n\n\tpublic render(startLineNumber: number, lineNumber: number): string {\n\t\tif (!this._renderResult) {\n\t\t\treturn '';\n\t\t}\n\t\tlet lineIndex = lineNumber - startLineNumber;\n\t\tif (lineIndex < 0 || lineIndex >= this._renderResult.length) {\n\t\t\tthrow new Error('Unexpected render request');\n\t\t}\n\t\treturn this._renderResult[lineIndex];\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tlet editorSelectionColor = theme.getColor(editorSelectionBackground);\n\tif (editorSelectionColor) {\n\t\tcollector.addRule(`.monaco-editor .focused .selected-text { background-color: ${editorSelectionColor}; }`);\n\t}\n\tlet editorInactiveSelectionColor = theme.getColor(editorInactiveSelection);\n\tif (editorInactiveSelectionColor) {\n\t\tcollector.addRule(`.monaco-editor .selected-text { background-color: ${editorInactiveSelectionColor}; }`);\n\t}\n\tlet editorSelectionForegroundColor = theme.getColor(editorSelectionForeground);\n\tif (editorSelectionForegroundColor) {\n\t\tcollector.addRule(`.monaco-editor .view-line span.inline-selected-text { color: ${editorSelectionForegroundColor}; }`);\n\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 *--------------------------------------------------------------------------------------------*/\n\nimport nls = require('vs/nls');\nimport { registerColor, editorBackground, activeContrastBorder, editorForeground } from 'vs/platform/theme/common/colorRegistry';\nimport { registerThemingParticipant } from 'vs/platform/theme/common/themeService';\nimport { Color } from 'vs/base/common/color';\n\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.'));\nexport const editorCursor = registerColor('editorCursor.foreground', { dark: '#AEAFAD', light: Color.black, hc: Color.white }, nls.localize('caret', 'Color of the editor 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 editorLineNumbers = registerColor('editorLineNumber.foreground', { dark: '#5A5A5A', light: '#2B91AF', hc: Color.white }, nls.localize('editorLineNumbers', 'Color of editor line numbers.'));\nexport const editorRuler = registerColor('editorRuler.foreground', { dark: '#5A5A5A', light: Color.lightgrey, hc: Color.white }, nls.localize('editorRuler', 'Color of the editor rulers.'));\n\nexport const editorCodeLensForeground = registerColor('editorCodeLens.foreground', { dark: '#999999', light: '#999999', hc: '#999999' }, nls.localize('editorCodeLensForeground', 'Foreground color of editor code lenses'));\n\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: '#fff' }, nls.localize('editorBracketMatchBorder', 'Color for matching brackets boxes'));\n\nexport const editorOverviewRulerBorder = registerColor('editorOverviewRuler.border', { dark: '#7f7f7f4d', light: '#7f7f7f4d', hc: '#7f7f7f4d' }, nls.localize('editorOverviewRulerBorder', 'Color of the overview ruler border.'));\n\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.'));\n\nexport const editorErrorForeground = registerColor('editorError.foreground', { dark: '#FF0000', light: '#FF0000', hc: null }, nls.localize('errorForeground', '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 squigglies in the editor.'));\n\nexport const editorWarningForeground = registerColor('editorWarning.foreground', { dark: '#008000', light: '#008000', hc: null }, nls.localize('warningForeground', 'Foreground color of warning squigglies in the editor.'));\nexport const editorWarningBorder = registerColor('editorWarning.border', { dark: null, light: null, hc: Color.fromHex('#71B771').transparent(0.8) }, nls.localize('warningBorder', 'Border color of warning squigglies in the editor.'));\n\n// contains all color rules that used to defined in editor/browser/widget/editor.css\nregisterThemingParticipant((theme, collector) => {\n\tlet background = theme.getColor(editorBackground);\n\tif (background) {\n\t\tcollector.addRule(`.monaco-editor, .monaco-editor-background, .monaco-editor .inputarea.ime-input { background-color: ${background}; }`);\n\t}\n\tlet foreground = theme.getColor(editorForeground);\n\tif (foreground) {\n\t\tcollector.addRule(`.monaco-editor, .monaco-editor .inputarea.ime-input { color: ${foreground}; }`);\n\t}\n\n\tlet gutter = theme.getColor(editorGutter);\n\tif (gutter) {\n\t\tcollector.addRule(`.monaco-editor .margin { background-color: ${gutter}; }`);\n\t}\n\n\tlet rangeHighlight = theme.getColor(editorRangeHighlight);\n\tif (rangeHighlight) {\n\t\tcollector.addRule(`.monaco-editor .rangeHighlight { background-color: ${rangeHighlight}; }`);\n\t}\n\tlet outline = theme.getColor(activeContrastBorder);\n\tif (outline) {\n\t\tcollector.addRule(`.monaco-editor .rangeHighlight { border: 1px dotted ${outline}; }; }`);\n\t}\n\n\tlet invisibles = theme.getColor(editorWhitespaces);\n\tif (invisibles) {\n\t\tcollector.addRule(`.vs-whitespace { color: ${invisibles} !important; }`);\n\t}\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'use strict';\n\nimport 'vs/css!./currentLineHighlight';\nimport { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { RenderingContext } from 'vs/editor/common/view/renderingContext';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\nimport { registerThemingParticipant } from 'vs/platform/theme/common/themeService';\nimport { editorLineHighlight, editorLineHighlightBorder } from 'vs/editor/common/view/editorColorRegistry';\n\nexport class CurrentLineHighlightOverlay extends DynamicViewOverlay {\n\tprivate _context: ViewContext;\n\tprivate _lineHeight: number;\n\tprivate _readOnly: boolean;\n\tprivate _renderLineHighlight: 'none' | 'gutter' | 'line' | 'all';\n\tprivate _selectionIsEmpty: boolean;\n\tprivate _primaryCursorIsInEditableRange: boolean;\n\tprivate _primaryCursorLineNumber: number;\n\tprivate _scrollWidth: number;\n\tprivate _contentWidth: number;\n\n\tconstructor(context: ViewContext) {\n\t\tsuper();\n\t\tthis._context = context;\n\t\tthis._lineHeight = this._context.configuration.editor.lineHeight;\n\t\tthis._readOnly = this._context.configuration.editor.readOnly;\n\t\tthis._renderLineHighlight = this._context.configuration.editor.viewInfo.renderLineHighlight;\n\n\t\tthis._selectionIsEmpty = true;\n\t\tthis._primaryCursorIsInEditableRange = true;\n\t\tthis._primaryCursorLineNumber = 1;\n\t\tthis._scrollWidth = 0;\n\t\tthis._contentWidth = this._context.configuration.editor.layoutInfo.contentWidth;\n\n\t\tthis._context.addEventHandler(this);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._context.removeEventHandler(this);\n\t\tthis._context = null;\n\t\tsuper.dispose();\n\t}\n\n\t// --- begin event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tif (e.lineHeight) {\n\t\t\tthis._lineHeight = this._context.configuration.editor.lineHeight;\n\t\t}\n\t\tif (e.readOnly) {\n\t\t\tthis._readOnly = this._context.configuration.editor.readOnly;\n\t\t}\n\t\tif (e.viewInfo) {\n\t\t\tthis._renderLineHighlight = this._context.configuration.editor.viewInfo.renderLineHighlight;\n\t\t}\n\t\tif (e.layoutInfo) {\n\t\t\tthis._contentWidth = this._context.configuration.editor.layoutInfo.contentWidth;\n\t\t}\n\t\treturn true;\n\t}\n\tpublic onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean {\n\t\tlet hasChanged = false;\n\n\t\tif (this._primaryCursorIsInEditableRange !== e.isInEditableRange) {\n\t\t\tthis._primaryCursorIsInEditableRange = e.isInEditableRange;\n\t\t\thasChanged = true;\n\t\t}\n\n\t\tconst primaryCursorLineNumber = e.selections[0].positionLineNumber;\n\t\tif (this._primaryCursorLineNumber !== primaryCursorLineNumber) {\n\t\t\tthis._primaryCursorLineNumber = primaryCursorLineNumber;\n\t\t\thasChanged = true;\n\t\t}\n\n\t\tconst selectionIsEmpty = e.selections[0].isEmpty();\n\t\tif (this._selectionIsEmpty !== selectionIsEmpty) {\n\t\t\tthis._selectionIsEmpty = selectionIsEmpty;\n\t\t\thasChanged = true;\n\t\t\treturn true;\n\t\t}\n\n\t\treturn hasChanged;\n\t}\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn e.scrollWidthChanged;\n\t}\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\t// --- end event handlers\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\tthis._scrollWidth = ctx.scrollWidth;\n\t}\n\n\tpublic render(startLineNumber: number, lineNumber: number): string {\n\t\tif (lineNumber === this._primaryCursorLineNumber) {\n\t\t\tif (this._shouldShowCurrentLine()) {\n\t\t\t\treturn (\n\t\t\t\t\t'
    '\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t}\n\t\treturn '';\n\t}\n\n\tprivate _shouldShowCurrentLine(): boolean {\n\t\treturn (this._renderLineHighlight === 'line' || this._renderLineHighlight === 'all') &&\n\t\t\tthis._selectionIsEmpty &&\n\t\t\tthis._primaryCursorIsInEditableRange;\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tlet lineHighlight = theme.getColor(editorLineHighlight);\n\tif (lineHighlight) {\n\t\tcollector.addRule(`.monaco-editor .view-overlays .current-line { background-color: ${lineHighlight}; }`);\n\t}\n\tif (!lineHighlight || lineHighlight.isTransparent() || theme.defines(editorLineHighlightBorder)) {\n\t\tlet lineHighlightBorder = theme.getColor(editorLineHighlightBorder);\n\t\tif (lineHighlightBorder) {\n\t\t\tcollector.addRule(`.monaco-editor .view-overlays .current-line { border: 2px solid ${lineHighlightBorder}; }`);\n\t\t\tif (theme.type === 'hc') {\n\t\t\t\tcollector.addRule(`.monaco-editor .view-overlays .current-line { border-width: 1px; }`);\n\t\t\t}\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/css!./currentLineMarginHighlight';\nimport { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { RenderingContext } from 'vs/editor/common/view/renderingContext';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\nimport { registerThemingParticipant } from 'vs/platform/theme/common/themeService';\nimport { editorLineHighlight, editorLineHighlightBorder } from 'vs/editor/common/view/editorColorRegistry';\n\nexport class CurrentLineMarginHighlightOverlay extends DynamicViewOverlay {\n\tprivate _context: ViewContext;\n\tprivate _lineHeight: number;\n\tprivate _renderLineHighlight: 'none' | 'gutter' | 'line' | 'all';\n\tprivate _primaryCursorIsInEditableRange: boolean;\n\tprivate _primaryCursorLineNumber: number;\n\tprivate _contentLeft: number;\n\n\tconstructor(context: ViewContext) {\n\t\tsuper();\n\t\tthis._context = context;\n\t\tthis._lineHeight = this._context.configuration.editor.lineHeight;\n\t\tthis._renderLineHighlight = this._context.configuration.editor.viewInfo.renderLineHighlight;\n\n\t\tthis._primaryCursorIsInEditableRange = true;\n\t\tthis._primaryCursorLineNumber = 1;\n\t\tthis._contentLeft = this._context.configuration.editor.layoutInfo.contentLeft;\n\n\t\tthis._context.addEventHandler(this);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._context.removeEventHandler(this);\n\t\tthis._context = null;\n\t\tsuper.dispose();\n\t}\n\n\t// --- begin event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tif (e.lineHeight) {\n\t\t\tthis._lineHeight = this._context.configuration.editor.lineHeight;\n\t\t}\n\t\tif (e.viewInfo) {\n\t\t\tthis._renderLineHighlight = this._context.configuration.editor.viewInfo.renderLineHighlight;\n\t\t}\n\t\tif (e.layoutInfo) {\n\t\t\tthis._contentLeft = this._context.configuration.editor.layoutInfo.contentLeft;\n\t\t}\n\t\treturn true;\n\t}\n\tpublic onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean {\n\t\tlet hasChanged = false;\n\n\t\tif (this._primaryCursorIsInEditableRange !== e.isInEditableRange) {\n\t\t\tthis._primaryCursorIsInEditableRange = e.isInEditableRange;\n\t\t\thasChanged = true;\n\t\t}\n\n\t\tconst primaryCursorLineNumber = e.selections[0].positionLineNumber;\n\t\tif (this._primaryCursorLineNumber !== primaryCursorLineNumber) {\n\t\t\tthis._primaryCursorLineNumber = primaryCursorLineNumber;\n\t\t\thasChanged = true;\n\t\t}\n\n\t\treturn hasChanged;\n\t}\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\t// --- end event handlers\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t}\n\n\tpublic render(startLineNumber: number, lineNumber: number): string {\n\t\tif (lineNumber === this._primaryCursorLineNumber) {\n\t\t\tif (this._shouldShowCurrentLine()) {\n\t\t\t\treturn (\n\t\t\t\t\t'
    '\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t}\n\t\treturn '';\n\t}\n\n\tprivate _shouldShowCurrentLine(): boolean {\n\t\treturn (this._renderLineHighlight === 'gutter' || this._renderLineHighlight === 'all') && this._primaryCursorIsInEditableRange;\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tlet lineHighlight = theme.getColor(editorLineHighlight);\n\tif (lineHighlight) {\n\t\tcollector.addRule(`.monaco-editor .margin-view-overlays .current-line-margin { background-color: ${lineHighlight}; border: none; }`);\n\t} else {\n\t\tlet lineHighlightBorder = theme.getColor(editorLineHighlightBorder);\n\t\tif (lineHighlightBorder) {\n\t\t\tcollector.addRule(`.monaco-editor .margin-view-overlays .current-line-margin { border: 2px solid ${lineHighlightBorder}; }`);\n\t\t}\n\t\tif (theme.type === 'hc') {\n\t\t\tcollector.addRule(`.monaco-editor .margin-view-overlays .current-line-margin { border-width: 1px; }`);\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/css!./indentGuides';\nimport { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { RenderingContext } from 'vs/editor/common/view/renderingContext';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\nimport { registerThemingParticipant } from 'vs/platform/theme/common/themeService';\nimport { editorIndentGuides } from 'vs/editor/common/view/editorColorRegistry';\nimport * as dom from 'vs/base/browser/dom';\n\nexport class IndentGuidesOverlay extends DynamicViewOverlay {\n\n\tprivate _context: ViewContext;\n\tprivate _lineHeight: number;\n\tprivate _spaceWidth: number;\n\tprivate _renderResult: string[];\n\tprivate _enabled: boolean;\n\n\tconstructor(context: ViewContext) {\n\t\tsuper();\n\t\tthis._context = context;\n\t\tthis._lineHeight = this._context.configuration.editor.lineHeight;\n\t\tthis._spaceWidth = this._context.configuration.editor.fontInfo.spaceWidth;\n\t\tthis._enabled = this._context.configuration.editor.viewInfo.renderIndentGuides;\n\t\tthis._renderResult = null;\n\n\t\tthis._context.addEventHandler(this);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._context.removeEventHandler(this);\n\t\tthis._context = null;\n\t\tthis._renderResult = null;\n\t\tsuper.dispose();\n\t}\n\n\t// --- begin event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tif (e.lineHeight) {\n\t\t\tthis._lineHeight = this._context.configuration.editor.lineHeight;\n\t\t}\n\t\tif (e.fontInfo) {\n\t\t\tthis._spaceWidth = this._context.configuration.editor.fontInfo.spaceWidth;\n\t\t}\n\t\tif (e.viewInfo) {\n\t\t\tthis._enabled = this._context.configuration.editor.viewInfo.renderIndentGuides;\n\t\t}\n\t\treturn true;\n\t}\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn e.scrollTopChanged;// || e.scrollWidthChanged;\n\t}\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\n\t// --- end event handlers\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\tif (!this._enabled) {\n\t\t\tthis._renderResult = null;\n\t\t\treturn;\n\t\t}\n\n\t\tconst visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n\t\tconst visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n\t\tconst tabSize = this._context.model.getTabSize();\n\t\tconst tabWidth = tabSize * this._spaceWidth;\n\t\tconst lineHeight = this._lineHeight;\n\t\tconst indentGuideWidth = dom.computeScreenAwareSize(1);\n\n\t\tlet output: string[] = [];\n\t\tfor (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n\t\t\tlet lineIndex = lineNumber - visibleStartLineNumber;\n\t\t\tlet indent = this._context.model.getLineIndentGuide(lineNumber);\n\n\t\t\tlet result = '';\n\t\t\tlet left = 0;\n\t\t\tfor (let i = 0; i < indent; i++) {\n\t\t\t\tresult += `
    `;\n\t\t\t\tleft += tabWidth;\n\t\t\t}\n\n\t\t\toutput[lineIndex] = result;\n\t\t}\n\t\tthis._renderResult = output;\n\t}\n\n\tpublic render(startLineNumber: number, lineNumber: number): string {\n\t\tif (!this._renderResult) {\n\t\t\treturn '';\n\t\t}\n\t\tlet lineIndex = lineNumber - startLineNumber;\n\t\tif (lineIndex < 0 || lineIndex >= this._renderResult.length) {\n\t\t\tthrow new Error('Unexpected render request');\n\t\t}\n\t\treturn this._renderResult[lineIndex];\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tlet editorGuideColor = theme.getColor(editorIndentGuides);\n\tif (editorGuideColor) {\n\t\tcollector.addRule(`.monaco-editor .lines-content .cigr { background-color: ${editorGuideColor}; }`);\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/css!./lineNumbers';\nimport { editorLineNumbers } from 'vs/editor/common/view/editorColorRegistry';\nimport { registerThemingParticipant } from 'vs/platform/theme/common/themeService';\nimport * as platform from 'vs/base/common/platform';\nimport { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { RenderingContext } from 'vs/editor/common/view/renderingContext';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\nimport { Position } from 'vs/editor/common/core/position';\n\nexport class LineNumbersOverlay extends DynamicViewOverlay {\n\n\tpublic static CLASS_NAME = 'line-numbers';\n\n\tprivate _context: ViewContext;\n\n\tprivate _lineHeight: number;\n\tprivate _renderLineNumbers: boolean;\n\tprivate _renderCustomLineNumbers: (lineNumber: number) => string;\n\tprivate _renderRelativeLineNumbers: boolean;\n\tprivate _lineNumbersLeft: number;\n\tprivate _lineNumbersWidth: number;\n\n\tprivate _lastCursorModelPosition: Position;\n\tprivate _renderResult: string[];\n\n\tconstructor(context: ViewContext) {\n\t\tsuper();\n\t\tthis._context = context;\n\n\t\tthis._readConfig();\n\n\t\tthis._lastCursorModelPosition = new Position(1, 1);\n\t\tthis._renderResult = null;\n\t\tthis._context.addEventHandler(this);\n\t}\n\n\tprivate _readConfig(): void {\n\t\tconst config = this._context.configuration.editor;\n\t\tthis._lineHeight = config.lineHeight;\n\t\tthis._renderLineNumbers = config.viewInfo.renderLineNumbers;\n\t\tthis._renderCustomLineNumbers = config.viewInfo.renderCustomLineNumbers;\n\t\tthis._renderRelativeLineNumbers = config.viewInfo.renderRelativeLineNumbers;\n\t\tthis._lineNumbersLeft = config.layoutInfo.lineNumbersLeft;\n\t\tthis._lineNumbersWidth = config.layoutInfo.lineNumbersWidth;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._context.removeEventHandler(this);\n\t\tthis._context = null;\n\t\tthis._renderResult = null;\n\t\tsuper.dispose();\n\t}\n\n\t// --- begin event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tthis._readConfig();\n\t\treturn true;\n\t}\n\tpublic onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean {\n\t\tconst primaryViewPosition = e.selections[0].getPosition();\n\t\tthis._lastCursorModelPosition = this._context.model.coordinatesConverter.convertViewPositionToModelPosition(primaryViewPosition);\n\n\t\tif (this._renderRelativeLineNumbers) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn e.scrollTopChanged;\n\t}\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\n\t// --- end event handlers\n\n\tprivate _getLineRenderLineNumber(viewLineNumber: number): string {\n\t\tconst modelPosition = this._context.model.coordinatesConverter.convertViewPositionToModelPosition(new Position(viewLineNumber, 1));\n\t\tif (modelPosition.column !== 1) {\n\t\t\treturn '';\n\t\t}\n\t\tlet modelLineNumber = modelPosition.lineNumber;\n\n\t\tif (this._renderCustomLineNumbers) {\n\t\t\treturn this._renderCustomLineNumbers(modelLineNumber);\n\t\t}\n\n\t\tif (this._renderRelativeLineNumbers) {\n\t\t\tlet diff = Math.abs(this._lastCursorModelPosition.lineNumber - modelLineNumber);\n\t\t\tif (diff === 0) {\n\t\t\t\treturn '' + modelLineNumber + '';\n\t\t\t}\n\t\t\treturn String(diff);\n\t\t}\n\n\t\treturn String(modelLineNumber);\n\t}\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\tif (!this._renderLineNumbers) {\n\t\t\tthis._renderResult = null;\n\t\t\treturn;\n\t\t}\n\n\t\tlet lineHeightClassName = (platform.isLinux ? (this._lineHeight % 2 === 0 ? ' lh-even' : ' lh-odd') : '');\n\t\tlet visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n\t\tlet visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n\t\tlet common = '
    ';\n\n\t\tlet output: string[] = [];\n\t\tfor (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n\t\t\tlet lineIndex = lineNumber - visibleStartLineNumber;\n\n\t\t\tlet renderLineNumber = this._getLineRenderLineNumber(lineNumber);\n\t\t\tif (renderLineNumber) {\n\t\t\t\toutput[lineIndex] = (\n\t\t\t\t\tcommon\n\t\t\t\t\t+ renderLineNumber\n\t\t\t\t\t+ '
    '\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\toutput[lineIndex] = '';\n\t\t\t}\n\t\t}\n\n\t\tthis._renderResult = output;\n\t}\n\n\tpublic render(startLineNumber: number, lineNumber: number): string {\n\t\tif (!this._renderResult) {\n\t\t\treturn '';\n\t\t}\n\t\tlet lineIndex = lineNumber - startLineNumber;\n\t\tif (lineIndex < 0 || lineIndex >= this._renderResult.length) {\n\t\t\tthrow new Error('Unexpected render request');\n\t\t}\n\t\treturn this._renderResult[lineIndex];\n\t}\n}\n\n// theming\n\nregisterThemingParticipant((theme, collector) => {\n\tlet lineNumbers = theme.getColor(editorLineNumbers);\n\tif (lineNumbers) {\n\t\tcollector.addRule(`.monaco-editor .line-numbers { color: ${lineNumbers}; }`);\n\t}\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'use strict';\n\nimport 'vs/css!./textAreaHandler';\nimport * as platform from 'vs/base/common/platform';\nimport * as browser from 'vs/base/browser/browser';\nimport { TextAreaInput, ITextAreaInputHost, IPasteData, ICompositionData } from 'vs/editor/browser/controller/textAreaInput';\nimport { ISimpleModel, ITypeData, TextAreaState, PagedScreenReaderStrategy } from 'vs/editor/browser/controller/textAreaState';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Configuration } from 'vs/editor/browser/config/configuration';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { HorizontalRange, RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/view/renderingContext';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\nimport { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';\nimport { ViewController } from 'vs/editor/browser/view/viewController';\nimport { EndOfLinePreference } from 'vs/editor/common/editorCommon';\nimport { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport { PartFingerprints, PartFingerprint, ViewPart } from 'vs/editor/browser/view/viewPart';\nimport { Margin } from 'vs/editor/browser/viewParts/margin/margin';\nimport { LineNumbersOverlay } from 'vs/editor/browser/viewParts/lineNumbers/lineNumbers';\nimport { BareFontInfo } from 'vs/editor/common/config/fontInfo';\n\nexport interface ITextAreaHandlerHelper {\n\tvisibleRangeForPositionRelativeToEditor(lineNumber: number, column: number): HorizontalRange;\n}\n\nclass VisibleTextAreaData {\n\t_visibleTextAreaBrand: void;\n\n\tpublic readonly top: number;\n\tpublic readonly left: number;\n\tpublic readonly width: number;\n\n\tconstructor(top: number, left: number, width: number) {\n\t\tthis.top = top;\n\t\tthis.left = left;\n\t\tthis.width = width;\n\t}\n\n\tpublic setWidth(width: number): VisibleTextAreaData {\n\t\treturn new VisibleTextAreaData(this.top, this.left, width);\n\t}\n}\n\nconst canUseZeroSizeTextarea = (browser.isEdgeOrIE || browser.isFirefox);\n\nexport class TextAreaHandler extends ViewPart {\n\n\tprivate readonly _viewController: ViewController;\n\tprivate readonly _viewHelper: ITextAreaHandlerHelper;\n\n\tprivate _pixelRatio: number;\n\tprivate _accessibilitySupport: platform.AccessibilitySupport;\n\tprivate _contentLeft: number;\n\tprivate _contentWidth: number;\n\tprivate _contentHeight: number;\n\tprivate _scrollLeft: number;\n\tprivate _scrollTop: number;\n\tprivate _fontInfo: BareFontInfo;\n\tprivate _lineHeight: number;\n\tprivate _emptySelectionClipboard: boolean;\n\n\t/**\n\t * Defined only when the text area is visible (composition case).\n\t */\n\tprivate _visibleTextArea: VisibleTextAreaData;\n\tprivate _selections: Selection[];\n\tprivate _lastCopiedValue: string;\n\tprivate _lastCopiedValueIsFromEmptySelection: boolean;\n\n\tpublic readonly textArea: FastDomNode;\n\tpublic readonly textAreaCover: FastDomNode;\n\tprivate readonly _textAreaInput: TextAreaInput;\n\n\tconstructor(context: ViewContext, viewController: ViewController, viewHelper: ITextAreaHandlerHelper) {\n\t\tsuper(context);\n\n\t\tthis._viewController = viewController;\n\t\tthis._viewHelper = viewHelper;\n\n\t\tconst conf = this._context.configuration.editor;\n\n\t\tthis._pixelRatio = conf.pixelRatio;\n\t\tthis._accessibilitySupport = conf.accessibilitySupport;\n\t\tthis._contentLeft = conf.layoutInfo.contentLeft;\n\t\tthis._contentWidth = conf.layoutInfo.contentWidth;\n\t\tthis._contentHeight = conf.layoutInfo.contentHeight;\n\t\tthis._scrollLeft = 0;\n\t\tthis._scrollTop = 0;\n\t\tthis._fontInfo = conf.fontInfo;\n\t\tthis._lineHeight = conf.lineHeight;\n\t\tthis._emptySelectionClipboard = conf.emptySelectionClipboard;\n\n\t\tthis._visibleTextArea = null;\n\t\tthis._selections = [new Selection(1, 1, 1, 1)];\n\t\tthis._lastCopiedValue = null;\n\t\tthis._lastCopiedValueIsFromEmptySelection = false;\n\n\t\t// Text Area (The focus will always be in the textarea when the cursor is blinking)\n\t\tthis.textArea = createFastDomNode(document.createElement('textarea'));\n\t\tPartFingerprints.write(this.textArea, PartFingerprint.TextArea);\n\t\tthis.textArea.setClassName('inputarea');\n\t\tthis.textArea.setAttribute('wrap', 'off');\n\t\tthis.textArea.setAttribute('autocorrect', 'off');\n\t\tthis.textArea.setAttribute('autocapitalize', 'off');\n\t\tthis.textArea.setAttribute('autocomplete', 'off');\n\t\tthis.textArea.setAttribute('spellcheck', 'false');\n\t\tthis.textArea.setAttribute('aria-label', conf.viewInfo.ariaLabel);\n\t\tthis.textArea.setAttribute('role', 'textbox');\n\t\tthis.textArea.setAttribute('aria-multiline', 'true');\n\t\tthis.textArea.setAttribute('aria-haspopup', 'false');\n\t\tthis.textArea.setAttribute('aria-autocomplete', 'both');\n\n\t\tthis.textAreaCover = createFastDomNode(document.createElement('div'));\n\t\tthis.textAreaCover.setPosition('absolute');\n\n\t\tconst simpleModel: ISimpleModel = {\n\t\t\tgetLineCount: (): number => {\n\t\t\t\treturn this._context.model.getLineCount();\n\t\t\t},\n\t\t\tgetLineMaxColumn: (lineNumber: number): number => {\n\t\t\t\treturn this._context.model.getLineMaxColumn(lineNumber);\n\t\t\t},\n\t\t\tgetValueInRange: (range: Range, eol: EndOfLinePreference): string => {\n\t\t\t\treturn this._context.model.getValueInRange(range, eol);\n\t\t\t}\n\t\t};\n\n\t\tconst textAreaInputHost: ITextAreaInputHost = {\n\t\t\tgetPlainTextToCopy: (): string => {\n\t\t\t\tconst whatToCopy = this._context.model.getPlainTextToCopy(this._selections, this._emptySelectionClipboard);\n\n\t\t\t\tif (this._emptySelectionClipboard) {\n\t\t\t\t\tif (browser.isFirefox) {\n\t\t\t\t\t\t// When writing \"LINE\\r\\n\" to the clipboard and then pasting,\n\t\t\t\t\t\t// Firefox pastes \"LINE\\n\", so let's work around this quirk\n\t\t\t\t\t\tthis._lastCopiedValue = whatToCopy.replace(/\\r\\n/g, '\\n');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._lastCopiedValue = whatToCopy;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet selections = this._selections;\n\t\t\t\t\tthis._lastCopiedValueIsFromEmptySelection = (selections.length === 1 && selections[0].isEmpty());\n\t\t\t\t}\n\n\t\t\t\treturn whatToCopy;\n\t\t\t},\n\n\t\t\tgetHTMLToCopy: (): string => {\n\t\t\t\treturn this._context.model.getHTMLToCopy(this._selections, this._emptySelectionClipboard);\n\t\t\t},\n\n\t\t\tgetScreenReaderContent: (currentState: TextAreaState): TextAreaState => {\n\n\t\t\t\tif (browser.isIPad) {\n\t\t\t\t\t// Do not place anything in the textarea for the iPad\n\t\t\t\t\treturn TextAreaState.EMPTY;\n\t\t\t\t}\n\n\t\t\t\tif (this._accessibilitySupport === platform.AccessibilitySupport.Disabled) {\n\t\t\t\t\t// We know for a fact that a screen reader is not attached\n\t\t\t\t\treturn TextAreaState.EMPTY;\n\t\t\t\t}\n\n\t\t\t\treturn PagedScreenReaderStrategy.fromEditorSelection(currentState, simpleModel, this._selections[0]);\n\t\t\t}\n\t\t};\n\n\t\tthis._textAreaInput = this._register(new TextAreaInput(textAreaInputHost, this.textArea));\n\n\t\tthis._register(this._textAreaInput.onKeyDown((e: IKeyboardEvent) => {\n\t\t\tthis._viewController.emitKeyDown(e);\n\t\t}));\n\n\t\tthis._register(this._textAreaInput.onKeyUp((e: IKeyboardEvent) => {\n\t\t\tthis._viewController.emitKeyUp(e);\n\t\t}));\n\n\t\tthis._register(this._textAreaInput.onPaste((e: IPasteData) => {\n\t\t\tlet pasteOnNewLine = false;\n\t\t\tif (this._emptySelectionClipboard) {\n\t\t\t\tpasteOnNewLine = (e.text === this._lastCopiedValue && this._lastCopiedValueIsFromEmptySelection);\n\t\t\t}\n\t\t\tthis._viewController.paste('keyboard', e.text, pasteOnNewLine);\n\t\t}));\n\n\t\tthis._register(this._textAreaInput.onCut(() => {\n\t\t\tthis._viewController.cut('keyboard');\n\t\t}));\n\n\t\tthis._register(this._textAreaInput.onType((e: ITypeData) => {\n\t\t\tif (e.replaceCharCnt) {\n\t\t\t\tthis._viewController.replacePreviousChar('keyboard', e.text, e.replaceCharCnt);\n\t\t\t} else {\n\t\t\t\tthis._viewController.type('keyboard', e.text);\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this._textAreaInput.onCompositionStart(() => {\n\t\t\tconst lineNumber = this._selections[0].startLineNumber;\n\t\t\tconst column = this._selections[0].startColumn;\n\n\t\t\tthis._context.privateViewEventBus.emit(new viewEvents.ViewRevealRangeRequestEvent(\n\t\t\t\tnew Range(lineNumber, column, lineNumber, column),\n\t\t\t\tviewEvents.VerticalRevealType.Simple,\n\t\t\t\ttrue\n\t\t\t));\n\n\t\t\t// Find range pixel position\n\t\t\tconst visibleRange = this._viewHelper.visibleRangeForPositionRelativeToEditor(lineNumber, column);\n\n\t\t\tif (visibleRange) {\n\t\t\t\tthis._visibleTextArea = new VisibleTextAreaData(\n\t\t\t\t\tthis._context.viewLayout.getVerticalOffsetForLineNumber(lineNumber),\n\t\t\t\t\tvisibleRange.left,\n\t\t\t\t\tcanUseZeroSizeTextarea ? 0 : 1\n\t\t\t\t);\n\t\t\t\tthis._render();\n\t\t\t}\n\n\t\t\t// Show the textarea\n\t\t\tthis.textArea.setClassName('inputarea ime-input');\n\n\t\t\tthis._viewController.compositionStart('keyboard');\n\t\t}));\n\n\t\tthis._register(this._textAreaInput.onCompositionUpdate((e: ICompositionData) => {\n\t\t\tif (browser.isEdgeOrIE) {\n\t\t\t\t// Due to isEdgeOrIE (where the textarea was not cleared initially)\n\t\t\t\t// we cannot assume the text consists only of the composited text\n\t\t\t\tthis._visibleTextArea = this._visibleTextArea.setWidth(0);\n\t\t\t} else {\n\t\t\t\t// adjust width by its size\n\t\t\t\tthis._visibleTextArea = this._visibleTextArea.setWidth(measureText(e.data, this._fontInfo));\n\t\t\t}\n\t\t\tthis._render();\n\t\t}));\n\n\t\tthis._register(this._textAreaInput.onCompositionEnd(() => {\n\n\t\t\tthis._visibleTextArea = null;\n\t\t\tthis._render();\n\n\t\t\tthis.textArea.setClassName('inputarea');\n\t\t\tthis._viewController.compositionEnd('keyboard');\n\t\t}));\n\n\t\tthis._register(this._textAreaInput.onFocus(() => {\n\t\t\tthis._context.privateViewEventBus.emit(new viewEvents.ViewFocusChangedEvent(true));\n\t\t}));\n\n\t\tthis._register(this._textAreaInput.onBlur(() => {\n\t\t\tthis._context.privateViewEventBus.emit(new viewEvents.ViewFocusChangedEvent(false));\n\t\t}));\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t}\n\n\t// --- begin event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tconst conf = this._context.configuration.editor;\n\n\t\tif (e.fontInfo) {\n\t\t\tthis._fontInfo = conf.fontInfo;\n\t\t}\n\t\tif (e.viewInfo) {\n\t\t\tthis.textArea.setAttribute('aria-label', conf.viewInfo.ariaLabel);\n\t\t}\n\t\tif (e.layoutInfo) {\n\t\t\tthis._contentLeft = conf.layoutInfo.contentLeft;\n\t\t\tthis._contentWidth = conf.layoutInfo.contentWidth;\n\t\t\tthis._contentHeight = conf.layoutInfo.contentHeight;\n\t\t}\n\t\tif (e.lineHeight) {\n\t\t\tthis._lineHeight = conf.lineHeight;\n\t\t}\n\t\tif (e.pixelRatio) {\n\t\t\tthis._pixelRatio = conf.pixelRatio;\n\t\t}\n\t\tif (e.accessibilitySupport) {\n\t\t\tthis._accessibilitySupport = conf.accessibilitySupport;\n\t\t\tthis._textAreaInput.writeScreenReaderContent('strategy changed');\n\t\t}\n\t\tif (e.emptySelectionClipboard) {\n\t\t\tthis._emptySelectionClipboard = conf.emptySelectionClipboard;\n\t\t}\n\n\t\treturn true;\n\t}\n\tpublic onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean {\n\t\tthis._selections = e.selections.slice(0);\n\t\tthis._textAreaInput.writeScreenReaderContent('selection changed');\n\t\treturn true;\n\t}\n\tpublic onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean {\n\t\t// true for inline decorations that can end up relayouting text\n\t\treturn true;\n\t}\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\tthis._scrollLeft = e.scrollLeft;\n\t\tthis._scrollTop = e.scrollTop;\n\t\treturn true;\n\t}\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\n\t// --- end event handlers\n\n\t// --- begin view API\n\n\tpublic isFocused(): boolean {\n\t\treturn this._textAreaInput.isFocused();\n\t}\n\n\tpublic focusTextArea(): void {\n\t\tthis._textAreaInput.focusTextArea();\n\t}\n\n\tpublic setAriaActiveDescendant(id: string): void {\n\t\tif (id) {\n\t\t\tthis.textArea.setAttribute('role', 'combobox');\n\t\t\tif (this.textArea.getAttribute('aria-activedescendant') !== id) {\n\t\t\t\tthis.textArea.setAttribute('aria-haspopup', 'true');\n\t\t\t\tthis.textArea.setAttribute('aria-activedescendant', id);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.textArea.setAttribute('role', 'textbox');\n\t\t\tthis.textArea.removeAttribute('aria-activedescendant');\n\t\t\tthis.textArea.removeAttribute('aria-haspopup');\n\t\t}\n\t}\n\n\t// --- end view API\n\n\tprivate _primaryCursorVisibleRange: HorizontalRange = null;\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\tif (this._accessibilitySupport === platform.AccessibilitySupport.Enabled) {\n\t\t\t// Do not move the textarea with the cursor, as this generates accessibility events that might confuse screen readers\n\t\t\t// See https://github.com/Microsoft/vscode/issues/26730\n\t\t\tthis._primaryCursorVisibleRange = null;\n\t\t} else {\n\t\t\tconst primaryCursorPosition = new Position(this._selections[0].positionLineNumber, this._selections[0].positionColumn);\n\t\t\tthis._primaryCursorVisibleRange = ctx.visibleRangeForPosition(primaryCursorPosition);\n\t\t}\n\t}\n\n\tpublic render(ctx: RestrictedRenderingContext): void {\n\t\tthis._textAreaInput.writeScreenReaderContent('render');\n\t\tthis._render();\n\t}\n\n\tprivate _render(): void {\n\t\tif (this._visibleTextArea) {\n\t\t\t// The text area is visible for composition reasons\n\t\t\tthis._renderInsideEditor(\n\t\t\t\tthis._visibleTextArea.top - this._scrollTop,\n\t\t\t\tthis._contentLeft + this._visibleTextArea.left - this._scrollLeft,\n\t\t\t\tthis._visibleTextArea.width,\n\t\t\t\tthis._lineHeight,\n\t\t\t\ttrue\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this._primaryCursorVisibleRange) {\n\t\t\t// The primary cursor is outside the viewport => place textarea to the top left\n\t\t\tthis._renderAtTopLeft();\n\t\t\treturn;\n\t\t}\n\n\t\tconst left = this._contentLeft + this._primaryCursorVisibleRange.left - this._scrollLeft;\n\t\tif (left < this._contentLeft || left > this._contentLeft + this._contentWidth) {\n\t\t\t// cursor is outside the viewport\n\t\t\tthis._renderAtTopLeft();\n\t\t\treturn;\n\t\t}\n\n\t\tconst top = this._context.viewLayout.getVerticalOffsetForLineNumber(this._selections[0].positionLineNumber) - this._scrollTop;\n\t\tif (top < 0 || top > this._contentHeight) {\n\t\t\t// cursor is outside the viewport\n\t\t\tthis._renderAtTopLeft();\n\t\t\treturn;\n\t\t}\n\n\t\t// The primary cursor is in the viewport (at least vertically) => place textarea on the cursor\n\t\tthis._renderInsideEditor(\n\t\t\ttop, left,\n\t\t\tcanUseZeroSizeTextarea ? 0 : 1, canUseZeroSizeTextarea ? 0 : 1,\n\t\t\tfalse\n\t\t);\n\t}\n\n\tprivate _renderInsideEditor(top: number, left: number, width: number, height: number, useEditorFont: boolean): void {\n\t\tconst ta = this.textArea;\n\t\tconst tac = this.textAreaCover;\n\n\t\tif (useEditorFont) {\n\t\t\tConfiguration.applyFontInfo(ta, this._fontInfo);\n\t\t} else {\n\t\t\tta.setFontSize(1);\n\t\t\tta.setLineHeight(this._fontInfo.lineHeight);\n\t\t}\n\n\t\tta.setTop(top);\n\t\tta.setLeft(left);\n\t\tta.setWidth(width);\n\t\tta.setHeight(height);\n\n\t\ttac.setTop(0);\n\t\ttac.setLeft(0);\n\t\ttac.setWidth(0);\n\t\ttac.setHeight(0);\n\t}\n\n\tprivate _renderAtTopLeft(): void {\n\t\tconst ta = this.textArea;\n\t\tconst tac = this.textAreaCover;\n\n\t\tConfiguration.applyFontInfo(ta, this._fontInfo);\n\t\tta.setTop(0);\n\t\tta.setLeft(0);\n\t\ttac.setTop(0);\n\t\ttac.setLeft(0);\n\n\t\tif (canUseZeroSizeTextarea) {\n\t\t\tta.setWidth(0);\n\t\t\tta.setHeight(0);\n\t\t\ttac.setWidth(0);\n\t\t\ttac.setHeight(0);\n\t\t\treturn;\n\t\t}\n\n\t\t// (in WebKit the textarea is 1px by 1px because it cannot handle input to a 0x0 textarea)\n\t\t// specifically, when doing Korean IME, setting the textare to 0x0 breaks IME badly.\n\n\t\tta.setWidth(1);\n\t\tta.setHeight(1);\n\t\ttac.setWidth(1);\n\t\ttac.setHeight(1);\n\n\t\tif (this._context.configuration.editor.viewInfo.glyphMargin) {\n\t\t\ttac.setClassName('monaco-editor-background textAreaCover ' + Margin.CLASS_NAME);\n\t\t} else {\n\t\t\tif (this._context.configuration.editor.viewInfo.renderLineNumbers) {\n\t\t\t\ttac.setClassName('monaco-editor-background textAreaCover ' + LineNumbersOverlay.CLASS_NAME);\n\t\t\t} else {\n\t\t\t\ttac.setClassName('monaco-editor-background textAreaCover');\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction measureText(text: string, fontInfo: BareFontInfo): number {\n\t// adjust width by its size\n\tconst canvasElem = document.createElement('canvas');\n\tconst context = canvasElem.getContext('2d');\n\tcontext.font = createFontString(fontInfo);\n\tconst metrics = context.measureText(text);\n\n\tif (browser.isFirefox) {\n\t\treturn metrics.width + 2; // +2 for Japanese...\n\t} else {\n\t\treturn metrics.width;\n\t}\n}\n\nfunction createFontString(bareFontInfo: BareFontInfo): string {\n\treturn doCreateFontString('normal', bareFontInfo.fontWeight, bareFontInfo.fontSize, bareFontInfo.lineHeight, bareFontInfo.fontFamily);\n}\n\nfunction doCreateFontString(fontStyle: string, fontWeight: string, fontSize: number, lineHeight: number, fontFamily: string): string {\n\t// The full font syntax is:\n\t// style | variant | weight | stretch | size/line-height | fontFamily\n\t// (https://developer.mozilla.org/en-US/docs/Web/CSS/font)\n\t// But it appears Edge and IE11 cannot properly parse `stretch`.\n\treturn `${fontStyle} normal ${fontWeight} ${fontSize}px / ${lineHeight}px ${fontFamily}`;\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'use strict';\n\nimport 'vs/css!./rulers';\nimport { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';\nimport { ViewPart } from 'vs/editor/browser/view/viewPart';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/view/renderingContext';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\nimport { registerThemingParticipant } from 'vs/platform/theme/common/themeService';\nimport { editorRuler } from 'vs/editor/common/view/editorColorRegistry';\nimport * as dom from 'vs/base/browser/dom';\n\nexport class Rulers extends ViewPart {\n\n\tpublic domNode: FastDomNode;\n\tprivate _renderedRulers: FastDomNode[];\n\tprivate _rulers: number[];\n\tprivate _height: number;\n\tprivate _typicalHalfwidthCharacterWidth: number;\n\n\tconstructor(context: ViewContext) {\n\t\tsuper(context);\n\t\tthis.domNode = createFastDomNode(document.createElement('div'));\n\t\tthis.domNode.setAttribute('role', 'presentation');\n\t\tthis.domNode.setAttribute('aria-hidden', 'true');\n\t\tthis.domNode.setClassName('view-rulers');\n\t\tthis._renderedRulers = [];\n\t\tthis._rulers = this._context.configuration.editor.viewInfo.rulers;\n\t\tthis._height = this._context.configuration.editor.layoutInfo.contentHeight;\n\t\tthis._typicalHalfwidthCharacterWidth = this._context.configuration.editor.fontInfo.typicalHalfwidthCharacterWidth;\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t}\n\n\t// --- begin event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tif (e.viewInfo || e.layoutInfo || e.fontInfo) {\n\t\t\tthis._rulers = this._context.configuration.editor.viewInfo.rulers;\n\t\t\tthis._height = this._context.configuration.editor.layoutInfo.contentHeight;\n\t\t\tthis._typicalHalfwidthCharacterWidth = this._context.configuration.editor.fontInfo.typicalHalfwidthCharacterWidth;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn e.scrollHeightChanged;\n\t}\n\n\t// --- end event handlers\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\t// Nothing to read\n\t}\n\n\tprivate _ensureRulersCount(): void {\n\t\tconst currentCount = this._renderedRulers.length;\n\t\tconst desiredCount = this._rulers.length;\n\n\t\tif (currentCount === desiredCount) {\n\t\t\t// Nothing to do\n\t\t\treturn;\n\t\t}\n\n\t\tif (currentCount < desiredCount) {\n\t\t\tconst rulerWidth = dom.computeScreenAwareSize(1);\n\t\t\tlet addCount = desiredCount - currentCount;\n\t\t\twhile (addCount > 0) {\n\t\t\t\tlet node = createFastDomNode(document.createElement('div'));\n\t\t\t\tnode.setClassName('view-ruler');\n\t\t\t\tnode.setWidth(rulerWidth);\n\t\t\t\tthis.domNode.appendChild(node);\n\t\t\t\tthis._renderedRulers.push(node);\n\t\t\t\taddCount--;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet removeCount = currentCount - desiredCount;\n\t\twhile (removeCount > 0) {\n\t\t\tlet node = this._renderedRulers.pop();\n\t\t\tthis.domNode.removeChild(node);\n\t\t\tremoveCount--;\n\t\t}\n\t}\n\n\tpublic render(ctx: RestrictedRenderingContext): void {\n\n\t\tthis._ensureRulersCount();\n\n\t\tfor (let i = 0, len = this._rulers.length; i < len; i++) {\n\t\t\tlet node = this._renderedRulers[i];\n\n\t\t\tnode.setHeight(Math.min(ctx.scrollHeight, 1000000));\n\t\t\tnode.setLeft(this._rulers[i] * this._typicalHalfwidthCharacterWidth);\n\t\t}\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tlet rulerColor = theme.getColor(editorRuler);\n\tif (rulerColor) {\n\t\tcollector.addRule(`.monaco-editor .view-ruler { background-color: ${rulerColor}; }`);\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/css!./viewCursors';\nimport { ViewPart } from 'vs/editor/browser/view/viewPart';\nimport { Position } from 'vs/editor/common/core/position';\nimport { IViewCursorRenderData, ViewCursor } from 'vs/editor/browser/viewParts/viewCursors/viewCursor';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/view/renderingContext';\nimport { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';\nimport { TimeoutTimer, IntervalTimer } from 'vs/base/common/async';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\nimport { registerThemingParticipant } from 'vs/platform/theme/common/themeService';\nimport { editorCursor } from 'vs/editor/common/view/editorColorRegistry';\nimport { TextEditorCursorBlinkingStyle, TextEditorCursorStyle } from 'vs/editor/common/config/editorOptions';\n\nexport class ViewCursors extends ViewPart {\n\n\tstatic BLINK_INTERVAL = 500;\n\n\tprivate _readOnly: boolean;\n\tprivate _cursorBlinking: TextEditorCursorBlinkingStyle;\n\tprivate _cursorStyle: TextEditorCursorStyle;\n\tprivate _selectionIsEmpty: boolean;\n\n\tprivate _isVisible: boolean;\n\n\tprivate _domNode: FastDomNode;\n\n\tprivate _startCursorBlinkAnimation: TimeoutTimer;\n\tprivate _cursorFlatBlinkInterval: IntervalTimer;\n\tprivate _blinkingEnabled: boolean;\n\n\tprivate _editorHasFocus: boolean;\n\n\tprivate _primaryCursor: ViewCursor;\n\tprivate _secondaryCursors: ViewCursor[];\n\tprivate _renderData: IViewCursorRenderData[];\n\n\tconstructor(context: ViewContext) {\n\t\tsuper(context);\n\n\t\tthis._readOnly = this._context.configuration.editor.readOnly;\n\t\tthis._cursorBlinking = this._context.configuration.editor.viewInfo.cursorBlinking;\n\t\tthis._cursorStyle = this._context.configuration.editor.viewInfo.cursorStyle;\n\t\tthis._selectionIsEmpty = true;\n\n\t\tthis._primaryCursor = new ViewCursor(this._context, false);\n\t\tthis._secondaryCursors = [];\n\t\tthis._renderData = [];\n\n\t\tthis._domNode = createFastDomNode(document.createElement('div'));\n\t\tthis._domNode.setAttribute('role', 'presentation');\n\t\tthis._domNode.setAttribute('aria-hidden', 'true');\n\t\tthis._updateDomClassName();\n\n\t\tthis._domNode.appendChild(this._primaryCursor.getDomNode());\n\n\t\tthis._startCursorBlinkAnimation = new TimeoutTimer();\n\t\tthis._cursorFlatBlinkInterval = new IntervalTimer();\n\n\t\tthis._blinkingEnabled = false;\n\n\t\tthis._editorHasFocus = false;\n\t\tthis._updateBlinking();\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t\tthis._startCursorBlinkAnimation.dispose();\n\t\tthis._cursorFlatBlinkInterval.dispose();\n\t}\n\n\tpublic getDomNode(): FastDomNode {\n\t\treturn this._domNode;\n\t}\n\n\t// --- begin event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\n\t\tif (e.readOnly) {\n\t\t\tthis._readOnly = this._context.configuration.editor.readOnly;\n\t\t}\n\t\tif (e.viewInfo) {\n\t\t\tthis._cursorBlinking = this._context.configuration.editor.viewInfo.cursorBlinking;\n\t\t\tthis._cursorStyle = this._context.configuration.editor.viewInfo.cursorStyle;\n\t\t}\n\n\t\tthis._primaryCursor.onConfigurationChanged(e);\n\t\tthis._updateBlinking();\n\t\tif (e.viewInfo) {\n\t\t\tthis._updateDomClassName();\n\t\t}\n\t\tfor (let i = 0, len = this._secondaryCursors.length; i < len; i++) {\n\t\t\tthis._secondaryCursors[i].onConfigurationChanged(e);\n\t\t}\n\t\treturn true;\n\t}\n\tprivate _onCursorPositionChanged(position: Position, secondaryPositions: Position[], isInEditableRange: boolean): void {\n\t\tthis._primaryCursor.onCursorPositionChanged(position, isInEditableRange);\n\t\tthis._updateBlinking();\n\n\t\tif (this._secondaryCursors.length < secondaryPositions.length) {\n\t\t\t// Create new cursors\n\t\t\tlet addCnt = secondaryPositions.length - this._secondaryCursors.length;\n\t\t\tfor (let i = 0; i < addCnt; i++) {\n\t\t\t\tlet newCursor = new ViewCursor(this._context, true);\n\t\t\t\tthis._domNode.domNode.insertBefore(newCursor.getDomNode().domNode, this._primaryCursor.getDomNode().domNode.nextSibling);\n\t\t\t\tthis._secondaryCursors.push(newCursor);\n\t\t\t}\n\t\t} else if (this._secondaryCursors.length > secondaryPositions.length) {\n\t\t\t// Remove some cursors\n\t\t\tlet removeCnt = this._secondaryCursors.length - secondaryPositions.length;\n\t\t\tfor (let i = 0; i < removeCnt; i++) {\n\t\t\t\tthis._domNode.removeChild(this._secondaryCursors[0].getDomNode());\n\t\t\t\tthis._secondaryCursors.splice(0, 1);\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = 0; i < secondaryPositions.length; i++) {\n\t\t\tthis._secondaryCursors[i].onCursorPositionChanged(secondaryPositions[i], isInEditableRange);\n\t\t}\n\n\t}\n\tpublic onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean {\n\t\tlet positions: Position[] = [];\n\t\tfor (let i = 0, len = e.selections.length; i < len; i++) {\n\t\t\tpositions[i] = e.selections[i].getPosition();\n\t\t}\n\t\tthis._onCursorPositionChanged(positions[0], positions.slice(1), e.isInEditableRange);\n\n\t\tconst selectionIsEmpty = e.selections[0].isEmpty();\n\t\tif (this._selectionIsEmpty !== selectionIsEmpty) {\n\t\t\tthis._selectionIsEmpty = selectionIsEmpty;\n\t\t\tthis._updateDomClassName();\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean {\n\t\t// true for inline decorations that can end up relayouting text\n\t\treturn true;\n\t}\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onFocusChanged(e: viewEvents.ViewFocusChangedEvent): boolean {\n\t\tthis._editorHasFocus = e.isFocused;\n\t\tthis._updateBlinking();\n\t\treturn false;\n\t}\n\tpublic onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn true;\n\t}\n\tpublic onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean {\n\t\tlet shouldRender = (position: Position) => {\n\t\t\tfor (let i = 0, len = e.ranges.length; i < len; i++) {\n\t\t\t\tif (e.ranges[i].fromLineNumber <= position.lineNumber && position.lineNumber <= e.ranges[i].toLineNumber) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\tif (shouldRender(this._primaryCursor.getPosition())) {\n\t\t\treturn true;\n\t\t}\n\t\tfor (let i = 0; i < this._secondaryCursors.length; i++) {\n\t\t\tif (shouldRender(this._secondaryCursors[i].getPosition())) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\n\t// --- end event handlers\n\n\tpublic getPosition(): Position {\n\t\treturn this._primaryCursor.getPosition();\n\t}\n\n\t// ---- blinking logic\n\n\tprivate _getCursorBlinking(): TextEditorCursorBlinkingStyle {\n\t\tif (!this._editorHasFocus) {\n\t\t\treturn TextEditorCursorBlinkingStyle.Hidden;\n\t\t}\n\t\tif (this._readOnly || !this._primaryCursor.getIsInEditableRange()) {\n\t\t\treturn TextEditorCursorBlinkingStyle.Solid;\n\t\t}\n\t\treturn this._cursorBlinking;\n\t}\n\n\tprivate _updateBlinking(): void {\n\t\tthis._startCursorBlinkAnimation.cancel();\n\t\tthis._cursorFlatBlinkInterval.cancel();\n\n\t\tlet blinkingStyle = this._getCursorBlinking();\n\n\t\t// hidden and solid are special as they involve no animations\n\t\tlet isHidden = (blinkingStyle === TextEditorCursorBlinkingStyle.Hidden);\n\t\tlet isSolid = (blinkingStyle === TextEditorCursorBlinkingStyle.Solid);\n\n\t\tif (isHidden) {\n\t\t\tthis._hide();\n\t\t} else {\n\t\t\tthis._show();\n\t\t}\n\n\t\tthis._blinkingEnabled = false;\n\t\tthis._updateDomClassName();\n\n\t\tif (!isHidden && !isSolid) {\n\t\t\tif (blinkingStyle === TextEditorCursorBlinkingStyle.Blink) {\n\t\t\t\t// 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\n\t\t\t\tthis._cursorFlatBlinkInterval.cancelAndSet(() => {\n\t\t\t\t\tif (this._isVisible) {\n\t\t\t\t\t\tthis._hide();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._show();\n\t\t\t\t\t}\n\t\t\t\t}, ViewCursors.BLINK_INTERVAL);\n\t\t\t} else {\n\t\t\t\tthis._startCursorBlinkAnimation.setIfNotSet(() => {\n\t\t\t\t\tthis._blinkingEnabled = true;\n\t\t\t\t\tthis._updateDomClassName();\n\t\t\t\t}, ViewCursors.BLINK_INTERVAL);\n\t\t\t}\n\t\t}\n\t}\n\t// --- end blinking logic\n\n\tprivate _updateDomClassName(): void {\n\t\tthis._domNode.setClassName(this._getClassName());\n\t}\n\n\tprivate _getClassName(): string {\n\t\tlet result = 'cursors-layer';\n\t\tif (!this._selectionIsEmpty) {\n\t\t\tresult += ' has-selection';\n\t\t}\n\t\tswitch (this._cursorStyle) {\n\t\t\tcase TextEditorCursorStyle.Line:\n\t\t\t\tresult += ' cursor-line-style';\n\t\t\t\tbreak;\n\t\t\tcase TextEditorCursorStyle.Block:\n\t\t\t\tresult += ' cursor-block-style';\n\t\t\t\tbreak;\n\t\t\tcase TextEditorCursorStyle.Underline:\n\t\t\t\tresult += ' cursor-underline-style';\n\t\t\t\tbreak;\n\t\t\tcase TextEditorCursorStyle.LineThin:\n\t\t\t\tresult += ' cursor-line-thin-style';\n\t\t\t\tbreak;\n\t\t\tcase TextEditorCursorStyle.BlockOutline:\n\t\t\t\tresult += ' cursor-block-outline-style';\n\t\t\t\tbreak;\n\t\t\tcase TextEditorCursorStyle.UnderlineThin:\n\t\t\t\tresult += ' cursor-underline-thin-style';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tresult += ' cursor-line-style';\n\t\t}\n\t\tif (this._blinkingEnabled) {\n\t\t\tswitch (this._getCursorBlinking()) {\n\t\t\t\tcase TextEditorCursorBlinkingStyle.Blink:\n\t\t\t\t\tresult += ' cursor-blink';\n\t\t\t\t\tbreak;\n\t\t\t\tcase TextEditorCursorBlinkingStyle.Smooth:\n\t\t\t\t\tresult += ' cursor-smooth';\n\t\t\t\t\tbreak;\n\t\t\t\tcase TextEditorCursorBlinkingStyle.Phase:\n\t\t\t\t\tresult += ' cursor-phase';\n\t\t\t\t\tbreak;\n\t\t\t\tcase TextEditorCursorBlinkingStyle.Expand:\n\t\t\t\t\tresult += ' cursor-expand';\n\t\t\t\t\tbreak;\n\t\t\t\tcase TextEditorCursorBlinkingStyle.Solid:\n\t\t\t\t\tresult += ' cursor-solid';\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tresult += ' cursor-solid';\n\t\t\t}\n\t\t} else {\n\t\t\tresult += ' cursor-solid';\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate _show(): void {\n\t\tthis._primaryCursor.show();\n\t\tfor (let i = 0, len = this._secondaryCursors.length; i < len; i++) {\n\t\t\tthis._secondaryCursors[i].show();\n\t\t}\n\t\tthis._isVisible = true;\n\t}\n\n\tprivate _hide(): void {\n\t\tthis._primaryCursor.hide();\n\t\tfor (let i = 0, len = this._secondaryCursors.length; i < len; i++) {\n\t\t\tthis._secondaryCursors[i].hide();\n\t\t}\n\t\tthis._isVisible = false;\n\t}\n\n\t// ---- IViewPart implementation\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\tthis._primaryCursor.prepareRender(ctx);\n\t\tfor (let i = 0, len = this._secondaryCursors.length; i < len; i++) {\n\t\t\tthis._secondaryCursors[i].prepareRender(ctx);\n\t\t}\n\t}\n\n\tpublic render(ctx: RestrictedRenderingContext): void {\n\t\tthis._renderData = [];\n\t\tthis._renderData.push(this._primaryCursor.render(ctx));\n\t\tfor (let i = 0, len = this._secondaryCursors.length; i < len; i++) {\n\t\t\tthis._renderData.push(this._secondaryCursors[i].render(ctx));\n\t\t}\n\n\t\t// Keep only data of cursors that are visible\n\t\tthis._renderData = this._renderData.filter(d => !!d);\n\t}\n\n\tpublic getLastRenderData(): IViewCursorRenderData[] {\n\t\treturn this._renderData;\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tlet caret = theme.getColor(editorCursor);\n\tif (caret) {\n\t\tlet oppositeCaret = caret.opposite();\n\t\tcollector.addRule(`.monaco-editor .cursor { background-color: ${caret}; border-color: ${caret}; color: ${oppositeCaret}; }`);\n\t\tif (theme.type === 'hc') {\n\t\t\tcollector.addRule(`.monaco-editor .cursors-layer.has-selection .cursor { border-left: 1px solid ${oppositeCaret}; border-right: 1px solid ${oppositeCaret}; }`);\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport 'vs/css!./media/diffReview';\nimport * as nls from 'vs/nls';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport * as dom from 'vs/base/browser/dom';\nimport { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { renderViewLine, RenderLineInput } from 'vs/editor/common/viewLayout/viewLineRenderer';\nimport { ViewLineToken } from 'vs/editor/common/core/viewLineToken';\nimport { Configuration } from 'vs/editor/browser/config/configuration';\nimport { Position } from 'vs/editor/common/core/position';\nimport { ColorId, MetadataConsts, FontStyle } from 'vs/editor/common/modes';\nimport * as editorOptions from 'vs/editor/common/config/editorOptions';\nimport { registerThemingParticipant } from 'vs/platform/theme/common/themeService';\nimport { scrollbarShadow } from 'vs/platform/theme/common/colorRegistry';\nimport { DiffEditorWidget } from 'vs/editor/browser/widget/diffEditorWidget';\nimport { DomScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement';\nimport { editorLineNumbers } from 'vs/editor/common/view/editorColorRegistry';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';\nimport { Action } from 'vs/base/common/actions';\nimport { editorAction, EditorAction, ServicesAccessor } from 'vs/editor/common/editorCommonExtensions';\nimport { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';\nimport { ICodeEditorService } from 'vs/editor/common/services/codeEditorService';\n\nconst DIFF_LINES_PADDING = 3;\n\nconst enum DiffEntryType {\n\tEqual = 0,\n\tInsert = 1,\n\tDelete = 2\n}\n\nclass DiffEntry {\n\treadonly originalLineStart: number;\n\treadonly originalLineEnd: number;\n\treadonly modifiedLineStart: number;\n\treadonly modifiedLineEnd: number;\n\n\tconstructor(originalLineStart: number, originalLineEnd: number, modifiedLineStart: number, modifiedLineEnd: number) {\n\t\tthis.originalLineStart = originalLineStart;\n\t\tthis.originalLineEnd = originalLineEnd;\n\t\tthis.modifiedLineStart = modifiedLineStart;\n\t\tthis.modifiedLineEnd = modifiedLineEnd;\n\t}\n\n\tpublic getType(): DiffEntryType {\n\t\tif (this.originalLineStart === 0) {\n\t\t\treturn DiffEntryType.Insert;\n\t\t}\n\t\tif (this.modifiedLineStart === 0) {\n\t\t\treturn DiffEntryType.Delete;\n\t\t}\n\t\treturn DiffEntryType.Equal;\n\t}\n}\n\nclass Diff {\n\treadonly entries: DiffEntry[];\n\n\tconstructor(entries: DiffEntry[]) {\n\t\tthis.entries = entries;\n\t}\n}\n\nexport class DiffReview extends Disposable {\n\n\tprivate readonly _diffEditor: DiffEditorWidget;\n\tprivate _isVisible: boolean;\n\tpublic readonly shadow: FastDomNode;\n\tprivate readonly _actionBar: ActionBar;\n\tpublic readonly actionBarContainer: FastDomNode;\n\tpublic readonly domNode: FastDomNode;\n\tprivate readonly _content: FastDomNode;\n\tprivate readonly scrollbar: DomScrollableElement;\n\tprivate _diffs: Diff[];\n\tprivate _currentDiff: Diff;\n\n\tconstructor(diffEditor: DiffEditorWidget) {\n\t\tsuper();\n\t\tthis._diffEditor = diffEditor;\n\t\tthis._isVisible = false;\n\n\t\tthis.shadow = createFastDomNode(document.createElement('div'));\n\t\tthis.shadow.setClassName('diff-review-shadow');\n\n\t\tthis.actionBarContainer = createFastDomNode(document.createElement('div'));\n\t\tthis.actionBarContainer.setClassName('diff-review-actions');\n\t\tthis._actionBar = this._register(new ActionBar(\n\t\t\tthis.actionBarContainer.domNode\n\t\t));\n\n\t\tthis._actionBar.push(new Action('diffreview.close', nls.localize('label.close', \"Close\"), 'close-diff-review', true, () => {\n\t\t\tthis.hide();\n\t\t\treturn null;\n\t\t}), { label: false, icon: true });\n\n\t\tthis.domNode = createFastDomNode(document.createElement('div'));\n\t\tthis.domNode.setClassName('diff-review monaco-editor-background');\n\n\t\tthis._content = createFastDomNode(document.createElement('div'));\n\t\tthis._content.setClassName('diff-review-content');\n\t\tthis.scrollbar = this._register(new DomScrollableElement(this._content.domNode, {}));\n\t\tthis.domNode.domNode.appendChild(this.scrollbar.getDomNode());\n\n\t\tthis._register(diffEditor.onDidUpdateDiff(() => {\n\t\t\tif (!this._isVisible) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._diffs = this._compute();\n\t\t\tthis._render();\n\t\t}));\n\t\tthis._register(diffEditor.getModifiedEditor().onDidChangeCursorPosition(() => {\n\t\t\tif (!this._isVisible) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._render();\n\t\t}));\n\t\tthis._register(diffEditor.getOriginalEditor().onDidFocusEditor(() => {\n\t\t\tif (this._isVisible) {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t}));\n\t\tthis._register(diffEditor.getModifiedEditor().onDidFocusEditor(() => {\n\t\t\tif (this._isVisible) {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t}));\n\t\tthis._register(dom.addStandardDisposableListener(this.domNode.domNode, 'click', (e) => {\n\t\t\te.preventDefault();\n\n\t\t\tlet row = dom.findParentWithClass(e.target, 'diff-review-row');\n\t\t\tif (row) {\n\t\t\t\tthis._goToRow(row);\n\t\t\t}\n\t\t}));\n\t\tthis._register(dom.addStandardDisposableListener(this.domNode.domNode, 'keydown', (e) => {\n\t\t\tif (\n\t\t\t\te.equals(KeyCode.DownArrow)\n\t\t\t\t|| e.equals(KeyMod.CtrlCmd | KeyCode.DownArrow)\n\t\t\t\t|| e.equals(KeyMod.Alt | KeyCode.DownArrow)\n\t\t\t) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis._goToRow(this._getNextRow());\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\te.equals(KeyCode.UpArrow)\n\t\t\t\t|| e.equals(KeyMod.CtrlCmd | KeyCode.UpArrow)\n\t\t\t\t|| e.equals(KeyMod.Alt | KeyCode.UpArrow)\n\t\t\t) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis._goToRow(this._getPrevRow());\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\te.equals(KeyCode.Escape)\n\t\t\t\t|| e.equals(KeyMod.CtrlCmd | KeyCode.Escape)\n\t\t\t\t|| e.equals(KeyMod.Alt | KeyCode.Escape)\n\t\t\t\t|| e.equals(KeyMod.Shift | KeyCode.Escape)\n\t\t\t) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.hide();\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\te.equals(KeyCode.Space)\n\t\t\t\t|| e.equals(KeyCode.Enter)\n\t\t\t) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.accept();\n\t\t\t}\n\t\t}));\n\t\tthis._diffs = [];\n\t\tthis._currentDiff = null;\n\t}\n\n\tpublic prev(): void {\n\t\tlet index = 0;\n\n\t\tif (!this._isVisible) {\n\t\t\tthis._diffs = this._compute();\n\t\t}\n\n\t\tif (this._isVisible) {\n\t\t\tlet currentIndex = -1;\n\t\t\tfor (let i = 0, len = this._diffs.length; i < len; i++) {\n\t\t\t\tif (this._diffs[i] === this._currentDiff) {\n\t\t\t\t\tcurrentIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tindex = (this._diffs.length + currentIndex - 1);\n\t\t} else {\n\t\t\tindex = this._findDiffIndex(this._diffEditor.getPosition());\n\t\t}\n\n\t\tif (this._diffs.length === 0) {\n\t\t\t// Nothing to do\n\t\t\treturn;\n\t\t}\n\n\t\tindex = index % this._diffs.length;\n\t\tthis._diffEditor.setPosition(new Position(this._diffs[index].entries[0].modifiedLineStart, 1));\n\t\tthis._isVisible = true;\n\t\tthis._diffEditor.doLayout();\n\t\tthis._render();\n\t\tthis._goToRow(this._getNextRow());\n\t}\n\n\tpublic next(): void {\n\t\tlet index = 0;\n\n\t\tif (!this._isVisible) {\n\t\t\tthis._diffs = this._compute();\n\t\t}\n\n\t\tif (this._isVisible) {\n\t\t\tlet currentIndex = -1;\n\t\t\tfor (let i = 0, len = this._diffs.length; i < len; i++) {\n\t\t\t\tif (this._diffs[i] === this._currentDiff) {\n\t\t\t\t\tcurrentIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tindex = (currentIndex + 1);\n\t\t} else {\n\t\t\tindex = this._findDiffIndex(this._diffEditor.getPosition());\n\t\t}\n\n\t\tif (this._diffs.length === 0) {\n\t\t\t// Nothing to do\n\t\t\treturn;\n\t\t}\n\n\t\tindex = index % this._diffs.length;\n\t\tthis._diffEditor.setPosition(new Position(this._diffs[index].entries[0].modifiedLineStart, 1));\n\t\tthis._isVisible = true;\n\t\tthis._diffEditor.doLayout();\n\t\tthis._render();\n\t\tthis._goToRow(this._getNextRow());\n\t}\n\n\tprivate accept(): void {\n\t\tlet jumpToLineNumber = -1;\n\t\tlet current = this._getCurrentFocusedRow();\n\t\tif (current) {\n\t\t\tlet lineNumber = parseInt(current.getAttribute('data-line'), 10);\n\t\t\tif (!isNaN(lineNumber)) {\n\t\t\t\tjumpToLineNumber = lineNumber;\n\t\t\t}\n\t\t}\n\t\tthis.hide();\n\n\t\tif (jumpToLineNumber !== -1) {\n\t\t\tthis._diffEditor.setPosition(new Position(jumpToLineNumber, 1));\n\t\t\tthis._diffEditor.revealPosition(new Position(jumpToLineNumber, 1));\n\t\t}\n\t}\n\n\tprivate hide(): void {\n\t\tthis._isVisible = false;\n\t\tthis._diffEditor.focus();\n\t\tthis._diffEditor.doLayout();\n\t\tthis._render();\n\t}\n\n\tprivate _getPrevRow(): HTMLElement {\n\t\tlet current = this._getCurrentFocusedRow();\n\t\tif (!current) {\n\t\t\treturn this._getFirstRow();\n\t\t}\n\t\tif (current.previousElementSibling) {\n\t\t\treturn current.previousElementSibling;\n\t\t}\n\t\treturn current;\n\t}\n\n\tprivate _getNextRow(): HTMLElement {\n\t\tlet current = this._getCurrentFocusedRow();\n\t\tif (!current) {\n\t\t\treturn this._getFirstRow();\n\t\t}\n\t\tif (current.nextElementSibling) {\n\t\t\treturn current.nextElementSibling;\n\t\t}\n\t\treturn current;\n\t}\n\n\tprivate _getFirstRow(): HTMLElement {\n\t\treturn this.domNode.domNode.querySelector('.diff-review-row');\n\t}\n\n\tprivate _getCurrentFocusedRow(): HTMLElement {\n\t\tlet result = document.activeElement;\n\t\tif (result && /diff-review-row/.test(result.className)) {\n\t\t\treturn result;\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate _goToRow(row: HTMLElement): void {\n\t\tlet prev = this._getCurrentFocusedRow();\n\t\trow.tabIndex = 0;\n\t\trow.focus();\n\t\tif (prev && prev !== row) {\n\t\t\tprev.tabIndex = -1;\n\t\t}\n\t\tthis.scrollbar.scanDomNode();\n\t}\n\n\tpublic isVisible(): boolean {\n\t\treturn this._isVisible;\n\t}\n\n\tprivate _width: number = 0;\n\n\tpublic layout(top: number, width: number, height: number): void {\n\t\tthis._width = width;\n\t\tthis.shadow.setTop(top - 6);\n\t\tthis.shadow.setWidth(width);\n\t\tthis.shadow.setHeight(this._isVisible ? 6 : 0);\n\t\tthis.domNode.setTop(top);\n\t\tthis.domNode.setWidth(width);\n\t\tthis.domNode.setHeight(height);\n\t\tthis._content.setHeight(height);\n\t\tthis._content.setWidth(width);\n\n\t\tif (this._isVisible) {\n\t\t\tthis.actionBarContainer.setAttribute('aria-hidden', 'false');\n\t\t\tthis.actionBarContainer.setDisplay('block');\n\t\t} else {\n\t\t\tthis.actionBarContainer.setAttribute('aria-hidden', 'true');\n\t\t\tthis.actionBarContainer.setDisplay('none');\n\t\t}\n\t}\n\n\tprivate _compute(): Diff[] {\n\t\tconst lineChanges = this._diffEditor.getLineChanges();\n\t\tif (!lineChanges || lineChanges.length === 0) {\n\t\t\treturn [];\n\t\t}\n\t\tconst originalModel = this._diffEditor.getOriginalEditor().getModel();\n\t\tconst modifiedModel = this._diffEditor.getModifiedEditor().getModel();\n\n\t\tif (!originalModel || !modifiedModel) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn DiffReview._mergeAdjacent(lineChanges, originalModel.getLineCount(), modifiedModel.getLineCount());\n\t}\n\n\tprivate static _mergeAdjacent(lineChanges: editorCommon.ILineChange[], originalLineCount: number, modifiedLineCount: number): Diff[] {\n\t\tif (!lineChanges || lineChanges.length === 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\tlet diffs: Diff[] = [], diffsLength = 0;\n\n\t\tfor (let i = 0, len = lineChanges.length; i < len; i++) {\n\t\t\tconst lineChange = lineChanges[i];\n\n\t\t\tconst originalStart = lineChange.originalStartLineNumber;\n\t\t\tconst originalEnd = lineChange.originalEndLineNumber;\n\t\t\tconst modifiedStart = lineChange.modifiedStartLineNumber;\n\t\t\tconst modifiedEnd = lineChange.modifiedEndLineNumber;\n\n\t\t\tlet r: DiffEntry[] = [], rLength = 0;\n\n\t\t\t// Emit before anchors\n\t\t\t{\n\t\t\t\tconst originalEqualAbove = (originalEnd === 0 ? originalStart : originalStart - 1);\n\t\t\t\tconst modifiedEqualAbove = (modifiedEnd === 0 ? modifiedStart : modifiedStart - 1);\n\n\t\t\t\t// Make sure we don't step into the previous diff\n\t\t\t\tlet minOriginal = 1;\n\t\t\t\tlet minModified = 1;\n\t\t\t\tif (i > 0) {\n\t\t\t\t\tconst prevLineChange = lineChanges[i - 1];\n\n\t\t\t\t\tif (prevLineChange.originalEndLineNumber === 0) {\n\t\t\t\t\t\tminOriginal = prevLineChange.originalStartLineNumber + 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tminOriginal = prevLineChange.originalEndLineNumber + 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (prevLineChange.modifiedEndLineNumber === 0) {\n\t\t\t\t\t\tminModified = prevLineChange.modifiedStartLineNumber + 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tminModified = prevLineChange.modifiedEndLineNumber + 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet fromOriginal = originalEqualAbove - DIFF_LINES_PADDING + 1;\n\t\t\t\tlet fromModified = modifiedEqualAbove - DIFF_LINES_PADDING + 1;\n\t\t\t\tif (fromOriginal < minOriginal) {\n\t\t\t\t\tconst delta = minOriginal - fromOriginal;\n\t\t\t\t\tfromOriginal = fromOriginal + delta;\n\t\t\t\t\tfromModified = fromModified + delta;\n\t\t\t\t}\n\t\t\t\tif (fromModified < minModified) {\n\t\t\t\t\tconst delta = minModified - fromModified;\n\t\t\t\t\tfromOriginal = fromOriginal + delta;\n\t\t\t\t\tfromModified = fromModified + delta;\n\t\t\t\t}\n\n\t\t\t\tr[rLength++] = new DiffEntry(\n\t\t\t\t\tfromOriginal, originalEqualAbove,\n\t\t\t\t\tfromModified, modifiedEqualAbove\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Emit deleted lines\n\t\t\t{\n\t\t\t\tif (originalEnd !== 0) {\n\t\t\t\t\tr[rLength++] = new DiffEntry(originalStart, originalEnd, 0, 0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Emit inserted lines\n\t\t\t{\n\t\t\t\tif (modifiedEnd !== 0) {\n\t\t\t\t\tr[rLength++] = new DiffEntry(0, 0, modifiedStart, modifiedEnd);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Emit after anchors\n\t\t\t{\n\t\t\t\tconst originalEqualBelow = (originalEnd === 0 ? originalStart + 1 : originalEnd + 1);\n\t\t\t\tconst modifiedEqualBelow = (modifiedEnd === 0 ? modifiedStart + 1 : modifiedEnd + 1);\n\n\t\t\t\t// Make sure we don't step into the next diff\n\t\t\t\tlet maxOriginal = originalLineCount;\n\t\t\t\tlet maxModified = modifiedLineCount;\n\t\t\t\tif (i + 1 < len) {\n\t\t\t\t\tconst nextLineChange = lineChanges[i + 1];\n\n\t\t\t\t\tif (nextLineChange.originalEndLineNumber === 0) {\n\t\t\t\t\t\tmaxOriginal = nextLineChange.originalStartLineNumber;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmaxOriginal = nextLineChange.originalStartLineNumber - 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (nextLineChange.modifiedEndLineNumber === 0) {\n\t\t\t\t\t\tmaxModified = nextLineChange.modifiedStartLineNumber;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmaxModified = nextLineChange.modifiedStartLineNumber - 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet toOriginal = originalEqualBelow + DIFF_LINES_PADDING - 1;\n\t\t\t\tlet toModified = modifiedEqualBelow + DIFF_LINES_PADDING - 1;\n\n\t\t\t\tif (toOriginal > maxOriginal) {\n\t\t\t\t\tconst delta = maxOriginal - toOriginal;\n\t\t\t\t\ttoOriginal = toOriginal + delta;\n\t\t\t\t\ttoModified = toModified + delta;\n\t\t\t\t}\n\t\t\t\tif (toModified > maxModified) {\n\t\t\t\t\tconst delta = maxModified - toModified;\n\t\t\t\t\ttoOriginal = toOriginal + delta;\n\t\t\t\t\ttoModified = toModified + delta;\n\t\t\t\t}\n\n\t\t\t\tr[rLength++] = new DiffEntry(\n\t\t\t\t\toriginalEqualBelow, toOriginal,\n\t\t\t\t\tmodifiedEqualBelow, toModified,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tdiffs[diffsLength++] = new Diff(r);\n\t\t}\n\n\t\t// Merge adjacent diffs\n\t\tlet curr: DiffEntry[] = diffs[0].entries;\n\t\tlet r: Diff[] = [], rLength = 0;\n\t\tfor (let i = 1, len = diffs.length; i < len; i++) {\n\t\t\tconst thisDiff = diffs[i].entries;\n\n\t\t\tconst currLast = curr[curr.length - 1];\n\t\t\tconst thisFirst = thisDiff[0];\n\n\t\t\tif (\n\t\t\t\tcurrLast.getType() === DiffEntryType.Equal\n\t\t\t\t&& thisFirst.getType() === DiffEntryType.Equal\n\t\t\t\t&& thisFirst.originalLineStart <= currLast.originalLineEnd\n\t\t\t) {\n\t\t\t\t// We are dealing with equal lines that overlap\n\n\t\t\t\tcurr[curr.length - 1] = new DiffEntry(\n\t\t\t\t\tcurrLast.originalLineStart, thisFirst.originalLineEnd,\n\t\t\t\t\tcurrLast.modifiedLineStart, thisFirst.modifiedLineEnd\n\t\t\t\t);\n\t\t\t\tcurr = curr.concat(thisDiff.slice(1));\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tr[rLength++] = new Diff(curr);\n\t\t\tcurr = thisDiff;\n\t\t}\n\t\tr[rLength++] = new Diff(curr);\n\t\treturn r;\n\t}\n\n\tprivate _findDiffIndex(pos: Position): number {\n\t\tconst lineNumber = pos.lineNumber;\n\t\tfor (let i = 0, len = this._diffs.length; i < len; i++) {\n\t\t\tconst diff = this._diffs[i].entries;\n\t\t\tconst lastModifiedLine = diff[diff.length - 1].modifiedLineEnd;\n\t\t\tif (lineNumber <= lastModifiedLine) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t}\n\n\tprivate _render(): void {\n\n\t\tconst originalOpts = this._diffEditor.getOriginalEditor().getConfiguration();\n\t\tconst modifiedOpts = this._diffEditor.getModifiedEditor().getConfiguration();\n\n\t\tconst originalModel = this._diffEditor.getOriginalEditor().getModel();\n\t\tconst modifiedModel = this._diffEditor.getModifiedEditor().getModel();\n\n\t\tconst originalModelOpts = originalModel.getOptions();\n\t\tconst modifiedModelOpts = modifiedModel.getOptions();\n\n\t\tif (!this._isVisible || !originalModel || !modifiedModel) {\n\t\t\tdom.clearNode(this._content.domNode);\n\t\t\tthis._currentDiff = null;\n\t\t\tthis.scrollbar.scanDomNode();\n\t\t\treturn;\n\t\t}\n\n\t\tconst pos = this._diffEditor.getPosition();\n\t\tconst diffIndex = this._findDiffIndex(pos);\n\n\t\tif (this._diffs[diffIndex] === this._currentDiff) {\n\t\t\treturn;\n\t\t}\n\t\tthis._currentDiff = this._diffs[diffIndex];\n\n\t\tconst diffs = this._diffs[diffIndex].entries;\n\t\tlet container = document.createElement('div');\n\t\tcontainer.className = 'diff-review-table';\n\t\tcontainer.setAttribute('role', 'list');\n\t\tConfiguration.applyFontInfoSlow(container, modifiedOpts.fontInfo);\n\n\t\tlet minOriginalLine = 0;\n\t\tlet maxOriginalLine = 0;\n\t\tlet minModifiedLine = 0;\n\t\tlet maxModifiedLine = 0;\n\t\tfor (let i = 0, len = diffs.length; i < len; i++) {\n\t\t\tconst diffEntry = diffs[i];\n\t\t\tconst originalLineStart = diffEntry.originalLineStart;\n\t\t\tconst originalLineEnd = diffEntry.originalLineEnd;\n\t\t\tconst modifiedLineStart = diffEntry.modifiedLineStart;\n\t\t\tconst modifiedLineEnd = diffEntry.modifiedLineEnd;\n\n\t\t\tif (originalLineStart !== 0 && ((minOriginalLine === 0 || originalLineStart < minOriginalLine))) {\n\t\t\t\tminOriginalLine = originalLineStart;\n\t\t\t}\n\t\t\tif (originalLineEnd !== 0 && ((maxOriginalLine === 0 || originalLineEnd > maxOriginalLine))) {\n\t\t\t\tmaxOriginalLine = originalLineEnd;\n\t\t\t}\n\t\t\tif (modifiedLineStart !== 0 && ((minModifiedLine === 0 || modifiedLineStart < minModifiedLine))) {\n\t\t\t\tminModifiedLine = modifiedLineStart;\n\t\t\t}\n\t\t\tif (modifiedLineEnd !== 0 && ((maxModifiedLine === 0 || modifiedLineEnd > maxModifiedLine))) {\n\t\t\t\tmaxModifiedLine = modifiedLineEnd;\n\t\t\t}\n\t\t}\n\n\t\tlet header = document.createElement('div');\n\t\theader.className = 'diff-review-row';\n\n\t\tlet cell = document.createElement('div');\n\t\tcell.className = 'diff-review-cell diff-review-summary';\n\t\tcell.appendChild(document.createTextNode(`${diffIndex + 1}/${this._diffs.length}: @@ -${minOriginalLine},${maxOriginalLine - minOriginalLine + 1} +${minModifiedLine},${maxModifiedLine - minModifiedLine + 1} @@`));\n\t\theader.setAttribute('data-line', String(minModifiedLine));\n\t\theader.setAttribute('aria-label', nls.localize('header', \"Difference {0} of {1}: original {2}, {3} lines, modified {4}, {5} lines\", (diffIndex + 1), this._diffs.length, minOriginalLine, maxOriginalLine - minOriginalLine + 1, minModifiedLine, maxModifiedLine - minModifiedLine + 1));\n\t\theader.appendChild(cell);\n\n\t\t// @@ -504,7 +517,7 @@\n\t\theader.setAttribute('role', 'listitem');\n\t\tcontainer.appendChild(header);\n\n\t\tlet modLine = minModifiedLine;\n\t\tfor (let i = 0, len = diffs.length; i < len; i++) {\n\t\t\tconst diffEntry = diffs[i];\n\t\t\tDiffReview._renderSection(container, diffEntry, modLine, this._width, originalOpts, originalModel, originalModelOpts, modifiedOpts, modifiedModel, modifiedModelOpts);\n\t\t\tif (diffEntry.modifiedLineStart !== 0) {\n\t\t\t\tmodLine = diffEntry.modifiedLineEnd;\n\t\t\t}\n\t\t}\n\n\t\tdom.clearNode(this._content.domNode);\n\t\tthis._content.domNode.appendChild(container);\n\t\tthis.scrollbar.scanDomNode();\n\t}\n\n\tprivate static _renderSection(\n\t\tdest: HTMLElement, diffEntry: DiffEntry, modLine: number, width: number,\n\t\toriginalOpts: editorOptions.InternalEditorOptions, originalModel: editorCommon.IModel, originalModelOpts: editorCommon.TextModelResolvedOptions,\n\t\tmodifiedOpts: editorOptions.InternalEditorOptions, modifiedModel: editorCommon.IModel, modifiedModelOpts: editorCommon.TextModelResolvedOptions\n\t): void {\n\n\t\tconst type = diffEntry.getType();\n\n\t\tlet rowClassName: string = 'diff-review-row';\n\t\tlet lineNumbersExtraClassName: string = '';\n\t\tlet spacerClassName: string = 'diff-review-spacer';\n\t\tswitch (type) {\n\t\t\tcase DiffEntryType.Insert:\n\t\t\t\trowClassName = 'diff-review-row line-insert';\n\t\t\t\tlineNumbersExtraClassName = ' char-insert';\n\t\t\t\tspacerClassName = 'diff-review-spacer insert-sign';\n\t\t\t\tbreak;\n\t\t\tcase DiffEntryType.Delete:\n\t\t\t\trowClassName = 'diff-review-row line-delete';\n\t\t\t\tlineNumbersExtraClassName = ' char-delete';\n\t\t\t\tspacerClassName = 'diff-review-spacer delete-sign';\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst originalLineStart = diffEntry.originalLineStart;\n\t\tconst originalLineEnd = diffEntry.originalLineEnd;\n\t\tconst modifiedLineStart = diffEntry.modifiedLineStart;\n\t\tconst modifiedLineEnd = diffEntry.modifiedLineEnd;\n\n\t\tconst cnt = Math.max(\n\t\t\tmodifiedLineEnd - modifiedLineStart,\n\t\t\toriginalLineEnd - originalLineStart\n\t\t);\n\n\t\tconst originalLineNumbersWidth = originalOpts.layoutInfo.glyphMarginWidth + originalOpts.layoutInfo.lineNumbersWidth;\n\t\tconst modifiedLineNumbersWidth = 10 + modifiedOpts.layoutInfo.glyphMarginWidth + modifiedOpts.layoutInfo.lineNumbersWidth;\n\n\t\tfor (let i = 0; i <= cnt; i++) {\n\t\t\tconst originalLine = (originalLineStart === 0 ? 0 : originalLineStart + i);\n\t\t\tconst modifiedLine = (modifiedLineStart === 0 ? 0 : modifiedLineStart + i);\n\n\t\t\tconst row = document.createElement('div');\n\t\t\trow.style.minWidth = width + 'px';\n\t\t\trow.className = rowClassName;\n\t\t\trow.setAttribute('role', 'listitem');\n\t\t\tif (modifiedLine !== 0) {\n\t\t\t\tmodLine = modifiedLine;\n\t\t\t}\n\t\t\trow.setAttribute('data-line', String(modLine));\n\n\t\t\tlet cell = document.createElement('div');\n\t\t\tcell.className = 'diff-review-cell';\n\t\t\trow.appendChild(cell);\n\n\t\t\tconst originalLineNumber = document.createElement('span');\n\t\t\toriginalLineNumber.style.width = (originalLineNumbersWidth + 'px');\n\t\t\toriginalLineNumber.style.minWidth = (originalLineNumbersWidth + 'px');\n\t\t\toriginalLineNumber.className = 'diff-review-line-number' + lineNumbersExtraClassName;\n\t\t\tif (originalLine !== 0) {\n\t\t\t\toriginalLineNumber.appendChild(document.createTextNode(String(originalLine)));\n\t\t\t} else {\n\t\t\t\toriginalLineNumber.innerHTML = ' ';\n\t\t\t}\n\t\t\tcell.appendChild(originalLineNumber);\n\n\t\t\tconst modifiedLineNumber = document.createElement('span');\n\t\t\tmodifiedLineNumber.style.width = (modifiedLineNumbersWidth + 'px');\n\t\t\tmodifiedLineNumber.style.minWidth = (modifiedLineNumbersWidth + 'px');\n\t\t\tmodifiedLineNumber.style.paddingRight = '10px';\n\t\t\tmodifiedLineNumber.className = 'diff-review-line-number' + lineNumbersExtraClassName;\n\t\t\tif (modifiedLine !== 0) {\n\t\t\t\tmodifiedLineNumber.appendChild(document.createTextNode(String(modifiedLine)));\n\t\t\t} else {\n\t\t\t\tmodifiedLineNumber.innerHTML = ' ';\n\t\t\t}\n\t\t\tcell.appendChild(modifiedLineNumber);\n\n\t\t\tconst spacer = document.createElement('span');\n\t\t\tspacer.className = spacerClassName;\n\t\t\tspacer.innerHTML = '  ';\n\t\t\tcell.appendChild(spacer);\n\n\t\t\tlet lineContent: string;\n\t\t\tif (modifiedLine !== 0) {\n\t\t\t\tcell.insertAdjacentHTML('beforeend',\n\t\t\t\t\tthis._renderLine(modifiedModel, modifiedOpts, modifiedModelOpts.tabSize, modifiedLine)\n\t\t\t\t);\n\t\t\t\tlineContent = modifiedModel.getLineContent(modifiedLine);\n\t\t\t} else {\n\t\t\t\tcell.insertAdjacentHTML('beforeend',\n\t\t\t\t\tthis._renderLine(originalModel, originalOpts, originalModelOpts.tabSize, originalLine)\n\t\t\t\t);\n\t\t\t\tlineContent = originalModel.getLineContent(originalLine);\n\t\t\t}\n\n\t\t\tif (lineContent.length === 0) {\n\t\t\t\tlineContent = nls.localize('blankLine', \"blank\");\n\t\t\t}\n\n\t\t\tlet ariaLabel: string;\n\t\t\tswitch (type) {\n\t\t\t\tcase DiffEntryType.Equal:\n\t\t\t\t\tariaLabel = nls.localize('equalLine', \"original {0}, modified {1}: {2}\", originalLine, modifiedLine, lineContent);\n\t\t\t\t\tbreak;\n\t\t\t\tcase DiffEntryType.Insert:\n\t\t\t\t\tariaLabel = nls.localize('insertLine', \"+ modified {0}: {1}\", modifiedLine, lineContent);\n\t\t\t\t\tbreak;\n\t\t\t\tcase DiffEntryType.Delete:\n\t\t\t\t\tariaLabel = nls.localize('deleteLine', \"- original {0}: {1}\", originalLine, lineContent);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\trow.setAttribute('aria-label', ariaLabel);\n\n\t\t\tdest.appendChild(row);\n\t\t}\n\t}\n\n\tprivate static _renderLine(model: editorCommon.IModel, config: editorOptions.InternalEditorOptions, tabSize: number, lineNumber: number): string {\n\t\tconst lineContent = model.getLineContent(lineNumber);\n\n\t\tconst defaultMetadata = (\n\t\t\t(FontStyle.None << MetadataConsts.FONT_STYLE_OFFSET)\n\t\t\t| (ColorId.DefaultForeground << MetadataConsts.FOREGROUND_OFFSET)\n\t\t\t| (ColorId.DefaultBackground << MetadataConsts.BACKGROUND_OFFSET)\n\t\t) >>> 0;\n\n\t\tconst r = renderViewLine(new RenderLineInput(\n\t\t\t(config.fontInfo.isMonospace && !config.viewInfo.disableMonospaceOptimizations),\n\t\t\tlineContent,\n\t\t\tmodel.mightContainRTL(),\n\t\t\t0,\n\t\t\t[new ViewLineToken(lineContent.length, defaultMetadata)],\n\t\t\t[],\n\t\t\ttabSize,\n\t\t\tconfig.fontInfo.spaceWidth,\n\t\t\tconfig.viewInfo.stopRenderingLineAfter,\n\t\t\tconfig.viewInfo.renderWhitespace,\n\t\t\tconfig.viewInfo.renderControlCharacters,\n\t\t\tconfig.viewInfo.fontLigatures\n\t\t));\n\n\t\treturn r.html;\n\t}\n}\n\n// theming\n\nregisterThemingParticipant((theme, collector) => {\n\tlet lineNumbers = theme.getColor(editorLineNumbers);\n\tif (lineNumbers) {\n\t\tcollector.addRule(`.monaco-diff-editor .diff-review-line-number { color: ${lineNumbers}; }`);\n\t}\n\n\tconst shadow = theme.getColor(scrollbarShadow);\n\tif (shadow) {\n\t\tcollector.addRule(`.monaco-diff-editor .diff-review-shadow { box-shadow: ${shadow} 0 -6px 6px -6px inset; }`);\n\t}\n});\n\n@editorAction\nclass DiffReviewNext extends EditorAction {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.diffReview.next',\n\t\t\tlabel: nls.localize('editor.action.diffReview.next', \"Go to Next Difference\"),\n\t\t\talias: 'Go to Next Difference',\n\t\t\tprecondition: ContextKeyExpr.has('isInDiffEditor'),\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: null,\n\t\t\t\tprimary: KeyCode.F7\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\t\tconst diffEditor = findFocusedDiffEditor(accessor);\n\t\tif (diffEditor) {\n\t\t\tdiffEditor.diffReviewNext();\n\t\t}\n\t}\n}\n\n@editorAction\nclass DiffReviewPrev extends EditorAction {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.diffReview.prev',\n\t\t\tlabel: nls.localize('editor.action.diffReview.prev', \"Go to Previous Difference\"),\n\t\t\talias: 'Go to Previous Difference',\n\t\t\tprecondition: ContextKeyExpr.has('isInDiffEditor'),\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: null,\n\t\t\t\tprimary: KeyMod.Shift | KeyCode.F7\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\t\tconst diffEditor = findFocusedDiffEditor(accessor);\n\t\tif (diffEditor) {\n\t\t\tdiffEditor.diffReviewPrev();\n\t\t}\n\t}\n}\n\nfunction findFocusedDiffEditor(accessor: ServicesAccessor): DiffEditorWidget {\n\tconst codeEditorService = accessor.get(ICodeEditorService);\n\tconst diffEditors = codeEditorService.listDiffEditors();\n\tfor (let i = 0, len = diffEditors.length; i < len; i++) {\n\t\tconst diffEditor = diffEditors[i];\n\t\tif (diffEditor.hasWidgetFocus()) {\n\t\t\treturn diffEditor;\n\t\t}\n\t}\n\treturn null;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { OverviewRulerLane } from 'vs/editor/common/editorCommon';\nimport { ThemeType, DARK, HIGH_CONTRAST, LIGHT } from 'vs/platform/theme/common/themeService';\n\nexport class ColorZone {\n\t_colorZoneBrand: void;\n\n\tfrom: number;\n\tto: number;\n\tcolorId: number;\n\tposition: OverviewRulerLane;\n\n\tconstructor(from: number, to: number, colorId: number, position: OverviewRulerLane) {\n\t\tthis.from = from | 0;\n\t\tthis.to = to | 0;\n\t\tthis.colorId = colorId | 0;\n\t\tthis.position = position | 0;\n\t}\n}\n\n/**\n * A zone in the overview ruler\n */\nexport class OverviewRulerZone {\n\t_overviewRulerZoneBrand: void;\n\n\tstartLineNumber: number;\n\tendLineNumber: number;\n\tposition: OverviewRulerLane;\n\tforceHeight: number;\n\n\tprivate _color: string;\n\tprivate _darkColor: string;\n\tprivate _hcColor: string;\n\n\tprivate _colorZones: ColorZone[];\n\n\tconstructor(\n\t\tstartLineNumber: number, endLineNumber: number,\n\t\tposition: OverviewRulerLane,\n\t\tforceHeight: number,\n\t\tcolor: string, darkColor: string, hcColor: string\n\t) {\n\t\tthis.startLineNumber = startLineNumber;\n\t\tthis.endLineNumber = endLineNumber;\n\t\tthis.position = position;\n\t\tthis.forceHeight = forceHeight;\n\t\tthis._color = color;\n\t\tthis._darkColor = darkColor;\n\t\tthis._hcColor = hcColor;\n\t\tthis._colorZones = null;\n\t}\n\n\tpublic getColor(themeType: ThemeType): string {\n\t\tswitch (themeType) {\n\t\t\tcase HIGH_CONTRAST:\n\t\t\t\treturn this._hcColor;\n\t\t\tcase DARK:\n\t\t\t\treturn this._darkColor;\n\t\t}\n\t\treturn this._color;\n\t}\n\n\tpublic equals(other: OverviewRulerZone): boolean {\n\t\treturn (\n\t\t\tthis.startLineNumber === other.startLineNumber\n\t\t\t&& this.endLineNumber === other.endLineNumber\n\t\t\t&& this.position === other.position\n\t\t\t&& this.forceHeight === other.forceHeight\n\t\t\t&& this._color === other._color\n\t\t\t&& this._darkColor === other._darkColor\n\t\t\t&& this._hcColor === other._hcColor\n\t\t);\n\t}\n\n\tpublic compareTo(other: OverviewRulerZone): number {\n\t\tif (this.startLineNumber === other.startLineNumber) {\n\t\t\tif (this.endLineNumber === other.endLineNumber) {\n\t\t\t\tif (this.forceHeight === other.forceHeight) {\n\t\t\t\t\tif (this.position === other.position) {\n\t\t\t\t\t\tif (this._darkColor === other._darkColor) {\n\t\t\t\t\t\t\tif (this._color === other._color) {\n\t\t\t\t\t\t\t\tif (this._hcColor === other._hcColor) {\n\t\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn this._hcColor < other._hcColor ? -1 : 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn this._color < other._color ? -1 : 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this._darkColor < other._darkColor ? -1 : 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this.position - other.position;\n\t\t\t\t}\n\t\t\t\treturn this.forceHeight - other.forceHeight;\n\t\t\t}\n\t\t\treturn this.endLineNumber - other.endLineNumber;\n\t\t}\n\t\treturn this.startLineNumber - other.startLineNumber;\n\t}\n\n\tpublic setColorZones(colorZones: ColorZone[]): void {\n\t\tthis._colorZones = colorZones;\n\t}\n\n\tpublic getColorZones(): ColorZone[] {\n\t\treturn this._colorZones;\n\t}\n}\n\nexport class OverviewZoneManager {\n\n\tprivate _getVerticalOffsetForLine: (lineNumber: number) => number;\n\tprivate _zones: OverviewRulerZone[];\n\tprivate _colorZonesInvalid: boolean;\n\tprivate _lineHeight: number;\n\tprivate _domWidth: number;\n\tprivate _domHeight: number;\n\tprivate _outerHeight: number;\n\tprivate _maximumHeight: number;\n\tprivate _minimumHeight: number;\n\tprivate _themeType: ThemeType;\n\tprivate _pixelRatio: number;\n\n\tprivate _lastAssignedId: number;\n\tprivate _color2Id: { [color: string]: number; };\n\tprivate _id2Color: string[];\n\n\tconstructor(getVerticalOffsetForLine: (lineNumber: number) => number) {\n\t\tthis._getVerticalOffsetForLine = getVerticalOffsetForLine;\n\t\tthis._zones = [];\n\t\tthis._colorZonesInvalid = false;\n\t\tthis._lineHeight = 0;\n\t\tthis._domWidth = 0;\n\t\tthis._domHeight = 0;\n\t\tthis._outerHeight = 0;\n\t\tthis._maximumHeight = 0;\n\t\tthis._minimumHeight = 0;\n\t\tthis._themeType = LIGHT;\n\t\tthis._pixelRatio = 1;\n\n\t\tthis._lastAssignedId = 0;\n\t\tthis._color2Id = Object.create(null);\n\t\tthis._id2Color = [];\n\t}\n\n\tpublic getId2Color(): string[] {\n\t\treturn this._id2Color;\n\t}\n\n\tpublic setZones(newZones: OverviewRulerZone[]): void {\n\t\tnewZones.sort((a, b) => a.compareTo(b));\n\n\t\tlet oldZones = this._zones;\n\t\tlet oldIndex = 0;\n\t\tlet oldLength = this._zones.length;\n\t\tlet newIndex = 0;\n\t\tlet newLength = newZones.length;\n\n\t\tlet result: OverviewRulerZone[] = [];\n\t\twhile (newIndex < newLength) {\n\t\t\tlet newZone = newZones[newIndex];\n\n\t\t\tif (oldIndex >= oldLength) {\n\t\t\t\tresult.push(newZone);\n\t\t\t\tnewIndex++;\n\t\t\t} else {\n\t\t\t\tlet oldZone = oldZones[oldIndex];\n\t\t\t\tlet cmp = oldZone.compareTo(newZone);\n\t\t\t\tif (cmp < 0) {\n\t\t\t\t\toldIndex++;\n\t\t\t\t} else if (cmp > 0) {\n\t\t\t\t\tresult.push(newZone);\n\t\t\t\t\tnewIndex++;\n\t\t\t\t} else {\n\t\t\t\t\t// cmp === 0\n\t\t\t\t\tresult.push(oldZone);\n\t\t\t\t\toldIndex++;\n\t\t\t\t\tnewIndex++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._zones = result;\n\t}\n\n\tpublic setLineHeight(lineHeight: number): boolean {\n\t\tif (this._lineHeight === lineHeight) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._lineHeight = lineHeight;\n\t\tthis._colorZonesInvalid = true;\n\t\treturn true;\n\t}\n\n\tpublic setPixelRatio(pixelRatio: number): void {\n\t\tthis._pixelRatio = pixelRatio;\n\t\tthis._colorZonesInvalid = true;\n\t}\n\n\tpublic getDOMWidth(): number {\n\t\treturn this._domWidth;\n\t}\n\n\tpublic getCanvasWidth(): number {\n\t\treturn this._domWidth * this._pixelRatio;\n\t}\n\n\tpublic setDOMWidth(width: number): boolean {\n\t\tif (this._domWidth === width) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._domWidth = width;\n\t\tthis._colorZonesInvalid = true;\n\t\treturn true;\n\t}\n\n\tpublic getDOMHeight(): number {\n\t\treturn this._domHeight;\n\t}\n\n\tpublic getCanvasHeight(): number {\n\t\treturn this._domHeight * this._pixelRatio;\n\t}\n\n\tpublic setDOMHeight(height: number): boolean {\n\t\tif (this._domHeight === height) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._domHeight = height;\n\t\tthis._colorZonesInvalid = true;\n\t\treturn true;\n\t}\n\n\tpublic getOuterHeight(): number {\n\t\treturn this._outerHeight;\n\t}\n\n\tpublic setOuterHeight(outerHeight: number): boolean {\n\t\tif (this._outerHeight === outerHeight) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._outerHeight = outerHeight;\n\t\tthis._colorZonesInvalid = true;\n\t\treturn true;\n\t}\n\n\tpublic setMaximumHeight(maximumHeight: number): boolean {\n\t\tif (this._maximumHeight === maximumHeight) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._maximumHeight = maximumHeight;\n\t\tthis._colorZonesInvalid = true;\n\t\treturn true;\n\t}\n\n\tpublic setMinimumHeight(minimumHeight: number): boolean {\n\t\tif (this._minimumHeight === minimumHeight) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._minimumHeight = minimumHeight;\n\t\tthis._colorZonesInvalid = true;\n\t\treturn true;\n\t}\n\n\tpublic setThemeType(themeType: ThemeType): boolean {\n\t\tif (this._themeType === themeType) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._themeType = themeType;\n\t\tthis._colorZonesInvalid = true;\n\t\treturn true;\n\t}\n\n\tpublic resolveColorZones(): ColorZone[] {\n\t\tconst colorZonesInvalid = this._colorZonesInvalid;\n\t\tconst lineHeight = Math.floor(this._lineHeight); // @perf\n\t\tconst totalHeight = Math.floor(this.getCanvasHeight()); // @perf\n\t\tconst maximumHeight = Math.floor(this._maximumHeight * this._pixelRatio); // @perf\n\t\tconst minimumHeight = Math.floor(this._minimumHeight * this._pixelRatio); // @perf\n\t\tconst themeType = this._themeType; // @perf\n\t\tconst outerHeight = Math.floor(this._outerHeight); // @perf\n\t\tconst heightRatio = totalHeight / outerHeight;\n\n\t\tlet allColorZones: ColorZone[] = [];\n\t\tfor (let i = 0, len = this._zones.length; i < len; i++) {\n\t\t\tlet zone = this._zones[i];\n\n\t\t\tif (!colorZonesInvalid) {\n\t\t\t\tlet colorZones = zone.getColorZones();\n\t\t\t\tif (colorZones) {\n\t\t\t\t\tfor (let j = 0, lenJ = colorZones.length; j < lenJ; j++) {\n\t\t\t\t\t\tallColorZones.push(colorZones[j]);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet colorZones: ColorZone[] = [];\n\t\t\tif (zone.forceHeight) {\n\t\t\t\tlet forcedHeight = Math.floor(zone.forceHeight * this._pixelRatio);\n\n\t\t\t\tlet y1 = Math.floor(this._getVerticalOffsetForLine(zone.startLineNumber));\n\t\t\t\ty1 = Math.floor(y1 * heightRatio);\n\n\t\t\t\tlet y2 = y1 + forcedHeight;\n\t\t\t\tcolorZones.push(this.createZone(totalHeight, y1, y2, forcedHeight, forcedHeight, zone.getColor(themeType), zone.position));\n\t\t\t} else {\n\t\t\t\tlet y1 = Math.floor(this._getVerticalOffsetForLine(zone.startLineNumber));\n\t\t\t\tlet y2 = Math.floor(this._getVerticalOffsetForLine(zone.endLineNumber)) + lineHeight;\n\n\t\t\t\ty1 = Math.floor(y1 * heightRatio);\n\t\t\t\ty2 = Math.floor(y2 * heightRatio);\n\n\t\t\t\t// Figure out if we can render this in one continuous zone\n\t\t\t\tlet zoneLineNumbers = zone.endLineNumber - zone.startLineNumber + 1;\n\t\t\t\tlet zoneMaximumHeight = zoneLineNumbers * maximumHeight;\n\n\t\t\t\tif (y2 - y1 > zoneMaximumHeight) {\n\t\t\t\t\t// We need to draw one zone per line\n\t\t\t\t\tfor (let lineNumber = zone.startLineNumber; lineNumber <= zone.endLineNumber; lineNumber++) {\n\t\t\t\t\t\ty1 = Math.floor(this._getVerticalOffsetForLine(lineNumber));\n\t\t\t\t\t\ty2 = y1 + lineHeight;\n\n\t\t\t\t\t\ty1 = Math.floor(y1 * heightRatio);\n\t\t\t\t\t\ty2 = Math.floor(y2 * heightRatio);\n\n\t\t\t\t\t\tcolorZones.push(this.createZone(totalHeight, y1, y2, minimumHeight, maximumHeight, zone.getColor(themeType), zone.position));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcolorZones.push(this.createZone(totalHeight, y1, y2, minimumHeight, zoneMaximumHeight, zone.getColor(themeType), zone.position));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tzone.setColorZones(colorZones);\n\t\t\tfor (let j = 0, lenJ = colorZones.length; j < lenJ; j++) {\n\t\t\t\tallColorZones.push(colorZones[j]);\n\t\t\t}\n\t\t}\n\n\t\tthis._colorZonesInvalid = false;\n\n\t\tlet sortFunc = (a: ColorZone, b: ColorZone) => {\n\t\t\tif (a.colorId === b.colorId) {\n\t\t\t\tif (a.from === b.from) {\n\t\t\t\t\treturn a.to - b.to;\n\t\t\t\t}\n\t\t\t\treturn a.from - b.from;\n\t\t\t}\n\t\t\treturn a.colorId - b.colorId;\n\t\t};\n\n\t\tallColorZones.sort(sortFunc);\n\t\treturn allColorZones;\n\t}\n\n\tpublic createZone(totalHeight: number, y1: number, y2: number, minimumHeight: number, maximumHeight: number, color: string, position: OverviewRulerLane): ColorZone {\n\t\ttotalHeight = Math.floor(totalHeight); // @perf\n\t\ty1 = Math.floor(y1); // @perf\n\t\ty2 = Math.floor(y2); // @perf\n\t\tminimumHeight = Math.floor(minimumHeight); // @perf\n\t\tmaximumHeight = Math.floor(maximumHeight); // @perf\n\n\t\tlet ycenter = Math.floor((y1 + y2) / 2);\n\t\tlet halfHeight = (y2 - ycenter);\n\n\n\t\tif (halfHeight > maximumHeight / 2) {\n\t\t\thalfHeight = maximumHeight / 2;\n\t\t}\n\t\tif (halfHeight < minimumHeight / 2) {\n\t\t\thalfHeight = minimumHeight / 2;\n\t\t}\n\n\t\tif (ycenter - halfHeight < 0) {\n\t\t\tycenter = halfHeight;\n\t\t}\n\t\tif (ycenter + halfHeight > totalHeight) {\n\t\t\tycenter = totalHeight - halfHeight;\n\t\t}\n\n\t\tlet colorId = this._color2Id[color];\n\t\tif (!colorId) {\n\t\t\tcolorId = (++this._lastAssignedId);\n\t\t\tthis._color2Id[color] = colorId;\n\t\t\tthis._id2Color[colorId] = color;\n\t\t}\n\t\treturn new ColorZone(ycenter - halfHeight, ycenter + halfHeight, colorId, position);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';\nimport { OverviewRulerLane } from 'vs/editor/common/editorCommon';\nimport { OverviewZoneManager, ColorZone, OverviewRulerZone } from 'vs/editor/common/view/overviewZoneManager';\nimport { Color } from 'vs/base/common/color';\nimport { OverviewRulerPosition } from 'vs/editor/common/config/editorOptions';\nimport { ThemeType, LIGHT } from 'vs/platform/theme/common/themeService';\n\nexport class OverviewRulerImpl {\n\n\tprivate _canvasLeftOffset: number;\n\tprivate _domNode: FastDomNode;\n\tprivate _lanesCount: number;\n\tprivate _zoneManager: OverviewZoneManager;\n\tprivate _background: Color;\n\n\tconstructor(\n\t\tcanvasLeftOffset: number, cssClassName: string, scrollHeight: number, lineHeight: number,\n\t\tpixelRatio: number, minimumHeight: number, maximumHeight: number,\n\t\tgetVerticalOffsetForLine: (lineNumber: number) => number\n\t) {\n\t\tthis._canvasLeftOffset = canvasLeftOffset;\n\n\t\tthis._domNode = createFastDomNode(document.createElement('canvas'));\n\n\t\tthis._domNode.setClassName(cssClassName);\n\t\tthis._domNode.setPosition('absolute');\n\t\tthis._domNode.setLayerHinting(true);\n\n\t\tthis._lanesCount = 3;\n\n\t\tthis._background = null;\n\n\t\tthis._zoneManager = new OverviewZoneManager(getVerticalOffsetForLine);\n\t\tthis._zoneManager.setMinimumHeight(minimumHeight);\n\t\tthis._zoneManager.setMaximumHeight(maximumHeight);\n\t\tthis._zoneManager.setThemeType(LIGHT);\n\t\tthis._zoneManager.setDOMWidth(0);\n\t\tthis._zoneManager.setDOMHeight(0);\n\t\tthis._zoneManager.setOuterHeight(scrollHeight);\n\t\tthis._zoneManager.setLineHeight(lineHeight);\n\n\t\tthis._zoneManager.setPixelRatio(pixelRatio);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._zoneManager = null;\n\t}\n\n\tpublic setLayout(position: OverviewRulerPosition, render: boolean): void {\n\t\tthis._domNode.setTop(position.top);\n\t\tthis._domNode.setRight(position.right);\n\n\t\tlet hasChanged = false;\n\t\thasChanged = this._zoneManager.setDOMWidth(position.width) || hasChanged;\n\t\thasChanged = this._zoneManager.setDOMHeight(position.height) || hasChanged;\n\n\t\tif (hasChanged) {\n\t\t\tthis._domNode.setWidth(this._zoneManager.getDOMWidth());\n\t\t\tthis._domNode.setHeight(this._zoneManager.getDOMHeight());\n\t\t\tthis._domNode.domNode.width = this._zoneManager.getCanvasWidth();\n\t\t\tthis._domNode.domNode.height = this._zoneManager.getCanvasHeight();\n\n\t\t\tif (render) {\n\t\t\t\tthis.render(true);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic getLanesCount(): number {\n\t\treturn this._lanesCount;\n\t}\n\n\tpublic setLanesCount(newLanesCount: number, render: boolean): void {\n\t\tthis._lanesCount = newLanesCount;\n\n\t\tif (render) {\n\t\t\tthis.render(true);\n\t\t}\n\t}\n\n\tpublic setThemeType(themeType: ThemeType, render: boolean): void {\n\t\tthis._zoneManager.setThemeType(themeType);\n\n\t\tif (render) {\n\t\t\tthis.render(true);\n\t\t}\n\t}\n\n\tpublic setUseBackground(background: Color, render: boolean): void {\n\t\tthis._background = background;\n\n\t\tif (render) {\n\t\t\tthis.render(true);\n\t\t}\n\t}\n\n\tpublic getDomNode(): HTMLCanvasElement {\n\t\treturn this._domNode.domNode;\n\t}\n\n\tpublic getPixelWidth(): number {\n\t\treturn this._zoneManager.getCanvasWidth();\n\t}\n\n\tpublic getPixelHeight(): number {\n\t\treturn this._zoneManager.getCanvasHeight();\n\t}\n\n\tpublic setScrollHeight(scrollHeight: number, render: boolean): void {\n\t\tthis._zoneManager.setOuterHeight(scrollHeight);\n\t\tif (render) {\n\t\t\tthis.render(true);\n\t\t}\n\t}\n\n\tpublic setLineHeight(lineHeight: number, render: boolean): void {\n\t\tthis._zoneManager.setLineHeight(lineHeight);\n\t\tif (render) {\n\t\t\tthis.render(true);\n\t\t}\n\t}\n\n\tpublic setPixelRatio(pixelRatio: number, render: boolean): void {\n\t\tthis._zoneManager.setPixelRatio(pixelRatio);\n\t\tthis._domNode.setWidth(this._zoneManager.getDOMWidth());\n\t\tthis._domNode.setHeight(this._zoneManager.getDOMHeight());\n\t\tthis._domNode.domNode.width = this._zoneManager.getCanvasWidth();\n\t\tthis._domNode.domNode.height = this._zoneManager.getCanvasHeight();\n\t\tif (render) {\n\t\t\tthis.render(true);\n\t\t}\n\t}\n\n\tpublic setZones(zones: OverviewRulerZone[], render: boolean): void {\n\t\tthis._zoneManager.setZones(zones);\n\t\tif (render) {\n\t\t\tthis.render(false);\n\t\t}\n\t}\n\n\tpublic render(forceRender: boolean): boolean {\n\t\tif (this._zoneManager.getOuterHeight() === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst width = this._zoneManager.getCanvasWidth();\n\t\tconst height = this._zoneManager.getCanvasHeight();\n\n\t\tlet colorZones = this._zoneManager.resolveColorZones();\n\t\tlet id2Color = this._zoneManager.getId2Color();\n\n\t\tlet ctx = this._domNode.domNode.getContext('2d');\n\t\tif (this._background === null) {\n\t\t\tctx.clearRect(0, 0, width, height);\n\t\t} else {\n\t\t\tctx.fillStyle = this._background.toRGBHex();\n\t\t\tctx.fillRect(0, 0, width, height);\n\t\t}\n\n\t\tif (colorZones.length > 0) {\n\t\t\tlet remainingWidth = width - this._canvasLeftOffset;\n\n\t\t\tif (this._lanesCount >= 3) {\n\t\t\t\tthis._renderThreeLanes(ctx, colorZones, id2Color, remainingWidth);\n\t\t\t} else if (this._lanesCount === 2) {\n\t\t\t\tthis._renderTwoLanes(ctx, colorZones, id2Color, remainingWidth);\n\t\t\t} else if (this._lanesCount === 1) {\n\t\t\t\tthis._renderOneLane(ctx, colorZones, id2Color, remainingWidth);\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate _renderOneLane(ctx: CanvasRenderingContext2D, colorZones: ColorZone[], id2Color: string[], w: number): void {\n\n\t\tthis._renderVerticalPatch(ctx, colorZones, id2Color, OverviewRulerLane.Left | OverviewRulerLane.Center | OverviewRulerLane.Right, this._canvasLeftOffset, w);\n\n\t}\n\n\tprivate _renderTwoLanes(ctx: CanvasRenderingContext2D, colorZones: ColorZone[], id2Color: string[], w: number): void {\n\n\t\tlet leftWidth = Math.floor(w / 2);\n\t\tlet rightWidth = w - leftWidth;\n\t\tlet leftOffset = this._canvasLeftOffset;\n\t\tlet rightOffset = this._canvasLeftOffset + leftWidth;\n\n\t\tthis._renderVerticalPatch(ctx, colorZones, id2Color, OverviewRulerLane.Left | OverviewRulerLane.Center, leftOffset, leftWidth);\n\t\tthis._renderVerticalPatch(ctx, colorZones, id2Color, OverviewRulerLane.Right, rightOffset, rightWidth);\n\t}\n\n\tprivate _renderThreeLanes(ctx: CanvasRenderingContext2D, colorZones: ColorZone[], id2Color: string[], w: number): void {\n\n\t\tlet leftWidth = Math.floor(w / 3);\n\t\tlet rightWidth = Math.floor(w / 3);\n\t\tlet centerWidth = w - leftWidth - rightWidth;\n\t\tlet leftOffset = this._canvasLeftOffset;\n\t\tlet centerOffset = this._canvasLeftOffset + leftWidth;\n\t\tlet rightOffset = this._canvasLeftOffset + leftWidth + centerWidth;\n\n\t\tthis._renderVerticalPatch(ctx, colorZones, id2Color, OverviewRulerLane.Left, leftOffset, leftWidth);\n\t\tthis._renderVerticalPatch(ctx, colorZones, id2Color, OverviewRulerLane.Center, centerOffset, centerWidth);\n\t\tthis._renderVerticalPatch(ctx, colorZones, id2Color, OverviewRulerLane.Right, rightOffset, rightWidth);\n\t}\n\n\tprivate _renderVerticalPatch(ctx: CanvasRenderingContext2D, colorZones: ColorZone[], id2Color: string[], laneMask: number, xpos: number, width: number): void {\n\n\t\tlet currentColorId = 0;\n\t\tlet currentFrom = 0;\n\t\tlet currentTo = 0;\n\n\t\tfor (let i = 0, len = colorZones.length; i < len; i++) {\n\t\t\tlet zone = colorZones[i];\n\n\t\t\tif (!(zone.position & laneMask)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet zoneColorId = zone.colorId;\n\t\t\tlet zoneFrom = zone.from;\n\t\t\tlet zoneTo = zone.to;\n\n\t\t\tif (zoneColorId !== currentColorId) {\n\t\t\t\tctx.fillRect(xpos, currentFrom, width, currentTo - currentFrom);\n\n\t\t\t\tcurrentColorId = zoneColorId;\n\t\t\t\tctx.fillStyle = id2Color[currentColorId];\n\t\t\t\tcurrentFrom = zoneFrom;\n\t\t\t\tcurrentTo = zoneTo;\n\t\t\t} else {\n\t\t\t\tif (currentTo >= zoneFrom) {\n\t\t\t\t\tcurrentTo = Math.max(currentTo, zoneTo);\n\t\t\t\t} else {\n\t\t\t\t\tctx.fillRect(xpos, currentFrom, width, currentTo - currentFrom);\n\t\t\t\t\tcurrentFrom = zoneFrom;\n\t\t\t\t\tcurrentTo = zoneTo;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tctx.fillRect(xpos, currentFrom, width, currentTo - currentFrom);\n\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { ViewPart } from 'vs/editor/browser/view/viewPart';\nimport { OverviewRulerImpl } from 'vs/editor/browser/viewParts/overviewRuler/overviewRulerImpl';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/view/renderingContext';\nimport { Position } from 'vs/editor/common/core/position';\nimport { TokenizationRegistry } from 'vs/editor/common/modes';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\nimport { OverviewRulerZone } from 'vs/editor/common/view/overviewZoneManager';\nimport { editorOverviewRulerBorder, editorCursor } from 'vs/editor/common/view/editorColorRegistry';\nimport { Color } from 'vs/base/common/color';\nimport { ThemeColor } from 'vs/platform/theme/common/themeService';\n\nexport class DecorationsOverviewRuler extends ViewPart {\n\n\tstatic MIN_DECORATION_HEIGHT = 6;\n\tstatic MAX_DECORATION_HEIGHT = 60;\n\n\tprivate readonly _tokensColorTrackerListener: IDisposable;\n\n\tprivate _overviewRuler: OverviewRulerImpl;\n\n\tprivate _renderBorder: boolean;\n\tprivate _borderColor: string;\n\tprivate _cursorColor: string;\n\n\tprivate _shouldUpdateDecorations: boolean;\n\tprivate _shouldUpdateCursorPosition: boolean;\n\n\tprivate _hideCursor: boolean;\n\tprivate _cursorPositions: Position[];\n\n\tprivate _zonesFromDecorations: OverviewRulerZone[];\n\tprivate _zonesFromCursors: OverviewRulerZone[];\n\n\tconstructor(context: ViewContext) {\n\t\tsuper(context);\n\t\tthis._overviewRuler = new OverviewRulerImpl(\n\t\t\t1,\n\t\t\t'decorationsOverviewRuler',\n\t\t\tthis._context.viewLayout.getScrollHeight(),\n\t\t\tthis._context.configuration.editor.lineHeight,\n\t\t\tthis._context.configuration.editor.pixelRatio,\n\t\t\tDecorationsOverviewRuler.MIN_DECORATION_HEIGHT,\n\t\t\tDecorationsOverviewRuler.MAX_DECORATION_HEIGHT,\n\t\t\t(lineNumber: number) => this._context.viewLayout.getVerticalOffsetForLineNumber(lineNumber)\n\t\t);\n\t\tthis._overviewRuler.setLanesCount(this._context.configuration.editor.viewInfo.overviewRulerLanes, false);\n\t\tthis._overviewRuler.setLayout(this._context.configuration.editor.layoutInfo.overviewRuler, false);\n\n\t\tthis._renderBorder = this._context.configuration.editor.viewInfo.overviewRulerBorder;\n\n\t\tthis._updateColors();\n\n\t\tthis._updateBackground(false);\n\t\tthis._tokensColorTrackerListener = TokenizationRegistry.onDidChange((e) => {\n\t\t\tif (e.changedColorMap) {\n\t\t\t\tthis._updateBackground(true);\n\t\t\t}\n\t\t});\n\n\t\tthis._shouldUpdateDecorations = true;\n\t\tthis._zonesFromDecorations = [];\n\n\t\tthis._shouldUpdateCursorPosition = true;\n\t\tthis._hideCursor = this._context.configuration.editor.viewInfo.hideCursorInOverviewRuler;\n\n\t\tthis._zonesFromCursors = [];\n\t\tthis._cursorPositions = [];\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t\tthis._overviewRuler.dispose();\n\t\tthis._tokensColorTrackerListener.dispose();\n\t}\n\n\tprivate _updateBackground(render: boolean): void {\n\t\tconst minimapEnabled = this._context.configuration.editor.viewInfo.minimap.enabled;\n\t\tthis._overviewRuler.setUseBackground((minimapEnabled ? TokenizationRegistry.getDefaultBackground() : null), render);\n\t}\n\n\t// ---- begin view event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tlet prevLanesCount = this._overviewRuler.getLanesCount();\n\t\tlet newLanesCount = this._context.configuration.editor.viewInfo.overviewRulerLanes;\n\n\t\tif (prevLanesCount !== newLanesCount) {\n\t\t\tthis._overviewRuler.setLanesCount(newLanesCount, false);\n\t\t}\n\n\t\tif (e.lineHeight) {\n\t\t\tthis._overviewRuler.setLineHeight(this._context.configuration.editor.lineHeight, false);\n\t\t}\n\n\t\tif (e.pixelRatio) {\n\t\t\tthis._overviewRuler.setPixelRatio(this._context.configuration.editor.pixelRatio, false);\n\t\t}\n\n\t\tif (e.viewInfo) {\n\t\t\tthis._renderBorder = this._context.configuration.editor.viewInfo.overviewRulerBorder;\n\t\t\tthis._hideCursor = this._context.configuration.editor.viewInfo.hideCursorInOverviewRuler;\n\t\t\tthis._shouldUpdateCursorPosition = true;\n\t\t\tthis._updateBackground(false);\n\t\t}\n\n\t\tif (e.layoutInfo) {\n\t\t\tthis._overviewRuler.setLayout(this._context.configuration.editor.layoutInfo.overviewRuler, false);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean {\n\t\tthis._shouldUpdateCursorPosition = true;\n\t\tthis._cursorPositions = [];\n\t\tfor (let i = 0, len = e.selections.length; i < len; i++) {\n\t\t\tthis._cursorPositions[i] = e.selections[i].getPosition();\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean {\n\t\tthis._shouldUpdateDecorations = true;\n\t\treturn true;\n\t}\n\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\tthis._shouldUpdateCursorPosition = true;\n\t\tthis._shouldUpdateDecorations = true;\n\t\treturn true;\n\t}\n\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\tthis._overviewRuler.setScrollHeight(e.scrollHeight, false);\n\t\treturn super.onScrollChanged(e) || e.scrollHeightChanged;\n\t}\n\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\n\tpublic onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean {\n\t\tthis._updateColors();\n\t\tthis._shouldUpdateDecorations = true;\n\t\tthis._shouldUpdateCursorPosition = true;\n\t\treturn true;\n\t}\n\n\t// ---- end view event handlers\n\n\tpublic getDomNode(): HTMLElement {\n\t\treturn this._overviewRuler.getDomNode();\n\t}\n\n\tprivate _updateColors() {\n\t\tlet borderColor = this._context.theme.getColor(editorOverviewRulerBorder);\n\t\tthis._borderColor = borderColor ? borderColor.toString() : null;\n\n\t\tlet cursorColor = this._context.theme.getColor(editorCursor);\n\t\tthis._cursorColor = cursorColor ? cursorColor.transparent(0.7).toString() : null;\n\n\t\tthis._overviewRuler.setThemeType(this._context.theme.type, false);\n\t}\n\n\tprivate _createZonesFromDecorations(): OverviewRulerZone[] {\n\t\tlet decorations = this._context.model.getAllOverviewRulerDecorations();\n\t\tlet zones: OverviewRulerZone[] = [];\n\n\t\tfor (let i = 0, len = decorations.length; i < len; i++) {\n\t\t\tlet dec = decorations[i];\n\t\t\tlet overviewRuler = dec.source.options.overviewRuler;\n\t\t\tzones.push(new OverviewRulerZone(\n\t\t\t\tdec.range.startLineNumber,\n\t\t\t\tdec.range.endLineNumber,\n\t\t\t\toverviewRuler.position,\n\t\t\t\t0,\n\t\t\t\tthis.resolveRulerColor(overviewRuler.color),\n\t\t\t\tthis.resolveRulerColor(overviewRuler.darkColor),\n\t\t\t\tthis.resolveRulerColor(overviewRuler.hcColor)\n\t\t\t));\n\t\t}\n\n\t\treturn zones;\n\t}\n\n\tprivate resolveRulerColor(color: string | ThemeColor): string {\n\t\tif (editorCommon.isThemeColor(color)) {\n\t\t\tlet c = this._context.theme.getColor(color.id) || Color.transparent;\n\t\t\treturn c.toString();\n\t\t}\n\t\treturn color;\n\t}\n\n\tprivate _createZonesFromCursors(): OverviewRulerZone[] {\n\t\tlet zones: OverviewRulerZone[] = [];\n\n\t\tfor (let i = 0, len = this._cursorPositions.length; i < len; i++) {\n\t\t\tlet cursor = this._cursorPositions[i];\n\n\t\t\tzones.push(new OverviewRulerZone(\n\t\t\t\tcursor.lineNumber,\n\t\t\t\tcursor.lineNumber,\n\t\t\t\teditorCommon.OverviewRulerLane.Full,\n\t\t\t\t2,\n\t\t\t\tthis._cursorColor,\n\t\t\t\tthis._cursorColor,\n\t\t\t\tthis._cursorColor\n\t\t\t));\n\t\t}\n\n\t\treturn zones;\n\t}\n\n\tpublic prepareRender(ctx: RenderingContext): void {\n\t\t// Nothing to read\n\t}\n\n\tpublic render(ctx: RestrictedRenderingContext): void {\n\t\tif (this._shouldUpdateDecorations || this._shouldUpdateCursorPosition) {\n\n\t\t\tif (this._shouldUpdateDecorations) {\n\t\t\t\tthis._shouldUpdateDecorations = false;\n\t\t\t\tthis._zonesFromDecorations = this._createZonesFromDecorations();\n\t\t\t}\n\n\t\t\tif (this._shouldUpdateCursorPosition) {\n\t\t\t\tthis._shouldUpdateCursorPosition = false;\n\t\t\t\tif (this._hideCursor) {\n\t\t\t\t\tthis._zonesFromCursors = [];\n\t\t\t\t} else {\n\t\t\t\t\tthis._zonesFromCursors = this._createZonesFromCursors();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet allZones: OverviewRulerZone[] = [];\n\t\t\tallZones = allZones.concat(this._zonesFromCursors);\n\t\t\tallZones = allZones.concat(this._zonesFromDecorations);\n\n\t\t\tthis._overviewRuler.setZones(allZones, false);\n\t\t}\n\n\t\tlet hasRendered = this._overviewRuler.render(false);\n\n\t\tif (hasRendered && this._renderBorder && this._borderColor && this._overviewRuler.getLanesCount() > 0 && (this._zonesFromDecorations.length > 0 || this._zonesFromCursors.length > 0)) {\n\t\t\tlet ctx2 = this._overviewRuler.getDomNode().getContext('2d');\n\t\t\tctx2.beginPath();\n\t\t\tctx2.lineWidth = 1;\n\t\t\tctx2.strokeStyle = this._borderColor;\n\t\t\tctx2.moveTo(0, 0);\n\t\t\tctx2.lineTo(0, this._overviewRuler.getPixelHeight());\n\t\t\tctx2.stroke();\n\n\t\t\tctx2.moveTo(0, 0);\n\t\t\tctx2.lineTo(this._overviewRuler.getPixelWidth(), 0);\n\t\t\tctx2.stroke();\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { ViewEventHandler } from 'vs/editor/common/viewModel/viewEventHandler';\nimport { IOverviewRuler } from 'vs/editor/browser/editorBrowser';\nimport { OverviewRulerImpl } from 'vs/editor/browser/viewParts/overviewRuler/overviewRulerImpl';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\nimport { OverviewRulerPosition } from 'vs/editor/common/config/editorOptions';\nimport { OverviewRulerZone } from 'vs/editor/common/view/overviewZoneManager';\n\nexport class OverviewRuler extends ViewEventHandler implements IOverviewRuler {\n\n\tprivate _context: ViewContext;\n\tprivate _overviewRuler: OverviewRulerImpl;\n\n\tconstructor(context: ViewContext, cssClassName: string, minimumHeight: number, maximumHeight: number) {\n\t\tsuper();\n\t\tthis._context = context;\n\t\tthis._overviewRuler = new OverviewRulerImpl(\n\t\t\t0,\n\t\t\tcssClassName,\n\t\t\tthis._context.viewLayout.getScrollHeight(),\n\t\t\tthis._context.configuration.editor.lineHeight,\n\t\t\tthis._context.configuration.editor.pixelRatio,\n\t\t\tminimumHeight,\n\t\t\tmaximumHeight,\n\t\t\t(lineNumber: number) => this._context.viewLayout.getVerticalOffsetForLineNumber(lineNumber)\n\t\t);\n\n\t\tthis._context.addEventHandler(this);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._context.removeEventHandler(this);\n\t\tthis._overviewRuler.dispose();\n\t\tsuper.dispose();\n\t}\n\n\t// ---- begin view event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tif (e.lineHeight) {\n\t\t\tthis._overviewRuler.setLineHeight(this._context.configuration.editor.lineHeight, true);\n\t\t}\n\n\t\tif (e.pixelRatio) {\n\t\t\tthis._overviewRuler.setPixelRatio(this._context.configuration.editor.pixelRatio, true);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent): boolean {\n\t\treturn true;\n\t}\n\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\tthis._overviewRuler.setScrollHeight(e.scrollHeight, true);\n\t\treturn super.onScrollChanged(e) || e.scrollHeightChanged;\n\t}\n\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\n\t// ---- end view event handlers\n\n\tpublic getDomNode(): HTMLElement {\n\t\treturn this._overviewRuler.getDomNode();\n\t}\n\n\tpublic setLayout(position: OverviewRulerPosition): void {\n\t\tthis._overviewRuler.setLayout(position, true);\n\t}\n\n\tpublic setZones(zones: OverviewRulerZone[]): void {\n\t\tthis._overviewRuler.setZones(zones, true);\n\t}\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'use strict';\n\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport * as dom from 'vs/base/browser/dom';\nimport { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';\nimport { ICommandService } from 'vs/platform/commands/common/commands';\nimport { Range } from 'vs/editor/common/core/range';\nimport { ViewEventHandler } from 'vs/editor/common/viewModel/viewEventHandler';\nimport { Configuration } from 'vs/editor/browser/config/configuration';\nimport { TextAreaHandler, ITextAreaHandlerHelper } from 'vs/editor/browser/controller/textAreaHandler';\nimport { PointerHandler } from 'vs/editor/browser/controller/pointerHandler';\nimport * as editorBrowser from 'vs/editor/browser/editorBrowser';\nimport { ViewController, ExecCoreEditorCommandFunc } from 'vs/editor/browser/view/viewController';\nimport { ViewEventDispatcher } from 'vs/editor/common/view/viewEventDispatcher';\nimport { ContentViewOverlays, MarginViewOverlays } from 'vs/editor/browser/view/viewOverlays';\nimport { ViewContentWidgets } from 'vs/editor/browser/viewParts/contentWidgets/contentWidgets';\nimport { CurrentLineHighlightOverlay } from 'vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight';\nimport { CurrentLineMarginHighlightOverlay } from 'vs/editor/browser/viewParts/currentLineMarginHighlight/currentLineMarginHighlight';\nimport { DecorationsOverlay } from 'vs/editor/browser/viewParts/decorations/decorations';\nimport { GlyphMarginOverlay } from 'vs/editor/browser/viewParts/glyphMargin/glyphMargin';\nimport { LineNumbersOverlay } from 'vs/editor/browser/viewParts/lineNumbers/lineNumbers';\nimport { IndentGuidesOverlay } from 'vs/editor/browser/viewParts/indentGuides/indentGuides';\nimport { ViewLines } from 'vs/editor/browser/viewParts/lines/viewLines';\nimport { Margin } from 'vs/editor/browser/viewParts/margin/margin';\nimport { LinesDecorationsOverlay } from 'vs/editor/browser/viewParts/linesDecorations/linesDecorations';\nimport { MarginViewLineDecorationsOverlay } from 'vs/editor/browser/viewParts/marginDecorations/marginDecorations';\nimport { ViewOverlayWidgets } from 'vs/editor/browser/viewParts/overlayWidgets/overlayWidgets';\nimport { DecorationsOverviewRuler } from 'vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler';\nimport { OverviewRuler } from 'vs/editor/browser/viewParts/overviewRuler/overviewRuler';\nimport { Rulers } from 'vs/editor/browser/viewParts/rulers/rulers';\nimport { ScrollDecorationViewPart } from 'vs/editor/browser/viewParts/scrollDecoration/scrollDecoration';\nimport { SelectionsOverlay } from 'vs/editor/browser/viewParts/selections/selections';\nimport { ViewCursors } from 'vs/editor/browser/viewParts/viewCursors/viewCursors';\nimport { ViewZones } from 'vs/editor/browser/viewParts/viewZones/viewZones';\nimport { ViewPart, PartFingerprint, PartFingerprints } from 'vs/editor/browser/view/viewPart';\nimport { ViewContext } from 'vs/editor/common/view/viewContext';\nimport { IViewModel } from 'vs/editor/common/viewModel/viewModel';\nimport { RenderingContext } from 'vs/editor/common/view/renderingContext';\nimport { IPointerHandlerHelper } from 'vs/editor/browser/controller/mouseHandler';\nimport { ViewOutgoingEvents } from 'vs/editor/browser/view/viewOutgoingEvents';\nimport { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData';\nimport { EditorScrollbar } from 'vs/editor/browser/viewParts/editorScrollbar/editorScrollbar';\nimport { Minimap } from 'vs/editor/browser/viewParts/minimap/minimap';\nimport * as viewEvents from 'vs/editor/common/view/viewEvents';\nimport { IThemeService, getThemeTypeSelector } from 'vs/platform/theme/common/themeService';\nimport { Cursor } from 'vs/editor/common/controller/cursor';\nimport { IMouseEvent } from 'vs/base/browser/mouseEvent';\n\nexport interface IContentWidgetData {\n\twidget: editorBrowser.IContentWidget;\n\tposition: editorBrowser.IContentWidgetPosition;\n}\n\nexport interface IOverlayWidgetData {\n\twidget: editorBrowser.IOverlayWidget;\n\tposition: editorBrowser.IOverlayWidgetPosition;\n}\n\nexport class View extends ViewEventHandler {\n\n\tprivate eventDispatcher: ViewEventDispatcher;\n\n\tprivate _scrollbar: EditorScrollbar;\n\tprivate _context: ViewContext;\n\tprivate _cursor: Cursor;\n\n\t// The view lines\n\tprivate viewLines: ViewLines;\n\n\t// These are parts, but we must do some API related calls on them, so we keep a reference\n\tprivate viewZones: ViewZones;\n\tprivate contentWidgets: ViewContentWidgets;\n\tprivate overlayWidgets: ViewOverlayWidgets;\n\tprivate viewCursors: ViewCursors;\n\tprivate viewParts: ViewPart[];\n\n\tprivate readonly _textAreaHandler: TextAreaHandler;\n\tprivate readonly pointerHandler: PointerHandler;\n\n\tprivate readonly outgoingEvents: ViewOutgoingEvents;\n\n\t// Dom nodes\n\tprivate linesContent: FastDomNode;\n\tpublic domNode: FastDomNode;\n\tprivate overflowGuardContainer: FastDomNode;\n\n\t// Actual mutable state\n\tprivate _isDisposed: boolean;\n\n\tprivate _renderAnimationFrame: IDisposable;\n\n\tconstructor(\n\t\tcommandService: ICommandService,\n\t\tconfiguration: Configuration,\n\t\tthemeService: IThemeService,\n\t\tmodel: IViewModel,\n\t\tcursor: Cursor,\n\t\texecCoreEditorCommandFunc: ExecCoreEditorCommandFunc\n\t) {\n\t\tsuper();\n\t\tthis._isDisposed = false;\n\t\tthis._cursor = cursor;\n\t\tthis._renderAnimationFrame = null;\n\t\tthis.outgoingEvents = new ViewOutgoingEvents(model);\n\n\t\tlet viewController = new ViewController(configuration, model, execCoreEditorCommandFunc, this.outgoingEvents, commandService);\n\n\t\t// The event dispatcher will always go through _renderOnce before dispatching any events\n\t\tthis.eventDispatcher = new ViewEventDispatcher((callback: () => void) => this._renderOnce(callback));\n\n\t\t// Ensure the view is the first event handler in order to update the layout\n\t\tthis.eventDispatcher.addEventHandler(this);\n\n\t\t// The view context is passed on to most classes (basically to reduce param. counts in ctors)\n\t\tthis._context = new ViewContext(configuration, themeService.getTheme(), model, this.eventDispatcher);\n\n\t\tthis._register(themeService.onThemeChange(theme => {\n\t\t\tthis._context.theme = theme;\n\t\t\tthis.eventDispatcher.emit(new viewEvents.ViewThemeChangedEvent());\n\t\t\tthis.render(true, false);\n\t\t}));\n\n\t\tthis.viewParts = [];\n\n\t\t// Keyboard handler\n\t\tthis._textAreaHandler = new TextAreaHandler(this._context, viewController, this.createTextAreaHandlerHelper());\n\t\tthis.viewParts.push(this._textAreaHandler);\n\n\t\tthis.createViewParts();\n\t\tthis._setLayout();\n\n\t\t// Pointer handler\n\t\tthis.pointerHandler = new PointerHandler(this._context, viewController, this.createPointerHandlerHelper());\n\n\t\tthis._register(model.addEventListener((events: viewEvents.ViewEvent[]) => {\n\t\t\tthis.eventDispatcher.emitMany(events);\n\t\t}));\n\n\t\tthis._register(this._cursor.addEventListener((events: viewEvents.ViewEvent[]) => {\n\t\t\tthis.eventDispatcher.emitMany(events);\n\t\t}));\n\t}\n\n\tprivate createViewParts(): void {\n\t\t// These two dom nodes must be constructed up front, since references are needed in the layout provider (scrolling & co.)\n\t\tthis.linesContent = createFastDomNode(document.createElement('div'));\n\t\tthis.linesContent.setClassName('lines-content' + ' monaco-editor-background');\n\t\tthis.linesContent.setPosition('absolute');\n\n\t\tthis.domNode = createFastDomNode(document.createElement('div'));\n\t\tthis.domNode.setClassName(this.getEditorClassName());\n\n\t\tthis.overflowGuardContainer = createFastDomNode(document.createElement('div'));\n\t\tPartFingerprints.write(this.overflowGuardContainer, PartFingerprint.OverflowGuard);\n\t\tthis.overflowGuardContainer.setClassName('overflow-guard');\n\n\t\tthis._scrollbar = new EditorScrollbar(this._context, this.linesContent, this.domNode, this.overflowGuardContainer);\n\t\tthis.viewParts.push(this._scrollbar);\n\n\t\t// View Lines\n\t\tthis.viewLines = new ViewLines(this._context, this.linesContent);\n\n\t\t// View Zones\n\t\tthis.viewZones = new ViewZones(this._context);\n\t\tthis.viewParts.push(this.viewZones);\n\n\t\t// Decorations overview ruler\n\t\tlet decorationsOverviewRuler = new DecorationsOverviewRuler(this._context);\n\t\tthis.viewParts.push(decorationsOverviewRuler);\n\n\n\t\tlet scrollDecoration = new ScrollDecorationViewPart(this._context);\n\t\tthis.viewParts.push(scrollDecoration);\n\n\t\tlet contentViewOverlays = new ContentViewOverlays(this._context);\n\t\tthis.viewParts.push(contentViewOverlays);\n\t\tcontentViewOverlays.addDynamicOverlay(new CurrentLineHighlightOverlay(this._context));\n\t\tcontentViewOverlays.addDynamicOverlay(new SelectionsOverlay(this._context));\n\t\tcontentViewOverlays.addDynamicOverlay(new DecorationsOverlay(this._context));\n\t\tcontentViewOverlays.addDynamicOverlay(new IndentGuidesOverlay(this._context));\n\n\t\tlet marginViewOverlays = new MarginViewOverlays(this._context);\n\t\tthis.viewParts.push(marginViewOverlays);\n\t\tmarginViewOverlays.addDynamicOverlay(new CurrentLineMarginHighlightOverlay(this._context));\n\t\tmarginViewOverlays.addDynamicOverlay(new GlyphMarginOverlay(this._context));\n\t\tmarginViewOverlays.addDynamicOverlay(new MarginViewLineDecorationsOverlay(this._context));\n\t\tmarginViewOverlays.addDynamicOverlay(new LinesDecorationsOverlay(this._context));\n\t\tmarginViewOverlays.addDynamicOverlay(new LineNumbersOverlay(this._context));\n\n\t\tlet margin = new Margin(this._context);\n\t\tmargin.getDomNode().appendChild(this.viewZones.marginDomNode);\n\t\tmargin.getDomNode().appendChild(marginViewOverlays.getDomNode());\n\t\tthis.viewParts.push(margin);\n\n\t\t// Content widgets\n\t\tthis.contentWidgets = new ViewContentWidgets(this._context, this.domNode);\n\t\tthis.viewParts.push(this.contentWidgets);\n\n\t\tthis.viewCursors = new ViewCursors(this._context);\n\t\tthis.viewParts.push(this.viewCursors);\n\n\t\t// Overlay widgets\n\t\tthis.overlayWidgets = new ViewOverlayWidgets(this._context);\n\t\tthis.viewParts.push(this.overlayWidgets);\n\n\t\tlet rulers = new Rulers(this._context);\n\t\tthis.viewParts.push(rulers);\n\n\t\tlet minimap = new Minimap(this._context);\n\t\tthis.viewParts.push(minimap);\n\n\t\t// -------------- Wire dom nodes up\n\n\t\tif (decorationsOverviewRuler) {\n\t\t\tlet overviewRulerData = this._scrollbar.getOverviewRulerLayoutInfo();\n\t\t\toverviewRulerData.parent.insertBefore(decorationsOverviewRuler.getDomNode(), overviewRulerData.insertBefore);\n\t\t}\n\n\t\tthis.linesContent.appendChild(contentViewOverlays.getDomNode());\n\t\tthis.linesContent.appendChild(rulers.domNode);\n\t\tthis.linesContent.appendChild(this.viewZones.domNode);\n\t\tthis.linesContent.appendChild(this.viewLines.getDomNode());\n\t\tthis.linesContent.appendChild(this.contentWidgets.domNode);\n\t\tthis.linesContent.appendChild(this.viewCursors.getDomNode());\n\t\tthis.overflowGuardContainer.appendChild(margin.getDomNode());\n\t\tthis.overflowGuardContainer.appendChild(this._scrollbar.getDomNode());\n\t\tthis.overflowGuardContainer.appendChild(scrollDecoration.getDomNode());\n\t\tthis.overflowGuardContainer.appendChild(this._textAreaHandler.textArea);\n\t\tthis.overflowGuardContainer.appendChild(this._textAreaHandler.textAreaCover);\n\t\tthis.overflowGuardContainer.appendChild(this.overlayWidgets.getDomNode());\n\t\tthis.overflowGuardContainer.appendChild(minimap.getDomNode());\n\t\tthis.domNode.appendChild(this.overflowGuardContainer);\n\t\tthis.domNode.appendChild(this.contentWidgets.overflowingContentWidgetsDomNode);\n\t}\n\n\tprivate _flushAccumulatedAndRenderNow(): void {\n\t\tthis._renderNow();\n\t}\n\n\tprivate createPointerHandlerHelper(): IPointerHandlerHelper {\n\t\treturn {\n\t\t\tviewDomNode: this.domNode.domNode,\n\t\t\tlinesContentDomNode: this.linesContent.domNode,\n\n\t\t\tfocusTextArea: () => {\n\t\t\t\tthis.focus();\n\t\t\t},\n\n\t\t\tgetLastViewCursorsRenderData: () => {\n\t\t\t\treturn this.viewCursors.getLastRenderData() || [];\n\t\t\t},\n\t\t\tshouldSuppressMouseDownOnViewZone: (viewZoneId: number) => {\n\t\t\t\treturn this.viewZones.shouldSuppressMouseDownOnViewZone(viewZoneId);\n\t\t\t},\n\t\t\tshouldSuppressMouseDownOnWidget: (widgetId: string) => {\n\t\t\t\treturn this.contentWidgets.shouldSuppressMouseDownOnWidget(widgetId);\n\t\t\t},\n\t\t\tgetPositionFromDOMInfo: (spanNode: HTMLElement, offset: number) => {\n\t\t\t\tthis._flushAccumulatedAndRenderNow();\n\t\t\t\treturn this.viewLines.getPositionFromDOMInfo(spanNode, offset);\n\t\t\t},\n\n\t\t\tvisibleRangeForPosition2: (lineNumber: number, column: number) => {\n\t\t\t\tthis._flushAccumulatedAndRenderNow();\n\t\t\t\tlet visibleRanges = this.viewLines.visibleRangesForRange2(new Range(lineNumber, column, lineNumber, column));\n\t\t\t\tif (!visibleRanges) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn visibleRanges[0];\n\t\t\t},\n\n\t\t\tgetLineWidth: (lineNumber: number) => {\n\t\t\t\tthis._flushAccumulatedAndRenderNow();\n\t\t\t\treturn this.viewLines.getLineWidth(lineNumber);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate createTextAreaHandlerHelper(): ITextAreaHandlerHelper {\n\t\treturn {\n\t\t\tvisibleRangeForPositionRelativeToEditor: (lineNumber: number, column: number) => {\n\t\t\t\tthis._flushAccumulatedAndRenderNow();\n\t\t\t\tlet visibleRanges = this.viewLines.visibleRangesForRange2(new Range(lineNumber, column, lineNumber, column));\n\t\t\t\tif (!visibleRanges) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn visibleRanges[0];\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate _setLayout(): void {\n\t\tconst layoutInfo = this._context.configuration.editor.layoutInfo;\n\t\tthis.domNode.setWidth(layoutInfo.width);\n\t\tthis.domNode.setHeight(layoutInfo.height);\n\n\t\tthis.overflowGuardContainer.setWidth(layoutInfo.width);\n\t\tthis.overflowGuardContainer.setHeight(layoutInfo.height);\n\n\t\tthis.linesContent.setWidth(1000000);\n\t\tthis.linesContent.setHeight(1000000);\n\n\t}\n\n\tprivate getEditorClassName() {\n\t\treturn this._context.configuration.editor.editorClassName + ' ' + getThemeTypeSelector(this._context.theme.type);\n\t}\n\n\t// --- begin event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tif (e.editorClassName) {\n\t\t\tthis.domNode.setClassName(this.getEditorClassName());\n\t\t}\n\t\tif (e.layoutInfo) {\n\t\t\tthis._setLayout();\n\t\t}\n\t\treturn false;\n\t}\n\tpublic onFocusChanged(e: viewEvents.ViewFocusChangedEvent): boolean {\n\t\tthis.domNode.toggleClassName('focused', e.isFocused);\n\t\tif (e.isFocused) {\n\t\t\tthis.outgoingEvents.emitViewFocusGained();\n\t\t} else {\n\t\t\tthis.outgoingEvents.emitViewFocusLost();\n\t\t}\n\t\treturn false;\n\t}\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\tthis.outgoingEvents.emitScrollChanged(e);\n\t\treturn false;\n\t}\n\tpublic onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean {\n\t\tthis.domNode.setClassName(this.getEditorClassName());\n\t\treturn false;\n\t}\n\n\t// --- end event handlers\n\n\tpublic dispose(): void {\n\t\tthis._isDisposed = true;\n\t\tif (this._renderAnimationFrame !== null) {\n\t\t\tthis._renderAnimationFrame.dispose();\n\t\t\tthis._renderAnimationFrame = null;\n\t\t}\n\n\t\tthis.eventDispatcher.removeEventHandler(this);\n\t\tthis.outgoingEvents.dispose();\n\n\t\tthis.pointerHandler.dispose();\n\n\t\tthis.viewLines.dispose();\n\n\t\t// Destroy view parts\n\t\tfor (let i = 0, len = this.viewParts.length; i < len; i++) {\n\t\t\tthis.viewParts[i].dispose();\n\t\t}\n\t\tthis.viewParts = [];\n\n\t\tsuper.dispose();\n\t}\n\n\tprivate _renderOnce(callback: () => any): any {\n\t\tlet r = safeInvokeNoArg(callback);\n\t\tthis._scheduleRender();\n\t\treturn r;\n\t}\n\n\tprivate _scheduleRender(): void {\n\t\tif (this._renderAnimationFrame === null) {\n\t\t\tthis._renderAnimationFrame = dom.runAtThisOrScheduleAtNextAnimationFrame(this._onRenderScheduled.bind(this), 100);\n\t\t}\n\t}\n\n\tprivate _onRenderScheduled(): void {\n\t\tthis._renderAnimationFrame = null;\n\t\tthis._flushAccumulatedAndRenderNow();\n\t}\n\n\tprivate _renderNow(): void {\n\t\tsafeInvokeNoArg(() => this._actualRender());\n\t}\n\n\tprivate _getViewPartsToRender(): ViewPart[] {\n\t\tlet result: ViewPart[] = [];\n\t\tfor (let i = 0, len = this.viewParts.length; i < len; i++) {\n\t\t\tlet viewPart = this.viewParts[i];\n\t\t\tif (viewPart.shouldRender()) {\n\t\t\t\tresult.push(viewPart);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate _actualRender(): void {\n\t\tif (!dom.isInDOM(this.domNode.domNode)) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet viewPartsToRender = this._getViewPartsToRender();\n\n\t\tif (!this.viewLines.shouldRender() && viewPartsToRender.length === 0) {\n\t\t\t// Nothing to render\n\t\t\treturn;\n\t\t}\n\n\t\tconst partialViewportData = this._context.viewLayout.getLinesViewportData();\n\t\tthis._context.model.setViewport(partialViewportData.startLineNumber, partialViewportData.endLineNumber, partialViewportData.centeredLineNumber);\n\n\t\tlet viewportData = new ViewportData(\n\t\t\tthis._cursor.getViewSelections(),\n\t\t\tpartialViewportData,\n\t\t\tthis._context.viewLayout.getWhitespaceViewportData(),\n\t\t\tthis._context.model\n\t\t);\n\n\t\tif (this.viewLines.shouldRender()) {\n\t\t\tthis.viewLines.renderText(viewportData);\n\t\t\tthis.viewLines.onDidRender();\n\n\t\t\t// Rendering of viewLines might cause scroll events to occur, so collect view parts to render again\n\t\t\tviewPartsToRender = this._getViewPartsToRender();\n\t\t}\n\n\t\tlet renderingContext = new RenderingContext(this._context.viewLayout, viewportData, this.viewLines);\n\n\t\t// Render the rest of the parts\n\t\tfor (let i = 0, len = viewPartsToRender.length; i < len; i++) {\n\t\t\tlet viewPart = viewPartsToRender[i];\n\t\t\tviewPart.prepareRender(renderingContext);\n\t\t}\n\n\t\tfor (let i = 0, len = viewPartsToRender.length; i < len; i++) {\n\t\t\tlet viewPart = viewPartsToRender[i];\n\t\t\tviewPart.render(renderingContext);\n\t\t\tviewPart.onDidRender();\n\t\t}\n\t}\n\n\t// --- BEGIN CodeEditor helpers\n\n\tpublic delegateVerticalScrollbarMouseDown(browserEvent: IMouseEvent): void {\n\t\tthis._scrollbar.delegateVerticalScrollbarMouseDown(browserEvent);\n\t}\n\n\tpublic getOffsetForColumn(modelLineNumber: number, modelColumn: number): number {\n\t\tlet modelPosition = this._context.model.validateModelPosition({\n\t\t\tlineNumber: modelLineNumber,\n\t\t\tcolumn: modelColumn\n\t\t});\n\t\tlet viewPosition = this._context.model.coordinatesConverter.convertModelPositionToViewPosition(modelPosition);\n\t\tthis._flushAccumulatedAndRenderNow();\n\t\tlet visibleRanges = this.viewLines.visibleRangesForRange2(new Range(viewPosition.lineNumber, viewPosition.column, viewPosition.lineNumber, viewPosition.column));\n\t\tif (!visibleRanges) {\n\t\t\treturn -1;\n\t\t}\n\t\treturn visibleRanges[0].left;\n\t}\n\n\tpublic getTargetAtClientPoint(clientX: number, clientY: number): editorBrowser.IMouseTarget {\n\t\treturn this.pointerHandler.getTargetAtClientPoint(clientX, clientY);\n\t}\n\n\tpublic getInternalEventBus(): ViewOutgoingEvents {\n\t\treturn this.outgoingEvents;\n\t}\n\n\tpublic createOverviewRuler(cssClassName: string, minimumHeight: number, maximumHeight: number): OverviewRuler {\n\t\treturn new OverviewRuler(this._context, cssClassName, minimumHeight, maximumHeight);\n\t}\n\n\tpublic change(callback: (changeAccessor: editorBrowser.IViewZoneChangeAccessor) => any): boolean {\n\t\tlet zonesHaveChanged = false;\n\n\t\tthis._renderOnce(() => {\n\t\t\tlet changeAccessor: editorBrowser.IViewZoneChangeAccessor = {\n\t\t\t\taddZone: (zone: editorBrowser.IViewZone): number => {\n\t\t\t\t\tzonesHaveChanged = true;\n\t\t\t\t\treturn this.viewZones.addZone(zone);\n\t\t\t\t},\n\t\t\t\tremoveZone: (id: number): void => {\n\t\t\t\t\tif (!id) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tzonesHaveChanged = this.viewZones.removeZone(id) || zonesHaveChanged;\n\t\t\t\t},\n\t\t\t\tlayoutZone: (id: number): void => {\n\t\t\t\t\tif (!id) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tzonesHaveChanged = this.viewZones.layoutZone(id) || zonesHaveChanged;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tsafeInvoke1Arg(callback, changeAccessor);\n\n\t\t\t// Invalidate changeAccessor\n\t\t\tchangeAccessor.addZone = null;\n\t\t\tchangeAccessor.removeZone = null;\n\n\t\t\tif (zonesHaveChanged) {\n\t\t\t\tthis._context.viewLayout.onHeightMaybeChanged();\n\t\t\t\tthis._context.privateViewEventBus.emit(new viewEvents.ViewZonesChangedEvent());\n\t\t\t}\n\t\t});\n\t\treturn zonesHaveChanged;\n\t}\n\n\tpublic render(now: boolean, everything: boolean): void {\n\t\tif (everything) {\n\t\t\t// Force everything to render...\n\t\t\tthis.viewLines.forceShouldRender();\n\t\t\tfor (let i = 0, len = this.viewParts.length; i < len; i++) {\n\t\t\t\tlet viewPart = this.viewParts[i];\n\t\t\t\tviewPart.forceShouldRender();\n\t\t\t}\n\t\t}\n\t\tif (now) {\n\t\t\tthis._flushAccumulatedAndRenderNow();\n\t\t} else {\n\t\t\tthis._scheduleRender();\n\t\t}\n\t}\n\n\tpublic setAriaActiveDescendant(id: string): void {\n\t\tthis._textAreaHandler.setAriaActiveDescendant(id);\n\t}\n\n\tpublic focus(): void {\n\t\tthis._textAreaHandler.focusTextArea();\n\t}\n\n\tpublic isFocused(): boolean {\n\t\treturn this._textAreaHandler.isFocused();\n\t}\n\n\tpublic addContentWidget(widgetData: IContentWidgetData): void {\n\t\tthis.contentWidgets.addWidget(widgetData.widget);\n\t\tthis.layoutContentWidget(widgetData);\n\t\tthis._scheduleRender();\n\t}\n\n\tpublic layoutContentWidget(widgetData: IContentWidgetData): void {\n\t\tlet newPosition = widgetData.position ? widgetData.position.position : null;\n\t\tlet newPreference = widgetData.position ? widgetData.position.preference : null;\n\t\tthis.contentWidgets.setWidgetPosition(widgetData.widget, newPosition, newPreference);\n\t\tthis._scheduleRender();\n\t}\n\n\tpublic removeContentWidget(widgetData: IContentWidgetData): void {\n\t\tthis.contentWidgets.removeWidget(widgetData.widget);\n\t\tthis._scheduleRender();\n\t}\n\n\tpublic addOverlayWidget(widgetData: IOverlayWidgetData): void {\n\t\tthis.overlayWidgets.addWidget(widgetData.widget);\n\t\tthis.layoutOverlayWidget(widgetData);\n\t\tthis._scheduleRender();\n\t}\n\n\tpublic layoutOverlayWidget(widgetData: IOverlayWidgetData): void {\n\t\tlet newPreference = widgetData.position ? widgetData.position.preference : null;\n\t\tlet shouldRender = this.overlayWidgets.setWidgetPosition(widgetData.widget, newPreference);\n\t\tif (shouldRender) {\n\t\t\tthis._scheduleRender();\n\t\t}\n\t}\n\n\tpublic removeOverlayWidget(widgetData: IOverlayWidgetData): void {\n\t\tthis.overlayWidgets.removeWidget(widgetData.widget);\n\t\tthis._scheduleRender();\n\t}\n\n\t// --- END CodeEditor helpers\n\n}\n\nfunction safeInvokeNoArg(func: Function): any {\n\ttry {\n\t\treturn func();\n\t} catch (e) {\n\t\tonUnexpectedError(e);\n\t}\n}\n\nfunction safeInvoke1Arg(func: Function, arg1: any): any {\n\ttry {\n\t\treturn func(arg1);\n\t} catch (e) {\n\t\tonUnexpectedError(e);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport 'vs/css!./media/editor';\nimport 'vs/css!./media/tokens';\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport * as dom from 'vs/base/browser/dom';\nimport { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';\nimport { ICommandService } from 'vs/platform/commands/common/commands';\nimport { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';\nimport { CommonCodeEditor } from 'vs/editor/common/commonCodeEditor';\nimport { CommonEditorConfiguration } from 'vs/editor/common/config/commonEditorConfig';\nimport { Range, IRange } from 'vs/editor/common/core/range';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { EditorAction } from 'vs/editor/common/editorCommonExtensions';\nimport { ICodeEditorService } from 'vs/editor/common/services/codeEditorService';\nimport { Configuration } from 'vs/editor/browser/config/configuration';\nimport * as editorBrowser from 'vs/editor/browser/editorBrowser';\nimport { View, IOverlayWidgetData, IContentWidgetData } from 'vs/editor/browser/view/viewImpl';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport { InternalEditorAction } from 'vs/editor/common/editorAction';\nimport { IEditorOptions } from 'vs/editor/common/config/editorOptions';\nimport { IPosition } from 'vs/editor/common/core/position';\nimport { IEditorWhitespace } from 'vs/editor/common/viewLayout/whitespaceComputer';\nimport { CoreEditorCommand } from 'vs/editor/common/controller/coreCommands';\nimport { IThemeService, registerThemingParticipant } from 'vs/platform/theme/common/themeService';\nimport { editorErrorForeground, editorErrorBorder, editorWarningForeground, editorWarningBorder } from 'vs/editor/common/view/editorColorRegistry';\nimport { Color } from 'vs/base/common/color';\nimport { IMouseEvent } from 'vs/base/browser/mouseEvent';\n\nexport abstract class CodeEditorWidget extends CommonCodeEditor implements editorBrowser.ICodeEditor {\n\n\tprivate readonly _onMouseUp: Emitter = this._register(new Emitter());\n\tpublic readonly onMouseUp: Event = this._onMouseUp.event;\n\n\tprivate readonly _onMouseDown: Emitter = this._register(new Emitter());\n\tpublic readonly onMouseDown: Event = this._onMouseDown.event;\n\n\tprivate readonly _onMouseDrag: Emitter = this._register(new Emitter());\n\tpublic readonly onMouseDrag: Event = this._onMouseDrag.event;\n\n\tprivate readonly _onMouseDrop: Emitter = this._register(new Emitter());\n\tpublic readonly onMouseDrop: Event = this._onMouseDrop.event;\n\n\tprivate readonly _onContextMenu: Emitter = this._register(new Emitter());\n\tpublic readonly onContextMenu: Event = this._onContextMenu.event;\n\n\tprivate readonly _onMouseMove: Emitter = this._register(new Emitter());\n\tpublic readonly onMouseMove: Event = this._onMouseMove.event;\n\n\tprivate readonly _onMouseLeave: Emitter = this._register(new Emitter());\n\tpublic readonly onMouseLeave: Event = this._onMouseLeave.event;\n\n\tprivate readonly _onKeyUp: Emitter = this._register(new Emitter());\n\tpublic readonly onKeyUp: Event = this._onKeyUp.event;\n\n\tprivate readonly _onKeyDown: Emitter = this._register(new Emitter());\n\tpublic readonly onKeyDown: Event = this._onKeyDown.event;\n\n\tprivate readonly _onDidScrollChange: Emitter = this._register(new Emitter());\n\tpublic readonly onDidScrollChange: Event = this._onDidScrollChange.event;\n\n\tprivate readonly _onDidChangeViewZones: Emitter = this._register(new Emitter());\n\tpublic readonly onDidChangeViewZones: Event = this._onDidChangeViewZones.event;\n\n\tprivate _codeEditorService: ICodeEditorService;\n\tprivate _commandService: ICommandService;\n\tprivate _themeService: IThemeService;\n\n\tprotected domElement: HTMLElement;\n\tprivate _focusTracker: CodeEditorWidgetFocusTracker;\n\n\t_configuration: Configuration;\n\n\tprivate contentWidgets: { [key: string]: IContentWidgetData; };\n\tprivate overlayWidgets: { [key: string]: IOverlayWidgetData; };\n\n\t_view: View;\n\n\tconstructor(\n\t\tdomElement: HTMLElement,\n\t\toptions: IEditorOptions,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t\t@ICodeEditorService codeEditorService: ICodeEditorService,\n\t\t@ICommandService commandService: ICommandService,\n\t\t@IContextKeyService contextKeyService: IContextKeyService,\n\t\t@IThemeService themeService: IThemeService\n\t) {\n\t\tsuper(domElement, options, instantiationService, contextKeyService);\n\t\tthis._codeEditorService = codeEditorService;\n\t\tthis._commandService = commandService;\n\t\tthis._themeService = themeService;\n\n\t\tthis._focusTracker = new CodeEditorWidgetFocusTracker(domElement);\n\t\tthis._focusTracker.onChange(() => {\n\t\t\tlet hasFocus = this._focusTracker.hasFocus();\n\n\t\t\tif (hasFocus) {\n\t\t\t\tthis._onDidFocusEditor.fire();\n\t\t\t} else {\n\t\t\t\tthis._onDidBlurEditor.fire();\n\t\t\t}\n\t\t});\n\n\t\tthis.contentWidgets = {};\n\t\tthis.overlayWidgets = {};\n\n\t\tlet contributions = this._getContributions();\n\t\tfor (let i = 0, len = contributions.length; i < len; i++) {\n\t\t\tlet ctor = contributions[i];\n\t\t\ttry {\n\t\t\t\tlet contribution = this._instantiationService.createInstance(ctor, this);\n\t\t\t\tthis._contributions[contribution.getId()] = contribution;\n\t\t\t} catch (err) {\n\t\t\t\tonUnexpectedError(err);\n\t\t\t}\n\t\t}\n\n\t\tthis._getActions().forEach((action) => {\n\t\t\tconst internalAction = new InternalEditorAction(\n\t\t\t\taction.id,\n\t\t\t\taction.label,\n\t\t\t\taction.alias,\n\t\t\t\taction.precondition,\n\t\t\t\t(): void | TPromise => {\n\t\t\t\t\treturn this._instantiationService.invokeFunction((accessor) => {\n\t\t\t\t\t\treturn action.runEditorCommand(accessor, this, null);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tthis._contextKeyService\n\t\t\t);\n\t\t\tthis._actions[internalAction.id] = internalAction;\n\t\t});\n\n\t\tthis._codeEditorService.addCodeEditor(this);\n\t}\n\n\tprotected abstract _getContributions(): editorBrowser.IEditorContributionCtor[];\n\tprotected abstract _getActions(): EditorAction[];\n\n\tprotected _createConfiguration(options: IEditorOptions): CommonEditorConfiguration {\n\t\treturn new Configuration(options, this.domElement);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._codeEditorService.removeCodeEditor(this);\n\n\t\tthis.contentWidgets = {};\n\t\tthis.overlayWidgets = {};\n\n\t\tthis._focusTracker.dispose();\n\t\tsuper.dispose();\n\t}\n\n\tpublic createOverviewRuler(cssClassName: string, minimumHeight: number, maximumHeight: number): editorBrowser.IOverviewRuler {\n\t\treturn this._view.createOverviewRuler(cssClassName, minimumHeight, maximumHeight);\n\t}\n\n\tpublic getDomNode(): HTMLElement {\n\t\tif (!this.hasView) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._view.domNode.domNode;\n\t}\n\n\tpublic getCompletelyVisibleLinesRangeInViewport(): Range {\n\t\tif (!this.hasView) {\n\t\t\treturn null;\n\t\t}\n\t\tconst viewRange = this.viewModel.getCompletelyVisibleViewRange();\n\t\treturn this.viewModel.coordinatesConverter.convertViewRangeToModelRange(viewRange);\n\t}\n\n\tpublic delegateVerticalScrollbarMouseDown(browserEvent: IMouseEvent): void {\n\t\tif (!this.hasView) {\n\t\t\treturn;\n\t\t}\n\t\tthis._view.delegateVerticalScrollbarMouseDown(browserEvent);\n\t}\n\n\tpublic layout(dimension?: editorCommon.IDimension): void {\n\t\tthis._configuration.observeReferenceElement(dimension);\n\t\tthis.render();\n\t}\n\n\tpublic focus(): void {\n\t\tif (!this.hasView) {\n\t\t\treturn;\n\t\t}\n\t\tthis._view.focus();\n\t}\n\n\tpublic isFocused(): boolean {\n\t\treturn this.hasView && this._view.isFocused();\n\t}\n\n\tpublic hasWidgetFocus(): boolean {\n\t\treturn this._focusTracker && this._focusTracker.hasFocus();\n\t}\n\n\tpublic addContentWidget(widget: editorBrowser.IContentWidget): void {\n\t\tlet widgetData: IContentWidgetData = {\n\t\t\twidget: widget,\n\t\t\tposition: widget.getPosition()\n\t\t};\n\n\t\tif (this.contentWidgets.hasOwnProperty(widget.getId())) {\n\t\t\tconsole.warn('Overwriting a content widget with the same id.');\n\t\t}\n\n\t\tthis.contentWidgets[widget.getId()] = widgetData;\n\n\t\tif (this.hasView) {\n\t\t\tthis._view.addContentWidget(widgetData);\n\t\t}\n\t}\n\n\tpublic layoutContentWidget(widget: editorBrowser.IContentWidget): void {\n\t\tlet widgetId = widget.getId();\n\t\tif (this.contentWidgets.hasOwnProperty(widgetId)) {\n\t\t\tlet widgetData = this.contentWidgets[widgetId];\n\t\t\twidgetData.position = widget.getPosition();\n\t\t\tif (this.hasView) {\n\t\t\t\tthis._view.layoutContentWidget(widgetData);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic removeContentWidget(widget: editorBrowser.IContentWidget): void {\n\t\tlet widgetId = widget.getId();\n\t\tif (this.contentWidgets.hasOwnProperty(widgetId)) {\n\t\t\tlet widgetData = this.contentWidgets[widgetId];\n\t\t\tdelete this.contentWidgets[widgetId];\n\t\t\tif (this.hasView) {\n\t\t\t\tthis._view.removeContentWidget(widgetData);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic addOverlayWidget(widget: editorBrowser.IOverlayWidget): void {\n\t\tlet widgetData: IOverlayWidgetData = {\n\t\t\twidget: widget,\n\t\t\tposition: widget.getPosition()\n\t\t};\n\n\t\tif (this.overlayWidgets.hasOwnProperty(widget.getId())) {\n\t\t\tconsole.warn('Overwriting an overlay widget with the same id.');\n\t\t}\n\n\t\tthis.overlayWidgets[widget.getId()] = widgetData;\n\n\t\tif (this.hasView) {\n\t\t\tthis._view.addOverlayWidget(widgetData);\n\t\t}\n\t}\n\n\tpublic layoutOverlayWidget(widget: editorBrowser.IOverlayWidget): void {\n\t\tlet widgetId = widget.getId();\n\t\tif (this.overlayWidgets.hasOwnProperty(widgetId)) {\n\t\t\tlet widgetData = this.overlayWidgets[widgetId];\n\t\t\twidgetData.position = widget.getPosition();\n\t\t\tif (this.hasView) {\n\t\t\t\tthis._view.layoutOverlayWidget(widgetData);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic removeOverlayWidget(widget: editorBrowser.IOverlayWidget): void {\n\t\tlet widgetId = widget.getId();\n\t\tif (this.overlayWidgets.hasOwnProperty(widgetId)) {\n\t\t\tlet widgetData = this.overlayWidgets[widgetId];\n\t\t\tdelete this.overlayWidgets[widgetId];\n\t\t\tif (this.hasView) {\n\t\t\t\tthis._view.removeOverlayWidget(widgetData);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic changeViewZones(callback: (accessor: editorBrowser.IViewZoneChangeAccessor) => void): void {\n\t\tif (!this.hasView) {\n\t\t\treturn;\n\t\t}\n\t\tlet hasChanges = this._view.change(callback);\n\t\tif (hasChanges) {\n\t\t\tthis._onDidChangeViewZones.fire();\n\t\t}\n\t}\n\n\tpublic getWhitespaces(): IEditorWhitespace[] {\n\t\tif (!this.hasView) {\n\t\t\treturn [];\n\t\t}\n\t\treturn this.viewModel.viewLayout.getWhitespaces();\n\t}\n\n\tprivate _getVerticalOffsetForPosition(modelLineNumber: number, modelColumn: number): number {\n\t\tlet modelPosition = this.model.validatePosition({\n\t\t\tlineNumber: modelLineNumber,\n\t\t\tcolumn: modelColumn\n\t\t});\n\t\tlet viewPosition = this.viewModel.coordinatesConverter.convertModelPositionToViewPosition(modelPosition);\n\t\treturn this.viewModel.viewLayout.getVerticalOffsetForLineNumber(viewPosition.lineNumber);\n\t}\n\n\tpublic getTopForLineNumber(lineNumber: number): number {\n\t\tif (!this.hasView) {\n\t\t\treturn -1;\n\t\t}\n\t\treturn this._getVerticalOffsetForPosition(lineNumber, 1);\n\t}\n\n\tpublic getTopForPosition(lineNumber: number, column: number): number {\n\t\tif (!this.hasView) {\n\t\t\treturn -1;\n\t\t}\n\t\treturn this._getVerticalOffsetForPosition(lineNumber, column);\n\t}\n\n\tpublic getTargetAtClientPoint(clientX: number, clientY: number): editorBrowser.IMouseTarget {\n\t\tif (!this.hasView) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._view.getTargetAtClientPoint(clientX, clientY);\n\t}\n\n\tpublic getScrolledVisiblePosition(rawPosition: IPosition): { top: number; left: number; height: number; } {\n\t\tif (!this.hasView) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet position = this.model.validatePosition(rawPosition);\n\t\tlet layoutInfo = this._configuration.editor.layoutInfo;\n\n\t\tlet top = this._getVerticalOffsetForPosition(position.lineNumber, position.column) - this.getScrollTop();\n\t\tlet left = this._view.getOffsetForColumn(position.lineNumber, position.column) + layoutInfo.glyphMarginWidth + layoutInfo.lineNumbersWidth + layoutInfo.decorationsWidth - this.getScrollLeft();\n\n\t\treturn {\n\t\t\ttop: top,\n\t\t\tleft: left,\n\t\t\theight: this._configuration.editor.lineHeight\n\t\t};\n\t}\n\n\tpublic getOffsetForColumn(lineNumber: number, column: number): number {\n\t\tif (!this.hasView) {\n\t\t\treturn -1;\n\t\t}\n\t\treturn this._view.getOffsetForColumn(lineNumber, column);\n\t}\n\n\tpublic render(): void {\n\t\tif (!this.hasView) {\n\t\t\treturn;\n\t\t}\n\t\tthis._view.render(true, false);\n\t}\n\n\tpublic setHiddenAreas(ranges: IRange[]): void {\n\t\tif (this.viewModel) {\n\t\t\tthis.viewModel.setHiddenAreas(ranges.map(r => Range.lift(r)));\n\t\t}\n\t}\n\n\tpublic setAriaActiveDescendant(id: string): void {\n\t\tif (!this.hasView) {\n\t\t\treturn;\n\t\t}\n\t\tthis._view.setAriaActiveDescendant(id);\n\t}\n\n\tpublic applyFontInfo(target: HTMLElement): void {\n\t\tConfiguration.applyFontInfoSlow(target, this._configuration.editor.fontInfo);\n\t}\n\n\t_attachModel(model: editorCommon.IModel): void {\n\t\tthis._view = null;\n\n\t\tsuper._attachModel(model);\n\n\t\tif (this._view) {\n\t\t\tthis.domElement.appendChild(this._view.domNode.domNode);\n\n\t\t\tlet keys = Object.keys(this.contentWidgets);\n\t\t\tfor (let i = 0, len = keys.length; i < len; i++) {\n\t\t\t\tlet widgetId = keys[i];\n\t\t\t\tthis._view.addContentWidget(this.contentWidgets[widgetId]);\n\t\t\t}\n\n\t\t\tkeys = Object.keys(this.overlayWidgets);\n\t\t\tfor (let i = 0, len = keys.length; i < len; i++) {\n\t\t\t\tlet widgetId = keys[i];\n\t\t\t\tthis._view.addOverlayWidget(this.overlayWidgets[widgetId]);\n\t\t\t}\n\n\t\t\tthis._view.render(false, true);\n\t\t\tthis.hasView = true;\n\t\t}\n\t}\n\n\tprotected _createView(): void {\n\t\tthis._view = new View(\n\t\t\tthis._commandService,\n\t\t\tthis._configuration,\n\t\t\tthis._themeService,\n\t\t\tthis.viewModel,\n\t\t\tthis.cursor,\n\t\t\t(editorCommand: CoreEditorCommand, args: any) => {\n\t\t\t\tif (!this.cursor) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\teditorCommand.runCoreEditorCommand(this.cursor, args);\n\t\t\t}\n\t\t);\n\n\t\tconst viewEventBus = this._view.getInternalEventBus();\n\n\t\tthis.listenersToRemove.push(viewEventBus.onDidGainFocus(() => {\n\t\t\tthis._onDidFocusEditorText.fire();\n\t\t\t// In IE, the focus is not synchronous, so we give it a little help\n\t\t\tthis._onDidFocusEditor.fire();\n\t\t}));\n\n\t\tthis.listenersToRemove.push(viewEventBus.onDidScroll((e) => {\n\t\t\tthis._onDidScrollChange.fire(e);\n\t\t}));\n\n\t\tthis.listenersToRemove.push(viewEventBus.onDidLoseFocus(() => {\n\t\t\tthis._onDidBlurEditorText.fire();\n\t\t}));\n\n\t\tthis.listenersToRemove.push(viewEventBus.onContextMenu((e) => {\n\t\t\tthis._onContextMenu.fire(e);\n\t\t}));\n\n\t\tthis.listenersToRemove.push(viewEventBus.onMouseDown((e) => {\n\t\t\tthis._onMouseDown.fire(e);\n\t\t}));\n\n\t\tthis.listenersToRemove.push(viewEventBus.onMouseUp((e) => {\n\t\t\tthis._onMouseUp.fire(e);\n\t\t}));\n\n\t\tthis.listenersToRemove.push(viewEventBus.onMouseDrag((e) => {\n\t\t\tthis._onMouseDrag.fire(e);\n\t\t}));\n\n\t\tthis.listenersToRemove.push(viewEventBus.onMouseDrop((e) => {\n\t\t\tthis._onMouseDrop.fire(e);\n\t\t}));\n\n\t\tthis.listenersToRemove.push(viewEventBus.onKeyUp((e) => {\n\t\t\tthis._onKeyUp.fire(e);\n\t\t}));\n\n\t\tthis.listenersToRemove.push(viewEventBus.onMouseMove((e) => {\n\t\t\tthis._onMouseMove.fire(e);\n\t\t}));\n\n\t\tthis.listenersToRemove.push(viewEventBus.onMouseLeave((e) => {\n\t\t\tthis._onMouseLeave.fire(e);\n\t\t}));\n\n\t\tthis.listenersToRemove.push(viewEventBus.onKeyDown((e) => {\n\t\t\tthis._onKeyDown.fire(e);\n\t\t}));\n\t}\n\n\tprotected _detachModel(): editorCommon.IModel {\n\t\tlet removeDomNode: HTMLElement = null;\n\n\t\tif (this._view) {\n\t\t\tthis._view.dispose();\n\t\t\tremoveDomNode = this._view.domNode.domNode;\n\t\t\tthis._view = null;\n\t\t}\n\n\t\tlet result = super._detachModel();\n\n\t\tif (removeDomNode) {\n\t\t\tthis.domElement.removeChild(removeDomNode);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// BEGIN decorations\n\n\tprotected _registerDecorationType(key: string, options: editorCommon.IDecorationRenderOptions, parentTypeKey?: string): void {\n\t\tthis._codeEditorService.registerDecorationType(key, options, parentTypeKey);\n\t}\n\n\tprotected _removeDecorationType(key: string): void {\n\t\tthis._codeEditorService.removeDecorationType(key);\n\t}\n\n\tprotected _resolveDecorationOptions(typeKey: string, writable: boolean): editorCommon.IModelDecorationOptions {\n\t\treturn this._codeEditorService.resolveDecorationOptions(typeKey, writable);\n\t}\n\n\t// END decorations\n}\n\nclass CodeEditorWidgetFocusTracker extends Disposable {\n\n\tprivate _hasFocus: boolean;\n\tprivate _domFocusTracker: dom.IFocusTracker;\n\n\tprivate _onChange: Emitter = this._register(new Emitter());\n\tpublic onChange: Event = this._onChange.event;\n\n\tconstructor(domElement: HTMLElement) {\n\t\tsuper();\n\n\t\tthis._hasFocus = false;\n\t\tthis._domFocusTracker = this._register(dom.trackFocus(domElement));\n\n\t\tthis._domFocusTracker.addFocusListener(() => {\n\t\t\tthis._hasFocus = true;\n\t\t\tthis._onChange.fire(void 0);\n\t\t});\n\t\tthis._domFocusTracker.addBlurListener(() => {\n\t\t\tthis._hasFocus = false;\n\t\t\tthis._onChange.fire(void 0);\n\t\t});\n\t}\n\n\tpublic hasFocus(): boolean {\n\t\treturn this._hasFocus;\n\t}\n}\n\nconst squigglyStart = encodeURIComponent(``);\n\nfunction getSquigglySVGData(color: Color) {\n\treturn squigglyStart + encodeURIComponent(color.toString()) + squigglyEnd;\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tlet errorBorderColor = theme.getColor(editorErrorBorder);\n\tif (errorBorderColor) {\n\t\tcollector.addRule(`.monaco-editor .redsquiggly { border-bottom: 4px double ${errorBorderColor}; }`);\n\t}\n\tlet errorForeground = theme.getColor(editorErrorForeground);\n\tif (errorForeground) {\n\t\tcollector.addRule(`.monaco-editor .redsquiggly { background: url(\"data:image/svg+xml,${getSquigglySVGData(errorForeground)}\") repeat-x bottom left; }`);\n\t}\n\n\tlet warningBorderColor = theme.getColor(editorWarningBorder);\n\tif (warningBorderColor) {\n\t\tcollector.addRule(`.monaco-editor .greensquiggly { border-bottom: 4px double ${warningBorderColor}; }`);\n\t}\n\tlet warningForeground = theme.getColor(editorWarningForeground);\n\tif (warningForeground) {\n\t\tcollector.addRule(`.monaco-editor .greensquiggly { background: url(\"data:image/svg+xml;utf8,${getSquigglySVGData(warningForeground)}\") repeat-x bottom left; }`);\n\t}\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'use strict';\n\nimport { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';\nimport { ICommandService } from 'vs/platform/commands/common/commands';\nimport { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';\nimport { IEditorContributionCtor } from 'vs/editor/browser/editorBrowser';\nimport { ICodeEditorService } from 'vs/editor/common/services/codeEditorService';\nimport { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget';\nimport { EditorAction, CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';\nimport { EditorBrowserRegistry } from 'vs/editor/browser/editorBrowserExtensions';\nimport { IEditorOptions } from 'vs/editor/common/config/editorOptions';\nimport { IThemeService } from 'vs/platform/theme/common/themeService';\n\nexport class CodeEditor extends CodeEditorWidget {\n\n\tconstructor(\n\t\tdomElement: HTMLElement,\n\t\toptions: IEditorOptions,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t\t@ICodeEditorService codeEditorService: ICodeEditorService,\n\t\t@ICommandService commandService: ICommandService,\n\t\t@IContextKeyService contextKeyService: IContextKeyService,\n\t\t@IThemeService themeService: IThemeService\n\t) {\n\t\tsuper(domElement, options, instantiationService, codeEditorService, commandService, contextKeyService, themeService);\n\t}\n\n\tprotected _getContributions(): IEditorContributionCtor[] {\n\t\treturn [].concat(EditorBrowserRegistry.getEditorContributions()).concat(CommonEditorRegistry.getEditorContributions());\n\t}\n\n\tprotected _getActions(): EditorAction[] {\n\t\treturn CommonEditorRegistry.getEditorActions();\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/css!./media/diffEditor';\nimport { RunOnceScheduler } from 'vs/base/common/async';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport * as objects from 'vs/base/common/objects';\nimport * as dom from 'vs/base/browser/dom';\nimport { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';\nimport { ISashEvent, IVerticalSashLayoutProvider, Sash } from 'vs/base/browser/ui/sash/sash';\nimport { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';\nimport { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';\nimport { ICodeEditorService } from 'vs/editor/common/services/codeEditorService';\nimport { Range, IRange } from 'vs/editor/common/core/range';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { IEditorWorkerService } from 'vs/editor/common/services/editorWorkerService';\nimport { LineDecoration } from 'vs/editor/common/viewLayout/lineDecorations';\nimport { renderViewLine, RenderLineInput } from 'vs/editor/common/viewLayout/viewLineRenderer';\nimport * as editorBrowser from 'vs/editor/browser/editorBrowser';\nimport { CodeEditor } from 'vs/editor/browser/codeEditor';\nimport { ViewLineToken } from 'vs/editor/common/core/viewLineToken';\nimport { Configuration } from 'vs/editor/browser/config/configuration';\nimport { Position, IPosition } from 'vs/editor/common/core/position';\nimport { Selection, ISelection } from 'vs/editor/common/core/selection';\nimport { InlineDecoration } from 'vs/editor/common/viewModel/viewModel';\nimport { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';\nimport { ColorId, MetadataConsts, FontStyle } from 'vs/editor/common/modes';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport * as editorOptions from 'vs/editor/common/config/editorOptions';\nimport { registerThemingParticipant, IThemeService, ITheme, getThemeTypeSelector } from 'vs/platform/theme/common/themeService';\nimport { scrollbarShadow, diffInserted, diffRemoved, defaultInsertColor, defaultRemoveColor, diffInsertedOutline, diffRemovedOutline } from 'vs/platform/theme/common/colorRegistry';\nimport { Color } from 'vs/base/common/color';\nimport { OverviewRulerZone } from 'vs/editor/common/view/overviewZoneManager';\nimport { IEditorWhitespace } from 'vs/editor/common/viewLayout/whitespaceComputer';\nimport { ModelDecorationOptions } from 'vs/editor/common/model/textModelWithDecorations';\nimport { DiffReview } from 'vs/editor/browser/widget/diffReview';\n\ninterface IEditorDiffDecorations {\n\tdecorations: editorCommon.IModelDeltaDecoration[];\n\toverviewZones: OverviewRulerZone[];\n}\n\ninterface IEditorDiffDecorationsWithZones extends IEditorDiffDecorations {\n\tzones: editorBrowser.IViewZone[];\n}\n\ninterface IEditorsDiffDecorationsWithZones {\n\toriginal: IEditorDiffDecorationsWithZones;\n\tmodified: IEditorDiffDecorationsWithZones;\n}\n\ninterface IEditorsZones {\n\toriginal: editorBrowser.IViewZone[];\n\tmodified: editorBrowser.IViewZone[];\n}\n\ninterface IDiffEditorWidgetStyle {\n\tgetEditorsDiffDecorations(lineChanges: editorCommon.ILineChange[], ignoreTrimWhitespace: boolean, renderIndicators: boolean, originalWhitespaces: IEditorWhitespace[], modifiedWhitespaces: IEditorWhitespace[], originalEditor: editorBrowser.ICodeEditor, modifiedEditor: editorBrowser.ICodeEditor): IEditorsDiffDecorationsWithZones;\n\tsetEnableSplitViewResizing(enableSplitViewResizing: boolean): void;\n\tapplyColors(theme: ITheme): boolean;\n\tlayout(): number;\n\tdispose(): void;\n}\n\nclass VisualEditorState {\n\tprivate _zones: number[];\n\tprivate _zonesMap: { [zoneId: string]: boolean; };\n\tprivate _decorations: string[];\n\n\tconstructor() {\n\t\tthis._zones = [];\n\t\tthis._zonesMap = {};\n\t\tthis._decorations = [];\n\t}\n\n\tpublic getForeignViewZones(allViewZones: IEditorWhitespace[]): IEditorWhitespace[] {\n\t\treturn allViewZones.filter((z) => !this._zonesMap[String(z.id)]);\n\t}\n\n\tpublic clean(editor: CodeEditor): void {\n\t\t// (1) View zones\n\t\tif (this._zones.length > 0) {\n\t\t\teditor.changeViewZones((viewChangeAccessor: editorBrowser.IViewZoneChangeAccessor) => {\n\t\t\t\tfor (let i = 0, length = this._zones.length; i < length; i++) {\n\t\t\t\t\tviewChangeAccessor.removeZone(this._zones[i]);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tthis._zones = [];\n\t\tthis._zonesMap = {};\n\n\t\t// (2) Model decorations\n\t\tif (this._decorations.length > 0) {\n\t\t\teditor.changeDecorations((changeAccessor: editorCommon.IModelDecorationsChangeAccessor) => {\n\t\t\t\tchangeAccessor.deltaDecorations(this._decorations, []);\n\t\t\t});\n\t\t}\n\t\tthis._decorations = [];\n\t}\n\n\tpublic apply(editor: CodeEditor, overviewRuler: editorBrowser.IOverviewRuler, newDecorations: IEditorDiffDecorationsWithZones): void {\n\t\t// view zones\n\t\teditor.changeViewZones((viewChangeAccessor: editorBrowser.IViewZoneChangeAccessor) => {\n\t\t\tfor (let i = 0, length = this._zones.length; i < length; i++) {\n\t\t\t\tviewChangeAccessor.removeZone(this._zones[i]);\n\t\t\t}\n\t\t\tthis._zones = [];\n\t\t\tthis._zonesMap = {};\n\t\t\tfor (let i = 0, length = newDecorations.zones.length; i < length; i++) {\n\t\t\t\tnewDecorations.zones[i].suppressMouseDown = true;\n\t\t\t\tlet zoneId = viewChangeAccessor.addZone(newDecorations.zones[i]);\n\t\t\t\tthis._zones.push(zoneId);\n\t\t\t\tthis._zonesMap[String(zoneId)] = true;\n\t\t\t}\n\t\t});\n\n\t\t// decorations\n\t\tthis._decorations = editor.deltaDecorations(this._decorations, newDecorations.decorations);\n\n\t\t// overview ruler\n\t\tif (overviewRuler) {\n\t\t\toverviewRuler.setZones(newDecorations.overviewZones);\n\t\t}\n\t}\n}\n\nlet DIFF_EDITOR_ID = 0;\n\nexport class DiffEditorWidget extends Disposable implements editorBrowser.IDiffEditor {\n\n\tprivate static ONE_OVERVIEW_WIDTH = 15;\n\tpublic static ENTIRE_DIFF_OVERVIEW_WIDTH = 30;\n\tprivate static UPDATE_DIFF_DECORATIONS_DELAY = 200; // ms\n\n\tprivate readonly _onDidDispose: Emitter = this._register(new Emitter());\n\tpublic readonly onDidDispose: Event = this._onDidDispose.event;\n\n\tprivate readonly _onDidUpdateDiff: Emitter = this._register(new Emitter());\n\tpublic readonly onDidUpdateDiff: Event = this._onDidUpdateDiff.event;\n\n\tprivate readonly id: number;\n\n\tprivate _domElement: HTMLElement;\n\tprotected readonly _containerDomElement: HTMLElement;\n\tprivate readonly _overviewDomElement: HTMLElement;\n\tprivate readonly _overviewViewportDomElement: FastDomNode;\n\n\tprivate _width: number;\n\tprivate _height: number;\n\tprivate _reviewHeight: number;\n\tprivate readonly _measureDomElementToken: number;\n\n\tprivate originalEditor: CodeEditor;\n\tprivate _originalDomNode: HTMLElement;\n\tprivate _originalEditorState: VisualEditorState;\n\tprivate _originalOverviewRuler: editorBrowser.IOverviewRuler;\n\n\tprivate modifiedEditor: CodeEditor;\n\tprivate _modifiedDomNode: HTMLElement;\n\tprivate _modifiedEditorState: VisualEditorState;\n\tprivate _modifiedOverviewRuler: editorBrowser.IOverviewRuler;\n\n\tprivate _currentlyChangingViewZones: boolean;\n\tprivate _beginUpdateDecorationsTimeout: number;\n\tprivate _diffComputationToken: number;\n\tprivate _lineChanges: editorCommon.ILineChange[];\n\n\tprivate _isVisible: boolean;\n\tprivate _isHandlingScrollEvent: boolean;\n\n\tprivate _ignoreTrimWhitespace: boolean;\n\tprivate _originalIsEditable: boolean;\n\n\tprivate _renderSideBySide: boolean;\n\tprivate _renderIndicators: boolean;\n\tprivate _enableSplitViewResizing: boolean;\n\tprivate _strategy: IDiffEditorWidgetStyle;\n\n\tprivate _updateDecorationsRunner: RunOnceScheduler;\n\n\tprivate _editorWorkerService: IEditorWorkerService;\n\tprotected _contextKeyService: IContextKeyService;\n\tprivate _codeEditorService: ICodeEditorService;\n\tprivate _themeService: IThemeService;\n\n\tprivate _reviewPane: DiffReview;\n\n\tconstructor(\n\t\tdomElement: HTMLElement,\n\t\toptions: editorOptions.IDiffEditorOptions,\n\t\t@IEditorWorkerService editorWorkerService: IEditorWorkerService,\n\t\t@IContextKeyService contextKeyService: IContextKeyService,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t\t@ICodeEditorService codeEditorService: ICodeEditorService,\n\t\t@IThemeService themeService: IThemeService\n\t) {\n\t\tsuper();\n\n\t\tthis._editorWorkerService = editorWorkerService;\n\t\tthis._codeEditorService = codeEditorService;\n\t\tthis._contextKeyService = contextKeyService.createScoped(domElement);\n\t\tthis._contextKeyService.createKey('isInDiffEditor', true);\n\t\tthis._themeService = themeService;\n\n\t\tthis.id = (++DIFF_EDITOR_ID);\n\n\t\tthis._domElement = domElement;\n\t\toptions = options || {};\n\n\t\t// renderSideBySide\n\t\tthis._renderSideBySide = true;\n\t\tif (typeof options.renderSideBySide !== 'undefined') {\n\t\t\tthis._renderSideBySide = options.renderSideBySide;\n\t\t}\n\n\t\t// ignoreTrimWhitespace\n\t\tthis._ignoreTrimWhitespace = true;\n\t\tif (typeof options.ignoreTrimWhitespace !== 'undefined') {\n\t\t\tthis._ignoreTrimWhitespace = options.ignoreTrimWhitespace;\n\t\t}\n\n\t\t// renderIndicators\n\t\tthis._renderIndicators = true;\n\t\tif (typeof options.renderIndicators !== 'undefined') {\n\t\t\tthis._renderIndicators = options.renderIndicators;\n\t\t}\n\n\t\tthis._originalIsEditable = false;\n\t\tif (typeof options.originalEditable !== 'undefined') {\n\t\t\tthis._originalIsEditable = Boolean(options.originalEditable);\n\t\t}\n\n\t\tthis._updateDecorationsRunner = this._register(new RunOnceScheduler(() => this._updateDecorations(), 0));\n\n\t\tthis._containerDomElement = document.createElement('div');\n\t\tthis._containerDomElement.className = DiffEditorWidget._getClassName(this._themeService.getTheme(), this._renderSideBySide);\n\t\tthis._containerDomElement.style.position = 'relative';\n\t\tthis._containerDomElement.style.height = '100%';\n\t\tthis._domElement.appendChild(this._containerDomElement);\n\n\t\tthis._overviewViewportDomElement = createFastDomNode(document.createElement('div'));\n\t\tthis._overviewViewportDomElement.setClassName('diffViewport');\n\t\tthis._overviewViewportDomElement.setPosition('absolute');\n\n\t\tthis._overviewDomElement = document.createElement('div');\n\t\tthis._overviewDomElement.className = 'diffOverview';\n\t\tthis._overviewDomElement.style.position = 'absolute';\n\n\t\tthis._overviewDomElement.appendChild(this._overviewViewportDomElement.domNode);\n\n\t\tthis._register(dom.addStandardDisposableListener(this._overviewDomElement, 'mousedown', (e) => {\n\t\t\tthis.modifiedEditor.delegateVerticalScrollbarMouseDown(e);\n\t\t}));\n\t\tthis._containerDomElement.appendChild(this._overviewDomElement);\n\n\t\tthis._createLeftHandSide();\n\t\tthis._createRightHandSide();\n\n\t\tthis._beginUpdateDecorationsTimeout = -1;\n\t\tthis._currentlyChangingViewZones = false;\n\t\tthis._diffComputationToken = 0;\n\n\t\tthis._originalEditorState = new VisualEditorState();\n\t\tthis._modifiedEditorState = new VisualEditorState();\n\n\t\tthis._isVisible = true;\n\t\tthis._isHandlingScrollEvent = false;\n\n\t\tthis._width = 0;\n\t\tthis._height = 0;\n\t\tthis._reviewHeight = 0;\n\n\t\tthis._lineChanges = null;\n\n\t\tconst services = new ServiceCollection();\n\t\tservices.set(IContextKeyService, this._contextKeyService);\n\n\t\tconst scopedInstantiationService = instantiationService.createChild(services);\n\n\t\tthis._createLeftHandSideEditor(options, scopedInstantiationService);\n\t\tthis._createRightHandSideEditor(options, scopedInstantiationService);\n\n\t\tthis._reviewPane = new DiffReview(this);\n\t\tthis._containerDomElement.appendChild(this._reviewPane.domNode.domNode);\n\t\tthis._containerDomElement.appendChild(this._reviewPane.shadow.domNode);\n\t\tthis._containerDomElement.appendChild(this._reviewPane.actionBarContainer.domNode);\n\n\t\tif (options.automaticLayout) {\n\t\t\tthis._measureDomElementToken = window.setInterval(() => this._measureDomElement(false), 100);\n\t\t}\n\n\t\t// enableSplitViewResizing\n\t\tthis._enableSplitViewResizing = true;\n\t\tif (typeof options.enableSplitViewResizing !== 'undefined') {\n\t\t\tthis._enableSplitViewResizing = options.enableSplitViewResizing;\n\t\t}\n\n\t\tif (this._renderSideBySide) {\n\t\t\tthis._setStrategy(new DiffEdtorWidgetSideBySide(this._createDataSource(), this._enableSplitViewResizing));\n\t\t} else {\n\t\t\tthis._setStrategy(new DiffEdtorWidgetInline(this._createDataSource(), this._enableSplitViewResizing));\n\t\t}\n\n\t\tthis._codeEditorService.addDiffEditor(this);\n\n\t\tthis._register(themeService.onThemeChange(t => {\n\t\t\tif (this._strategy && this._strategy.applyColors(t)) {\n\t\t\t\tthis._updateDecorationsRunner.schedule();\n\t\t\t}\n\t\t\tthis._containerDomElement.className = DiffEditorWidget._getClassName(this._themeService.getTheme(), this._renderSideBySide);\n\t\t}));\n\t}\n\n\tpublic get ignoreTrimWhitespace(): boolean {\n\t\treturn this._ignoreTrimWhitespace;\n\t}\n\n\tpublic get renderSideBySide(): boolean {\n\t\treturn this._renderSideBySide;\n\t}\n\n\tpublic get renderIndicators(): boolean {\n\t\treturn this._renderIndicators;\n\t}\n\n\tpublic hasWidgetFocus(): boolean {\n\t\treturn dom.isAncestor(document.activeElement, this._domElement);\n\t}\n\n\tpublic diffReviewNext(): void {\n\t\tthis._reviewPane.next();\n\t}\n\n\tpublic diffReviewPrev(): void {\n\t\tthis._reviewPane.prev();\n\t}\n\n\tprivate static _getClassName(theme: ITheme, renderSideBySide: boolean): string {\n\t\tlet result = 'monaco-diff-editor monaco-editor-background ';\n\t\tif (renderSideBySide) {\n\t\t\tresult += 'side-by-side ';\n\t\t}\n\t\tresult += getThemeTypeSelector(theme.type);\n\t\treturn result;\n\t}\n\n\tprivate _recreateOverviewRulers(): void {\n\t\tif (this._originalOverviewRuler) {\n\t\t\tthis._overviewDomElement.removeChild(this._originalOverviewRuler.getDomNode());\n\t\t\tthis._originalOverviewRuler.dispose();\n\t\t}\n\t\tthis._originalOverviewRuler = this.originalEditor.createOverviewRuler('original diffOverviewRuler', 4, Number.MAX_VALUE);\n\t\tthis._overviewDomElement.appendChild(this._originalOverviewRuler.getDomNode());\n\n\t\tif (this._modifiedOverviewRuler) {\n\t\t\tthis._overviewDomElement.removeChild(this._modifiedOverviewRuler.getDomNode());\n\t\t\tthis._modifiedOverviewRuler.dispose();\n\t\t}\n\t\tthis._modifiedOverviewRuler = this.modifiedEditor.createOverviewRuler('modified diffOverviewRuler', 4, Number.MAX_VALUE);\n\t\tthis._overviewDomElement.appendChild(this._modifiedOverviewRuler.getDomNode());\n\n\t\tthis._layoutOverviewRulers();\n\t}\n\n\tprivate _createLeftHandSide(): void {\n\t\tthis._originalDomNode = document.createElement('div');\n\t\tthis._originalDomNode.className = 'editor original';\n\t\tthis._originalDomNode.style.position = 'absolute';\n\t\tthis._originalDomNode.style.height = '100%';\n\t\tthis._containerDomElement.appendChild(this._originalDomNode);\n\t}\n\n\tprivate _createRightHandSide(): void {\n\t\tthis._modifiedDomNode = document.createElement('div');\n\t\tthis._modifiedDomNode.className = 'editor modified';\n\t\tthis._modifiedDomNode.style.position = 'absolute';\n\t\tthis._modifiedDomNode.style.height = '100%';\n\t\tthis._containerDomElement.appendChild(this._modifiedDomNode);\n\t}\n\n\tprivate _createLeftHandSideEditor(options: editorOptions.IDiffEditorOptions, instantiationService: IInstantiationService): void {\n\t\tthis.originalEditor = this._createInnerEditor(instantiationService, this._originalDomNode, this._adjustOptionsForLeftHandSide(options, this._originalIsEditable));\n\n\t\tthis._register(this.originalEditor.onDidScrollChange((e) => {\n\t\t\tif (this._isHandlingScrollEvent) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!e.scrollTopChanged && !e.scrollLeftChanged && !e.scrollHeightChanged) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._isHandlingScrollEvent = true;\n\t\t\tthis.modifiedEditor.setScrollPosition({\n\t\t\t\tscrollLeft: e.scrollLeft,\n\t\t\t\tscrollTop: e.scrollTop\n\t\t\t});\n\t\t\tthis._isHandlingScrollEvent = false;\n\n\t\t\tthis._layoutOverviewViewport();\n\t\t}));\n\n\t\tthis._register(this.originalEditor.onDidChangeViewZones(() => {\n\t\t\tthis._onViewZonesChanged();\n\t\t}));\n\n\t\tthis._register(this.originalEditor.onDidChangeModelContent(() => {\n\t\t\tif (this._isVisible) {\n\t\t\t\tthis._beginUpdateDecorationsSoon();\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate _createRightHandSideEditor(options: editorOptions.IDiffEditorOptions, instantiationService: IInstantiationService): void {\n\t\tthis.modifiedEditor = this._createInnerEditor(instantiationService, this._modifiedDomNode, this._adjustOptionsForRightHandSide(options));\n\n\t\tthis._register(this.modifiedEditor.onDidScrollChange((e) => {\n\t\t\tif (this._isHandlingScrollEvent) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!e.scrollTopChanged && !e.scrollLeftChanged && !e.scrollHeightChanged) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._isHandlingScrollEvent = true;\n\t\t\tthis.originalEditor.setScrollPosition({\n\t\t\t\tscrollLeft: e.scrollLeft,\n\t\t\t\tscrollTop: e.scrollTop\n\t\t\t});\n\t\t\tthis._isHandlingScrollEvent = false;\n\n\t\t\tthis._layoutOverviewViewport();\n\t\t}));\n\n\t\tthis._register(this.modifiedEditor.onDidChangeViewZones(() => {\n\t\t\tthis._onViewZonesChanged();\n\t\t}));\n\n\t\tthis._register(this.modifiedEditor.onDidChangeConfiguration((e) => {\n\t\t\tif (e.fontInfo && this.modifiedEditor.getModel()) {\n\t\t\t\tthis._onViewZonesChanged();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this.modifiedEditor.onDidChangeModelContent(() => {\n\t\t\tif (this._isVisible) {\n\t\t\t\tthis._beginUpdateDecorationsSoon();\n\t\t\t}\n\t\t}));\n\t}\n\n\tprotected _createInnerEditor(instantiationService: IInstantiationService, container: HTMLElement, options: editorOptions.IEditorOptions): CodeEditor {\n\t\treturn instantiationService.createInstance(CodeEditor, container, options);\n\t}\n\n\tpublic destroy(): void {\n\t\tthis.dispose();\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._codeEditorService.removeDiffEditor(this);\n\n\t\twindow.clearInterval(this._measureDomElementToken);\n\n\t\tthis._cleanViewZonesAndDecorations();\n\n\t\tthis._originalOverviewRuler.dispose();\n\t\tthis._modifiedOverviewRuler.dispose();\n\n\t\tthis.originalEditor.dispose();\n\t\tthis.modifiedEditor.dispose();\n\n\t\tthis._strategy.dispose();\n\n\t\tthis._reviewPane.dispose();\n\n\t\tthis._onDidDispose.fire();\n\n\t\tsuper.dispose();\n\t}\n\n\t//------------ begin IDiffEditor methods\n\n\tpublic getId(): string {\n\t\treturn this.getEditorType() + ':' + this.id;\n\t}\n\n\tpublic getEditorType(): string {\n\t\treturn editorCommon.EditorType.IDiffEditor;\n\t}\n\n\tpublic getLineChanges(): editorCommon.ILineChange[] {\n\t\treturn this._lineChanges;\n\t}\n\n\tpublic getOriginalEditor(): editorBrowser.ICodeEditor {\n\t\treturn this.originalEditor;\n\t}\n\n\tpublic getModifiedEditor(): editorBrowser.ICodeEditor {\n\t\treturn this.modifiedEditor;\n\t}\n\n\tpublic updateOptions(newOptions: editorOptions.IDiffEditorOptions): void {\n\n\t\t// Handle side by side\n\t\tlet renderSideBySideChanged = false;\n\t\tif (typeof newOptions.renderSideBySide !== 'undefined') {\n\t\t\tif (this._renderSideBySide !== newOptions.renderSideBySide) {\n\t\t\t\tthis._renderSideBySide = newOptions.renderSideBySide;\n\t\t\t\trenderSideBySideChanged = true;\n\t\t\t}\n\t\t}\n\n\t\tlet beginUpdateDecorations = false;\n\n\t\tif (typeof newOptions.ignoreTrimWhitespace !== 'undefined') {\n\t\t\tif (this._ignoreTrimWhitespace !== newOptions.ignoreTrimWhitespace) {\n\t\t\t\tthis._ignoreTrimWhitespace = newOptions.ignoreTrimWhitespace;\n\t\t\t\t// Begin comparing\n\t\t\t\tbeginUpdateDecorations = true;\n\t\t\t}\n\t\t}\n\n\t\tif (typeof newOptions.renderIndicators !== 'undefined') {\n\t\t\tif (this._renderIndicators !== newOptions.renderIndicators) {\n\t\t\t\tthis._renderIndicators = newOptions.renderIndicators;\n\t\t\t\tbeginUpdateDecorations = true;\n\t\t\t}\n\t\t}\n\n\t\tif (beginUpdateDecorations) {\n\t\t\tthis._beginUpdateDecorations();\n\t\t}\n\n\t\tif (typeof newOptions.originalEditable !== 'undefined') {\n\t\t\tthis._originalIsEditable = Boolean(newOptions.originalEditable);\n\t\t}\n\n\t\tthis.modifiedEditor.updateOptions(this._adjustOptionsForRightHandSide(newOptions));\n\t\tthis.originalEditor.updateOptions(this._adjustOptionsForLeftHandSide(newOptions, this._originalIsEditable));\n\n\t\t// enableSplitViewResizing\n\t\tif (typeof newOptions.enableSplitViewResizing !== 'undefined') {\n\t\t\tthis._enableSplitViewResizing = newOptions.enableSplitViewResizing;\n\t\t}\n\t\tthis._strategy.setEnableSplitViewResizing(this._enableSplitViewResizing);\n\n\t\t// renderSideBySide\n\t\tif (renderSideBySideChanged) {\n\t\t\tif (this._renderSideBySide) {\n\t\t\t\tthis._setStrategy(new DiffEdtorWidgetSideBySide(this._createDataSource(), this._enableSplitViewResizing, ));\n\t\t\t} else {\n\t\t\t\tthis._setStrategy(new DiffEdtorWidgetInline(this._createDataSource(), this._enableSplitViewResizing));\n\t\t\t}\n\t\t\t// Update class name\n\t\t\tthis._containerDomElement.className = DiffEditorWidget._getClassName(this._themeService.getTheme(), this._renderSideBySide);\n\t\t}\n\t}\n\n\tpublic getValue(options: { preserveBOM: boolean; lineEnding: string; } = null): string {\n\t\treturn this.modifiedEditor.getValue(options);\n\t}\n\n\tpublic getModel(): editorCommon.IDiffEditorModel {\n\t\treturn {\n\t\t\toriginal: this.originalEditor.getModel(),\n\t\t\tmodified: this.modifiedEditor.getModel()\n\t\t};\n\t}\n\n\tpublic setModel(model: editorCommon.IDiffEditorModel): void {\n\t\t// Guard us against partial null model\n\t\tif (model && (!model.original || !model.modified)) {\n\t\t\tthrow new Error(!model.original ? 'DiffEditorWidget.setModel: Original model is null' : 'DiffEditorWidget.setModel: Modified model is null');\n\t\t}\n\n\t\t// Remove all view zones & decorations\n\t\tthis._cleanViewZonesAndDecorations();\n\n\t\t// Update code editor models\n\t\tthis.originalEditor.setModel(model ? model.original : null);\n\t\tthis.modifiedEditor.setModel(model ? model.modified : null);\n\t\tthis._updateDecorationsRunner.cancel();\n\n\t\tif (model) {\n\t\t\tthis.originalEditor.setScrollTop(0);\n\t\t\tthis.modifiedEditor.setScrollTop(0);\n\t\t}\n\n\t\t// Disable any diff computations that will come in\n\t\tthis._lineChanges = null;\n\t\tthis._diffComputationToken++;\n\n\t\tif (model) {\n\t\t\tthis._recreateOverviewRulers();\n\n\t\t\t// Begin comparing\n\t\t\tthis._beginUpdateDecorations();\n\t\t} else {\n\t\t\tthis._lineChanges = null;\n\t\t}\n\n\t\tthis._layoutOverviewViewport();\n\t}\n\n\tpublic getDomNode(): HTMLElement {\n\t\treturn this._domElement;\n\t}\n\n\tpublic getVisibleColumnFromPosition(position: IPosition): number {\n\t\treturn this.modifiedEditor.getVisibleColumnFromPosition(position);\n\t}\n\n\tpublic getPosition(): Position {\n\t\treturn this.modifiedEditor.getPosition();\n\t}\n\n\tpublic setPosition(position: IPosition, reveal?: boolean, revealVerticalInCenter?: boolean, revealHorizontal?: boolean): void {\n\t\tthis.modifiedEditor.setPosition(position, reveal, revealVerticalInCenter, revealHorizontal);\n\t}\n\n\tpublic revealLine(lineNumber: number): void {\n\t\tthis.modifiedEditor.revealLine(lineNumber);\n\t}\n\n\tpublic revealLineInCenter(lineNumber: number): void {\n\t\tthis.modifiedEditor.revealLineInCenter(lineNumber);\n\t}\n\n\tpublic revealLineInCenterIfOutsideViewport(lineNumber: number): void {\n\t\tthis.modifiedEditor.revealLineInCenterIfOutsideViewport(lineNumber);\n\t}\n\n\tpublic revealPosition(position: IPosition, revealVerticalInCenter: boolean = false, revealHorizontal: boolean = false): void {\n\t\tthis.modifiedEditor.revealPosition(position, revealVerticalInCenter, revealHorizontal);\n\t}\n\n\tpublic revealPositionInCenter(position: IPosition): void {\n\t\tthis.modifiedEditor.revealPositionInCenter(position);\n\t}\n\n\tpublic revealPositionInCenterIfOutsideViewport(position: IPosition): void {\n\t\tthis.modifiedEditor.revealPositionInCenterIfOutsideViewport(position);\n\t}\n\n\tpublic getSelection(): Selection {\n\t\treturn this.modifiedEditor.getSelection();\n\t}\n\n\tpublic getSelections(): Selection[] {\n\t\treturn this.modifiedEditor.getSelections();\n\t}\n\n\tpublic setSelection(range: IRange, reveal?: boolean, revealVerticalInCenter?: boolean, revealHorizontal?: boolean): void;\n\tpublic setSelection(editorRange: Range, reveal?: boolean, revealVerticalInCenter?: boolean, revealHorizontal?: boolean): void;\n\tpublic setSelection(selection: ISelection, reveal?: boolean, revealVerticalInCenter?: boolean, revealHorizontal?: boolean): void;\n\tpublic setSelection(editorSelection: Selection, reveal?: boolean, revealVerticalInCenter?: boolean, revealHorizontal?: boolean): void;\n\tpublic setSelection(something: any, reveal?: boolean, revealVerticalInCenter?: boolean, revealHorizontal?: boolean): void {\n\t\tthis.modifiedEditor.setSelection(something, reveal, revealVerticalInCenter, revealHorizontal);\n\t}\n\n\tpublic setSelections(ranges: ISelection[]): void {\n\t\tthis.modifiedEditor.setSelections(ranges);\n\t}\n\n\tpublic revealLines(startLineNumber: number, endLineNumber: number): void {\n\t\tthis.modifiedEditor.revealLines(startLineNumber, endLineNumber);\n\t}\n\n\tpublic revealLinesInCenter(startLineNumber: number, endLineNumber: number): void {\n\t\tthis.modifiedEditor.revealLinesInCenter(startLineNumber, endLineNumber);\n\t}\n\n\tpublic revealLinesInCenterIfOutsideViewport(startLineNumber: number, endLineNumber: number): void {\n\t\tthis.modifiedEditor.revealLinesInCenterIfOutsideViewport(startLineNumber, endLineNumber);\n\t}\n\n\tpublic revealRange(range: IRange, revealVerticalInCenter: boolean = false, revealHorizontal: boolean = true): void {\n\t\tthis.modifiedEditor.revealRange(range, revealVerticalInCenter, revealHorizontal);\n\t}\n\n\tpublic revealRangeInCenter(range: IRange): void {\n\t\tthis.modifiedEditor.revealRangeInCenter(range);\n\t}\n\n\tpublic revealRangeInCenterIfOutsideViewport(range: IRange): void {\n\t\tthis.modifiedEditor.revealRangeInCenterIfOutsideViewport(range);\n\t}\n\n\tpublic revealRangeAtTop(range: IRange): void {\n\t\tthis.modifiedEditor.revealRangeAtTop(range);\n\t}\n\n\tpublic getActions(): editorCommon.IEditorAction[] {\n\t\treturn this.modifiedEditor.getActions();\n\t}\n\n\tpublic getSupportedActions(): editorCommon.IEditorAction[] {\n\t\treturn this.modifiedEditor.getSupportedActions();\n\t}\n\n\tpublic getAction(id: string): editorCommon.IEditorAction {\n\t\treturn this.modifiedEditor.getAction(id);\n\t}\n\n\tpublic saveViewState(): editorCommon.IDiffEditorViewState {\n\t\tlet originalViewState = this.originalEditor.saveViewState();\n\t\tlet modifiedViewState = this.modifiedEditor.saveViewState();\n\t\treturn {\n\t\t\toriginal: originalViewState,\n\t\t\tmodified: modifiedViewState\n\t\t};\n\t}\n\n\tpublic restoreViewState(s: editorCommon.IDiffEditorViewState): void {\n\t\tif (s.original && s.original) {\n\t\t\tlet diffEditorState = s;\n\t\t\tthis.originalEditor.restoreViewState(diffEditorState.original);\n\t\t\tthis.modifiedEditor.restoreViewState(diffEditorState.modified);\n\t\t}\n\t}\n\n\tpublic layout(dimension?: editorCommon.IDimension): void {\n\t\tthis._measureDomElement(false, dimension);\n\t}\n\n\tpublic focus(): void {\n\t\tthis.modifiedEditor.focus();\n\t}\n\n\tpublic isFocused(): boolean {\n\t\treturn this.originalEditor.isFocused() || this.modifiedEditor.isFocused();\n\t}\n\n\tpublic onVisible(): void {\n\t\tthis._isVisible = true;\n\t\tthis.originalEditor.onVisible();\n\t\tthis.modifiedEditor.onVisible();\n\t\t// Begin comparing\n\t\tthis._beginUpdateDecorations();\n\t}\n\n\tpublic onHide(): void {\n\t\tthis._isVisible = false;\n\t\tthis.originalEditor.onHide();\n\t\tthis.modifiedEditor.onHide();\n\t\t// Remove all view zones & decorations\n\t\tthis._cleanViewZonesAndDecorations();\n\t}\n\n\tpublic trigger(source: string, handlerId: string, payload: any): void {\n\t\tthis.modifiedEditor.trigger(source, handlerId, payload);\n\t}\n\n\tpublic changeDecorations(callback: (changeAccessor: editorCommon.IModelDecorationsChangeAccessor) => any): any {\n\t\treturn this.modifiedEditor.changeDecorations(callback);\n\t}\n\n\t//------------ end IDiffEditor methods\n\n\n\n\t//------------ begin layouting methods\n\n\tprivate _measureDomElement(forceDoLayoutCall: boolean, dimensions?: editorCommon.IDimension): void {\n\t\tdimensions = dimensions || {\n\t\t\twidth: this._containerDomElement.clientWidth,\n\t\t\theight: this._containerDomElement.clientHeight\n\t\t};\n\n\t\tif (dimensions.width <= 0) {\n\t\t\tthis._width = 0;\n\t\t\tthis._height = 0;\n\t\t\tthis._reviewHeight = 0;\n\t\t\treturn;\n\t\t}\n\n\t\tif (!forceDoLayoutCall && dimensions.width === this._width && dimensions.height === this._height) {\n\t\t\t// Nothing has changed\n\t\t\treturn;\n\t\t}\n\n\t\tthis._width = dimensions.width;\n\t\tthis._height = dimensions.height;\n\t\tthis._reviewHeight = this._reviewPane.isVisible() ? this._height : 0;\n\n\t\tthis._doLayout();\n\t}\n\n\tprivate _layoutOverviewRulers(): void {\n\t\tlet freeSpace = DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH - 2 * DiffEditorWidget.ONE_OVERVIEW_WIDTH;\n\t\tlet layoutInfo = this.modifiedEditor.getLayoutInfo();\n\t\tif (layoutInfo) {\n\t\t\tthis._originalOverviewRuler.setLayout({\n\t\t\t\ttop: 0,\n\t\t\t\twidth: DiffEditorWidget.ONE_OVERVIEW_WIDTH,\n\t\t\t\tright: freeSpace + DiffEditorWidget.ONE_OVERVIEW_WIDTH,\n\t\t\t\theight: (this._height - this._reviewHeight)\n\t\t\t});\n\t\t\tthis._modifiedOverviewRuler.setLayout({\n\t\t\t\ttop: 0,\n\t\t\t\tright: 0,\n\t\t\t\twidth: DiffEditorWidget.ONE_OVERVIEW_WIDTH,\n\t\t\t\theight: (this._height - this._reviewHeight)\n\t\t\t});\n\t\t}\n\t}\n\n\t//------------ end layouting methods\n\n\tprivate _onViewZonesChanged(): void {\n\t\tif (this._currentlyChangingViewZones) {\n\t\t\treturn;\n\t\t}\n\t\tthis._updateDecorationsRunner.schedule();\n\t}\n\n\tprivate _beginUpdateDecorationsSoon(): void {\n\t\t// Clear previous timeout if necessary\n\t\tif (this._beginUpdateDecorationsTimeout !== -1) {\n\t\t\twindow.clearTimeout(this._beginUpdateDecorationsTimeout);\n\t\t\tthis._beginUpdateDecorationsTimeout = -1;\n\t\t}\n\t\tthis._beginUpdateDecorationsTimeout = window.setTimeout(() => this._beginUpdateDecorations(), DiffEditorWidget.UPDATE_DIFF_DECORATIONS_DELAY);\n\t}\n\n\tprivate _beginUpdateDecorations(): void {\n\t\tthis._beginUpdateDecorationsTimeout = -1;\n\t\tconst currentOriginalModel = this.originalEditor.getModel();\n\t\tconst currentModifiedModel = this.modifiedEditor.getModel();\n\t\tif (!currentOriginalModel || !currentModifiedModel) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Prevent old diff requests to come if a new request has been initiated\n\t\t// The best method would be to call cancel on the Promise, but this is not\n\t\t// yet supported, so using tokens for now.\n\t\tthis._diffComputationToken++;\n\t\tlet currentToken = this._diffComputationToken;\n\n\t\tthis._editorWorkerService.computeDiff(currentOriginalModel.uri, currentModifiedModel.uri, this._ignoreTrimWhitespace).then((result) => {\n\t\t\tif (currentToken === this._diffComputationToken\n\t\t\t\t&& currentOriginalModel === this.originalEditor.getModel()\n\t\t\t\t&& currentModifiedModel === this.modifiedEditor.getModel()\n\t\t\t) {\n\t\t\t\tthis._lineChanges = result;\n\t\t\t\tthis._updateDecorationsRunner.schedule();\n\t\t\t\tthis._onDidUpdateDiff.fire();\n\t\t\t}\n\t\t}, (error) => {\n\t\t\tif (currentToken === this._diffComputationToken\n\t\t\t\t&& currentOriginalModel === this.originalEditor.getModel()\n\t\t\t\t&& currentModifiedModel === this.modifiedEditor.getModel()\n\t\t\t) {\n\t\t\t\tthis._lineChanges = null;\n\t\t\t\tthis._updateDecorationsRunner.schedule();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _cleanViewZonesAndDecorations(): void {\n\t\tthis._originalEditorState.clean(this.originalEditor);\n\t\tthis._modifiedEditorState.clean(this.modifiedEditor);\n\t}\n\n\tprivate _updateDecorations(): void {\n\t\tif (!this.originalEditor.getModel() || !this.modifiedEditor.getModel()) {\n\t\t\treturn;\n\t\t}\n\t\tlet lineChanges = this._lineChanges || [];\n\n\t\tlet foreignOriginal = this._originalEditorState.getForeignViewZones(this.originalEditor.getWhitespaces());\n\t\tlet foreignModified = this._modifiedEditorState.getForeignViewZones(this.modifiedEditor.getWhitespaces());\n\n\t\tlet diffDecorations = this._strategy.getEditorsDiffDecorations(lineChanges, this._ignoreTrimWhitespace, this._renderIndicators, foreignOriginal, foreignModified, this.originalEditor, this.modifiedEditor);\n\n\t\ttry {\n\t\t\tthis._currentlyChangingViewZones = true;\n\t\t\tthis._originalEditorState.apply(this.originalEditor, this._originalOverviewRuler, diffDecorations.original);\n\t\t\tthis._modifiedEditorState.apply(this.modifiedEditor, this._modifiedOverviewRuler, diffDecorations.modified);\n\t\t} finally {\n\t\t\tthis._currentlyChangingViewZones = false;\n\t\t}\n\t}\n\n\tprivate _adjustOptionsForSubEditor(options: editorOptions.IDiffEditorOptions): editorOptions.IDiffEditorOptions {\n\t\tlet clonedOptions: editorOptions.IDiffEditorOptions = objects.clone(options || {});\n\t\tclonedOptions.inDiffEditor = true;\n\t\tclonedOptions.wordWrap = 'off';\n\t\tclonedOptions.wordWrapMinified = false;\n\t\tclonedOptions.automaticLayout = false;\n\t\tclonedOptions.scrollbar = clonedOptions.scrollbar || {};\n\t\tclonedOptions.scrollbar.vertical = 'visible';\n\t\tclonedOptions.folding = false;\n\t\tclonedOptions.codeLens = false;\n\t\tclonedOptions.fixedOverflowWidgets = true;\n\t\tclonedOptions.lineDecorationsWidth = '2ch';\n\t\tif (!clonedOptions.minimap) {\n\t\t\tclonedOptions.minimap = {};\n\t\t}\n\t\tclonedOptions.minimap.enabled = false;\n\t\treturn clonedOptions;\n\t}\n\n\tprivate _adjustOptionsForLeftHandSide(options: editorOptions.IDiffEditorOptions, isEditable: boolean): editorOptions.IEditorOptions {\n\t\tlet result = this._adjustOptionsForSubEditor(options);\n\t\tresult.readOnly = !isEditable;\n\t\tresult.overviewRulerLanes = 1;\n\t\tresult.extraEditorClassName = 'original-in-monaco-diff-editor';\n\t\treturn result;\n\t}\n\n\tprivate _adjustOptionsForRightHandSide(options: editorOptions.IDiffEditorOptions): editorOptions.IEditorOptions {\n\t\tlet result = this._adjustOptionsForSubEditor(options);\n\t\tresult.revealHorizontalRightPadding = editorOptions.EDITOR_DEFAULTS.viewInfo.revealHorizontalRightPadding + DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH;\n\t\tresult.scrollbar.verticalHasArrows = false;\n\t\tresult.extraEditorClassName = 'modified-in-monaco-diff-editor';\n\t\treturn result;\n\t}\n\n\tpublic doLayout(): void {\n\t\tthis._measureDomElement(true);\n\t}\n\n\tprivate _doLayout(): void {\n\t\tlet splitPoint = this._strategy.layout();\n\n\t\tthis._originalDomNode.style.width = splitPoint + 'px';\n\t\tthis._originalDomNode.style.left = '0px';\n\n\t\tthis._modifiedDomNode.style.width = (this._width - splitPoint) + 'px';\n\t\tthis._modifiedDomNode.style.left = splitPoint + 'px';\n\n\t\tthis._overviewDomElement.style.top = '0px';\n\t\tthis._overviewDomElement.style.height = (this._height - this._reviewHeight) + 'px';\n\t\tthis._overviewDomElement.style.width = DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH + 'px';\n\t\tthis._overviewDomElement.style.left = (this._width - DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH) + 'px';\n\t\tthis._overviewViewportDomElement.setWidth(DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH);\n\t\tthis._overviewViewportDomElement.setHeight(30);\n\n\t\tthis.originalEditor.layout({ width: splitPoint, height: (this._height - this._reviewHeight) });\n\t\tthis.modifiedEditor.layout({ width: this._width - splitPoint - DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH, height: (this._height - this._reviewHeight) });\n\n\t\tif (this._originalOverviewRuler || this._modifiedOverviewRuler) {\n\t\t\tthis._layoutOverviewRulers();\n\t\t}\n\n\t\tthis._reviewPane.layout(this._height - this._reviewHeight, this._width, this._reviewHeight);\n\n\t\tthis._layoutOverviewViewport();\n\t}\n\n\tprivate _layoutOverviewViewport(): void {\n\t\tlet layout = this._computeOverviewViewport();\n\t\tif (!layout) {\n\t\t\tthis._overviewViewportDomElement.setTop(0);\n\t\t\tthis._overviewViewportDomElement.setHeight(0);\n\t\t} else {\n\t\t\tthis._overviewViewportDomElement.setTop(layout.top);\n\t\t\tthis._overviewViewportDomElement.setHeight(layout.height);\n\t\t}\n\t}\n\n\tprivate _computeOverviewViewport(): { height: number; top: number; } {\n\t\tlet layoutInfo = this.modifiedEditor.getLayoutInfo();\n\t\tif (!layoutInfo) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet scrollTop = this.modifiedEditor.getScrollTop();\n\t\tlet scrollHeight = this.modifiedEditor.getScrollHeight();\n\n\t\tlet computedAvailableSize = Math.max(0, layoutInfo.contentHeight);\n\t\tlet computedRepresentableSize = Math.max(0, computedAvailableSize - 2 * 0);\n\t\tlet computedRatio = scrollHeight > 0 ? (computedRepresentableSize / scrollHeight) : 0;\n\n\t\tlet computedSliderSize = Math.max(0, Math.floor(layoutInfo.contentHeight * computedRatio));\n\t\tlet computedSliderPosition = Math.floor(scrollTop * computedRatio);\n\n\t\treturn {\n\t\t\theight: computedSliderSize,\n\t\t\ttop: computedSliderPosition\n\t\t};\n\t}\n\n\tprivate _createDataSource(): IDataSource {\n\t\treturn {\n\t\t\tgetWidth: () => {\n\t\t\t\treturn this._width;\n\t\t\t},\n\n\t\t\tgetHeight: () => {\n\t\t\t\treturn (this._height - this._reviewHeight);\n\t\t\t},\n\n\t\t\tgetContainerDomNode: () => {\n\t\t\t\treturn this._containerDomElement;\n\t\t\t},\n\n\t\t\trelayoutEditors: () => {\n\t\t\t\tthis._doLayout();\n\t\t\t},\n\n\t\t\tgetOriginalEditor: () => {\n\t\t\t\treturn this.originalEditor;\n\t\t\t},\n\n\t\t\tgetModifiedEditor: () => {\n\t\t\t\treturn this.modifiedEditor;\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate _setStrategy(newStrategy: IDiffEditorWidgetStyle): void {\n\t\tif (this._strategy) {\n\t\t\tthis._strategy.dispose();\n\t\t}\n\n\t\tthis._strategy = newStrategy;\n\t\tnewStrategy.applyColors(this._themeService.getTheme());\n\n\t\tif (this._lineChanges) {\n\t\t\tthis._updateDecorations();\n\t\t}\n\n\t\t// Just do a layout, the strategy might need it\n\t\tthis._measureDomElement(true);\n\t}\n\n\tprivate _getLineChangeAtOrBeforeLineNumber(lineNumber: number, startLineNumberExtractor: (lineChange: editorCommon.ILineChange) => number): editorCommon.ILineChange {\n\t\tif (this._lineChanges.length === 0 || lineNumber < startLineNumberExtractor(this._lineChanges[0])) {\n\t\t\t// There are no changes or `lineNumber` is before the first change\n\t\t\treturn null;\n\t\t}\n\n\t\tlet min = 0, max = this._lineChanges.length - 1;\n\t\twhile (min < max) {\n\t\t\tlet mid = Math.floor((min + max) / 2);\n\t\t\tlet midStart = startLineNumberExtractor(this._lineChanges[mid]);\n\t\t\tlet midEnd = (mid + 1 <= max ? startLineNumberExtractor(this._lineChanges[mid + 1]) : Number.MAX_VALUE);\n\n\t\t\tif (lineNumber < midStart) {\n\t\t\t\tmax = mid - 1;\n\t\t\t} else if (lineNumber >= midEnd) {\n\t\t\t\tmin = mid + 1;\n\t\t\t} else {\n\t\t\t\t// HIT!\n\t\t\t\tmin = mid;\n\t\t\t\tmax = mid;\n\t\t\t}\n\t\t}\n\t\treturn this._lineChanges[min];\n\t}\n\n\tprivate _getEquivalentLineForOriginalLineNumber(lineNumber: number): number {\n\t\tlet lineChange = this._getLineChangeAtOrBeforeLineNumber(lineNumber, (lineChange) => lineChange.originalStartLineNumber);\n\n\t\tif (!lineChange) {\n\t\t\treturn lineNumber;\n\t\t}\n\n\t\tlet originalEquivalentLineNumber = lineChange.originalStartLineNumber + (lineChange.originalEndLineNumber > 0 ? -1 : 0);\n\t\tlet modifiedEquivalentLineNumber = lineChange.modifiedStartLineNumber + (lineChange.modifiedEndLineNumber > 0 ? -1 : 0);\n\t\tlet lineChangeOriginalLength = (lineChange.originalEndLineNumber > 0 ? (lineChange.originalEndLineNumber - lineChange.originalStartLineNumber + 1) : 0);\n\t\tlet lineChangeModifiedLength = (lineChange.modifiedEndLineNumber > 0 ? (lineChange.modifiedEndLineNumber - lineChange.modifiedStartLineNumber + 1) : 0);\n\n\n\t\tlet delta = lineNumber - originalEquivalentLineNumber;\n\n\t\tif (delta <= lineChangeOriginalLength) {\n\t\t\treturn modifiedEquivalentLineNumber + Math.min(delta, lineChangeModifiedLength);\n\t\t}\n\n\t\treturn modifiedEquivalentLineNumber + lineChangeModifiedLength - lineChangeOriginalLength + delta;\n\t}\n\n\tprivate _getEquivalentLineForModifiedLineNumber(lineNumber: number): number {\n\t\tlet lineChange = this._getLineChangeAtOrBeforeLineNumber(lineNumber, (lineChange) => lineChange.modifiedStartLineNumber);\n\n\t\tif (!lineChange) {\n\t\t\treturn lineNumber;\n\t\t}\n\n\t\tlet originalEquivalentLineNumber = lineChange.originalStartLineNumber + (lineChange.originalEndLineNumber > 0 ? -1 : 0);\n\t\tlet modifiedEquivalentLineNumber = lineChange.modifiedStartLineNumber + (lineChange.modifiedEndLineNumber > 0 ? -1 : 0);\n\t\tlet lineChangeOriginalLength = (lineChange.originalEndLineNumber > 0 ? (lineChange.originalEndLineNumber - lineChange.originalStartLineNumber + 1) : 0);\n\t\tlet lineChangeModifiedLength = (lineChange.modifiedEndLineNumber > 0 ? (lineChange.modifiedEndLineNumber - lineChange.modifiedStartLineNumber + 1) : 0);\n\n\n\t\tlet delta = lineNumber - modifiedEquivalentLineNumber;\n\n\t\tif (delta <= lineChangeModifiedLength) {\n\t\t\treturn originalEquivalentLineNumber + Math.min(delta, lineChangeOriginalLength);\n\t\t}\n\n\t\treturn originalEquivalentLineNumber + lineChangeOriginalLength - lineChangeModifiedLength + delta;\n\t}\n\n\tpublic getDiffLineInformationForOriginal(lineNumber: number): editorCommon.IDiffLineInformation {\n\t\tif (!this._lineChanges) {\n\t\t\t// Cannot answer that which I don't know\n\t\t\treturn null;\n\t\t}\n\t\treturn {\n\t\t\tequivalentLineNumber: this._getEquivalentLineForOriginalLineNumber(lineNumber)\n\t\t};\n\t}\n\n\tpublic getDiffLineInformationForModified(lineNumber: number): editorCommon.IDiffLineInformation {\n\t\tif (!this._lineChanges) {\n\t\t\t// Cannot answer that which I don't know\n\t\t\treturn null;\n\t\t}\n\t\treturn {\n\t\t\tequivalentLineNumber: this._getEquivalentLineForModifiedLineNumber(lineNumber)\n\t\t};\n\t}\n}\n\ninterface IDataSource {\n\tgetWidth(): number;\n\tgetHeight(): number;\n\tgetContainerDomNode(): HTMLElement;\n\trelayoutEditors(): void;\n\n\tgetOriginalEditor(): editorBrowser.ICodeEditor;\n\tgetModifiedEditor(): editorBrowser.ICodeEditor;\n}\n\nclass DiffEditorWidgetStyle extends Disposable {\n\n\t_dataSource: IDataSource;\n\t_insertColor: Color;\n\t_removeColor: Color;\n\n\tconstructor(dataSource: IDataSource) {\n\t\tsuper();\n\t\tthis._dataSource = dataSource;\n\t}\n\n\tpublic applyColors(theme: ITheme): boolean {\n\t\tlet newInsertColor = (theme.getColor(diffInserted) || defaultInsertColor).transparent(2);\n\t\tlet newRemoveColor = (theme.getColor(diffRemoved) || defaultRemoveColor).transparent(2);\n\t\tlet hasChanges = !newInsertColor.equals(this._insertColor) || !newRemoveColor.equals(this._removeColor);\n\t\tthis._insertColor = newInsertColor;\n\t\tthis._removeColor = newRemoveColor;\n\t\treturn hasChanges;\n\t}\n\n\tpublic getEditorsDiffDecorations(lineChanges: editorCommon.ILineChange[], ignoreTrimWhitespace: boolean, renderIndicators: boolean, originalWhitespaces: IEditorWhitespace[], modifiedWhitespaces: IEditorWhitespace[], originalEditor: editorBrowser.ICodeEditor, modifiedEditor: editorBrowser.ICodeEditor): IEditorsDiffDecorationsWithZones {\n\t\t// Get view zones\n\t\tmodifiedWhitespaces = modifiedWhitespaces.sort((a, b) => {\n\t\t\treturn a.afterLineNumber - b.afterLineNumber;\n\t\t});\n\t\toriginalWhitespaces = originalWhitespaces.sort((a, b) => {\n\t\t\treturn a.afterLineNumber - b.afterLineNumber;\n\t\t});\n\t\tlet zones = this._getViewZones(lineChanges, originalWhitespaces, modifiedWhitespaces, originalEditor, modifiedEditor, renderIndicators);\n\n\t\t// Get decorations & overview ruler zones\n\t\tlet originalDecorations = this._getOriginalEditorDecorations(lineChanges, ignoreTrimWhitespace, renderIndicators, originalEditor, modifiedEditor);\n\t\tlet modifiedDecorations = this._getModifiedEditorDecorations(lineChanges, ignoreTrimWhitespace, renderIndicators, originalEditor, modifiedEditor);\n\n\t\treturn {\n\t\t\toriginal: {\n\t\t\t\tdecorations: originalDecorations.decorations,\n\t\t\t\toverviewZones: originalDecorations.overviewZones,\n\t\t\t\tzones: zones.original\n\t\t\t},\n\t\t\tmodified: {\n\t\t\t\tdecorations: modifiedDecorations.decorations,\n\t\t\t\toverviewZones: modifiedDecorations.overviewZones,\n\t\t\t\tzones: zones.modified\n\t\t\t}\n\t\t};\n\t}\n\n\t_getViewZones(lineChanges: editorCommon.ILineChange[], originalForeignVZ: IEditorWhitespace[], modifiedForeignVZ: IEditorWhitespace[], originalEditor: editorBrowser.ICodeEditor, modifiedEditor: editorBrowser.ICodeEditor, renderIndicators: boolean): IEditorsZones {\n\t\treturn null;\n\t}\n\n\t_getOriginalEditorDecorations(lineChanges: editorCommon.ILineChange[], ignoreTrimWhitespace: boolean, renderIndicators: boolean, originalEditor: editorBrowser.ICodeEditor, modifiedEditor: editorBrowser.ICodeEditor): IEditorDiffDecorations {\n\t\treturn null;\n\t}\n\n\t_getModifiedEditorDecorations(lineChanges: editorCommon.ILineChange[], ignoreTrimWhitespace: boolean, renderIndicators: boolean, originalEditor: editorBrowser.ICodeEditor, modifiedEditor: editorBrowser.ICodeEditor): IEditorDiffDecorations {\n\t\treturn null;\n\t}\n}\n\ninterface IMyViewZone extends editorBrowser.IViewZone {\n\tshouldNotShrink?: boolean;\n}\n\nclass ForeignViewZonesIterator {\n\n\tprivate _index: number;\n\tprivate _source: IEditorWhitespace[];\n\tpublic current: IEditorWhitespace;\n\n\tconstructor(source: IEditorWhitespace[]) {\n\t\tthis._source = source;\n\t\tthis._index = -1;\n\t\tthis.advance();\n\t}\n\n\tpublic advance(): void {\n\t\tthis._index++;\n\t\tif (this._index < this._source.length) {\n\t\t\tthis.current = this._source[this._index];\n\t\t} else {\n\t\t\tthis.current = null;\n\t\t}\n\t}\n}\n\nabstract class ViewZonesComputer {\n\n\tprivate lineChanges: editorCommon.ILineChange[];\n\tprivate originalForeignVZ: IEditorWhitespace[];\n\tprivate modifiedForeignVZ: IEditorWhitespace[];\n\n\tconstructor(lineChanges: editorCommon.ILineChange[], originalForeignVZ: IEditorWhitespace[], modifiedForeignVZ: IEditorWhitespace[]) {\n\t\tthis.lineChanges = lineChanges;\n\t\tthis.originalForeignVZ = originalForeignVZ;\n\t\tthis.modifiedForeignVZ = modifiedForeignVZ;\n\t}\n\n\tpublic getViewZones(): IEditorsZones {\n\t\tlet result: IEditorsZones = {\n\t\t\toriginal: [],\n\t\t\tmodified: []\n\t\t};\n\n\t\tlet lineChangeModifiedLength: number = 0;\n\t\tlet lineChangeOriginalLength: number = 0;\n\t\tlet originalEquivalentLineNumber: number = 0;\n\t\tlet modifiedEquivalentLineNumber: number = 0;\n\t\tlet originalEndEquivalentLineNumber: number = 0;\n\t\tlet modifiedEndEquivalentLineNumber: number = 0;\n\n\t\tlet sortMyViewZones = (a: IMyViewZone, b: IMyViewZone) => {\n\t\t\treturn a.afterLineNumber - b.afterLineNumber;\n\t\t};\n\n\t\tlet addAndCombineIfPossible = (destination: editorBrowser.IViewZone[], item: IMyViewZone) => {\n\t\t\tif (item.domNode === null && destination.length > 0) {\n\t\t\t\tlet lastItem = destination[destination.length - 1];\n\t\t\t\tif (lastItem.afterLineNumber === item.afterLineNumber && lastItem.domNode === null) {\n\t\t\t\t\tlastItem.heightInLines += item.heightInLines;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tdestination.push(item);\n\t\t};\n\n\t\tlet modifiedForeignVZ = new ForeignViewZonesIterator(this.modifiedForeignVZ);\n\t\tlet originalForeignVZ = new ForeignViewZonesIterator(this.originalForeignVZ);\n\n\t\t// 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\n\t\tfor (let i = 0, length = this.lineChanges.length; i <= length; i++) {\n\t\t\tlet lineChange = (i < length ? this.lineChanges[i] : null);\n\n\t\t\tif (lineChange !== null) {\n\t\t\t\toriginalEquivalentLineNumber = lineChange.originalStartLineNumber + (lineChange.originalEndLineNumber > 0 ? -1 : 0);\n\t\t\t\tmodifiedEquivalentLineNumber = lineChange.modifiedStartLineNumber + (lineChange.modifiedEndLineNumber > 0 ? -1 : 0);\n\t\t\t\tlineChangeOriginalLength = (lineChange.originalEndLineNumber > 0 ? (lineChange.originalEndLineNumber - lineChange.originalStartLineNumber + 1) : 0);\n\t\t\t\tlineChangeModifiedLength = (lineChange.modifiedEndLineNumber > 0 ? (lineChange.modifiedEndLineNumber - lineChange.modifiedStartLineNumber + 1) : 0);\n\t\t\t\toriginalEndEquivalentLineNumber = Math.max(lineChange.originalStartLineNumber, lineChange.originalEndLineNumber);\n\t\t\t\tmodifiedEndEquivalentLineNumber = Math.max(lineChange.modifiedStartLineNumber, lineChange.modifiedEndLineNumber);\n\t\t\t} else {\n\t\t\t\t// Increase to very large value to get the producing tests of foreign view zones running\n\t\t\t\toriginalEquivalentLineNumber += 10000000 + lineChangeOriginalLength;\n\t\t\t\tmodifiedEquivalentLineNumber += 10000000 + lineChangeModifiedLength;\n\t\t\t\toriginalEndEquivalentLineNumber = originalEquivalentLineNumber;\n\t\t\t\tmodifiedEndEquivalentLineNumber = modifiedEquivalentLineNumber;\n\t\t\t}\n\n\t\t\t// Each step produces view zones, and after producing them, we try to cancel them out, to avoid empty-empty view zone cases\n\t\t\tlet stepOriginal: IMyViewZone[] = [];\n\t\t\tlet stepModified: IMyViewZone[] = [];\n\n\t\t\t// ---------------------------- PRODUCE VIEW ZONES\n\n\t\t\t// [PRODUCE] View zone(s) in original-side due to foreign view zone(s) in modified-side\n\t\t\twhile (modifiedForeignVZ.current && modifiedForeignVZ.current.afterLineNumber <= modifiedEndEquivalentLineNumber) {\n\t\t\t\tlet viewZoneLineNumber: number;\n\t\t\t\tif (modifiedForeignVZ.current.afterLineNumber <= modifiedEquivalentLineNumber) {\n\t\t\t\t\tviewZoneLineNumber = originalEquivalentLineNumber - modifiedEquivalentLineNumber + modifiedForeignVZ.current.afterLineNumber;\n\t\t\t\t} else {\n\t\t\t\t\tviewZoneLineNumber = originalEndEquivalentLineNumber;\n\t\t\t\t}\n\t\t\t\tstepOriginal.push({\n\t\t\t\t\tafterLineNumber: viewZoneLineNumber,\n\t\t\t\t\theightInLines: modifiedForeignVZ.current.heightInLines,\n\t\t\t\t\tdomNode: null\n\t\t\t\t});\n\t\t\t\tmodifiedForeignVZ.advance();\n\t\t\t}\n\n\t\t\t// [PRODUCE] View zone(s) in modified-side due to foreign view zone(s) in original-side\n\t\t\twhile (originalForeignVZ.current && originalForeignVZ.current.afterLineNumber <= originalEndEquivalentLineNumber) {\n\t\t\t\tlet viewZoneLineNumber: number;\n\t\t\t\tif (originalForeignVZ.current.afterLineNumber <= originalEquivalentLineNumber) {\n\t\t\t\t\tviewZoneLineNumber = modifiedEquivalentLineNumber - originalEquivalentLineNumber + originalForeignVZ.current.afterLineNumber;\n\t\t\t\t} else {\n\t\t\t\t\tviewZoneLineNumber = modifiedEndEquivalentLineNumber;\n\t\t\t\t}\n\t\t\t\tstepModified.push({\n\t\t\t\t\tafterLineNumber: viewZoneLineNumber,\n\t\t\t\t\theightInLines: originalForeignVZ.current.heightInLines,\n\t\t\t\t\tdomNode: null\n\t\t\t\t});\n\t\t\t\toriginalForeignVZ.advance();\n\t\t\t}\n\n\t\t\tif (lineChange !== null && isChangeOrInsert(lineChange)) {\n\t\t\t\tlet r = this._produceOriginalFromDiff(lineChange, lineChangeOriginalLength, lineChangeModifiedLength);\n\t\t\t\tif (r) {\n\t\t\t\t\tstepOriginal.push(r);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (lineChange !== null && isChangeOrDelete(lineChange)) {\n\t\t\t\tlet r = this._produceModifiedFromDiff(lineChange, lineChangeOriginalLength, lineChangeModifiedLength);\n\t\t\t\tif (r) {\n\t\t\t\t\tstepModified.push(r);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// ---------------------------- END PRODUCE VIEW ZONES\n\n\n\t\t\t// ---------------------------- EMIT MINIMAL VIEW ZONES\n\n\t\t\t// [CANCEL & EMIT] Try to cancel view zones out\n\t\t\tlet stepOriginalIndex = 0;\n\t\t\tlet stepModifiedIndex = 0;\n\n\t\t\tstepOriginal = stepOriginal.sort(sortMyViewZones);\n\t\t\tstepModified = stepModified.sort(sortMyViewZones);\n\n\t\t\twhile (stepOriginalIndex < stepOriginal.length && stepModifiedIndex < stepModified.length) {\n\t\t\t\tlet original = stepOriginal[stepOriginalIndex];\n\t\t\t\tlet modified = stepModified[stepModifiedIndex];\n\n\t\t\t\tlet originalDelta = original.afterLineNumber - originalEquivalentLineNumber;\n\t\t\t\tlet modifiedDelta = modified.afterLineNumber - modifiedEquivalentLineNumber;\n\n\t\t\t\tif (originalDelta < modifiedDelta) {\n\t\t\t\t\taddAndCombineIfPossible(result.original, original);\n\t\t\t\t\tstepOriginalIndex++;\n\t\t\t\t} else if (modifiedDelta < originalDelta) {\n\t\t\t\t\taddAndCombineIfPossible(result.modified, modified);\n\t\t\t\t\tstepModifiedIndex++;\n\t\t\t\t} else if (original.shouldNotShrink) {\n\t\t\t\t\taddAndCombineIfPossible(result.original, original);\n\t\t\t\t\tstepOriginalIndex++;\n\t\t\t\t} else if (modified.shouldNotShrink) {\n\t\t\t\t\taddAndCombineIfPossible(result.modified, modified);\n\t\t\t\t\tstepModifiedIndex++;\n\t\t\t\t} else {\n\t\t\t\t\tif (original.heightInLines >= modified.heightInLines) {\n\t\t\t\t\t\t// modified view zone gets removed\n\t\t\t\t\t\toriginal.heightInLines -= modified.heightInLines;\n\t\t\t\t\t\tstepModifiedIndex++;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// original view zone gets removed\n\t\t\t\t\t\tmodified.heightInLines -= original.heightInLines;\n\t\t\t\t\t\tstepOriginalIndex++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// [EMIT] Remaining original view zones\n\t\t\twhile (stepOriginalIndex < stepOriginal.length) {\n\t\t\t\taddAndCombineIfPossible(result.original, stepOriginal[stepOriginalIndex]);\n\t\t\t\tstepOriginalIndex++;\n\t\t\t}\n\n\t\t\t// [EMIT] Remaining modified view zones\n\t\t\twhile (stepModifiedIndex < stepModified.length) {\n\t\t\t\taddAndCombineIfPossible(result.modified, stepModified[stepModifiedIndex]);\n\t\t\t\tstepModifiedIndex++;\n\t\t\t}\n\n\t\t\t// ---------------------------- END EMIT MINIMAL VIEW ZONES\n\t\t}\n\n\t\tlet ensureDomNode = (z: IMyViewZone) => {\n\t\t\tif (!z.domNode) {\n\t\t\t\tz.domNode = createFakeLinesDiv();\n\t\t\t}\n\t\t};\n\n\t\tresult.original.forEach(ensureDomNode);\n\t\tresult.modified.forEach(ensureDomNode);\n\n\t\treturn result;\n\t}\n\n\tprotected abstract _produceOriginalFromDiff(lineChange: editorCommon.ILineChange, lineChangeOriginalLength: number, lineChangeModifiedLength: number): IMyViewZone;\n\n\tprotected abstract _produceModifiedFromDiff(lineChange: editorCommon.ILineChange, lineChangeOriginalLength: number, lineChangeModifiedLength: number): IMyViewZone;\n}\n\nfunction createDecoration(startLineNumber: number, startColumn: number, endLineNumber: number, endColumn: number, options: ModelDecorationOptions) {\n\treturn {\n\t\trange: new Range(startLineNumber, startColumn, endLineNumber, endColumn),\n\t\toptions: options\n\t};\n}\n\nconst DECORATIONS = {\n\n\tcharDelete: ModelDecorationOptions.register({\n\t\tclassName: 'char-delete'\n\t}),\n\tcharDeleteWholeLine: ModelDecorationOptions.register({\n\t\tclassName: 'char-delete',\n\t\tisWholeLine: true\n\t}),\n\n\tcharInsert: ModelDecorationOptions.register({\n\t\tclassName: 'char-insert'\n\t}),\n\tcharInsertWholeLine: ModelDecorationOptions.register({\n\t\tclassName: 'char-insert',\n\t\tisWholeLine: true\n\t}),\n\n\tlineInsert: ModelDecorationOptions.register({\n\t\tclassName: 'line-insert',\n\t\tmarginClassName: 'line-insert',\n\t\tisWholeLine: true\n\t}),\n\tlineInsertWithSign: ModelDecorationOptions.register({\n\t\tclassName: 'line-insert',\n\t\tlinesDecorationsClassName: 'insert-sign',\n\t\tmarginClassName: 'line-insert',\n\t\tisWholeLine: true\n\t}),\n\n\tlineDelete: ModelDecorationOptions.register({\n\t\tclassName: 'line-delete',\n\t\tmarginClassName: 'line-delete',\n\t\tisWholeLine: true\n\t}),\n\tlineDeleteWithSign: ModelDecorationOptions.register({\n\t\tclassName: 'line-delete',\n\t\tlinesDecorationsClassName: 'delete-sign',\n\t\tmarginClassName: 'line-delete',\n\t\tisWholeLine: true\n\n\t}),\n\tlineDeleteMargin: ModelDecorationOptions.register({\n\t\tmarginClassName: 'line-delete',\n\t})\n\n};\n\nclass DiffEdtorWidgetSideBySide extends DiffEditorWidgetStyle implements IDiffEditorWidgetStyle, IVerticalSashLayoutProvider {\n\n\tstatic MINIMUM_EDITOR_WIDTH = 100;\n\n\tprivate _disableSash: boolean;\n\tprivate _sash: Sash;\n\tprivate _sashRatio: number;\n\tprivate _sashPosition: number;\n\tprivate _startSashPosition: number;\n\n\tconstructor(dataSource: IDataSource, enableSplitViewResizing: boolean) {\n\t\tsuper(dataSource);\n\n\t\tthis._disableSash = (enableSplitViewResizing === false);\n\t\tthis._sashRatio = null;\n\t\tthis._sashPosition = null;\n\t\tthis._sash = this._register(new Sash(this._dataSource.getContainerDomNode(), this));\n\n\t\tif (this._disableSash) {\n\t\t\tthis._sash.disable();\n\t\t}\n\n\t\tthis._sash.addListener('start', () => this.onSashDragStart());\n\t\tthis._sash.addListener('change', (e: ISashEvent) => this.onSashDrag(e));\n\t\tthis._sash.addListener('end', () => this.onSashDragEnd());\n\t\tthis._sash.addListener('reset', () => this.onSashReset());\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t}\n\n\tpublic setEnableSplitViewResizing(enableSplitViewResizing: boolean): void {\n\t\tlet newDisableSash = (enableSplitViewResizing === false);\n\t\tif (this._disableSash !== newDisableSash) {\n\t\t\tthis._disableSash = newDisableSash;\n\n\t\t\tif (this._disableSash) {\n\t\t\t\tthis._sash.disable();\n\t\t\t} else {\n\t\t\t\tthis._sash.enable();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic layout(sashRatio: number = this._sashRatio): number {\n\t\tlet w = this._dataSource.getWidth();\n\t\tlet contentWidth = w - DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH;\n\n\t\tlet sashPosition = Math.floor((sashRatio || 0.5) * contentWidth);\n\t\tlet midPoint = Math.floor(0.5 * contentWidth);\n\n\t\tsashPosition = this._disableSash ? midPoint : sashPosition || midPoint;\n\n\t\tif (contentWidth > DiffEdtorWidgetSideBySide.MINIMUM_EDITOR_WIDTH * 2) {\n\t\t\tif (sashPosition < DiffEdtorWidgetSideBySide.MINIMUM_EDITOR_WIDTH) {\n\t\t\t\tsashPosition = DiffEdtorWidgetSideBySide.MINIMUM_EDITOR_WIDTH;\n\t\t\t}\n\n\t\t\tif (sashPosition > contentWidth - DiffEdtorWidgetSideBySide.MINIMUM_EDITOR_WIDTH) {\n\t\t\t\tsashPosition = contentWidth - DiffEdtorWidgetSideBySide.MINIMUM_EDITOR_WIDTH;\n\t\t\t}\n\t\t} else {\n\t\t\tsashPosition = midPoint;\n\t\t}\n\n\t\tif (this._sashPosition !== sashPosition) {\n\t\t\tthis._sashPosition = sashPosition;\n\t\t\tthis._sash.layout();\n\t\t}\n\n\t\treturn this._sashPosition;\n\t}\n\n\tprivate onSashDragStart(): void {\n\t\tthis._startSashPosition = this._sashPosition;\n\t}\n\n\tprivate onSashDrag(e: ISashEvent): void {\n\t\tlet w = this._dataSource.getWidth();\n\t\tlet contentWidth = w - DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH;\n\t\tlet sashPosition = this.layout((this._startSashPosition + (e.currentX - e.startX)) / contentWidth);\n\n\t\tthis._sashRatio = sashPosition / contentWidth;\n\n\t\tthis._dataSource.relayoutEditors();\n\t}\n\n\tprivate onSashDragEnd(): void {\n\t\tthis._sash.layout();\n\t}\n\n\tprivate onSashReset(): void {\n\t\tthis._sashRatio = 0.5;\n\t\tthis._dataSource.relayoutEditors();\n\t\tthis._sash.layout();\n\t}\n\n\tpublic getVerticalSashTop(sash: Sash): number {\n\t\treturn 0;\n\t}\n\n\tpublic getVerticalSashLeft(sash: Sash): number {\n\t\treturn this._sashPosition;\n\t}\n\n\tpublic getVerticalSashHeight(sash: Sash): number {\n\t\treturn this._dataSource.getHeight();\n\t}\n\n\t_getViewZones(lineChanges: editorCommon.ILineChange[], originalForeignVZ: IEditorWhitespace[], modifiedForeignVZ: IEditorWhitespace[], originalEditor: editorBrowser.ICodeEditor, modifiedEditor: editorBrowser.ICodeEditor): IEditorsZones {\n\t\tlet c = new SideBySideViewZonesComputer(lineChanges, originalForeignVZ, modifiedForeignVZ);\n\t\treturn c.getViewZones();\n\t}\n\n\t_getOriginalEditorDecorations(lineChanges: editorCommon.ILineChange[], ignoreTrimWhitespace: boolean, renderIndicators: boolean, originalEditor: editorBrowser.ICodeEditor, modifiedEditor: editorBrowser.ICodeEditor): IEditorDiffDecorations {\n\n\t\tlet result: IEditorDiffDecorations = {\n\t\t\tdecorations: [],\n\t\t\toverviewZones: []\n\t\t};\n\n\t\tlet originalModel = originalEditor.getModel();\n\n\t\tfor (let i = 0, length = lineChanges.length; i < length; i++) {\n\t\t\tlet lineChange = lineChanges[i];\n\n\t\t\tif (isChangeOrDelete(lineChange)) {\n\t\t\t\tresult.decorations.push({\n\t\t\t\t\trange: new Range(lineChange.originalStartLineNumber, 1, lineChange.originalEndLineNumber, Number.MAX_VALUE),\n\t\t\t\t\toptions: (renderIndicators ? DECORATIONS.lineDeleteWithSign : DECORATIONS.lineDelete)\n\t\t\t\t});\n\t\t\t\tif (!isChangeOrInsert(lineChange) || !lineChange.charChanges) {\n\t\t\t\t\tresult.decorations.push(createDecoration(lineChange.originalStartLineNumber, 1, lineChange.originalEndLineNumber, Number.MAX_VALUE, DECORATIONS.charDeleteWholeLine));\n\t\t\t\t}\n\n\t\t\t\tlet color = this._removeColor.toString();\n\n\t\t\t\tresult.overviewZones.push(new OverviewRulerZone(\n\t\t\t\t\tlineChange.originalStartLineNumber,\n\t\t\t\t\tlineChange.originalEndLineNumber,\n\t\t\t\t\teditorCommon.OverviewRulerLane.Full,\n\t\t\t\t\t0,\n\t\t\t\t\tcolor,\n\t\t\t\t\tcolor,\n\t\t\t\t\tcolor\n\t\t\t\t));\n\n\t\t\t\tif (lineChange.charChanges) {\n\t\t\t\t\tfor (let j = 0, lengthJ = lineChange.charChanges.length; j < lengthJ; j++) {\n\t\t\t\t\t\tlet charChange = lineChange.charChanges[j];\n\t\t\t\t\t\tif (isChangeOrDelete(charChange)) {\n\t\t\t\t\t\t\tif (ignoreTrimWhitespace) {\n\t\t\t\t\t\t\t\tfor (let lineNumber = charChange.originalStartLineNumber; lineNumber <= charChange.originalEndLineNumber; lineNumber++) {\n\t\t\t\t\t\t\t\t\tlet startColumn: number;\n\t\t\t\t\t\t\t\t\tlet endColumn: number;\n\t\t\t\t\t\t\t\t\tif (lineNumber === charChange.originalStartLineNumber) {\n\t\t\t\t\t\t\t\t\t\tstartColumn = charChange.originalStartColumn;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tstartColumn = originalModel.getLineFirstNonWhitespaceColumn(lineNumber);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (lineNumber === charChange.originalEndLineNumber) {\n\t\t\t\t\t\t\t\t\t\tendColumn = charChange.originalEndColumn;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tendColumn = originalModel.getLineLastNonWhitespaceColumn(lineNumber);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tresult.decorations.push(createDecoration(lineNumber, startColumn, lineNumber, endColumn, DECORATIONS.charDelete));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tresult.decorations.push(createDecoration(charChange.originalStartLineNumber, charChange.originalStartColumn, charChange.originalEndLineNumber, charChange.originalEndColumn, DECORATIONS.charDelete));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t_getModifiedEditorDecorations(lineChanges: editorCommon.ILineChange[], ignoreTrimWhitespace: boolean, renderIndicators: boolean, originalEditor: editorBrowser.ICodeEditor, modifiedEditor: editorBrowser.ICodeEditor): IEditorDiffDecorations {\n\n\t\tlet result: IEditorDiffDecorations = {\n\t\t\tdecorations: [],\n\t\t\toverviewZones: []\n\t\t};\n\n\t\tlet modifiedModel = modifiedEditor.getModel();\n\n\t\tfor (let i = 0, length = lineChanges.length; i < length; i++) {\n\t\t\tlet lineChange = lineChanges[i];\n\n\t\t\tif (isChangeOrInsert(lineChange)) {\n\n\t\t\t\tresult.decorations.push({\n\t\t\t\t\trange: new Range(lineChange.modifiedStartLineNumber, 1, lineChange.modifiedEndLineNumber, Number.MAX_VALUE),\n\t\t\t\t\toptions: (renderIndicators ? DECORATIONS.lineInsertWithSign : DECORATIONS.lineInsert)\n\t\t\t\t});\n\t\t\t\tif (!isChangeOrDelete(lineChange) || !lineChange.charChanges) {\n\t\t\t\t\tresult.decorations.push(createDecoration(lineChange.modifiedStartLineNumber, 1, lineChange.modifiedEndLineNumber, Number.MAX_VALUE, DECORATIONS.charInsertWholeLine));\n\t\t\t\t}\n\t\t\t\tlet color = this._insertColor.toString();\n\t\t\t\tresult.overviewZones.push(new OverviewRulerZone(\n\t\t\t\t\tlineChange.modifiedStartLineNumber,\n\t\t\t\t\tlineChange.modifiedEndLineNumber,\n\t\t\t\t\teditorCommon.OverviewRulerLane.Full,\n\t\t\t\t\t0,\n\t\t\t\t\tcolor,\n\t\t\t\t\tcolor,\n\t\t\t\t\tcolor\n\t\t\t\t));\n\n\t\t\t\tif (lineChange.charChanges) {\n\t\t\t\t\tfor (let j = 0, lengthJ = lineChange.charChanges.length; j < lengthJ; j++) {\n\t\t\t\t\t\tlet charChange = lineChange.charChanges[j];\n\t\t\t\t\t\tif (isChangeOrInsert(charChange)) {\n\t\t\t\t\t\t\tif (ignoreTrimWhitespace) {\n\t\t\t\t\t\t\t\tfor (let lineNumber = charChange.modifiedStartLineNumber; lineNumber <= charChange.modifiedEndLineNumber; lineNumber++) {\n\t\t\t\t\t\t\t\t\tlet startColumn: number;\n\t\t\t\t\t\t\t\t\tlet endColumn: number;\n\t\t\t\t\t\t\t\t\tif (lineNumber === charChange.modifiedStartLineNumber) {\n\t\t\t\t\t\t\t\t\t\tstartColumn = charChange.modifiedStartColumn;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tstartColumn = modifiedModel.getLineFirstNonWhitespaceColumn(lineNumber);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (lineNumber === charChange.modifiedEndLineNumber) {\n\t\t\t\t\t\t\t\t\t\tendColumn = charChange.modifiedEndColumn;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tendColumn = modifiedModel.getLineLastNonWhitespaceColumn(lineNumber);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tresult.decorations.push(createDecoration(lineNumber, startColumn, lineNumber, endColumn, DECORATIONS.charInsert));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tresult.decorations.push(createDecoration(charChange.modifiedStartLineNumber, charChange.modifiedStartColumn, charChange.modifiedEndLineNumber, charChange.modifiedEndColumn, DECORATIONS.charInsert));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n}\n\nclass SideBySideViewZonesComputer extends ViewZonesComputer {\n\n\tconstructor(lineChanges: editorCommon.ILineChange[], originalForeignVZ: IEditorWhitespace[], modifiedForeignVZ: IEditorWhitespace[]) {\n\t\tsuper(lineChanges, originalForeignVZ, modifiedForeignVZ);\n\t}\n\n\t_produceOriginalFromDiff(lineChange: editorCommon.ILineChange, lineChangeOriginalLength: number, lineChangeModifiedLength: number): IMyViewZone {\n\t\tif (lineChangeModifiedLength > lineChangeOriginalLength) {\n\t\t\treturn {\n\t\t\t\tafterLineNumber: Math.max(lineChange.originalStartLineNumber, lineChange.originalEndLineNumber),\n\t\t\t\theightInLines: (lineChangeModifiedLength - lineChangeOriginalLength),\n\t\t\t\tdomNode: null\n\t\t\t};\n\t\t}\n\t\treturn null;\n\t}\n\n\t_produceModifiedFromDiff(lineChange: editorCommon.ILineChange, lineChangeOriginalLength: number, lineChangeModifiedLength: number): IMyViewZone {\n\t\tif (lineChangeOriginalLength > lineChangeModifiedLength) {\n\t\t\treturn {\n\t\t\t\tafterLineNumber: Math.max(lineChange.modifiedStartLineNumber, lineChange.modifiedEndLineNumber),\n\t\t\t\theightInLines: (lineChangeOriginalLength - lineChangeModifiedLength),\n\t\t\t\tdomNode: null\n\t\t\t};\n\t\t}\n\t\treturn null;\n\t}\n}\n\nclass DiffEdtorWidgetInline extends DiffEditorWidgetStyle implements IDiffEditorWidgetStyle {\n\n\tprivate decorationsLeft: number;\n\n\tconstructor(dataSource: IDataSource, enableSplitViewResizing: boolean) {\n\t\tsuper(dataSource);\n\n\t\tthis.decorationsLeft = dataSource.getOriginalEditor().getLayoutInfo().decorationsLeft;\n\n\t\tthis._register(dataSource.getOriginalEditor().onDidLayoutChange((layoutInfo: editorOptions.EditorLayoutInfo) => {\n\t\t\tif (this.decorationsLeft !== layoutInfo.decorationsLeft) {\n\t\t\t\tthis.decorationsLeft = layoutInfo.decorationsLeft;\n\t\t\t\tdataSource.relayoutEditors();\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t}\n\n\tpublic setEnableSplitViewResizing(enableSplitViewResizing: boolean): void {\n\t\t// Nothing to do..\n\t}\n\n\t_getViewZones(lineChanges: editorCommon.ILineChange[], originalForeignVZ: IEditorWhitespace[], modifiedForeignVZ: IEditorWhitespace[], originalEditor: editorBrowser.ICodeEditor, modifiedEditor: editorBrowser.ICodeEditor, renderIndicators: boolean): IEditorsZones {\n\t\tlet computer = new InlineViewZonesComputer(lineChanges, originalForeignVZ, modifiedForeignVZ, originalEditor, modifiedEditor, renderIndicators);\n\t\treturn computer.getViewZones();\n\t}\n\n\t_getOriginalEditorDecorations(lineChanges: editorCommon.ILineChange[], ignoreTrimWhitespace: boolean, renderIndicators: boolean, originalEditor: editorBrowser.ICodeEditor, modifiedEditor: editorBrowser.ICodeEditor): IEditorDiffDecorations {\n\t\tlet result: IEditorDiffDecorations = {\n\t\t\tdecorations: [],\n\t\t\toverviewZones: []\n\t\t};\n\n\t\tfor (let i = 0, length = lineChanges.length; i < length; i++) {\n\t\t\tlet lineChange = lineChanges[i];\n\n\t\t\t// Add overview zones in the overview ruler\n\t\t\tif (isChangeOrDelete(lineChange)) {\n\t\t\t\tresult.decorations.push({\n\t\t\t\t\trange: new Range(lineChange.originalStartLineNumber, 1, lineChange.originalEndLineNumber, Number.MAX_VALUE),\n\t\t\t\t\toptions: DECORATIONS.lineDeleteMargin\n\t\t\t\t});\n\n\t\t\t\tlet color = this._removeColor.toString();\n\t\t\t\tresult.overviewZones.push(new OverviewRulerZone(\n\t\t\t\t\tlineChange.originalStartLineNumber,\n\t\t\t\t\tlineChange.originalEndLineNumber,\n\t\t\t\t\teditorCommon.OverviewRulerLane.Full,\n\t\t\t\t\t0,\n\t\t\t\t\tcolor,\n\t\t\t\t\tcolor,\n\t\t\t\t\tcolor\n\t\t\t\t));\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t_getModifiedEditorDecorations(lineChanges: editorCommon.ILineChange[], ignoreTrimWhitespace: boolean, renderIndicators: boolean, originalEditor: editorBrowser.ICodeEditor, modifiedEditor: editorBrowser.ICodeEditor): IEditorDiffDecorations {\n\n\t\tlet result: IEditorDiffDecorations = {\n\t\t\tdecorations: [],\n\t\t\toverviewZones: []\n\t\t};\n\n\t\tlet modifiedModel = modifiedEditor.getModel();\n\n\t\tfor (let i = 0, length = lineChanges.length; i < length; i++) {\n\t\t\tlet lineChange = lineChanges[i];\n\n\t\t\t// Add decorations & overview zones\n\t\t\tif (isChangeOrInsert(lineChange)) {\n\t\t\t\tresult.decorations.push({\n\t\t\t\t\trange: new Range(lineChange.modifiedStartLineNumber, 1, lineChange.modifiedEndLineNumber, Number.MAX_VALUE),\n\t\t\t\t\toptions: (renderIndicators ? DECORATIONS.lineInsertWithSign : DECORATIONS.lineInsert)\n\t\t\t\t});\n\n\t\t\t\tlet color = this._insertColor.toString();\n\t\t\t\tresult.overviewZones.push(new OverviewRulerZone(\n\t\t\t\t\tlineChange.modifiedStartLineNumber,\n\t\t\t\t\tlineChange.modifiedEndLineNumber,\n\t\t\t\t\teditorCommon.OverviewRulerLane.Full,\n\t\t\t\t\t0,\n\t\t\t\t\tcolor,\n\t\t\t\t\tcolor,\n\t\t\t\t\tcolor\n\t\t\t\t));\n\n\t\t\t\tif (lineChange.charChanges) {\n\t\t\t\t\tfor (let j = 0, lengthJ = lineChange.charChanges.length; j < lengthJ; j++) {\n\t\t\t\t\t\tlet charChange = lineChange.charChanges[j];\n\t\t\t\t\t\tif (isChangeOrInsert(charChange)) {\n\t\t\t\t\t\t\tif (ignoreTrimWhitespace) {\n\t\t\t\t\t\t\t\tfor (let lineNumber = charChange.modifiedStartLineNumber; lineNumber <= charChange.modifiedEndLineNumber; lineNumber++) {\n\t\t\t\t\t\t\t\t\tlet startColumn: number;\n\t\t\t\t\t\t\t\t\tlet endColumn: number;\n\t\t\t\t\t\t\t\t\tif (lineNumber === charChange.modifiedStartLineNumber) {\n\t\t\t\t\t\t\t\t\t\tstartColumn = charChange.modifiedStartColumn;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tstartColumn = modifiedModel.getLineFirstNonWhitespaceColumn(lineNumber);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (lineNumber === charChange.modifiedEndLineNumber) {\n\t\t\t\t\t\t\t\t\t\tendColumn = charChange.modifiedEndColumn;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tendColumn = modifiedModel.getLineLastNonWhitespaceColumn(lineNumber);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tresult.decorations.push(createDecoration(lineNumber, startColumn, lineNumber, endColumn, DECORATIONS.charInsert));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tresult.decorations.push(createDecoration(charChange.modifiedStartLineNumber, charChange.modifiedStartColumn, charChange.modifiedEndLineNumber, charChange.modifiedEndColumn, DECORATIONS.charInsert));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresult.decorations.push(createDecoration(lineChange.modifiedStartLineNumber, 1, lineChange.modifiedEndLineNumber, Number.MAX_VALUE, DECORATIONS.charInsertWholeLine));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic layout(): number {\n\t\t// An editor should not be smaller than 5px\n\t\treturn Math.max(5, this.decorationsLeft);\n\t}\n\n}\n\nclass InlineViewZonesComputer extends ViewZonesComputer {\n\n\tprivate originalModel: editorCommon.IModel;\n\tprivate modifiedEditorConfiguration: editorOptions.InternalEditorOptions;\n\tprivate modifiedEditorTabSize: number;\n\tprivate renderIndicators: boolean;\n\n\tconstructor(lineChanges: editorCommon.ILineChange[], originalForeignVZ: IEditorWhitespace[], modifiedForeignVZ: IEditorWhitespace[], originalEditor: editorBrowser.ICodeEditor, modifiedEditor: editorBrowser.ICodeEditor, renderIndicators: boolean) {\n\t\tsuper(lineChanges, originalForeignVZ, modifiedForeignVZ);\n\t\tthis.originalModel = originalEditor.getModel();\n\t\tthis.modifiedEditorConfiguration = modifiedEditor.getConfiguration();\n\t\tthis.modifiedEditorTabSize = modifiedEditor.getModel().getOptions().tabSize;\n\t\tthis.renderIndicators = renderIndicators;\n\t}\n\n\t_produceOriginalFromDiff(lineChange: editorCommon.ILineChange, lineChangeOriginalLength: number, lineChangeModifiedLength: number): IMyViewZone {\n\t\tlet marginDomNode = document.createElement('div');\n\t\tmarginDomNode.className = 'inline-added-margin-view-zone';\n\t\tConfiguration.applyFontInfoSlow(marginDomNode, this.modifiedEditorConfiguration.fontInfo);\n\n\t\treturn {\n\t\t\tafterLineNumber: Math.max(lineChange.originalStartLineNumber, lineChange.originalEndLineNumber),\n\t\t\theightInLines: lineChangeModifiedLength,\n\t\t\tdomNode: document.createElement('div'),\n\t\t\tmarginDomNode: marginDomNode\n\t\t};\n\t}\n\n\t_produceModifiedFromDiff(lineChange: editorCommon.ILineChange, lineChangeOriginalLength: number, lineChangeModifiedLength: number): IMyViewZone {\n\t\tlet decorations: InlineDecoration[] = [];\n\t\tif (lineChange.charChanges) {\n\t\t\tfor (let j = 0, lengthJ = lineChange.charChanges.length; j < lengthJ; j++) {\n\t\t\t\tlet charChange = lineChange.charChanges[j];\n\t\t\t\tif (isChangeOrDelete(charChange)) {\n\t\t\t\t\tdecorations.push(new InlineDecoration(\n\t\t\t\t\t\tnew Range(charChange.originalStartLineNumber, charChange.originalStartColumn, charChange.originalEndLineNumber, charChange.originalEndColumn),\n\t\t\t\t\t\t'char-delete',\n\t\t\t\t\t\tfalse\n\t\t\t\t\t));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet html: string[] = [];\n\t\tlet marginHTML: string[] = [];\n\t\tlet lineDecorationsWidth = this.modifiedEditorConfiguration.layoutInfo.decorationsWidth;\n\t\tlet lineHeight = this.modifiedEditorConfiguration.lineHeight;\n\t\tfor (let lineNumber = lineChange.originalStartLineNumber; lineNumber <= lineChange.originalEndLineNumber; lineNumber++) {\n\t\t\thtml = html.concat(this.renderOriginalLine(lineNumber - lineChange.originalStartLineNumber, this.originalModel, this.modifiedEditorConfiguration, this.modifiedEditorTabSize, lineNumber, decorations));\n\n\t\t\tif (this.renderIndicators) {\n\t\t\t\tlet index = lineNumber - lineChange.originalStartLineNumber;\n\t\t\t\tmarginHTML = marginHTML.concat([\n\t\t\t\t\t`
    `\n\t\t\t\t]);\n\t\t\t}\n\t\t}\n\n\t\tlet domNode = document.createElement('div');\n\t\tdomNode.className = 'view-lines line-delete';\n\t\tdomNode.innerHTML = html.join('');\n\t\tConfiguration.applyFontInfoSlow(domNode, this.modifiedEditorConfiguration.fontInfo);\n\n\t\tlet marginDomNode = document.createElement('div');\n\t\tmarginDomNode.className = 'inline-deleted-margin-view-zone';\n\t\tmarginDomNode.innerHTML = marginHTML.join('');\n\t\tConfiguration.applyFontInfoSlow(marginDomNode, this.modifiedEditorConfiguration.fontInfo);\n\n\t\treturn {\n\t\t\tshouldNotShrink: true,\n\t\t\tafterLineNumber: (lineChange.modifiedEndLineNumber === 0 ? lineChange.modifiedStartLineNumber : lineChange.modifiedStartLineNumber - 1),\n\t\t\theightInLines: lineChangeOriginalLength,\n\t\t\tdomNode: domNode,\n\t\t\tmarginDomNode: marginDomNode\n\t\t};\n\t}\n\n\tprivate renderOriginalLine(count: number, originalModel: editorCommon.IModel, config: editorOptions.InternalEditorOptions, tabSize: number, lineNumber: number, decorations: InlineDecoration[]): string[] {\n\t\tlet lineContent = originalModel.getLineContent(lineNumber);\n\n\t\tlet actualDecorations = LineDecoration.filter(decorations, lineNumber, 1, lineContent.length + 1);\n\n\t\tconst defaultMetadata = (\n\t\t\t(FontStyle.None << MetadataConsts.FONT_STYLE_OFFSET)\n\t\t\t| (ColorId.DefaultForeground << MetadataConsts.FOREGROUND_OFFSET)\n\t\t\t| (ColorId.DefaultBackground << MetadataConsts.BACKGROUND_OFFSET)\n\t\t) >>> 0;\n\n\t\tlet r = renderViewLine(new RenderLineInput(\n\t\t\t(config.fontInfo.isMonospace && !config.viewInfo.disableMonospaceOptimizations),\n\t\t\tlineContent,\n\t\t\toriginalModel.mightContainRTL(),\n\t\t\t0,\n\t\t\t[new ViewLineToken(lineContent.length, defaultMetadata)],\n\t\t\tactualDecorations,\n\t\t\ttabSize,\n\t\t\tconfig.fontInfo.spaceWidth,\n\t\t\tconfig.viewInfo.stopRenderingLineAfter,\n\t\t\tconfig.viewInfo.renderWhitespace,\n\t\t\tconfig.viewInfo.renderControlCharacters,\n\t\t\tconfig.viewInfo.fontLigatures\n\t\t));\n\n\t\tlet myResult: string[] = [];\n\t\tmyResult.push('
    ');\n\t\tmyResult = myResult.concat(r.html);\n\t\tmyResult.push('
    ');\n\n\t\treturn myResult;\n\t}\n}\n\nfunction isChangeOrInsert(lineChange: editorCommon.IChange): boolean {\n\treturn lineChange.modifiedEndLineNumber > 0;\n}\n\nfunction isChangeOrDelete(lineChange: editorCommon.IChange): boolean {\n\treturn lineChange.originalEndLineNumber > 0;\n}\n\nfunction createFakeLinesDiv(): HTMLElement {\n\tlet r = document.createElement('div');\n\tr.className = 'diagonal-fill';\n\treturn r;\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tlet added = theme.getColor(diffInserted);\n\tif (added) {\n\t\tcollector.addRule(`.monaco-editor .line-insert, .monaco-editor .char-insert { background-color: ${added}; }`);\n\t\tcollector.addRule(`.monaco-diff-editor .line-insert, .monaco-diff-editor .char-insert { background-color: ${added}; }`);\n\t\tcollector.addRule(`.monaco-editor .inline-added-margin-view-zone { background-color: ${added}; }`);\n\t}\n\tlet removed = theme.getColor(diffRemoved);\n\tif (removed) {\n\t\tcollector.addRule(`.monaco-editor .line-delete, .monaco-editor .char-delete { background-color: ${removed}; }`);\n\t\tcollector.addRule(`.monaco-diff-editor .line-delete, .monaco-diff-editor .char-delete { background-color: ${removed}; }`);\n\t\tcollector.addRule(`.monaco-editor .inline-deleted-margin-view-zone { background-color: ${removed}; }`);\n\t}\n\tlet addedOutline = theme.getColor(diffInsertedOutline);\n\tif (addedOutline) {\n\t\tcollector.addRule(`.monaco-editor .line-insert, .monaco-editor .char-insert { border: 1px dashed ${addedOutline}; }`);\n\t}\n\tlet removedOutline = theme.getColor(diffRemovedOutline);\n\tif (removedOutline) {\n\t\tcollector.addRule(`.monaco-editor .line-delete, .monaco-editor .char-delete { border: 1px dashed ${removedOutline}; }`);\n\t}\n\tlet shadow = theme.getColor(scrollbarShadow);\n\tif (shadow) {\n\t\tcollector.addRule(`.monaco-diff-editor.side-by-side .editor.modified { box-shadow: -6px 0 5px -5px ${shadow}; }`);\n\t}\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'use strict';\n\nimport * as objects from 'vs/base/common/objects';\nimport { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';\nimport { ICommandService } from 'vs/platform/commands/common/commands';\nimport { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';\nimport { ICodeEditorService } from 'vs/editor/common/services/codeEditorService';\nimport { ICodeEditor } from 'vs/editor/browser/editorBrowser';\nimport { CodeEditor } from 'vs/editor/browser/codeEditor';\nimport { IConfigurationChangedEvent, IEditorOptions } from 'vs/editor/common/config/editorOptions';\nimport { IThemeService } from 'vs/platform/theme/common/themeService';\n\nexport class EmbeddedCodeEditorWidget extends CodeEditor {\n\n\tprivate _parentEditor: ICodeEditor;\n\tprivate _overwriteOptions: IEditorOptions;\n\n\tconstructor(\n\t\tdomElement: HTMLElement,\n\t\toptions: IEditorOptions,\n\t\tparentEditor: ICodeEditor,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t\t@ICodeEditorService codeEditorService: ICodeEditorService,\n\t\t@ICommandService commandService: ICommandService,\n\t\t@IContextKeyService contextKeyService: IContextKeyService,\n\t\t@IThemeService themeService: IThemeService\n\t) {\n\t\tsuper(domElement, parentEditor.getRawConfiguration(), instantiationService, codeEditorService, commandService, contextKeyService, themeService);\n\n\t\tthis._parentEditor = parentEditor;\n\t\tthis._overwriteOptions = options;\n\n\t\t// Overwrite parent's options\n\t\tsuper.updateOptions(this._overwriteOptions);\n\n\t\tthis._register(parentEditor.onDidChangeConfiguration((e: IConfigurationChangedEvent) => this._onParentConfigurationChanged(e)));\n\t}\n\n\tpublic getParentEditor(): ICodeEditor {\n\t\treturn this._parentEditor;\n\t}\n\n\tprivate _onParentConfigurationChanged(e: IConfigurationChangedEvent): void {\n\t\tsuper.updateOptions(this._parentEditor.getRawConfiguration());\n\t\tsuper.updateOptions(this._overwriteOptions);\n\t}\n\n\tpublic updateOptions(newOptions: IEditorOptions): void {\n\t\tobjects.mixin(this._overwriteOptions, newOptions, true);\n\t\tsuper.updateOptions(this._overwriteOptions);\n\t}\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'use strict';\n\nimport * as nls from 'vs/nls';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Position } from 'vs/editor/common/core/position';\nimport { RunOnceScheduler } from 'vs/base/common/async';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { editorAction, commonEditorContribution, ServicesAccessor, EditorAction } from 'vs/editor/common/editorCommonExtensions';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { registerThemingParticipant } from 'vs/platform/theme/common/themeService';\nimport { editorBracketMatchBackground, editorBracketMatchBorder } from 'vs/editor/common/view/editorColorRegistry';\nimport { ModelDecorationOptions } from 'vs/editor/common/model/textModelWithDecorations';\n\n@editorAction\nclass SelectBracketAction extends EditorAction {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.jumpToBracket',\n\t\t\tlabel: nls.localize('smartSelect.jumpBracket', \"Go to Bracket\"),\n\t\t\talias: 'Go to Bracket',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.US_BACKSLASH\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\t\tlet controller = BracketMatchingController.get(editor);\n\t\tif (!controller) {\n\t\t\treturn;\n\t\t}\n\t\tcontroller.jumpToBracket();\n\t}\n}\n\ntype Brackets = [Range, Range];\n\nclass BracketsData {\n\tpublic readonly position: Position;\n\tpublic readonly brackets: Brackets;\n\n\tconstructor(position: Position, brackets: Brackets) {\n\t\tthis.position = position;\n\t\tthis.brackets = brackets;\n\t}\n}\n\n@commonEditorContribution\nexport class BracketMatchingController extends Disposable implements editorCommon.IEditorContribution {\n\tprivate static ID = 'editor.contrib.bracketMatchingController';\n\n\tpublic static get(editor: editorCommon.ICommonCodeEditor): BracketMatchingController {\n\t\treturn editor.getContribution(BracketMatchingController.ID);\n\t}\n\n\tprivate readonly _editor: editorCommon.ICommonCodeEditor;\n\n\tprivate _lastBracketsData: BracketsData[];\n\tprivate _lastVersionId: number;\n\tprivate _decorations: string[];\n\tprivate _updateBracketsSoon: RunOnceScheduler;\n\tprivate _matchBrackets: boolean;\n\n\tconstructor(\n\t\teditor: editorCommon.ICommonCodeEditor\n\t) {\n\t\tsuper();\n\t\tthis._editor = editor;\n\t\tthis._lastBracketsData = [];\n\t\tthis._lastVersionId = 0;\n\t\tthis._decorations = [];\n\t\tthis._updateBracketsSoon = this._register(new RunOnceScheduler(() => this._updateBrackets(), 50));\n\t\tthis._matchBrackets = this._editor.getConfiguration().contribInfo.matchBrackets;\n\n\t\tthis._updateBracketsSoon.schedule();\n\t\tthis._register(editor.onDidChangeCursorPosition((e) => {\n\n\t\t\tif (!this._matchBrackets) {\n\t\t\t\t// Early exit if nothing needs to be done!\n\t\t\t\t// Leave some form of early exit check here if you wish to continue being a cursor position change listener ;)\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._updateBracketsSoon.schedule();\n\t\t}));\n\t\tthis._register(editor.onDidChangeModel((e) => { this._decorations = []; this._updateBracketsSoon.schedule(); }));\n\t\tthis._register(editor.onDidChangeConfiguration((e) => {\n\t\t\tthis._matchBrackets = this._editor.getConfiguration().contribInfo.matchBrackets;\n\t\t\tif (!this._matchBrackets && this._decorations.length > 0) {\n\t\t\t\t// Remove existing decorations if bracket matching is off\n\t\t\t\tthis._decorations = this._editor.deltaDecorations(this._decorations, []);\n\t\t\t}\n\t\t\tthis._updateBracketsSoon.schedule();\n\t\t}));\n\t}\n\n\tpublic getId(): string {\n\t\treturn BracketMatchingController.ID;\n\t}\n\n\tpublic jumpToBracket(): void {\n\t\tconst model = this._editor.getModel();\n\t\tif (!model) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst selection = this._editor.getSelection();\n\t\tif (!selection.isEmpty()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst position = selection.getStartPosition();\n\t\tconst brackets = model.matchBracket(position);\n\t\tif (!brackets) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet resultingPosition: Position = null;\n\t\tif (brackets[0].containsPosition(position)) {\n\t\t\tresultingPosition = brackets[1].getStartPosition();\n\t\t} else if (brackets[1].containsPosition(position)) {\n\t\t\tresultingPosition = brackets[0].getStartPosition();\n\t\t}\n\n\t\tif (resultingPosition) {\n\t\t\tthis._editor.setPosition(resultingPosition);\n\t\t\tthis._editor.revealPosition(resultingPosition);\n\t\t}\n\t}\n\n\tprivate static _DECORATION_OPTIONS = ModelDecorationOptions.register({\n\t\tstickiness: editorCommon.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\tclassName: 'bracket-match'\n\t});\n\n\tprivate _updateBrackets(): void {\n\t\tif (!this._matchBrackets) {\n\t\t\treturn;\n\t\t}\n\t\tthis._recomputeBrackets();\n\n\t\tlet newDecorations: editorCommon.IModelDeltaDecoration[] = [], newDecorationsLen = 0;\n\t\tfor (let i = 0, len = this._lastBracketsData.length; i < len; i++) {\n\t\t\tlet brackets = this._lastBracketsData[i].brackets;\n\t\t\tif (brackets) {\n\t\t\t\tnewDecorations[newDecorationsLen++] = { range: brackets[0], options: BracketMatchingController._DECORATION_OPTIONS };\n\t\t\t\tnewDecorations[newDecorationsLen++] = { range: brackets[1], options: BracketMatchingController._DECORATION_OPTIONS };\n\t\t\t}\n\t\t}\n\n\t\tthis._decorations = this._editor.deltaDecorations(this._decorations, newDecorations);\n\t}\n\n\tprivate _recomputeBrackets(): void {\n\t\tconst model = this._editor.getModel();\n\t\tif (!model) {\n\t\t\t// no model => no brackets!\n\t\t\tthis._lastBracketsData = [];\n\t\t\tthis._lastVersionId = 0;\n\t\t\treturn;\n\t\t}\n\n\t\tconst versionId = model.getVersionId();\n\t\tlet previousData: BracketsData[] = [];\n\t\tif (this._lastVersionId === versionId) {\n\t\t\t// use the previous data only if the model is at the same version id\n\t\t\tpreviousData = this._lastBracketsData;\n\t\t}\n\n\t\tconst selections = this._editor.getSelections();\n\n\t\tlet positions: Position[] = [], positionsLen = 0;\n\t\tfor (let i = 0, len = selections.length; i < len; i++) {\n\t\t\tlet selection = selections[i];\n\n\t\t\tif (selection.isEmpty()) {\n\t\t\t\t// will bracket match a cursor only if the selection is collapsed\n\t\t\t\tpositions[positionsLen++] = selection.getStartPosition();\n\t\t\t}\n\t\t}\n\n\t\t// sort positions for `previousData` cache hits\n\t\tif (positions.length > 1) {\n\t\t\tpositions.sort(Position.compare);\n\t\t}\n\n\t\tlet newData: BracketsData[] = [], newDataLen = 0;\n\t\tlet previousIndex = 0, previousLen = previousData.length;\n\t\tfor (let i = 0, len = positions.length; i < len; i++) {\n\t\t\tlet position = positions[i];\n\n\t\t\twhile (previousIndex < previousLen && previousData[previousIndex].position.isBefore(position)) {\n\t\t\t\tpreviousIndex++;\n\t\t\t}\n\n\t\t\tif (previousIndex < previousLen && previousData[previousIndex].position.equals(position)) {\n\t\t\t\tnewData[newDataLen++] = previousData[previousIndex];\n\t\t\t} else {\n\t\t\t\tlet brackets = model.matchBracket(position);\n\t\t\t\tnewData[newDataLen++] = new BracketsData(position, brackets);\n\t\t\t}\n\t\t}\n\n\t\tthis._lastBracketsData = newData;\n\t\tthis._lastVersionId = versionId;\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tlet bracketMatchBackground = theme.getColor(editorBracketMatchBackground);\n\tif (bracketMatchBackground) {\n\t\tcollector.addRule(`.monaco-editor .bracket-match { background-color: ${bracketMatchBackground}; }`);\n\t}\n\tlet bracketMatchBorder = theme.getColor(editorBracketMatchBorder);\n\tif (bracketMatchBorder) {\n\t\tcollector.addRule(`.monaco-editor .bracket-match { border: 1px solid ${bracketMatchBorder}; }`);\n\t}\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'use strict';\n\nimport 'vs/css!./codelensWidget';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport Severity from 'vs/base/common/severity';\nimport { format, escape } from 'vs/base/common/strings';\nimport * as dom from 'vs/base/browser/dom';\nimport { ICommandService } from 'vs/platform/commands/common/commands';\nimport { IMessageService } from 'vs/platform/message/common/message';\nimport { Range } from 'vs/editor/common/core/range';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { ICodeLensSymbol, Command } from 'vs/editor/common/modes';\nimport * as editorBrowser from 'vs/editor/browser/editorBrowser';\nimport { ICodeLensData } from './codelens';\nimport { ModelDecorationOptions } from 'vs/editor/common/model/textModelWithDecorations';\nimport { editorCodeLensForeground } from 'vs/editor/common/view/editorColorRegistry';\nimport { registerThemingParticipant } from 'vs/platform/theme/common/themeService';\nimport { editorActiveLinkForeground } from 'vs/platform/theme/common/colorRegistry';\n\nclass CodeLensViewZone implements editorBrowser.IViewZone {\n\n\treadonly heightInLines: number;\n\treadonly suppressMouseDown: boolean;\n\treadonly domNode: HTMLElement;\n\n\tafterLineNumber: number;\n\n\tprivate _lastHeight: number;\n\tprivate _onHeight: Function;\n\n\tconstructor(afterLineNumber: number, onHeight: Function) {\n\t\tthis.afterLineNumber = afterLineNumber;\n\t\tthis._onHeight = onHeight;\n\n\t\tthis.heightInLines = 1;\n\t\tthis.suppressMouseDown = true;\n\t\tthis.domNode = document.createElement('div');\n\t}\n\n\tonComputedHeight(height: number): void {\n\t\tif (this._lastHeight === undefined) {\n\t\t\tthis._lastHeight = height;\n\t\t} else if (this._lastHeight !== height) {\n\t\t\tthis._lastHeight = height;\n\t\t\tthis._onHeight();\n\t\t}\n\t}\n}\n\nclass CodeLensContentWidget implements editorBrowser.IContentWidget {\n\n\tprivate static _idPool: number = 0;\n\n\t// Editor.IContentWidget.allowEditorOverflow\n\treadonly allowEditorOverflow: boolean = false;\n\treadonly suppressMouseDown: boolean = true;\n\n\tprivate readonly _id: string;\n\tprivate readonly _domNode: HTMLElement;\n\tprivate readonly _disposables: IDisposable[] = [];\n\tprivate readonly _editor: editorBrowser.ICodeEditor;\n\n\tprivate _symbolRange: Range;\n\tprivate _widgetPosition: editorBrowser.IContentWidgetPosition;\n\tprivate _commands: { [id: string]: Command } = Object.create(null);\n\n\tconstructor(\n\t\teditor: editorBrowser.ICodeEditor,\n\t\tsymbolRange: Range,\n\t\tcommandService: ICommandService,\n\t\tmessageService: IMessageService\n\t) {\n\n\t\tthis._id = 'codeLensWidget' + (++CodeLensContentWidget._idPool);\n\t\tthis._editor = editor;\n\n\t\tthis.setSymbolRange(symbolRange);\n\n\t\tthis._domNode = document.createElement('span');\n\t\tthis._domNode.innerHTML = ' ';\n\t\tdom.addClass(this._domNode, 'codelens-decoration');\n\t\tdom.addClass(this._domNode, 'invisible-cl');\n\t\tthis._updateHeight();\n\n\t\tthis._disposables.push(this._editor.onDidChangeConfiguration(e => e.fontInfo && this._updateHeight()));\n\n\t\tthis._disposables.push(dom.addDisposableListener(this._domNode, 'click', e => {\n\t\t\tlet element = e.target;\n\t\t\tif (element.tagName === 'A' && element.id) {\n\t\t\t\tlet command = this._commands[element.id];\n\t\t\t\tif (command) {\n\t\t\t\t\teditor.focus();\n\t\t\t\t\tcommandService.executeCommand(command.id, ...command.arguments).done(undefined, err => {\n\t\t\t\t\t\tmessageService.show(Severity.Error, err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\tthis.updateVisibility();\n\t}\n\n\tdispose(): void {\n\t\tdispose(this._disposables);\n\t\tthis._symbolRange = null;\n\t}\n\n\tprivate _updateHeight(): void {\n\t\tconst { fontInfo, lineHeight } = this._editor.getConfiguration();\n\t\tthis._domNode.style.height = `${Math.round(lineHeight * 1.1)}px`;\n\t\tthis._domNode.style.lineHeight = `${lineHeight}px`;\n\t\tthis._domNode.style.fontSize = `${Math.round(fontInfo.fontSize * .9)}px`;\n\t\tthis._domNode.innerHTML = ' ';\n\t}\n\n\tupdateVisibility(): void {\n\t\tif (this.isVisible()) {\n\t\t\tdom.removeClass(this._domNode, 'invisible-cl');\n\t\t\tdom.addClass(this._domNode, 'fadein');\n\t\t}\n\t}\n\n\twithCommands(symbols: ICodeLensSymbol[]): void {\n\t\tthis._commands = Object.create(null);\n\t\tif (!symbols || !symbols.length) {\n\t\t\tthis._domNode.innerHTML = 'no commands';\n\t\t\treturn;\n\t\t}\n\n\t\tlet html: string[] = [];\n\t\tfor (let i = 0; i < symbols.length; i++) {\n\t\t\tlet command = symbols[i].command;\n\t\t\tlet title = escape(command.title);\n\t\t\tlet part: string;\n\t\t\tif (command.id) {\n\t\t\t\tpart = format('{1}', i, title);\n\t\t\t\tthis._commands[i] = command;\n\t\t\t} else {\n\t\t\t\tpart = format('{0}', title);\n\t\t\t}\n\t\t\thtml.push(part);\n\t\t}\n\n\t\tthis._domNode.innerHTML = html.join(' | ');\n\t\tthis._editor.layoutContentWidget(this);\n\t}\n\n\tgetId(): string {\n\t\treturn this._id;\n\t}\n\n\tgetDomNode(): HTMLElement {\n\t\treturn this._domNode;\n\t}\n\n\tsetSymbolRange(range: Range): void {\n\t\tthis._symbolRange = range;\n\n\t\tconst lineNumber = range.startLineNumber;\n\t\tconst column = this._editor.getModel().getLineFirstNonWhitespaceColumn(lineNumber);\n\t\tthis._widgetPosition = {\n\t\t\tposition: { lineNumber: lineNumber, column: column },\n\t\t\tpreference: [editorBrowser.ContentWidgetPositionPreference.ABOVE]\n\t\t};\n\t}\n\n\tgetPosition(): editorBrowser.IContentWidgetPosition {\n\t\treturn this._widgetPosition;\n\t}\n\n\tisVisible(): boolean {\n\t\treturn this._domNode.hasAttribute('monaco-visible-content-widget');\n\t}\n}\n\nexport interface IDecorationIdCallback {\n\t(decorationId: string): void;\n}\n\nexport class CodeLensHelper {\n\n\tprivate _removeDecorations: string[];\n\tprivate _addDecorations: editorCommon.IModelDeltaDecoration[];\n\tprivate _addDecorationsCallbacks: IDecorationIdCallback[];\n\n\tconstructor() {\n\t\tthis._removeDecorations = [];\n\t\tthis._addDecorations = [];\n\t\tthis._addDecorationsCallbacks = [];\n\t}\n\n\taddDecoration(decoration: editorCommon.IModelDeltaDecoration, callback: IDecorationIdCallback): void {\n\t\tthis._addDecorations.push(decoration);\n\t\tthis._addDecorationsCallbacks.push(callback);\n\t}\n\n\tremoveDecoration(decorationId: string): void {\n\t\tthis._removeDecorations.push(decorationId);\n\t}\n\n\tcommit(changeAccessor: editorCommon.IModelDecorationsChangeAccessor): void {\n\t\tvar resultingDecorations = changeAccessor.deltaDecorations(this._removeDecorations, this._addDecorations);\n\t\tfor (let i = 0, len = resultingDecorations.length; i < len; i++) {\n\t\t\tthis._addDecorationsCallbacks[i](resultingDecorations[i]);\n\t\t}\n\t}\n}\n\nexport class CodeLens {\n\n\tprivate readonly _editor: editorBrowser.ICodeEditor;\n\tprivate readonly _viewZone: CodeLensViewZone;\n\tprivate readonly _viewZoneId: number;\n\tprivate readonly _contentWidget: CodeLensContentWidget;\n\tprivate _decorationIds: string[];\n\tprivate _data: ICodeLensData[];\n\n\tconstructor(\n\t\tdata: ICodeLensData[],\n\t\teditor: editorBrowser.ICodeEditor,\n\t\thelper: CodeLensHelper,\n\t\tviewZoneChangeAccessor: editorBrowser.IViewZoneChangeAccessor,\n\t\tcommandService: ICommandService, messageService: IMessageService,\n\t\tupdateCallabck: Function\n\t) {\n\t\tthis._editor = editor;\n\t\tthis._data = data;\n\t\tthis._decorationIds = new Array(this._data.length);\n\n\t\tlet range: Range;\n\t\tthis._data.forEach((codeLensData, i) => {\n\n\t\t\thelper.addDecoration({\n\t\t\t\trange: codeLensData.symbol.range,\n\t\t\t\toptions: ModelDecorationOptions.EMPTY\n\t\t\t}, id => this._decorationIds[i] = id);\n\n\t\t\t// the range contains all lenses on this line\n\t\t\tif (!range) {\n\t\t\t\trange = Range.lift(codeLensData.symbol.range);\n\t\t\t} else {\n\t\t\t\trange = Range.plusRange(range, codeLensData.symbol.range);\n\t\t\t}\n\t\t});\n\n\t\tthis._contentWidget = new CodeLensContentWidget(editor, range, commandService, messageService);\n\t\tthis._viewZone = new CodeLensViewZone(range.startLineNumber - 1, updateCallabck);\n\n\t\tthis._viewZoneId = viewZoneChangeAccessor.addZone(this._viewZone);\n\t\tthis._editor.addContentWidget(this._contentWidget);\n\t}\n\n\tdispose(helper: CodeLensHelper, viewZoneChangeAccessor: editorBrowser.IViewZoneChangeAccessor): void {\n\t\twhile (this._decorationIds.length) {\n\t\t\thelper.removeDecoration(this._decorationIds.pop());\n\t\t}\n\t\tif (viewZoneChangeAccessor) {\n\t\t\tviewZoneChangeAccessor.removeZone(this._viewZoneId);\n\t\t}\n\t\tthis._editor.removeContentWidget(this._contentWidget);\n\n\t\tthis._contentWidget.dispose();\n\t}\n\n\tisValid(): boolean {\n\t\treturn this._decorationIds.some((id, i) => {\n\t\t\tconst range = this._editor.getModel().getDecorationRange(id);\n\t\t\tconst symbol = this._data[i].symbol;\n\t\t\treturn range && Range.isEmpty(symbol.range) === range.isEmpty();\n\t\t});\n\t}\n\n\tupdateCodeLensSymbols(data: ICodeLensData[], helper: CodeLensHelper): void {\n\t\twhile (this._decorationIds.length) {\n\t\t\thelper.removeDecoration(this._decorationIds.pop());\n\t\t}\n\t\tthis._data = data;\n\t\tthis._decorationIds = new Array(this._data.length);\n\t\tthis._data.forEach((codeLensData, i) => {\n\t\t\thelper.addDecoration({\n\t\t\t\trange: codeLensData.symbol.range,\n\t\t\t\toptions: ModelDecorationOptions.EMPTY\n\t\t\t}, id => this._decorationIds[i] = id);\n\t\t});\n\t}\n\n\tcomputeIfNecessary(model: editorCommon.IModel): ICodeLensData[] {\n\t\tthis._contentWidget.updateVisibility(); // trigger the fade in\n\t\tif (!this._contentWidget.isVisible()) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Read editor current state\n\t\tfor (let i = 0; i < this._decorationIds.length; i++) {\n\t\t\tthis._data[i].symbol.range = model.getDecorationRange(this._decorationIds[i]);\n\t\t}\n\t\treturn this._data;\n\t}\n\n\tupdateCommands(symbols: ICodeLensSymbol[]): void {\n\t\tthis._contentWidget.withCommands(symbols);\n\t}\n\n\tgetLineNumber(): number {\n\t\tconst range = this._editor.getModel().getDecorationRange(this._decorationIds[0]);\n\t\tif (range) {\n\t\t\treturn range.startLineNumber;\n\t\t}\n\t\treturn -1;\n\t}\n\n\tupdate(viewZoneChangeAccessor: editorBrowser.IViewZoneChangeAccessor): void {\n\t\tif (this.isValid()) {\n\t\t\tconst range = this._editor.getModel().getDecorationRange(this._decorationIds[0]);\n\n\t\t\tthis._viewZone.afterLineNumber = range.startLineNumber - 1;\n\t\t\tviewZoneChangeAccessor.layoutZone(this._viewZoneId);\n\n\t\t\tthis._contentWidget.setSymbolRange(range);\n\t\t\tthis._editor.layoutContentWidget(this._contentWidget);\n\t\t}\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tlet codeLensForeground = theme.getColor(editorCodeLensForeground);\n\tif (codeLensForeground) {\n\t\tcollector.addRule(`.monaco-editor .codelens-decoration { color: ${codeLensForeground}; }`);\n\t}\n\tlet activeLinkForeground = theme.getColor(editorActiveLinkForeground);\n\tif (activeLinkForeground) {\n\t\tcollector.addRule(`.monaco-editor .codelens-decoration > a:hover { color: ${activeLinkForeground} !important; }`);\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { RunOnceScheduler, asWinJsPromise } from 'vs/base/common/async';\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { ICommandService } from 'vs/platform/commands/common/commands';\nimport { IMessageService } from 'vs/platform/message/common/message';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { CodeLensProviderRegistry, ICodeLensSymbol } from 'vs/editor/common/modes';\nimport * as editorBrowser from 'vs/editor/browser/editorBrowser';\nimport { editorContribution } from 'vs/editor/browser/editorBrowserExtensions';\nimport { ICodeLensData, getCodeLensData } from './codelens';\nimport { IConfigurationChangedEvent } from 'vs/editor/common/config/editorOptions';\nimport { CodeLens, CodeLensHelper } from 'vs/editor/contrib/codelens/browser/codelensWidget';\n\n@editorContribution\nexport class CodeLensContribution implements editorCommon.IEditorContribution {\n\n\tprivate static ID: string = 'css.editor.codeLens';\n\n\tprivate _isEnabled: boolean;\n\n\tprivate _globalToDispose: IDisposable[];\n\tprivate _localToDispose: IDisposable[];\n\tprivate _lenses: CodeLens[];\n\tprivate _currentFindCodeLensSymbolsPromise: TPromise;\n\tprivate _modelChangeCounter: number;\n\tprivate _currentFindOccPromise: TPromise;\n\tprivate _detectVisibleLenses: RunOnceScheduler;\n\n\tconstructor(\n\t\tprivate _editor: editorBrowser.ICodeEditor,\n\t\t@ICommandService private _commandService: ICommandService,\n\t\t@IMessageService private _messageService: IMessageService\n\t) {\n\t\tthis._isEnabled = this._editor.getConfiguration().contribInfo.codeLens;\n\n\t\tthis._globalToDispose = [];\n\t\tthis._localToDispose = [];\n\t\tthis._lenses = [];\n\t\tthis._currentFindCodeLensSymbolsPromise = null;\n\t\tthis._modelChangeCounter = 0;\n\n\t\tthis._globalToDispose.push(this._editor.onDidChangeModel(() => this._onModelChange()));\n\t\tthis._globalToDispose.push(this._editor.onDidChangeModelLanguage(() => this._onModelChange()));\n\t\tthis._globalToDispose.push(this._editor.onDidChangeConfiguration((e: IConfigurationChangedEvent) => {\n\t\t\tlet prevIsEnabled = this._isEnabled;\n\t\t\tthis._isEnabled = this._editor.getConfiguration().contribInfo.codeLens;\n\t\t\tif (prevIsEnabled !== this._isEnabled) {\n\t\t\t\tthis._onModelChange();\n\t\t\t}\n\t\t}));\n\t\tthis._globalToDispose.push(CodeLensProviderRegistry.onDidChange(this._onModelChange, this));\n\t\tthis._onModelChange();\n\t}\n\n\tdispose(): void {\n\t\tthis._localDispose();\n\t\tthis._globalToDispose = dispose(this._globalToDispose);\n\t}\n\n\tprivate _localDispose(): void {\n\t\tif (this._currentFindCodeLensSymbolsPromise) {\n\t\t\tthis._currentFindCodeLensSymbolsPromise.cancel();\n\t\t\tthis._currentFindCodeLensSymbolsPromise = null;\n\t\t\tthis._modelChangeCounter++;\n\t\t}\n\t\tif (this._currentFindOccPromise) {\n\t\t\tthis._currentFindOccPromise.cancel();\n\t\t\tthis._currentFindOccPromise = null;\n\t\t}\n\t\tthis._localToDispose = dispose(this._localToDispose);\n\t}\n\n\tgetId(): string {\n\t\treturn CodeLensContribution.ID;\n\t}\n\n\tprivate _onModelChange(): void {\n\n\t\tthis._localDispose();\n\n\t\tconst model = this._editor.getModel();\n\t\tif (!model) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this._isEnabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!CodeLensProviderRegistry.has(model)) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const provider of CodeLensProviderRegistry.all(model)) {\n\t\t\tif (typeof provider.onDidChange === 'function') {\n\t\t\t\tlet registration = provider.onDidChange(() => scheduler.schedule());\n\t\t\t\tthis._localToDispose.push(registration);\n\t\t\t}\n\t\t}\n\n\t\tthis._detectVisibleLenses = new RunOnceScheduler(() => {\n\t\t\tthis._onViewportChanged(model.getLanguageIdentifier().language);\n\t\t}, 500);\n\n\t\tconst scheduler = new RunOnceScheduler(() => {\n\t\t\tif (this._currentFindCodeLensSymbolsPromise) {\n\t\t\t\tthis._currentFindCodeLensSymbolsPromise.cancel();\n\t\t\t}\n\n\t\t\tthis._currentFindCodeLensSymbolsPromise = getCodeLensData(model);\n\n\t\t\tconst counterValue = ++this._modelChangeCounter;\n\t\t\tthis._currentFindCodeLensSymbolsPromise.then((result) => {\n\t\t\t\tif (counterValue === this._modelChangeCounter) { // only the last one wins\n\t\t\t\t\tthis._renderCodeLensSymbols(result);\n\t\t\t\t\tthis._detectVisibleLenses.schedule();\n\t\t\t\t}\n\t\t\t}, onUnexpectedError);\n\t\t}, 250);\n\t\tthis._localToDispose.push(scheduler);\n\t\tthis._localToDispose.push(this._detectVisibleLenses);\n\t\tthis._localToDispose.push(this._editor.onDidChangeModelContent((e) => {\n\t\t\tthis._editor.changeDecorations((changeAccessor) => {\n\t\t\t\tthis._editor.changeViewZones((viewAccessor) => {\n\t\t\t\t\tconst toDispose: CodeLens[] = [];\n\t\t\t\t\tthis._lenses.forEach((lens) => {\n\t\t\t\t\t\tif (lens.isValid()) {\n\t\t\t\t\t\t\tlens.update(viewAccessor);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoDispose.push(lens);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tlet helper = new CodeLensHelper();\n\t\t\t\t\ttoDispose.forEach((l) => {\n\t\t\t\t\t\tl.dispose(helper, viewAccessor);\n\t\t\t\t\t\tthis._lenses.splice(this._lenses.indexOf(l), 1);\n\t\t\t\t\t});\n\t\t\t\t\thelper.commit(changeAccessor);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// Compute new `visible` code lenses\n\t\t\tthis._detectVisibleLenses.schedule();\n\t\t\t// Ask for all references again\n\t\t\tscheduler.schedule();\n\t\t}));\n\t\tthis._localToDispose.push(this._editor.onDidScrollChange(e => {\n\t\t\tif (e.scrollTopChanged) {\n\t\t\t\tthis._detectVisibleLenses.schedule();\n\t\t\t}\n\t\t}));\n\t\tthis._localToDispose.push(this._editor.onDidLayoutChange(e => {\n\t\t\tthis._detectVisibleLenses.schedule();\n\t\t}));\n\t\tthis._localToDispose.push({\n\t\t\tdispose: () => {\n\t\t\t\tif (this._editor.getModel()) {\n\t\t\t\t\tthis._editor.changeDecorations((changeAccessor) => {\n\t\t\t\t\t\tthis._editor.changeViewZones((accessor) => {\n\t\t\t\t\t\t\tthis._disposeAllLenses(changeAccessor, accessor);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// No accessors available\n\t\t\t\t\tthis._disposeAllLenses(null, null);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tscheduler.schedule();\n\t}\n\n\tprivate _disposeAllLenses(decChangeAccessor: editorCommon.IModelDecorationsChangeAccessor, viewZoneChangeAccessor: editorBrowser.IViewZoneChangeAccessor): void {\n\t\tlet helper = new CodeLensHelper();\n\t\tthis._lenses.forEach((lens) => lens.dispose(helper, viewZoneChangeAccessor));\n\t\tif (decChangeAccessor) {\n\t\t\thelper.commit(decChangeAccessor);\n\t\t}\n\t\tthis._lenses = [];\n\t}\n\n\tprivate _renderCodeLensSymbols(symbols: ICodeLensData[]): void {\n\t\tif (!this._editor.getModel()) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet maxLineNumber = this._editor.getModel().getLineCount();\n\t\tlet groups: ICodeLensData[][] = [];\n\t\tlet lastGroup: ICodeLensData[];\n\n\t\tfor (let symbol of symbols) {\n\t\t\tlet line = symbol.symbol.range.startLineNumber;\n\t\t\tif (line < 1 || line > maxLineNumber) {\n\t\t\t\t// invalid code lens\n\t\t\t\tcontinue;\n\t\t\t} else if (lastGroup && lastGroup[lastGroup.length - 1].symbol.range.startLineNumber === line) {\n\t\t\t\t// on same line as previous\n\t\t\t\tlastGroup.push(symbol);\n\t\t\t} else {\n\t\t\t\t// on later line as previous\n\t\t\t\tlastGroup = [symbol];\n\t\t\t\tgroups.push(lastGroup);\n\t\t\t}\n\t\t}\n\n\t\tconst centeredRange = this._editor.getCenteredRangeInViewport();\n\t\tconst shouldRestoreCenteredRange = centeredRange && (groups.length !== this._lenses.length && this._editor.getScrollTop() !== 0);\n\t\tthis._editor.changeDecorations((changeAccessor) => {\n\t\t\tthis._editor.changeViewZones((accessor) => {\n\n\t\t\t\tlet codeLensIndex = 0, groupsIndex = 0, helper = new CodeLensHelper();\n\n\t\t\t\twhile (groupsIndex < groups.length && codeLensIndex < this._lenses.length) {\n\n\t\t\t\t\tlet symbolsLineNumber = groups[groupsIndex][0].symbol.range.startLineNumber;\n\t\t\t\t\tlet codeLensLineNumber = this._lenses[codeLensIndex].getLineNumber();\n\n\t\t\t\t\tif (codeLensLineNumber < symbolsLineNumber) {\n\t\t\t\t\t\tthis._lenses[codeLensIndex].dispose(helper, accessor);\n\t\t\t\t\t\tthis._lenses.splice(codeLensIndex, 1);\n\t\t\t\t\t} else if (codeLensLineNumber === symbolsLineNumber) {\n\t\t\t\t\t\tthis._lenses[codeLensIndex].updateCodeLensSymbols(groups[groupsIndex], helper);\n\t\t\t\t\t\tgroupsIndex++;\n\t\t\t\t\t\tcodeLensIndex++;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._lenses.splice(codeLensIndex, 0, new CodeLens(groups[groupsIndex], this._editor, helper, accessor, this._commandService, this._messageService, () => this._detectVisibleLenses.schedule()));\n\t\t\t\t\t\tcodeLensIndex++;\n\t\t\t\t\t\tgroupsIndex++;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Delete extra code lenses\n\t\t\t\twhile (codeLensIndex < this._lenses.length) {\n\t\t\t\t\tthis._lenses[codeLensIndex].dispose(helper, accessor);\n\t\t\t\t\tthis._lenses.splice(codeLensIndex, 1);\n\t\t\t\t}\n\n\t\t\t\t// Create extra symbols\n\t\t\t\twhile (groupsIndex < groups.length) {\n\t\t\t\t\tthis._lenses.push(new CodeLens(groups[groupsIndex], this._editor, helper, accessor, this._commandService, this._messageService, () => this._detectVisibleLenses.schedule()));\n\t\t\t\t\tgroupsIndex++;\n\t\t\t\t}\n\n\t\t\t\thelper.commit(changeAccessor);\n\t\t\t});\n\t\t});\n\t\tif (shouldRestoreCenteredRange) {\n\t\t\tthis._editor.revealRangeInCenter(centeredRange);\n\t\t}\n\t}\n\n\tprivate _onViewportChanged(modeId: string): void {\n\t\tif (this._currentFindOccPromise) {\n\t\t\tthis._currentFindOccPromise.cancel();\n\t\t\tthis._currentFindOccPromise = null;\n\t\t}\n\n\t\tconst model = this._editor.getModel();\n\t\tif (!model) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst toResolve: ICodeLensData[][] = [];\n\t\tconst lenses: CodeLens[] = [];\n\t\tthis._lenses.forEach((lens) => {\n\t\t\tconst request = lens.computeIfNecessary(model);\n\t\t\tif (request) {\n\t\t\t\ttoResolve.push(request);\n\t\t\t\tlenses.push(lens);\n\t\t\t}\n\t\t});\n\n\t\tif (toResolve.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst promises = toResolve.map((request, i) => {\n\n\t\t\tconst resolvedSymbols = new Array(request.length);\n\t\t\tconst promises = request.map((request, i) => {\n\t\t\t\treturn asWinJsPromise((token) => {\n\t\t\t\t\treturn request.provider.resolveCodeLens(model, request.symbol, token);\n\t\t\t\t}).then(symbol => {\n\t\t\t\t\tresolvedSymbols[i] = symbol;\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn TPromise.join(promises).then(() => {\n\t\t\t\tlenses[i].updateCommands(resolvedSymbols);\n\t\t\t});\n\t\t});\n\n\t\tthis._currentFindOccPromise = TPromise.join(promises).then(() => {\n\t\t\tthis._currentFindOccPromise = null;\n\t\t});\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport * as dom from 'vs/base/browser/dom';\nimport { Widget } from 'vs/base/browser/ui/widget';\nimport { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';\nimport { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from 'vs/editor/browser/editorBrowser';\nimport { FIND_IDS } from 'vs/editor/contrib/find/common/findModel';\nimport { FindReplaceState } from 'vs/editor/contrib/find/common/findState';\nimport { CaseSensitiveCheckbox, WholeWordsCheckbox, RegexCheckbox } from 'vs/base/browser/ui/findinput/findInputCheckboxes';\nimport { RunOnceScheduler } from 'vs/base/common/async';\nimport { IThemeService, ITheme, registerThemingParticipant } from 'vs/platform/theme/common/themeService';\nimport { inputActiveOptionBorder, editorWidgetBackground, contrastBorder, widgetShadow } from 'vs/platform/theme/common/colorRegistry';\n\nexport class FindOptionsWidget extends Widget implements IOverlayWidget {\n\n\tprivate static ID = 'editor.contrib.findOptionsWidget';\n\n\tprivate _editor: ICodeEditor;\n\tprivate _state: FindReplaceState;\n\tprivate _keybindingService: IKeybindingService;\n\n\tprivate _domNode: HTMLElement;\n\tprivate regex: RegexCheckbox;\n\tprivate wholeWords: WholeWordsCheckbox;\n\tprivate caseSensitive: CaseSensitiveCheckbox;\n\n\tconstructor(\n\t\teditor: ICodeEditor,\n\t\tstate: FindReplaceState,\n\t\tkeybindingService: IKeybindingService,\n\t\tthemeService: IThemeService\n\t) {\n\t\tsuper();\n\n\t\tthis._editor = editor;\n\t\tthis._state = state;\n\t\tthis._keybindingService = keybindingService;\n\n\t\tthis._domNode = document.createElement('div');\n\t\tthis._domNode.className = 'findOptionsWidget';\n\t\tthis._domNode.style.display = 'none';\n\t\tthis._domNode.style.top = '10px';\n\t\tthis._domNode.setAttribute('role', 'presentation');\n\t\tthis._domNode.setAttribute('aria-hidden', 'true');\n\n\t\tlet inputActiveOptionBorderColor = themeService.getTheme().getColor(inputActiveOptionBorder);\n\n\t\tthis.caseSensitive = this._register(new CaseSensitiveCheckbox({\n\t\t\tappendTitle: this._keybindingLabelFor(FIND_IDS.ToggleCaseSensitiveCommand),\n\t\t\tisChecked: this._state.matchCase,\n\t\t\tonChange: (viaKeyboard) => {\n\t\t\t\tthis._state.change({\n\t\t\t\t\tmatchCase: this.caseSensitive.checked\n\t\t\t\t}, false);\n\t\t\t},\n\t\t\tinputActiveOptionBorder: inputActiveOptionBorderColor\n\t\t}));\n\t\tthis._domNode.appendChild(this.caseSensitive.domNode);\n\n\t\tthis.wholeWords = this._register(new WholeWordsCheckbox({\n\t\t\tappendTitle: this._keybindingLabelFor(FIND_IDS.ToggleWholeWordCommand),\n\t\t\tisChecked: this._state.wholeWord,\n\t\t\tonChange: (viaKeyboard) => {\n\t\t\t\tthis._state.change({\n\t\t\t\t\twholeWord: this.wholeWords.checked\n\t\t\t\t}, false);\n\t\t\t},\n\t\t\tinputActiveOptionBorder: inputActiveOptionBorderColor\n\t\t}));\n\t\tthis._domNode.appendChild(this.wholeWords.domNode);\n\n\t\tthis.regex = this._register(new RegexCheckbox({\n\t\t\tappendTitle: this._keybindingLabelFor(FIND_IDS.ToggleRegexCommand),\n\t\t\tisChecked: this._state.isRegex,\n\t\t\tonChange: (viaKeyboard) => {\n\t\t\t\tthis._state.change({\n\t\t\t\t\tisRegex: this.regex.checked\n\t\t\t\t}, false);\n\t\t\t},\n\t\t\tinputActiveOptionBorder: inputActiveOptionBorderColor\n\t\t}));\n\t\tthis._domNode.appendChild(this.regex.domNode);\n\n\t\tthis._editor.addOverlayWidget(this);\n\n\t\tthis._register(this._state.addChangeListener((e) => {\n\t\t\tlet somethingChanged = false;\n\t\t\tif (e.isRegex) {\n\t\t\t\tthis.regex.checked = this._state.isRegex;\n\t\t\t\tsomethingChanged = true;\n\t\t\t}\n\t\t\tif (e.wholeWord) {\n\t\t\t\tthis.wholeWords.checked = this._state.wholeWord;\n\t\t\t\tsomethingChanged = true;\n\t\t\t}\n\t\t\tif (e.matchCase) {\n\t\t\t\tthis.caseSensitive.checked = this._state.matchCase;\n\t\t\t\tsomethingChanged = true;\n\t\t\t}\n\t\t\tif (!this._state.isRevealed && somethingChanged) {\n\t\t\t\tthis._revealTemporarily();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(dom.addDisposableNonBubblingMouseOutListener(this._domNode, (e) => this._onMouseOut()));\n\t\tthis._register(dom.addDisposableListener(this._domNode, 'mouseover', (e) => this._onMouseOver()));\n\n\t\tthis._applyTheme(themeService.getTheme());\n\t\tthis._register(themeService.onThemeChange(this._applyTheme.bind(this)));\n\t}\n\n\tprivate _keybindingLabelFor(actionId: string): string {\n\t\tlet kb = this._keybindingService.lookupKeybinding(actionId);\n\t\tif (!kb) {\n\t\t\treturn '';\n\t\t}\n\t\treturn ` (${kb.getLabel()})`;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._editor.removeOverlayWidget(this);\n\t\tsuper.dispose();\n\t}\n\n\t// ----- IOverlayWidget API\n\n\tpublic getId(): string {\n\t\treturn FindOptionsWidget.ID;\n\t}\n\n\tpublic getDomNode(): HTMLElement {\n\t\treturn this._domNode;\n\t}\n\n\tpublic getPosition(): IOverlayWidgetPosition {\n\t\treturn {\n\t\t\tpreference: OverlayWidgetPositionPreference.TOP_RIGHT_CORNER\n\t\t};\n\t}\n\n\tpublic highlightFindOptions(): void {\n\t\tthis._revealTemporarily();\n\t}\n\n\tprivate _hideSoon = this._register(new RunOnceScheduler(() => this._hide(), 1000));\n\n\tprivate _revealTemporarily(): void {\n\t\tthis._show();\n\t\tthis._hideSoon.schedule();\n\t}\n\n\tprivate _onMouseOut(): void {\n\t\tthis._hideSoon.schedule();\n\t}\n\n\tprivate _onMouseOver(): void {\n\t\tthis._hideSoon.cancel();\n\t}\n\n\tprivate _isVisible: boolean = false;\n\n\tprivate _show(): void {\n\t\tif (this._isVisible) {\n\t\t\treturn;\n\t\t}\n\t\tthis._isVisible = true;\n\t\tthis._domNode.style.display = 'block';\n\t}\n\n\tprivate _hide(): void {\n\t\tif (!this._isVisible) {\n\t\t\treturn;\n\t\t}\n\t\tthis._isVisible = false;\n\t\tthis._domNode.style.display = 'none';\n\t}\n\n\tprivate _applyTheme(theme: ITheme) {\n\t\tlet inputStyles = { inputActiveOptionBorder: theme.getColor(inputActiveOptionBorder) };\n\t\tthis.caseSensitive.style(inputStyles);\n\t\tthis.wholeWords.style(inputStyles);\n\t\tthis.regex.style(inputStyles);\n\t}\n}\n\n\nregisterThemingParticipant((theme, collector) => {\n\tlet widgetBackground = theme.getColor(editorWidgetBackground);\n\tif (widgetBackground) {\n\t\tcollector.addRule(`.monaco-editor .findOptionsWidget { background-color: ${widgetBackground}; }`);\n\t}\n\n\tlet widgetShadowColor = theme.getColor(widgetShadow);\n\tif (widgetShadowColor) {\n\t\tcollector.addRule(`.monaco-editor .findOptionsWidget { box-shadow: 0 2px 8px ${widgetShadowColor}; }`);\n\t}\n\n\tlet hcBorder = theme.getColor(contrastBorder);\n\tif (hcBorder) {\n\t\tcollector.addRule(`.monaco-editor .findOptionsWidget { border: 2px solid ${hcBorder}; }`);\n\t}\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'use strict';\n\nimport 'vs/css!./findWidget';\nimport * as nls from 'vs/nls';\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport * as platform from 'vs/base/common/platform';\nimport * as strings from 'vs/base/common/strings';\nimport * as dom from 'vs/base/browser/dom';\nimport { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport { IMouseEvent } from 'vs/base/browser/mouseEvent';\nimport { IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview';\nimport { FindInput, IFindInputStyles } from 'vs/base/browser/ui/findinput/findInput';\nimport { IMessage as InputBoxMessage, InputBox } from 'vs/base/browser/ui/inputbox/inputBox';\nimport { Widget } from 'vs/base/browser/ui/widget';\nimport { Sash, IHorizontalSashLayoutProvider, ISashEvent, Orientation } from 'vs/base/browser/ui/sash/sash';\nimport { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';\nimport { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, IViewZone, OverlayWidgetPositionPreference } from 'vs/editor/browser/editorBrowser';\nimport { FIND_IDS, MATCHES_LIMIT } from 'vs/editor/contrib/find/common/findModel';\nimport { FindReplaceState, FindReplaceStateChangedEvent } from 'vs/editor/contrib/find/common/findState';\nimport { Range } from 'vs/editor/common/core/range';\nimport { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey';\nimport { CONTEXT_FIND_INPUT_FOCUSSED } from 'vs/editor/contrib/find/common/findController';\nimport { ITheme, registerThemingParticipant, IThemeService } from 'vs/platform/theme/common/themeService';\nimport { Color } from 'vs/base/common/color';\nimport { IConfigurationChangedEvent } from 'vs/editor/common/config/editorOptions';\nimport { editorFindRangeHighlight, editorFindMatch, editorFindMatchHighlight, activeContrastBorder, contrastBorder, inputBackground, editorWidgetBackground, inputActiveOptionBorder, widgetShadow, inputForeground, inputBorder, inputValidationInfoBackground, inputValidationInfoBorder, inputValidationWarningBackground, inputValidationWarningBorder, inputValidationErrorBackground, inputValidationErrorBorder, errorForeground } from 'vs/platform/theme/common/colorRegistry';\n\n\nexport interface IFindController {\n\treplace(): void;\n\treplaceAll(): void;\n}\n\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 mode\");\nconst NLS_MATCHES_COUNT_LIMIT_TITLE = nls.localize('title.matchesCountLimit', \"Only the first 999 results are highlighted, but all find operations work on the entire text.\");\nconst NLS_MATCHES_LOCATION = nls.localize('label.matchesLocation', \"{0} of {1}\");\nconst NLS_NO_RESULTS = nls.localize('label.noResults', \"No Results\");\n\nconst FIND_WIDGET_INITIAL_WIDTH = 411;\nconst PART_WIDTH = 275;\nconst FIND_INPUT_AREA_WIDTH = PART_WIDTH - 54;\nconst REPLACE_INPUT_AREA_WIDTH = FIND_INPUT_AREA_WIDTH;\n\nlet MAX_MATCHES_COUNT_WIDTH = 69;\nlet FIND_ALL_CONTROLS_WIDTH = 17/** Find Input margin-left */ + (MAX_MATCHES_COUNT_WIDTH + 3 + 1) /** Match Results */ + 23 /** Button */ * 4 + 2/** sash */;\n\nconst FIND_INPUT_AREA_HEIGHT = 34; // The height of Find Widget when Replace Input is not visible.\nconst FIND_REPLACE_AREA_HEIGHT = 64; // The height of Find Widget when Replace Input is visible.\n\n\nexport class FindWidgetViewZone implements IViewZone {\n\tpublic afterLineNumber: number;\n\tpublic heightInPx: number;\n\tpublic suppressMouseDown: boolean;\n\tpublic domNode: HTMLElement;\n\n\tconstructor(afterLineNumber: number) {\n\t\tthis.afterLineNumber = afterLineNumber;\n\n\t\tthis.heightInPx = FIND_INPUT_AREA_HEIGHT;\n\t\tthis.suppressMouseDown = false;\n\t\tthis.domNode = document.createElement('div');\n\t\tthis.domNode.className = 'dock-find-viewzone';\n\t}\n}\n\nexport class FindWidget extends Widget implements IOverlayWidget, IHorizontalSashLayoutProvider {\n\tprivate static ID = 'editor.contrib.findWidget';\n\tprivate _codeEditor: ICodeEditor;\n\tprivate _state: FindReplaceState;\n\tprivate _controller: IFindController;\n\tprivate _contextViewProvider: IContextViewProvider;\n\tprivate _keybindingService: IKeybindingService;\n\n\tprivate _domNode: HTMLElement;\n\tprivate _findInput: FindInput;\n\tprivate _replaceInputBox: InputBox;\n\n\tprivate _toggleReplaceBtn: SimpleButton;\n\tprivate _matchesCount: HTMLElement;\n\tprivate _prevBtn: SimpleButton;\n\tprivate _nextBtn: SimpleButton;\n\tprivate _toggleSelectionFind: SimpleCheckbox;\n\tprivate _closeBtn: SimpleButton;\n\tprivate _replaceBtn: SimpleButton;\n\tprivate _replaceAllBtn: SimpleButton;\n\n\tprivate _isVisible: boolean;\n\tprivate _isReplaceVisible: boolean;\n\n\tprivate _focusTracker: dom.IFocusTracker;\n\tprivate _findInputFocussed: IContextKey;\n\tprivate _viewZone: FindWidgetViewZone;\n\tprivate _viewZoneId: number;\n\n\tprivate _resizeSash: Sash;\n\n\tconstructor(\n\t\tcodeEditor: ICodeEditor,\n\t\tcontroller: IFindController,\n\t\tstate: FindReplaceState,\n\t\tcontextViewProvider: IContextViewProvider,\n\t\tkeybindingService: IKeybindingService,\n\t\tcontextKeyService: IContextKeyService,\n\t\tthemeService: IThemeService\n\t) {\n\t\tsuper();\n\t\tthis._codeEditor = codeEditor;\n\t\tthis._controller = controller;\n\t\tthis._state = state;\n\t\tthis._contextViewProvider = contextViewProvider;\n\t\tthis._keybindingService = keybindingService;\n\n\t\tthis._isVisible = false;\n\t\tthis._isReplaceVisible = false;\n\n\t\tthis._register(this._state.addChangeListener((e) => this._onStateChanged(e)));\n\t\tthis._buildDomNode();\n\t\tthis._updateButtons();\n\n\t\tlet checkEditorWidth = () => {\n\t\t\tlet editorWidth = this._codeEditor.getConfiguration().layoutInfo.width;\n\t\t\tlet minimapWidth = this._codeEditor.getConfiguration().layoutInfo.minimapWidth;\n\t\t\tlet collapsedFindWidget = false;\n\t\t\tlet reducedFindWidget = false;\n\t\t\tlet narrowFindWidget = false;\n\t\t\tlet widgetWidth = dom.getTotalWidth(this._domNode);\n\n\t\t\tif (widgetWidth > FIND_WIDGET_INITIAL_WIDTH) {\n\t\t\t\t// as the widget is resized by users, we may need to change the max width of the widget as the editor width changes.\n\t\t\t\tthis._domNode.style.maxWidth = `${editorWidth - 28 - minimapWidth - 15}px`;\n\t\t\t\tthis._replaceInputBox.inputElement.style.width = `${dom.getTotalWidth(this._findInput.inputBox.inputElement)}px`;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (FIND_WIDGET_INITIAL_WIDTH + 28 + minimapWidth >= editorWidth) {\n\t\t\t\treducedFindWidget = true;\n\t\t\t}\n\t\t\tif (FIND_WIDGET_INITIAL_WIDTH + 28 + minimapWidth - MAX_MATCHES_COUNT_WIDTH >= editorWidth) {\n\t\t\t\tnarrowFindWidget = true;\n\t\t\t}\n\t\t\tif (FIND_WIDGET_INITIAL_WIDTH + 28 + minimapWidth - MAX_MATCHES_COUNT_WIDTH >= editorWidth + 50) {\n\t\t\t\tcollapsedFindWidget = true;\n\t\t\t}\n\t\t\tdom.toggleClass(this._domNode, 'collapsed-find-widget', collapsedFindWidget);\n\t\t\tdom.toggleClass(this._domNode, 'narrow-find-widget', narrowFindWidget);\n\t\t\tdom.toggleClass(this._domNode, 'reduced-find-widget', reducedFindWidget);\n\n\t\t\tif (!narrowFindWidget && !collapsedFindWidget) {\n\t\t\t\t// the minimal left offset of findwidget is 15px.\n\t\t\t\tthis._domNode.style.maxWidth = `${editorWidth - 28 - minimapWidth - 15}px`;\n\t\t\t}\n\n\t\t\tlet findInputWidth = dom.getTotalWidth(this._findInput.inputBox.inputElement);\n\t\t\tif (findInputWidth > 0) {\n\t\t\t\tthis._replaceInputBox.inputElement.style.width = `${findInputWidth}px`;\n\t\t\t}\n\n\t\t};\n\t\tcheckEditorWidth();\n\n\t\tthis._register(this._codeEditor.onDidChangeConfiguration((e: IConfigurationChangedEvent) => {\n\t\t\tif (e.readOnly) {\n\t\t\t\tif (this._codeEditor.getConfiguration().readOnly) {\n\t\t\t\t\t// Hide replace part if editor becomes read only\n\t\t\t\t\tthis._state.change({ isReplaceRevealed: false }, false);\n\t\t\t\t}\n\t\t\t\tthis._updateButtons();\n\t\t\t}\n\t\t\tif (e.layoutInfo) {\n\t\t\t\tcheckEditorWidth();\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._codeEditor.onDidChangeCursorSelection(() => {\n\t\t\tif (this._isVisible) {\n\t\t\t\tthis._updateToggleSelectionFindButton();\n\t\t\t}\n\t\t}));\n\t\tthis._findInputFocussed = CONTEXT_FIND_INPUT_FOCUSSED.bindTo(contextKeyService);\n\t\tthis._focusTracker = this._register(dom.trackFocus(this._findInput.inputBox.inputElement));\n\t\tthis._focusTracker.addFocusListener(() => {\n\t\t\tthis._findInputFocussed.set(true);\n\n\t\t\tif (this._toggleSelectionFind.checked) {\n\t\t\t\tlet selection = this._codeEditor.getSelection();\n\t\t\t\tif (selection.endColumn === 1 && selection.endLineNumber > selection.startLineNumber) {\n\t\t\t\t\tselection = selection.setEndPosition(selection.endLineNumber - 1, 1);\n\t\t\t\t}\n\t\t\t\tlet currentMatch = this._state.currentMatch;\n\t\t\t\tif (selection.startLineNumber !== selection.endLineNumber) {\n\t\t\t\t\tif (!Range.equalsRange(selection, currentMatch)) {\n\t\t\t\t\t\t// Reseed find scope\n\t\t\t\t\t\tthis._state.change({ searchScope: selection }, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tthis._focusTracker.addBlurListener(() => {\n\t\t\tthis._findInputFocussed.set(false);\n\t\t});\n\n\t\tthis._codeEditor.addOverlayWidget(this);\n\t\tthis._viewZone = new FindWidgetViewZone(0); // Put it before the first line then users can scroll beyond the first line.\n\n\t\tthis._applyTheme(themeService.getTheme());\n\t\tthis._register(themeService.onThemeChange(this._applyTheme.bind(this)));\n\n\t\tthis._register(this._codeEditor.onDidChangeModel((e) => {\n\t\t\tif (!this._isVisible) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this._viewZoneId === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._codeEditor.changeViewZones((accessor) => {\n\t\t\t\taccessor.removeZone(this._viewZoneId);\n\t\t\t\tthis._viewZoneId = undefined;\n\t\t\t});\n\t\t}));\n\n\n\t\tthis._register(this._codeEditor.onDidScrollChange((e) => {\n\t\t\tif (e.scrollTopChanged) {\n\t\t\t\tthis._layoutViewZone();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for other scroll changes, layout the viewzone in next tick to avoid ruining current rendering.\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis._layoutViewZone();\n\t\t\t}, 0);\n\t\t}));\n\t}\n\n\t// ----- IOverlayWidget API\n\n\tpublic getId(): string {\n\t\treturn FindWidget.ID;\n\t}\n\n\tpublic getDomNode(): HTMLElement {\n\t\treturn this._domNode;\n\t}\n\n\tpublic getPosition(): IOverlayWidgetPosition {\n\t\tif (this._isVisible) {\n\t\t\treturn {\n\t\t\t\tpreference: OverlayWidgetPositionPreference.TOP_RIGHT_CORNER\n\t\t\t};\n\t\t}\n\t\treturn null;\n\t}\n\n\t// ----- React to state changes\n\n\tprivate _onStateChanged(e: FindReplaceStateChangedEvent): void {\n\t\tif (e.searchString) {\n\t\t\tthis._findInput.setValue(this._state.searchString);\n\t\t\tthis._updateButtons();\n\t\t}\n\t\tif (e.replaceString) {\n\t\t\tthis._replaceInputBox.value = this._state.replaceString;\n\t\t}\n\t\tif (e.isRevealed) {\n\t\t\tif (this._state.isRevealed) {\n\t\t\t\tthis._reveal(true);\n\t\t\t} else {\n\t\t\t\tthis._hide(true);\n\t\t\t}\n\t\t}\n\t\tif (e.isReplaceRevealed) {\n\t\t\tif (this._state.isReplaceRevealed) {\n\t\t\t\tif (!this._codeEditor.getConfiguration().readOnly && !this._isReplaceVisible) {\n\t\t\t\t\tthis._isReplaceVisible = true;\n\t\t\t\t\tthis._updateButtons();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this._isReplaceVisible) {\n\t\t\t\t\tthis._isReplaceVisible = false;\n\t\t\t\t\tthis._updateButtons();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (e.isRegex) {\n\t\t\tthis._findInput.setRegex(this._state.isRegex);\n\t\t}\n\t\tif (e.wholeWord) {\n\t\t\tthis._findInput.setWholeWords(this._state.wholeWord);\n\t\t}\n\t\tif (e.matchCase) {\n\t\t\tthis._findInput.setCaseSensitive(this._state.matchCase);\n\t\t}\n\t\tif (e.searchScope) {\n\t\t\tif (this._state.searchScope) {\n\t\t\t\tthis._toggleSelectionFind.checked = true;\n\t\t\t} else {\n\t\t\t\tthis._toggleSelectionFind.checked = false;\n\t\t\t}\n\t\t\tthis._updateToggleSelectionFindButton();\n\t\t}\n\t\tif (e.searchString || e.matchesCount || e.matchesPosition) {\n\t\t\tlet showRedOutline = (this._state.searchString.length > 0 && this._state.matchesCount === 0);\n\t\t\tdom.toggleClass(this._domNode, 'no-results', showRedOutline);\n\n\t\t\tthis._updateMatchesCount();\n\t\t}\n\t\tif (e.searchString || e.currentMatch) {\n\t\t\tthis._layoutViewZone();\n\t\t}\n\t}\n\n\tprivate _updateMatchesCount(): void {\n\t\tthis._matchesCount.style.minWidth = MAX_MATCHES_COUNT_WIDTH + 'px';\n\t\tif (this._state.matchesCount >= MATCHES_LIMIT) {\n\t\t\tthis._matchesCount.title = NLS_MATCHES_COUNT_LIMIT_TITLE;\n\t\t} else {\n\t\t\tthis._matchesCount.title = '';\n\t\t}\n\n\t\t// remove previous content\n\t\tif (this._matchesCount.firstChild) {\n\t\t\tthis._matchesCount.removeChild(this._matchesCount.firstChild);\n\t\t}\n\n\t\tlet label: string;\n\t\tif (this._state.matchesCount > 0) {\n\t\t\tlet matchesCount: string = String(this._state.matchesCount);\n\t\t\tif (this._state.matchesCount >= MATCHES_LIMIT) {\n\t\t\t\tmatchesCount += '+';\n\t\t\t}\n\t\t\tlet matchesPosition: string = String(this._state.matchesPosition);\n\t\t\tif (matchesPosition === '0') {\n\t\t\t\tmatchesPosition = '?';\n\t\t\t}\n\t\t\tlabel = strings.format(NLS_MATCHES_LOCATION, matchesPosition, matchesCount);\n\t\t} else {\n\t\t\tlabel = NLS_NO_RESULTS;\n\t\t}\n\t\tthis._matchesCount.appendChild(document.createTextNode(label));\n\n\t\tMAX_MATCHES_COUNT_WIDTH = Math.max(MAX_MATCHES_COUNT_WIDTH, this._matchesCount.clientWidth);\n\t}\n\n\t// ----- actions\n\n\t/**\n\t * If 'selection find' is ON we should not disable the button (its function is to cancel 'selection find').\n\t * If 'selection find' is OFF we enable the button only if there is a selection.\n\t */\n\tprivate _updateToggleSelectionFindButton(): void {\n\t\tlet selection = this._codeEditor.getSelection();\n\t\tlet isSelection = selection ? (selection.startLineNumber !== selection.endLineNumber || selection.startColumn !== selection.endColumn) : false;\n\t\tlet isChecked = this._toggleSelectionFind.checked;\n\n\t\tthis._toggleSelectionFind.setEnabled(this._isVisible && (isChecked || isSelection));\n\t}\n\n\tprivate _updateButtons(): void {\n\t\tthis._findInput.setEnabled(this._isVisible);\n\t\tthis._replaceInputBox.setEnabled(this._isVisible && this._isReplaceVisible);\n\t\tthis._updateToggleSelectionFindButton();\n\t\tthis._closeBtn.setEnabled(this._isVisible);\n\n\t\tlet findInputIsNonEmpty = (this._state.searchString.length > 0);\n\t\tthis._prevBtn.setEnabled(this._isVisible && findInputIsNonEmpty);\n\t\tthis._nextBtn.setEnabled(this._isVisible && findInputIsNonEmpty);\n\t\tthis._replaceBtn.setEnabled(this._isVisible && this._isReplaceVisible && findInputIsNonEmpty);\n\t\tthis._replaceAllBtn.setEnabled(this._isVisible && this._isReplaceVisible && findInputIsNonEmpty);\n\n\t\tdom.toggleClass(this._domNode, 'replaceToggled', this._isReplaceVisible);\n\t\tthis._toggleReplaceBtn.toggleClass('collapse', !this._isReplaceVisible);\n\t\tthis._toggleReplaceBtn.toggleClass('expand', this._isReplaceVisible);\n\t\tthis._toggleReplaceBtn.setExpanded(this._isReplaceVisible);\n\n\t\tlet canReplace = !this._codeEditor.getConfiguration().readOnly;\n\t\tthis._toggleReplaceBtn.setEnabled(this._isVisible && canReplace);\n\t}\n\n\tprivate _reveal(animate: boolean): void {\n\t\tif (!this._isVisible) {\n\t\t\tthis._isVisible = true;\n\n\t\t\tlet selection = this._codeEditor.getSelection();\n\t\t\tlet isSelection = selection ? (selection.startLineNumber !== selection.endLineNumber || selection.startColumn !== selection.endColumn) : false;\n\t\t\tif (isSelection && this._codeEditor.getConfiguration().contribInfo.find.autoFindInSelection) {\n\t\t\t\tthis._toggleSelectionFind.checked = true;\n\t\t\t} else {\n\t\t\t\tthis._toggleSelectionFind.checked = false;\n\t\t\t}\n\t\t\tthis._updateButtons();\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tdom.addClass(this._domNode, 'visible');\n\t\t\t\tthis._domNode.setAttribute('aria-hidden', 'false');\n\t\t\t\tif (!animate) {\n\t\t\t\t\tdom.addClass(this._domNode, 'noanimation');\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tdom.removeClass(this._domNode, 'noanimation');\n\t\t\t\t\t}, 200);\n\t\t\t\t}\n\t\t\t}, 0);\n\t\t\tthis._codeEditor.layoutOverlayWidget(this);\n\n\t\t\tlet adjustEditorScrollTop = true;\n\t\t\tif (this._codeEditor.getConfiguration().contribInfo.find.seedSearchStringFromSelection && selection) {\n\t\t\t\tlet editorCoords = dom.getDomNodePagePosition(this._codeEditor.getDomNode());\n\t\t\t\tlet startCoords = this._codeEditor.getScrolledVisiblePosition(selection.getStartPosition());\n\t\t\t\tlet startLeft = editorCoords.left + startCoords.left;\n\t\t\t\tlet startTop = startCoords.top;\n\n\t\t\t\tif (startTop < this._viewZone.heightInPx) {\n\t\t\t\t\tif (selection.endLineNumber > selection.startLineNumber) {\n\t\t\t\t\t\tadjustEditorScrollTop = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet leftOfFindWidget = dom.getTopLeftOffset(this._domNode).left;\n\t\t\t\t\tif (startLeft > leftOfFindWidget) {\n\t\t\t\t\t\tadjustEditorScrollTop = false;\n\t\t\t\t\t}\n\t\t\t\t\tlet endCoords = this._codeEditor.getScrolledVisiblePosition(selection.getEndPosition());\n\t\t\t\t\tlet endLeft = editorCoords.left + endCoords.left;\n\t\t\t\t\tif (endLeft > leftOfFindWidget) {\n\t\t\t\t\t\tadjustEditorScrollTop = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._showViewZone(adjustEditorScrollTop);\n\t\t}\n\t}\n\n\tprivate _hide(focusTheEditor: boolean): void {\n\t\tif (this._isVisible) {\n\t\t\tthis._isVisible = false;\n\n\t\t\tthis._updateButtons();\n\n\t\t\tdom.removeClass(this._domNode, 'visible');\n\t\t\tthis._domNode.setAttribute('aria-hidden', 'true');\n\t\t\tif (focusTheEditor) {\n\t\t\t\tthis._codeEditor.focus();\n\t\t\t}\n\t\t\tthis._codeEditor.layoutOverlayWidget(this);\n\t\t\tthis._codeEditor.changeViewZones((accessor) => {\n\t\t\t\tif (this._viewZoneId !== undefined) {\n\t\t\t\t\taccessor.removeZone(this._viewZoneId);\n\t\t\t\t\tthis._viewZoneId = undefined;\n\t\t\t\t\tthis._codeEditor.setScrollTop(this._codeEditor.getScrollTop() - this._viewZone.heightInPx);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate _layoutViewZone() {\n\t\tif (!this._isVisible) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._viewZoneId !== undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._codeEditor.changeViewZones((accessor) => {\n\t\t\tif (this._state.isReplaceRevealed) {\n\t\t\t\tthis._viewZone.heightInPx = FIND_REPLACE_AREA_HEIGHT;\n\t\t\t} else {\n\t\t\t\tthis._viewZone.heightInPx = FIND_INPUT_AREA_HEIGHT;\n\t\t\t}\n\n\t\t\tthis._viewZoneId = accessor.addZone(this._viewZone);\n\t\t\t// scroll top adjust to make sure the editor doesn't scroll when adding viewzone at the beginning.\n\t\t\tthis._codeEditor.setScrollTop(this._codeEditor.getScrollTop() + this._viewZone.heightInPx);\n\t\t});\n\t}\n\n\tprivate _showViewZone(adjustScroll: boolean = true) {\n\t\tif (!this._isVisible) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._codeEditor.changeViewZones((accessor) => {\n\t\t\tlet scrollAdjustment = FIND_INPUT_AREA_HEIGHT;\n\n\t\t\tif (this._viewZoneId !== undefined) {\n\t\t\t\tif (this._state.isReplaceRevealed) {\n\t\t\t\t\tthis._viewZone.heightInPx = FIND_REPLACE_AREA_HEIGHT;\n\t\t\t\t\tscrollAdjustment = FIND_REPLACE_AREA_HEIGHT - FIND_INPUT_AREA_HEIGHT;\n\t\t\t\t} else {\n\t\t\t\t\tthis._viewZone.heightInPx = FIND_INPUT_AREA_HEIGHT;\n\t\t\t\t\tscrollAdjustment = FIND_INPUT_AREA_HEIGHT - FIND_REPLACE_AREA_HEIGHT;\n\t\t\t\t}\n\t\t\t\taccessor.removeZone(this._viewZoneId);\n\t\t\t} else {\n\t\t\t\tthis._viewZone.heightInPx = FIND_INPUT_AREA_HEIGHT;\n\t\t\t}\n\t\t\tthis._viewZoneId = accessor.addZone(this._viewZone);\n\n\t\t\tif (adjustScroll) {\n\t\t\t\tthis._codeEditor.setScrollTop(this._codeEditor.getScrollTop() + scrollAdjustment);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _applyTheme(theme: ITheme) {\n\t\tlet inputStyles: IFindInputStyles = {\n\t\t\tinputActiveOptionBorder: theme.getColor(inputActiveOptionBorder),\n\t\t\tinputBackground: theme.getColor(inputBackground),\n\t\t\tinputForeground: theme.getColor(inputForeground),\n\t\t\tinputBorder: theme.getColor(inputBorder),\n\t\t\tinputValidationInfoBackground: theme.getColor(inputValidationInfoBackground),\n\t\t\tinputValidationInfoBorder: theme.getColor(inputValidationInfoBorder),\n\t\t\tinputValidationWarningBackground: theme.getColor(inputValidationWarningBackground),\n\t\t\tinputValidationWarningBorder: theme.getColor(inputValidationWarningBorder),\n\t\t\tinputValidationErrorBackground: theme.getColor(inputValidationErrorBackground),\n\t\t\tinputValidationErrorBorder: theme.getColor(inputValidationErrorBorder)\n\t\t};\n\t\tthis._findInput.style(inputStyles);\n\t\tthis._replaceInputBox.style(inputStyles);\n\t}\n\n\t// ----- Public\n\n\tpublic focusFindInput(): void {\n\t\tthis._findInput.select();\n\t\t// Edge browser requires focus() in addition to select()\n\t\tthis._findInput.focus();\n\t}\n\n\tpublic focusReplaceInput(): void {\n\t\tthis._replaceInputBox.select();\n\t\t// Edge browser requires focus() in addition to select()\n\t\tthis._replaceInputBox.focus();\n\t}\n\n\tpublic highlightFindOptions(): void {\n\t\tthis._findInput.highlightFindOptions();\n\t}\n\n\tprivate _onFindInputMouseDown(e: IMouseEvent): void {\n\t\t// on linux, middle key does pasting.\n\t\tif (e.middleButton) {\n\t\t\te.stopPropagation();\n\t\t}\n\t}\n\n\tprivate _onFindInputKeyDown(e: IKeyboardEvent): void {\n\n\t\tif (e.equals(KeyCode.Enter)) {\n\t\t\tthis._codeEditor.getAction(FIND_IDS.NextMatchFindAction).run().done(null, onUnexpectedError);\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.equals(KeyMod.Shift | KeyCode.Enter)) {\n\t\t\tthis._codeEditor.getAction(FIND_IDS.PreviousMatchFindAction).run().done(null, onUnexpectedError);\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.equals(KeyCode.Tab)) {\n\t\t\tif (this._isReplaceVisible) {\n\t\t\t\tthis._replaceInputBox.focus();\n\t\t\t} else {\n\t\t\t\tthis._findInput.focusOnCaseSensitive();\n\t\t\t}\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.equals(KeyMod.CtrlCmd | KeyCode.DownArrow)) {\n\t\t\tthis._codeEditor.focus();\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate _onReplaceInputKeyDown(e: IKeyboardEvent): void {\n\n\t\tif (e.equals(KeyCode.Enter)) {\n\t\t\tthis._controller.replace();\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.equals(KeyMod.CtrlCmd | KeyCode.Enter)) {\n\t\t\tthis._controller.replaceAll();\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.equals(KeyCode.Tab)) {\n\t\t\tthis._findInput.focusOnCaseSensitive();\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.equals(KeyMod.Shift | KeyCode.Tab)) {\n\t\t\tthis._findInput.focus();\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.equals(KeyMod.CtrlCmd | KeyCode.DownArrow)) {\n\t\t\tthis._codeEditor.focus();\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// ----- sash\n\tpublic getHorizontalSashTop(sash: Sash): number {\n\t\treturn 0;\n\t}\n\tpublic getHorizontalSashLeft?(sash: Sash): number {\n\t\treturn 0;\n\t}\n\tpublic getHorizontalSashWidth?(sash: Sash): number {\n\t\treturn 500;\n\t}\n\n\t// ----- initialization\n\n\tprivate _keybindingLabelFor(actionId: string): string {\n\t\tlet kb = this._keybindingService.lookupKeybinding(actionId);\n\t\tif (!kb) {\n\t\t\treturn '';\n\t\t}\n\t\treturn ` (${kb.getLabel()})`;\n\t}\n\n\tprivate _buildFindPart(): HTMLElement {\n\t\t// Find input\n\t\tthis._findInput = this._register(new FindInput(null, this._contextViewProvider, {\n\t\t\twidth: FIND_INPUT_AREA_WIDTH,\n\t\t\tlabel: NLS_FIND_INPUT_LABEL,\n\t\t\tplaceholder: NLS_FIND_INPUT_PLACEHOLDER,\n\t\t\tappendCaseSensitiveLabel: this._keybindingLabelFor(FIND_IDS.ToggleCaseSensitiveCommand),\n\t\t\tappendWholeWordsLabel: this._keybindingLabelFor(FIND_IDS.ToggleWholeWordCommand),\n\t\t\tappendRegexLabel: this._keybindingLabelFor(FIND_IDS.ToggleRegexCommand),\n\t\t\tvalidation: (value: string): InputBoxMessage => {\n\t\t\t\tif (value.length === 0) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif (!this._findInput.getRegex()) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\t/* tslint:disable:no-unused-expression */\n\t\t\t\t\tnew RegExp(value);\n\t\t\t\t\t/* tslint:enable:no-unused-expression */\n\t\t\t\t\treturn null;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn { content: e.message };\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\t\tthis._findInput.setRegex(!!this._state.isRegex);\n\t\tthis._findInput.setCaseSensitive(!!this._state.matchCase);\n\t\tthis._findInput.setWholeWords(!!this._state.wholeWord);\n\t\tthis._register(this._findInput.onKeyDown((e) => this._onFindInputKeyDown(e)));\n\t\tthis._register(this._findInput.onInput(() => {\n\t\t\tthis._state.change({ searchString: this._findInput.getValue() }, true);\n\t\t}));\n\t\tthis._register(this._findInput.onDidOptionChange(() => {\n\t\t\tthis._state.change({\n\t\t\t\tisRegex: this._findInput.getRegex(),\n\t\t\t\twholeWord: this._findInput.getWholeWords(),\n\t\t\t\tmatchCase: this._findInput.getCaseSensitive()\n\t\t\t}, true);\n\t\t}));\n\t\tthis._register(this._findInput.onCaseSensitiveKeyDown((e) => {\n\t\t\tif (e.equals(KeyMod.Shift | KeyCode.Tab)) {\n\t\t\t\tif (this._isReplaceVisible) {\n\t\t\t\t\tthis._replaceInputBox.focus();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\t\tif (platform.isLinux) {\n\t\t\tthis._register(this._findInput.onMouseDown((e) => this._onFindInputMouseDown(e)));\n\t\t}\n\n\t\tthis._matchesCount = document.createElement('div');\n\t\tthis._matchesCount.className = 'matchesCount';\n\t\tthis._updateMatchesCount();\n\n\t\t// Previous button\n\t\tthis._prevBtn = this._register(new SimpleButton({\n\t\t\tlabel: NLS_PREVIOUS_MATCH_BTN_LABEL + this._keybindingLabelFor(FIND_IDS.PreviousMatchFindAction),\n\t\t\tclassName: 'previous',\n\t\t\tonTrigger: () => {\n\t\t\t\tthis._codeEditor.getAction(FIND_IDS.PreviousMatchFindAction).run().done(null, onUnexpectedError);\n\t\t\t},\n\t\t\tonKeyDown: (e) => { }\n\t\t}));\n\n\t\t// Next button\n\t\tthis._nextBtn = this._register(new SimpleButton({\n\t\t\tlabel: NLS_NEXT_MATCH_BTN_LABEL + this._keybindingLabelFor(FIND_IDS.NextMatchFindAction),\n\t\t\tclassName: 'next',\n\t\t\tonTrigger: () => {\n\t\t\t\tthis._codeEditor.getAction(FIND_IDS.NextMatchFindAction).run().done(null, onUnexpectedError);\n\t\t\t},\n\t\t\tonKeyDown: (e) => { }\n\t\t}));\n\n\t\tlet findPart = document.createElement('div');\n\t\tfindPart.className = 'find-part';\n\t\tfindPart.appendChild(this._findInput.domNode);\n\t\tfindPart.appendChild(this._matchesCount);\n\t\tfindPart.appendChild(this._prevBtn.domNode);\n\t\tfindPart.appendChild(this._nextBtn.domNode);\n\n\t\t// Toggle selection button\n\t\tthis._toggleSelectionFind = this._register(new SimpleCheckbox({\n\t\t\tparent: findPart,\n\t\t\ttitle: NLS_TOGGLE_SELECTION_FIND_TITLE + this._keybindingLabelFor(FIND_IDS.ToggleSearchScopeCommand),\n\t\t\tonChange: () => {\n\t\t\t\tif (this._toggleSelectionFind.checked) {\n\t\t\t\t\tlet selection = this._codeEditor.getSelection();\n\t\t\t\t\tif (selection.endColumn === 1 && selection.endLineNumber > selection.startLineNumber) {\n\t\t\t\t\t\tselection = selection.setEndPosition(selection.endLineNumber - 1, 1);\n\t\t\t\t\t}\n\t\t\t\t\tif (!selection.isEmpty()) {\n\t\t\t\t\t\tthis._state.change({ searchScope: selection }, true);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis._state.change({ searchScope: null }, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\t// Close button\n\t\tthis._closeBtn = this._register(new SimpleButton({\n\t\t\tlabel: NLS_CLOSE_BTN_LABEL + this._keybindingLabelFor(FIND_IDS.CloseFindWidgetCommand),\n\t\t\tclassName: 'close-fw',\n\t\t\tonTrigger: () => {\n\t\t\t\tthis._state.change({ isRevealed: false, searchScope: null }, false);\n\t\t\t},\n\t\t\tonKeyDown: (e) => {\n\t\t\t\tif (e.equals(KeyCode.Tab)) {\n\t\t\t\t\tif (this._isReplaceVisible) {\n\t\t\t\t\t\tif (this._replaceBtn.isEnabled()) {\n\t\t\t\t\t\t\tthis._replaceBtn.focus();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._codeEditor.focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\tfindPart.appendChild(this._closeBtn.domNode);\n\n\t\treturn findPart;\n\t}\n\n\tprivate _buildReplacePart(): HTMLElement {\n\t\t// Replace input\n\t\tlet replaceInput = document.createElement('div');\n\t\treplaceInput.className = 'replace-input';\n\t\treplaceInput.style.width = REPLACE_INPUT_AREA_WIDTH + 'px';\n\t\tthis._replaceInputBox = this._register(new InputBox(replaceInput, null, {\n\t\t\tariaLabel: NLS_REPLACE_INPUT_LABEL,\n\t\t\tplaceholder: NLS_REPLACE_INPUT_PLACEHOLDER\n\t\t}));\n\n\t\tthis._register(dom.addStandardDisposableListener(this._replaceInputBox.inputElement, 'keydown', (e) => this._onReplaceInputKeyDown(e)));\n\t\tthis._register(dom.addStandardDisposableListener(this._replaceInputBox.inputElement, 'input', (e) => {\n\t\t\tthis._state.change({ replaceString: this._replaceInputBox.value }, false);\n\t\t}));\n\n\t\t// Replace one button\n\t\tthis._replaceBtn = this._register(new SimpleButton({\n\t\t\tlabel: NLS_REPLACE_BTN_LABEL + this._keybindingLabelFor(FIND_IDS.ReplaceOneAction),\n\t\t\tclassName: 'replace',\n\t\t\tonTrigger: () => {\n\t\t\t\tthis._controller.replace();\n\t\t\t},\n\t\t\tonKeyDown: (e) => {\n\t\t\t\tif (e.equals(KeyMod.Shift | KeyCode.Tab)) {\n\t\t\t\t\tthis._closeBtn.focus();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\t// Replace all button\n\t\tthis._replaceAllBtn = this._register(new SimpleButton({\n\t\t\tlabel: NLS_REPLACE_ALL_BTN_LABEL + this._keybindingLabelFor(FIND_IDS.ReplaceAllAction),\n\t\t\tclassName: 'replace-all',\n\t\t\tonTrigger: () => {\n\t\t\t\tthis._controller.replaceAll();\n\t\t\t},\n\t\t\tonKeyDown: (e) => { }\n\t\t}));\n\n\t\tlet replacePart = document.createElement('div');\n\t\treplacePart.className = 'replace-part';\n\t\treplacePart.appendChild(replaceInput);\n\t\treplacePart.appendChild(this._replaceBtn.domNode);\n\t\treplacePart.appendChild(this._replaceAllBtn.domNode);\n\n\t\treturn replacePart;\n\t}\n\n\tprivate _buildDomNode(): void {\n\t\t// Find part\n\t\tlet findPart = this._buildFindPart();\n\n\t\t// Replace part\n\t\tlet replacePart = this._buildReplacePart();\n\n\t\t// Toggle replace button\n\t\tthis._toggleReplaceBtn = this._register(new SimpleButton({\n\t\t\tlabel: NLS_TOGGLE_REPLACE_MODE_BTN_LABEL,\n\t\t\tclassName: 'toggle left',\n\t\t\tonTrigger: () => {\n\t\t\t\tthis._state.change({ isReplaceRevealed: !this._isReplaceVisible }, false);\n\t\t\t\tif (this._isReplaceVisible) {\n\t\t\t\t\tthis._replaceInputBox.width = this._findInput.inputBox.width;\n\t\t\t\t}\n\t\t\t\tthis._showViewZone();\n\t\t\t},\n\t\t\tonKeyDown: (e) => { }\n\t\t}));\n\t\tthis._toggleReplaceBtn.toggleClass('expand', this._isReplaceVisible);\n\t\tthis._toggleReplaceBtn.toggleClass('collapse', !this._isReplaceVisible);\n\t\tthis._toggleReplaceBtn.setExpanded(this._isReplaceVisible);\n\n\t\t// Widget\n\t\tthis._domNode = document.createElement('div');\n\t\tthis._domNode.className = 'editor-widget find-widget';\n\t\tthis._domNode.setAttribute('aria-hidden', 'true');\n\n\t\tthis._domNode.appendChild(this._toggleReplaceBtn.domNode);\n\t\tthis._domNode.appendChild(findPart);\n\t\tthis._domNode.appendChild(replacePart);\n\n\t\tthis._buildSash();\n\t}\n\n\tprivate _buildSash() {\n\t\tthis._resizeSash = new Sash(this._domNode, this, { orientation: Orientation.VERTICAL });\n\t\tlet originalWidth = FIND_WIDGET_INITIAL_WIDTH;\n\n\t\tthis._register(this._resizeSash.addListener('start', (e: ISashEvent) => {\n\t\t\toriginalWidth = dom.getTotalWidth(this._domNode);\n\t\t}));\n\n\t\tthis._register(this._resizeSash.addListener('change', (evt: ISashEvent) => {\n\t\t\tlet width = originalWidth + evt.startX - evt.currentX;\n\n\t\t\tif (width < FIND_WIDGET_INITIAL_WIDTH) {\n\t\t\t\t// narrow down the find widget should be handled by CSS.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet inputBoxWidth = width - FIND_ALL_CONTROLS_WIDTH;\n\t\t\tlet maxWidth = parseFloat(dom.getComputedStyle(this._domNode).maxWidth) || 0;\n\t\t\tif (width > maxWidth) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._domNode.style.width = `${width}px`;\n\t\t\tif (this._isReplaceVisible) {\n\t\t\t\tthis._replaceInputBox.width = inputBoxWidth;\n\t\t\t}\n\t\t}));\n\t}\n}\n\ninterface ISimpleCheckboxOpts {\n\tparent: HTMLElement;\n\ttitle: string;\n\tonChange: () => void;\n}\n\nclass SimpleCheckbox extends Widget {\n\n\tprivate static _COUNTER = 0;\n\n\tprivate _opts: ISimpleCheckboxOpts;\n\tprivate _domNode: HTMLElement;\n\tprivate _checkbox: HTMLInputElement;\n\tprivate _label: HTMLLabelElement;\n\n\tconstructor(opts: ISimpleCheckboxOpts) {\n\t\tsuper();\n\t\tthis._opts = opts;\n\n\t\tthis._domNode = document.createElement('div');\n\t\tthis._domNode.className = 'monaco-checkbox';\n\t\tthis._domNode.title = this._opts.title;\n\t\tthis._domNode.tabIndex = 0;\n\n\t\tthis._checkbox = document.createElement('input');\n\t\tthis._checkbox.type = 'checkbox';\n\t\tthis._checkbox.className = 'checkbox';\n\t\tthis._checkbox.id = 'checkbox-' + SimpleCheckbox._COUNTER++;\n\t\tthis._checkbox.tabIndex = -1;\n\n\t\tthis._label = document.createElement('label');\n\t\tthis._label.className = 'label';\n\t\t// Connect the label and the checkbox. Checkbox will get checked when the label recieves a click.\n\t\tthis._label.htmlFor = this._checkbox.id;\n\t\tthis._label.tabIndex = -1;\n\n\t\tthis._domNode.appendChild(this._checkbox);\n\t\tthis._domNode.appendChild(this._label);\n\n\t\tthis._opts.parent.appendChild(this._domNode);\n\n\t\tthis.onchange(this._checkbox, (e) => {\n\t\t\tthis._opts.onChange();\n\t\t});\n\t}\n\n\tpublic get domNode(): HTMLElement {\n\t\treturn this._domNode;\n\t}\n\n\tpublic get checked(): boolean {\n\t\treturn this._checkbox.checked;\n\t}\n\n\tpublic set checked(newValue: boolean) {\n\t\tthis._checkbox.checked = newValue;\n\t}\n\n\tpublic focus(): void {\n\t\tthis._checkbox.focus();\n\t}\n\n\tprivate enable(): void {\n\t\tthis._checkbox.removeAttribute('disabled');\n\t}\n\n\tprivate disable(): void {\n\t\tthis._checkbox.disabled = true;\n\t}\n\n\tpublic setEnabled(enabled: boolean): void {\n\t\tif (enabled) {\n\t\t\tthis.enable();\n\t\t\tthis.domNode.tabIndex = 0;\n\t\t} else {\n\t\t\tthis.disable();\n\t\t\tthis.domNode.tabIndex = -1;\n\t\t}\n\t}\n}\n\ninterface ISimpleButtonOpts {\n\tlabel: string;\n\tclassName: string;\n\tonTrigger: () => void;\n\tonKeyDown: (e: IKeyboardEvent) => void;\n}\n\nclass SimpleButton extends Widget {\n\n\tprivate _opts: ISimpleButtonOpts;\n\tprivate _domNode: HTMLElement;\n\n\tconstructor(opts: ISimpleButtonOpts) {\n\t\tsuper();\n\t\tthis._opts = opts;\n\n\t\tthis._domNode = document.createElement('div');\n\t\tthis._domNode.title = this._opts.label;\n\t\tthis._domNode.tabIndex = 0;\n\t\tthis._domNode.className = 'button ' + this._opts.className;\n\t\tthis._domNode.setAttribute('role', 'button');\n\t\tthis._domNode.setAttribute('aria-label', this._opts.label);\n\n\t\tthis.onclick(this._domNode, (e) => {\n\t\t\tthis._opts.onTrigger();\n\t\t\te.preventDefault();\n\t\t});\n\t\tthis.onkeydown(this._domNode, (e) => {\n\t\t\tif (e.equals(KeyCode.Space) || e.equals(KeyCode.Enter)) {\n\t\t\t\tthis._opts.onTrigger();\n\t\t\t\te.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._opts.onKeyDown(e);\n\t\t});\n\t}\n\n\tpublic get domNode(): HTMLElement {\n\t\treturn this._domNode;\n\t}\n\n\tpublic isEnabled(): boolean {\n\t\treturn (this._domNode.tabIndex >= 0);\n\t}\n\n\tpublic focus(): void {\n\t\tthis._domNode.focus();\n\t}\n\n\tpublic setEnabled(enabled: boolean): void {\n\t\tdom.toggleClass(this._domNode, 'disabled', !enabled);\n\t\tthis._domNode.setAttribute('aria-disabled', String(!enabled));\n\t\tthis._domNode.tabIndex = enabled ? 0 : -1;\n\t}\n\n\tpublic setExpanded(expanded: boolean): void {\n\t\tthis._domNode.setAttribute('aria-expanded', String(!!expanded));\n\t}\n\n\tpublic toggleClass(className: string, shouldHaveIt: boolean): void {\n\t\tdom.toggleClass(this._domNode, className, shouldHaveIt);\n\t}\n}\n\n// theming\n\nregisterThemingParticipant((theme, collector) => {\n\tfunction addBackgroundColorRule(selector: string, color: Color): void {\n\t\tif (color) {\n\t\t\tcollector.addRule(`.monaco-editor ${selector} { background-color: ${color}; }`);\n\t\t}\n\t}\n\n\taddBackgroundColorRule('.findMatch', theme.getColor(editorFindMatchHighlight));\n\taddBackgroundColorRule('.currentFindMatch', theme.getColor(editorFindMatch));\n\taddBackgroundColorRule('.findScope', theme.getColor(editorFindRangeHighlight));\n\n\tlet widgetBackground = theme.getColor(editorWidgetBackground);\n\taddBackgroundColorRule('.find-widget', widgetBackground);\n\n\tlet widgetShadowColor = theme.getColor(widgetShadow);\n\tif (widgetShadowColor) {\n\t\tcollector.addRule(`.monaco-editor .find-widget { box-shadow: 0 2px 8px ${widgetShadowColor}; }`);\n\t}\n\n\tlet hcOutline = theme.getColor(activeContrastBorder);\n\tif (hcOutline) {\n\t\tcollector.addRule(`.monaco-editor .findScope { border: 1px dashed ${hcOutline.transparent(0.4)}; }`);\n\t\tcollector.addRule(`.monaco-editor .currentFindMatch { border: 2px solid ${hcOutline}; padding: 1px; -moz-box-sizing: border-box; box-sizing: border-box; }`);\n\t\tcollector.addRule(`.monaco-editor .findMatch { border: 1px dotted ${hcOutline}; -moz-box-sizing: border-box; box-sizing: border-box; }`);\n\t}\n\tlet hcBorder = theme.getColor(contrastBorder);\n\tif (hcBorder) {\n\t\tcollector.addRule(`.monaco-editor .find-widget { border: 2px solid ${hcBorder}; }`);\n\t}\n\n\tlet error = theme.getColor(errorForeground);\n\tif (error) {\n\t\tcollector.addRule(`.monaco-editor .find-widget.no-results .matchesCount { color: ${error}; }`);\n\t}\n\n\tlet border = theme.getColor('panel.border');\n\tif (border) {\n\t\tcollector.addRule(`.monaco-editor .find-widget .monaco-sash { background-color: ${border}; width: 3px !important; margin-left: -4px;}`);\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { IContextViewService } from 'vs/platform/contextview/browser/contextView';\nimport { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';\nimport { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';\nimport { ICodeEditor } from 'vs/editor/browser/editorBrowser';\nimport { editorContribution } from 'vs/editor/browser/editorBrowserExtensions';\nimport { FindWidget, IFindController } from 'vs/editor/contrib/find/browser/findWidget';\nimport { FindOptionsWidget } from 'vs/editor/contrib/find/browser/findOptionsWidget';\nimport { CommonFindController, FindStartFocusAction, IFindStartOptions } from 'vs/editor/contrib/find/common/findController';\nimport { IThemeService } from 'vs/platform/theme/common/themeService';\nimport { IStorageService } from 'vs/platform/storage/common/storage';\n\n@editorContribution\nexport class FindController extends CommonFindController implements IFindController {\n\n\tprivate _widget: FindWidget;\n\tprivate _findOptionsWidget: FindOptionsWidget;\n\n\tconstructor(\n\t\teditor: ICodeEditor,\n\t\t@IContextViewService contextViewService: IContextViewService,\n\t\t@IContextKeyService contextKeyService: IContextKeyService,\n\t\t@IKeybindingService keybindingService: IKeybindingService,\n\t\t@IThemeService themeService: IThemeService,\n\t\t@IStorageService storageService: IStorageService\n\t) {\n\t\tsuper(editor, contextKeyService, storageService);\n\n\t\tthis._widget = this._register(new FindWidget(editor, this, this._state, contextViewService, keybindingService, contextKeyService, themeService));\n\t\tthis._findOptionsWidget = this._register(new FindOptionsWidget(editor, this._state, keybindingService, themeService));\n\t}\n\n\tprotected _start(opts: IFindStartOptions): void {\n\t\tsuper._start(opts);\n\n\t\tif (opts.shouldFocus === FindStartFocusAction.FocusReplaceInput) {\n\t\t\tthis._widget.focusReplaceInput();\n\t\t} else if (opts.shouldFocus === FindStartFocusAction.FocusFindInput) {\n\t\t\tthis._widget.focusFindInput();\n\t\t}\n\t}\n\n\tpublic highlightFindOptions(): void {\n\t\tif (this._state.isRevealed) {\n\t\t\tthis._widget.highlightFindOptions();\n\t\t} else {\n\t\t\tthis._findOptionsWidget.highlightFindOptions();\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/css!./messageController';\nimport { setDisposableTimeout } from 'vs/base/common/async';\nimport { KeyCode } from 'vs/base/common/keyCodes';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { alert } from 'vs/base/browser/ui/aria/aria';\nimport { Range } from 'vs/editor/common/core/range';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { commonEditorContribution, CommonEditorRegistry, EditorCommand } from 'vs/editor/common/editorCommonExtensions';\nimport { ICodeEditor, IContentWidget, IContentWidgetPosition, ContentWidgetPositionPreference } from 'vs/editor/browser/editorBrowser';\nimport { IContextKeyService, RawContextKey, IContextKey } from 'vs/platform/contextkey/common/contextkey';\nimport { IPosition } from 'vs/editor/common/core/position';\nimport { registerThemingParticipant, HIGH_CONTRAST } from 'vs/platform/theme/common/themeService';\nimport { inputValidationInfoBorder, inputValidationInfoBackground } from 'vs/platform/theme/common/colorRegistry';\n\n@commonEditorContribution\nexport class MessageController {\n\n\tprivate static _id = 'editor.contrib.messageController';\n\n\tstatic CONTEXT_SNIPPET_MODE = new RawContextKey('messageVisible', false);\n\n\tstatic get(editor: editorCommon.ICommonCodeEditor): MessageController {\n\t\treturn editor.getContribution(MessageController._id);\n\t}\n\n\tgetId(): string {\n\t\treturn MessageController._id;\n\t}\n\n\tprivate _editor: ICodeEditor;\n\tprivate _visible: IContextKey;\n\tprivate _messageWidget: MessageWidget;\n\tprivate _messageListeners: IDisposable[] = [];\n\n\tconstructor(\n\t\teditor: ICodeEditor,\n\t\t@IContextKeyService contextKeyService: IContextKeyService\n\t) {\n\t\tthis._editor = editor;\n\t\tthis._visible = MessageController.CONTEXT_SNIPPET_MODE.bindTo(contextKeyService);\n\t}\n\n\tdispose() {\n\t\tthis._visible.reset();\n\t}\n\n\tshowMessage(message: string, position: IPosition): void {\n\n\t\talert(message);\n\n\t\tthis._visible.set(true);\n\t\tdispose(this._messageWidget);\n\t\tthis._messageListeners = dispose(this._messageListeners);\n\t\tthis._messageWidget = new MessageWidget(this._editor, position, message);\n\n\t\t// close on blur, cursor, model change, dispose\n\t\tthis._messageListeners.push(this._editor.onDidBlurEditorText(() => this.closeMessage()));\n\t\tthis._messageListeners.push(this._editor.onDidChangeCursorPosition(() => this.closeMessage()));\n\t\tthis._messageListeners.push(this._editor.onDidDispose(() => this.closeMessage()));\n\t\tthis._messageListeners.push(this._editor.onDidChangeModel(() => this.closeMessage()));\n\n\t\t// close after 3s\n\t\tthis._messageListeners.push(setDisposableTimeout(() => this.closeMessage(), 3000));\n\n\t\t// close on mouse move\n\t\tlet bounds: Range;\n\t\tthis._messageListeners.push(this._editor.onMouseMove(e => {\n\t\t\t// outside the text area\n\t\t\tif (!e.target.position) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!bounds) {\n\t\t\t\t// define bounding box around position and first mouse occurance\n\t\t\t\tbounds = new Range(position.lineNumber - 3, 1, e.target.position.lineNumber + 3, 1);\n\t\t\t} else if (!bounds.containsPosition(e.target.position)) {\n\t\t\t\t// check if position is still in bounds\n\t\t\t\tthis.closeMessage();\n\t\t\t}\n\t\t}));\n\t}\n\n\tcloseMessage(): void {\n\t\tthis._visible.reset();\n\t\tthis._messageListeners = dispose(this._messageListeners);\n\t\tthis._messageListeners.push(MessageWidget.fadeOut(this._messageWidget));\n\t}\n}\n\nconst MessageCommand = EditorCommand.bindToContribution(MessageController.get);\n\n\nCommonEditorRegistry.registerEditorCommand(new MessageCommand({\n\tid: 'leaveEditorMessage',\n\tprecondition: MessageController.CONTEXT_SNIPPET_MODE,\n\thandler: c => c.closeMessage(),\n\tkbOpts: {\n\t\tweight: CommonEditorRegistry.commandWeight(30),\n\t\tprimary: KeyCode.Escape\n\t}\n}));\n\nclass MessageWidget implements IContentWidget {\n\n\t// Editor.IContentWidget.allowEditorOverflow\n\treadonly allowEditorOverflow = true;\n\treadonly suppressMouseDown = false;\n\n\tprivate _editor: ICodeEditor;\n\tprivate _position: IPosition;\n\tprivate _domNode: HTMLDivElement;\n\n\tstatic fadeOut(messageWidget: MessageWidget): IDisposable {\n\t\tlet handle: number;\n\t\tconst dispose = () => {\n\t\t\tmessageWidget.dispose();\n\t\t\tclearTimeout(handle);\n\t\t\tmessageWidget.getDomNode().removeEventListener('animationend', dispose);\n\t\t};\n\t\thandle = setTimeout(dispose, 110);\n\t\tmessageWidget.getDomNode().addEventListener('animationend', dispose);\n\t\tmessageWidget.getDomNode().classList.add('fadeOut');\n\t\treturn { dispose };\n\t}\n\n\tconstructor(editor: ICodeEditor, { lineNumber, column }: IPosition, text: string) {\n\n\t\tthis._editor = editor;\n\t\tthis._editor.revealLinesInCenterIfOutsideViewport(lineNumber, lineNumber);\n\t\tthis._position = { lineNumber, column: 1 };\n\n\t\tthis._domNode = document.createElement('div');\n\t\tthis._domNode.style.paddingLeft = `${editor.getOffsetForColumn(lineNumber, column) - 6}px`;\n\t\tthis._domNode.classList.add('monaco-editor-overlaymessage');\n\n\t\tconst message = document.createElement('div');\n\t\tmessage.classList.add('message');\n\t\tmessage.textContent = text;\n\t\tthis._domNode.appendChild(message);\n\n\t\tconst anchor = document.createElement('div');\n\t\tanchor.classList.add('anchor');\n\t\tthis._domNode.appendChild(anchor);\n\n\t\tthis._editor.addContentWidget(this);\n\t\tthis._domNode.classList.add('fadeIn');\n\t}\n\n\tdispose() {\n\t\tthis._editor.removeContentWidget(this);\n\t}\n\n\tgetId(): string {\n\t\treturn 'messageoverlay';\n\t}\n\n\tgetDomNode(): HTMLElement {\n\t\treturn this._domNode;\n\t}\n\n\tgetPosition(): IContentWidgetPosition {\n\t\treturn { position: this._position, preference: [ContentWidgetPositionPreference.ABOVE] };\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tlet border = theme.getColor(inputValidationInfoBorder);\n\tif (border) {\n\t\tlet borderWidth = theme.type === HIGH_CONTRAST ? 2 : 1;\n\t\tcollector.addRule(`.monaco-editor .monaco-editor-overlaymessage .anchor { border-top-color: ${border}; }`);\n\t\tcollector.addRule(`.monaco-editor .monaco-editor-overlaymessage .message { border: ${borderWidth}px solid ${border}; }`);\n\t}\n\tlet background = theme.getColor(inputValidationInfoBackground);\n\tif (background) {\n\t\tcollector.addRule(`.monaco-editor .monaco-editor-overlaymessage .message { background-color: ${background}; }`);\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/css!./gotoError';\nimport * as nls from 'vs/nls';\nimport { Emitter } from 'vs/base/common/event';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport Severity from 'vs/base/common/severity';\nimport URI from 'vs/base/common/uri';\nimport * as dom from 'vs/base/browser/dom';\nimport { RawContextKey, IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';\nimport { IMarker, IMarkerService } from 'vs/platform/markers/common/markers';\nimport { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { editorAction, ServicesAccessor, IActionOptions, EditorAction, EditorCommand, CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';\nimport { ICodeEditor } from 'vs/editor/browser/editorBrowser';\nimport { editorContribution } from 'vs/editor/browser/editorBrowserExtensions';\nimport { ZoneWidget } from 'vs/editor/contrib/zoneWidget/browser/zoneWidget';\nimport { registerColor, oneOf } from 'vs/platform/theme/common/colorRegistry';\nimport { IThemeService, ITheme } from 'vs/platform/theme/common/themeService';\nimport { Color } from 'vs/base/common/color';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { AccessibilitySupport } from 'vs/base/common/platform';\nimport { editorErrorForeground, editorErrorBorder, editorWarningForeground, editorWarningBorder } from 'vs/editor/common/view/editorColorRegistry';\n\nclass MarkerModel {\n\n\tprivate _editor: ICodeEditor;\n\tprivate _markers: IMarker[];\n\tprivate _nextIdx: number;\n\tprivate _toUnbind: IDisposable[];\n\tprivate _ignoreSelectionChange: boolean;\n\tprivate _onCurrentMarkerChanged: Emitter;\n\tprivate _onMarkerSetChanged: Emitter;\n\n\tconstructor(editor: ICodeEditor, markers: IMarker[]) {\n\t\tthis._editor = editor;\n\t\tthis._markers = null;\n\t\tthis._nextIdx = -1;\n\t\tthis._toUnbind = [];\n\t\tthis._ignoreSelectionChange = false;\n\t\tthis._onCurrentMarkerChanged = new Emitter();\n\t\tthis._onMarkerSetChanged = new Emitter();\n\t\tthis.setMarkers(markers);\n\n\t\t// listen on editor\n\t\tthis._toUnbind.push(this._editor.onDidDispose(() => this.dispose()));\n\t\tthis._toUnbind.push(this._editor.onDidChangeCursorPosition(() => {\n\t\t\tif (!this._ignoreSelectionChange) {\n\t\t\t\tthis._nextIdx = -1;\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic get onCurrentMarkerChanged() {\n\t\treturn this._onCurrentMarkerChanged.event;\n\t}\n\n\tpublic get onMarkerSetChanged() {\n\t\treturn this._onMarkerSetChanged.event;\n\t}\n\n\tpublic setMarkers(markers: IMarker[]): void {\n\t\t// assign\n\t\tthis._markers = markers || [];\n\n\t\t// sort markers\n\t\tthis._markers.sort((left, right) => Severity.compare(left.severity, right.severity) || Range.compareRangesUsingStarts(left, right));\n\n\t\tthis._nextIdx = -1;\n\t\tthis._onMarkerSetChanged.fire(this);\n\t}\n\n\tpublic withoutWatchingEditorPosition(callback: () => void): void {\n\t\tthis._ignoreSelectionChange = true;\n\t\ttry {\n\t\t\tcallback();\n\t\t} finally {\n\t\t\tthis._ignoreSelectionChange = false;\n\t\t}\n\t}\n\n\tprivate _initIdx(fwd: boolean): void {\n\t\tlet found = false;\n\t\tconst position = this._editor.getPosition();\n\t\tfor (let i = 0; i < this._markers.length; i++) {\n\t\t\tlet range = Range.lift(this._markers[i]);\n\n\t\t\tif (range.isEmpty()) {\n\t\t\t\tconst word = this._editor.getModel().getWordAtPosition(range.getStartPosition());\n\t\t\t\tif (word) {\n\t\t\t\t\trange = new Range(range.startLineNumber, word.startColumn, range.startLineNumber, word.endColumn);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (range.containsPosition(position) || position.isBeforeOrEqual(range.getStartPosition())) {\n\t\t\t\tthis._nextIdx = i + (fwd ? 0 : -1);\n\t\t\t\tfound = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!found) {\n\t\t\t// after the last change\n\t\t\tthis._nextIdx = fwd ? 0 : this._markers.length - 1;\n\t\t}\n\t\tif (this._nextIdx < 0) {\n\t\t\tthis._nextIdx = this._markers.length - 1;\n\t\t}\n\t}\n\n\tprivate move(fwd: boolean): void {\n\t\tif (!this.canNavigate()) {\n\t\t\tthis._onCurrentMarkerChanged.fire(undefined);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._nextIdx === -1) {\n\t\t\tthis._initIdx(fwd);\n\n\t\t} else if (fwd) {\n\t\t\tthis._nextIdx += 1;\n\t\t\tif (this._nextIdx >= this._markers.length) {\n\t\t\t\tthis._nextIdx = 0;\n\t\t\t}\n\t\t} else {\n\t\t\tthis._nextIdx -= 1;\n\t\t\tif (this._nextIdx < 0) {\n\t\t\t\tthis._nextIdx = this._markers.length - 1;\n\t\t\t}\n\t\t}\n\t\tconst marker = this._markers[this._nextIdx];\n\t\tthis._onCurrentMarkerChanged.fire(marker);\n\t}\n\n\tpublic canNavigate(): boolean {\n\t\treturn this._markers.length > 0;\n\t}\n\n\tpublic next(): void {\n\t\tthis.move(true);\n\t}\n\n\tpublic previous(): void {\n\t\tthis.move(false);\n\t}\n\n\tpublic findMarkerAtPosition(pos: Position): IMarker {\n\t\tfor (const marker of this._markers) {\n\t\t\tif (Range.containsPosition(marker, pos)) {\n\t\t\t\treturn marker;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tpublic get total() {\n\t\treturn this._markers.length;\n\t}\n\n\tpublic indexOf(marker: IMarker): number {\n\t\treturn 1 + this._markers.indexOf(marker);\n\t}\n\n\tpublic reveal(): void {\n\n\t\tif (this._nextIdx === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.withoutWatchingEditorPosition(() => {\n\t\t\tconst pos = new Position(this._markers[this._nextIdx].startLineNumber, this._markers[this._nextIdx].startColumn);\n\t\t\tthis._editor.setPosition(pos);\n\t\t\tthis._editor.revealPositionInCenter(pos);\n\t\t});\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._toUnbind = dispose(this._toUnbind);\n\t}\n}\n\nclass MessageWidget {\n\n\tdomNode: HTMLDivElement;\n\tlines: number = 0;\n\n\tconstructor(container: HTMLElement) {\n\t\tthis.domNode = document.createElement('div');\n\t\tthis.domNode.className = 'block descriptioncontainer';\n\t\tthis.domNode.setAttribute('aria-live', 'assertive');\n\t\tthis.domNode.setAttribute('role', 'alert');\n\t\tcontainer.appendChild(this.domNode);\n\t}\n\n\tupdate({ source, message }: IMarker): void {\n\t\tthis.lines = 1;\n\t\tif (source) {\n\t\t\tconst indent = new Array(source.length + 3 + 1).join(' ');\n\t\t\tmessage = `[${source}] ` + message.replace(/\\r\\n|\\r|\\n/g, () => {\n\t\t\t\tthis.lines += 1;\n\t\t\t\treturn '\\n' + indent;\n\t\t\t});\n\t\t}\n\t\tthis.domNode.innerText = message;\n\t}\n}\n\nclass MarkerNavigationWidget extends ZoneWidget {\n\n\tprivate _parentContainer: HTMLElement;\n\tprivate _container: HTMLElement;\n\tprivate _title: HTMLElement;\n\tprivate _message: MessageWidget;\n\tprivate _callOnDispose: IDisposable[] = [];\n\tprivate _severity: Severity;\n\tprivate _backgroundColor: Color;\n\n\tconstructor(editor: ICodeEditor, private _model: MarkerModel, private _themeService: IThemeService) {\n\t\tsuper(editor, { showArrow: true, showFrame: true, isAccessible: true });\n\t\tthis._severity = Severity.Warning;\n\t\tthis._backgroundColor = Color.white;\n\n\t\tthis._applyTheme(_themeService.getTheme());\n\t\tthis._callOnDispose.push(_themeService.onThemeChange(this._applyTheme.bind(this)));\n\n\t\tthis.create();\n\t\tthis._wireModelAndView();\n\t}\n\n\tprivate _applyTheme(theme: ITheme) {\n\t\tthis._backgroundColor = theme.getColor(editorMarkerNavigationBackground);\n\t\tlet frameColor = theme.getColor(this._severity === Severity.Error ? editorMarkerNavigationError : editorMarkerNavigationWarning);\n\t\tthis.style({\n\t\t\tarrowColor: frameColor,\n\t\t\tframeColor: frameColor\n\t\t}); // style() will trigger _applyStyles\n\t}\n\n\tprotected _applyStyles(): void {\n\t\tif (this._parentContainer) {\n\t\t\tthis._parentContainer.style.backgroundColor = this._backgroundColor.toString();\n\t\t}\n\t\tsuper._applyStyles();\n\t}\n\n\tdispose(): void {\n\t\tthis._callOnDispose = dispose(this._callOnDispose);\n\t\tsuper.dispose();\n\t}\n\n\tfocus(): void {\n\t\tthis._parentContainer.focus();\n\t}\n\n\tprotected _fillContainer(container: HTMLElement): void {\n\t\tthis._parentContainer = container;\n\t\tdom.addClass(container, 'marker-widget');\n\t\tthis._parentContainer.tabIndex = 0;\n\t\tthis._parentContainer.setAttribute('role', 'tooltip');\n\n\t\tthis._container = document.createElement('div');\n\t\tcontainer.appendChild(this._container);\n\n\t\tthis._title = document.createElement('div');\n\t\tthis._title.className = 'block title';\n\t\tthis._container.appendChild(this._title);\n\n\t\tthis._message = new MessageWidget(this._container);\n\t\tthis.editor.applyFontInfo(this._message.domNode);\n\t}\n\n\tpublic show(where: Position, heightInLines: number): void {\n\t\tsuper.show(where, heightInLines);\n\t\tif (this.editor.getConfiguration().accessibilitySupport !== AccessibilitySupport.Disabled) {\n\t\t\tthis.focus();\n\t\t}\n\t}\n\n\tprivate _wireModelAndView(): void {\n\t\t// listen to events\n\t\tthis._model.onCurrentMarkerChanged(this.showAtMarker, this, this._callOnDispose);\n\t\tthis._model.onMarkerSetChanged(this._onMarkersChanged, this, this._callOnDispose);\n\t}\n\n\tpublic showAtMarker(marker: IMarker): void {\n\n\t\tif (!marker) {\n\t\t\treturn;\n\t\t}\n\n\t\t// update:\n\t\t// * title\n\t\t// * message\n\t\tthis._container.classList.remove('stale');\n\t\tthis._title.innerHTML = nls.localize('title.wo_source', \"({0}/{1})\", this._model.indexOf(marker), this._model.total);\n\t\tthis._message.update(marker);\n\n\t\tthis._model.withoutWatchingEditorPosition(() => {\n\t\t\t// update frame color (only applied on 'show')\n\t\t\tthis._severity = marker.severity;\n\t\t\tthis._applyTheme(this._themeService.getTheme());\n\n\t\t\tthis.show(new Position(marker.startLineNumber, marker.startColumn), this.computeRequiredHeight());\n\t\t});\n\t}\n\n\tprivate _onMarkersChanged(): void {\n\t\tconst marker = this._model.findMarkerAtPosition(this.position);\n\t\tif (marker) {\n\t\t\tthis._container.classList.remove('stale');\n\t\t\tthis._message.update(marker);\n\t\t} else {\n\t\t\tthis._container.classList.add('stale');\n\t\t}\n\t\tthis._relayout();\n\t}\n\n\tprotected _relayout(): void {\n\t\tsuper._relayout(this.computeRequiredHeight());\n\t}\n\n\tprivate computeRequiredHeight() {\n\t\treturn 1 + this._message.lines;\n\t}\n}\n\nclass MarkerNavigationAction extends EditorAction {\n\n\tprivate _isNext: boolean;\n\n\tconstructor(next: boolean, opts: IActionOptions) {\n\t\tsuper(opts);\n\t\tthis._isNext = next;\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\t\tconst telemetryService = accessor.get(ITelemetryService);\n\n\t\tconst controller = MarkerController.get(editor);\n\t\tif (!controller) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet model = controller.getOrCreateModel();\n\t\ttelemetryService.publicLog('zoneWidgetShown', { mode: 'go to error', ...editor.getTelemetryData() });\n\t\tif (model) {\n\t\t\tif (this._isNext) {\n\t\t\t\tmodel.next();\n\t\t\t} else {\n\t\t\t\tmodel.previous();\n\t\t\t}\n\t\t\tmodel.reveal();\n\t\t}\n\t}\n}\n\n@editorContribution\nclass MarkerController implements editorCommon.IEditorContribution {\n\n\tprivate static ID = 'editor.contrib.markerController';\n\n\tpublic static get(editor: editorCommon.ICommonCodeEditor): MarkerController {\n\t\treturn editor.getContribution(MarkerController.ID);\n\t}\n\n\tprivate _editor: ICodeEditor;\n\tprivate _model: MarkerModel;\n\tprivate _zone: MarkerNavigationWidget;\n\tprivate _callOnClose: IDisposable[] = [];\n\tprivate _markersNavigationVisible: IContextKey;\n\n\tconstructor(\n\t\teditor: ICodeEditor,\n\t\t@IMarkerService private _markerService: IMarkerService,\n\t\t@IContextKeyService private _contextKeyService: IContextKeyService,\n\t\t@IThemeService private _themeService: IThemeService\n\t) {\n\t\tthis._editor = editor;\n\t\tthis._markersNavigationVisible = CONTEXT_MARKERS_NAVIGATION_VISIBLE.bindTo(this._contextKeyService);\n\t}\n\n\tpublic getId(): string {\n\t\treturn MarkerController.ID;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._cleanUp();\n\t}\n\n\tprivate _cleanUp(): void {\n\t\tthis._markersNavigationVisible.reset();\n\t\tthis._callOnClose = dispose(this._callOnClose);\n\t\tthis._zone = null;\n\t\tthis._model = null;\n\t}\n\n\tpublic getOrCreateModel(): MarkerModel {\n\n\t\tif (this._model) {\n\t\t\treturn this._model;\n\t\t}\n\n\t\tconst markers = this._getMarkers();\n\t\tthis._model = new MarkerModel(this._editor, markers);\n\t\tthis._zone = new MarkerNavigationWidget(this._editor, this._model, this._themeService);\n\t\tthis._markersNavigationVisible.set(true);\n\n\t\tthis._callOnClose.push(this._model);\n\t\tthis._callOnClose.push(this._zone);\n\n\t\tthis._callOnClose.push(this._editor.onDidChangeModel(() => this._cleanUp()));\n\t\tthis._model.onCurrentMarkerChanged(marker => !marker && this._cleanUp(), undefined, this._callOnClose);\n\t\tthis._markerService.onMarkerChanged(this._onMarkerChanged, this, this._callOnClose);\n\t\treturn this._model;\n\t}\n\n\tpublic closeMarkersNavigation(): void {\n\t\tthis._cleanUp();\n\t\tthis._editor.focus();\n\t}\n\n\tprivate _onMarkerChanged(changedResources: URI[]): void {\n\t\tif (!changedResources.some(r => this._editor.getModel().uri.toString() === r.toString())) {\n\t\t\treturn;\n\t\t}\n\t\tthis._model.setMarkers(this._getMarkers());\n\t}\n\n\tprivate _getMarkers(): IMarker[] {\n\t\treturn this._markerService.read({ resource: this._editor.getModel().uri });\n\t}\n}\n\n@editorAction\nclass NextMarkerAction extends MarkerNavigationAction {\n\tconstructor() {\n\t\tsuper(true, {\n\t\t\tid: 'editor.action.marker.next',\n\t\t\tlabel: nls.localize('markerAction.next.label', \"Go to Next Error or Warning\"),\n\t\t\talias: 'Go to Next Error or Warning',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.focus,\n\t\t\t\tprimary: KeyCode.F8\n\t\t\t}\n\t\t});\n\t}\n}\n\n@editorAction\nclass PrevMarkerAction extends MarkerNavigationAction {\n\tconstructor() {\n\t\tsuper(false, {\n\t\t\tid: 'editor.action.marker.prev',\n\t\t\tlabel: nls.localize('markerAction.previous.label', \"Go to Previous Error or Warning\"),\n\t\t\talias: 'Go to Previous Error or Warning',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.focus,\n\t\t\t\tprimary: KeyMod.Shift | KeyCode.F8\n\t\t\t}\n\t\t});\n\t}\n}\n\nconst CONTEXT_MARKERS_NAVIGATION_VISIBLE = new RawContextKey('markersNavigationVisible', false);\n\nconst MarkerCommand = EditorCommand.bindToContribution(MarkerController.get);\n\nCommonEditorRegistry.registerEditorCommand(new MarkerCommand({\n\tid: 'closeMarkersNavigation',\n\tprecondition: CONTEXT_MARKERS_NAVIGATION_VISIBLE,\n\thandler: x => x.closeMarkersNavigation(),\n\tkbOpts: {\n\t\tweight: CommonEditorRegistry.commandWeight(50),\n\t\tkbExpr: EditorContextKeys.focus,\n\t\tprimary: KeyCode.Escape,\n\t\tsecondary: [KeyMod.Shift | KeyCode.Escape]\n\t}\n}));\n\n// theming\n\nlet errorDefault = oneOf(editorErrorForeground, editorErrorBorder);\nlet warningDefault = oneOf(editorWarningForeground, editorWarningBorder);\n\nexport const editorMarkerNavigationError = registerColor('editorMarkerNavigationError.background', { dark: errorDefault, light: errorDefault, hc: errorDefault }, nls.localize('editorMarkerNavigationError', 'Editor marker navigation widget error color.'));\nexport const editorMarkerNavigationWarning = registerColor('editorMarkerNavigationWarning.background', { dark: warningDefault, light: warningDefault, hc: warningDefault }, nls.localize('editorMarkerNavigationWarning', 'Editor marker navigation widget warning color.'));\nexport const editorMarkerNavigationBackground = registerColor('editorMarkerNavigation.background', { dark: '#2D2D30', light: Color.white, hc: '#0C141F' }, nls.localize('editorMarkerNavigationBackground', 'Editor marker navigation widget background.'));\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'use strict';\n\nimport 'vs/css!./hover';\nimport * as nls from 'vs/nls';\nimport { KeyCode, KeyMod, KeyChord } from 'vs/base/common/keyCodes';\nimport * as platform from 'vs/base/common/platform';\nimport { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport { IOpenerService } from 'vs/platform/opener/common/opener';\nimport { IModeService } from 'vs/editor/common/services/modeService';\nimport { Range } from 'vs/editor/common/core/range';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { editorAction, ServicesAccessor, EditorAction } from 'vs/editor/common/editorCommonExtensions';\nimport { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser';\nimport { editorContribution } from 'vs/editor/browser/editorBrowserExtensions';\nimport { ModesContentHoverWidget } from './modesContentHover';\nimport { ModesGlyphHoverWidget } from './modesGlyphHover';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { registerThemingParticipant } from 'vs/platform/theme/common/themeService';\nimport { editorHoverHighlight, editorHoverBackground, editorHoverBorder, textLinkForeground, textCodeBlockBackground } from 'vs/platform/theme/common/colorRegistry';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\n\n@editorContribution\nexport class ModesHoverController implements editorCommon.IEditorContribution {\n\n\tprivate static ID = 'editor.contrib.hover';\n\n\tprivate _editor: ICodeEditor;\n\tprivate _toUnhook: IDisposable[];\n\n\tprivate _contentWidget: ModesContentHoverWidget;\n\tprivate _glyphWidget: ModesGlyphHoverWidget;\n\n\tstatic get(editor: editorCommon.ICommonCodeEditor): ModesHoverController {\n\t\treturn editor.getContribution(ModesHoverController.ID);\n\t}\n\n\tconstructor(editor: ICodeEditor,\n\t\t@IOpenerService openerService: IOpenerService,\n\t\t@IModeService modeService: IModeService\n\t) {\n\t\tthis._editor = editor;\n\n\t\tthis._toUnhook = [];\n\n\t\tif (editor.getConfiguration().contribInfo.hover) {\n\t\t\tthis._toUnhook.push(this._editor.onMouseDown((e: IEditorMouseEvent) => this._onEditorMouseDown(e)));\n\t\t\tthis._toUnhook.push(this._editor.onMouseMove((e: IEditorMouseEvent) => this._onEditorMouseMove(e)));\n\t\t\tthis._toUnhook.push(this._editor.onMouseLeave((e: IEditorMouseEvent) => this._hideWidgets()));\n\t\t\tthis._toUnhook.push(this._editor.onKeyDown((e: IKeyboardEvent) => this._onKeyDown(e)));\n\t\t\tthis._toUnhook.push(this._editor.onDidChangeModel(() => this._hideWidgets()));\n\t\t\tthis._toUnhook.push(this._editor.onDidChangeModelDecorations(() => this._onModelDecorationsChanged()));\n\t\t\tthis._toUnhook.push(this._editor.onDidScrollChange((e) => {\n\t\t\t\tif (e.scrollTopChanged || e.scrollLeftChanged) {\n\t\t\t\t\tthis._hideWidgets();\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\tthis._contentWidget = new ModesContentHoverWidget(editor, openerService, modeService);\n\t\t\tthis._glyphWidget = new ModesGlyphHoverWidget(editor, openerService, modeService);\n\t\t}\n\t}\n\n\tprivate _onModelDecorationsChanged(): void {\n\t\tthis._contentWidget.onModelDecorationsChanged();\n\t\tthis._glyphWidget.onModelDecorationsChanged();\n\t}\n\n\tprivate _onEditorMouseDown(mouseEvent: IEditorMouseEvent): void {\n\t\tvar targetType = mouseEvent.target.type;\n\n\t\tif (targetType === MouseTargetType.CONTENT_WIDGET && mouseEvent.target.detail === ModesContentHoverWidget.ID) {\n\t\t\t// mouse down on top of content hover widget\n\t\t\treturn;\n\t\t}\n\n\t\tif (targetType === MouseTargetType.OVERLAY_WIDGET && mouseEvent.target.detail === ModesGlyphHoverWidget.ID) {\n\t\t\t// mouse down on top of overlay hover widget\n\t\t\treturn;\n\t\t}\n\n\t\tthis._hideWidgets();\n\t}\n\n\tprivate _onEditorMouseMove(mouseEvent: IEditorMouseEvent): void {\n\t\tvar targetType = mouseEvent.target.type;\n\t\tvar stopKey = platform.isMacintosh ? 'metaKey' : 'ctrlKey';\n\n\t\tif (targetType === MouseTargetType.CONTENT_WIDGET && mouseEvent.target.detail === ModesContentHoverWidget.ID && !mouseEvent.event[stopKey]) {\n\t\t\t// mouse moved on top of content hover widget\n\t\t\treturn;\n\t\t}\n\n\t\tif (targetType === MouseTargetType.OVERLAY_WIDGET && mouseEvent.target.detail === ModesGlyphHoverWidget.ID && !mouseEvent.event[stopKey]) {\n\t\t\t// mouse moved on top of overlay hover widget\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._editor.getConfiguration().contribInfo.hover && targetType === MouseTargetType.CONTENT_TEXT) {\n\t\t\tthis._glyphWidget.hide();\n\t\t\tthis._contentWidget.startShowingAt(mouseEvent.target.range, false);\n\t\t} else if (targetType === MouseTargetType.GUTTER_GLYPH_MARGIN) {\n\t\t\tthis._contentWidget.hide();\n\t\t\tthis._glyphWidget.startShowingAt(mouseEvent.target.position.lineNumber);\n\t\t} else {\n\t\t\tthis._hideWidgets();\n\t\t}\n\t}\n\n\tprivate _onKeyDown(e: IKeyboardEvent): void {\n\t\tif (e.keyCode !== KeyCode.Ctrl && e.keyCode !== KeyCode.Alt && e.keyCode !== KeyCode.Meta) {\n\t\t\t// Do not hide hover when Ctrl/Meta is pressed\n\t\t\tthis._hideWidgets();\n\t\t}\n\t}\n\n\tprivate _hideWidgets(): void {\n\t\tthis._glyphWidget.hide();\n\t\tthis._contentWidget.hide();\n\t}\n\n\tpublic showContentHover(range: Range, focus: boolean): void {\n\t\tthis._contentWidget.startShowingAt(range, focus);\n\t}\n\n\tpublic getId(): string {\n\t\treturn ModesHoverController.ID;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._toUnhook = dispose(this._toUnhook);\n\t\tif (this._glyphWidget) {\n\t\t\tthis._glyphWidget.dispose();\n\t\t\tthis._glyphWidget = null;\n\t\t}\n\t\tif (this._contentWidget) {\n\t\t\tthis._contentWidget.dispose();\n\t\t\tthis._contentWidget = null;\n\t\t}\n\t}\n}\n\n@editorAction\nclass ShowHoverAction extends EditorAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.showHover',\n\t\t\tlabel: nls.localize('showHover', \"Show Hover\"),\n\t\t\talias: 'Show Hover',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.KEY_I)\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\t\tlet controller = ModesHoverController.get(editor);\n\t\tif (!controller) {\n\t\t\treturn;\n\t\t}\n\t\tconst position = editor.getPosition();\n\t\tconst range = new Range(position.lineNumber, position.column, position.lineNumber, position.column);\n\t\tcontroller.showContentHover(range, true);\n\t}\n}\n\n// theming\nregisterThemingParticipant((theme, collector) => {\n\tlet editorHoverHighlightColor = theme.getColor(editorHoverHighlight);\n\tif (editorHoverHighlightColor) {\n\t\tcollector.addRule(`.monaco-editor .hoverHighlight { background-color: ${editorHoverHighlightColor}; }`);\n\t}\n\tlet hoverBackground = theme.getColor(editorHoverBackground);\n\tif (hoverBackground) {\n\t\tcollector.addRule(`.monaco-editor .monaco-editor-hover { background-color: ${hoverBackground}; }`);\n\t}\n\tlet hoverBorder = theme.getColor(editorHoverBorder);\n\tif (hoverBorder) {\n\t\tcollector.addRule(`.monaco-editor .monaco-editor-hover { border: 1px solid ${hoverBorder}; }`);\n\t\tcollector.addRule(`.monaco-editor .monaco-editor-hover .hover-row:not(:first-child):not(:empty) { border-top: 1px solid ${hoverBorder.transparent(0.5)}; }`);\n\t}\n\tlet link = theme.getColor(textLinkForeground);\n\tif (link) {\n\t\tcollector.addRule(`.monaco-editor .monaco-editor-hover a { color: ${link}; }`);\n\t}\n\tlet codeBackground = theme.getColor(textCodeBlockBackground);\n\tif (codeBackground) {\n\t\tcollector.addRule(`.monaco-editor .monaco-editor-hover code { background-color: ${codeBackground}; }`);\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { Range } from 'vs/editor/common/core/range';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { IEditorContribution, ICommonCodeEditor, IModelDecorationsChangeAccessor } from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { editorAction, ServicesAccessor, EditorAction, commonEditorContribution } from 'vs/editor/common/editorCommonExtensions';\nimport { IInplaceReplaceSupportResult } from 'vs/editor/common/modes';\nimport { IEditorWorkerService } from 'vs/editor/common/services/editorWorkerService';\nimport { InPlaceReplaceCommand } from './inPlaceReplaceCommand';\nimport { EditorState, CodeEditorStateFlag } from 'vs/editor/common/core/editorState';\nimport { registerThemingParticipant } from 'vs/platform/theme/common/themeService';\nimport { editorBracketMatchBorder } from 'vs/editor/common/view/editorColorRegistry';\nimport { ModelDecorationOptions } from 'vs/editor/common/model/textModelWithDecorations';\n\n@commonEditorContribution\nclass InPlaceReplaceController implements IEditorContribution {\n\n\tprivate static ID = 'editor.contrib.inPlaceReplaceController';\n\n\tstatic get(editor: ICommonCodeEditor): InPlaceReplaceController {\n\t\treturn editor.getContribution(InPlaceReplaceController.ID);\n\t}\n\n\tprivate static DECORATION = ModelDecorationOptions.register({\n\t\tclassName: 'valueSetReplacement'\n\t});\n\n\tprivate editor: ICommonCodeEditor;\n\tprivate requestIdPool: number;\n\tprivate currentRequest: TPromise;\n\tprivate decorationRemover: TPromise;\n\tprivate decorationIds: string[];\n\tprivate editorWorkerService: IEditorWorkerService;\n\n\tconstructor(\n\t\teditor: ICommonCodeEditor,\n\t\t@IEditorWorkerService editorWorkerService: IEditorWorkerService\n\t) {\n\t\tthis.editor = editor;\n\t\tthis.editorWorkerService = editorWorkerService;\n\t\tthis.requestIdPool = 0;\n\t\tthis.currentRequest = TPromise.as(null);\n\t\tthis.decorationRemover = TPromise.as(null);\n\t\tthis.decorationIds = [];\n\t}\n\n\tpublic dispose(): void {\n\t}\n\n\tpublic getId(): string {\n\t\treturn InPlaceReplaceController.ID;\n\t}\n\n\tpublic run(source: string, up: boolean): TPromise {\n\n\t\t// cancel any pending request\n\t\tthis.currentRequest.cancel();\n\n\t\tvar selection = this.editor.getSelection(),\n\t\t\tmodel = this.editor.getModel(),\n\t\t\tmodelURI = model.uri;\n\n\t\tif (selection.startLineNumber !== selection.endLineNumber) {\n\t\t\t// Can't accept multiline selection\n\t\t\treturn null;\n\t\t}\n\n\t\tvar state = new EditorState(this.editor, CodeEditorStateFlag.Value | CodeEditorStateFlag.Position);\n\n\t\tthis.currentRequest = this.editorWorkerService.navigateValueSet(modelURI, selection, up);\n\t\tthis.currentRequest = this.currentRequest.then((basicResult) => {\n\t\t\tif (basicResult && basicResult.range && basicResult.value) {\n\t\t\t\treturn basicResult;\n\t\t\t}\n\t\t\treturn null;\n\t\t});\n\n\t\treturn this.currentRequest.then((result: IInplaceReplaceSupportResult) => {\n\n\t\t\tif (!result || !result.range || !result.value) {\n\t\t\t\t// No proper result\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!state.validate(this.editor)) {\n\t\t\t\t// state has changed\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Selection\n\t\t\tvar editRange = Range.lift(result.range),\n\t\t\t\thighlightRange = result.range,\n\t\t\t\tdiff = result.value.length - (selection.endColumn - selection.startColumn);\n\n\t\t\t// highlight\n\t\t\thighlightRange = {\n\t\t\t\tstartLineNumber: highlightRange.startLineNumber,\n\t\t\t\tstartColumn: highlightRange.startColumn,\n\t\t\t\tendLineNumber: highlightRange.endLineNumber,\n\t\t\t\tendColumn: highlightRange.startColumn + result.value.length\n\t\t\t};\n\t\t\tif (diff > 1) {\n\t\t\t\tselection = new Selection(selection.startLineNumber, selection.startColumn, selection.endLineNumber, selection.endColumn + diff - 1);\n\t\t\t}\n\n\t\t\t// Insert new text\n\t\t\tvar command = new InPlaceReplaceCommand(editRange, selection, result.value);\n\n\t\t\tthis.editor.pushUndoStop();\n\t\t\tthis.editor.executeCommand(source, command);\n\t\t\tthis.editor.pushUndoStop();\n\n\t\t\t// add decoration\n\t\t\tthis.decorationIds = this.editor.deltaDecorations(this.decorationIds, [{\n\t\t\t\trange: highlightRange,\n\t\t\t\toptions: InPlaceReplaceController.DECORATION\n\t\t\t}]);\n\n\t\t\t// remove decoration after delay\n\t\t\tthis.decorationRemover.cancel();\n\t\t\tthis.decorationRemover = TPromise.timeout(350);\n\t\t\tthis.decorationRemover.then(() => {\n\t\t\t\tthis.editor.changeDecorations((accessor: IModelDecorationsChangeAccessor) => {\n\t\t\t\t\tthis.decorationIds = accessor.deltaDecorations(this.decorationIds, []);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n}\n\n@editorAction\nclass InPlaceReplaceUp extends EditorAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.inPlaceReplace.up',\n\t\t\tlabel: nls.localize('InPlaceReplaceAction.previous.label', \"Replace with Previous Value\"),\n\t\t\talias: 'Replace with Previous Value',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.US_COMMA\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): TPromise {\n\t\tlet controller = InPlaceReplaceController.get(editor);\n\t\tif (!controller) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn controller.run(this.id, true);\n\t}\n}\n\n@editorAction\nclass InPlaceReplaceDown extends EditorAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.inPlaceReplace.down',\n\t\t\tlabel: nls.localize('InPlaceReplaceAction.next.label', \"Replace with Next Value\"),\n\t\t\talias: 'Replace with Next Value',\n\t\t\tprecondition: EditorContextKeys.writable,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.US_DOT\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): TPromise {\n\t\tlet controller = InPlaceReplaceController.get(editor);\n\t\tif (!controller) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn controller.run(this.id, false);\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tlet border = theme.getColor(editorBracketMatchBorder);\n\tif (border) {\n\t\tcollector.addRule(`.monaco-editor.vs .valueSetReplacement { outline: solid 2px ${border}; }`);\n\t}\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'use strict';\n\nimport 'vs/css!./links';\nimport * as nls from 'vs/nls';\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport * as platform from 'vs/base/common/platform';\nimport Severity from 'vs/base/common/severity';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IMessageService } from 'vs/platform/message/common/message';\nimport { IOpenerService } from 'vs/platform/opener/common/opener';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { editorAction, ServicesAccessor, EditorAction } from 'vs/editor/common/editorCommonExtensions';\nimport { LinkProviderRegistry } from 'vs/editor/common/modes';\nimport { IEditorWorkerService } from 'vs/editor/common/services/editorWorkerService';\nimport { ICodeEditor, MouseTargetType } from 'vs/editor/browser/editorBrowser';\nimport { getLinks, Link } from 'vs/editor/contrib/links/common/links';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { editorContribution } from 'vs/editor/browser/editorBrowserExtensions';\nimport { registerThemingParticipant } from 'vs/platform/theme/common/themeService';\nimport { editorActiveLinkForeground } from 'vs/platform/theme/common/colorRegistry';\nimport { Position } from 'vs/editor/common/core/position';\nimport { ModelDecorationOptions } from 'vs/editor/common/model/textModelWithDecorations';\nimport { ClickLinkGesture, ClickLinkMouseEvent, ClickLinkKeyboardEvent } from 'vs/editor/contrib/goToDeclaration/browser/clickLinkGesture';\n\nconst HOVER_MESSAGE_GENERAL_META = (\n\tplatform.isMacintosh\n\t\t? nls.localize('links.navigate.mac', \"Cmd + click to follow link\")\n\t\t: nls.localize('links.navigate', \"Ctrl + click to follow link\")\n);\n\nconst HOVER_MESSAGE_GENERAL_ALT = nls.localize('links.navigate.al', \"Alt + click to follow link\");\n\nconst decoration = {\n\tmeta: ModelDecorationOptions.register({\n\t\tstickiness: editorCommon.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\tinlineClassName: 'detected-link',\n\t\thoverMessage: HOVER_MESSAGE_GENERAL_META\n\t}),\n\tmetaActive: ModelDecorationOptions.register({\n\t\tstickiness: editorCommon.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\tinlineClassName: 'detected-link-active',\n\t\thoverMessage: HOVER_MESSAGE_GENERAL_META\n\t}),\n\talt: ModelDecorationOptions.register({\n\t\tstickiness: editorCommon.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\tinlineClassName: 'detected-link',\n\t\thoverMessage: HOVER_MESSAGE_GENERAL_ALT\n\t}),\n\taltActive: ModelDecorationOptions.register({\n\t\tstickiness: editorCommon.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\tinlineClassName: 'detected-link-active',\n\t\thoverMessage: HOVER_MESSAGE_GENERAL_ALT\n\t}),\n};\n\nclass LinkOccurrence {\n\n\tpublic static decoration(link: Link, useMetaKey: boolean): editorCommon.IModelDeltaDecoration {\n\t\treturn {\n\t\t\trange: {\n\t\t\t\tstartLineNumber: link.range.startLineNumber,\n\t\t\t\tstartColumn: link.range.startColumn,\n\t\t\t\tendLineNumber: link.range.endLineNumber,\n\t\t\t\tendColumn: link.range.endColumn\n\t\t\t},\n\t\t\toptions: LinkOccurrence._getOptions(useMetaKey, false)\n\t\t};\n\t}\n\n\tprivate static _getOptions(useMetaKey: boolean, isActive: boolean): ModelDecorationOptions {\n\t\tif (useMetaKey) {\n\t\t\treturn (isActive ? decoration.metaActive : decoration.meta);\n\t\t}\n\t\treturn (isActive ? decoration.altActive : decoration.alt);\n\t}\n\n\tpublic decorationId: string;\n\tpublic link: Link;\n\n\tconstructor(link: Link, decorationId: string) {\n\t\tthis.link = link;\n\t\tthis.decorationId = decorationId;\n\t}\n\n\tpublic activate(changeAccessor: editorCommon.IModelDecorationsChangeAccessor, useMetaKey: boolean): void {\n\t\tchangeAccessor.changeDecorationOptions(this.decorationId, LinkOccurrence._getOptions(useMetaKey, true));\n\t}\n\n\tpublic deactivate(changeAccessor: editorCommon.IModelDecorationsChangeAccessor, useMetaKey: boolean): void {\n\t\tchangeAccessor.changeDecorationOptions(this.decorationId, LinkOccurrence._getOptions(useMetaKey, false));\n\t}\n}\n\n@editorContribution\nclass LinkDetector implements editorCommon.IEditorContribution {\n\n\tprivate static ID: string = 'editor.linkDetector';\n\n\tpublic static get(editor: editorCommon.ICommonCodeEditor): LinkDetector {\n\t\treturn editor.getContribution(LinkDetector.ID);\n\t}\n\n\tstatic RECOMPUTE_TIME = 1000; // ms\n\n\tprivate editor: ICodeEditor;\n\tprivate enabled: boolean;\n\tprivate listenersToRemove: IDisposable[];\n\tprivate timeoutPromise: TPromise;\n\tprivate computePromise: TPromise;\n\tprivate activeLinkDecorationId: string;\n\tprivate openerService: IOpenerService;\n\tprivate messageService: IMessageService;\n\tprivate editorWorkerService: IEditorWorkerService;\n\tprivate currentOccurrences: { [decorationId: string]: LinkOccurrence; };\n\n\tconstructor(\n\t\teditor: ICodeEditor,\n\t\t@IOpenerService openerService: IOpenerService,\n\t\t@IMessageService messageService: IMessageService,\n\t\t@IEditorWorkerService editorWorkerService: IEditorWorkerService\n\t) {\n\t\tthis.editor = editor;\n\t\tthis.openerService = openerService;\n\t\tthis.messageService = messageService;\n\t\tthis.editorWorkerService = editorWorkerService;\n\t\tthis.listenersToRemove = [];\n\n\t\tlet clickLinkGesture = new ClickLinkGesture(editor);\n\t\tthis.listenersToRemove.push(clickLinkGesture);\n\t\tthis.listenersToRemove.push(clickLinkGesture.onMouseMoveOrRelevantKeyDown(([mouseEvent, keyboardEvent]) => {\n\t\t\tthis._onEditorMouseMove(mouseEvent, keyboardEvent);\n\t\t}));\n\t\tthis.listenersToRemove.push(clickLinkGesture.onExecute((e) => {\n\t\t\tthis.onEditorMouseUp(e);\n\t\t}));\n\t\tthis.listenersToRemove.push(clickLinkGesture.onCancel((e) => {\n\t\t\tthis.cleanUpActiveLinkDecoration();\n\t\t}));\n\n\t\tthis.enabled = editor.getConfiguration().contribInfo.links;\n\t\tthis.listenersToRemove.push(editor.onDidChangeConfiguration((e) => {\n\t\t\tlet enabled = editor.getConfiguration().contribInfo.links;\n\t\t\tif (this.enabled === enabled) {\n\t\t\t\t// No change in our configuration option\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.enabled = enabled;\n\n\t\t\t// Remove any links (for the getting disabled case)\n\t\t\tthis.updateDecorations([]);\n\n\t\t\t// Stop any computation (for the getting disabled case)\n\t\t\tthis.stop();\n\n\t\t\t// Start computing (for the getting enabled case)\n\t\t\tthis.beginCompute();\n\t\t}));\n\t\tthis.listenersToRemove.push(editor.onDidChangeModelContent((e) => this.onChange()));\n\t\tthis.listenersToRemove.push(editor.onDidChangeModel((e) => this.onModelChanged()));\n\t\tthis.listenersToRemove.push(editor.onDidChangeModelLanguage((e) => this.onModelModeChanged()));\n\t\tthis.listenersToRemove.push(LinkProviderRegistry.onDidChange((e) => this.onModelModeChanged()));\n\n\t\tthis.timeoutPromise = null;\n\t\tthis.computePromise = null;\n\t\tthis.currentOccurrences = {};\n\t\tthis.activeLinkDecorationId = null;\n\t\tthis.beginCompute();\n\t}\n\n\tpublic getId(): string {\n\t\treturn LinkDetector.ID;\n\t}\n\n\tpublic isComputing(): boolean {\n\t\treturn TPromise.is(this.computePromise);\n\t}\n\n\tprivate onModelChanged(): void {\n\t\tthis.currentOccurrences = {};\n\t\tthis.activeLinkDecorationId = null;\n\t\tthis.stop();\n\t\tthis.beginCompute();\n\t}\n\n\tprivate onModelModeChanged(): void {\n\t\tthis.stop();\n\t\tthis.beginCompute();\n\t}\n\n\tprivate onChange(): void {\n\t\tif (!this.timeoutPromise) {\n\t\t\tthis.timeoutPromise = TPromise.timeout(LinkDetector.RECOMPUTE_TIME);\n\t\t\tthis.timeoutPromise.then(() => {\n\t\t\t\tthis.timeoutPromise = null;\n\t\t\t\tthis.beginCompute();\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate beginCompute(): void {\n\t\tif (!this.editor.getModel() || !this.enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!LinkProviderRegistry.has(this.editor.getModel())) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.computePromise = getLinks(this.editor.getModel()).then(links => {\n\t\t\tthis.updateDecorations(links);\n\t\t\tthis.computePromise = null;\n\t\t});\n\t}\n\n\tprivate updateDecorations(links: Link[]): void {\n\t\tconst useMetaKey = (this.editor.getConfiguration().multiCursorModifier === 'altKey');\n\t\tthis.editor.changeDecorations((changeAccessor: editorCommon.IModelDecorationsChangeAccessor) => {\n\t\t\tvar oldDecorations: string[] = [];\n\t\t\tlet keys = Object.keys(this.currentOccurrences);\n\t\t\tfor (let i = 0, len = keys.length; i < len; i++) {\n\t\t\t\tlet decorationId = keys[i];\n\t\t\t\tlet occurance = this.currentOccurrences[decorationId];\n\t\t\t\toldDecorations.push(occurance.decorationId);\n\t\t\t}\n\n\t\t\tvar newDecorations: editorCommon.IModelDeltaDecoration[] = [];\n\t\t\tif (links) {\n\t\t\t\t// Not sure why this is sometimes null\n\t\t\t\tfor (var i = 0; i < links.length; i++) {\n\t\t\t\t\tnewDecorations.push(LinkOccurrence.decoration(links[i], useMetaKey));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar decorations = changeAccessor.deltaDecorations(oldDecorations, newDecorations);\n\n\t\t\tthis.currentOccurrences = {};\n\t\t\tthis.activeLinkDecorationId = null;\n\t\t\tfor (let i = 0, len = decorations.length; i < len; i++) {\n\t\t\t\tvar occurance = new LinkOccurrence(links[i], decorations[i]);\n\t\t\t\tthis.currentOccurrences[occurance.decorationId] = occurance;\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _onEditorMouseMove(mouseEvent: ClickLinkMouseEvent, withKey?: ClickLinkKeyboardEvent): void {\n\t\tconst useMetaKey = (this.editor.getConfiguration().multiCursorModifier === 'altKey');\n\t\tif (this.isEnabled(mouseEvent, withKey)) {\n\t\t\tthis.cleanUpActiveLinkDecoration(); // always remove previous link decoration as their can only be one\n\t\t\tvar occurrence = this.getLinkOccurrence(mouseEvent.target.position);\n\t\t\tif (occurrence) {\n\t\t\t\tthis.editor.changeDecorations((changeAccessor) => {\n\t\t\t\t\toccurrence.activate(changeAccessor, useMetaKey);\n\t\t\t\t\tthis.activeLinkDecorationId = occurrence.decorationId;\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tthis.cleanUpActiveLinkDecoration();\n\t\t}\n\t}\n\n\tprivate cleanUpActiveLinkDecoration(): void {\n\t\tconst useMetaKey = (this.editor.getConfiguration().multiCursorModifier === 'altKey');\n\t\tif (this.activeLinkDecorationId) {\n\t\t\tvar occurrence = this.currentOccurrences[this.activeLinkDecorationId];\n\t\t\tif (occurrence) {\n\t\t\t\tthis.editor.changeDecorations((changeAccessor) => {\n\t\t\t\t\toccurrence.deactivate(changeAccessor, useMetaKey);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.activeLinkDecorationId = null;\n\t\t}\n\t}\n\n\tprivate onEditorMouseUp(mouseEvent: ClickLinkMouseEvent): void {\n\t\tif (!this.isEnabled(mouseEvent)) {\n\t\t\treturn;\n\t\t}\n\t\tvar occurrence = this.getLinkOccurrence(mouseEvent.target.position);\n\t\tif (!occurrence) {\n\t\t\treturn;\n\t\t}\n\t\tthis.openLinkOccurrence(occurrence, mouseEvent.hasSideBySideModifier);\n\t}\n\n\tpublic openLinkOccurrence(occurrence: LinkOccurrence, openToSide: boolean): void {\n\n\t\tif (!this.openerService) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { link } = occurrence;\n\n\t\tlink.resolve().then(uri => {\n\t\t\t// open the uri\n\t\t\treturn this.openerService.open(uri, { openToSide });\n\n\t\t}, err => {\n\t\t\t// different error cases\n\t\t\tif (err === 'invalid') {\n\t\t\t\tthis.messageService.show(Severity.Warning, nls.localize('invalid.url', 'Sorry, failed to open this link because it is not well-formed: {0}', link.url));\n\t\t\t} else if (err === 'missing') {\n\t\t\t\tthis.messageService.show(Severity.Warning, nls.localize('missing.url', 'Sorry, failed to open this link because its target is missing.'));\n\t\t\t} else {\n\t\t\t\tonUnexpectedError(err);\n\t\t\t}\n\t\t}).done(null, onUnexpectedError);\n\t}\n\n\tpublic getLinkOccurrence(position: Position): LinkOccurrence {\n\t\tvar decorations = this.editor.getModel().getDecorationsInRange({\n\t\t\tstartLineNumber: position.lineNumber,\n\t\t\tstartColumn: position.column,\n\t\t\tendLineNumber: position.lineNumber,\n\t\t\tendColumn: position.column\n\t\t}, 0, true);\n\n\t\tfor (var i = 0; i < decorations.length; i++) {\n\t\t\tvar decoration = decorations[i];\n\t\t\tvar currentOccurrence = this.currentOccurrences[decoration.id];\n\t\t\tif (currentOccurrence) {\n\t\t\t\treturn currentOccurrence;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate isEnabled(mouseEvent: ClickLinkMouseEvent, withKey?: ClickLinkKeyboardEvent): boolean {\n\t\treturn (\n\t\t\tmouseEvent.target.type === MouseTargetType.CONTENT_TEXT\n\t\t\t&& (mouseEvent.hasTriggerModifier || (withKey && withKey.keyCodeIsTriggerKey))\n\t\t);\n\t}\n\n\tprivate stop(): void {\n\t\tif (this.timeoutPromise) {\n\t\t\tthis.timeoutPromise.cancel();\n\t\t\tthis.timeoutPromise = null;\n\t\t}\n\t\tif (this.computePromise) {\n\t\t\tthis.computePromise.cancel();\n\t\t\tthis.computePromise = null;\n\t\t}\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.listenersToRemove = dispose(this.listenersToRemove);\n\t\tthis.stop();\n\t}\n}\n\n@editorAction\nclass OpenLinkAction extends EditorAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.openLink',\n\t\t\tlabel: nls.localize('label', \"Open Link\"),\n\t\t\talias: 'Open Link',\n\t\t\tprecondition: null\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\t\tlet linkDetector = LinkDetector.get(editor);\n\t\tif (!linkDetector) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet link = linkDetector.getLinkOccurrence(editor.getPosition());\n\t\tif (link) {\n\t\t\tlinkDetector.openLinkOccurrence(link, false);\n\t\t}\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tlet activeLinkForeground = theme.getColor(editorActiveLinkForeground);\n\tif (activeLinkForeground) {\n\t\tcollector.addRule(`.monaco-editor .detected-link-active { color: ${activeLinkForeground} !important; }`);\n\t}\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'use strict';\n\nimport 'vs/css!./parameterHints';\nimport nls = require('vs/nls');\nimport { IDisposable, dispose, Disposable } from 'vs/base/common/lifecycle';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport * as dom from 'vs/base/browser/dom';\nimport aria = require('vs/base/browser/ui/aria/aria');\nimport { SignatureHelp, SignatureInformation, SignatureHelpProviderRegistry } from 'vs/editor/common/modes';\nimport { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser';\nimport { RunOnceScheduler } from 'vs/base/common/async';\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport Event, { Emitter, chain } from 'vs/base/common/event';\nimport { domEvent, stop } from 'vs/base/browser/event';\nimport { ICommonCodeEditor } from 'vs/editor/common/editorCommon';\nimport { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';\nimport { Context, provideSignatureHelp } from '../common/parameterHints';\nimport { DomScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement';\nimport { CharacterSet } from 'vs/editor/common/core/characterClassifier';\nimport { IConfigurationChangedEvent } from 'vs/editor/common/config/editorOptions';\nimport { ICursorSelectionChangedEvent } from 'vs/editor/common/controller/cursorEvents';\nimport { registerThemingParticipant, HIGH_CONTRAST } from 'vs/platform/theme/common/themeService';\nimport { editorHoverBackground, editorHoverBorder } from 'vs/platform/theme/common/colorRegistry';\n\nconst $ = dom.$;\n\nexport interface IHintEvent {\n\thints: SignatureHelp;\n}\n\nexport class ParameterHintsModel extends Disposable {\n\n\tstatic DELAY = 120; // ms\n\n\tprivate _onHint = this._register(new Emitter());\n\tonHint: Event = this._onHint.event;\n\n\tprivate _onCancel = this._register(new Emitter());\n\tonCancel: Event = this._onCancel.event;\n\n\tprivate editor: ICommonCodeEditor;\n\tprivate enabled: boolean;\n\tprivate triggerCharactersListeners: IDisposable[];\n\tprivate active: boolean;\n\tprivate throttledDelayer: RunOnceScheduler;\n\n\tconstructor(editor: ICommonCodeEditor) {\n\t\tsuper();\n\n\t\tthis.editor = editor;\n\t\tthis.enabled = false;\n\t\tthis.triggerCharactersListeners = [];\n\n\t\tthis.throttledDelayer = new RunOnceScheduler(() => this.doTrigger(), ParameterHintsModel.DELAY);\n\n\t\tthis.active = false;\n\n\t\tthis._register(this.editor.onDidChangeConfiguration(() => this.onEditorConfigurationChange()));\n\t\tthis._register(this.editor.onDidChangeModel(e => this.onModelChanged()));\n\t\tthis._register(this.editor.onDidChangeModelLanguage(_ => this.onModelChanged()));\n\t\tthis._register(this.editor.onDidChangeCursorSelection(e => this.onCursorChange(e)));\n\t\tthis._register(SignatureHelpProviderRegistry.onDidChange(this.onModelChanged, this));\n\n\t\tthis.onEditorConfigurationChange();\n\t\tthis.onModelChanged();\n\t}\n\n\tcancel(silent: boolean = false): void {\n\t\tthis.active = false;\n\n\t\tthis.throttledDelayer.cancel();\n\n\t\tif (!silent) {\n\t\t\tthis._onCancel.fire(void 0);\n\t\t}\n\t}\n\n\ttrigger(delay = ParameterHintsModel.DELAY): void {\n\t\tif (!SignatureHelpProviderRegistry.has(this.editor.getModel())) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.cancel(true);\n\t\treturn this.throttledDelayer.schedule(delay);\n\t}\n\n\tprivate doTrigger(): void {\n\t\tprovideSignatureHelp(this.editor.getModel(), this.editor.getPosition())\n\t\t\t.then(null, onUnexpectedError)\n\t\t\t.then(result => {\n\t\t\t\tif (!result || !result.signatures || result.signatures.length === 0) {\n\t\t\t\t\tthis.cancel();\n\t\t\t\t\tthis._onCancel.fire(void 0);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tthis.active = true;\n\n\t\t\t\tconst event: IHintEvent = { hints: result };\n\t\t\t\tthis._onHint.fire(event);\n\t\t\t\treturn true;\n\t\t\t});\n\t}\n\n\tisTriggered(): boolean {\n\t\treturn this.active || this.throttledDelayer.isScheduled();\n\t}\n\n\tprivate onModelChanged(): void {\n\t\tif (this.active) {\n\t\t\tthis.cancel();\n\t\t}\n\t\tthis.triggerCharactersListeners = dispose(this.triggerCharactersListeners);\n\n\t\tconst model = this.editor.getModel();\n\t\tif (!model) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst triggerChars = new CharacterSet();\n\t\tfor (const support of SignatureHelpProviderRegistry.ordered(model)) {\n\t\t\tif (Array.isArray(support.signatureHelpTriggerCharacters)) {\n\t\t\t\tfor (const ch of support.signatureHelpTriggerCharacters) {\n\t\t\t\t\ttriggerChars.add(ch.charCodeAt(0));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.triggerCharactersListeners.push(this.editor.onDidType((text: string) => {\n\t\t\tif (!this.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (triggerChars.has(text.charCodeAt(text.length - 1))) {\n\t\t\t\tthis.trigger();\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate onCursorChange(e: ICursorSelectionChangedEvent): void {\n\t\tif (e.source === 'mouse') {\n\t\t\tthis.cancel();\n\t\t} else if (this.isTriggered()) {\n\t\t\tthis.trigger();\n\t\t}\n\t}\n\n\tprivate onEditorConfigurationChange(): void {\n\t\tthis.enabled = this.editor.getConfiguration().contribInfo.parameterHints;\n\n\t\tif (!this.enabled) {\n\t\t\tthis.cancel();\n\t\t}\n\t}\n\n\tdispose(): void {\n\t\tthis.cancel(true);\n\t\tthis.triggerCharactersListeners = dispose(this.triggerCharactersListeners);\n\n\t\tsuper.dispose();\n\t}\n}\n\nexport class ParameterHintsWidget implements IContentWidget, IDisposable {\n\n\tprivate static ID = 'editor.widget.parameterHintsWidget';\n\n\tprivate model: ParameterHintsModel;\n\tprivate keyVisible: IContextKey;\n\tprivate keyMultipleSignatures: IContextKey;\n\tprivate element: HTMLElement;\n\tprivate signature: HTMLElement;\n\tprivate docs: HTMLElement;\n\tprivate overloads: HTMLElement;\n\tprivate currentSignature: number;\n\tprivate visible: boolean;\n\tprivate hints: SignatureHelp;\n\tprivate announcedLabel: string;\n\tprivate scrollbar: DomScrollableElement;\n\tprivate disposables: IDisposable[];\n\n\t// Editor.IContentWidget.allowEditorOverflow\n\tallowEditorOverflow = true;\n\n\tconstructor(private editor: ICodeEditor, @IContextKeyService contextKeyService: IContextKeyService) {\n\t\tthis.model = new ParameterHintsModel(editor);\n\t\tthis.keyVisible = Context.Visible.bindTo(contextKeyService);\n\t\tthis.keyMultipleSignatures = Context.MultipleSignatures.bindTo(contextKeyService);\n\t\tthis.visible = false;\n\t\tthis.disposables = [];\n\n\t\tthis.disposables.push(this.model.onHint(e => {\n\t\t\tthis.show();\n\t\t\tthis.hints = e.hints;\n\t\t\tthis.currentSignature = e.hints.activeSignature;\n\t\t\tthis.render();\n\t\t}));\n\n\t\tthis.disposables.push(this.model.onCancel(() => {\n\t\t\tthis.hide();\n\t\t}));\n\n\t\tthis.element = $('.editor-widget.parameter-hints-widget');\n\t\tconst wrapper = dom.append(this.element, $('.wrapper'));\n\n\t\tconst onClick = stop(domEvent(this.element, 'click'));\n\t\tonClick(this.next, this, this.disposables);\n\n\t\tconst buttons = dom.append(wrapper, $('.buttons'));\n\t\tconst previous = dom.append(buttons, $('.button.previous'));\n\t\tconst next = dom.append(buttons, $('.button.next'));\n\n\t\tconst onPreviousClick = stop(domEvent(previous, 'click'));\n\t\tonPreviousClick(this.previous, this, this.disposables);\n\n\t\tconst onNextClick = stop(domEvent(next, 'click'));\n\t\tonNextClick(this.next, this, this.disposables);\n\n\t\tthis.overloads = dom.append(wrapper, $('.overloads'));\n\n\t\tconst body = $('.body');\n\t\tthis.scrollbar = new DomScrollableElement(body, {});\n\t\tthis.disposables.push(this.scrollbar);\n\t\twrapper.appendChild(this.scrollbar.getDomNode());\n\n\t\tthis.signature = dom.append(body, $('.signature'));\n\n\t\tthis.docs = dom.append(body, $('.docs'));\n\n\t\tthis.currentSignature = 0;\n\n\t\tthis.editor.addContentWidget(this);\n\t\tthis.hide();\n\n\t\tthis.disposables.push(this.editor.onDidChangeCursorSelection(e => {\n\t\t\tif (this.visible) {\n\t\t\t\tthis.editor.layoutContentWidget(this);\n\t\t\t}\n\t\t}));\n\n\t\tconst updateFont = () => {\n\t\t\tconst fontInfo = this.editor.getConfiguration().fontInfo;\n\t\t\tthis.element.style.fontSize = `${fontInfo.fontSize}px`;\n\t\t};\n\n\t\tupdateFont();\n\n\t\tchain(this.editor.onDidChangeConfiguration.bind(this.editor))\n\t\t\t.filter(e => e.fontInfo)\n\t\t\t.on(updateFont, null, this.disposables);\n\n\t\tthis.disposables.push(this.editor.onDidLayoutChange(e => this.updateMaxHeight()));\n\t\tthis.updateMaxHeight();\n\t}\n\n\tprivate show(): void {\n\t\tif (!this.model || this.visible) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.keyVisible.set(true);\n\t\tthis.visible = true;\n\t\tTPromise.timeout(100).done(() => dom.addClass(this.element, 'visible'));\n\t\tthis.editor.layoutContentWidget(this);\n\t}\n\n\tprivate hide(): void {\n\t\tif (!this.model || !this.visible) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.keyVisible.reset();\n\t\tthis.visible = false;\n\t\tthis.hints = null;\n\t\tthis.announcedLabel = null;\n\t\tdom.removeClass(this.element, 'visible');\n\t\tthis.editor.layoutContentWidget(this);\n\t}\n\n\tgetPosition(): IContentWidgetPosition {\n\t\tif (this.visible) {\n\t\t\treturn {\n\t\t\t\tposition: this.editor.getPosition(),\n\t\t\t\tpreference: [ContentWidgetPositionPreference.ABOVE, ContentWidgetPositionPreference.BELOW]\n\t\t\t};\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate render(): void {\n\t\tconst multiple = this.hints.signatures.length > 1;\n\t\tdom.toggleClass(this.element, 'multiple', multiple);\n\t\tthis.keyMultipleSignatures.set(multiple);\n\n\t\tthis.signature.innerHTML = '';\n\t\tthis.docs.innerHTML = '';\n\n\t\tconst signature = this.hints.signatures[this.currentSignature];\n\n\t\tif (!signature) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst code = dom.append(this.signature, $('.code'));\n\t\tconst hasParameters = signature.parameters.length > 0;\n\n\t\tconst fontInfo = this.editor.getConfiguration().fontInfo;\n\t\tcode.style.fontSize = `${fontInfo.fontSize}px`;\n\t\tcode.style.fontFamily = fontInfo.fontFamily;\n\n\t\tif (!hasParameters) {\n\t\t\tconst label = dom.append(code, $('span'));\n\t\t\tlabel.textContent = signature.label;\n\n\t\t} else {\n\t\t\tthis.renderParameters(code, signature, this.hints.activeParameter);\n\t\t}\n\n\t\tconst activeParameter = signature.parameters[this.hints.activeParameter];\n\n\t\tif (activeParameter && activeParameter.documentation) {\n\t\t\tconst documentation = $('span.documentation');\n\t\t\tdocumentation.textContent = activeParameter.documentation;\n\t\t\tdom.append(this.docs, $('p', null, documentation));\n\t\t}\n\n\t\tdom.toggleClass(this.signature, 'has-docs', !!signature.documentation);\n\n\t\tif (signature.documentation) {\n\t\t\tdom.append(this.docs, $('p', null, signature.documentation));\n\t\t}\n\n\t\tlet currentOverload = String(this.currentSignature + 1);\n\n\t\tif (this.hints.signatures.length < 10) {\n\t\t\tcurrentOverload += `/${this.hints.signatures.length}`;\n\t\t}\n\n\t\tthis.overloads.textContent = currentOverload;\n\n\t\tif (activeParameter) {\n\t\t\tconst labelToAnnounce = activeParameter.label;\n\t\t\t// Select method gets called on every user type while parameter hints are visible.\n\t\t\t// We do not want to spam the user with same announcements, so we only announce if the current parameter changed.\n\n\t\t\tif (this.announcedLabel !== labelToAnnounce) {\n\t\t\t\taria.alert(nls.localize('hint', \"{0}, hint\", labelToAnnounce));\n\t\t\t\tthis.announcedLabel = labelToAnnounce;\n\t\t\t}\n\t\t}\n\n\t\tthis.editor.layoutContentWidget(this);\n\t\tthis.scrollbar.scanDomNode();\n\t}\n\n\tprivate renderParameters(parent: HTMLElement, signature: SignatureInformation, currentParameter: number): void {\n\t\tlet end = signature.label.length;\n\t\tlet idx = 0;\n\t\tlet element: HTMLSpanElement;\n\n\t\tfor (let i = signature.parameters.length - 1; i >= 0; i--) {\n\t\t\tconst parameter = signature.parameters[i];\n\t\t\tidx = signature.label.lastIndexOf(parameter.label, end - 1);\n\n\t\t\tlet signatureLabelOffset = 0;\n\t\t\tlet signatureLabelEnd = 0;\n\n\t\t\tif (idx >= 0) {\n\t\t\t\tsignatureLabelOffset = idx;\n\t\t\t\tsignatureLabelEnd = idx + parameter.label.length;\n\t\t\t}\n\n\t\t\t// non parameter part\n\t\t\telement = document.createElement('span');\n\t\t\telement.textContent = signature.label.substring(signatureLabelEnd, end);\n\t\t\tdom.prepend(parent, element);\n\n\t\t\t// parameter part\n\t\t\telement = document.createElement('span');\n\t\t\telement.className = `parameter ${i === currentParameter ? 'active' : ''}`;\n\t\t\telement.textContent = signature.label.substring(signatureLabelOffset, signatureLabelEnd);\n\t\t\tdom.prepend(parent, element);\n\n\t\t\tend = signatureLabelOffset;\n\t\t}\n\t\t// non parameter part\n\t\telement = document.createElement('span');\n\t\telement.textContent = signature.label.substring(0, end);\n\t\tdom.prepend(parent, element);\n\t}\n\n\t// private select(position: number): void {\n\t// \tconst signature = this.signatureViews[position];\n\n\t// \tif (!signature) {\n\t// \t\treturn;\n\t// \t}\n\n\t// \tthis.signatures.style.height = `${ signature.height }px`;\n\t// \tthis.signatures.scrollTop = signature.top;\n\n\t// \tlet overloads = '' + (position + 1);\n\n\t// \tif (this.signatureViews.length < 10) {\n\t// \t\toverloads += '/' + this.signatureViews.length;\n\t// \t}\n\n\t// \tthis.overloads.textContent = overloads;\n\n\t// \tif (this.hints && this.hints.signatures[position].parameters[this.hints.activeParameter]) {\n\t// \t\tconst labelToAnnounce = this.hints.signatures[position].parameters[this.hints.activeParameter].label;\n\t// \t\t// Select method gets called on every user type while parameter hints are visible.\n\t// \t\t// We do not want to spam the user with same announcements, so we only announce if the current parameter changed.\n\t// \t\tif (this.announcedLabel !== labelToAnnounce) {\n\t// \t\t\taria.alert(nls.localize('hint', \"{0}, hint\", labelToAnnounce));\n\t// \t\t\tthis.announcedLabel = labelToAnnounce;\n\t// \t\t}\n\t// \t}\n\n\t// \tthis.editor.layoutContentWidget(this);\n\t// }\n\n\tnext(): boolean {\n\t\tconst length = this.hints.signatures.length;\n\n\t\tif (length < 2) {\n\t\t\tthis.cancel();\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.currentSignature = (this.currentSignature + 1) % length;\n\t\tthis.render();\n\t\treturn true;\n\t}\n\n\tprevious(): boolean {\n\t\tconst length = this.hints.signatures.length;\n\n\t\tif (length < 2) {\n\t\t\tthis.cancel();\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.currentSignature = (this.currentSignature - 1 + length) % length;\n\t\tthis.render();\n\t\treturn true;\n\t}\n\n\tcancel(): void {\n\t\tthis.model.cancel();\n\t}\n\n\tgetDomNode(): HTMLElement {\n\t\treturn this.element;\n\t}\n\n\tgetId(): string {\n\t\treturn ParameterHintsWidget.ID;\n\t}\n\n\ttrigger(): void {\n\t\tthis.model.trigger(0);\n\t}\n\n\tprivate updateMaxHeight(): void {\n\t\tconst height = Math.max(this.editor.getLayoutInfo().height / 4, 250);\n\t\tthis.element.style.maxHeight = `${height}px`;\n\t}\n\n\tdispose(): void {\n\t\tthis.disposables = dispose(this.disposables);\n\t\tthis.model = null;\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tlet border = theme.getColor(editorHoverBorder);\n\tif (border) {\n\t\tlet borderWidth = theme.type === HIGH_CONTRAST ? 2 : 1;\n\t\tcollector.addRule(`.monaco-editor .parameter-hints-widget { border: ${borderWidth}px solid ${border}; }`);\n\t\tcollector.addRule(`.monaco-editor .parameter-hints-widget.multiple .body { border-left: 1px solid ${border.transparent(0.5)}; }`);\n\t\tcollector.addRule(`.monaco-editor .parameter-hints-widget .signature.has-docs { border-bottom: 1px solid ${border.transparent(0.5)}; }`);\n\n\t}\n\tlet background = theme.getColor(editorHoverBackground);\n\tif (background) {\n\t\tcollector.addRule(`.monaco-editor .parameter-hints-widget { background-color: ${background}; }`);\n\t}\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'use strict';\n\nimport * as nls from 'vs/nls';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { dispose } from 'vs/base/common/lifecycle';\nimport { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';\nimport { ICommonCodeEditor, IEditorContribution } from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';\nimport { editorAction, ServicesAccessor, EditorAction, EditorCommand, CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';\nimport { ICodeEditor } from 'vs/editor/browser/editorBrowser';\nimport { editorContribution } from 'vs/editor/browser/editorBrowserExtensions';\nimport { ParameterHintsWidget } from './parameterHintsWidget';\nimport { Context } from '../common/parameterHints';\n\n@editorContribution\nclass ParameterHintsController implements IEditorContribution {\n\n\tprivate static ID = 'editor.controller.parameterHints';\n\n\tpublic static get(editor: ICommonCodeEditor): ParameterHintsController {\n\t\treturn editor.getContribution(ParameterHintsController.ID);\n\t}\n\n\tprivate editor: ICodeEditor;\n\tprivate widget: ParameterHintsWidget;\n\n\tconstructor(editor: ICodeEditor, @IInstantiationService instantiationService: IInstantiationService) {\n\t\tthis.editor = editor;\n\t\tthis.widget = instantiationService.createInstance(ParameterHintsWidget, this.editor);\n\t}\n\n\tgetId(): string {\n\t\treturn ParameterHintsController.ID;\n\t}\n\n\tcancel(): void {\n\t\tthis.widget.cancel();\n\t}\n\n\tprevious(): void {\n\t\tthis.widget.previous();\n\t}\n\n\tnext(): void {\n\t\tthis.widget.next();\n\t}\n\n\ttrigger(): void {\n\t\tthis.widget.trigger();\n\t}\n\n\tdispose(): void {\n\t\tthis.widget = dispose(this.widget);\n\t}\n}\n\n@editorAction\nexport class TriggerParameterHintsAction extends EditorAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.triggerParameterHints',\n\t\t\tlabel: nls.localize('parameterHints.trigger.label', \"Trigger Parameter Hints\"),\n\t\t\talias: 'Trigger Parameter Hints',\n\t\t\tprecondition: EditorContextKeys.hasSignatureHelpProvider,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.Space\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\t\tlet controller = ParameterHintsController.get(editor);\n\t\tif (controller) {\n\t\t\tcontroller.trigger();\n\t\t}\n\t}\n}\n\nconst weight = CommonEditorRegistry.commandWeight(75);\n\nconst ParameterHintsCommand = EditorCommand.bindToContribution(ParameterHintsController.get);\n\nCommonEditorRegistry.registerEditorCommand(new ParameterHintsCommand({\n\tid: 'closeParameterHints',\n\tprecondition: Context.Visible,\n\thandler: x => x.cancel(),\n\tkbOpts: {\n\t\tweight: weight,\n\t\tkbExpr: EditorContextKeys.textFocus,\n\t\tprimary: KeyCode.Escape,\n\t\tsecondary: [KeyMod.Shift | KeyCode.Escape]\n\t}\n}));\nCommonEditorRegistry.registerEditorCommand(new ParameterHintsCommand({\n\tid: 'showPrevParameterHint',\n\tprecondition: ContextKeyExpr.and(Context.Visible, Context.MultipleSignatures),\n\thandler: x => x.previous(),\n\tkbOpts: {\n\t\tweight: weight,\n\t\tkbExpr: EditorContextKeys.textFocus,\n\t\tprimary: KeyCode.UpArrow,\n\t\tsecondary: [KeyMod.Alt | KeyCode.UpArrow],\n\t\tmac: { primary: KeyCode.UpArrow, secondary: [KeyMod.Alt | KeyCode.UpArrow, KeyMod.WinCtrl | KeyCode.KEY_P] }\n\t}\n}));\nCommonEditorRegistry.registerEditorCommand(new ParameterHintsCommand({\n\tid: 'showNextParameterHint',\n\tprecondition: ContextKeyExpr.and(Context.Visible, Context.MultipleSignatures),\n\thandler: x => x.next(),\n\tkbOpts: {\n\t\tweight: weight,\n\t\tkbExpr: EditorContextKeys.textFocus,\n\t\tprimary: KeyCode.DownArrow,\n\t\tsecondary: [KeyMod.Alt | KeyCode.DownArrow],\n\t\tmac: { primary: KeyCode.DownArrow, secondary: [KeyMod.Alt | KeyCode.DownArrow, KeyMod.WinCtrl | KeyCode.KEY_N] }\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/css!./renameInputField';\nimport { localize } from 'vs/nls';\nimport { canceled } from 'vs/base/common/errors';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { Range } from 'vs/editor/common/core/range';\nimport { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser';\nimport { IThemeService, ITheme } from 'vs/platform/theme/common/themeService';\nimport { inputBackground, inputBorder, inputForeground, widgetShadow } from 'vs/platform/theme/common/colorRegistry';\nimport { Position } from 'vs/editor/common/core/position';\n\nexport default class RenameInputField implements IContentWidget, IDisposable {\n\n\tprivate _editor: ICodeEditor;\n\tprivate _position: Position;\n\tprivate _domNode: HTMLElement;\n\tprivate _inputField: HTMLInputElement;\n\tprivate _visible: boolean;\n\tprivate _disposables: IDisposable[] = [];\n\n\t// Editor.IContentWidget.allowEditorOverflow\n\tpublic allowEditorOverflow: boolean = true;\n\n\tconstructor(editor: ICodeEditor, @IThemeService private themeService: IThemeService) {\n\t\tthis._editor = editor;\n\t\tthis._editor.addContentWidget(this);\n\n\t\tthis._disposables.push(editor.onDidChangeConfiguration(e => {\n\t\t\tif (e.fontInfo) {\n\t\t\t\tthis.updateFont();\n\t\t\t}\n\t\t}));\n\n\t\tthis._disposables.push(themeService.onThemeChange(theme => this.onThemeChange(theme)));\n\t}\n\n\tprivate onThemeChange(theme: ITheme): void {\n\t\tthis.updateStyles(theme);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._disposables = dispose(this._disposables);\n\t\tthis._editor.removeContentWidget(this);\n\t}\n\n\tpublic getId(): string {\n\t\treturn '__renameInputWidget';\n\t}\n\n\tpublic getDomNode(): HTMLElement {\n\t\tif (!this._domNode) {\n\t\t\tthis._inputField = document.createElement('input');\n\t\t\tthis._inputField.className = 'rename-input';\n\t\t\tthis._inputField.type = 'text';\n\t\t\tthis._inputField.setAttribute('aria-label', localize('renameAriaLabel', \"Rename input. Type new name and press Enter to commit.\"));\n\t\t\tthis._domNode = document.createElement('div');\n\t\t\tthis._domNode.style.height = `${this._editor.getConfiguration().lineHeight}px`;\n\t\t\tthis._domNode.className = 'monaco-editor rename-box';\n\t\t\tthis._domNode.appendChild(this._inputField);\n\n\t\t\tthis.updateFont();\n\t\t\tthis.updateStyles(this.themeService.getTheme());\n\t\t}\n\t\treturn this._domNode;\n\t}\n\n\tprivate updateStyles(theme: ITheme): void {\n\t\tif (!this._inputField) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst background = theme.getColor(inputBackground);\n\t\tconst foreground = theme.getColor(inputForeground);\n\t\tconst widgetShadowColor = theme.getColor(widgetShadow);\n\t\tconst border = theme.getColor(inputBorder);\n\n\t\tthis._inputField.style.backgroundColor = background ? background.toString() : null;\n\t\tthis._inputField.style.color = foreground ? foreground.toString() : null;\n\n\t\tthis._inputField.style.borderWidth = border ? '1px' : '0px';\n\t\tthis._inputField.style.borderStyle = border ? 'solid' : 'none';\n\t\tthis._inputField.style.borderColor = border ? border.toString() : 'none';\n\n\t\tthis._domNode.style.boxShadow = widgetShadowColor ? ` 0 2px 8px ${widgetShadowColor}` : null;\n\t}\n\n\tprivate updateFont(): void {\n\t\tif (!this._inputField) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst fontInfo = this._editor.getConfiguration().fontInfo;\n\t\tthis._inputField.style.fontFamily = fontInfo.fontFamily;\n\t\tthis._inputField.style.fontWeight = fontInfo.fontWeight;\n\t\tthis._inputField.style.fontSize = `${fontInfo.fontSize}px`;\n\t}\n\n\tpublic getPosition(): IContentWidgetPosition {\n\t\treturn this._visible\n\t\t\t? { position: this._position, preference: [ContentWidgetPositionPreference.BELOW, ContentWidgetPositionPreference.ABOVE] }\n\t\t\t: null;\n\t}\n\n\tprivate _currentAcceptInput: () => void = null;\n\tprivate _currentCancelInput: () => void = null;\n\n\tpublic acceptInput(): void {\n\t\tif (this._currentAcceptInput) {\n\t\t\tthis._currentAcceptInput();\n\t\t}\n\t}\n\n\tpublic cancelInput(): void {\n\t\tif (this._currentCancelInput) {\n\t\t\tthis._currentCancelInput();\n\t\t}\n\t}\n\n\tpublic getInput(where: Range, value: string, selectionStart: number, selectionEnd: number): TPromise {\n\n\t\tthis._position = new Position(where.startLineNumber, where.startColumn);\n\t\tthis._inputField.value = value;\n\t\tthis._inputField.setAttribute('selectionStart', selectionStart.toString());\n\t\tthis._inputField.setAttribute('selectionEnd', selectionEnd.toString());\n\t\tthis._inputField.size = Math.max((where.endColumn - where.startColumn) * 1.1, 20);\n\n\t\tlet disposeOnDone: IDisposable[] = [],\n\t\t\talways: Function;\n\n\t\talways = () => {\n\t\t\tdispose(disposeOnDone);\n\t\t\tthis._hide();\n\t\t};\n\n\t\treturn new TPromise((c, e) => {\n\n\t\t\tthis._currentCancelInput = () => {\n\t\t\t\tthis._currentAcceptInput = null;\n\t\t\t\tthis._currentCancelInput = null;\n\t\t\t\te(canceled());\n\t\t\t\treturn true;\n\t\t\t};\n\n\t\t\tthis._currentAcceptInput = () => {\n\t\t\t\tif (this._inputField.value.trim().length === 0 || this._inputField.value === value) {\n\t\t\t\t\t// empty or whitespace only or not changed\n\t\t\t\t\tthis.cancelInput();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis._currentAcceptInput = null;\n\t\t\t\tthis._currentCancelInput = null;\n\t\t\t\tc(this._inputField.value);\n\t\t\t};\n\n\t\t\tlet onCursorChanged = () => {\n\t\t\t\tif (!Range.containsPosition(where, this._editor.getPosition())) {\n\t\t\t\t\tthis.cancelInput();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdisposeOnDone.push(this._editor.onDidChangeCursorSelection(onCursorChanged));\n\t\t\tdisposeOnDone.push(this._editor.onDidBlurEditor(() => this.cancelInput()));\n\n\t\t\tthis._show();\n\n\t\t}, this._currentCancelInput).then(newValue => {\n\t\t\talways();\n\t\t\treturn newValue;\n\t\t}, err => {\n\t\t\talways();\n\t\t\treturn TPromise.wrapError(err);\n\t\t});\n\t}\n\n\tprivate _show(): void {\n\t\tthis._editor.revealLineInCenterIfOutsideViewport(this._position.lineNumber);\n\t\tthis._visible = true;\n\t\tthis._editor.layoutContentWidget(this);\n\n\t\tsetTimeout(() => {\n\t\t\tthis._inputField.focus();\n\t\t\tthis._inputField.setSelectionRange(\n\t\t\t\tparseInt(this._inputField.getAttribute('selectionStart')),\n\t\t\t\tparseInt(this._inputField.getAttribute('selectionEnd')));\n\t\t}, 25);\n\t}\n\n\tprivate _hide(): void {\n\t\tthis._visible = false;\n\t\tthis._editor.layoutContentWidget(this);\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport { isPromiseCanceledError, onUnexpectedExternalError, illegalArgument } from 'vs/base/common/errors';\nimport { KeyMod, KeyCode } from 'vs/base/common/keyCodes';\nimport Severity from 'vs/base/common/severity';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IFileService } from 'vs/platform/files/common/files';\nimport { RawContextKey, IContextKey, IContextKeyService, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';\nimport { IMessageService } from 'vs/platform/message/common/message';\nimport { IProgressService } from 'vs/platform/progress/common/progress';\nimport { editorAction, ServicesAccessor, EditorAction, EditorCommand, CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';\nimport { editorContribution } from 'vs/editor/browser/editorBrowserExtensions';\nimport { ICommonCodeEditor, IEditorContribution, IReadOnlyModel } from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { BulkEdit, createBulkEdit } from 'vs/editor/common/services/bulkEdit';\nimport { ICodeEditor } from 'vs/editor/browser/editorBrowser';\nimport RenameInputField from './renameInputField';\nimport { ITextModelService } from 'vs/editor/common/services/resolverService';\nimport { optional } from 'vs/platform/instantiation/common/instantiation';\nimport { IThemeService } from 'vs/platform/theme/common/themeService';\nimport { sequence, asWinJsPromise } from 'vs/base/common/async';\nimport { WorkspaceEdit, RenameProviderRegistry } from 'vs/editor/common/modes';\nimport { Position } from 'vs/editor/common/core/position';\nimport { alert } from 'vs/base/browser/ui/aria/aria';\nimport { Range } from 'vs/editor/common/core/range';\n\n\nexport function rename(model: IReadOnlyModel, position: Position, newName: string): TPromise {\n\n\tconst supports = RenameProviderRegistry.ordered(model);\n\tconst rejects: string[] = [];\n\tlet hasResult = false;\n\n\tconst factory = supports.map(support => {\n\t\treturn (): TPromise => {\n\t\t\tif (!hasResult) {\n\t\t\t\treturn asWinJsPromise((token) => {\n\t\t\t\t\treturn support.provideRenameEdits(model, position, newName, token);\n\t\t\t\t}).then(result => {\n\t\t\t\t\tif (!result) {\n\t\t\t\t\t\t// ignore\n\t\t\t\t\t} else if (!result.rejectReason) {\n\t\t\t\t\t\thasResult = true;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t} else {\n\t\t\t\t\t\trejects.push(result.rejectReason);\n\t\t\t\t\t}\n\t\t\t\t\treturn undefined;\n\t\t\t\t}, err => {\n\t\t\t\t\tonUnexpectedExternalError(err);\n\t\t\t\t\treturn TPromise.wrapError(new Error('provider failed'));\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn undefined;\n\t\t};\n\t});\n\n\treturn sequence(factory).then((values): WorkspaceEdit => {\n\t\tlet result = values[0];\n\t\tif (rejects.length > 0) {\n\t\t\treturn {\n\t\t\t\tedits: undefined,\n\t\t\t\trejectReason: rejects.join('\\n')\n\t\t\t};\n\t\t} else if (!result) {\n\t\t\treturn {\n\t\t\t\tedits: undefined,\n\t\t\t\trejectReason: nls.localize('no result', \"No result.\")\n\t\t\t};\n\t\t} else {\n\t\t\treturn result;\n\t\t}\n\t});\n}\n\n\n// --- register actions and commands\n\nconst CONTEXT_RENAME_INPUT_VISIBLE = new RawContextKey('renameInputVisible', false);\n\n@editorContribution\nclass RenameController implements IEditorContribution {\n\n\tprivate static ID = 'editor.contrib.renameController';\n\n\tpublic static get(editor: ICommonCodeEditor): RenameController {\n\t\treturn editor.getContribution(RenameController.ID);\n\t}\n\n\tprivate _renameInputField: RenameInputField;\n\tprivate _renameInputVisible: IContextKey;\n\n\tconstructor(\n\t\tprivate editor: ICodeEditor,\n\t\t@IMessageService private _messageService: IMessageService,\n\t\t@ITextModelService private _textModelResolverService: ITextModelService,\n\t\t@IProgressService private _progressService: IProgressService,\n\t\t@IContextKeyService contextKeyService: IContextKeyService,\n\t\t@IThemeService themeService: IThemeService,\n\t\t@optional(IFileService) private _fileService: IFileService\n\t) {\n\t\tthis._renameInputField = new RenameInputField(editor, themeService);\n\t\tthis._renameInputVisible = CONTEXT_RENAME_INPUT_VISIBLE.bindTo(contextKeyService);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._renameInputField.dispose();\n\t}\n\n\tpublic getId(): string {\n\t\treturn RenameController.ID;\n\t}\n\n\tpublic run(): TPromise {\n\n\t\tconst selection = this.editor.getSelection(),\n\t\t\tword = this.editor.getModel().getWordAtPosition(selection.getStartPosition());\n\n\t\tif (!word) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tlet lineNumber = selection.startLineNumber,\n\t\t\tselectionStart = 0,\n\t\t\tselectionEnd = word.word.length,\n\t\t\twordRange: Range;\n\n\t\twordRange = new Range(\n\t\t\tlineNumber,\n\t\t\tword.startColumn,\n\t\t\tlineNumber,\n\t\t\tword.endColumn\n\t\t);\n\n\t\tif (!selection.isEmpty() && selection.startLineNumber === selection.endLineNumber) {\n\t\t\tselectionStart = Math.max(0, selection.startColumn - word.startColumn);\n\t\t\tselectionEnd = Math.min(word.endColumn, selection.endColumn) - word.startColumn;\n\t\t}\n\n\t\tthis._renameInputVisible.set(true);\n\t\treturn this._renameInputField.getInput(wordRange, word.word, selectionStart, selectionEnd).then(newName => {\n\t\t\tthis._renameInputVisible.reset();\n\t\t\tthis.editor.focus();\n\n\t\t\tconst renameOperation = this._prepareRename(newName).then(edit => {\n\n\t\t\t\treturn edit.finish().then(selection => {\n\t\t\t\t\tif (selection) {\n\t\t\t\t\t\tthis.editor.setSelection(selection);\n\t\t\t\t\t}\n\t\t\t\t\t// alert\n\t\t\t\t\talert(nls.localize('aria', \"Successfully renamed '{0}' to '{1}'. Summary: {2}\", word.word, newName, edit.ariaMessage()));\n\t\t\t\t});\n\n\t\t\t}, err => {\n\t\t\t\tif (typeof err === 'string') {\n\t\t\t\t\tthis._messageService.show(Severity.Info, err);\n\t\t\t\t\treturn undefined;\n\t\t\t\t} else {\n\t\t\t\t\tthis._messageService.show(Severity.Error, nls.localize('rename.failed', \"Sorry, rename failed to execute.\"));\n\t\t\t\t\treturn TPromise.wrapError(err);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._progressService.showWhile(renameOperation, 250);\n\t\t\treturn renameOperation;\n\n\t\t}, err => {\n\t\t\tthis._renameInputVisible.reset();\n\t\t\tthis.editor.focus();\n\n\t\t\tif (!isPromiseCanceledError(err)) {\n\t\t\t\treturn TPromise.wrapError(err);\n\t\t\t}\n\t\t\treturn undefined;\n\t\t});\n\t}\n\n\tpublic acceptRenameInput(): void {\n\t\tthis._renameInputField.acceptInput();\n\t}\n\n\tpublic cancelRenameInput(): void {\n\t\tthis._renameInputField.cancelInput();\n\t}\n\n\tprivate _prepareRename(newName: string): TPromise {\n\n\t\t// start recording of file changes so that we can figure out if a file that\n\t\t// is to be renamed conflicts with another (concurrent) modification\n\t\tlet edit = createBulkEdit(this._textModelResolverService, this.editor, this._fileService);\n\n\t\treturn rename(this.editor.getModel(), this.editor.getPosition(), newName).then(result => {\n\t\t\tif (result.rejectReason) {\n\t\t\t\treturn TPromise.wrapError(new Error(result.rejectReason));\n\t\t\t}\n\t\t\tedit.add(result.edits);\n\t\t\treturn edit;\n\t\t});\n\t}\n}\n\n// ---- action implementation\n\n@editorAction\nexport class RenameAction extends EditorAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.rename',\n\t\t\tlabel: nls.localize('rename.label', \"Rename Symbol\"),\n\t\t\talias: 'Rename Symbol',\n\t\t\tprecondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasRenameProvider),\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyCode.F2\n\t\t\t},\n\t\t\tmenuOpts: {\n\t\t\t\tgroup: '1_modification',\n\t\t\t\torder: 1.1\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): TPromise {\n\t\tlet controller = RenameController.get(editor);\n\t\tif (controller) {\n\t\t\treturn controller.run();\n\t\t}\n\t\treturn undefined;\n\t}\n}\n\nconst RenameCommand = EditorCommand.bindToContribution(RenameController.get);\n\nCommonEditorRegistry.registerEditorCommand(new RenameCommand({\n\tid: 'acceptRenameInput',\n\tprecondition: CONTEXT_RENAME_INPUT_VISIBLE,\n\thandler: x => x.acceptRenameInput(),\n\tkbOpts: {\n\t\tweight: CommonEditorRegistry.commandWeight(99),\n\t\tkbExpr: EditorContextKeys.focus,\n\t\tprimary: KeyCode.Enter\n\t}\n}));\n\nCommonEditorRegistry.registerEditorCommand(new RenameCommand({\n\tid: 'cancelRenameInput',\n\tprecondition: CONTEXT_RENAME_INPUT_VISIBLE,\n\thandler: x => x.cancelRenameInput(),\n\tkbOpts: {\n\t\tweight: CommonEditorRegistry.commandWeight(99),\n\t\tkbExpr: EditorContextKeys.focus,\n\t\tprimary: KeyCode.Escape,\n\t\tsecondary: [KeyMod.Shift | KeyCode.Escape]\n\t}\n}));\n\n// ---- api bridge command\n\nCommonEditorRegistry.registerDefaultLanguageCommand('_executeDocumentRenameProvider', function (model, position, args) {\n\tlet { newName } = args;\n\tif (typeof newName !== 'string') {\n\t\tthrow illegalArgument('newName');\n\t}\n\treturn rename(model, position, newName);\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'use strict';\n\nimport 'vs/css!./media/suggest';\nimport * as nls from 'vs/nls';\nimport { createMatches } from 'vs/base/common/filters';\nimport * as strings from 'vs/base/common/strings';\nimport Event, { Emitter, chain } from 'vs/base/common/event';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { isPromiseCanceledError, onUnexpectedError } from 'vs/base/common/errors';\nimport { IDisposable, dispose, toDisposable } from 'vs/base/common/lifecycle';\nimport { addClass, append, $, hide, removeClass, show, toggleClass, getDomNodePagePosition, hasClass } from 'vs/base/browser/dom';\nimport { HighlightedLabel } from 'vs/base/browser/ui/highlightedlabel/highlightedLabel';\nimport { IDelegate, IListEvent, IRenderer } from 'vs/base/browser/ui/list/list';\nimport { List } from 'vs/base/browser/ui/list/listWidget';\nimport { DomScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement';\nimport { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';\nimport { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';\nimport { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';\nimport { IConfigurationChangedEvent } from 'vs/editor/common/config/editorOptions';\nimport { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser';\nimport { Context as SuggestContext } from './suggest';\nimport { ICompletionItem, CompletionModel } from './completionModel';\nimport { alert } from 'vs/base/browser/ui/aria/aria';\nimport { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';\nimport { attachListStyler } from 'vs/platform/theme/common/styler';\nimport { IThemeService, ITheme, registerThemingParticipant } from 'vs/platform/theme/common/themeService';\nimport { registerColor, editorWidgetBackground, listFocusBackground, activeContrastBorder, listHighlightForeground, editorForeground, editorWidgetBorder, focusBorder } from 'vs/platform/theme/common/colorRegistry';\nimport { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';\n\nconst sticky = false; // for development purposes\nconst expandSuggestionDocsByDefault = false;\nconst maxSuggestionsToShow = 12;\n\ninterface ISuggestionTemplateData {\n\troot: HTMLElement;\n\ticon: HTMLElement;\n\tcolorspan: HTMLElement;\n\thighlightedLabel: HighlightedLabel;\n\ttypeLabel: HTMLElement;\n\treadMore: HTMLElement;\n\tdisposables: IDisposable[];\n}\n\n/**\n * Suggest widget colors\n */\nexport const editorSuggestWidgetBackground = registerColor('editorSuggestWidget.background', { dark: editorWidgetBackground, light: editorWidgetBackground, hc: editorWidgetBackground }, nls.localize('editorSuggestWidgetBackground', 'Background color of the suggest widget.'));\nexport const editorSuggestWidgetBorder = registerColor('editorSuggestWidget.border', { dark: editorWidgetBorder, light: editorWidgetBorder, hc: editorWidgetBorder }, nls.localize('editorSuggestWidgetBorder', 'Border color of the suggest widget.'));\nexport const editorSuggestWidgetForeground = registerColor('editorSuggestWidget.foreground', { dark: editorForeground, light: editorForeground, hc: editorForeground }, nls.localize('editorSuggestWidgetForeground', 'Foreground color of the suggest widget.'));\nexport const editorSuggestWidgetSelectedBackground = registerColor('editorSuggestWidget.selectedBackground', { dark: listFocusBackground, light: listFocusBackground, hc: listFocusBackground }, nls.localize('editorSuggestWidgetSelectedBackground', 'Background color of the selected entry in the suggest widget.'));\nexport const editorSuggestWidgetHighlightForeground = registerColor('editorSuggestWidget.highlightForeground', { dark: listHighlightForeground, light: listHighlightForeground, hc: listHighlightForeground }, nls.localize('editorSuggestWidgetHighlightForeground', 'Color of the match highlights in the suggest widget.'));\n\n\nconst colorRegExp = /^(#([\\da-f]{3}){1,2}|(rgb|hsl)a\\(\\s*(\\d{1,3}%?\\s*,\\s*){3}(1|0?\\.\\d+)\\)|(rgb|hsl)\\(\\s*\\d{1,3}%?(\\s*,\\s*\\d{1,3}%?){2}\\s*\\))$/i;\nfunction matchesColor(text: string) {\n\treturn text && text.match(colorRegExp) ? text : null;\n}\n\nfunction canExpandCompletionItem(item: ICompletionItem) {\n\tif (!item) {\n\t\treturn false;\n\t}\n\tconst suggestion = item.suggestion;\n\tif (suggestion.documentation) {\n\t\treturn true;\n\t}\n\treturn (suggestion.detail && suggestion.detail !== suggestion.label);\n}\n\nclass Renderer implements IRenderer {\n\n\tconstructor(\n\t\tprivate widget: SuggestWidget,\n\t\tprivate editor: ICodeEditor,\n\t\tprivate triggerKeybindingLabel: string\n\t) {\n\n\t}\n\n\tget templateId(): string {\n\t\treturn 'suggestion';\n\t}\n\n\trenderTemplate(container: HTMLElement): ISuggestionTemplateData {\n\t\tconst data = Object.create(null);\n\t\tdata.disposables = [];\n\t\tdata.root = container;\n\n\t\tdata.icon = append(container, $('.icon'));\n\t\tdata.colorspan = append(data.icon, $('span.colorspan'));\n\n\t\tconst text = append(container, $('.contents'));\n\t\tconst main = append(text, $('.main'));\n\t\tdata.highlightedLabel = new HighlightedLabel(main);\n\t\tdata.disposables.push(data.highlightedLabel);\n\t\tdata.typeLabel = append(main, $('span.type-label'));\n\n\t\tdata.readMore = append(main, $('span.readMore'));\n\t\tdata.readMore.title = nls.localize('readMore', \"Read More...{0}\", this.triggerKeybindingLabel);\n\n\t\tconst configureFont = () => {\n\t\t\tconst configuration = this.editor.getConfiguration();\n\t\t\tconst fontFamily = configuration.fontInfo.fontFamily;\n\t\t\tconst fontSize = configuration.contribInfo.suggestFontSize || configuration.fontInfo.fontSize;\n\t\t\tconst lineHeight = configuration.contribInfo.suggestLineHeight || configuration.fontInfo.lineHeight;\n\t\t\tconst fontSizePx = `${fontSize}px`;\n\t\t\tconst lineHeightPx = `${lineHeight}px`;\n\n\t\t\tdata.root.style.fontSize = fontSizePx;\n\t\t\tmain.style.fontFamily = fontFamily;\n\t\t\tmain.style.lineHeight = lineHeightPx;\n\t\t\tdata.icon.style.height = lineHeightPx;\n\t\t\tdata.icon.style.width = lineHeightPx;\n\t\t\tdata.readMore.style.height = lineHeightPx;\n\t\t\tdata.readMore.style.width = lineHeightPx;\n\t\t};\n\n\t\tconfigureFont();\n\n\t\tchain(this.editor.onDidChangeConfiguration.bind(this.editor))\n\t\t\t.filter(e => e.fontInfo || e.contribInfo)\n\t\t\t.on(configureFont, null, data.disposables);\n\n\t\treturn data;\n\t}\n\n\trenderElement(element: ICompletionItem, index: number, templateData: ISuggestionTemplateData): void {\n\t\tconst data = templateData;\n\t\tconst suggestion = (element).suggestion;\n\n\t\tif (canExpandCompletionItem(element)) {\n\t\t\tdata.root.setAttribute('aria-label', nls.localize('suggestionWithDetailsAriaLabel', \"{0}, suggestion, has details\", suggestion.label));\n\t\t} else {\n\t\t\tdata.root.setAttribute('aria-label', nls.localize('suggestionAriaLabel', \"{0}, suggestion\", suggestion.label));\n\t\t}\n\n\t\tdata.icon.className = 'icon ' + suggestion.type;\n\t\tdata.colorspan.style.backgroundColor = '';\n\n\t\tif (suggestion.type === 'color') {\n\t\t\tlet color = matchesColor(suggestion.label) || matchesColor(suggestion.documentation);\n\t\t\tif (color) {\n\t\t\t\tdata.icon.className = 'icon customcolor';\n\t\t\t\tdata.colorspan.style.backgroundColor = color;\n\t\t\t}\n\t\t}\n\n\t\tdata.highlightedLabel.set(suggestion.label, createMatches(element.matches));\n\t\tdata.typeLabel.textContent = (suggestion.detail || '').replace(/\\n.*$/m, '');\n\n\t\tif (canExpandCompletionItem(element)) {\n\t\t\tshow(data.readMore);\n\t\t\tdata.readMore.onmousedown = e => {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.preventDefault();\n\t\t\t};\n\t\t\tdata.readMore.onclick = e => {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.widget.toggleDetails();\n\t\t\t};\n\t\t} else {\n\t\t\thide(data.readMore);\n\t\t\tdata.readMore.onmousedown = null;\n\t\t\tdata.readMore.onclick = null;\n\t\t}\n\n\t}\n\n\tdisposeTemplate(templateData: ISuggestionTemplateData): void {\n\t\ttemplateData.highlightedLabel.dispose();\n\t\ttemplateData.disposables = dispose(templateData.disposables);\n\t}\n}\n\nconst enum State {\n\tHidden,\n\tLoading,\n\tEmpty,\n\tOpen,\n\tFrozen,\n\tDetails\n}\n\nclass SuggestionDetails {\n\n\tprivate el: HTMLElement;\n\tprivate close: HTMLElement;\n\tprivate scrollbar: DomScrollableElement;\n\tprivate body: HTMLElement;\n\tprivate header: HTMLElement;\n\tprivate type: HTMLElement;\n\tprivate docs: HTMLElement;\n\tprivate ariaLabel: string;\n\tprivate disposables: IDisposable[];\n\tprivate borderWidth: number = 1;\n\n\tconstructor(\n\t\tcontainer: HTMLElement,\n\t\tprivate widget: SuggestWidget,\n\t\tprivate editor: ICodeEditor,\n\t\tprivate triggerKeybindingLabel: string\n\t) {\n\t\tthis.disposables = [];\n\n\t\tthis.el = append(container, $('.details'));\n\t\tthis.disposables.push(toDisposable(() => container.removeChild(this.el)));\n\n\t\tthis.body = $('.body');\n\n\t\tthis.scrollbar = new DomScrollableElement(this.body, {});\n\t\tappend(this.el, this.scrollbar.getDomNode());\n\t\tthis.disposables.push(this.scrollbar);\n\n\t\tthis.header = append(this.body, $('.header'));\n\t\tthis.close = append(this.header, $('span.close'));\n\t\tthis.close.title = nls.localize('readLess', \"Read less...{0}\", triggerKeybindingLabel);\n\t\tthis.type = append(this.header, $('p.type'));\n\n\t\tthis.docs = append(this.body, $('p.docs'));\n\t\tthis.ariaLabel = null;\n\n\t\tthis.configureFont();\n\n\t\tchain(this.editor.onDidChangeConfiguration.bind(this.editor))\n\t\t\t.filter(e => e.fontInfo)\n\t\t\t.on(this.configureFont, this, this.disposables);\n\t}\n\n\tget element() {\n\t\treturn this.el;\n\t}\n\n\trender(item: ICompletionItem): void {\n\t\tif (!item || !canExpandCompletionItem(item)) {\n\t\t\tthis.type.textContent = '';\n\t\t\tthis.docs.textContent = '';\n\t\t\taddClass(this.el, 'no-docs');\n\t\t\tthis.ariaLabel = null;\n\t\t\treturn;\n\t\t}\n\t\tremoveClass(this.el, 'no-docs');\n\t\tthis.docs.textContent = item.suggestion.documentation;\n\n\t\tif (item.suggestion.detail) {\n\t\t\tthis.type.innerText = item.suggestion.detail;\n\t\t\tshow(this.type);\n\t\t} else {\n\t\t\tthis.type.innerText = '';\n\t\t\thide(this.type);\n\t\t}\n\n\t\tthis.el.style.height = this.header.offsetHeight + this.docs.offsetHeight + (this.borderWidth * 2) + 'px';\n\n\t\tthis.close.onmousedown = e => {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t};\n\t\tthis.close.onclick = e => {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tthis.widget.toggleDetails();\n\t\t};\n\n\t\tthis.body.scrollTop = 0;\n\t\tthis.scrollbar.scanDomNode();\n\n\t\tthis.ariaLabel = strings.format('{0}\\n{1}\\n{2}', item.suggestion.label || '', item.suggestion.detail || '', item.suggestion.documentation || '');\n\t}\n\n\tgetAriaLabel(): string {\n\t\treturn this.ariaLabel;\n\t}\n\n\tscrollDown(much = 8): void {\n\t\tthis.body.scrollTop += much;\n\t}\n\n\tscrollUp(much = 8): void {\n\t\tthis.body.scrollTop -= much;\n\t}\n\n\tscrollTop(): void {\n\t\tthis.body.scrollTop = 0;\n\t}\n\n\tscrollBottom(): void {\n\t\tthis.body.scrollTop = this.body.scrollHeight;\n\t}\n\n\tpageDown(): void {\n\t\tthis.scrollDown(80);\n\t}\n\n\tpageUp(): void {\n\t\tthis.scrollUp(80);\n\t}\n\n\tsetBorderWidth(width: number): void {\n\t\tthis.borderWidth = width;\n\t}\n\n\tprivate configureFont() {\n\t\tconst configuration = this.editor.getConfiguration();\n\t\tconst fontFamily = configuration.fontInfo.fontFamily;\n\t\tconst fontSize = configuration.contribInfo.suggestFontSize || configuration.fontInfo.fontSize;\n\t\tconst lineHeight = configuration.contribInfo.suggestLineHeight || configuration.fontInfo.lineHeight;\n\t\tconst fontSizePx = `${fontSize}px`;\n\t\tconst lineHeightPx = `${lineHeight}px`;\n\n\t\tthis.el.style.fontSize = fontSizePx;\n\t\tthis.type.style.fontFamily = fontFamily;\n\t\tthis.close.style.height = lineHeightPx;\n\t\tthis.close.style.width = lineHeightPx;\n\t}\n\n\tdispose(): void {\n\t\tthis.disposables = dispose(this.disposables);\n\t}\n}\n\nexport class SuggestWidget implements IContentWidget, IDelegate, IDisposable {\n\n\tprivate static ID: string = 'editor.widget.suggestWidget';\n\n\tstatic LOADING_MESSAGE: string = nls.localize('suggestWidget.loading', \"Loading...\");\n\tstatic NO_SUGGESTIONS_MESSAGE: string = nls.localize('suggestWidget.noSuggestions', \"No suggestions.\");\n\n\t// Editor.IContentWidget.allowEditorOverflow\n\treadonly allowEditorOverflow = true;\n\n\tprivate state: State;\n\tprivate isAuto: boolean;\n\tprivate loadingTimeout: number;\n\tprivate currentSuggestionDetails: TPromise;\n\tprivate focusedItemIndex: number;\n\tprivate focusedItem: ICompletionItem;\n\tprivate ignoreFocusEvents = false;\n\tprivate completionModel: CompletionModel;\n\n\tprivate element: HTMLElement;\n\tprivate messageElement: HTMLElement;\n\tprivate listElement: HTMLElement;\n\tprivate details: SuggestionDetails;\n\tprivate list: List;\n\n\tprivate suggestWidgetVisible: IContextKey;\n\tprivate suggestWidgetMultipleSuggestions: IContextKey;\n\tprivate suggestionSupportsAutoAccept: IContextKey;\n\n\tprivate editorBlurTimeout: TPromise;\n\tprivate showTimeout: TPromise;\n\tprivate toDispose: IDisposable[];\n\n\tprivate onDidSelectEmitter = new Emitter();\n\tprivate onDidFocusEmitter = new Emitter();\n\tprivate onDidHideEmitter = new Emitter();\n\tprivate onDidShowEmitter = new Emitter();\n\n\n\treadonly onDidSelect: Event = this.onDidSelectEmitter.event;\n\treadonly onDidFocus: Event = this.onDidFocusEmitter.event;\n\treadonly onDidHide: Event = this.onDidHideEmitter.event;\n\treadonly onDidShow: Event = this.onDidShowEmitter.event;\n\n\tprivate readonly maxWidgetWidth = 660;\n\tprivate readonly listWidth = 330;\n\tprivate storageService: IStorageService;\n\tprivate detailsFocusBorderColor: string;\n\tprivate detailsBorderColor: string;\n\n\tprivate storageServiceAvailable: boolean = true;\n\tprivate expandSuggestionDocs: boolean = false;\n\n\tconstructor(\n\t\tprivate editor: ICodeEditor,\n\t\t@ITelemetryService private telemetryService: ITelemetryService,\n\t\t@IContextKeyService contextKeyService: IContextKeyService,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t\t@IThemeService themeService: IThemeService,\n\t\t@IStorageService storageService: IStorageService,\n\t\t@IKeybindingService keybindingService: IKeybindingService\n\t) {\n\t\tconst kb = keybindingService.lookupKeybinding('editor.action.triggerSuggest');\n\t\tconst triggerKeybindingLabel = !kb ? '' : ` (${kb.getLabel()})`;\n\n\t\tthis.isAuto = false;\n\t\tthis.focusedItem = null;\n\t\tthis.storageService = storageService;\n\n\t\tif (this.expandDocsSettingFromStorage() === undefined) {\n\t\t\tthis.storageService.store('expandSuggestionDocs', expandSuggestionDocsByDefault, StorageScope.GLOBAL);\n\t\t\tif (this.expandDocsSettingFromStorage() === undefined) {\n\t\t\t\tthis.storageServiceAvailable = false;\n\t\t\t}\n\t\t}\n\n\t\tthis.element = $('.editor-widget.suggest-widget');\n\t\tif (!this.editor.getConfiguration().contribInfo.iconsInSuggestions) {\n\t\t\taddClass(this.element, 'no-icons');\n\t\t}\n\n\t\tthis.messageElement = append(this.element, $('.message'));\n\t\tthis.listElement = append(this.element, $('.tree'));\n\t\tthis.details = new SuggestionDetails(this.element, this, this.editor, triggerKeybindingLabel);\n\n\t\tlet renderer: IRenderer = instantiationService.createInstance(Renderer, this, this.editor, triggerKeybindingLabel);\n\n\t\tthis.list = new List(this.listElement, this, [renderer], {\n\t\t\tuseShadows: false,\n\t\t\tselectOnMouseDown: true\n\t\t});\n\n\t\tthis.toDispose = [\n\t\t\tattachListStyler(this.list, themeService, {\n\t\t\t\tlistInactiveFocusBackground: editorSuggestWidgetSelectedBackground,\n\t\t\t\tlistInactiveFocusOutline: activeContrastBorder\n\t\t\t}),\n\t\t\tthemeService.onThemeChange(t => this.onThemeChange(t)),\n\t\t\teditor.onDidBlurEditorText(() => this.onEditorBlur()),\n\t\t\teditor.onDidLayoutChange(() => this.onEditorLayoutChange()),\n\t\t\tthis.list.onSelectionChange(e => this.onListSelection(e)),\n\t\t\tthis.list.onFocusChange(e => this.onListFocus(e)),\n\t\t\tthis.editor.onDidChangeCursorSelection(() => this.onCursorSelectionChanged())\n\t\t];\n\n\t\tthis.suggestWidgetVisible = SuggestContext.Visible.bindTo(contextKeyService);\n\t\tthis.suggestWidgetMultipleSuggestions = SuggestContext.MultipleSuggestions.bindTo(contextKeyService);\n\t\tthis.suggestionSupportsAutoAccept = SuggestContext.AcceptOnKey.bindTo(contextKeyService);\n\n\t\tthis.editor.addContentWidget(this);\n\t\tthis.setState(State.Hidden);\n\n\t\tthis.onThemeChange(themeService.getTheme());\n\n\t\t// TODO@Alex: this is useful, but spammy\n\t\t// var isVisible = false;\n\t\t// this.onDidVisibilityChange((newIsVisible) => {\n\t\t// \tif (isVisible === newIsVisible) {\n\t\t// \t\treturn;\n\t\t// \t}\n\t\t// \tisVisible = newIsVisible;\n\t\t// \tif (isVisible) {\n\t\t// \t\talert(nls.localize('suggestWidgetAriaVisible', \"Suggestions opened\"));\n\t\t// \t} else {\n\t\t// \t\talert(nls.localize('suggestWidgetAriaInvisible', \"Suggestions closed\"));\n\t\t// \t}\n\t\t// });\n\t}\n\n\tprivate onCursorSelectionChanged(): void {\n\t\tif (this.state === State.Hidden) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.editor.layoutContentWidget(this);\n\t}\n\n\tprivate onEditorBlur(): void {\n\t\tif (sticky) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.editorBlurTimeout = TPromise.timeout(150).then(() => {\n\t\t\tif (!this.editor.isFocused()) {\n\t\t\t\tthis.setState(State.Hidden);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate onEditorLayoutChange(): void {\n\t\tif ((this.state === State.Open || this.state === State.Details) && this.expandDocsSettingFromStorage()) {\n\t\t\tthis.expandSideOrBelow();\n\t\t}\n\t}\n\n\tprivate onListSelection(e: IListEvent): void {\n\t\tif (!e.elements.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst item = e.elements[0];\n\t\tthis.onDidSelectEmitter.fire(item);\n\n\t\talert(nls.localize('suggestionAriaAccepted', \"{0}, accepted\", item.suggestion.label));\n\n\t\tthis.editor.focus();\n\t}\n\n\tprivate _getSuggestionAriaAlertLabel(item: ICompletionItem): string {\n\t\tif (canExpandCompletionItem(item)) {\n\t\t\treturn nls.localize('ariaCurrentSuggestionWithDetails', \"{0}, suggestion, has details\", item.suggestion.label);\n\t\t} else {\n\t\t\treturn nls.localize('ariaCurrentSuggestion', \"{0}, suggestion\", item.suggestion.label);\n\t\t}\n\t}\n\n\tprivate _lastAriaAlertLabel: string;\n\tprivate _ariaAlert(newAriaAlertLabel: string): void {\n\t\tif (this._lastAriaAlertLabel === newAriaAlertLabel) {\n\t\t\treturn;\n\t\t}\n\t\tthis._lastAriaAlertLabel = newAriaAlertLabel;\n\t\tif (this._lastAriaAlertLabel) {\n\t\t\talert(this._lastAriaAlertLabel);\n\t\t}\n\t}\n\n\tprivate onThemeChange(theme: ITheme) {\n\t\tlet backgroundColor = theme.getColor(editorSuggestWidgetBackground);\n\t\tif (backgroundColor) {\n\t\t\tthis.listElement.style.backgroundColor = backgroundColor.toString();\n\t\t\tthis.details.element.style.backgroundColor = backgroundColor.toString();\n\t\t\tthis.messageElement.style.backgroundColor = backgroundColor.toString();\n\t\t}\n\t\tlet borderColor = theme.getColor(editorSuggestWidgetBorder);\n\t\tif (borderColor) {\n\t\t\tthis.listElement.style.borderColor = borderColor.toString();\n\t\t\tthis.details.element.style.borderColor = borderColor.toString();\n\t\t\tthis.messageElement.style.borderColor = borderColor.toString();\n\t\t\tthis.detailsBorderColor = borderColor.toString();\n\t\t}\n\t\tlet focusBorderColor = theme.getColor(focusBorder);\n\t\tif (focusBorderColor) {\n\t\t\tthis.detailsFocusBorderColor = focusBorderColor.toString();\n\t\t}\n\t\tthis.details.setBorderWidth(theme.type === 'hc' ? 2 : 1);\n\t}\n\n\tprivate onListFocus(e: IListEvent): void {\n\t\tif (this.ignoreFocusEvents) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!e.elements.length) {\n\t\t\tif (this.currentSuggestionDetails) {\n\t\t\t\tthis.currentSuggestionDetails.cancel();\n\t\t\t\tthis.currentSuggestionDetails = null;\n\t\t\t\tthis.focusedItem = null;\n\t\t\t}\n\n\t\t\tthis._ariaAlert(null);\n\t\t\t// TODO@Alex: Chromium bug\n\t\t\t// this.editor.setAriaActiveDescendant(null);\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst item = e.elements[0];\n\t\tthis._ariaAlert(this._getSuggestionAriaAlertLabel(item));\n\n\t\t// TODO@Alex: Chromium bug\n\t\t// // TODO@Alex: the list is not done rendering...\n\t\t// setTimeout(() => {\n\t\t// \tthis.editor.setAriaActiveDescendant(this.list.getElementId(e.indexes[0]));\n\t\t// }, 100);\n\n\t\tif (item === this.focusedItem) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.currentSuggestionDetails) {\n\t\t\tthis.currentSuggestionDetails.cancel();\n\t\t\tthis.currentSuggestionDetails = null;\n\t\t}\n\n\t\tconst index = e.indexes[0];\n\n\t\tthis.suggestionSupportsAutoAccept.set(!item.suggestion.noAutoAccept);\n\n\t\tconst oldFocus = this.focusedItem;\n\t\tconst oldFocusIndex = this.focusedItemIndex;\n\t\tthis.focusedItemIndex = index;\n\t\tthis.focusedItem = item;\n\n\t\tif (oldFocus) {\n\t\t\tthis.ignoreFocusEvents = true;\n\t\t\tthis.list.splice(oldFocusIndex, 1, [oldFocus]);\n\t\t\tthis.ignoreFocusEvents = false;\n\t\t}\n\n\t\tthis.updateListHeight();\n\t\tthis.list.reveal(index);\n\n\t\tthis.currentSuggestionDetails = item.resolve()\n\t\t\t.then(() => {\n\t\t\t\tthis.ignoreFocusEvents = true;\n\t\t\t\tthis.list.splice(index, 1, [item]);\n\t\t\t\tthis.ignoreFocusEvents = false;\n\n\t\t\t\tthis.list.setFocus([index]);\n\t\t\t\tthis.list.reveal(index);\n\n\t\t\t\tif (this.expandDocsSettingFromStorage()) {\n\t\t\t\t\tthis.showDetails();\n\t\t\t\t} else {\n\t\t\t\t\tremoveClass(this.element, 'docs-side');\n\t\t\t\t}\n\t\t\t})\n\t\t\t.then(null, err => !isPromiseCanceledError(err) && onUnexpectedError(err))\n\t\t\t.then(() => this.currentSuggestionDetails = null);\n\n\t\t// emit an event\n\t\tthis.onDidFocusEmitter.fire(item);\n\t}\n\n\tprivate setState(state: State): void {\n\t\tif (!this.element) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst stateChanged = this.state !== state;\n\t\tthis.state = state;\n\n\t\ttoggleClass(this.element, 'frozen', state === State.Frozen);\n\n\t\tswitch (state) {\n\t\t\tcase State.Hidden:\n\t\t\t\thide(this.messageElement, this.details.element);\n\t\t\t\tshow(this.listElement);\n\t\t\t\tthis.hide();\n\t\t\t\tif (stateChanged) {\n\t\t\t\t\tthis.list.splice(0, this.list.length);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase State.Loading:\n\t\t\t\tthis.messageElement.textContent = SuggestWidget.LOADING_MESSAGE;\n\t\t\t\thide(this.listElement, this.details.element);\n\t\t\t\tshow(this.messageElement);\n\t\t\t\tremoveClass(this.element, 'docs-side');\n\t\t\t\tthis.show();\n\t\t\t\tbreak;\n\t\t\tcase State.Empty:\n\t\t\t\tthis.messageElement.textContent = SuggestWidget.NO_SUGGESTIONS_MESSAGE;\n\t\t\t\thide(this.listElement, this.details.element);\n\t\t\t\tshow(this.messageElement);\n\t\t\t\tremoveClass(this.element, 'docs-side');\n\t\t\t\tthis.show();\n\t\t\t\tbreak;\n\t\t\tcase State.Open:\n\t\t\t\thide(this.messageElement);\n\t\t\t\tshow(this.listElement);\n\t\t\t\tif (this.expandDocsSettingFromStorage()\n\t\t\t\t\t&& canExpandCompletionItem(this.list.getFocusedElements()[0])) {\n\t\t\t\t\tshow(this.details.element);\n\t\t\t\t\tthis.expandSideOrBelow();\n\t\t\t\t} else {\n\t\t\t\t\thide(this.details.element);\n\t\t\t\t}\n\t\t\t\tthis.show();\n\t\t\t\tbreak;\n\t\t\tcase State.Frozen:\n\t\t\t\thide(this.messageElement, this.details.element);\n\t\t\t\tshow(this.listElement);\n\t\t\t\tthis.show();\n\t\t\t\tbreak;\n\t\t\tcase State.Details:\n\t\t\t\thide(this.messageElement);\n\t\t\t\tshow(this.details.element, this.listElement);\n\t\t\t\tthis.show();\n\t\t\t\tthis._ariaAlert(this.details.getAriaLabel());\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (stateChanged) {\n\t\t\tthis.editor.layoutContentWidget(this);\n\t\t}\n\t}\n\n\tshowTriggered(auto: boolean) {\n\t\tif (this.state !== State.Hidden) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isAuto = !!auto;\n\n\t\tif (!this.isAuto) {\n\t\t\tthis.loadingTimeout = setTimeout(() => {\n\t\t\t\tthis.loadingTimeout = null;\n\t\t\t\tthis.setState(State.Loading);\n\t\t\t}, 50);\n\t\t}\n\t}\n\n\tshowSuggestions(completionModel: CompletionModel, isFrozen: boolean, isAuto: boolean): void {\n\t\tif (this.loadingTimeout) {\n\t\t\tclearTimeout(this.loadingTimeout);\n\t\t\tthis.loadingTimeout = null;\n\t\t}\n\n\t\tthis.completionModel = completionModel;\n\n\t\tif (isFrozen && this.state !== State.Empty && this.state !== State.Hidden) {\n\t\t\tthis.setState(State.Frozen);\n\t\t\treturn;\n\t\t}\n\n\t\tlet visibleCount = this.completionModel.items.length;\n\n\t\tconst isEmpty = visibleCount === 0;\n\t\tthis.suggestWidgetMultipleSuggestions.set(visibleCount > 1);\n\n\t\tif (isEmpty) {\n\t\t\tif (isAuto) {\n\t\t\t\tthis.setState(State.Hidden);\n\t\t\t} else {\n\t\t\t\tthis.setState(State.Empty);\n\t\t\t}\n\n\t\t\tthis.completionModel = null;\n\n\t\t} else {\n\t\t\tconst { stats } = this.completionModel;\n\t\t\tstats['wasAutomaticallyTriggered'] = !!isAuto;\n\t\t\tthis.telemetryService.publicLog('suggestWidget', { ...stats, ...this.editor.getTelemetryData() });\n\n\t\t\tthis.focusedItem = null;\n\t\t\tthis.focusedItemIndex = null;\n\t\t\tthis.list.splice(0, this.list.length, this.completionModel.items);\n\t\t\tthis.list.setFocus([0]);\n\t\t\tthis.list.reveal(0, 0);\n\n\t\t\tif (isFrozen) {\n\t\t\t\tthis.setState(State.Frozen);\n\t\t\t} else {\n\t\t\t\tthis.setState(State.Open);\n\t\t\t}\n\n\t\t\t// Reset focus border\n\t\t\tif (this.detailsBorderColor) {\n\t\t\t\tthis.details.element.style.borderColor = this.detailsBorderColor;\n\t\t\t}\n\t\t}\n\t}\n\n\tselectNextPage(): boolean {\n\t\tswitch (this.state) {\n\t\t\tcase State.Hidden:\n\t\t\t\treturn false;\n\t\t\tcase State.Details:\n\t\t\t\tthis.details.pageDown();\n\t\t\t\treturn true;\n\t\t\tcase State.Loading:\n\t\t\t\treturn !this.isAuto;\n\t\t\tdefault:\n\t\t\t\tthis.list.focusNextPage();\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tselectNext(): boolean {\n\t\tswitch (this.state) {\n\t\t\tcase State.Hidden:\n\t\t\t\treturn false;\n\t\t\tcase State.Loading:\n\t\t\t\treturn !this.isAuto;\n\t\t\tdefault:\n\t\t\t\tthis.list.focusNext(1, true);\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tselectLast(): boolean {\n\t\tswitch (this.state) {\n\t\t\tcase State.Hidden:\n\t\t\t\treturn false;\n\t\t\tcase State.Details:\n\t\t\t\tthis.details.scrollBottom();\n\t\t\t\treturn true;\n\t\t\tcase State.Loading:\n\t\t\t\treturn !this.isAuto;\n\t\t\tdefault:\n\t\t\t\tthis.list.focusLast();\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tselectPreviousPage(): boolean {\n\t\tswitch (this.state) {\n\t\t\tcase State.Hidden:\n\t\t\t\treturn false;\n\t\t\tcase State.Details:\n\t\t\t\tthis.details.pageUp();\n\t\t\t\treturn true;\n\t\t\tcase State.Loading:\n\t\t\t\treturn !this.isAuto;\n\t\t\tdefault:\n\t\t\t\tthis.list.focusPreviousPage();\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tselectPrevious(): boolean {\n\t\tswitch (this.state) {\n\t\t\tcase State.Hidden:\n\t\t\t\treturn false;\n\t\t\tcase State.Loading:\n\t\t\t\treturn !this.isAuto;\n\t\t\tdefault:\n\t\t\t\tthis.list.focusPrevious(1, true);\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\tselectFirst(): boolean {\n\t\tswitch (this.state) {\n\t\t\tcase State.Hidden:\n\t\t\t\treturn false;\n\t\t\tcase State.Details:\n\t\t\t\tthis.details.scrollTop();\n\t\t\t\treturn true;\n\t\t\tcase State.Loading:\n\t\t\t\treturn !this.isAuto;\n\t\t\tdefault:\n\t\t\t\tthis.list.focusFirst();\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tgetFocusedItem(): ICompletionItem {\n\t\tif (this.state !== State.Hidden\n\t\t\t&& this.state !== State.Empty\n\t\t\t&& this.state !== State.Loading) {\n\n\t\t\treturn this.list.getFocusedElements()[0];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\ttoggleDetailsFocus(): void {\n\t\tif (this.state === State.Details) {\n\t\t\tthis.setState(State.Open);\n\t\t\tif (this.detailsBorderColor) {\n\t\t\t\tthis.details.element.style.borderColor = this.detailsBorderColor;\n\t\t\t}\n\t\t} else if (this.state === State.Open && this.expandDocsSettingFromStorage()) {\n\t\t\tthis.setState(State.Details);\n\t\t\tif (this.detailsFocusBorderColor) {\n\t\t\t\tthis.details.element.style.borderColor = this.detailsFocusBorderColor;\n\t\t\t}\n\t\t}\n\t\tthis.telemetryService.publicLog('suggestWidget:toggleDetailsFocus', this.editor.getTelemetryData());\n\t}\n\n\ttoggleDetails(): void {\n\t\tif (!canExpandCompletionItem(this.list.getFocusedElements()[0])) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.expandDocsSettingFromStorage()) {\n\t\t\tthis.updateExpandDocsSetting(false);\n\t\t\thide(this.details.element);\n\t\t\tremoveClass(this.element, 'docs-side');\n\t\t\tremoveClass(this.element, 'docs-below');\n\t\t\tthis.editor.layoutContentWidget(this);\n\t\t\tthis.telemetryService.publicLog('suggestWidget:collapseDetails', this.editor.getTelemetryData());\n\t\t} else {\n\t\t\tif (this.state !== State.Open && this.state !== State.Details) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.updateExpandDocsSetting(true);\n\t\t\tthis.showDetails();\n\t\t\tthis.telemetryService.publicLog('suggestWidget:expandDetails', this.editor.getTelemetryData());\n\t\t}\n\n\t}\n\n\tshowDetails(): void {\n\t\tthis.expandSideOrBelow();\n\n\t\tshow(this.details.element);\n\t\tthis.details.render(this.list.getFocusedElements()[0]);\n\t\tthis.details.element.style.maxHeight = this.maxWidgetHeight + 'px';\n\n\t\t// Reset margin-top that was set as Fix for #26416\n\t\tthis.listElement.style.marginTop = '0px';\n\n\t\t// with docs showing up widget width/height may change, so reposition the widget\n\t\tthis.editor.layoutContentWidget(this);\n\n\t\tthis.adjustDocsPosition();\n\n\t\tthis.editor.focus();\n\n\t\tthis._ariaAlert(this.details.getAriaLabel());\n\t}\n\n\tprivate show(): void {\n\t\tthis.updateListHeight();\n\t\tthis.suggestWidgetVisible.set(true);\n\n\t\tthis.showTimeout = TPromise.timeout(100).then(() => {\n\t\t\taddClass(this.element, 'visible');\n\t\t\tthis.onDidShowEmitter.fire(this);\n\t\t});\n\t}\n\n\tprivate hide(): void {\n\t\tthis.suggestWidgetVisible.reset();\n\t\tthis.suggestWidgetMultipleSuggestions.reset();\n\t\tremoveClass(this.element, 'visible');\n\t}\n\n\thideWidget(): void {\n\t\tclearTimeout(this.loadingTimeout);\n\t\tthis.setState(State.Hidden);\n\t\tthis.onDidHideEmitter.fire(this);\n\t}\n\n\tgetPosition(): IContentWidgetPosition {\n\t\tif (this.state === State.Hidden) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tposition: this.editor.getPosition(),\n\t\t\tpreference: [ContentWidgetPositionPreference.BELOW, ContentWidgetPositionPreference.ABOVE]\n\t\t};\n\t}\n\n\tgetDomNode(): HTMLElement {\n\t\treturn this.element;\n\t}\n\n\tgetId(): string {\n\t\treturn SuggestWidget.ID;\n\t}\n\n\tprivate updateListHeight(): number {\n\t\tlet height = 0;\n\n\t\tif (this.state === State.Empty || this.state === State.Loading) {\n\t\t\theight = this.unfocusedHeight;\n\t\t} else {\n\t\t\tconst suggestionCount = this.list.contentHeight / this.unfocusedHeight;\n\t\t\theight = Math.min(suggestionCount, maxSuggestionsToShow) * this.unfocusedHeight;\n\t\t}\n\n\t\tthis.element.style.lineHeight = `${this.unfocusedHeight}px`;\n\t\tthis.listElement.style.height = `${height}px`;\n\t\tthis.list.layout(height);\n\n\t\tthis.editor.layoutContentWidget(this);\n\n\t\treturn height;\n\t}\n\n\tprivate adjustDocsPosition() {\n\t\tconst lineHeight = this.editor.getConfiguration().fontInfo.lineHeight;\n\t\tconst cursorCoords = this.editor.getScrolledVisiblePosition(this.editor.getPosition());\n\t\tconst editorCoords = getDomNodePagePosition(this.editor.getDomNode());\n\t\tconst cursorX = editorCoords.left + cursorCoords.left;\n\t\tconst cursorY = editorCoords.top + cursorCoords.top + cursorCoords.height;\n\t\tconst widgetCoords = getDomNodePagePosition(this.element);\n\t\tconst widgetX = widgetCoords.left;\n\t\tconst widgetY = widgetCoords.top;\n\n\t\tif (widgetX < cursorX - this.listWidth) {\n\t\t\t// Widget is too far to the left of cursor, swap list and docs\n\t\t\taddClass(this.element, 'list-right');\n\t\t} else {\n\t\t\tremoveClass(this.element, 'list-right');\n\t\t}\n\n\t\t// Compare top of the cursor (cursorY - lineheight) with widgetTop to determine if\n\t\t// margin-top needs to be applied on list to make it appear right above the cursor\n\t\t// Cannot compare cursorY directly as it may be a few decimals off due to zoooming\n\t\tif (hasClass(this.element, 'docs-side')\n\t\t\t&& cursorY - lineHeight > widgetY\n\t\t\t&& this.details.element.offsetHeight > this.listElement.offsetHeight) {\n\n\t\t\t// Fix for #26416\n\t\t\t// Docs is bigger than list and widget is above cursor, apply margin-top so that list appears right above cursor\n\t\t\tthis.listElement.style.marginTop = `${this.details.element.offsetHeight - this.listElement.offsetHeight}px`;\n\t\t}\n\t}\n\n\tprivate expandSideOrBelow() {\n\t\tlet matches = this.element.style.maxWidth.match(/(\\d+)px/);\n\t\tif (!matches || Number(matches[1]) < this.maxWidgetWidth) {\n\t\t\taddClass(this.element, 'docs-below');\n\t\t\tremoveClass(this.element, 'docs-side');\n\t\t} else {\n\t\t\taddClass(this.element, 'docs-side');\n\t\t\tremoveClass(this.element, 'docs-below');\n\t\t}\n\t}\n\n\t// Heights\n\n\tprivate get maxWidgetHeight(): number {\n\t\treturn this.unfocusedHeight * maxSuggestionsToShow;\n\t}\n\n\tprivate get unfocusedHeight(): number {\n\t\tconst configuration = this.editor.getConfiguration();\n\t\treturn configuration.contribInfo.suggestLineHeight || configuration.fontInfo.lineHeight;\n\t}\n\n\t// IDelegate\n\n\tgetHeight(element: ICompletionItem): number {\n\t\treturn this.unfocusedHeight;\n\t}\n\n\tgetTemplateId(element: ICompletionItem): string {\n\t\treturn 'suggestion';\n\t}\n\n\t// Monaco Editor does not have a storage service\n\tprivate expandDocsSettingFromStorage(): boolean {\n\t\tif (this.storageServiceAvailable) {\n\t\t\treturn this.storageService.getBoolean('expandSuggestionDocs', StorageScope.GLOBAL);\n\t\t} else {\n\t\t\treturn this.expandSuggestionDocs;\n\t\t}\n\t}\n\n\t// Monaco Editor does not have a storage service\n\tprivate updateExpandDocsSetting(value: boolean) {\n\t\tif (this.storageServiceAvailable) {\n\t\t\tthis.storageService.store('expandSuggestionDocs', value, StorageScope.GLOBAL);\n\t\t} else {\n\t\t\tthis.expandSuggestionDocs = value;\n\t\t}\n\t}\n\n\tdispose(): void {\n\t\tthis.state = null;\n\t\tthis.suggestionSupportsAutoAccept = null;\n\t\tthis.currentSuggestionDetails = null;\n\t\tthis.focusedItem = null;\n\t\tthis.element = null;\n\t\tthis.messageElement = null;\n\t\tthis.listElement = null;\n\t\tthis.details.dispose();\n\t\tthis.details = null;\n\t\tthis.list.dispose();\n\t\tthis.list = null;\n\t\tthis.toDispose = dispose(this.toDispose);\n\t\tif (this.loadingTimeout) {\n\t\t\tclearTimeout(this.loadingTimeout);\n\t\t\tthis.loadingTimeout = null;\n\t\t}\n\n\t\tif (this.editorBlurTimeout) {\n\t\t\tthis.editorBlurTimeout.cancel();\n\t\t\tthis.editorBlurTimeout = null;\n\t\t}\n\n\t\tif (this.showTimeout) {\n\t\t\tthis.showTimeout.cancel();\n\t\t\tthis.showTimeout = null;\n\t\t}\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tlet matchHighlight = theme.getColor(editorSuggestWidgetHighlightForeground);\n\tif (matchHighlight) {\n\t\tcollector.addRule(`.monaco-editor .suggest-widget:not(.frozen) .monaco-highlighted-label .highlight { color: ${matchHighlight}; }`);\n\t}\n\tlet foreground = theme.getColor(editorSuggestWidgetForeground);\n\tif (foreground) {\n\t\tcollector.addRule(`.monaco-editor .suggest-widget { color: ${foreground}; }`);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { isFalsyOrEmpty } from 'vs/base/common/arrays';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';\nimport { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';\nimport { ContextKeyExpr, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';\nimport { ICommandService } from 'vs/platform/commands/common/commands';\nimport { ICommonCodeEditor, IEditorContribution } from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { editorAction, ServicesAccessor, EditorAction, EditorCommand, CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';\nimport { ICodeEditor } from 'vs/editor/browser/editorBrowser';\nimport { alert } from 'vs/base/browser/ui/aria/aria';\nimport { editorContribution } from 'vs/editor/browser/editorBrowserExtensions';\nimport { EditOperation } from 'vs/editor/common/core/editOperation';\nimport { Range } from 'vs/editor/common/core/range';\nimport { SnippetParser } from 'vs/editor/contrib/snippet/browser/snippetParser';\nimport { SnippetController2 } from 'vs/editor/contrib/snippet/browser/snippetController2';\nimport { Context as SuggestContext } from './suggest';\nimport { SuggestModel, State } from './suggestModel';\nimport { ICompletionItem } from './completionModel';\nimport { SuggestWidget } from './suggestWidget';\n\nclass AcceptOnCharacterOracle {\n\n\tprivate _disposables: IDisposable[] = [];\n\n\tprivate _activeAcceptCharacters = new Set();\n\tprivate _activeItem: ICompletionItem;\n\n\tconstructor(editor: ICodeEditor, widget: SuggestWidget, accept: (item: ICompletionItem) => any) {\n\n\t\tthis._disposables.push(widget.onDidShow(() => this._onItem(widget.getFocusedItem())));\n\t\tthis._disposables.push(widget.onDidFocus(this._onItem, this));\n\t\tthis._disposables.push(widget.onDidHide(this.reset, this));\n\n\t\tthis._disposables.push(editor.onWillType(text => {\n\t\t\tif (this._activeItem) {\n\t\t\t\tconst ch = text[text.length - 1];\n\t\t\t\tif (this._activeAcceptCharacters.has(ch) && editor.getConfiguration().contribInfo.acceptSuggestionOnCommitCharacter) {\n\t\t\t\t\taccept(this._activeItem);\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate _onItem(item: ICompletionItem): void {\n\t\tif (!item || isFalsyOrEmpty(item.suggestion.commitCharacters)) {\n\t\t\tthis.reset();\n\t\t\treturn;\n\t\t}\n\t\tthis._activeItem = item;\n\t\tthis._activeAcceptCharacters.clear();\n\t\tfor (const ch of item.suggestion.commitCharacters) {\n\t\t\tif (ch.length > 0) {\n\t\t\t\tthis._activeAcceptCharacters.add(ch[0]);\n\t\t\t}\n\t\t}\n\t}\n\n\treset(): void {\n\t\tthis._activeItem = undefined;\n\t}\n\n\tdispose() {\n\t\tdispose(this._disposables);\n\t}\n}\n\n@editorContribution\nexport class SuggestController implements IEditorContribution {\n\n\tprivate static ID: string = 'editor.contrib.suggestController';\n\n\tpublic static get(editor: ICommonCodeEditor): SuggestController {\n\t\treturn editor.getContribution(SuggestController.ID);\n\t}\n\n\tprivate _model: SuggestModel;\n\tprivate _widget: SuggestWidget;\n\tprivate _toDispose: IDisposable[] = [];\n\n\tconstructor(\n\t\tprivate _editor: ICodeEditor,\n\t\t@ICommandService private _commandService: ICommandService,\n\t\t@ITelemetryService private _telemetryService: ITelemetryService,\n\t\t@IContextKeyService _contextKeyService: IContextKeyService,\n\t\t@IInstantiationService _instantiationService: IInstantiationService\n\t) {\n\t\tthis._model = new SuggestModel(this._editor);\n\t\tthis._toDispose.push(this._model.onDidTrigger(e => this._widget.showTriggered(e.auto)));\n\t\tthis._toDispose.push(this._model.onDidSuggest(e => this._widget.showSuggestions(e.completionModel, e.isFrozen, e.auto)));\n\t\tthis._toDispose.push(this._model.onDidCancel(e => !e.retrigger && this._widget.hideWidget()));\n\n\t\t// Manage the acceptSuggestionsOnEnter context key\n\t\tlet acceptSuggestionsOnEnter = SuggestContext.AcceptSuggestionsOnEnter.bindTo(_contextKeyService);\n\t\tlet updateFromConfig = () => {\n\t\t\tconst { acceptSuggestionOnEnter } = this._editor.getConfiguration().contribInfo;\n\t\t\tacceptSuggestionsOnEnter.set(\n\t\t\t\tacceptSuggestionOnEnter === 'on' || acceptSuggestionOnEnter === 'smart'\n\t\t\t\t|| (acceptSuggestionOnEnter) === true\n\t\t\t);\n\t\t};\n\t\tthis._toDispose.push(this._editor.onDidChangeConfiguration((e) => updateFromConfig()));\n\t\tupdateFromConfig();\n\n\t\tthis._widget = _instantiationService.createInstance(SuggestWidget, this._editor);\n\t\tthis._toDispose.push(this._widget.onDidSelect(this._onDidSelectItem, this));\n\n\t\t// Wire up logic to accept a suggestion on certain characters\n\t\tconst autoAcceptOracle = new AcceptOnCharacterOracle(_editor, this._widget, item => this._onDidSelectItem(item));\n\t\tthis._toDispose.push(\n\t\t\tautoAcceptOracle,\n\t\t\tthis._model.onDidSuggest(e => {\n\t\t\t\tif (e.completionModel.items.length === 0) {\n\t\t\t\t\tautoAcceptOracle.reset();\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\tlet makesTextEdit = SuggestContext.MakesTextEdit.bindTo(_contextKeyService);\n\t\tthis._toDispose.push(this._widget.onDidFocus(item => {\n\n\t\t\tconst position = this._editor.getPosition();\n\t\t\tconst startColumn = item.position.column - item.suggestion.overwriteBefore;\n\t\t\tconst endColumn = position.column;\n\t\t\tlet value = true;\n\t\t\tif (\n\t\t\t\tthis._editor.getConfiguration().contribInfo.acceptSuggestionOnEnter === 'smart'\n\t\t\t\t&& this._model.state === State.Auto\n\t\t\t\t&& !item.suggestion.command\n\t\t\t\t&& !item.suggestion.additionalTextEdits\n\t\t\t\t&& item.suggestion.snippetType !== 'textmate'\n\t\t\t\t&& endColumn - startColumn === item.suggestion.insertText.length\n\t\t\t) {\n\t\t\t\tconst oldText = this._editor.getModel().getValueInRange({\n\t\t\t\t\tstartLineNumber: position.lineNumber,\n\t\t\t\t\tstartColumn,\n\t\t\t\t\tendLineNumber: position.lineNumber,\n\t\t\t\t\tendColumn\n\t\t\t\t});\n\t\t\t\tvalue = oldText !== item.suggestion.insertText;\n\t\t\t}\n\t\t\tmakesTextEdit.set(value);\n\t\t}));\n\t\tthis._toDispose.push({\n\t\t\tdispose() { makesTextEdit.reset(); }\n\t\t});\n\t}\n\n\tgetId(): string {\n\t\treturn SuggestController.ID;\n\t}\n\n\tdispose(): void {\n\t\tthis._toDispose = dispose(this._toDispose);\n\t\tif (this._widget) {\n\t\t\tthis._widget.dispose();\n\t\t\tthis._widget = null;\n\t\t}\n\t\tif (this._model) {\n\t\t\tthis._model.dispose();\n\t\t\tthis._model = null;\n\t\t}\n\t}\n\n\tprivate _onDidSelectItem(item: ICompletionItem): void {\n\t\tif (item) {\n\t\t\tconst { suggestion, position } = item;\n\t\t\tconst columnDelta = this._editor.getPosition().column - position.column;\n\n\t\t\tif (Array.isArray(suggestion.additionalTextEdits)) {\n\t\t\t\tthis._editor.pushUndoStop();\n\t\t\t\tthis._editor.executeEdits('suggestController.additionalTextEdits', suggestion.additionalTextEdits.map(edit => EditOperation.replace(Range.lift(edit.range), edit.text)));\n\t\t\t\tthis._editor.pushUndoStop();\n\t\t\t}\n\n\t\t\tlet { insertText } = suggestion;\n\t\t\tif (suggestion.snippetType !== 'textmate') {\n\t\t\t\tinsertText = SnippetParser.escape(insertText);\n\t\t\t}\n\n\t\t\tSnippetController2.get(this._editor).insert(\n\t\t\t\tinsertText,\n\t\t\t\tsuggestion.overwriteBefore + columnDelta,\n\t\t\t\tsuggestion.overwriteAfter\n\t\t\t);\n\n\n\t\t\tif (suggestion.command) {\n\t\t\t\tthis._commandService.executeCommand(suggestion.command.id, ...suggestion.command.arguments).done(undefined, onUnexpectedError);\n\t\t\t}\n\n\t\t\tthis._alertCompletionItem(item);\n\t\t\tthis._telemetryService.publicLog('suggestSnippetInsert', { ...this._editor.getTelemetryData(), suggestionType: suggestion.type });\n\t\t}\n\n\t\tthis._model.cancel();\n\t}\n\n\tprivate _alertCompletionItem({ suggestion }: ICompletionItem): void {\n\t\tlet msg = nls.localize('arai.alert.snippet', \"Accepting '{0}' did insert the following text: {1}\", suggestion.label, suggestion.insertText);\n\t\talert(msg);\n\t}\n\n\ttriggerSuggest(): void {\n\t\tthis._model.trigger(false, false);\n\t\tthis._editor.revealLine(this._editor.getPosition().lineNumber);\n\t\tthis._editor.focus();\n\t}\n\n\tacceptSelectedSuggestion(): void {\n\t\tif (this._widget) {\n\t\t\tconst item = this._widget.getFocusedItem();\n\t\t\tthis._onDidSelectItem(item);\n\t\t}\n\t}\n\n\tcancelSuggestWidget(): void {\n\t\tif (this._widget) {\n\t\t\tthis._model.cancel();\n\t\t\tthis._widget.hideWidget();\n\t\t}\n\t}\n\n\tselectNextSuggestion(): void {\n\t\tif (this._widget) {\n\t\t\tthis._widget.selectNext();\n\t\t}\n\t}\n\n\tselectNextPageSuggestion(): void {\n\t\tif (this._widget) {\n\t\t\tthis._widget.selectNextPage();\n\t\t}\n\t}\n\n\tselectLastSuggestion(): void {\n\t\tif (this._widget) {\n\t\t\tthis._widget.selectLast();\n\t\t}\n\t}\n\n\tselectPrevSuggestion(): void {\n\t\tif (this._widget) {\n\t\t\tthis._widget.selectPrevious();\n\t\t}\n\t}\n\n\tselectPrevPageSuggestion(): void {\n\t\tif (this._widget) {\n\t\t\tthis._widget.selectPreviousPage();\n\t\t}\n\t}\n\n\tselectFirstSuggestion(): void {\n\t\tif (this._widget) {\n\t\t\tthis._widget.selectFirst();\n\t\t}\n\t}\n\n\ttoggleSuggestionDetails(): void {\n\t\tif (this._widget) {\n\t\t\tthis._widget.toggleDetails();\n\t\t}\n\t}\n\n\ttoggleSuggestionFocus(): void {\n\t\tif (this._widget) {\n\t\t\tthis._widget.toggleDetailsFocus();\n\t\t}\n\t}\n}\n\n@editorAction\nexport class TriggerSuggestAction extends EditorAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.triggerSuggest',\n\t\t\tlabel: nls.localize('suggest.trigger.label', \"Trigger Suggest\"),\n\t\t\talias: 'Trigger Suggest',\n\t\t\tprecondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasCompletionItemProvider),\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.Space,\n\t\t\t\tmac: { primary: KeyMod.WinCtrl | KeyCode.Space }\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\t\tconst controller = SuggestController.get(editor);\n\n\t\tif (!controller) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontroller.triggerSuggest();\n\t}\n}\n\nconst weight = CommonEditorRegistry.commandWeight(90);\n\nconst SuggestCommand = EditorCommand.bindToContribution(SuggestController.get);\n\n\nCommonEditorRegistry.registerEditorCommand(new SuggestCommand({\n\tid: 'acceptSelectedSuggestion',\n\tprecondition: SuggestContext.Visible,\n\thandler: x => x.acceptSelectedSuggestion(),\n\tkbOpts: {\n\t\tweight: weight,\n\t\tkbExpr: EditorContextKeys.textFocus,\n\t\tprimary: KeyCode.Tab\n\t}\n}));\n\nCommonEditorRegistry.registerEditorCommand(new SuggestCommand({\n\tid: 'acceptSelectedSuggestionOnEnter',\n\tprecondition: SuggestContext.Visible,\n\thandler: x => x.acceptSelectedSuggestion(),\n\tkbOpts: {\n\t\tweight: weight,\n\t\tkbExpr: ContextKeyExpr.and(EditorContextKeys.textFocus, SuggestContext.AcceptSuggestionsOnEnter, SuggestContext.MakesTextEdit),\n\t\tprimary: KeyCode.Enter\n\t}\n}));\n\nCommonEditorRegistry.registerEditorCommand(new SuggestCommand({\n\tid: 'hideSuggestWidget',\n\tprecondition: SuggestContext.Visible,\n\thandler: x => x.cancelSuggestWidget(),\n\tkbOpts: {\n\t\tweight: weight,\n\t\tkbExpr: EditorContextKeys.textFocus,\n\t\tprimary: KeyCode.Escape,\n\t\tsecondary: [KeyMod.Shift | KeyCode.Escape]\n\t}\n}));\n\nCommonEditorRegistry.registerEditorCommand(new SuggestCommand({\n\tid: 'selectNextSuggestion',\n\tprecondition: ContextKeyExpr.and(SuggestContext.Visible, SuggestContext.MultipleSuggestions),\n\thandler: c => c.selectNextSuggestion(),\n\tkbOpts: {\n\t\tweight: weight,\n\t\tkbExpr: EditorContextKeys.textFocus,\n\t\tprimary: KeyCode.DownArrow,\n\t\tsecondary: [KeyMod.CtrlCmd | KeyCode.DownArrow],\n\t\tmac: { primary: KeyCode.DownArrow, secondary: [KeyMod.CtrlCmd | KeyCode.DownArrow, KeyMod.WinCtrl | KeyCode.KEY_N] }\n\t}\n}));\n\nCommonEditorRegistry.registerEditorCommand(new SuggestCommand({\n\tid: 'selectNextPageSuggestion',\n\tprecondition: ContextKeyExpr.and(SuggestContext.Visible, SuggestContext.MultipleSuggestions),\n\thandler: c => c.selectNextPageSuggestion(),\n\tkbOpts: {\n\t\tweight: weight,\n\t\tkbExpr: EditorContextKeys.textFocus,\n\t\tprimary: KeyCode.PageDown,\n\t\tsecondary: [KeyMod.CtrlCmd | KeyCode.PageDown]\n\t}\n}));\n\nCommonEditorRegistry.registerEditorCommand(new SuggestCommand({\n\tid: 'selectLastSuggestion',\n\tprecondition: ContextKeyExpr.and(SuggestContext.Visible, SuggestContext.MultipleSuggestions),\n\thandler: c => c.selectLastSuggestion()\n}));\n\nCommonEditorRegistry.registerEditorCommand(new SuggestCommand({\n\tid: 'selectPrevSuggestion',\n\tprecondition: ContextKeyExpr.and(SuggestContext.Visible, SuggestContext.MultipleSuggestions),\n\thandler: c => c.selectPrevSuggestion(),\n\tkbOpts: {\n\t\tweight: weight,\n\t\tkbExpr: EditorContextKeys.textFocus,\n\t\tprimary: KeyCode.UpArrow,\n\t\tsecondary: [KeyMod.CtrlCmd | KeyCode.UpArrow],\n\t\tmac: { primary: KeyCode.UpArrow, secondary: [KeyMod.CtrlCmd | KeyCode.UpArrow, KeyMod.WinCtrl | KeyCode.KEY_P] }\n\t}\n}));\n\nCommonEditorRegistry.registerEditorCommand(new SuggestCommand({\n\tid: 'selectPrevPageSuggestion',\n\tprecondition: ContextKeyExpr.and(SuggestContext.Visible, SuggestContext.MultipleSuggestions),\n\thandler: c => c.selectPrevPageSuggestion(),\n\tkbOpts: {\n\t\tweight: weight,\n\t\tkbExpr: EditorContextKeys.textFocus,\n\t\tprimary: KeyCode.PageUp,\n\t\tsecondary: [KeyMod.CtrlCmd | KeyCode.PageUp]\n\t}\n}));\n\nCommonEditorRegistry.registerEditorCommand(new SuggestCommand({\n\tid: 'selectFirstSuggestion',\n\tprecondition: ContextKeyExpr.and(SuggestContext.Visible, SuggestContext.MultipleSuggestions),\n\thandler: c => c.selectFirstSuggestion()\n}));\n\nCommonEditorRegistry.registerEditorCommand(new SuggestCommand({\n\tid: 'toggleSuggestionDetails',\n\tprecondition: SuggestContext.Visible,\n\thandler: x => x.toggleSuggestionDetails(),\n\tkbOpts: {\n\t\tweight: weight,\n\t\tkbExpr: EditorContextKeys.textFocus,\n\t\tprimary: KeyMod.CtrlCmd | KeyCode.Space,\n\t\tmac: { primary: KeyMod.WinCtrl | KeyCode.Space }\n\t}\n}));\n\nCommonEditorRegistry.registerEditorCommand(new SuggestCommand({\n\tid: 'toggleSuggestionFocus',\n\tprecondition: SuggestContext.Visible,\n\thandler: x => x.toggleSuggestionFocus(),\n\tkbOpts: {\n\t\tweight: weight,\n\t\tkbExpr: EditorContextKeys.textFocus,\n\t\tprimary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.Space,\n\t\tmac: { primary: KeyMod.WinCtrl | KeyMod.Alt | KeyCode.Space }\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport nls = require('vs/nls');\n\nimport { sequence, asWinJsPromise } from 'vs/base/common/async';\nimport { onUnexpectedExternalError } from 'vs/base/common/errors';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { Range } from 'vs/editor/common/core/range';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { CommonEditorRegistry, commonEditorContribution } from 'vs/editor/common/editorCommonExtensions';\nimport { DocumentHighlight, DocumentHighlightKind, DocumentHighlightProviderRegistry } from 'vs/editor/common/modes';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { Position } from 'vs/editor/common/core/position';\nimport { registerColor, editorSelectionHighlight, activeContrastBorder } from 'vs/platform/theme/common/colorRegistry';\nimport { registerThemingParticipant } from 'vs/platform/theme/common/themeService';\nimport { CursorChangeReason, ICursorPositionChangedEvent } from 'vs/editor/common/controller/cursorEvents';\nimport { ModelDecorationOptions } from 'vs/editor/common/model/textModelWithDecorations';\n\nexport const editorWordHighlight = registerColor('editor.wordHighlightBackground', { dark: '#575757B8', light: '#57575740', hc: null }, nls.localize('wordHighlight', 'Background color of a symbol during read-access, like reading a variable.'));\nexport const editorWordHighlightStrong = registerColor('editor.wordHighlightStrongBackground', { dark: '#004972B8', light: '#0e639c40', hc: null }, nls.localize('wordHighlightStrong', 'Background color of a symbol during write-access, like writing to a variable.'));\n\nexport function getOccurrencesAtPosition(model: editorCommon.IReadOnlyModel, position: Position): TPromise {\n\n\tconst orderedByScore = DocumentHighlightProviderRegistry.ordered(model);\n\tlet foundResult = false;\n\n\t// in order of score ask the occurrences provider\n\t// until someone response with a good result\n\t// (good = none empty array)\n\treturn sequence(orderedByScore.map(provider => {\n\t\treturn (): TPromise => {\n\t\t\tif (!foundResult) {\n\t\t\t\treturn asWinJsPromise((token) => {\n\t\t\t\t\treturn provider.provideDocumentHighlights(model, position, token);\n\t\t\t\t}).then(data => {\n\t\t\t\t\tif (Array.isArray(data) && data.length > 0) {\n\t\t\t\t\t\tfoundResult = true;\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\t\t\t\t\treturn undefined;\n\t\t\t\t}, err => {\n\t\t\t\t\tonUnexpectedExternalError(err);\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn undefined;\n\t\t};\n\t})).then(values => {\n\t\treturn values[0];\n\t});\n}\n\nCommonEditorRegistry.registerDefaultLanguageCommand('_executeDocumentHighlights', getOccurrencesAtPosition);\n\nclass WordHighlighter {\n\n\tprivate editor: editorCommon.ICommonCodeEditor;\n\tprivate occurrencesHighlight: boolean;\n\tprivate model: editorCommon.IModel;\n\tprivate _lastWordRange: Range;\n\tprivate _decorationIds: string[];\n\tprivate toUnhook: IDisposable[];\n\n\tprivate workerRequestTokenId: number = 0;\n\tprivate workerRequest: TPromise = null;\n\tprivate workerRequestCompleted: boolean = false;\n\tprivate workerRequestValue: DocumentHighlight[] = [];\n\n\tprivate lastCursorPositionChangeTime: number = 0;\n\tprivate renderDecorationsTimer: number = -1;\n\n\tconstructor(editor: editorCommon.ICommonCodeEditor) {\n\t\tthis.editor = editor;\n\t\tthis.occurrencesHighlight = this.editor.getConfiguration().contribInfo.occurrencesHighlight;\n\t\tthis.model = this.editor.getModel();\n\t\tthis.toUnhook = [];\n\t\tthis.toUnhook.push(editor.onDidChangeCursorPosition((e: ICursorPositionChangedEvent) => {\n\n\t\t\tif (!this.occurrencesHighlight) {\n\t\t\t\t// Early exit if nothing needs to be done!\n\t\t\t\t// Leave some form of early exit check here if you wish to continue being a cursor position change listener ;)\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._onPositionChanged(e);\n\t\t}));\n\t\tthis.toUnhook.push(editor.onDidChangeModel((e) => {\n\t\t\tthis._stopAll();\n\t\t\tthis.model = this.editor.getModel();\n\t\t}));\n\t\tthis.toUnhook.push(editor.onDidChangeModelContent((e) => {\n\t\t\tthis._stopAll();\n\t\t}));\n\t\tthis.toUnhook.push(editor.onDidChangeConfiguration((e) => {\n\t\t\tlet newValue = this.editor.getConfiguration().contribInfo.occurrencesHighlight;\n\t\t\tif (this.occurrencesHighlight !== newValue) {\n\t\t\t\tthis.occurrencesHighlight = newValue;\n\t\t\t\tthis._stopAll();\n\t\t\t}\n\t\t}));\n\n\t\tthis._lastWordRange = null;\n\t\tthis._decorationIds = [];\n\t\tthis.workerRequestTokenId = 0;\n\t\tthis.workerRequest = null;\n\t\tthis.workerRequestCompleted = false;\n\n\t\tthis.lastCursorPositionChangeTime = 0;\n\t\tthis.renderDecorationsTimer = -1;\n\t}\n\n\tprivate _removeDecorations(): void {\n\t\tif (this._decorationIds.length > 0) {\n\t\t\t// remove decorations\n\t\t\tthis._decorationIds = this.editor.deltaDecorations(this._decorationIds, []);\n\t\t}\n\t}\n\n\tprivate _stopAll(): void {\n\t\tthis._lastWordRange = null;\n\n\t\t// Remove any existing decorations\n\t\tthis._removeDecorations();\n\n\t\t// Cancel any renderDecorationsTimer\n\t\tif (this.renderDecorationsTimer !== -1) {\n\t\t\tclearTimeout(this.renderDecorationsTimer);\n\t\t\tthis.renderDecorationsTimer = -1;\n\t\t}\n\n\t\t// Cancel any worker request\n\t\tif (this.workerRequest !== null) {\n\t\t\tthis.workerRequest.cancel();\n\t\t\tthis.workerRequest = null;\n\t\t}\n\n\t\t// Invalidate any worker request callback\n\t\tif (!this.workerRequestCompleted) {\n\t\t\tthis.workerRequestTokenId++;\n\t\t\tthis.workerRequestCompleted = true;\n\t\t}\n\t}\n\n\tprivate _onPositionChanged(e: ICursorPositionChangedEvent): void {\n\n\t\t// disabled\n\t\tif (!this.occurrencesHighlight) {\n\t\t\tthis._stopAll();\n\t\t\treturn;\n\t\t}\n\n\t\t// ignore typing & other\n\t\tif (e.reason !== CursorChangeReason.Explicit) {\n\t\t\tthis._stopAll();\n\t\t\treturn;\n\t\t}\n\n\t\t// no providers for this model\n\t\tif (!DocumentHighlightProviderRegistry.has(this.model)) {\n\t\t\tthis._stopAll();\n\t\t\treturn;\n\t\t}\n\n\t\tvar editorSelection = this.editor.getSelection();\n\n\t\t// ignore multiline selection\n\t\tif (editorSelection.startLineNumber !== editorSelection.endLineNumber) {\n\t\t\tthis._stopAll();\n\t\t\treturn;\n\t\t}\n\n\t\tvar lineNumber = editorSelection.startLineNumber;\n\t\tvar startColumn = editorSelection.startColumn;\n\t\tvar endColumn = editorSelection.endColumn;\n\n\t\tvar word = this.model.getWordAtPosition({\n\t\t\tlineNumber: lineNumber,\n\t\t\tcolumn: startColumn\n\t\t});\n\n\t\t// The selection must be inside a word or surround one word at most\n\t\tif (!word || word.startColumn > startColumn || word.endColumn < endColumn) {\n\t\t\tthis._stopAll();\n\t\t\treturn;\n\t\t}\n\n\t\t// All the effort below is trying to achieve this:\n\t\t// - when cursor is moved to a word, trigger immediately a findOccurrences request\n\t\t// - 250ms later after the last cursor move event, render the occurrences\n\t\t// - no flickering!\n\n\t\tvar currentWordRange = new Range(lineNumber, word.startColumn, lineNumber, word.endColumn);\n\n\t\tvar workerRequestIsValid = this._lastWordRange && this._lastWordRange.equalsRange(currentWordRange);\n\n\t\t// Even if we are on a different word, if that word is in the decorations ranges, the request is still valid\n\t\t// (Same symbol)\n\t\tfor (var i = 0, len = this._decorationIds.length; !workerRequestIsValid && i < len; i++) {\n\t\t\tvar range = this.model.getDecorationRange(this._decorationIds[i]);\n\t\t\tif (range && range.startLineNumber === lineNumber) {\n\t\t\t\tif (range.startColumn <= startColumn && range.endColumn >= endColumn) {\n\t\t\t\t\tworkerRequestIsValid = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\n\t\t// There are 4 cases:\n\t\t// a) old workerRequest is valid & completed, renderDecorationsTimer fired\n\t\t// b) old workerRequest is valid & completed, renderDecorationsTimer not fired\n\t\t// c) old workerRequest is valid, but not completed\n\t\t// d) old workerRequest is not valid\n\n\t\t// For a) no action is needed\n\t\t// For c), member 'lastCursorPositionChangeTime' will be used when installing the timer so no action is needed\n\n\t\tthis.lastCursorPositionChangeTime = (new Date()).getTime();\n\n\t\tif (workerRequestIsValid) {\n\t\t\tif (this.workerRequestCompleted && this.renderDecorationsTimer !== -1) {\n\t\t\t\t// case b)\n\t\t\t\t// Delay the firing of renderDecorationsTimer by an extra 250 ms\n\t\t\t\tclearTimeout(this.renderDecorationsTimer);\n\t\t\t\tthis.renderDecorationsTimer = -1;\n\t\t\t\tthis._beginRenderDecorations();\n\t\t\t}\n\t\t} else {\n\t\t\t// case d)\n\t\t\t// Stop all previous actions and start fresh\n\t\t\tthis._stopAll();\n\n\t\t\tvar myRequestId = ++this.workerRequestTokenId;\n\t\t\tthis.workerRequestCompleted = false;\n\n\t\t\tthis.workerRequest = getOccurrencesAtPosition(this.model, this.editor.getPosition());\n\n\t\t\tthis.workerRequest.then(data => {\n\t\t\t\tif (myRequestId === this.workerRequestTokenId) {\n\t\t\t\t\tthis.workerRequestCompleted = true;\n\t\t\t\t\tthis.workerRequestValue = data || [];\n\t\t\t\t\tthis._beginRenderDecorations();\n\t\t\t\t}\n\t\t\t}).done();\n\t\t}\n\n\t\tthis._lastWordRange = currentWordRange;\n\t}\n\n\tprivate _beginRenderDecorations(): void {\n\t\tvar currentTime = (new Date()).getTime();\n\t\tvar minimumRenderTime = this.lastCursorPositionChangeTime + 250;\n\n\t\tif (currentTime >= minimumRenderTime) {\n\t\t\t// Synchronous\n\t\t\tthis.renderDecorationsTimer = -1;\n\t\t\tthis.renderDecorations();\n\t\t} else {\n\t\t\t// Asyncrhonous\n\t\t\tthis.renderDecorationsTimer = setTimeout(() => {\n\t\t\t\tthis.renderDecorations();\n\t\t\t}, (minimumRenderTime - currentTime));\n\t\t}\n\t}\n\n\tprivate renderDecorations(): void {\n\t\tthis.renderDecorationsTimer = -1;\n\t\tvar decorations: editorCommon.IModelDeltaDecoration[] = [];\n\t\tfor (var i = 0, len = this.workerRequestValue.length; i < len; i++) {\n\t\t\tvar info = this.workerRequestValue[i];\n\t\t\tdecorations.push({\n\t\t\t\trange: info.range,\n\t\t\t\toptions: WordHighlighter._getDecorationOptions(info.kind)\n\t\t\t});\n\t\t}\n\n\t\tthis._decorationIds = this.editor.deltaDecorations(this._decorationIds, decorations);\n\t}\n\n\tprivate static _getDecorationOptions(kind: DocumentHighlightKind): ModelDecorationOptions {\n\t\tif (kind === DocumentHighlightKind.Write) {\n\t\t\treturn this._WRITE_OPTIONS;\n\t\t} else if (kind === DocumentHighlightKind.Text) {\n\t\t\treturn this._TEXT_OPTIONS;\n\t\t} else {\n\t\t\treturn this._REGULAR_OPTIONS;\n\t\t}\n\t}\n\n\tprivate static _WRITE_OPTIONS = ModelDecorationOptions.register({\n\t\tstickiness: editorCommon.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\tclassName: 'wordHighlightStrong',\n\t\toverviewRuler: {\n\t\t\tcolor: '#A0A0A0',\n\t\t\tdarkColor: '#A0A0A0',\n\t\t\tposition: editorCommon.OverviewRulerLane.Center\n\t\t}\n\t});\n\n\tprivate static _TEXT_OPTIONS = ModelDecorationOptions.register({\n\t\tstickiness: editorCommon.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\tclassName: 'selectionHighlight',\n\t\toverviewRuler: {\n\t\t\tcolor: '#A0A0A0',\n\t\t\tdarkColor: '#A0A0A0',\n\t\t\tposition: editorCommon.OverviewRulerLane.Center\n\t\t}\n\t});\n\n\tprivate static _REGULAR_OPTIONS = ModelDecorationOptions.register({\n\t\tstickiness: editorCommon.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\tclassName: 'wordHighlight',\n\t\toverviewRuler: {\n\t\t\tcolor: '#A0A0A0',\n\t\t\tdarkColor: '#A0A0A0',\n\t\t\tposition: editorCommon.OverviewRulerLane.Center\n\t\t}\n\t});\n\n\tpublic dispose(): void {\n\t\tthis._stopAll();\n\t\tthis.toUnhook = dispose(this.toUnhook);\n\t}\n}\n\n@commonEditorContribution\nclass WordHighlighterContribution implements editorCommon.IEditorContribution {\n\n\tprivate static ID = 'editor.contrib.wordHighlighter';\n\n\tprivate wordHighligher: WordHighlighter;\n\n\tconstructor(editor: editorCommon.ICommonCodeEditor) {\n\t\tthis.wordHighligher = new WordHighlighter(editor);\n\t}\n\n\tpublic getId(): string {\n\t\treturn WordHighlighterContribution.ID;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.wordHighligher.dispose();\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tlet selectionHighlight = theme.getColor(editorSelectionHighlight);\n\tif (selectionHighlight) {\n\t\tcollector.addRule(`.monaco-editor .focused .selectionHighlight { background-color: ${selectionHighlight}; }`);\n\t\tcollector.addRule(`.monaco-editor .selectionHighlight { background-color: ${selectionHighlight.transparent(0.5)}; }`);\n\t}\n\tlet wordHighlight = theme.getColor(editorWordHighlight);\n\tif (wordHighlight) {\n\t\tcollector.addRule(`.monaco-editor .wordHighlight { background-color: ${wordHighlight}; }`);\n\t}\n\tlet wordHighlightStrong = theme.getColor(editorWordHighlightStrong);\n\tif (wordHighlightStrong) {\n\t\tcollector.addRule(`.monaco-editor .wordHighlightStrong { background-color: ${wordHighlightStrong}; }`);\n\t}\n\tlet hcOutline = theme.getColor(activeContrastBorder);\n\tif (hcOutline) {\n\t\tcollector.addRule(`.monaco-editor .selectionHighlight { border: 1px dotted ${hcOutline}; box-sizing: border-box; }`);\n\t\tcollector.addRule(`.monaco-editor .wordHighlight { border: 1px dashed ${hcOutline}; box-sizing: border-box; }`);\n\t\tcollector.addRule(`.monaco-editor .wordHighlightStrong { border: 1px dashed ${hcOutline}; box-sizing: border-box; }`);\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/css!./peekViewWidget';\nimport * as nls from 'vs/nls';\nimport { Action } from 'vs/base/common/actions';\nimport * as strings from 'vs/base/common/strings';\nimport * as objects from 'vs/base/common/objects';\nimport { $ } from 'vs/base/browser/builder';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport * as dom from 'vs/base/browser/dom';\nimport { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';\nimport { ServicesAccessor, createDecorator } from 'vs/platform/instantiation/common/instantiation';\nimport { ICommonCodeEditor } from 'vs/editor/common/editorCommon';\nimport { ICodeEditorService } from 'vs/editor/common/services/codeEditorService';\nimport { ICodeEditor } from 'vs/editor/browser/editorBrowser';\nimport { IOptions, ZoneWidget, IStyles } from './zoneWidget';\nimport { EmbeddedCodeEditorWidget } from 'vs/editor/browser/widget/embeddedCodeEditorWidget';\nimport { ContextKeyExpr, RawContextKey } from 'vs/platform/contextkey/common/contextkey';\nimport { Color } from 'vs/base/common/color';\n\nexport var IPeekViewService = createDecorator('peekViewService');\n\nexport namespace PeekContext {\n\texport const inPeekEditor = new RawContextKey('inReferenceSearchEditor', true);\n\texport const notInPeekEditor: ContextKeyExpr = inPeekEditor.toNegated();\n}\n\nexport const NOT_INNER_EDITOR_CONTEXT_KEY = new RawContextKey('inReferenceSearchEditor', true);\n\nexport interface IPeekViewService {\n\t_serviceBrand: any;\n\tisActive: boolean;\n}\n\nexport function getOuterEditor(accessor: ServicesAccessor): ICommonCodeEditor {\n\tlet editor = accessor.get(ICodeEditorService).getFocusedCodeEditor();\n\tif (editor instanceof EmbeddedCodeEditorWidget) {\n\t\treturn editor.getParentEditor();\n\t}\n\treturn editor;\n}\n\nexport interface IPeekViewStyles extends IStyles {\n\theaderBackgroundColor?: Color;\n\tprimaryHeadingColor?: Color;\n\tsecondaryHeadingColor?: Color;\n}\n\nexport interface IPeekViewOptions extends IOptions, IPeekViewStyles {\n}\n\nconst defaultOptions: IPeekViewOptions = {\n\theaderBackgroundColor: Color.white,\n\tprimaryHeadingColor: Color.fromHex('#333333'),\n\tsecondaryHeadingColor: Color.fromHex('#6c6c6cb3')\n};\n\nexport abstract class PeekViewWidget extends ZoneWidget implements IPeekViewService {\n\n\tpublic _serviceBrand: any;\n\n\tprivate _onDidClose = new Emitter();\n\tprivate _isActive = false;\n\n\tprotected _headElement: HTMLDivElement;\n\tprotected _primaryHeading: HTMLElement;\n\tprotected _secondaryHeading: HTMLElement;\n\tprotected _metaHeading: HTMLElement;\n\tprotected _actionbarWidget: ActionBar;\n\tprotected _bodyElement: HTMLDivElement;\n\n\tconstructor(editor: ICodeEditor, options: IPeekViewOptions = {}) {\n\t\tsuper(editor, options);\n\t\tobjects.mixin(this.options, defaultOptions, false);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._isActive = false;\n\t\tsuper.dispose();\n\t\tthis._onDidClose.fire(this);\n\t}\n\n\tpublic get onDidClose(): Event {\n\t\treturn this._onDidClose.event;\n\t}\n\n\tpublic get isActive(): boolean {\n\t\treturn this._isActive;\n\t}\n\n\tpublic show(where: any, heightInLines: number): void {\n\t\tthis._isActive = true;\n\t\tsuper.show(where, heightInLines);\n\t}\n\n\tpublic style(styles: IPeekViewStyles): void {\n\t\tlet options = this.options;\n\t\tif (styles.headerBackgroundColor) {\n\t\t\toptions.headerBackgroundColor = styles.headerBackgroundColor;\n\t\t}\n\t\tif (styles.primaryHeadingColor) {\n\t\t\toptions.primaryHeadingColor = styles.primaryHeadingColor;\n\t\t}\n\t\tif (styles.secondaryHeadingColor) {\n\t\t\toptions.secondaryHeadingColor = styles.secondaryHeadingColor;\n\t\t}\n\t\tsuper.style(styles);\n\t}\n\n\tprotected _applyStyles(): void {\n\t\tsuper._applyStyles();\n\t\tlet options = this.options;\n\t\tif (this._headElement) {\n\t\t\tthis._headElement.style.backgroundColor = options.headerBackgroundColor.toString();\n\t\t}\n\t\tif (this._primaryHeading) {\n\t\t\tthis._primaryHeading.style.color = options.primaryHeadingColor.toString();\n\t\t}\n\t\tif (this._secondaryHeading) {\n\t\t\tthis._secondaryHeading.style.color = options.secondaryHeadingColor.toString();\n\t\t}\n\t\tif (this._bodyElement) {\n\t\t\tthis._bodyElement.style.borderColor = options.frameColor.toString();\n\t\t}\n\t}\n\n\tprotected _fillContainer(container: HTMLElement): void {\n\t\tthis.setCssClass('peekview-widget');\n\n\t\tthis._headElement = $('.head').getHTMLElement();\n\t\tthis._bodyElement = $('.body').getHTMLElement();\n\n\t\tthis._fillHead(this._headElement);\n\t\tthis._fillBody(this._bodyElement);\n\n\t\tcontainer.appendChild(this._headElement);\n\t\tcontainer.appendChild(this._bodyElement);\n\t}\n\n\tprotected _fillHead(container: HTMLElement): void {\n\t\tvar titleElement = $('.peekview-title').\n\t\t\ton(dom.EventType.CLICK, e => this._onTitleClick(e)).\n\t\t\tappendTo(this._headElement).\n\t\t\tgetHTMLElement();\n\n\t\tthis._primaryHeading = $('span.filename').appendTo(titleElement).getHTMLElement();\n\t\tthis._secondaryHeading = $('span.dirname').appendTo(titleElement).getHTMLElement();\n\t\tthis._metaHeading = $('span.meta').appendTo(titleElement).getHTMLElement();\n\n\t\tthis._actionbarWidget = new ActionBar(\n\t\t\t$('.peekview-actions').\n\t\t\t\tappendTo(this._headElement)\n\t\t);\n\n\t\tthis._actionbarWidget.push(new Action('peekview.close', nls.localize('label.close', \"Close\"), 'close-peekview-action', true, () => {\n\t\t\tthis.dispose();\n\t\t\treturn null;\n\t\t}), { label: false, icon: true });\n\t}\n\n\tprotected _onTitleClick(event: MouseEvent): void {\n\t\t// implement me\n\t}\n\n\tpublic setTitle(primaryHeading: string, secondaryHeading?: string): void {\n\t\t$(this._primaryHeading).safeInnerHtml(primaryHeading);\n\t\tthis._primaryHeading.setAttribute('aria-label', primaryHeading);\n\t\tif (secondaryHeading) {\n\t\t\t$(this._secondaryHeading).safeInnerHtml(secondaryHeading);\n\t\t} else {\n\t\t\tdom.clearNode(this._secondaryHeading);\n\t\t}\n\t}\n\n\tpublic setMetaTitle(value: string): void {\n\t\tif (value) {\n\t\t\t$(this._metaHeading).safeInnerHtml(value);\n\t\t} else {\n\t\t\tdom.clearNode(this._metaHeading);\n\t\t}\n\t}\n\n\tprotected _fillBody(container: HTMLElement): void {\n\t\t// implement me\n\t}\n\n\tpublic _doLayout(heightInPixel: number, widthInPixel: number): void {\n\n\t\tif (!this._isShowing && heightInPixel < 0) {\n\t\t\t// Looks like the view zone got folded away!\n\t\t\tthis.dispose();\n\t\t\tthis._onDidClose.fire(this);\n\t\t\treturn;\n\t\t}\n\n\t\tvar headHeight = Math.ceil(this.editor.getConfiguration().lineHeight * 1.2),\n\t\t\tbodyHeight = heightInPixel - (headHeight + 2 /* the border-top/bottom width*/);\n\n\t\tthis._doLayoutHead(headHeight, widthInPixel);\n\t\tthis._doLayoutBody(bodyHeight, widthInPixel);\n\t}\n\n\tprotected _doLayoutHead(heightInPixel: number, widthInPixel: number): void {\n\t\tthis._headElement.style.height = strings.format('{0}px', heightInPixel);\n\t\tthis._headElement.style.lineHeight = this._headElement.style.height;\n\t}\n\n\tprotected _doLayoutBody(heightInPixel: number, widthInPixel: number): void {\n\t\tthis._bodyElement.style.height = strings.format('{0}px', heightInPixel);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport \"vs/css!./accessibilityHelp\";\nimport * as nls from \"vs/nls\";\nimport { KeyCode, KeyMod } from \"vs/base/common/keyCodes\";\nimport { Disposable } from \"vs/base/common/lifecycle\";\nimport * as strings from \"vs/base/common/strings\";\nimport * as dom from \"vs/base/browser/dom\";\nimport { renderFormattedText } from \"vs/base/browser/htmlContentRenderer\";\nimport { FastDomNode, createFastDomNode } from \"vs/base/browser/fastDomNode\";\nimport { Widget } from \"vs/base/browser/ui/widget\";\nimport { ServicesAccessor, IInstantiationService } from \"vs/platform/instantiation/common/instantiation\";\nimport { IKeybindingService } from \"vs/platform/keybinding/common/keybinding\";\nimport { RawContextKey, IContextKey, IContextKeyService } from \"vs/platform/contextkey/common/contextkey\";\nimport { ICommonCodeEditor, IEditorContribution } from \"vs/editor/common/editorCommon\";\nimport { EditorContextKeys } from \"vs/editor/common/editorContextKeys\";\nimport { editorAction, CommonEditorRegistry, EditorAction, EditorCommand } from \"vs/editor/common/editorCommonExtensions\";\nimport { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition } from \"vs/editor/browser/editorBrowser\";\nimport { editorContribution } from \"vs/editor/browser/editorBrowserExtensions\";\nimport { ToggleTabFocusModeAction } from \"vs/editor/contrib/toggleTabFocusMode/common/toggleTabFocusMode\";\nimport { registerThemingParticipant } from \"vs/platform/theme/common/themeService\";\nimport { editorWidgetBackground, widgetShadow, contrastBorder } from \"vs/platform/theme/common/colorRegistry\";\nimport * as platform from \"vs/base/common/platform\";\nimport { alert } from \"vs/base/browser/ui/aria/aria\";\nimport { IOpenerService } from \"vs/platform/opener/common/opener\";\nimport URI from \"vs/base/common/uri\";\nimport { Selection } from \"vs/editor/common/core/selection\";\nimport * as browser from \"vs/base/browser/browser\";\nimport { IEditorConstructionOptions } from \"vs/editor/standalone/browser/standaloneCodeEditor\";\n\nconst CONTEXT_ACCESSIBILITY_WIDGET_VISIBLE = new RawContextKey('accessibilityHelpWidgetVisible', false);\n\n@editorContribution\nclass AccessibilityHelpController extends Disposable\n\timplements IEditorContribution {\n\tprivate static ID = 'editor.contrib.accessibilityHelpController';\n\n\tpublic static get(editor: ICommonCodeEditor): AccessibilityHelpController {\n\t\treturn editor.getContribution(\n\t\t\tAccessibilityHelpController.ID\n\t\t);\n\t}\n\n\tprivate _editor: ICodeEditor;\n\tprivate _widget: AccessibilityHelpWidget;\n\n\tconstructor(\n\t\teditor: ICodeEditor,\n\t\t@IInstantiationService instantiationService: IInstantiationService\n\t) {\n\t\tsuper();\n\n\t\tthis._editor = editor;\n\t\tthis._widget = this._register(\n\t\t\tinstantiationService.createInstance(AccessibilityHelpWidget, this._editor)\n\t\t);\n\t}\n\n\tpublic getId(): string {\n\t\treturn AccessibilityHelpController.ID;\n\t}\n\n\tpublic show(): void {\n\t\tthis._widget.show();\n\t}\n\n\tpublic hide(): void {\n\t\tthis._widget.hide();\n\t}\n}\n\nconst nlsNoSelection = nls.localize(\"noSelection\", \"No selection\");\nconst nlsSingleSelectionRange = nls.localize(\"singleSelectionRange\", \"Line {0}, Column {1} ({2} selected)\");\nconst nlsSingleSelection = nls.localize(\"singleSelection\", \"Line {0}, Column {1}\");\nconst nlsMultiSelectionRange = nls.localize(\"multiSelectionRange\", \"{0} selections ({1} characters selected)\");\nconst nlsMultiSelection = nls.localize(\"multiSelection\", \"{0} selections\");\n\nfunction getSelectionLabel(selections: Selection[], charactersSelected: number): string {\n\tif (!selections || selections.length === 0) {\n\t\treturn nlsNoSelection;\n\t}\n\n\tif (selections.length === 1) {\n\t\tif (charactersSelected) {\n\t\t\treturn strings.format(nlsSingleSelectionRange, selections[0].positionLineNumber, selections[0].positionColumn, charactersSelected);\n\t\t}\n\n\t\treturn strings.format(nlsSingleSelection, selections[0].positionLineNumber, selections[0].positionColumn);\n\t}\n\n\tif (charactersSelected) {\n\t\treturn strings.format(nlsMultiSelectionRange, selections.length, charactersSelected);\n\t}\n\n\tif (selections.length > 0) {\n\t\treturn strings.format(nlsMultiSelection, selections.length);\n\t}\n\n\treturn null;\n}\n\nclass AccessibilityHelpWidget extends Widget implements IOverlayWidget {\n\tprivate static ID = 'editor.contrib.accessibilityHelpWidget';\n\tprivate static WIDTH = 500;\n\tprivate static HEIGHT = 300;\n\n\tprivate _editor: ICodeEditor;\n\tprivate _domNode: FastDomNode;\n\tprivate _contentDomNode: FastDomNode;\n\tprivate _isVisible: boolean;\n\tprivate _isVisibleKey: IContextKey;\n\n\tconstructor(\n\t\teditor: ICodeEditor,\n\t\t@IContextKeyService private _contextKeyService: IContextKeyService,\n\t\t@IKeybindingService private _keybindingService: IKeybindingService,\n\t\t@IOpenerService private _openerService: IOpenerService\n\t) {\n\t\tsuper();\n\n\t\tthis._editor = editor;\n\t\tthis._isVisibleKey = CONTEXT_ACCESSIBILITY_WIDGET_VISIBLE.bindTo(\n\t\t\tthis._contextKeyService\n\t\t);\n\n\t\tthis._domNode = createFastDomNode(document.createElement('div'));\n\t\tthis._domNode.setClassName('accessibilityHelpWidget');\n\t\tthis._domNode.setDisplay('none');\n\t\tthis._domNode.setAttribute('role', 'dialog');\n\t\tthis._domNode.setAttribute('aria-hidden', 'true');\n\n\t\tthis._contentDomNode = createFastDomNode(document.createElement('div'));\n\t\tthis._contentDomNode.setAttribute('role', 'document');\n\t\tthis._domNode.appendChild(this._contentDomNode);\n\n\t\tthis._isVisible = false;\n\n\t\tthis._register(this._editor.onDidLayoutChange(() => {\n\t\t\tif (this._isVisible) {\n\t\t\t\tthis._layout();\n\t\t\t}\n\t\t}));\n\n\t\t// Intentionally not configurable!\n\t\tthis._register(dom.addStandardDisposableListener(this._contentDomNode.domNode, 'keydown', (e) => {\n\t\t\tif (!this._isVisible) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (e.equals(KeyMod.CtrlCmd | KeyCode.KEY_E)) {\n\t\t\t\talert(nls.localize(\"emergencyConfOn\", \"Now changing the setting `accessibilitySupport` to 'on'.\"));\n\n\t\t\t\tthis._editor.updateOptions({\n\t\t\t\t\taccessibilitySupport: 'on'\n\t\t\t\t});\n\n\t\t\t\tdom.clearNode(this._contentDomNode.domNode);\n\t\t\t\tthis._buildContent();\n\t\t\t\tthis._contentDomNode.domNode.focus();\n\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\n\t\t\tif (e.equals(KeyMod.CtrlCmd | KeyCode.KEY_H)) {\n\t\t\t\talert(nls.localize(\"openingDocs\", \"Now opening the Editor Accessibility documentation page.\"));\n\n\t\t\t\tlet url = (this._editor.getRawConfiguration()).accessibilityHelpUrl;\n\t\t\t\tif (typeof url === 'undefined') {\n\t\t\t\t\turl = 'https://go.microsoft.com/fwlink/?linkid=852450';\n\t\t\t\t}\n\t\t\t\tthis._openerService.open(URI.parse(url));\n\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t}));\n\n\t\tthis.onblur(this._contentDomNode.domNode, () => {\n\t\t\tthis.hide();\n\t\t});\n\n\t\tthis._editor.addOverlayWidget(this);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._editor.removeOverlayWidget(this);\n\t\tsuper.dispose();\n\t}\n\n\tpublic getId(): string {\n\t\treturn AccessibilityHelpWidget.ID;\n\t}\n\n\tpublic getDomNode(): HTMLElement {\n\t\treturn this._domNode.domNode;\n\t}\n\n\tpublic getPosition(): IOverlayWidgetPosition {\n\t\treturn {\n\t\t\tpreference: null\n\t\t};\n\t}\n\n\tpublic show(): void {\n\t\tif (this._isVisible) {\n\t\t\treturn;\n\t\t}\n\t\tthis._isVisible = true;\n\t\tthis._isVisibleKey.set(true);\n\t\tthis._layout();\n\t\tthis._domNode.setDisplay('block');\n\t\tthis._domNode.setAttribute('aria-hidden', 'false');\n\t\tthis._contentDomNode.domNode.tabIndex = 0;\n\t\tthis._buildContent();\n\t\tthis._contentDomNode.domNode.focus();\n\t}\n\n\tprivate _descriptionForCommand(commandId: string, msg: string, noKbMsg: string): string {\n\t\tlet kb = this._keybindingService.lookupKeybinding(commandId);\n\t\tif (kb) {\n\t\t\treturn strings.format(msg, kb.getAriaLabel());\n\t\t}\n\t\treturn strings.format(noKbMsg, commandId);\n\t}\n\n\tprivate _buildContent() {\n\t\tlet opts = this._editor.getConfiguration();\n\n\t\tconst selections = this._editor.getSelections();\n\t\tlet charactersSelected = 0;\n\n\t\tif (selections) {\n\t\t\tconst model = this._editor.getModel();\n\t\t\tif (model) {\n\t\t\t\tselections.forEach((selection) => {\n\t\t\t\t\tcharactersSelected += model.getValueLengthInRange(selection);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tlet text = getSelectionLabel(selections, charactersSelected);\n\n\t\tif (opts.wrappingInfo.inDiffEditor) {\n\t\t\tif (opts.readOnly) {\n\t\t\t\ttext += nls.localize(\"readonlyDiffEditor\", \" in a read-only pane of a diff editor.\");\n\t\t\t} else {\n\t\t\t\ttext += nls.localize(\"editableDiffEditor\", \" in a pane of a diff editor.\");\n\t\t\t}\n\t\t} else {\n\t\t\tif (opts.readOnly) {\n\t\t\t\ttext += nls.localize(\"readonlyEditor\", \" in a read-only code editor\");\n\t\t\t} else {\n\t\t\t\ttext += nls.localize(\"editableEditor\", \" in a code editor\");\n\t\t\t}\n\t\t}\n\n\t\tswitch (opts.accessibilitySupport) {\n\t\t\tcase platform.AccessibilitySupport.Unknown:\n\t\t\t\tconst turnOnMessage = (\n\t\t\t\t\tplatform.isMacintosh\n\t\t\t\t\t\t? nls.localize(\"changeConfigToOnMac\", \"To configure the editor to be optimized for usage with a Screen Reader press Command+E now.\")\n\t\t\t\t\t\t: nls.localize(\"changeConfigToOnWinLinux\", \"To configure the editor to be optimized for usage with a Screen Reader press Control+E now.\")\n\t\t\t\t);\n\t\t\t\ttext += '\\n\\n - ' + turnOnMessage;\n\t\t\t\tbreak;\n\t\t\tcase platform.AccessibilitySupport.Enabled:\n\t\t\t\ttext += '\\n\\n - ' + nls.localize(\"auto_on\", \"The editor is configured to be optimized for usage with a Screen Reader.\");\n\t\t\t\tbreak;\n\t\t\tcase platform.AccessibilitySupport.Disabled:\n\t\t\t\ttext += '\\n\\n - ' + 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\t\t\t\ttext += ' ' + turnOnMessage;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst NLS_TAB_FOCUS_MODE_ON = nls.localize(\"tabFocusModeOnMsg\", \"Pressing Tab in the current editor will move focus to the next focusable element. Toggle this behavior by pressing {0}.\");\n\t\tconst NLS_TAB_FOCUS_MODE_ON_NO_KB = 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\t\tconst NLS_TAB_FOCUS_MODE_OFF = nls.localize(\"tabFocusModeOffMsg\", \"Pressing Tab in the current editor will insert the tab character. Toggle this behavior by pressing {0}.\");\n\t\tconst NLS_TAB_FOCUS_MODE_OFF_NO_KB = 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\n\t\tif (opts.tabFocusMode) {\n\t\t\ttext += '\\n\\n - ' + this._descriptionForCommand(ToggleTabFocusModeAction.ID, NLS_TAB_FOCUS_MODE_ON, NLS_TAB_FOCUS_MODE_ON_NO_KB);\n\t\t} else {\n\t\t\ttext += '\\n\\n - ' + this._descriptionForCommand(ToggleTabFocusModeAction.ID, NLS_TAB_FOCUS_MODE_OFF, NLS_TAB_FOCUS_MODE_OFF_NO_KB);\n\t\t}\n\n\t\tconst openDocMessage = (\n\t\t\tplatform.isMacintosh\n\t\t\t\t? nls.localize(\"openDocMac\", \"Press Command+H now to open a browser window with more information related to editor accessibility.\")\n\t\t\t\t: nls.localize(\"openDocWinLinux\", \"Press Control+H now to open a browser window with more information related to editor accessibility.\")\n\t\t);\n\n\t\ttext += '\\n\\n - ' + openDocMessage;\n\n\t\ttext += '\\n\\n' + nls.localize(\"outroMsg\", \"You can dismiss this tooltip and return to the editor by pressing Escape or Shift+Escape.\");\n\n\t\tthis._contentDomNode.domNode.appendChild(renderFormattedText(text));\n\t}\n\n\tpublic hide(): void {\n\t\tif (!this._isVisible) {\n\t\t\treturn;\n\t\t}\n\t\tthis._isVisible = false;\n\t\tthis._isVisibleKey.reset();\n\t\tthis._domNode.setDisplay('none');\n\t\tthis._domNode.setAttribute('aria-hidden', 'true');\n\t\tthis._contentDomNode.domNode.tabIndex = -1;\n\t\tdom.clearNode(this._contentDomNode.domNode);\n\n\t\tthis._editor.focus();\n\t}\n\n\tprivate _layout(): void {\n\t\tlet editorLayout = this._editor.getLayoutInfo();\n\n\t\tlet w = Math.max(5, Math.min(AccessibilityHelpWidget.WIDTH, editorLayout.width - 40));\n\t\tlet h = Math.max(5, Math.min(AccessibilityHelpWidget.HEIGHT, editorLayout.height - 40));\n\n\t\tthis._domNode.setWidth(w);\n\t\tthis._domNode.setHeight(h);\n\n\t\tlet top = Math.round((editorLayout.height - h) / 2);\n\t\tthis._domNode.setTop(top);\n\n\t\tlet left = Math.round((editorLayout.width - w) / 2);\n\t\tthis._domNode.setLeft(left);\n\t}\n}\n\n@editorAction\nclass ShowAccessibilityHelpAction extends EditorAction {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.showAccessibilityHelp',\n\t\t\tlabel: nls.localize(\"ShowAccessibilityHelpAction\", \"Show Accessibility Help\"),\n\t\t\talias: 'Show Accessibility Help',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.focus,\n\t\t\t\tprimary: (browser.isIE ? KeyMod.CtrlCmd | KeyCode.F1 : KeyMod.Alt | KeyCode.F1)\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\t\tlet controller = AccessibilityHelpController.get(editor);\n\t\tif (controller) {\n\t\t\tcontroller.show();\n\t\t}\n\t}\n}\n\nconst AccessibilityHelpCommand = EditorCommand.bindToContribution(AccessibilityHelpController.get);\n\nCommonEditorRegistry.registerEditorCommand(\n\tnew AccessibilityHelpCommand({\n\t\tid: 'closeAccessibilityHelp',\n\t\tprecondition: CONTEXT_ACCESSIBILITY_WIDGET_VISIBLE,\n\t\thandler: x => x.hide(),\n\t\tkbOpts: {\n\t\t\tweight: CommonEditorRegistry.commandWeight(100),\n\t\t\tkbExpr: EditorContextKeys.focus,\n\t\t\tprimary: KeyCode.Escape,\n\t\t\tsecondary: [KeyMod.Shift | KeyCode.Escape]\n\t\t}\n\t})\n);\n\nregisterThemingParticipant((theme, collector) => {\n\tlet widgetBackground = theme.getColor(editorWidgetBackground);\n\tif (widgetBackground) {\n\t\tcollector.addRule(`.monaco-editor .accessibilityHelpWidget { background-color: ${widgetBackground}; }`);\n\t}\n\n\tlet widgetShadowColor = theme.getColor(widgetShadow);\n\tif (widgetShadowColor) {\n\t\tcollector.addRule(`.monaco-editor .accessibilityHelpWidget { box-shadow: 0 2px 8px ${widgetShadowColor}; }`);\n\t}\n\n\tlet hcBorder = theme.getColor(contrastBorder);\n\tif (hcBorder) {\n\t\tcollector.addRule(`.monaco-editor .accessibilityHelpWidget { border: 2px solid ${hcBorder}; }`);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport 'vs/css!./inspectTokens';\nimport * as nls from 'vs/nls';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { escape } from 'vs/base/common/strings';\nimport { Position } from 'vs/editor/common/core/position';\nimport { ICommonCodeEditor, IEditorContribution, IModel } from 'vs/editor/common/editorCommon';\nimport { editorAction, EditorAction, ServicesAccessor } from 'vs/editor/common/editorCommonExtensions';\nimport { ICodeEditor, ContentWidgetPositionPreference, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser';\nimport { editorContribution } from 'vs/editor/browser/editorBrowserExtensions';\nimport { IModeService } from 'vs/editor/common/services/modeService';\nimport { TokenMetadata } from 'vs/editor/common/model/tokensBinaryEncoding';\nimport { TokenizationRegistry, LanguageIdentifier, FontStyle, StandardTokenType, ITokenizationSupport, IState } from 'vs/editor/common/modes';\nimport { CharCode } from 'vs/base/common/charCode';\nimport { IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneThemeService';\nimport { NULL_STATE, nullTokenize, nullTokenize2 } from 'vs/editor/common/modes/nullMode';\nimport { Token } from 'vs/editor/common/core/token';\nimport { Color } from 'vs/base/common/color';\nimport { registerThemingParticipant, HIGH_CONTRAST } from 'vs/platform/theme/common/themeService';\nimport { editorHoverBackground, editorHoverBorder } from 'vs/platform/theme/common/colorRegistry';\n\n\n@editorContribution\nclass InspectTokensController extends Disposable implements IEditorContribution {\n\n\tprivate static ID = 'editor.contrib.inspectTokens';\n\n\tpublic static get(editor: ICommonCodeEditor): InspectTokensController {\n\t\treturn editor.getContribution(InspectTokensController.ID);\n\t}\n\n\tprivate _editor: ICodeEditor;\n\tprivate _standaloneThemeService: IStandaloneThemeService;\n\tprivate _modeService: IModeService;\n\tprivate _widget: InspectTokensWidget;\n\n\tconstructor(\n\t\teditor: ICodeEditor,\n\t\t@IStandaloneThemeService standaloneColorService: IStandaloneThemeService,\n\t\t@IModeService modeService: IModeService\n\t) {\n\t\tsuper();\n\t\tthis._editor = editor;\n\t\tthis._standaloneThemeService = standaloneColorService;\n\t\tthis._modeService = modeService;\n\t\tthis._widget = null;\n\n\t\tthis._register(this._editor.onDidChangeModel((e) => this.stop()));\n\t\tthis._register(this._editor.onDidChangeModelLanguage((e) => this.stop()));\n\t\tthis._register(TokenizationRegistry.onDidChange((e) => this.stop()));\n\t}\n\n\tpublic getId(): string {\n\t\treturn InspectTokensController.ID;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.stop();\n\t\tsuper.dispose();\n\t}\n\n\tpublic launch(): void {\n\t\tif (this._widget) {\n\t\t\treturn;\n\t\t}\n\t\tif (!this._editor.getModel()) {\n\t\t\treturn;\n\t\t}\n\t\tthis._widget = new InspectTokensWidget(this._editor, this._standaloneThemeService, this._modeService);\n\t}\n\n\tpublic stop(): void {\n\t\tif (this._widget) {\n\t\t\tthis._widget.dispose();\n\t\t\tthis._widget = null;\n\t\t}\n\t}\n}\n\n@editorAction\nclass InspectTokens extends EditorAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.inspectTokens',\n\t\t\tlabel: nls.localize('inspectTokens', \"Developer: Inspect Tokens\"),\n\t\t\talias: 'Developer: Inspect Tokens',\n\t\t\tprecondition: null\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\t\tlet controller = InspectTokensController.get(editor);\n\t\tif (controller) {\n\t\t\tcontroller.launch();\n\t\t}\n\t}\n}\n\ninterface ICompleteLineTokenization {\n\tstartState: IState;\n\ttokens1: Token[];\n\ttokens2: Uint32Array;\n\tendState: IState;\n}\n\ninterface IDecodedMetadata {\n\tlanguageIdentifier: LanguageIdentifier;\n\ttokenType: StandardTokenType;\n\tfontStyle: FontStyle;\n\tforeground: Color;\n\tbackground: Color;\n}\n\nfunction renderTokenText(tokenText: string): string {\n\tlet result: string = '';\n\tfor (let charIndex = 0, len = tokenText.length; charIndex < len; charIndex++) {\n\t\tlet charCode = tokenText.charCodeAt(charIndex);\n\t\tswitch (charCode) {\n\t\t\tcase CharCode.Tab:\n\t\t\t\tresult += '→';\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.Space:\n\t\t\t\tresult += '·';\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.LessThan:\n\t\t\t\tresult += '<';\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.GreaterThan:\n\t\t\t\tresult += '>';\n\t\t\t\tbreak;\n\n\t\t\tcase CharCode.Ampersand:\n\t\t\t\tresult += '&';\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tresult += String.fromCharCode(charCode);\n\t\t}\n\t}\n\treturn result;\n}\n\nfunction getSafeTokenizationSupport(languageIdentifier: LanguageIdentifier): ITokenizationSupport {\n\tlet tokenizationSupport = TokenizationRegistry.get(languageIdentifier.language);\n\tif (tokenizationSupport) {\n\t\treturn tokenizationSupport;\n\t}\n\treturn {\n\t\tgetInitialState: () => NULL_STATE,\n\t\ttokenize: (line: string, state: IState, deltaOffset: number) => nullTokenize(languageIdentifier.language, line, state, deltaOffset),\n\t\ttokenize2: (line: string, state: IState, deltaOffset: number) => nullTokenize2(languageIdentifier.id, line, state, deltaOffset)\n\t};\n}\n\nclass InspectTokensWidget extends Disposable implements IContentWidget {\n\n\tprivate static _ID = 'editor.contrib.inspectTokensWidget';\n\n\t// Editor.IContentWidget.allowEditorOverflow\n\tpublic allowEditorOverflow = true;\n\n\tprivate _editor: ICodeEditor;\n\tprivate _standaloneThemeService: IStandaloneThemeService;\n\tprivate _modeService: IModeService;\n\tprivate _tokenizationSupport: ITokenizationSupport;\n\tprivate _model: IModel;\n\tprivate _domNode: HTMLElement;\n\n\tconstructor(\n\t\teditor: ICodeEditor,\n\t\tstandaloneThemeService: IStandaloneThemeService,\n\t\tmodeService: IModeService\n\t) {\n\t\tsuper();\n\t\tthis._editor = editor;\n\t\tthis._standaloneThemeService = standaloneThemeService;\n\t\tthis._modeService = modeService;\n\t\tthis._model = this._editor.getModel();\n\t\tthis._domNode = document.createElement('div');\n\t\tthis._domNode.className = 'tokens-inspect-widget';\n\t\tthis._tokenizationSupport = getSafeTokenizationSupport(this._model.getLanguageIdentifier());\n\t\tthis._compute(this._editor.getPosition());\n\t\tthis._register(this._editor.onDidChangeCursorPosition((e) => this._compute(this._editor.getPosition())));\n\t\tthis._editor.addContentWidget(this);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._editor.removeContentWidget(this);\n\t\tsuper.dispose();\n\t}\n\n\tpublic getId(): string {\n\t\treturn InspectTokensWidget._ID;\n\t}\n\n\tprivate _compute(position: Position): void {\n\t\tlet data = this._getTokensAtLine(position.lineNumber);\n\n\t\tlet token1Index = 0;\n\t\tfor (let i = data.tokens1.length - 1; i >= 0; i--) {\n\t\t\tlet t = data.tokens1[i];\n\t\t\tif (position.column - 1 >= t.offset) {\n\t\t\t\ttoken1Index = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tlet token2Index = 0;\n\t\tfor (let i = (data.tokens2.length >>> 1); i >= 0; i--) {\n\t\t\tif (position.column - 1 >= data.tokens2[(i << 1)]) {\n\t\t\t\ttoken2Index = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tlet result = '';\n\n\t\tlet lineContent = this._model.getLineContent(position.lineNumber);\n\t\tlet tokenText = '';\n\t\tif (token1Index < data.tokens1.length) {\n\t\t\tlet tokenStartIndex = data.tokens1[token1Index].offset;\n\t\t\tlet tokenEndIndex = token1Index + 1 < data.tokens1.length ? data.tokens1[token1Index + 1].offset : lineContent.length;\n\t\t\ttokenText = lineContent.substring(tokenStartIndex, tokenEndIndex);\n\t\t}\n\t\tresult += `

    ${renderTokenText(tokenText)}(${tokenText.length} ${tokenText.length === 1 ? 'char' : 'chars'})

    `;\n\n\t\tresult += `
    `;\n\n\t\tlet metadata = this._decodeMetadata(data.tokens2[(token2Index << 1) + 1]);\n\t\tresult += ``;\n\t\tresult += ``;\n\t\tresult += ``;\n\t\tresult += ``;\n\t\tresult += ``;\n\t\tresult += ``;\n\t\tresult += ``;\n\n\t\tresult += `
    `;\n\n\t\tif (token1Index < data.tokens1.length) {\n\t\t\tresult += `${escape(data.tokens1[token1Index].type)}`;\n\t\t}\n\n\t\tthis._domNode.innerHTML = result;\n\t\tthis._editor.layoutContentWidget(this);\n\t}\n\n\tprivate _decodeMetadata(metadata: number): IDecodedMetadata {\n\t\tlet colorMap = TokenizationRegistry.getColorMap();\n\t\tlet languageId = TokenMetadata.getLanguageId(metadata);\n\t\tlet tokenType = TokenMetadata.getTokenType(metadata);\n\t\tlet fontStyle = TokenMetadata.getFontStyle(metadata);\n\t\tlet foreground = TokenMetadata.getForeground(metadata);\n\t\tlet background = TokenMetadata.getBackground(metadata);\n\t\treturn {\n\t\t\tlanguageIdentifier: this._modeService.getLanguageIdentifier(languageId),\n\t\t\ttokenType: tokenType,\n\t\t\tfontStyle: fontStyle,\n\t\t\tforeground: colorMap[foreground],\n\t\t\tbackground: colorMap[background]\n\t\t};\n\t}\n\n\tprivate _tokenTypeToString(tokenType: StandardTokenType): string {\n\t\tswitch (tokenType) {\n\t\t\tcase StandardTokenType.Other: return 'Other';\n\t\t\tcase StandardTokenType.Comment: return 'Comment';\n\t\t\tcase StandardTokenType.String: return 'String';\n\t\t\tcase StandardTokenType.RegEx: return 'RegEx';\n\t\t}\n\t\treturn '??';\n\t}\n\n\tprivate _fontStyleToString(fontStyle: FontStyle): string {\n\t\tlet r = '';\n\t\tif (fontStyle & FontStyle.Italic) {\n\t\t\tr += 'italic ';\n\t\t}\n\t\tif (fontStyle & FontStyle.Bold) {\n\t\t\tr += 'bold ';\n\t\t}\n\t\tif (fontStyle & FontStyle.Underline) {\n\t\t\tr += 'underline ';\n\t\t}\n\t\tif (r.length === 0) {\n\t\t\tr = '---';\n\t\t}\n\t\treturn r;\n\t}\n\n\tprivate _getTokensAtLine(lineNumber: number): ICompleteLineTokenization {\n\t\tlet stateBeforeLine = this._getStateBeforeLine(lineNumber);\n\n\t\tlet tokenizationResult1 = this._tokenizationSupport.tokenize(this._model.getLineContent(lineNumber), stateBeforeLine, 0);\n\t\tlet tokenizationResult2 = this._tokenizationSupport.tokenize2(this._model.getLineContent(lineNumber), stateBeforeLine, 0);\n\n\t\treturn {\n\t\t\tstartState: stateBeforeLine,\n\t\t\ttokens1: tokenizationResult1.tokens,\n\t\t\ttokens2: tokenizationResult2.tokens,\n\t\t\tendState: tokenizationResult1.endState\n\t\t};\n\t}\n\n\tprivate _getStateBeforeLine(lineNumber: number): IState {\n\t\tlet state: IState = this._tokenizationSupport.getInitialState();\n\n\t\tfor (let i = 1; i < lineNumber; i++) {\n\t\t\tlet tokenizationResult = this._tokenizationSupport.tokenize(this._model.getLineContent(i), state, 0);\n\t\t\tstate = tokenizationResult.endState;\n\t\t}\n\n\t\treturn state;\n\t}\n\n\tpublic getDomNode(): HTMLElement {\n\t\treturn this._domNode;\n\t}\n\n\tpublic getPosition(): IContentWidgetPosition {\n\t\treturn {\n\t\t\tposition: this._editor.getPosition(),\n\t\t\tpreference: [ContentWidgetPositionPreference.BELOW, ContentWidgetPositionPreference.ABOVE]\n\t\t};\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tlet border = theme.getColor(editorHoverBorder);\n\tif (border) {\n\t\tlet borderWidth = theme.type === HIGH_CONTRAST ? 2 : 1;\n\t\tcollector.addRule(`.monaco-editor .tokens-inspect-widget { border: ${borderWidth}px solid ${border}; }`);\n\t\tcollector.addRule(`.monaco-editor .tokens-inspect-widget .tokens-inspect-separator { background-color: ${border}; }`);\n\t}\n\tlet background = theme.getColor(editorHoverBackground);\n\tif (background) {\n\t\tcollector.addRule(`.monaco-editor .tokens-inspect-widget { background-color: ${background}; }`);\n\t}\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'use strict';\n\nimport { QuickOpenModel } from 'vs/base/parts/quickopen/browser/quickOpenModel';\nimport { IAutoFocus } from 'vs/base/parts/quickopen/common/quickOpen';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { ICodeEditor } from 'vs/editor/browser/editorBrowser';\nimport { editorContribution } from 'vs/editor/browser/editorBrowserExtensions';\nimport { QuickOpenEditorWidget } from './quickOpenEditorWidget';\nimport { Selection } from 'vs/editor/common/core/selection';\nimport { IActionOptions, EditorAction } from 'vs/editor/common/editorCommonExtensions';\nimport { IThemeService } from 'vs/platform/theme/common/themeService';\nimport { Range } from 'vs/editor/common/core/range';\nimport { ModelDecorationOptions } from 'vs/editor/common/model/textModelWithDecorations';\n\nexport interface IQuickOpenControllerOpts {\n\tinputAriaLabel: string;\n\tgetModel(value: string): QuickOpenModel;\n\tgetAutoFocus(searchValue: string): IAutoFocus;\n}\n\n@editorContribution\nexport class QuickOpenController implements editorCommon.IEditorContribution {\n\n\tprivate static ID = 'editor.controller.quickOpenController';\n\n\tpublic static get(editor: editorCommon.ICommonCodeEditor): QuickOpenController {\n\t\treturn editor.getContribution(QuickOpenController.ID);\n\t}\n\n\tprivate editor: ICodeEditor;\n\tprivate widget: QuickOpenEditorWidget;\n\tprivate rangeHighlightDecorationId: string;\n\tprivate lastKnownEditorSelection: Selection;\n\n\tconstructor(editor: ICodeEditor, @IThemeService private themeService: IThemeService) {\n\t\tthis.editor = editor;\n\t}\n\n\tpublic getId(): string {\n\t\treturn QuickOpenController.ID;\n\t}\n\n\tpublic dispose(): void {\n\t\t// Dispose widget\n\t\tif (this.widget) {\n\t\t\tthis.widget.destroy();\n\t\t\tthis.widget = null;\n\t\t}\n\t}\n\n\tpublic run(opts: IQuickOpenControllerOpts): void {\n\t\tif (this.widget) {\n\t\t\tthis.widget.destroy();\n\t\t\tthis.widget = null;\n\t\t}\n\n\t\t// Create goto line widget\n\t\tlet onClose = (canceled: boolean) => {\n\t\t\t// Clear Highlight Decorations if present\n\t\t\tthis.clearDecorations();\n\n\t\t\t// Restore selection if canceled\n\t\t\tif (canceled && this.lastKnownEditorSelection) {\n\t\t\t\tthis.editor.setSelection(this.lastKnownEditorSelection);\n\t\t\t\tthis.editor.revealRangeInCenterIfOutsideViewport(this.lastKnownEditorSelection);\n\t\t\t}\n\n\t\t\tthis.lastKnownEditorSelection = null;\n\t\t\tthis.editor.focus();\n\t\t};\n\n\t\tthis.widget = new QuickOpenEditorWidget(\n\t\t\tthis.editor,\n\t\t\t() => onClose(false),\n\t\t\t() => onClose(true),\n\t\t\t(value: string) => {\n\t\t\t\tthis.widget.setInput(opts.getModel(value), opts.getAutoFocus(value));\n\t\t\t},\n\t\t\t{\n\t\t\t\tinputAriaLabel: opts.inputAriaLabel\n\t\t\t},\n\t\t\tthis.themeService\n\t\t);\n\n\t\t// Remember selection to be able to restore on cancel\n\t\tif (!this.lastKnownEditorSelection) {\n\t\t\tthis.lastKnownEditorSelection = this.editor.getSelection();\n\t\t}\n\n\t\t// Show\n\t\tthis.widget.show('');\n\t}\n\n\tprivate static _RANGE_HIGHLIGHT_DECORATION = ModelDecorationOptions.register({\n\t\tclassName: 'rangeHighlight',\n\t\tisWholeLine: true\n\t});\n\n\tpublic decorateLine(range: Range, editor: ICodeEditor): void {\n\t\teditor.changeDecorations((changeAccessor: editorCommon.IModelDecorationsChangeAccessor) => {\n\t\t\tvar oldDecorations: string[] = [];\n\t\t\tif (this.rangeHighlightDecorationId) {\n\t\t\t\toldDecorations.push(this.rangeHighlightDecorationId);\n\t\t\t\tthis.rangeHighlightDecorationId = null;\n\t\t\t}\n\n\t\t\tvar newDecorations: editorCommon.IModelDeltaDecoration[] = [\n\t\t\t\t{\n\t\t\t\t\trange: range,\n\t\t\t\t\toptions: QuickOpenController._RANGE_HIGHLIGHT_DECORATION\n\t\t\t\t}\n\t\t\t];\n\n\t\t\tvar decorations = changeAccessor.deltaDecorations(oldDecorations, newDecorations);\n\t\t\tthis.rangeHighlightDecorationId = decorations[0];\n\t\t});\n\t}\n\n\tpublic clearDecorations(): void {\n\t\tif (this.rangeHighlightDecorationId) {\n\t\t\tthis.editor.changeDecorations((changeAccessor: editorCommon.IModelDecorationsChangeAccessor) => {\n\t\t\t\tchangeAccessor.deltaDecorations([this.rangeHighlightDecorationId], []);\n\t\t\t\tthis.rangeHighlightDecorationId = null;\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport interface IQuickOpenOpts {\n\t/**\n\t * provide the quick open model for the given search value.\n\t */\n\tgetModel(value: string): QuickOpenModel;\n\n\t/**\n\t * provide the quick open auto focus mode for the given search value.\n\t */\n\tgetAutoFocus(searchValue: string): IAutoFocus;\n}\n\n/**\n * Base class for providing quick open in the editor.\n */\nexport abstract class BaseEditorQuickOpenAction extends EditorAction {\n\n\tprivate _inputAriaLabel: string;\n\n\tconstructor(inputAriaLabel: string, opts: IActionOptions) {\n\t\tsuper(opts);\n\t\tthis._inputAriaLabel = inputAriaLabel;\n\t}\n\n\tprotected getController(editor: editorCommon.ICommonCodeEditor): QuickOpenController {\n\t\treturn QuickOpenController.get(editor);\n\t}\n\n\tprotected _show(controller: QuickOpenController, opts: IQuickOpenOpts): void {\n\t\tcontroller.run({\n\t\t\tinputAriaLabel: this._inputAriaLabel,\n\t\t\tgetModel: (value: string): QuickOpenModel => opts.getModel(value),\n\t\t\tgetAutoFocus: (searchValue: string): IAutoFocus => opts.getAutoFocus(searchValue)\n\t\t});\n\t}\n}\n\nexport interface IDecorator {\n\tdecorateLine(range: Range, editor: editorCommon.IEditor): void;\n\tclearDecorations(): void;\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'use strict';\n\nimport 'vs/css!./gotoLine';\nimport * as nls from 'vs/nls';\nimport { IContext, QuickOpenEntry, QuickOpenModel } from 'vs/base/parts/quickopen/browser/quickOpenModel';\nimport { IAutoFocus, Mode } from 'vs/base/parts/quickopen/common/quickOpen';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { ICodeEditor, IDiffEditor } from 'vs/editor/browser/editorBrowser';\nimport { BaseEditorQuickOpenAction, IDecorator } from './editorQuickOpen';\nimport { editorAction, ServicesAccessor } from 'vs/editor/common/editorCommonExtensions';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\n\ninterface ParseResult {\n\tposition: Position;\n\tisValid: boolean;\n\tlabel: string;\n}\n\nexport class GotoLineEntry extends QuickOpenEntry {\n\n\tprivate _parseResult: ParseResult;\n\tprivate decorator: IDecorator;\n\tprivate editor: editorCommon.IEditor;\n\n\tconstructor(line: string, editor: editorCommon.IEditor, decorator: IDecorator) {\n\t\tsuper();\n\n\t\tthis.editor = editor;\n\t\tthis.decorator = decorator;\n\t\tthis._parseResult = this._parseInput(line);\n\t}\n\n\n\tprivate _parseInput(line: string): ParseResult {\n\n\t\tlet numbers = line.split(',').map(part => parseInt(part, 10)).filter(part => !isNaN(part)),\n\t\t\tposition: Position;\n\n\t\tif (numbers.length === 0) {\n\t\t\tposition = new Position(-1, -1);\n\t\t} else if (numbers.length === 1) {\n\t\t\tposition = new Position(numbers[0], 1);\n\t\t} else {\n\t\t\tposition = new Position(numbers[0], numbers[1]);\n\t\t}\n\n\t\tlet model: editorCommon.IModel;\n\t\tif (editorCommon.isCommonCodeEditor(this.editor)) {\n\t\t\tmodel = this.editor.getModel();\n\t\t} else {\n\t\t\tmodel = (this.editor).getModel().modified;\n\t\t}\n\n\t\tlet isValid = model.validatePosition(position).equals(position),\n\t\t\tlabel: string;\n\n\t\tif (isValid) {\n\t\t\tif (position.column && position.column > 1) {\n\t\t\t\tlabel = nls.localize('gotoLineLabelValidLineAndColumn', \"Go to line {0} and character {1}\", position.lineNumber, position.column);\n\t\t\t} else {\n\t\t\t\tlabel = nls.localize('gotoLineLabelValidLine', \"Go to line {0}\", position.lineNumber, position.column);\n\t\t\t}\n\t\t} else if (position.lineNumber < 1 || position.lineNumber > model.getLineCount()) {\n\t\t\tlabel = nls.localize('gotoLineLabelEmptyWithLineLimit', \"Type a line number between 1 and {0} to navigate to\", model.getLineCount());\n\t\t} else {\n\t\t\tlabel = nls.localize('gotoLineLabelEmptyWithLineAndColumnLimit', \"Type a character between 1 and {0} to navigate to\", model.getLineMaxColumn(position.lineNumber));\n\t\t}\n\n\t\treturn {\n\t\t\tposition: position,\n\t\t\tisValid: isValid,\n\t\t\tlabel: label\n\t\t};\n\t}\n\n\tpublic getLabel(): string {\n\t\treturn this._parseResult.label;\n\t}\n\n\tpublic getAriaLabel(): string {\n\t\treturn nls.localize('gotoLineAriaLabel', \"Go to line {0}\", this._parseResult.label);\n\t}\n\n\tpublic run(mode: Mode, context: IContext): boolean {\n\t\tif (mode === Mode.OPEN) {\n\t\t\treturn this.runOpen();\n\t\t}\n\n\t\treturn this.runPreview();\n\t}\n\n\tpublic runOpen(): boolean {\n\n\t\t// No-op if range is not valid\n\t\tif (!this._parseResult.isValid) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Apply selection and focus\n\t\tlet range = this.toSelection();\n\t\t(this.editor).setSelection(range);\n\t\t(this.editor).revealRangeInCenter(range);\n\t\tthis.editor.focus();\n\n\t\treturn true;\n\t}\n\n\tpublic runPreview(): boolean {\n\n\t\t// No-op if range is not valid\n\t\tif (!this._parseResult.isValid) {\n\t\t\tthis.decorator.clearDecorations();\n\t\t\treturn false;\n\t\t}\n\n\t\t// Select Line Position\n\t\tlet range = this.toSelection();\n\t\tthis.editor.revealRangeInCenter(range);\n\n\t\t// Decorate if possible\n\t\tthis.decorator.decorateLine(range, this.editor);\n\n\t\treturn false;\n\t}\n\n\tprivate toSelection(): Range {\n\t\treturn new Range(\n\t\t\tthis._parseResult.position.lineNumber,\n\t\t\tthis._parseResult.position.column,\n\t\t\tthis._parseResult.position.lineNumber,\n\t\t\tthis._parseResult.position.column\n\t\t);\n\t}\n}\n\n@editorAction\nexport class GotoLineAction extends BaseEditorQuickOpenAction {\n\n\tconstructor() {\n\t\tsuper(nls.localize('gotoLineActionInput', \"Type a line number, followed by an optional colon and a character number to navigate to\"), {\n\t\t\tid: 'editor.action.gotoLine',\n\t\t\tlabel: nls.localize('GotoLineAction.label', \"Go to Line...\"),\n\t\t\talias: 'Go to Line...',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.focus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.KEY_G,\n\t\t\t\tmac: { primary: KeyMod.WinCtrl | KeyCode.KEY_G }\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\t\tthis._show(this.getController(editor), {\n\t\t\tgetModel: (value: string): QuickOpenModel => {\n\t\t\t\treturn new QuickOpenModel([new GotoLineEntry(value, editor, this.getController(editor))]);\n\t\t\t},\n\n\t\t\tgetAutoFocus: (searchValue: string): IAutoFocus => {\n\t\t\t\treturn {\n\t\t\t\t\tautoFocusFirstEntry: searchValue.length > 0\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { matchesFuzzy } from 'vs/base/common/filters';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IContext, IHighlight, QuickOpenEntryGroup, QuickOpenModel } from 'vs/base/parts/quickopen/browser/quickOpenModel';\nimport { IAutoFocus, Mode } from 'vs/base/parts/quickopen/common/quickOpen';\nimport { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';\nimport { IEditorAction, ICommonCodeEditor, IEditor } from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { BaseEditorQuickOpenAction } from './editorQuickOpen';\nimport { editorAction, ServicesAccessor } from 'vs/editor/common/editorCommonExtensions';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport * as browser from 'vs/base/browser/browser';\n\nexport class EditorActionCommandEntry extends QuickOpenEntryGroup {\n\tprivate key: string;\n\tprivate action: IEditorAction;\n\tprivate editor: IEditor;\n\n\tconstructor(key: string, highlights: IHighlight[], action: IEditorAction, editor: IEditor) {\n\t\tsuper();\n\n\t\tthis.key = key;\n\t\tthis.setHighlights(highlights);\n\t\tthis.action = action;\n\t\tthis.editor = editor;\n\t}\n\n\tpublic getLabel(): string {\n\t\treturn this.action.label;\n\t}\n\n\tpublic getAriaLabel(): string {\n\t\treturn nls.localize('ariaLabelEntry', \"{0}, commands\", this.getLabel());\n\t}\n\n\tpublic getGroupLabel(): string {\n\t\treturn this.key;\n\t}\n\n\tpublic run(mode: Mode, context: IContext): boolean {\n\t\tif (mode === Mode.OPEN) {\n\n\t\t\t// Use a timeout to give the quick open widget a chance to close itself first\n\t\t\tTPromise.timeout(50).done(() => {\n\n\t\t\t\t// Some actions are enabled only when editor has focus\n\t\t\t\tthis.editor.focus();\n\n\t\t\t\ttry {\n\t\t\t\t\tlet promise = this.action.run() || TPromise.as(null);\n\t\t\t\t\tpromise.done(null, onUnexpectedError);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tonUnexpectedError(error);\n\t\t\t\t}\n\t\t\t}, onUnexpectedError);\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n}\n\n@editorAction\nexport class QuickCommandAction extends BaseEditorQuickOpenAction {\n\n\tconstructor() {\n\t\tsuper(nls.localize('quickCommandActionInput', \"Type the name of an action you want to execute\"), {\n\t\t\tid: 'editor.action.quickCommand',\n\t\t\tlabel: nls.localize('QuickCommandAction.label', \"Command Palette\"),\n\t\t\talias: 'Command Palette',\n\t\t\tprecondition: null,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.focus,\n\t\t\t\tprimary: (browser.isIE ? KeyMod.Alt | KeyCode.F1 : KeyCode.F1)\n\t\t\t},\n\t\t\tmenuOpts: {\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {\n\t\tconst keybindingService = accessor.get(IKeybindingService);\n\n\t\tthis._show(this.getController(editor), {\n\t\t\tgetModel: (value: string): QuickOpenModel => {\n\t\t\t\treturn new QuickOpenModel(this._editorActionsToEntries(keybindingService, editor, value));\n\t\t\t},\n\n\t\t\tgetAutoFocus: (searchValue: string): IAutoFocus => {\n\t\t\t\treturn {\n\t\t\t\t\tautoFocusFirstEntry: true,\n\t\t\t\t\tautoFocusPrefixMatch: searchValue\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _sort(elementA: QuickOpenEntryGroup, elementB: QuickOpenEntryGroup): number {\n\t\tlet elementAName = elementA.getLabel().toLowerCase();\n\t\tlet elementBName = elementB.getLabel().toLowerCase();\n\n\t\treturn elementAName.localeCompare(elementBName);\n\t}\n\n\tprivate _editorActionsToEntries(keybindingService: IKeybindingService, editor: ICommonCodeEditor, searchValue: string): EditorActionCommandEntry[] {\n\t\tlet actions: IEditorAction[] = editor.getSupportedActions();\n\t\tlet entries: EditorActionCommandEntry[] = [];\n\n\t\tfor (let i = 0; i < actions.length; i++) {\n\t\t\tlet action = actions[i];\n\n\t\t\tlet keybind = keybindingService.lookupKeybinding(action.id);\n\n\t\t\tif (action.label) {\n\t\t\t\tlet highlights = matchesFuzzy(searchValue, action.label);\n\t\t\t\tif (highlights) {\n\t\t\t\t\tentries.push(new EditorActionCommandEntry(keybind ? keybind.getLabel() : '', highlights, action, editor));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Sort by name\n\t\tentries = entries.sort(this._sort);\n\n\t\treturn entries;\n\t}\n}","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n\n'use strict';\n\nimport 'vs/css!./quickOutline';\nimport * as nls from 'vs/nls';\nimport { matchesFuzzy } from 'vs/base/common/filters';\nimport * as strings from 'vs/base/common/strings';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IContext, IHighlight, QuickOpenEntryGroup, QuickOpenModel } from 'vs/base/parts/quickopen/browser/quickOpenModel';\nimport { IAutoFocus, Mode } from 'vs/base/parts/quickopen/common/quickOpen';\nimport { ICommonCodeEditor } from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport { SymbolInformation, DocumentSymbolProviderRegistry, symbolKindToCssClass, IOutline } from 'vs/editor/common/modes';\nimport { BaseEditorQuickOpenAction, IDecorator } from './editorQuickOpen';\nimport { getDocumentSymbols } from 'vs/editor/contrib/quickOpen/common/quickOpen';\nimport { editorAction, ServicesAccessor } from 'vs/editor/common/editorCommonExtensions';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { Range } from 'vs/editor/common/core/range';\n\nlet SCOPE_PREFIX = ':';\n\nclass SymbolEntry extends QuickOpenEntryGroup {\n\tprivate name: string;\n\tprivate type: string;\n\tprivate description: string;\n\tprivate range: Range;\n\tprivate editor: ICommonCodeEditor;\n\tprivate decorator: IDecorator;\n\n\tconstructor(name: string, type: string, description: string, range: Range, highlights: IHighlight[], editor: ICommonCodeEditor, decorator: IDecorator) {\n\t\tsuper();\n\n\t\tthis.name = name;\n\t\tthis.type = type;\n\t\tthis.description = description;\n\t\tthis.range = range;\n\t\tthis.setHighlights(highlights);\n\t\tthis.editor = editor;\n\t\tthis.decorator = decorator;\n\t}\n\n\tpublic getLabel(): string {\n\t\treturn this.name;\n\t}\n\n\tpublic getAriaLabel(): string {\n\t\treturn nls.localize('entryAriaLabel', \"{0}, symbols\", this.name);\n\t}\n\n\tpublic getIcon(): string {\n\t\treturn this.type;\n\t}\n\n\tpublic getDescription(): string {\n\t\treturn this.description;\n\t}\n\n\tpublic getType(): string {\n\t\treturn this.type;\n\t}\n\n\tpublic getRange(): Range {\n\t\treturn this.range;\n\t}\n\n\tpublic run(mode: Mode, context: IContext): boolean {\n\t\tif (mode === Mode.OPEN) {\n\t\t\treturn this.runOpen(context);\n\t\t}\n\n\t\treturn this.runPreview();\n\t}\n\n\tprivate runOpen(context: IContext): boolean {\n\n\t\t// Apply selection and focus\n\t\tlet range = this.toSelection();\n\t\tthis.editor.setSelection(range);\n\t\tthis.editor.revealRangeInCenter(range);\n\t\tthis.editor.focus();\n\n\t\treturn true;\n\t}\n\n\tprivate runPreview(): boolean {\n\n\t\t// Select Outline Position\n\t\tlet range = this.toSelection();\n\t\tthis.editor.revealRangeInCenter(range);\n\n\t\t// Decorate if possible\n\t\tthis.decorator.decorateLine(this.range, this.editor);\n\n\t\treturn false;\n\t}\n\n\tprivate toSelection(): Range {\n\t\treturn new Range(\n\t\t\tthis.range.startLineNumber,\n\t\t\tthis.range.startColumn || 1,\n\t\t\tthis.range.startLineNumber,\n\t\t\tthis.range.startColumn || 1\n\t\t);\n\t}\n}\n\n@editorAction\nexport class QuickOutlineAction extends BaseEditorQuickOpenAction {\n\n\tconstructor() {\n\t\tsuper(nls.localize('quickOutlineActionInput', \"Type the name of an identifier you wish to navigate to\"), {\n\t\t\tid: 'editor.action.quickOutline',\n\t\t\tlabel: nls.localize('QuickOutlineAction.label', \"Go to Symbol...\"),\n\t\t\talias: 'Go to Symbol...',\n\t\t\tprecondition: EditorContextKeys.hasDocumentSymbolProvider,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.focus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_O\n\t\t\t},\n\t\t\tmenuOpts: {\n\t\t\t\tgroup: 'navigation',\n\t\t\t\torder: 3\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICommonCodeEditor): TPromise {\n\n\t\tlet model = editor.getModel();\n\n\t\tif (!DocumentSymbolProviderRegistry.has(model)) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Resolve outline\n\t\treturn getDocumentSymbols(model).then((result: IOutline) => {\n\t\t\tif (result.entries.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._run(editor, result.entries);\n\t\t});\n\t}\n\n\tprivate _run(editor: ICommonCodeEditor, result: SymbolInformation[]): void {\n\t\tthis._show(this.getController(editor), {\n\t\t\tgetModel: (value: string): QuickOpenModel => {\n\t\t\t\treturn new QuickOpenModel(this.toQuickOpenEntries(editor, result, value));\n\t\t\t},\n\n\t\t\tgetAutoFocus: (searchValue: string): IAutoFocus => {\n\t\t\t\t// Remove any type pattern (:) from search value as needed\n\t\t\t\tif (searchValue.indexOf(SCOPE_PREFIX) === 0) {\n\t\t\t\t\tsearchValue = searchValue.substr(SCOPE_PREFIX.length);\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tautoFocusPrefixMatch: searchValue,\n\t\t\t\t\tautoFocusFirstEntry: !!searchValue\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate toQuickOpenEntries(editor: ICommonCodeEditor, flattened: SymbolInformation[], searchValue: string): SymbolEntry[] {\n\t\tconst controller = this.getController(editor);\n\n\t\tlet results: SymbolEntry[] = [];\n\n\t\t// Convert to Entries\n\t\tlet normalizedSearchValue = searchValue;\n\t\tif (searchValue.indexOf(SCOPE_PREFIX) === 0) {\n\t\t\tnormalizedSearchValue = normalizedSearchValue.substr(SCOPE_PREFIX.length);\n\t\t}\n\n\t\tfor (let i = 0; i < flattened.length; i++) {\n\t\t\tlet element = flattened[i];\n\t\t\tlet label = strings.trim(element.name);\n\n\t\t\t// Check for meatch\n\t\t\tlet highlights = matchesFuzzy(normalizedSearchValue, label);\n\t\t\tif (highlights) {\n\n\t\t\t\t// Show parent scope as description\n\t\t\t\tlet description: string = null;\n\t\t\t\tif (element.containerName) {\n\t\t\t\t\tdescription = element.containerName;\n\t\t\t\t}\n\n\t\t\t\t// Add\n\t\t\t\tresults.push(new SymbolEntry(label, symbolKindToCssClass(element.kind), description, Range.lift(element.location.range), highlights, editor, controller));\n\t\t\t}\n\t\t}\n\n\t\t// Sort properly if actually searching\n\t\tif (searchValue) {\n\t\t\tif (searchValue.indexOf(SCOPE_PREFIX) === 0) {\n\t\t\t\tresults = results.sort(this.sortScoped.bind(this, searchValue.toLowerCase()));\n\t\t\t} else {\n\t\t\t\tresults = results.sort(this.sortNormal.bind(this, searchValue.toLowerCase()));\n\t\t\t}\n\t\t}\n\n\t\t// Mark all type groups\n\t\tif (results.length > 0 && searchValue.indexOf(SCOPE_PREFIX) === 0) {\n\t\t\tlet currentType: string = null;\n\t\t\tlet currentResult: SymbolEntry = null;\n\t\t\tlet typeCounter = 0;\n\n\t\t\tfor (let i = 0; i < results.length; i++) {\n\t\t\t\tlet result = results[i];\n\n\t\t\t\t// Found new type\n\t\t\t\tif (currentType !== result.getType()) {\n\n\t\t\t\t\t// Update previous result with count\n\t\t\t\t\tif (currentResult) {\n\t\t\t\t\t\tcurrentResult.setGroupLabel(this.typeToLabel(currentType, typeCounter));\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentType = result.getType();\n\t\t\t\t\tcurrentResult = result;\n\t\t\t\t\ttypeCounter = 1;\n\n\t\t\t\t\tresult.setShowBorder(i > 0);\n\t\t\t\t}\n\n\t\t\t\t// Existing type, keep counting\n\t\t\t\telse {\n\t\t\t\t\ttypeCounter++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Update previous result with count\n\t\t\tif (currentResult) {\n\t\t\t\tcurrentResult.setGroupLabel(this.typeToLabel(currentType, typeCounter));\n\t\t\t}\n\t\t}\n\n\t\t// Mark first entry as outline\n\t\telse if (results.length > 0) {\n\t\t\tresults[0].setGroupLabel(nls.localize('symbols', \"symbols ({0})\", results.length));\n\t\t}\n\n\t\treturn results;\n\t}\n\n\tprivate typeToLabel(type: string, count: number): string {\n\t\tswitch (type) {\n\t\t\tcase 'module': return nls.localize('modules', \"modules ({0})\", count);\n\t\t\tcase 'class': return nls.localize('class', \"classes ({0})\", count);\n\t\t\tcase 'interface': return nls.localize('interface', \"interfaces ({0})\", count);\n\t\t\tcase 'method': return nls.localize('method', \"methods ({0})\", count);\n\t\t\tcase 'function': return nls.localize('function', \"functions ({0})\", count);\n\t\t\tcase 'property': return nls.localize('property', \"properties ({0})\", count);\n\t\t\tcase 'variable': return nls.localize('variable', \"variables ({0})\", count);\n\t\t\tcase 'var': return nls.localize('variable2', \"variables ({0})\", count);\n\t\t\tcase 'constructor': return nls.localize('_constructor', \"constructors ({0})\", count);\n\t\t\tcase 'call': return nls.localize('call', \"calls ({0})\", count);\n\t\t}\n\n\t\treturn type;\n\t}\n\n\tprivate sortNormal(searchValue: string, elementA: SymbolEntry, elementB: SymbolEntry): number {\n\t\tlet elementAName = elementA.getLabel().toLowerCase();\n\t\tlet elementBName = elementB.getLabel().toLowerCase();\n\n\t\t// Compare by name\n\t\tlet r = elementAName.localeCompare(elementBName);\n\t\tif (r !== 0) {\n\t\t\treturn r;\n\t\t}\n\n\t\t// If name identical sort by range instead\n\t\tlet elementARange = elementA.getRange();\n\t\tlet elementBRange = elementB.getRange();\n\t\treturn elementARange.startLineNumber - elementBRange.startLineNumber;\n\t}\n\n\tprivate sortScoped(searchValue: string, elementA: SymbolEntry, elementB: SymbolEntry): number {\n\n\t\t// Remove scope char\n\t\tsearchValue = searchValue.substr(SCOPE_PREFIX.length);\n\n\t\t// Sort by type first if scoped search\n\t\tlet elementAType = elementA.getType();\n\t\tlet elementBType = elementB.getType();\n\t\tlet r = elementAType.localeCompare(elementBType);\n\t\tif (r !== 0) {\n\t\t\treturn r;\n\t\t}\n\n\t\t// Special sort when searching in scoped mode\n\t\tif (searchValue) {\n\t\t\tlet elementAName = elementA.getLabel().toLowerCase();\n\t\t\tlet elementBName = elementB.getLabel().toLowerCase();\n\n\t\t\t// Compare by name\n\t\t\tlet r = elementAName.localeCompare(elementBName);\n\t\t\tif (r !== 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t}\n\n\t\t// Default to sort by range\n\t\tlet elementARange = elementA.getRange();\n\t\tlet elementBRange = elementB.getRange();\n\t\treturn elementARange.startLineNumber - elementBRange.startLineNumber;\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { empty as emptyDisposable, IDisposable, combinedDisposable } from 'vs/base/common/lifecycle';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IContextViewService } from 'vs/platform/contextview/browser/contextView';\nimport { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';\nimport { CommandsRegistry, ICommandService, ICommandHandler } from 'vs/platform/commands/common/commands';\nimport { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';\nimport { ContextKeyExpr, IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';\nimport { IActionDescriptor, IModel, IModelChangedEvent } from 'vs/editor/common/editorCommon';\nimport { ICodeEditorService } from 'vs/editor/common/services/codeEditorService';\nimport { IEditorWorkerService } from 'vs/editor/common/services/editorWorkerService';\nimport { StandaloneKeybindingService } from 'vs/editor/standalone/browser/simpleServices';\nimport { IEditorContextViewService } from 'vs/editor/standalone/browser/standaloneServices';\nimport { CodeEditor } from 'vs/editor/browser/codeEditor';\nimport { DiffEditorWidget } from 'vs/editor/browser/widget/diffEditorWidget';\nimport { ICodeEditor, IDiffEditor } from 'vs/editor/browser/editorBrowser';\nimport { IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneThemeService';\nimport { InternalEditorAction } from 'vs/editor/common/editorAction';\nimport { MenuId, MenuRegistry, IMenuItem } from 'vs/platform/actions/common/actions';\nimport { IDiffEditorOptions, IEditorOptions } from 'vs/editor/common/config/editorOptions';\nimport { IThemeService } from 'vs/platform/theme/common/themeService';\nimport * as aria from 'vs/base/browser/ui/aria/aria';\nimport * as nls from 'vs/nls';\nimport * as browser from 'vs/base/browser/browser';\n\n/**\n * The options to create an editor.\n */\nexport interface IEditorConstructionOptions extends IEditorOptions {\n\t/**\n\t * The initial model associated with this code editor.\n\t */\n\tmodel?: IModel;\n\t/**\n\t * The initial value of the auto created model in the editor.\n\t * To not create automatically a model, use `model: null`.\n\t */\n\tvalue?: string;\n\t/**\n\t * The initial language of the auto created model in the editor.\n\t * To not create automatically a model, use `model: null`.\n\t */\n\tlanguage?: string;\n\t/**\n\t * Initial theme to be used for rendering.\n\t * The current out-of-the-box available themes are: 'vs' (default), 'vs-dark', 'hc-black'.\n\t * You can create custom themes via `monaco.editor.defineTheme`.\n\t * To switch a theme, use `monaco.editor.setTheme`\n\t */\n\ttheme?: string;\n\t/**\n\t * An URL to open when Ctrl+H (Windows and Linux) or Cmd+H (OSX) is pressed in\n\t * the accessibility help dialog in the editor.\n\t *\n\t * Defaults to \"https://go.microsoft.com/fwlink/?linkid=852450\"\n\t */\n\taccessibilityHelpUrl?: string;\n}\n\n/**\n * The options to create a diff editor.\n */\nexport interface IDiffEditorConstructionOptions extends IDiffEditorOptions {\n\t/**\n\t * Initial theme to be used for rendering.\n\t * The current out-of-the-box available themes are: 'vs' (default), 'vs-dark', 'hc-black'.\n\t * You can create custom themes via `monaco.editor.defineTheme`.\n\t * To switch a theme, use `monaco.editor.setTheme`\n\t */\n\ttheme?: string;\n}\n\nexport interface IStandaloneCodeEditor extends ICodeEditor {\n\taddCommand(keybinding: number, handler: ICommandHandler, context: string): string;\n\tcreateContextKey(key: string, defaultValue: T): IContextKey;\n\taddAction(descriptor: IActionDescriptor): IDisposable;\n}\n\nexport interface IStandaloneDiffEditor extends IDiffEditor {\n\taddCommand(keybinding: number, handler: ICommandHandler, context: string): string;\n\tcreateContextKey(key: string, defaultValue: T): IContextKey;\n\taddAction(descriptor: IActionDescriptor): IDisposable;\n\n\tgetOriginalEditor(): IStandaloneCodeEditor;\n\tgetModifiedEditor(): IStandaloneCodeEditor;\n}\n\nlet LAST_GENERATED_COMMAND_ID = 0;\n\nlet ariaDomNodeCreated = false;\nfunction createAriaDomNode() {\n\tif (ariaDomNodeCreated) {\n\t\treturn;\n\t}\n\tariaDomNodeCreated = true;\n\taria.setARIAContainer(document.body);\n}\n\n/**\n * A code editor to be used both by the standalone editor and the standalone diff editor.\n */\nexport class StandaloneCodeEditor extends CodeEditor implements IStandaloneCodeEditor {\n\n\tprivate _standaloneKeybindingService: StandaloneKeybindingService;\n\n\tconstructor(\n\t\tdomElement: HTMLElement,\n\t\toptions: IEditorConstructionOptions,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t\t@ICodeEditorService codeEditorService: ICodeEditorService,\n\t\t@ICommandService commandService: ICommandService,\n\t\t@IContextKeyService contextKeyService: IContextKeyService,\n\t\t@IKeybindingService keybindingService: IKeybindingService,\n\t\t@IThemeService themeService: IThemeService\n\t) {\n\t\toptions = options || {};\n\t\toptions.ariaLabel = options.ariaLabel || nls.localize('editorViewAccessibleLabel', \"Editor content\");\n\t\toptions.ariaLabel = options.ariaLabel + ';' + (\n\t\t\tbrowser.isIE\n\t\t\t\t? nls.localize('accessibilityHelpMessageIE', \"Press Ctrl+F1 for Accessibility Options.\")\n\t\t\t\t: nls.localize('accessibilityHelpMessage', \"Press Alt+F1 for Accessibility Options.\")\n\t\t);\n\t\tsuper(domElement, options, instantiationService, codeEditorService, commandService, contextKeyService, themeService);\n\n\t\tif (keybindingService instanceof StandaloneKeybindingService) {\n\t\t\tthis._standaloneKeybindingService = keybindingService;\n\t\t}\n\n\t\t// Create the ARIA dom node as soon as the first editor is instantiated\n\t\tcreateAriaDomNode();\n\t}\n\n\tpublic addCommand(keybinding: number, handler: ICommandHandler, context: string): string {\n\t\tif (!this._standaloneKeybindingService) {\n\t\t\tconsole.warn('Cannot add command because the editor is configured with an unrecognized KeybindingService');\n\t\t\treturn null;\n\t\t}\n\t\tlet commandId = 'DYNAMIC_' + (++LAST_GENERATED_COMMAND_ID);\n\t\tlet whenExpression = ContextKeyExpr.deserialize(context);\n\t\tthis._standaloneKeybindingService.addDynamicKeybinding(commandId, keybinding, handler, whenExpression);\n\t\treturn commandId;\n\t}\n\n\tpublic createContextKey(key: string, defaultValue: T): IContextKey {\n\t\treturn this._contextKeyService.createKey(key, defaultValue);\n\t}\n\n\tpublic addAction(_descriptor: IActionDescriptor): IDisposable {\n\t\tif ((typeof _descriptor.id !== 'string') || (typeof _descriptor.label !== 'string') || (typeof _descriptor.run !== 'function')) {\n\t\t\tthrow new Error('Invalid action descriptor, `id`, `label` and `run` are required properties!');\n\t\t}\n\t\tif (!this._standaloneKeybindingService) {\n\t\t\tconsole.warn('Cannot add keybinding because the editor is configured with an unrecognized KeybindingService');\n\t\t\treturn emptyDisposable;\n\t\t}\n\n\t\t// Read descriptor options\n\t\tconst id = _descriptor.id;\n\t\tconst label = _descriptor.label;\n\t\tconst precondition = ContextKeyExpr.and(\n\t\t\tContextKeyExpr.equals('editorId', this.getId()),\n\t\t\tContextKeyExpr.deserialize(_descriptor.precondition)\n\t\t);\n\t\tconst keybindings = _descriptor.keybindings;\n\t\tconst keybindingsWhen = ContextKeyExpr.and(\n\t\t\tprecondition,\n\t\t\tContextKeyExpr.deserialize(_descriptor.keybindingContext)\n\t\t);\n\t\tconst contextMenuGroupId = _descriptor.contextMenuGroupId || null;\n\t\tconst contextMenuOrder = _descriptor.contextMenuOrder || 0;\n\t\tconst run = (): TPromise => {\n\t\t\tconst r = _descriptor.run(this);\n\t\t\treturn r ? r : TPromise.as(void 0);\n\t\t};\n\n\n\t\tlet toDispose: IDisposable[] = [];\n\n\t\t// Generate a unique id to allow the same descriptor.id across multiple editor instances\n\t\tconst uniqueId = this.getId() + ':' + id;\n\n\t\t// Register the command\n\t\ttoDispose.push(CommandsRegistry.registerCommand(uniqueId, run));\n\n\t\t// Register the context menu item\n\t\tif (contextMenuGroupId) {\n\t\t\tlet menuItem: IMenuItem = {\n\t\t\t\tcommand: {\n\t\t\t\t\tid: uniqueId,\n\t\t\t\t\ttitle: label\n\t\t\t\t},\n\t\t\t\twhen: precondition,\n\t\t\t\tgroup: contextMenuGroupId,\n\t\t\t\torder: contextMenuOrder\n\t\t\t};\n\t\t\ttoDispose.push(MenuRegistry.appendMenuItem(MenuId.EditorContext, menuItem));\n\t\t}\n\n\t\t// Register the keybindings\n\t\tif (Array.isArray(keybindings)) {\n\t\t\ttoDispose = toDispose.concat(\n\t\t\t\tkeybindings.map((kb) => {\n\t\t\t\t\treturn this._standaloneKeybindingService.addDynamicKeybinding(uniqueId, kb, run, keybindingsWhen);\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\t// Finally, register an internal editor action\n\t\tlet internalAction = new InternalEditorAction(\n\t\t\tuniqueId,\n\t\t\tlabel,\n\t\t\tlabel,\n\t\t\tprecondition,\n\t\t\trun,\n\t\t\tthis._contextKeyService\n\t\t);\n\n\t\t// Store it under the original id, such that trigger with the original id will work\n\t\tthis._actions[id] = internalAction;\n\t\ttoDispose.push({\n\t\t\tdispose: () => {\n\t\t\t\tdelete this._actions[id];\n\t\t\t}\n\t\t});\n\n\t\treturn combinedDisposable(toDispose);\n\t}\n}\n\nexport class StandaloneEditor extends StandaloneCodeEditor implements IStandaloneCodeEditor {\n\n\tprivate _contextViewService: IEditorContextViewService;\n\tprivate _ownsModel: boolean;\n\n\tconstructor(\n\t\tdomElement: HTMLElement,\n\t\toptions: IEditorConstructionOptions,\n\t\ttoDispose: IDisposable,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t\t@ICodeEditorService codeEditorService: ICodeEditorService,\n\t\t@ICommandService commandService: ICommandService,\n\t\t@IContextKeyService contextKeyService: IContextKeyService,\n\t\t@IKeybindingService keybindingService: IKeybindingService,\n\t\t@IContextViewService contextViewService: IContextViewService,\n\t\t@IStandaloneThemeService themeService: IStandaloneThemeService\n\t) {\n\t\toptions = options || {};\n\t\tif (typeof options.theme === 'string') {\n\t\t\tthemeService.setTheme(options.theme);\n\t\t}\n\t\tlet model: IModel = options.model;\n\t\tdelete options.model;\n\t\tsuper(domElement, options, instantiationService, codeEditorService, commandService, contextKeyService, keybindingService, themeService);\n\n\t\tthis._contextViewService = contextViewService;\n\t\tthis._register(toDispose);\n\n\t\tif (typeof model === 'undefined') {\n\t\t\tmodel = (self).monaco.editor.createModel(options.value || '', options.language || 'text/plain');\n\t\t\tthis._ownsModel = true;\n\t\t} else {\n\t\t\tthis._ownsModel = false;\n\t\t}\n\n\t\tthis._attachModel(model);\n\t\tif (model) {\n\t\t\tlet e: IModelChangedEvent = {\n\t\t\t\toldModelUrl: null,\n\t\t\t\tnewModelUrl: model.uri\n\t\t\t};\n\t\t\tthis._onDidChangeModel.fire(e);\n\t\t}\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t}\n\n\tpublic destroy(): void {\n\t\tthis.dispose();\n\t}\n\n\t_attachModel(model: IModel): void {\n\t\tsuper._attachModel(model);\n\t\tif (this._view) {\n\t\t\tthis._contextViewService.setContainer(this._view.domNode.domNode);\n\t\t}\n\t}\n\n\t_postDetachModelCleanup(detachedModel: IModel): void {\n\t\tsuper._postDetachModelCleanup(detachedModel);\n\t\tif (detachedModel && this._ownsModel) {\n\t\t\tdetachedModel.dispose();\n\t\t\tthis._ownsModel = false;\n\t\t}\n\t}\n}\n\nexport class StandaloneDiffEditor extends DiffEditorWidget implements IStandaloneDiffEditor {\n\n\tprivate _contextViewService: IEditorContextViewService;\n\tprivate _standaloneKeybindingService: StandaloneKeybindingService;\n\n\tconstructor(\n\t\tdomElement: HTMLElement,\n\t\toptions: IDiffEditorConstructionOptions,\n\t\ttoDispose: IDisposable,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t\t@IContextKeyService contextKeyService: IContextKeyService,\n\t\t@IKeybindingService keybindingService: IKeybindingService,\n\t\t@IContextViewService contextViewService: IContextViewService,\n\t\t@IEditorWorkerService editorWorkerService: IEditorWorkerService,\n\t\t@ICodeEditorService codeEditorService: ICodeEditorService,\n\t\t@IStandaloneThemeService themeService: IStandaloneThemeService\n\t) {\n\t\toptions = options || {};\n\t\tif (typeof options.theme === 'string') {\n\t\t\toptions.theme = themeService.setTheme(options.theme);\n\t\t}\n\n\t\tsuper(domElement, options, editorWorkerService, contextKeyService, instantiationService, codeEditorService, themeService);\n\n\t\tif (keybindingService instanceof StandaloneKeybindingService) {\n\t\t\tthis._standaloneKeybindingService = keybindingService;\n\t\t}\n\n\t\tthis._contextViewService = contextViewService;\n\n\t\tthis._register(toDispose);\n\n\t\tthis._contextViewService.setContainer(this._containerDomElement);\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t}\n\n\tpublic destroy(): void {\n\t\tthis.dispose();\n\t}\n\n\tprotected _createInnerEditor(instantiationService: IInstantiationService, container: HTMLElement, options: IEditorOptions): CodeEditor {\n\t\treturn instantiationService.createInstance(StandaloneCodeEditor, container, options);\n\t}\n\n\tpublic getOriginalEditor(): IStandaloneCodeEditor {\n\t\treturn super.getOriginalEditor();\n\t}\n\n\tpublic getModifiedEditor(): IStandaloneCodeEditor {\n\t\treturn super.getModifiedEditor();\n\t}\n\n\tpublic addCommand(keybinding: number, handler: ICommandHandler, context: string): string {\n\t\treturn this.getModifiedEditor().addCommand(keybinding, handler, context);\n\t}\n\n\tpublic createContextKey(key: string, defaultValue: T): IContextKey {\n\t\treturn this.getModifiedEditor().createContextKey(key, defaultValue);\n\t}\n\n\tpublic addAction(descriptor: IActionDescriptor): IDisposable {\n\t\treturn this.getModifiedEditor().addAction(descriptor);\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { IStandaloneThemeData } from 'vs/editor/standalone/common/standaloneThemeService';\nimport { editorBackground, editorForeground, editorSelectionHighlight, editorInactiveSelection } from 'vs/platform/theme/common/colorRegistry';\nimport { editorIndentGuides } from 'vs/editor/common/view/editorColorRegistry';\n\n/* -------------------------------- Begin vs theme -------------------------------- */\nexport const vs: IStandaloneThemeData = {\n\tbase: 'vs',\n\tinherit: false,\n\trules: [\n\t\t{ token: '', foreground: '000000', background: 'fffffe' },\n\t\t{ token: 'invalid', foreground: 'cd3131' },\n\t\t{ token: 'emphasis', fontStyle: 'italic' },\n\t\t{ token: 'strong', fontStyle: 'bold' },\n\n\t\t{ token: 'variable', foreground: '001188' },\n\t\t{ token: 'variable.predefined', foreground: '4864AA' },\n\t\t{ token: 'constant', foreground: 'dd0000' },\n\t\t{ token: 'comment', foreground: '008000' },\n\t\t{ token: 'number', foreground: '09885A' },\n\t\t{ token: 'number.hex', foreground: '3030c0' },\n\t\t{ token: 'regexp', foreground: '800000' },\n\t\t{ token: 'annotation', foreground: '808080' },\n\t\t{ token: 'type', foreground: '008080' },\n\n\t\t{ token: 'delimiter', foreground: '000000' },\n\t\t{ token: 'delimiter.html', foreground: '383838' },\n\t\t{ token: 'delimiter.xml', foreground: '0000FF' },\n\n\t\t{ token: 'tag', foreground: '800000' },\n\t\t{ token: 'tag.id.jade', foreground: '4F76AC' },\n\t\t{ token: 'tag.class.jade', foreground: '4F76AC' },\n\t\t{ token: 'meta.scss', foreground: '800000' },\n\t\t{ token: 'metatag', foreground: 'e00000' },\n\t\t{ token: 'metatag.content.html', foreground: 'FF0000' },\n\t\t{ token: 'metatag.html', foreground: '808080' },\n\t\t{ token: 'metatag.xml', foreground: '808080' },\n\t\t{ token: 'metatag.php', fontStyle: 'bold' },\n\n\t\t{ token: 'key', foreground: '863B00' },\n\t\t{ token: 'string.key.json', foreground: 'A31515' },\n\t\t{ token: 'string.value.json', foreground: '0451A5' },\n\n\t\t{ token: 'attribute.name', foreground: 'FF0000' },\n\t\t{ token: 'attribute.value', foreground: '0451A5' },\n\t\t{ token: 'attribute.value.number', foreground: '09885A' },\n\t\t{ token: 'attribute.value.unit', foreground: '09885A' },\n\t\t{ token: 'attribute.value.html', foreground: '0000FF' },\n\t\t{ token: 'attribute.value.xml', foreground: '0000FF' },\n\n\t\t{ token: 'string', foreground: 'A31515' },\n\t\t{ token: 'string.html', foreground: '0000FF' },\n\t\t{ token: 'string.sql', foreground: 'FF0000' },\n\t\t{ token: 'string.yaml', foreground: '0451A5' },\n\n\t\t{ token: 'keyword', foreground: '0000FF' },\n\t\t{ token: 'keyword.json', foreground: '0451A5' },\n\t\t{ token: 'keyword.flow', foreground: 'AF00DB' },\n\t\t{ token: 'keyword.flow.scss', foreground: '0000FF' },\n\n\t\t{ token: 'operator.scss', foreground: '666666' },\n\t\t{ token: 'operator.sql', foreground: '778899' },\n\t\t{ token: 'operator.swift', foreground: '666666' },\n\t\t{ token: 'predefined.sql', foreground: 'FF00FF' },\n\t],\n\tcolors: {\n\t\t[editorBackground]: '#FFFFFE',\n\t\t[editorForeground]: '#000000',\n\t\t[editorInactiveSelection]: '#E5EBF1',\n\t\t[editorIndentGuides]: '#D3D3D3',\n\t\t[editorSelectionHighlight]: '#ADD6FF4D'\n\t}\n};\n/* -------------------------------- End vs theme -------------------------------- */\n\n\n/* -------------------------------- Begin vs-dark theme -------------------------------- */\nexport const vs_dark: IStandaloneThemeData = {\n\tbase: 'vs-dark',\n\tinherit: false,\n\trules: [\n\t\t{ token: '', foreground: 'D4D4D4', background: '1E1E1E' },\n\t\t{ token: 'invalid', foreground: 'f44747' },\n\t\t{ token: 'emphasis', fontStyle: 'italic' },\n\t\t{ token: 'strong', fontStyle: 'bold' },\n\n\t\t{ token: 'variable', foreground: '74B0DF' },\n\t\t{ token: 'variable.predefined', foreground: '4864AA' },\n\t\t{ token: 'variable.parameter', foreground: '9CDCFE' },\n\t\t{ token: 'constant', foreground: '569CD6' },\n\t\t{ token: 'comment', foreground: '608B4E' },\n\t\t{ token: 'number', foreground: 'B5CEA8' },\n\t\t{ token: 'number.hex', foreground: '5BB498' },\n\t\t{ token: 'regexp', foreground: 'B46695' },\n\t\t{ token: 'annotation', foreground: 'cc6666' },\n\t\t{ token: 'type', foreground: '3DC9B0' },\n\n\t\t{ token: 'delimiter', foreground: 'DCDCDC' },\n\t\t{ token: 'delimiter.html', foreground: '808080' },\n\t\t{ token: 'delimiter.xml', foreground: '808080' },\n\n\t\t{ token: 'tag', foreground: '569CD6' },\n\t\t{ token: 'tag.id.jade', foreground: '4F76AC' },\n\t\t{ token: 'tag.class.jade', foreground: '4F76AC' },\n\t\t{ token: 'meta.scss', foreground: 'A79873' },\n\t\t{ token: 'meta.tag', foreground: 'CE9178' },\n\t\t{ token: 'metatag', foreground: 'DD6A6F' },\n\t\t{ token: 'metatag.content.html', foreground: '9CDCFE' },\n\t\t{ token: 'metatag.html', foreground: '569CD6' },\n\t\t{ token: 'metatag.xml', foreground: '569CD6' },\n\t\t{ token: 'metatag.php', fontStyle: 'bold' },\n\n\t\t{ token: 'key', foreground: '9CDCFE' },\n\t\t{ token: 'string.key.json', foreground: '9CDCFE' },\n\t\t{ token: 'string.value.json', foreground: 'CE9178' },\n\n\t\t{ token: 'attribute.name', foreground: '9CDCFE' },\n\t\t{ token: 'attribute.value', foreground: 'CE9178' },\n\t\t{ token: 'attribute.value.number.css', foreground: 'B5CEA8' },\n\t\t{ token: 'attribute.value.unit.css', foreground: 'B5CEA8' },\n\t\t{ token: 'attribute.value.hex.css', foreground: 'D4D4D4' },\n\n\t\t{ token: 'string', foreground: 'CE9178' },\n\t\t{ token: 'string.sql', foreground: 'FF0000' },\n\n\t\t{ token: 'keyword', foreground: '569CD6' },\n\t\t{ token: 'keyword.flow', foreground: 'C586C0' },\n\t\t{ token: 'keyword.json', foreground: 'CE9178' },\n\t\t{ token: 'keyword.flow.scss', foreground: '569CD6' },\n\n\t\t{ token: 'operator.scss', foreground: '909090' },\n\t\t{ token: 'operator.sql', foreground: '778899' },\n\t\t{ token: 'operator.swift', foreground: '909090' },\n\t\t{ token: 'predefined.sql', foreground: 'FF00FF' },\n\t],\n\tcolors: {\n\t\t[editorBackground]: '#1E1E1E',\n\t\t[editorForeground]: '#D4D4D4',\n\t\t[editorInactiveSelection]: '#3A3D41',\n\t\t[editorIndentGuides]: '#404040',\n\t\t[editorSelectionHighlight]: '#ADD6FF26'\n\t}\n};\n/* -------------------------------- End vs-dark theme -------------------------------- */\n\n\n\n/* -------------------------------- Begin hc-black theme -------------------------------- */\nexport const hc_black: IStandaloneThemeData = {\n\tbase: 'hc-black',\n\tinherit: false,\n\trules: [\n\t\t{ token: '', foreground: 'FFFFFF', background: '000000' },\n\t\t{ token: 'invalid', foreground: 'f44747' },\n\t\t{ token: 'emphasis', fontStyle: 'italic' },\n\t\t{ token: 'strong', fontStyle: 'bold' },\n\n\t\t{ token: 'variable', foreground: '1AEBFF' },\n\t\t{ token: 'variable.parameter', foreground: '9CDCFE' },\n\t\t{ token: 'constant', foreground: '569CD6' },\n\t\t{ token: 'comment', foreground: '608B4E' },\n\t\t{ token: 'number', foreground: 'FFFFFF' },\n\t\t{ token: 'regexp', foreground: 'C0C0C0' },\n\t\t{ token: 'annotation', foreground: '569CD6' },\n\t\t{ token: 'type', foreground: '3DC9B0' },\n\n\t\t{ token: 'delimiter', foreground: 'FFFF00' },\n\t\t{ token: 'delimiter.html', foreground: 'FFFF00' },\n\n\t\t{ token: 'tag', foreground: '569CD6' },\n\t\t{ token: 'tag.id.jade', foreground: '4F76AC' },\n\t\t{ token: 'tag.class.jade', foreground: '4F76AC' },\n\t\t{ token: 'meta', foreground: 'D4D4D4' },\n\t\t{ token: 'meta.tag', foreground: 'CE9178' },\n\t\t{ token: 'metatag', foreground: '569CD6' },\n\t\t{ token: 'metatag.content.html', foreground: '1AEBFF' },\n\t\t{ token: 'metatag.html', foreground: '569CD6' },\n\t\t{ token: 'metatag.xml', foreground: '569CD6' },\n\t\t{ token: 'metatag.php', fontStyle: 'bold' },\n\n\t\t{ token: 'key', foreground: '9CDCFE' },\n\t\t{ token: 'string.key', foreground: '9CDCFE' },\n\t\t{ token: 'string.value', foreground: 'CE9178' },\n\n\t\t{ token: 'attribute.name', foreground: '569CD6' },\n\t\t{ token: 'attribute.value', foreground: '3FF23F' },\n\n\t\t{ token: 'string', foreground: 'CE9178' },\n\t\t{ token: 'string.sql', foreground: 'FF0000' },\n\n\t\t{ token: 'keyword', foreground: '569CD6' },\n\t\t{ token: 'keyword.flow', foreground: 'C586C0' },\n\n\t\t{ token: 'operator.sql', foreground: '778899' },\n\t\t{ token: 'operator.swift', foreground: '909090' },\n\t\t{ token: 'predefined.sql', foreground: 'FF00FF' },\n\t],\n\tcolors: {\n\t\t[editorBackground]: '#000000',\n\t\t[editorForeground]: '#FFFFFF',\n\t\t[editorIndentGuides]: '#FFFFFF',\n\t}\n};\n/* -------------------------------- End hc-black theme -------------------------------- */\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'use strict';\n\nimport { TokenTheme, ITokenThemeRule, generateTokensCSSForColorMap } from 'vs/editor/common/modes/supports/tokenization';\nimport { IStandaloneThemeService, BuiltinTheme, IStandaloneThemeData, IStandaloneTheme, IColors } from 'vs/editor/standalone/common/standaloneThemeService';\nimport { vs, vs_dark, hc_black } from 'vs/editor/standalone/common/themes';\nimport * as dom from 'vs/base/browser/dom';\nimport { TokenizationRegistry } from 'vs/editor/common/modes';\nimport { Color } from 'vs/base/common/color';\nimport { Extensions, IColorRegistry, ColorIdentifier } from 'vs/platform/theme/common/colorRegistry';\nimport { Extensions as ThemingExtensions, IThemingRegistry, ICssStyleCollector } from 'vs/platform/theme/common/themeService';\nimport { Registry } from 'vs/platform/registry/common/platform';\nimport Event, { Emitter } from 'vs/base/common/event';\n\nconst VS_THEME_NAME = 'vs';\nconst VS_DARK_THEME_NAME = 'vs-dark';\nconst HC_BLACK_THEME_NAME = 'hc-black';\n\nconst colorRegistry = Registry.as(Extensions.ColorContribution);\nconst themingRegistry = Registry.as(ThemingExtensions.ThemingContribution);\n\nclass StandaloneTheme implements IStandaloneTheme {\n\tpublic readonly id: string;\n\tpublic readonly themeName: string;\n\tprivate rules: ITokenThemeRule[];\n\tpublic readonly base: string;\n\tprivate colors: { [colorId: string]: Color };\n\tprivate defaultColors: { [colorId: string]: Color };\n\tprivate _tokenTheme: TokenTheme;\n\n\tconstructor(base: string, name: string, colors: IColors, rules: ITokenThemeRule[]) {\n\t\tif (name.length > 0) {\n\t\t\tthis.id = base + ' ' + name;\n\t\t\tthis.themeName = name;\n\t\t} else {\n\t\t\tthis.id = base;\n\t\t\tthis.themeName = base;\n\t\t}\n\t\tthis.base = base;\n\t\tthis.rules = rules;\n\t\tthis.colors = {};\n\t\tfor (let id in colors) {\n\t\t\tthis.colors[id] = Color.fromHex(colors[id]);\n\t\t}\n\t\tthis.defaultColors = {};\n\t}\n\n\tpublic getColor(colorId: ColorIdentifier, useDefault?: boolean): Color {\n\t\tif (this.colors.hasOwnProperty(colorId)) {\n\t\t\treturn this.colors[colorId];\n\t\t}\n\t\tif (useDefault !== false) {\n\t\t\treturn this.getDefault(colorId);\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate getDefault(colorId: ColorIdentifier): Color {\n\t\tif (this.defaultColors.hasOwnProperty(colorId)) {\n\t\t\treturn this.defaultColors[colorId];\n\t\t}\n\t\tlet color = colorRegistry.resolveDefaultColor(colorId, this);\n\t\tthis.defaultColors[colorId] = color;\n\t\treturn color;\n\t}\n\n\tpublic defines(colorId: ColorIdentifier): boolean {\n\t\treturn this.colors.hasOwnProperty(colorId);\n\t}\n\n\tpublic get type() {\n\t\tswitch (this.base) {\n\t\t\tcase VS_THEME_NAME: return 'light';\n\t\t\tcase HC_BLACK_THEME_NAME: return 'hc';\n\t\t\tdefault: return 'dark';\n\t\t}\n\t}\n\n\tpublic get tokenTheme(): TokenTheme {\n\t\tif (!this._tokenTheme) {\n\t\t\tthis._tokenTheme = TokenTheme.createFromRawTokenTheme(this.rules);\n\t\t}\n\t\treturn this._tokenTheme;\n\t}\n}\n\nfunction isBuiltinTheme(themeName: string): themeName is BuiltinTheme {\n\treturn (\n\t\tthemeName === VS_THEME_NAME\n\t\t|| themeName === VS_DARK_THEME_NAME\n\t\t|| themeName === HC_BLACK_THEME_NAME\n\t);\n}\n\nfunction getBuiltinRules(builtinTheme: BuiltinTheme): IStandaloneThemeData {\n\tswitch (builtinTheme) {\n\t\tcase VS_THEME_NAME:\n\t\t\treturn vs;\n\t\tcase VS_DARK_THEME_NAME:\n\t\t\treturn vs_dark;\n\t\tcase HC_BLACK_THEME_NAME:\n\t\t\treturn hc_black;\n\t}\n}\n\nfunction newBuiltInTheme(builtinTheme: BuiltinTheme): StandaloneTheme {\n\tlet themeData = getBuiltinRules(builtinTheme);\n\treturn new StandaloneTheme(builtinTheme, '', themeData.colors, themeData.rules);\n}\n\nexport class StandaloneThemeServiceImpl implements IStandaloneThemeService {\n\n\t_serviceBrand: any;\n\n\tprivate _knownThemes: Map;\n\tprivate _styleElement: HTMLStyleElement;\n\tprivate _theme: IStandaloneTheme;\n\tprivate _onThemeChange: Emitter;\n\n\n\tconstructor() {\n\t\tthis._onThemeChange = new Emitter();\n\n\t\tthis._knownThemes = new Map();\n\t\tthis._knownThemes.set(VS_THEME_NAME, newBuiltInTheme(VS_THEME_NAME));\n\t\tthis._knownThemes.set(VS_DARK_THEME_NAME, newBuiltInTheme(VS_DARK_THEME_NAME));\n\t\tthis._knownThemes.set(HC_BLACK_THEME_NAME, newBuiltInTheme(HC_BLACK_THEME_NAME));\n\t\tthis._styleElement = dom.createStyleSheet();\n\t\tthis._styleElement.className = 'monaco-colors';\n\t\tthis.setTheme(VS_THEME_NAME);\n\t}\n\n\tpublic get onThemeChange(): Event {\n\t\treturn this._onThemeChange.event;\n\t}\n\n\tpublic defineTheme(themeName: string, themeData: IStandaloneThemeData): void {\n\t\tif (!/^[a-z0-9\\-]+$/i.test(themeName) || isBuiltinTheme(themeName)) {\n\t\t\tthrow new Error('Illegal theme name!');\n\t\t}\n\t\tif (!isBuiltinTheme(themeData.base)) {\n\t\t\tthrow new Error('Illegal theme base!');\n\t\t}\n\n\t\tlet rules: ITokenThemeRule[] = [];\n\t\tlet colors: IColors = {};\n\t\tif (themeData.inherit) {\n\t\t\tlet baseData = getBuiltinRules(themeData.base);\n\t\t\trules = rules.concat(baseData.rules);\n\t\t\tfor (let id in baseData.colors) {\n\t\t\t\tcolors[id] = baseData.colors[id];\n\t\t\t}\n\t\t}\n\t\trules = rules.concat(themeData.rules);\n\t\tfor (let id in themeData.colors) {\n\t\t\tcolors[id] = themeData.colors[id];\n\t\t}\n\n\t\tthis._knownThemes.set(themeName, new StandaloneTheme(themeData.base, themeName, colors, rules));\n\t}\n\n\tpublic getTheme(): IStandaloneTheme {\n\t\treturn this._theme;\n\t}\n\n\tpublic setTheme(themeName: string): string {\n\t\tlet theme: StandaloneTheme;\n\t\tif (this._knownThemes.has(themeName)) {\n\t\t\ttheme = this._knownThemes.get(themeName);\n\t\t} else {\n\t\t\ttheme = this._knownThemes.get(VS_THEME_NAME);\n\t\t}\n\t\tthis._theme = theme;\n\n\t\tlet cssRules: string[] = [];\n\t\tlet hasRule: { [rule: string]: boolean; } = {};\n\t\tlet ruleCollector: ICssStyleCollector = {\n\t\t\taddRule: (rule: string) => {\n\t\t\t\tif (!hasRule[rule]) {\n\t\t\t\t\tcssRules.push(rule);\n\t\t\t\t\thasRule[rule] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tthemingRegistry.getThemingParticipants().forEach(p => p(theme, ruleCollector));\n\n\t\tlet tokenTheme = theme.tokenTheme;\n\t\tlet colorMap = tokenTheme.getColorMap();\n\t\truleCollector.addRule(generateTokensCSSForColorMap(colorMap));\n\n\t\tthis._styleElement.innerHTML = cssRules.join('\\n');\n\n\t\tTokenizationRegistry.setColorMap(colorMap);\n\t\tthis._onThemeChange.fire(theme);\n\n\t\treturn theme.id;\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport URI from 'vs/base/common/uri';\nimport { createDecorator } from 'vs/platform/instantiation/common/instantiation';\nimport * as paths from 'vs/base/common/paths';\nimport { TrieMap } from 'vs/base/common/map';\nimport { isLinux } from 'vs/base/common/platform';\nimport Event from 'vs/base/common/event';\n\nexport const IWorkspaceContextService = createDecorator('contextService');\n\nexport interface IWorkspaceContextService {\n\t_serviceBrand: any;\n\n\t/**\n\t * Returns iff the application was opened with a workspace or not.\n\t */\n\thasWorkspace(): boolean;\n\n\t/**\n\t * Provides access to the workspace object the platform is running with. This may be null if the workbench was opened\n\t * without workspace (empty);\n\t */\n\tgetWorkspace(): ILegacyWorkspace;\n\n\t/**\n\t * Provides access to the workspace object the platform is running with. This may be null if the workbench was opened\n\t * without workspace (empty);\n\t */\n\tgetWorkspace2(): IWorkspace;\n\n\t/**\n\t * An event which fires on workspace roots change.\n\t */\n\tonDidChangeWorkspaceRoots: Event;\n\n\t/**\n\t * Returns the root for the given resource from the workspace.\n\t * Can be null if there is no workspace or the resource is not inside the workspace.\n\t */\n\tgetRoot(resource: URI): URI;\n\n\t/**\n\t * Returns iff the provided resource is inside the workspace or not.\n\t */\n\tisInsideWorkspace(resource: URI): boolean;\n\n\t/**\n\t * Given a resource inside the workspace, returns its relative path from the workspace root\n\t * without leading or trailing slashes. Returns null if the file is not inside an opened\n\t * workspace.\n\t */\n\ttoWorkspaceRelativePath: (resource: URI, toOSPath?: boolean) => string;\n\n\t/**\n\t * Given a workspace relative path, returns the resource with the absolute path.\n\t */\n\ttoResource: (workspaceRelativePath: string) => URI;\n}\n\nexport interface ILegacyWorkspace {\n\n\t/**\n\t * the full uri of the workspace. this is a file:// URL to the location\n\t * of the workspace on disk.\n\t */\n\tresource: URI;\n}\n\nexport interface IWorkspace {\n\n\t/**\n\t * the unique identifier of the workspace.\n\t */\n\treadonly id: string;\n\n\t/**\n\t * the name of the workspace.\n\t */\n\treadonly name: string;\n\n\t/**\n\t * Mutliple roots in this workspace. First entry is master and never changes.\n\t */\n\treadonly roots: URI[];\n}\n\nexport class LegacyWorkspace implements ILegacyWorkspace {\n\tprivate _name: string;\n\n\tconstructor(private _resource: URI, private _ctime?: number) {\n\t\tthis._name = paths.basename(this._resource.fsPath) || this._resource.fsPath;\n\t}\n\n\tpublic get resource(): URI {\n\t\treturn this._resource;\n\t}\n\n\tpublic get name(): string {\n\t\treturn this._name;\n\t}\n\n\tpublic get ctime(): number {\n\t\treturn this._ctime;\n\t}\n\n\tpublic toWorkspaceRelativePath(resource: URI, toOSPath?: boolean): string {\n\t\tif (this.contains(resource)) {\n\t\t\treturn paths.normalize(paths.relative(this._resource.fsPath, resource.fsPath), toOSPath);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate contains(resource: URI): boolean {\n\t\tif (resource) {\n\t\t\treturn paths.isEqualOrParent(resource.fsPath, this._resource.fsPath, !isLinux /* ignorecase */);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tpublic toResource(workspaceRelativePath: string, root?: URI): URI {\n\t\tif (typeof workspaceRelativePath === 'string') {\n\t\t\treturn URI.file(paths.join(root ? root.fsPath : this._resource.fsPath, workspaceRelativePath));\n\t\t}\n\n\t\treturn null;\n\t}\n}\n\nexport class Workspace implements IWorkspace {\n\n\tprivate _rootsMap: TrieMap = new TrieMap(TrieMap.PathSplitter);\n\n\tconstructor(\n\t\tpublic readonly id: string,\n\t\tprivate _name: string,\n\t\tprivate _roots: URI[]\n\t) {\n\t\tthis.updateRootsMap();\n\t}\n\n\tpublic get roots(): URI[] {\n\t\treturn this._roots;\n\t}\n\n\tpublic set roots(roots: URI[]) {\n\t\tthis._roots = roots;\n\t\tthis.updateRootsMap();\n\t}\n\n\tpublic get name(): string {\n\t\treturn this._name;\n\t}\n\n\tpublic set name(name: string) {\n\t\tthis._name = name;\n\t}\n\n\tpublic getRoot(resource: URI): URI {\n\t\tif (!resource) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this._rootsMap.findSubstr(resource.fsPath);\n\t}\n\n\tprivate updateRootsMap(): void {\n\t\tthis._rootsMap = new TrieMap(TrieMap.PathSplitter);\n\t\tfor (const root of this.roots) {\n\t\t\tthis._rootsMap.insert(root.fsPath, root);\n\t\t}\n\t}\n\n\tpublic toJSON(): IWorkspace {\n\t\treturn { id: this.id, roots: this.roots, name: this.name };\n\t}\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'use strict';\n\nimport 'vs/css!./referencesWidget';\nimport * as nls from 'vs/nls';\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { getPathLabel } from 'vs/base/common/labels';\nimport Event, { Emitter } from 'vs/base/common/event';\nimport { IDisposable, dispose, IReference } from 'vs/base/common/lifecycle';\nimport { Schemas } from 'vs/base/common/network';\nimport * as strings from 'vs/base/common/strings';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { Color } from 'vs/base/common/color';\nimport { $, Builder } from 'vs/base/browser/builder';\nimport * as dom from 'vs/base/browser/dom';\nimport { Sash, ISashEvent, IVerticalSashLayoutProvider } from 'vs/base/browser/ui/sash/sash';\nimport { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';\nimport { IMouseEvent } from 'vs/base/browser/mouseEvent';\nimport { GestureEvent } from 'vs/base/browser/touch';\nimport { CountBadge } from 'vs/base/browser/ui/countBadge/countBadge';\nimport { FileLabel } from 'vs/base/browser/ui/iconLabel/iconLabel';\nimport * as tree from 'vs/base/parts/tree/browser/tree';\nimport { DefaultController } from 'vs/base/parts/tree/browser/treeDefaults';\nimport { Tree } from 'vs/base/parts/tree/browser/treeImpl';\nimport { IInstantiationService, optional } from 'vs/platform/instantiation/common/instantiation';\nimport { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';\nimport { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';\nimport { Range, IRange } from 'vs/editor/common/core/range';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { Model } from 'vs/editor/common/model/model';\nimport { ICodeEditor } from 'vs/editor/browser/editorBrowser';\nimport { EmbeddedCodeEditorWidget } from 'vs/editor/browser/widget/embeddedCodeEditorWidget';\nimport { PeekViewWidget, IPeekViewService } from 'vs/editor/contrib/zoneWidget/browser/peekViewWidget';\nimport { FileReferences, OneReference, ReferencesModel } from './referencesModel';\nimport { ITextModelService, ITextEditorModel } from 'vs/editor/common/services/resolverService';\nimport { registerColor, activeContrastBorder, contrastBorder } from 'vs/platform/theme/common/colorRegistry';\nimport { registerThemingParticipant, ITheme, IThemeService } from 'vs/platform/theme/common/themeService';\nimport { attachListStyler, attachBadgeStyler } from 'vs/platform/theme/common/styler';\nimport { IModelDecorationsChangedEvent } from 'vs/editor/common/model/textModelEvents';\nimport { IEditorOptions } from 'vs/editor/common/config/editorOptions';\nimport { IEnvironmentService } from 'vs/platform/environment/common/environment';\nimport { ModelDecorationOptions } from 'vs/editor/common/model/textModelWithDecorations';\nimport URI from 'vs/base/common/uri';\n\nclass DecorationsManager implements IDisposable {\n\n\tprivate static DecorationOptions = ModelDecorationOptions.register({\n\t\tstickiness: editorCommon.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\tclassName: 'reference-decoration'\n\t});\n\n\tprivate _decorations = new Map();\n\tprivate _decorationIgnoreSet = new Set();\n\tprivate _callOnDispose: IDisposable[] = [];\n\tprivate _callOnModelChange: IDisposable[] = [];\n\n\tconstructor(private _editor: ICodeEditor, private _model: ReferencesModel) {\n\t\tthis._callOnDispose.push(this._editor.onDidChangeModel(() => this._onModelChanged()));\n\t\tthis._onModelChanged();\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._callOnModelChange = dispose(this._callOnModelChange);\n\t\tthis._callOnDispose = dispose(this._callOnDispose);\n\t\tthis.removeDecorations();\n\t}\n\n\tprivate _onModelChanged(): void {\n\t\tthis._callOnModelChange = dispose(this._callOnModelChange);\n\t\tconst model = this._editor.getModel();\n\t\tif (model) {\n\t\t\tfor (const ref of this._model.groups) {\n\t\t\t\tif (ref.uri.toString() === model.uri.toString()) {\n\t\t\t\t\tthis._addDecorations(ref);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _addDecorations(reference: FileReferences): void {\n\t\tthis._callOnModelChange.push(this._editor.getModel().onDidChangeDecorations((event) => this._onDecorationChanged(event)));\n\n\t\tthis._editor.changeDecorations(accessor => {\n\n\t\t\tconst newDecorations: editorCommon.IModelDeltaDecoration[] = [];\n\t\t\tconst newDecorationsActualIndex: number[] = [];\n\n\t\t\tfor (let i = 0, len = reference.children.length; i < len; i++) {\n\t\t\t\tlet oneReference = reference.children[i];\n\t\t\t\tif (this._decorationIgnoreSet.has(oneReference.id)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tnewDecorations.push({\n\t\t\t\t\trange: oneReference.range,\n\t\t\t\t\toptions: DecorationsManager.DecorationOptions\n\t\t\t\t});\n\t\t\t\tnewDecorationsActualIndex.push(i);\n\t\t\t}\n\n\t\t\tconst decorations = accessor.deltaDecorations([], newDecorations);\n\t\t\tfor (let i = 0; i < decorations.length; i++) {\n\t\t\t\tthis._decorations.set(decorations[i], reference.children[newDecorationsActualIndex[i]]);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _onDecorationChanged(event: IModelDecorationsChangedEvent): void {\n\t\tconst changedDecorations = event.changedDecorations,\n\t\t\ttoRemove: string[] = [];\n\n\t\tfor (let i = 0, len = changedDecorations.length; i < len; i++) {\n\t\t\tlet reference = this._decorations.get(changedDecorations[i]);\n\t\t\tif (!reference) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst newRange = this._editor.getModel().getDecorationRange(changedDecorations[i]);\n\t\t\tlet ignore = false;\n\n\t\t\tif (Range.equalsRange(newRange, reference.range)) {\n\t\t\t\tcontinue;\n\n\t\t\t} else if (Range.spansMultipleLines(newRange)) {\n\t\t\t\tignore = true;\n\n\t\t\t} else {\n\t\t\t\tconst lineLength = reference.range.endColumn - reference.range.startColumn;\n\t\t\t\tconst newLineLength = newRange.endColumn - newRange.startColumn;\n\n\t\t\t\tif (lineLength !== newLineLength) {\n\t\t\t\t\tignore = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ignore) {\n\t\t\t\tthis._decorationIgnoreSet.add(reference.id);\n\t\t\t\ttoRemove.push(changedDecorations[i]);\n\t\t\t} else {\n\t\t\t\treference.range = newRange;\n\t\t\t}\n\t\t}\n\n\t\tthis._editor.changeDecorations((accessor) => {\n\t\t\tfor (let i = 0, len = toRemove.length; i < len; i++) {\n\t\t\t\tthis._decorations.delete(toRemove[i]);\n\t\t\t}\n\t\t\taccessor.deltaDecorations(toRemove, []);\n\t\t});\n\t}\n\n\tpublic removeDecorations(): void {\n\t\tthis._editor.changeDecorations(accessor => {\n\t\t\tthis._decorations.forEach((value, key) => {\n\t\t\t\taccessor.removeDecoration(key);\n\t\t\t});\n\t\t\tthis._decorations.clear();\n\t\t});\n\t}\n}\n\nclass DataSource implements tree.IDataSource {\n\n\tconstructor(\n\t\t@ITextModelService private _textModelResolverService: ITextModelService\n\t) {\n\t\t//\n\t}\n\n\tpublic getId(tree: tree.ITree, element: any): string {\n\t\tif (element instanceof ReferencesModel) {\n\t\t\treturn 'root';\n\t\t} else if (element instanceof FileReferences) {\n\t\t\treturn (element).id;\n\t\t} else if (element instanceof OneReference) {\n\t\t\treturn (element).id;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tpublic hasChildren(tree: tree.ITree, element: any): boolean {\n\t\tif (element instanceof ReferencesModel) {\n\t\t\treturn true;\n\t\t}\n\t\tif (element instanceof FileReferences && !(element).failure) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic getChildren(tree: tree.ITree, element: ReferencesModel | FileReferences): TPromise {\n\t\tif (element instanceof ReferencesModel) {\n\t\t\treturn TPromise.as(element.groups);\n\t\t} else if (element instanceof FileReferences) {\n\t\t\treturn element.resolve(this._textModelResolverService).then(val => {\n\t\t\t\tif (element.failure) {\n\t\t\t\t\t// refresh the element on failure so that\n\t\t\t\t\t// we can update its rendering\n\t\t\t\t\treturn tree.refresh(element).then(() => val.children);\n\t\t\t\t}\n\t\t\t\treturn val.children;\n\t\t\t});\n\t\t} else {\n\t\t\treturn TPromise.as([]);\n\t\t}\n\t}\n\n\tpublic getParent(tree: tree.ITree, element: any): TPromise {\n\t\tvar result: any = null;\n\t\tif (element instanceof FileReferences) {\n\t\t\tresult = (element).parent;\n\t\t} else if (element instanceof OneReference) {\n\t\t\tresult = (element).parent;\n\t\t}\n\t\treturn TPromise.as(result);\n\t}\n}\n\nclass Controller extends DefaultController {\n\n\tstatic Events = {\n\t\tFOCUSED: 'events/custom/focused',\n\t\tSELECTED: 'events/custom/selected',\n\t\tOPEN_TO_SIDE: 'events/custom/opentoside'\n\t};\n\n\tpublic onTap(tree: tree.ITree, element: any, event: GestureEvent): boolean {\n\t\tif (element instanceof FileReferences) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn this._expandCollapse(tree, element);\n\t\t}\n\n\t\tvar result = super.onTap(tree, element, event);\n\t\ttree.emit(Controller.Events.FOCUSED, element);\n\t\treturn result;\n\t}\n\n\tpublic onMouseDown(tree: tree.ITree, element: any, event: IMouseEvent): boolean {\n\t\tif (event.leftButton) {\n\t\t\tif (element instanceof FileReferences) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\treturn this._expandCollapse(tree, element);\n\t\t\t}\n\n\t\t\tvar result = super.onClick(tree, element, event);\n\t\t\tif (event.ctrlKey || event.metaKey) {\n\t\t\t\ttree.emit(Controller.Events.OPEN_TO_SIDE, element);\n\t\t\t} else if (event.detail === 2) {\n\t\t\t\ttree.emit(Controller.Events.SELECTED, element);\n\t\t\t} else {\n\t\t\t\ttree.emit(Controller.Events.FOCUSED, element);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tpublic onClick(tree: tree.ITree, element: any, event: IMouseEvent): boolean {\n\t\tif (event.leftButton) {\n\t\t\treturn false; // Already handled by onMouseDown\n\t\t}\n\n\t\treturn super.onClick(tree, element, event);\n\t}\n\n\tprivate _expandCollapse(tree: tree.ITree, element: any): boolean {\n\n\t\tif (tree.isExpanded(element)) {\n\t\t\ttree.collapse(element).done(null, onUnexpectedError);\n\t\t} else {\n\t\t\ttree.expand(element).done(null, onUnexpectedError);\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic onEscape(tree: tree.ITree, event: IKeyboardEvent): boolean {\n\t\treturn false;\n\t}\n\n\tpublic onEnter(tree: tree.ITree, event: IKeyboardEvent): boolean {\n\t\tvar element = tree.getFocus();\n\t\tif (element instanceof FileReferences) {\n\t\t\treturn this._expandCollapse(tree, element);\n\t\t}\n\n\t\tvar result = super.onEnter(tree, event);\n\t\tif (event.ctrlKey || event.metaKey) {\n\t\t\ttree.emit(Controller.Events.OPEN_TO_SIDE, element);\n\t\t} else {\n\t\t\ttree.emit(Controller.Events.SELECTED, element);\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic onUp(tree: tree.ITree, event: IKeyboardEvent): boolean {\n\t\tsuper.onUp(tree, event);\n\t\tthis._fakeFocus(tree, event);\n\t\treturn true;\n\t}\n\n\tpublic onPageUp(tree: tree.ITree, event: IKeyboardEvent): boolean {\n\t\tsuper.onPageUp(tree, event);\n\t\tthis._fakeFocus(tree, event);\n\t\treturn true;\n\t}\n\n\tpublic onLeft(tree: tree.ITree, event: IKeyboardEvent): boolean {\n\t\tsuper.onLeft(tree, event);\n\t\tthis._fakeFocus(tree, event);\n\t\treturn true;\n\t}\n\n\tpublic onDown(tree: tree.ITree, event: IKeyboardEvent): boolean {\n\t\tsuper.onDown(tree, event);\n\t\tthis._fakeFocus(tree, event);\n\t\treturn true;\n\t}\n\n\tpublic onPageDown(tree: tree.ITree, event: IKeyboardEvent): boolean {\n\t\tsuper.onPageDown(tree, event);\n\t\tthis._fakeFocus(tree, event);\n\t\treturn true;\n\t}\n\n\tpublic onRight(tree: tree.ITree, event: IKeyboardEvent): boolean {\n\t\tsuper.onRight(tree, event);\n\t\tthis._fakeFocus(tree, event);\n\t\treturn true;\n\t}\n\n\tprivate _fakeFocus(tree: tree.ITree, event: IKeyboardEvent): void {\n\t\t// focus next item\n\t\tvar focus = tree.getFocus();\n\t\ttree.setSelection([focus]);\n\t\t// send out event\n\t\ttree.emit(Controller.Events.FOCUSED, focus);\n\t}\n}\n\nclass FileReferencesTemplate {\n\n\treadonly file: FileLabel;\n\treadonly badge: CountBadge;\n\treadonly dispose: () => void;\n\n\tconstructor(\n\t\tcontainer: HTMLElement,\n\t\t@IWorkspaceContextService private _contextService: IWorkspaceContextService,\n\t\t@optional(IEnvironmentService) private _environmentService: IEnvironmentService,\n\t\t@IThemeService themeService: IThemeService,\n\t) {\n\t\tconst parent = document.createElement('div');\n\t\tdom.addClass(parent, 'reference-file');\n\t\tcontainer.appendChild(parent);\n\n\t\tthis.file = new FileLabel(parent, URI.parse('no:file'), this._contextService, this._environmentService);\n\t\tthis.badge = new CountBadge(parent);\n\t\tconst styler = attachBadgeStyler(this.badge, themeService);\n\t\tthis.dispose = () => styler.dispose();\n\t}\n\n\tset(element: FileReferences) {\n\t\tthis.file.setFile(element.uri, this._contextService, this._environmentService);\n\t\tconst len = element.children.length;\n\t\tthis.badge.setCount(len);\n\t\tif (element.failure) {\n\t\t\tthis.badge.setTitleFormat(nls.localize('referencesFailre', \"Failed to resolve file.\"));\n\t\t} else if (len > 1) {\n\t\t\tthis.badge.setTitleFormat(nls.localize('referencesCount', \"{0} references\", len));\n\t\t} else {\n\t\t\tthis.badge.setTitleFormat(nls.localize('referenceCount', \"{0} reference\", len));\n\t\t}\n\t}\n}\n\nclass OneReferenceTemplate {\n\n\treadonly before: HTMLSpanElement;\n\treadonly inside: HTMLSpanElement;\n\treadonly after: HTMLSpanElement;\n\n\tconstructor(container: HTMLElement) {\n\t\tconst parent = document.createElement('div');\n\t\tthis.before = document.createElement('span');\n\t\tthis.inside = document.createElement('span');\n\t\tthis.after = document.createElement('span');\n\t\tdom.addClass(this.inside, 'referenceMatch');\n\t\tdom.addClass(parent, 'reference');\n\t\tparent.appendChild(this.before);\n\t\tparent.appendChild(this.inside);\n\t\tparent.appendChild(this.after);\n\t\tcontainer.appendChild(parent);\n\t}\n\n\tset(element: OneReference): void {\n\t\tconst { before, inside, after } = element.parent.preview.preview(element.range);\n\t\tthis.before.innerHTML = strings.escape(before);\n\t\tthis.inside.innerHTML = strings.escape(inside);\n\t\tthis.after.innerHTML = strings.escape(after);\n\t}\n}\n\nclass Renderer implements tree.IRenderer {\n\n\tprivate static _ids = {\n\t\tFileReferences: 'FileReferences',\n\t\tOneReference: 'OneReference'\n\t};\n\n\tconstructor(\n\t\t@IWorkspaceContextService private _contextService: IWorkspaceContextService,\n\t\t@IThemeService private _themeService: IThemeService,\n\t\t@optional(IEnvironmentService) private _environmentService: IEnvironmentService,\n\t) {\n\t\t//\n\t}\n\n\tgetHeight(tree: tree.ITree, element: FileReferences | OneReference): number {\n\t\treturn 22;\n\t}\n\n\tgetTemplateId(tree: tree.ITree, element: FileReferences | OneReference): string {\n\t\tif (element instanceof FileReferences) {\n\t\t\treturn Renderer._ids.FileReferences;\n\t\t} else if (element instanceof OneReference) {\n\t\t\treturn Renderer._ids.OneReference;\n\t\t}\n\t\tthrow element;\n\t}\n\n\trenderTemplate(tree: tree.ITree, templateId: string, container: HTMLElement) {\n\t\tif (templateId === Renderer._ids.FileReferences) {\n\t\t\treturn new FileReferencesTemplate(container, this._contextService, this._environmentService, this._themeService);\n\t\t} else if (templateId === Renderer._ids.OneReference) {\n\t\t\treturn new OneReferenceTemplate(container);\n\t\t}\n\t\tthrow templateId;\n\t}\n\n\trenderElement(tree: tree.ITree, element: FileReferences | OneReference, templateId: string, templateData: any): void {\n\t\tif (element instanceof FileReferences) {\n\t\t\t(templateData).set(element);\n\t\t} else if (element instanceof OneReference) {\n\t\t\t(templateData).set(element);\n\t\t} else {\n\t\t\tthrow templateId;\n\t\t}\n\t}\n\n\tdisposeTemplate(tree: tree.ITree, templateId: string, templateData: FileReferencesTemplate | OneReferenceTemplate): void {\n\t\tif (templateData instanceof FileReferencesTemplate) {\n\t\t\ttemplateData.dispose();\n\t\t}\n\t}\n}\n\nclass AriaProvider implements tree.IAccessibilityProvider {\n\n\tgetAriaLabel(tree: tree.ITree, element: FileReferences | OneReference): string {\n\t\tif (element instanceof FileReferences) {\n\t\t\treturn element.getAriaMessage();\n\t\t} else if (element instanceof OneReference) {\n\t\t\treturn element.getAriaMessage();\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t}\n}\n\nclass VSash {\n\n\tprivate _disposables: IDisposable[] = [];\n\tprivate _sash: Sash;\n\tprivate _ratio: number;\n\tprivate _height: number;\n\tprivate _width: number;\n\tprivate _onDidChangePercentages = new Emitter();\n\n\tconstructor(container: HTMLElement, ratio: number) {\n\t\tthis._ratio = ratio;\n\t\tthis._sash = new Sash(container, {\n\t\t\tgetVerticalSashLeft: () => this._width * this._ratio,\n\t\t\tgetVerticalSashHeight: () => this._height\n\t\t});\n\n\t\t// compute the current widget clientX postion since\n\t\t// the sash works with clientX when dragging\n\t\tlet clientX: number;\n\t\tthis._disposables.push(this._sash.addListener('start', (e: ISashEvent) => {\n\t\t\tclientX = e.startX - (this._width * this.ratio);\n\t\t}));\n\n\t\tthis._disposables.push(this._sash.addListener('change', (e: ISashEvent) => {\n\t\t\t// compute the new position of the sash and from that\n\t\t\t// compute the new ratio that we are using\n\t\t\tlet newLeft = e.currentX - clientX;\n\t\t\tif (newLeft > 20 && newLeft + 20 < this._width) {\n\t\t\t\tthis._ratio = newLeft / this._width;\n\t\t\t\tthis._sash.layout();\n\t\t\t\tthis._onDidChangePercentages.fire(this);\n\t\t\t}\n\t\t}));\n\t}\n\n\tdispose() {\n\t\tthis._sash.dispose();\n\t\tthis._onDidChangePercentages.dispose();\n\t\tdispose(this._disposables);\n\t}\n\n\tget onDidChangePercentages() {\n\t\treturn this._onDidChangePercentages.event;\n\t}\n\n\tset width(value: number) {\n\t\tthis._width = value;\n\t\tthis._sash.layout();\n\t}\n\n\tset height(value: number) {\n\t\tthis._height = value;\n\t\tthis._sash.layout();\n\t}\n\n\tget percentages() {\n\t\tlet left = 100 * this._ratio;\n\t\tlet right = 100 - left;\n\t\treturn [`${left}%`, `${right}%`];\n\t}\n\n\tget ratio() {\n\t\treturn this._ratio;\n\t}\n}\n\nexport interface LayoutData {\n\tratio: number;\n\theightInLines: number;\n}\n\nexport interface SelectionEvent {\n\tkind: 'goto' | 'show' | 'side' | 'open';\n\tsource: 'editor' | 'tree' | 'title';\n\telement: OneReference;\n}\n\n/**\n * ZoneWidget that is shown inside the editor\n */\nexport class ReferenceWidget extends PeekViewWidget {\n\n\tprivate _model: ReferencesModel;\n\tprivate _decorationsManager: DecorationsManager;\n\n\tprivate _disposeOnNewModel: IDisposable[] = [];\n\tprivate _callOnDispose: IDisposable[] = [];\n\tprivate _onDidSelectReference = new Emitter();\n\n\tprivate _tree: Tree;\n\tprivate _treeContainer: Builder;\n\tprivate _sash: VSash;\n\tprivate _preview: ICodeEditor;\n\tprivate _previewModelReference: IReference;\n\tprivate _previewNotAvailableMessage: Model;\n\tprivate _previewContainer: Builder;\n\tprivate _messageContainer: Builder;\n\n\tconstructor(\n\t\teditor: ICodeEditor,\n\t\tpublic layoutData: LayoutData,\n\t\tprivate _textModelResolverService: ITextModelService,\n\t\tprivate _contextService: IWorkspaceContextService,\n\t\tprivate _themeService: IThemeService,\n\t\tprivate _instantiationService: IInstantiationService,\n\t\tprivate _environmentService: IEnvironmentService\n\t) {\n\t\tsuper(editor, { showFrame: false, showArrow: true, isResizeable: true, isAccessible: true });\n\n\t\tthis._applyTheme(_themeService.getTheme());\n\t\tthis._callOnDispose.push(_themeService.onThemeChange(this._applyTheme.bind(this)));\n\n\t\tthis._instantiationService = this._instantiationService.createChild(new ServiceCollection([IPeekViewService, this]));\n\t\tthis.create();\n\t}\n\n\tprivate _applyTheme(theme: ITheme) {\n\t\tlet borderColor = theme.getColor(peekViewBorder) || Color.transparent;\n\t\tthis.style({\n\t\t\tarrowColor: borderColor,\n\t\t\tframeColor: borderColor,\n\t\t\theaderBackgroundColor: theme.getColor(peekViewTitleBackground) || Color.transparent,\n\t\t\tprimaryHeadingColor: theme.getColor(peekViewTitleForeground),\n\t\t\tsecondaryHeadingColor: theme.getColor(peekViewTitleInfoForeground)\n\t\t});\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.setModel(null);\n\t\tthis._callOnDispose = dispose(this._callOnDispose);\n\t\tdispose(this._preview, this._previewNotAvailableMessage, this._tree, this._sash, this._previewModelReference);\n\t\tsuper.dispose();\n\t}\n\n\tget onDidSelectReference(): Event {\n\t\treturn this._onDidSelectReference.event;\n\t}\n\n\tshow(where: IRange) {\n\t\tthis.editor.revealRangeInCenterIfOutsideViewport(where);\n\t\tsuper.show(where, this.layoutData.heightInLines || 18);\n\t}\n\n\tfocus(): void {\n\t\tthis._tree.DOMFocus();\n\t}\n\n\tprotected _onTitleClick(e: MouseEvent): void {\n\t\tif (this._preview && this._preview.getModel()) {\n\t\t\tthis._onDidSelectReference.fire({\n\t\t\t\telement: this._getFocusedReference(),\n\t\t\t\tkind: e.ctrlKey || e.metaKey ? 'side' : 'open',\n\t\t\t\tsource: 'title'\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected _fillBody(containerElement: HTMLElement): void {\n\t\tvar container = $(containerElement);\n\n\t\tthis.setCssClass('reference-zone-widget');\n\n\t\t// message pane\n\t\tcontainer.div({ 'class': 'messages' }, div => {\n\t\t\tthis._messageContainer = div.hide();\n\t\t});\n\n\t\t// editor\n\t\tcontainer.div({ 'class': 'preview inline' }, (div: Builder) => {\n\n\t\t\tvar options: IEditorOptions = {\n\t\t\t\tscrollBeyondLastLine: false,\n\t\t\t\tscrollbar: {\n\t\t\t\t\tverticalScrollbarSize: 14,\n\t\t\t\t\thorizontal: 'auto',\n\t\t\t\t\tuseShadows: true,\n\t\t\t\t\tverticalHasArrows: false,\n\t\t\t\t\thorizontalHasArrows: false\n\t\t\t\t},\n\t\t\t\toverviewRulerLanes: 2,\n\t\t\t\tfixedOverflowWidgets: true,\n\t\t\t\tminimap: {\n\t\t\t\t\tenabled: false\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis._preview = this._instantiationService.createInstance(EmbeddedCodeEditorWidget, div.getHTMLElement(), options, this.editor);\n\t\t\tthis._previewContainer = div.hide();\n\t\t\tthis._previewNotAvailableMessage = Model.createFromString(nls.localize('missingPreviewMessage', \"no preview available\"));\n\t\t});\n\n\t\t// sash\n\t\tthis._sash = new VSash(containerElement, this.layoutData.ratio || .8);\n\t\tthis._sash.onDidChangePercentages(() => {\n\t\t\tlet [left, right] = this._sash.percentages;\n\t\t\tthis._previewContainer.style({ width: left });\n\t\t\tthis._treeContainer.style({ width: right });\n\t\t\tthis._preview.layout();\n\t\t\tthis._tree.layout();\n\t\t\tthis.layoutData.ratio = this._sash.ratio;\n\t\t});\n\n\t\t// tree\n\t\tcontainer.div({ 'class': 'ref-tree inline' }, (div: Builder) => {\n\t\t\tvar config = {\n\t\t\t\tdataSource: this._instantiationService.createInstance(DataSource),\n\t\t\t\trenderer: this._instantiationService.createInstance(Renderer),\n\t\t\t\tcontroller: new Controller(),\n\t\t\t\taccessibilityProvider: new AriaProvider()\n\t\t\t};\n\n\t\t\tvar options = {\n\t\t\t\tallowHorizontalScroll: false,\n\t\t\t\ttwistiePixels: 20,\n\t\t\t\tariaLabel: nls.localize('treeAriaLabel', \"References\")\n\t\t\t};\n\t\t\tthis._tree = new Tree(div.getHTMLElement(), config, options);\n\t\t\tthis._callOnDispose.push(attachListStyler(this._tree, this._themeService));\n\n\t\t\tthis._treeContainer = div.hide();\n\t\t});\n\t}\n\n\tprotected _doLayoutBody(heightInPixel: number, widthInPixel: number): void {\n\t\tsuper._doLayoutBody(heightInPixel, widthInPixel);\n\n\t\tconst height = heightInPixel + 'px';\n\t\tthis._sash.height = heightInPixel;\n\t\tthis._sash.width = widthInPixel;\n\n\t\t// set height/width\n\t\tconst [left, right] = this._sash.percentages;\n\t\tthis._previewContainer.style({ height, width: left });\n\t\tthis._treeContainer.style({ height, width: right });\n\n\t\t// forward\n\t\tthis._tree.layout(heightInPixel);\n\t\tthis._preview.layout();\n\n\t\t// store layout data\n\t\tthis.layoutData = {\n\t\t\theightInLines: this._viewZone.heightInLines,\n\t\t\tratio: this._sash.ratio\n\t\t};\n\t}\n\n\tpublic _onWidth(widthInPixel: number): void {\n\t\tthis._sash.width = widthInPixel;\n\t\tthis._preview.layout();\n\t}\n\n\tpublic setSelection(selection: OneReference): TPromise {\n\t\treturn this._revealReference(selection);\n\t}\n\n\tpublic setModel(newModel: ReferencesModel): TPromise {\n\t\t// clean up\n\t\tthis._disposeOnNewModel = dispose(this._disposeOnNewModel);\n\t\tthis._model = newModel;\n\t\tif (this._model) {\n\t\t\treturn this._onNewModel();\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate _onNewModel(): TPromise {\n\n\t\tif (this._model.empty) {\n\t\t\tthis.setTitle('');\n\t\t\tthis._messageContainer.innerHtml(nls.localize('noResults', \"No results\")).show();\n\t\t\treturn TPromise.as(void 0);\n\t\t}\n\n\t\tthis._messageContainer.hide();\n\t\tthis._decorationsManager = new DecorationsManager(this._preview, this._model);\n\t\tthis._disposeOnNewModel.push(this._decorationsManager);\n\n\t\t// listen on model changes\n\t\tthis._disposeOnNewModel.push(this._model.onDidChangeReferenceRange(reference => this._tree.refresh(reference)));\n\n\t\t// listen on selection and focus\n\t\tthis._disposeOnNewModel.push(this._tree.addListener(Controller.Events.FOCUSED, (element) => {\n\t\t\tif (element instanceof OneReference) {\n\t\t\t\tthis._revealReference(element);\n\t\t\t\tthis._onDidSelectReference.fire({ element, kind: 'show', source: 'tree' });\n\t\t\t}\n\t\t}));\n\n\t\tthis._disposeOnNewModel.push(this._tree.addListener(Controller.Events.SELECTED, (element: any) => {\n\t\t\tif (element instanceof OneReference) {\n\t\t\t\tthis._onDidSelectReference.fire({ element, kind: 'goto', source: 'tree' });\n\t\t\t}\n\t\t}));\n\t\tthis._disposeOnNewModel.push(this._tree.addListener(Controller.Events.OPEN_TO_SIDE, (element: any) => {\n\t\t\tif (element instanceof OneReference) {\n\t\t\t\tthis._onDidSelectReference.fire({ element, kind: 'side', source: 'tree' });\n\t\t\t}\n\t\t}));\n\n\t\t// listen on editor\n\t\tthis._disposeOnNewModel.push(this._preview.onMouseDown((e) => {\n\t\t\tif (e.event.detail === 2) {\n\t\t\t\tthis._onDidSelectReference.fire({\n\t\t\t\t\telement: this._getFocusedReference(),\n\t\t\t\t\tkind: (e.event.ctrlKey || e.event.metaKey) ? 'side' : 'open',\n\t\t\t\t\tsource: 'editor'\n\t\t\t\t});\n\t\t\t}\n\t\t}));\n\n\t\t// make sure things are rendered\n\t\tdom.addClass(this.container, 'results-loaded');\n\t\tthis._treeContainer.show();\n\t\tthis._previewContainer.show();\n\t\tthis._preview.layout();\n\t\tthis._tree.layout();\n\t\tthis.focus();\n\n\t\t// pick input and a reference to begin with\n\t\tconst input = this._model.groups.length === 1 ? this._model.groups[0] : this._model;\n\t\treturn this._tree.setInput(input);\n\t}\n\n\tprivate _getFocusedReference(): OneReference {\n\t\tconst element = this._tree.getFocus();\n\t\tif (element instanceof OneReference) {\n\t\t\treturn element;\n\t\t} else if (element instanceof FileReferences) {\n\t\t\tif (element.children.length > 0) {\n\t\t\t\treturn element.children[0];\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate _revealReference(reference: OneReference) {\n\n\t\t// Update widget header\n\t\tif (reference.uri.scheme !== Schemas.inMemory) {\n\t\t\tthis.setTitle(reference.name, getPathLabel(reference.directory, this._contextService, this._environmentService));\n\t\t} else {\n\t\t\tthis.setTitle(nls.localize('peekView.alternateTitle', \"References\"));\n\t\t}\n\n\t\tconst promise = this._textModelResolverService.createModelReference(reference.uri);\n\n\t\treturn TPromise.join([promise, this._tree.reveal(reference)]).then(values => {\n\t\t\tconst ref = values[0];\n\n\t\t\tif (!this._model) {\n\t\t\t\tref.dispose();\n\t\t\t\t// disposed\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdispose(this._previewModelReference);\n\n\t\t\t// show in editor\n\t\t\tconst model = ref.object;\n\t\t\tif (model) {\n\t\t\t\tthis._previewModelReference = ref;\n\t\t\t\tthis._preview.setModel(model.textEditorModel);\n\t\t\t\tvar sel = Range.lift(reference.range).collapseToStart();\n\t\t\t\tthis._preview.setSelection(sel);\n\t\t\t\tthis._preview.revealRangeInCenter(sel);\n\t\t\t} else {\n\t\t\t\tthis._preview.setModel(this._previewNotAvailableMessage);\n\t\t\t\tref.dispose();\n\t\t\t}\n\n\t\t\t// show in tree\n\t\t\tthis._tree.setSelection([reference]);\n\t\t\tthis._tree.setFocus(reference);\n\n\t\t}, onUnexpectedError);\n\t}\n}\n\n// theming\n\nexport const peekViewTitleBackground = registerColor('peekViewTitle.background', { dark: '#1E1E1E', light: '#FFFFFF', hc: '#0C141F' }, nls.localize('peekViewTitleBackground', 'Background color of the peek view title area.'));\nexport const peekViewTitleForeground = registerColor('peekViewTitleLabel.foreground', { dark: '#FFFFFF', light: '#333333', hc: '#FFFFFF' }, nls.localize('peekViewTitleForeground', 'Color of the peek view title.'));\nexport const peekViewTitleInfoForeground = registerColor('peekViewTitleDescription.foreground', { dark: '#ccccccb3', light: '#6c6c6cb3', hc: '#FFFFFF99' }, nls.localize('peekViewTitleInfoForeground', 'Color of the peek view title info.'));\nexport const peekViewBorder = registerColor('peekView.border', { dark: '#007acc', light: '#007acc', hc: contrastBorder }, nls.localize('peekViewBorder', 'Color of the peek view borders and arrow.'));\n\nexport const peekViewResultsBackground = registerColor('peekViewResult.background', { dark: '#252526', light: '#F3F3F3', hc: Color.black }, nls.localize('peekViewResultsBackground', 'Background color of the peek view result list.'));\nexport const peekViewResultsMatchForeground = registerColor('peekViewResult.lineForeground', { dark: '#bbbbbb', light: '#646465', hc: Color.white }, nls.localize('peekViewResultsMatchForeground', 'Foreground color for line nodes in the peek view result list.'));\nexport const peekViewResultsFileForeground = registerColor('peekViewResult.fileForeground', { dark: Color.white, light: '#1E1E1E', hc: Color.white }, nls.localize('peekViewResultsFileForeground', 'Foreground color for file nodes in the peek view result list.'));\nexport const peekViewResultsSelectionBackground = registerColor('peekViewResult.selectionBackground', { dark: '#3399ff33', light: '#3399ff33', hc: null }, nls.localize('peekViewResultsSelectionBackground', 'Background color of the selected entry in the peek view result list.'));\nexport const peekViewResultsSelectionForeground = registerColor('peekViewResult.selectionForeground', { dark: Color.white, light: '#6C6C6C', hc: Color.white }, nls.localize('peekViewResultsSelectionForeground', 'Foreground color of the selected entry in the peek view result list.'));\nexport const peekViewEditorBackground = registerColor('peekViewEditor.background', { dark: '#001F33', light: '#F2F8FC', hc: Color.black }, nls.localize('peekViewEditorBackground', 'Background color of the peek view editor.'));\nexport const peekViewEditorGutterBackground = registerColor('peekViewEditorGutter.background', { dark: peekViewEditorBackground, light: peekViewEditorBackground, hc: peekViewEditorBackground }, nls.localize('peekViewEditorGutterBackground', 'Background color of the gutter in the peek view editor.'));\n\nexport const peekViewResultsMatchHighlight = registerColor('peekViewResult.matchHighlightBackground', { dark: '#ea5c004d', light: '#ea5c004d', hc: null }, nls.localize('peekViewResultsMatchHighlight', 'Match highlight color in the peek view result list.'));\nexport const peekViewEditorMatchHighlight = registerColor('peekViewEditor.matchHighlightBackground', { dark: '#ff8f0099', light: '#f5d802de', hc: null }, nls.localize('peekViewEditorMatchHighlight', 'Match highlight color in the peek view editor.'));\n\n\nregisterThemingParticipant((theme, collector) => {\n\tlet findMatchHighlightColor = theme.getColor(peekViewResultsMatchHighlight);\n\tif (findMatchHighlightColor) {\n\t\tcollector.addRule(`.monaco-editor .reference-zone-widget .ref-tree .referenceMatch { background-color: ${findMatchHighlightColor}; }`);\n\t}\n\tlet referenceHighlightColor = theme.getColor(peekViewEditorMatchHighlight);\n\tif (referenceHighlightColor) {\n\t\tcollector.addRule(`.monaco-editor .reference-zone-widget .preview .reference-decoration { background-color: ${referenceHighlightColor}; }`);\n\t}\n\tlet hcOutline = theme.getColor(activeContrastBorder);\n\tif (hcOutline) {\n\t\tcollector.addRule(`.monaco-editor .reference-zone-widget .ref-tree .referenceMatch { border: 1px dotted ${hcOutline}; box-sizing: border-box; }`);\n\t\tcollector.addRule(`.monaco-editor .reference-zone-widget .preview .reference-decoration { border: 2px solid ${hcOutline}; box-sizing: border-box; }`);\n\t}\n\tlet resultsBackground = theme.getColor(peekViewResultsBackground);\n\tif (resultsBackground) {\n\t\tcollector.addRule(`.monaco-editor .reference-zone-widget .ref-tree { background-color: ${resultsBackground}; }`);\n\t}\n\tlet resultsMatchForeground = theme.getColor(peekViewResultsMatchForeground);\n\tif (resultsMatchForeground) {\n\t\tcollector.addRule(`.monaco-editor .reference-zone-widget .ref-tree { color: ${resultsMatchForeground}; }`);\n\t}\n\tlet resultsFileForeground = theme.getColor(peekViewResultsFileForeground);\n\tif (resultsFileForeground) {\n\t\tcollector.addRule(`.monaco-editor .reference-zone-widget .ref-tree .reference-file { color: ${resultsFileForeground}; }`);\n\t}\n\tlet resultsSelectedBackground = theme.getColor(peekViewResultsSelectionBackground);\n\tif (resultsSelectedBackground) {\n\t\tcollector.addRule(`.monaco-editor .reference-zone-widget .ref-tree .monaco-tree.focused .monaco-tree-rows > .monaco-tree-row.selected:not(.highlighted) { background-color: ${resultsSelectedBackground}; }`);\n\t}\n\tlet resultsSelectedForeground = theme.getColor(peekViewResultsSelectionForeground);\n\tif (resultsSelectedForeground) {\n\t\tcollector.addRule(`.monaco-editor .reference-zone-widget .ref-tree .monaco-tree.focused .monaco-tree-rows > .monaco-tree-row.selected:not(.highlighted) { color: ${resultsSelectedForeground} !important; }`);\n\t}\n\tlet editorBackground = theme.getColor(peekViewEditorBackground);\n\tif (editorBackground) {\n\t\tcollector.addRule(\n\t\t\t`.monaco-editor .reference-zone-widget .preview .monaco-editor .monaco-editor-background,` +\n\t\t\t`.monaco-editor .reference-zone-widget .preview .monaco-editor .inputarea.ime-input {` +\n\t\t\t`\tbackground-color: ${editorBackground};` +\n\t\t\t`}`);\n\t}\n\tlet editorGutterBackground = theme.getColor(peekViewEditorGutterBackground);\n\tif (editorGutterBackground) {\n\t\tcollector.addRule(\n\t\t\t`.monaco-editor .reference-zone-widget .preview .monaco-editor .margin {` +\n\t\t\t`\tbackground-color: ${editorGutterBackground};` +\n\t\t\t`}`);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport Severity from 'vs/base/common/severity';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IEditorService } from 'vs/platform/editor/common/editor';\nimport { fromPromise, stopwatch } from 'vs/base/common/event';\nimport { IInstantiationService, optional } from 'vs/platform/instantiation/common/instantiation';\nimport { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey';\nimport { IMessageService } from 'vs/platform/message/common/message';\nimport { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';\nimport { IConfigurationService } from 'vs/platform/configuration/common/configuration';\nimport { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';\nimport { IStorageService } from 'vs/platform/storage/common/storage';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { ICodeEditor } from 'vs/editor/browser/editorBrowser';\nimport { editorContribution } from 'vs/editor/browser/editorBrowserExtensions';\nimport { IPeekViewService } from 'vs/editor/contrib/zoneWidget/browser/peekViewWidget';\nimport { ReferencesModel, OneReference } from './referencesModel';\nimport { ReferenceWidget, LayoutData } from './referencesWidget';\nimport { Range } from 'vs/editor/common/core/range';\nimport { ITextModelService } from 'vs/editor/common/services/resolverService';\nimport { IThemeService } from 'vs/platform/theme/common/themeService';\nimport { Position } from 'vs/editor/common/core/position';\nimport { IEnvironmentService } from 'vs/platform/environment/common/environment';\n\nexport const ctxReferenceSearchVisible = new RawContextKey('referenceSearchVisible', false);\n\nexport interface RequestOptions {\n\tgetMetaTitle(model: ReferencesModel): string;\n\tonGoto?: (reference: OneReference) => TPromise;\n}\n\n@editorContribution\nexport class ReferencesController implements editorCommon.IEditorContribution {\n\n\tprivate static ID = 'editor.contrib.referencesController';\n\n\tprivate _editor: ICodeEditor;\n\tprivate _widget: ReferenceWidget;\n\tprivate _model: ReferencesModel;\n\tprivate _requestIdPool = 0;\n\tprivate _disposables: IDisposable[] = [];\n\tprivate _ignoreModelChangeEvent = false;\n\n\tprivate _referenceSearchVisible: IContextKey;\n\n\tpublic static get(editor: editorCommon.ICommonCodeEditor): ReferencesController {\n\t\treturn editor.getContribution(ReferencesController.ID);\n\t}\n\n\tpublic constructor(\n\t\teditor: ICodeEditor,\n\t\t@IContextKeyService contextKeyService: IContextKeyService,\n\t\t@IEditorService private _editorService: IEditorService,\n\t\t@ITextModelService private _textModelResolverService: ITextModelService,\n\t\t@ITelemetryService private _telemetryService: ITelemetryService,\n\t\t@IMessageService private _messageService: IMessageService,\n\t\t@IInstantiationService private _instantiationService: IInstantiationService,\n\t\t@IWorkspaceContextService private _contextService: IWorkspaceContextService,\n\t\t@IStorageService private _storageService: IStorageService,\n\t\t@IThemeService private _themeService: IThemeService,\n\t\t@IConfigurationService private _configurationService: IConfigurationService,\n\t\t@optional(IPeekViewService) private _peekViewService: IPeekViewService,\n\t\t@optional(IEnvironmentService) private _environmentService: IEnvironmentService\n\t) {\n\t\tthis._editor = editor;\n\t\tthis._referenceSearchVisible = ctxReferenceSearchVisible.bindTo(contextKeyService);\n\t}\n\n\tpublic getId(): string {\n\t\treturn ReferencesController.ID;\n\t}\n\n\tpublic dispose(): void {\n\t\tif (this._widget) {\n\t\t\tthis._widget.dispose();\n\t\t\tthis._widget = null;\n\t\t}\n\t\tthis._editor = null;\n\t}\n\n\tpublic toggleWidget(range: Range, modelPromise: TPromise, options: RequestOptions): void {\n\n\t\t// close current widget and return early is position didn't change\n\t\tlet widgetPosition: Position;\n\t\tif (this._widget) {\n\t\t\twidgetPosition = this._widget.position;\n\t\t}\n\t\tthis.closeWidget();\n\t\tif (!!widgetPosition && range.containsPosition(widgetPosition)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tthis._referenceSearchVisible.set(true);\n\n\t\t// close the widget on model/mode changes\n\t\tthis._disposables.push(this._editor.onDidChangeModelLanguage(() => { this.closeWidget(); }));\n\t\tthis._disposables.push(this._editor.onDidChangeModel(() => {\n\t\t\tif (!this._ignoreModelChangeEvent) {\n\t\t\t\tthis.closeWidget();\n\t\t\t}\n\t\t}));\n\t\tconst storageKey = 'peekViewLayout';\n\t\tconst data = JSON.parse(this._storageService.get(storageKey, undefined, '{}'));\n\t\tthis._widget = new ReferenceWidget(this._editor, data, this._textModelResolverService, this._contextService, this._themeService, this._instantiationService, this._environmentService);\n\t\tthis._widget.setTitle(nls.localize('labelLoading', \"Loading...\"));\n\t\tthis._widget.show(range);\n\t\tthis._disposables.push(this._widget.onDidClose(() => {\n\t\t\tmodelPromise.cancel();\n\n\t\t\tthis._storageService.store(storageKey, JSON.stringify(this._widget.layoutData));\n\t\t\tthis._widget = null;\n\t\t\tthis.closeWidget();\n\t\t}));\n\n\t\tthis._disposables.push(this._widget.onDidSelectReference(event => {\n\t\t\tlet { element, kind } = event;\n\t\t\tswitch (kind) {\n\t\t\t\tcase 'open':\n\t\t\t\t\tif (event.source === 'editor'\n\t\t\t\t\t\t&& this._configurationService.lookup('editor.stablePeek').value) {\n\n\t\t\t\t\t\t// when stable peek is configured we don't close\n\t\t\t\t\t\t// the peek window on selecting the editor\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\tcase 'side':\n\t\t\t\t\tthis._openReference(element, kind === 'side');\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'goto':\n\t\t\t\t\tif (options.onGoto) {\n\t\t\t\t\t\toptions.onGoto(element);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._gotoReference(element);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}));\n\n\t\tconst requestId = ++this._requestIdPool;\n\n\t\tconst promise = modelPromise.then(model => {\n\n\t\t\t// still current request? widget still open?\n\t\t\tif (requestId !== this._requestIdPool || !this._widget) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tif (this._model) {\n\t\t\t\tthis._model.dispose();\n\t\t\t}\n\n\t\t\tthis._model = model;\n\n\t\t\t// measure time it stays open\n\t\t\tconst startTime = Date.now();\n\t\t\tthis._disposables.push({\n\t\t\t\tdispose: () => {\n\t\t\t\t\tthis._telemetryService.publicLog('zoneWidgetShown', {\n\t\t\t\t\t\tmode: 'reference search',\n\t\t\t\t\t\telapsedTime: Date.now() - startTime\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// show widget\n\t\t\treturn this._widget.setModel(this._model).then(() => {\n\n\t\t\t\t// set title\n\t\t\t\tthis._widget.setMetaTitle(options.getMetaTitle(this._model));\n\n\t\t\t\t// set 'best' selection\n\t\t\t\tlet uri = this._editor.getModel().uri;\n\t\t\t\tlet pos = new Position(range.startLineNumber, range.startColumn);\n\t\t\t\tlet selection = this._model.nearestReference(uri, pos);\n\t\t\t\tif (selection) {\n\t\t\t\t\treturn this._widget.setSelection(selection);\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t});\n\n\t\t}, error => {\n\t\t\tthis._messageService.show(Severity.Error, error);\n\t\t});\n\n\t\tconst onDone = stopwatch(fromPromise(promise));\n\t\tconst mode = this._editor.getModel().getLanguageIdentifier().language;\n\n\t\tonDone(duration => this._telemetryService.publicLog('findReferences', {\n\t\t\tduration,\n\t\t\tmode\n\t\t}));\n\t}\n\n\tpublic closeWidget(): void {\n\t\tif (this._widget) {\n\t\t\tthis._widget.dispose();\n\t\t\tthis._widget = null;\n\t\t}\n\t\tthis._referenceSearchVisible.reset();\n\t\tthis._disposables = dispose(this._disposables);\n\t\tif (this._model) {\n\t\t\tthis._model.dispose();\n\t\t\tthis._model = null;\n\t\t}\n\t\tthis._editor.focus();\n\t\tthis._requestIdPool += 1; // Cancel pending requests\n\t}\n\n\tprivate _gotoReference(ref: OneReference): void {\n\t\tthis._widget.hide();\n\n\t\tthis._ignoreModelChangeEvent = true;\n\t\tconst { uri, range } = ref;\n\n\t\tthis._editorService.openEditor({\n\t\t\tresource: uri,\n\t\t\toptions: { selection: range }\n\t\t}).done(openedEditor => {\n\t\t\tthis._ignoreModelChangeEvent = false;\n\n\t\t\tif (!openedEditor || openedEditor.getControl() !== this._editor) {\n\t\t\t\t// TODO@Alex TODO@Joh\n\t\t\t\t// when opening the current reference we might end up\n\t\t\t\t// in a different editor instance. that means we also have\n\t\t\t\t// a different instance of this reference search controller\n\t\t\t\t// and cannot hold onto the widget (which likely doesn't\n\t\t\t\t// exist). Instead of bailing out we should find the\n\t\t\t\t// 'sister' action and pass our current model on to it.\n\t\t\t\tthis.closeWidget();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._widget.show(range);\n\t\t\tthis._widget.focus();\n\n\t\t}, (err) => {\n\t\t\tthis._ignoreModelChangeEvent = false;\n\t\t\tonUnexpectedError(err);\n\t\t});\n\t}\n\n\tprivate _openReference(ref: OneReference, sideBySide: boolean): void {\n\t\tconst { uri, range } = ref;\n\t\tthis._editorService.openEditor({\n\t\t\tresource: uri,\n\t\t\toptions: { selection: range }\n\t\t}, sideBySide);\n\n\t\t// clear stage\n\t\tif (!sideBySide) {\n\t\t\tthis.closeWidget();\n\t\t}\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport { alert } from 'vs/base/browser/ui/aria/aria';\nimport { KeyCode, KeyMod, KeyChord } from 'vs/base/common/keyCodes';\nimport * as platform from 'vs/base/common/platform';\nimport Severity from 'vs/base/common/severity';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IEditorService } from 'vs/platform/editor/common/editor';\nimport { IMessageService } from 'vs/platform/message/common/message';\nimport { Range } from 'vs/editor/common/core/range';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { editorAction, IActionOptions, ServicesAccessor, EditorAction } from 'vs/editor/common/editorCommonExtensions';\nimport { Location } from 'vs/editor/common/modes';\nimport { getDefinitionsAtPosition, getImplementationsAtPosition, getTypeDefinitionsAtPosition } from './goToDeclaration';\nimport { ReferencesController } from 'vs/editor/contrib/referenceSearch/browser/referencesController';\nimport { ReferencesModel } from 'vs/editor/contrib/referenceSearch/browser/referencesModel';\nimport { PeekContext } from 'vs/editor/contrib/zoneWidget/browser/peekViewWidget';\nimport { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';\nimport { MessageController } from './messageController';\nimport * as corePosition from 'vs/editor/common/core/position';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\n\nexport class DefinitionActionConfig {\n\n\tconstructor(\n\t\tpublic readonly openToSide = false,\n\t\tpublic readonly openInPeek = false,\n\t\tpublic readonly filterCurrent = true,\n\t\tpublic readonly showMessage = true,\n\t) {\n\t\t//\n\t}\n}\n\nexport class DefinitionAction extends EditorAction {\n\n\tprivate _configuration: DefinitionActionConfig;\n\n\tconstructor(configuration: DefinitionActionConfig, opts: IActionOptions) {\n\t\tsuper(opts);\n\t\tthis._configuration = configuration;\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): TPromise {\n\t\tconst messageService = accessor.get(IMessageService);\n\t\tconst editorService = accessor.get(IEditorService);\n\n\t\tconst model = editor.getModel();\n\t\tconst pos = editor.getPosition();\n\n\t\treturn this._getDeclarationsAtPosition(model, pos).then(references => {\n\n\t\t\tif (model.isDisposed() || editor.getModel() !== model) {\n\t\t\t\t// new model, no more model\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// * remove falsy references\n\t\t\t// * find reference at the current pos\n\t\t\tlet idxOfCurrent = -1;\n\t\t\tlet result: Location[] = [];\n\t\t\tfor (let i = 0; i < references.length; i++) {\n\t\t\t\tlet reference = references[i];\n\t\t\t\tif (!reference || !reference.range) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tlet { uri, range } = reference;\n\t\t\t\tlet newLen = result.push({\n\t\t\t\t\turi,\n\t\t\t\t\trange\n\t\t\t\t});\n\t\t\t\tif (this._configuration.filterCurrent\n\t\t\t\t\t&& uri.toString() === model.uri.toString()\n\t\t\t\t\t&& Range.containsPosition(range, pos)\n\t\t\t\t\t&& idxOfCurrent === -1\n\t\t\t\t) {\n\t\t\t\t\tidxOfCurrent = newLen - 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (result.length === 0) {\n\t\t\t\t// no result -> show message\n\t\t\t\tif (this._configuration.showMessage) {\n\t\t\t\t\tconst info = model.getWordAtPosition(pos);\n\t\t\t\t\tMessageController.get(editor).showMessage(this._getNoResultFoundMessage(info), pos);\n\t\t\t\t}\n\t\t\t} else if (result.length === 1 && idxOfCurrent !== -1) {\n\t\t\t\t// only the position at which we are -> adjust selection\n\t\t\t\tlet [current] = result;\n\t\t\t\tthis._openReference(editorService, current, false);\n\n\t\t\t} else {\n\t\t\t\t// handle multile results\n\t\t\t\tthis._onResult(editorService, editor, new ReferencesModel(result));\n\t\t\t}\n\n\t\t}, (err) => {\n\t\t\t// report an error\n\t\t\tmessageService.show(Severity.Error, err);\n\t\t\treturn false;\n\t\t});\n\t}\n\n\tprotected _getDeclarationsAtPosition(model: editorCommon.IModel, position: corePosition.Position): TPromise {\n\t\treturn getDefinitionsAtPosition(model, position);\n\t}\n\n\tprotected _getNoResultFoundMessage(info?: editorCommon.IWordAtPosition): string {\n\t\treturn info && info.word\n\t\t\t? nls.localize('noResultWord', \"No definition found for '{0}'\", info.word)\n\t\t\t: nls.localize('generic.noResults', \"No definition found\");\n\t}\n\n\tprotected _getMetaTitle(model: ReferencesModel): string {\n\t\treturn model.references.length > 1 && nls.localize('meta.title', \" – {0} definitions\", model.references.length);\n\t}\n\n\tprivate _onResult(editorService: IEditorService, editor: editorCommon.ICommonCodeEditor, model: ReferencesModel) {\n\n\t\tconst msg = model.getAriaMessage();\n\t\talert(msg);\n\n\t\tif (this._configuration.openInPeek) {\n\t\t\tthis._openInPeek(editorService, editor, model);\n\t\t} else {\n\t\t\tlet next = model.nearestReference(editor.getModel().uri, editor.getPosition());\n\t\t\tthis._openReference(editorService, next, this._configuration.openToSide).then(editor => {\n\t\t\t\tif (editor && model.references.length > 1) {\n\t\t\t\t\tthis._openInPeek(editorService, editor, model);\n\t\t\t\t} else {\n\t\t\t\t\tmodel.dispose();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate _openReference(editorService: IEditorService, reference: Location, sideBySide: boolean): TPromise {\n\t\tlet { uri, range } = reference;\n\t\treturn editorService.openEditor({\n\t\t\tresource: uri,\n\t\t\toptions: {\n\t\t\t\tselection: Range.collapseToStart(range),\n\t\t\t\trevealIfVisible: !sideBySide\n\t\t\t}\n\t\t}, sideBySide).then(editor => {\n\t\t\treturn editor && editor.getControl();\n\t\t});\n\t}\n\n\tprivate _openInPeek(editorService: IEditorService, target: editorCommon.ICommonCodeEditor, model: ReferencesModel) {\n\t\tlet controller = ReferencesController.get(target);\n\t\tif (controller) {\n\t\t\tcontroller.toggleWidget(target.getSelection(), TPromise.as(model), {\n\t\t\t\tgetMetaTitle: (model) => {\n\t\t\t\t\treturn this._getMetaTitle(model);\n\t\t\t\t},\n\t\t\t\tonGoto: (reference) => {\n\t\t\t\t\tcontroller.closeWidget();\n\t\t\t\t\treturn this._openReference(editorService, reference, false);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tmodel.dispose();\n\t\t}\n\t}\n}\n\nconst goToDeclarationKb = platform.isWeb\n\t? KeyMod.CtrlCmd | KeyCode.F12\n\t: KeyCode.F12;\n\n@editorAction\nexport class GoToDefinitionAction extends DefinitionAction {\n\n\tpublic static ID = 'editor.action.goToDeclaration';\n\n\tconstructor() {\n\t\tsuper(new DefinitionActionConfig(), {\n\t\t\tid: GoToDefinitionAction.ID,\n\t\t\tlabel: nls.localize('actions.goToDecl.label', \"Go to Definition\"),\n\t\t\talias: 'Go to Definition',\n\t\t\tprecondition: ContextKeyExpr.and(\n\t\t\t\tEditorContextKeys.hasDefinitionProvider,\n\t\t\t\tEditorContextKeys.isInEmbeddedEditor.toNegated()),\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: goToDeclarationKb\n\t\t\t},\n\t\t\tmenuOpts: {\n\t\t\t\tgroup: 'navigation',\n\t\t\t\torder: 1.1\n\t\t\t}\n\t\t});\n\t}\n}\n\n@editorAction\nexport class OpenDefinitionToSideAction extends DefinitionAction {\n\n\tpublic static ID = 'editor.action.openDeclarationToTheSide';\n\n\tconstructor() {\n\t\tsuper(new DefinitionActionConfig(true), {\n\t\t\tid: OpenDefinitionToSideAction.ID,\n\t\t\tlabel: nls.localize('actions.goToDeclToSide.label', \"Open Definition to the Side\"),\n\t\t\talias: 'Open Definition to the Side',\n\t\t\tprecondition: ContextKeyExpr.and(\n\t\t\t\tEditorContextKeys.hasDefinitionProvider,\n\t\t\t\tEditorContextKeys.isInEmbeddedEditor.toNegated()),\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, goToDeclarationKb)\n\t\t\t}\n\t\t});\n\t}\n}\n\n@editorAction\nexport class PeekDefinitionAction extends DefinitionAction {\n\tconstructor() {\n\t\tsuper(new DefinitionActionConfig(void 0, true, false), {\n\t\t\tid: 'editor.action.previewDeclaration',\n\t\t\tlabel: nls.localize('actions.previewDecl.label', \"Peek Definition\"),\n\t\t\talias: 'Peek Definition',\n\t\t\tprecondition: ContextKeyExpr.and(\n\t\t\t\tEditorContextKeys.hasDefinitionProvider,\n\t\t\t\tPeekContext.notInPeekEditor,\n\t\t\t\tEditorContextKeys.isInEmbeddedEditor.toNegated()),\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.Alt | KeyCode.F12,\n\t\t\t\tlinux: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.F10 }\n\t\t\t},\n\t\t\tmenuOpts: {\n\t\t\t\tgroup: 'navigation',\n\t\t\t\torder: 1.2\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport class ImplementationAction extends DefinitionAction {\n\tprotected _getDeclarationsAtPosition(model: editorCommon.IModel, position: corePosition.Position): TPromise {\n\t\treturn getImplementationsAtPosition(model, position);\n\t}\n\n\tprotected _getNoResultFoundMessage(info?: editorCommon.IWordAtPosition): string {\n\t\treturn info && info.word\n\t\t\t? nls.localize('goToImplementation.noResultWord', \"No implementation found for '{0}'\", info.word)\n\t\t\t: nls.localize('goToImplementation.generic.noResults', \"No implementation found\");\n\t}\n\n\tprotected _getMetaTitle(model: ReferencesModel): string {\n\t\treturn model.references.length > 1 && nls.localize('meta.implementations.title', \" – {0} implementations\", model.references.length);\n\t}\n}\n\n@editorAction\nexport class GoToImplementationAction extends ImplementationAction {\n\n\tpublic static ID = 'editor.action.goToImplementation';\n\n\tconstructor() {\n\t\tsuper(new DefinitionActionConfig(), {\n\t\t\tid: GoToImplementationAction.ID,\n\t\t\tlabel: nls.localize('actions.goToImplementation.label', \"Go to Implementation\"),\n\t\t\talias: 'Go to Implementation',\n\t\t\tprecondition: ContextKeyExpr.and(\n\t\t\t\tEditorContextKeys.hasImplementationProvider,\n\t\t\t\tEditorContextKeys.isInEmbeddedEditor.toNegated()),\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyCode.F12\n\t\t\t}\n\t\t});\n\t}\n}\n\n@editorAction\nexport class PeekImplementationAction extends ImplementationAction {\n\n\tpublic static ID = 'editor.action.peekImplementation';\n\n\tconstructor() {\n\t\tsuper(new DefinitionActionConfig(false, true, false), {\n\t\t\tid: PeekImplementationAction.ID,\n\t\t\tlabel: nls.localize('actions.peekImplementation.label', \"Peek Implementation\"),\n\t\t\talias: 'Peek Implementation',\n\t\t\tprecondition: ContextKeyExpr.and(\n\t\t\t\tEditorContextKeys.hasImplementationProvider,\n\t\t\t\tEditorContextKeys.isInEmbeddedEditor.toNegated()),\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.F12\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport class TypeDefinitionAction extends DefinitionAction {\n\tprotected _getDeclarationsAtPosition(model: editorCommon.IModel, position: corePosition.Position): TPromise {\n\t\treturn getTypeDefinitionsAtPosition(model, position);\n\t}\n\n\tprotected _getNoResultFoundMessage(info?: editorCommon.IWordAtPosition): string {\n\t\treturn info && info.word\n\t\t\t? nls.localize('goToTypeDefinition.noResultWord', \"No type definition found for '{0}'\", info.word)\n\t\t\t: nls.localize('goToTypeDefinition.generic.noResults', \"No type definition found\");\n\t}\n\n\tprotected _getMetaTitle(model: ReferencesModel): string {\n\t\treturn model.references.length > 1 && nls.localize('meta.typeDefinitions.title', \" – {0} type definitions\", model.references.length);\n\t}\n}\n\n@editorAction\nexport class GoToTypeDefintionAction extends TypeDefinitionAction {\n\n\tpublic static ID = 'editor.action.goToTypeDefinition';\n\n\tconstructor() {\n\t\tsuper(new DefinitionActionConfig(), {\n\t\t\tid: GoToTypeDefintionAction.ID,\n\t\t\tlabel: nls.localize('actions.goToTypeDefinition.label', \"Go to Type Definition\"),\n\t\t\talias: 'Go to Type Definition',\n\t\t\tprecondition: ContextKeyExpr.and(\n\t\t\t\tEditorContextKeys.hasTypeDefinitionProvider,\n\t\t\t\tEditorContextKeys.isInEmbeddedEditor.toNegated()),\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: 0\n\t\t\t},\n\t\t\tmenuOpts: {\n\t\t\t\tgroup: 'navigation',\n\t\t\t\torder: 1.4\n\t\t\t}\n\t\t});\n\t}\n}\n\n@editorAction\nexport class PeekTypeDefinitionAction extends TypeDefinitionAction {\n\n\tpublic static ID = 'editor.action.peekTypeDefinition';\n\n\tconstructor() {\n\t\tsuper(new DefinitionActionConfig(false, true, false), {\n\t\t\tid: PeekTypeDefinitionAction.ID,\n\t\t\tlabel: nls.localize('actions.peekTypeDefinition.label', \"Peek Type Definition\"),\n\t\t\talias: 'Peek Type Definition',\n\t\t\tprecondition: ContextKeyExpr.and(\n\t\t\t\tEditorContextKeys.hasTypeDefinitionProvider,\n\t\t\t\tEditorContextKeys.isInEmbeddedEditor.toNegated()),\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: 0\n\t\t\t}\n\t\t});\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/css!./goToDeclarationMouse';\nimport * as nls from 'vs/nls';\nimport { Throttler } from 'vs/base/common/async';\nimport { onUnexpectedError } from 'vs/base/common/errors';\nimport { MarkedString } from 'vs/base/common/htmlContent';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IModeService } from 'vs/editor/common/services/modeService';\nimport { Range } from 'vs/editor/common/core/range';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { Location, DefinitionProviderRegistry } from 'vs/editor/common/modes';\nimport { ICodeEditor, IMouseTarget, MouseTargetType } from 'vs/editor/browser/editorBrowser';\nimport { editorContribution } from 'vs/editor/browser/editorBrowserExtensions';\nimport { getDefinitionsAtPosition } from './goToDeclaration';\nimport { IDisposable, dispose } from 'vs/base/common/lifecycle';\nimport { ITextModelService } from 'vs/editor/common/services/resolverService';\nimport { registerThemingParticipant } from 'vs/platform/theme/common/themeService';\nimport { editorActiveLinkForeground } from 'vs/platform/theme/common/colorRegistry';\nimport { EditorState, CodeEditorStateFlag } from 'vs/editor/common/core/editorState';\nimport { DefinitionAction, DefinitionActionConfig } from './goToDeclarationCommands';\nimport { ClickLinkGesture, ClickLinkMouseEvent, ClickLinkKeyboardEvent } from 'vs/editor/contrib/goToDeclaration/browser/clickLinkGesture';\n\n@editorContribution\nclass GotoDefinitionWithMouseEditorContribution implements editorCommon.IEditorContribution {\n\n\tprivate static ID = 'editor.contrib.gotodefinitionwithmouse';\n\tstatic MAX_SOURCE_PREVIEW_LINES = 8;\n\n\tprivate editor: ICodeEditor;\n\tprivate toUnhook: IDisposable[];\n\tprivate decorations: string[];\n\tprivate currentWordUnderMouse: editorCommon.IWordAtPosition;\n\tprivate throttler: Throttler;\n\n\tconstructor(\n\t\teditor: ICodeEditor,\n\t\t@ITextModelService private textModelResolverService: ITextModelService,\n\t\t@IModeService private modeService: IModeService\n\t) {\n\t\tthis.toUnhook = [];\n\t\tthis.decorations = [];\n\t\tthis.editor = editor;\n\t\tthis.throttler = new Throttler();\n\n\t\tlet linkGesture = new ClickLinkGesture(editor);\n\t\tthis.toUnhook.push(linkGesture);\n\n\t\tthis.toUnhook.push(linkGesture.onMouseMoveOrRelevantKeyDown(([mouseEvent, keyboardEvent]) => {\n\t\t\tthis.startFindDefinition(mouseEvent, keyboardEvent);\n\t\t}));\n\n\t\tthis.toUnhook.push(linkGesture.onExecute((mouseEvent: ClickLinkMouseEvent) => {\n\t\t\tif (this.isEnabled(mouseEvent)) {\n\t\t\t\tthis.gotoDefinition(mouseEvent.target, mouseEvent.hasSideBySideModifier).done(() => {\n\t\t\t\t\tthis.removeDecorations();\n\t\t\t\t}, (error: Error) => {\n\t\t\t\t\tthis.removeDecorations();\n\t\t\t\t\tonUnexpectedError(error);\n\t\t\t\t});\n\t\t\t}\n\t\t}));\n\n\t\tthis.toUnhook.push(linkGesture.onCancel(() => {\n\t\t\tthis.removeDecorations();\n\t\t\tthis.currentWordUnderMouse = null;\n\t\t}));\n\n\t}\n\n\tprivate startFindDefinition(mouseEvent: ClickLinkMouseEvent, withKey?: ClickLinkKeyboardEvent): void {\n\t\tif (!this.isEnabled(mouseEvent, withKey)) {\n\t\t\tthis.currentWordUnderMouse = null;\n\t\t\tthis.removeDecorations();\n\t\t\treturn;\n\t\t}\n\n\t\t// Find word at mouse position\n\t\tlet position = mouseEvent.target.position;\n\t\tlet word = position ? this.editor.getModel().getWordAtPosition(position) : null;\n\t\tif (!word) {\n\t\t\tthis.currentWordUnderMouse = null;\n\t\t\tthis.removeDecorations();\n\t\t\treturn;\n\t\t}\n\n\t\t// Return early if word at position is still the same\n\t\tif (this.currentWordUnderMouse && this.currentWordUnderMouse.startColumn === word.startColumn && this.currentWordUnderMouse.endColumn === word.endColumn && this.currentWordUnderMouse.word === word.word) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.currentWordUnderMouse = word;\n\n\t\t// Find definition and decorate word if found\n\t\tlet state = new EditorState(this.editor, CodeEditorStateFlag.Position | CodeEditorStateFlag.Value | CodeEditorStateFlag.Selection | CodeEditorStateFlag.Scroll);\n\n\t\tthis.throttler.queue(() => {\n\t\t\treturn state.validate(this.editor)\n\t\t\t\t? this.findDefinition(mouseEvent.target)\n\t\t\t\t: TPromise.as(null);\n\n\t\t}).then(results => {\n\t\t\tif (!results || !results.length || !state.validate(this.editor)) {\n\t\t\t\tthis.removeDecorations();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Multiple results\n\t\t\tif (results.length > 1) {\n\t\t\t\tthis.addDecoration(new Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn), nls.localize('multipleResults', \"Click to show {0} definitions.\", results.length));\n\t\t\t}\n\n\t\t\t// Single result\n\t\t\telse {\n\t\t\t\tlet result = results[0];\n\n\t\t\t\tif (!result.uri) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.textModelResolverService.createModelReference(result.uri).then(ref => {\n\n\t\t\t\t\tif (!ref.object || !ref.object.textEditorModel) {\n\t\t\t\t\t\tref.dispose();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst { object: { textEditorModel } } = ref;\n\t\t\t\t\tconst { startLineNumber } = result.range;\n\n\t\t\t\t\tif (textEditorModel.getLineMaxColumn(startLineNumber) === 0) {\n\t\t\t\t\t\tref.dispose();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst startIndent = textEditorModel.getLineFirstNonWhitespaceColumn(startLineNumber);\n\t\t\t\t\tconst maxLineNumber = Math.min(textEditorModel.getLineCount(), startLineNumber + GotoDefinitionWithMouseEditorContribution.MAX_SOURCE_PREVIEW_LINES);\n\t\t\t\t\tlet endLineNumber = startLineNumber + 1;\n\t\t\t\t\tlet minIndent = startIndent;\n\n\t\t\t\t\tfor (; endLineNumber < maxLineNumber; endLineNumber++) {\n\t\t\t\t\t\tlet endIndent = textEditorModel.getLineFirstNonWhitespaceColumn(endLineNumber);\n\t\t\t\t\t\tminIndent = Math.min(minIndent, endIndent);\n\t\t\t\t\t\tif (startIndent === endIndent) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst previewRange = new Range(startLineNumber, 1, endLineNumber + 1, 1);\n\t\t\t\t\tconst value = textEditorModel.getValueInRange(previewRange).replace(new RegExp(`^\\\\s{${minIndent - 1}}`, 'gm'), '').trim();\n\n\t\t\t\t\tthis.addDecoration(new Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn), {\n\t\t\t\t\t\tlanguage: this.modeService.getModeIdByFilenameOrFirstLine(textEditorModel.uri.fsPath),\n\t\t\t\t\t\tvalue\n\t\t\t\t\t});\n\t\t\t\t\tref.dispose();\n\t\t\t\t});\n\t\t\t}\n\t\t}).done(undefined, onUnexpectedError);\n\t}\n\n\tprivate addDecoration(range: Range, hoverMessage: MarkedString): void {\n\n\t\tconst newDecorations: editorCommon.IModelDeltaDecoration = {\n\t\t\trange: range,\n\t\t\toptions: {\n\t\t\t\tinlineClassName: 'goto-definition-link',\n\t\t\t\thoverMessage\n\t\t\t}\n\t\t};\n\n\t\tthis.decorations = this.editor.deltaDecorations(this.decorations, [newDecorations]);\n\t}\n\n\tprivate removeDecorations(): void {\n\t\tif (this.decorations.length > 0) {\n\t\t\tthis.decorations = this.editor.deltaDecorations(this.decorations, []);\n\t\t}\n\t}\n\n\tprivate isEnabled(mouseEvent: ClickLinkMouseEvent, withKey?: ClickLinkKeyboardEvent): boolean {\n\t\treturn this.editor.getModel() &&\n\t\t\tmouseEvent.isNoneOrSingleMouseDown &&\n\t\t\tmouseEvent.target.type === MouseTargetType.CONTENT_TEXT &&\n\t\t\t(mouseEvent.hasTriggerModifier || (withKey && withKey.keyCodeIsTriggerKey)) &&\n\t\t\tDefinitionProviderRegistry.has(this.editor.getModel());\n\t}\n\n\tprivate findDefinition(target: IMouseTarget): TPromise {\n\t\tlet model = this.editor.getModel();\n\t\tif (!model) {\n\t\t\treturn TPromise.as(null);\n\t\t}\n\n\t\treturn getDefinitionsAtPosition(this.editor.getModel(), target.position);\n\t}\n\n\tprivate gotoDefinition(target: IMouseTarget, sideBySide: boolean): TPromise {\n\t\tthis.editor.setPosition(target.position);\n\t\tconst action = new DefinitionAction(new DefinitionActionConfig(sideBySide, false, true, false), { alias: undefined, label: undefined, id: undefined, precondition: undefined });\n\t\treturn this.editor.invokeWithinContext(accessor => action.run(accessor, this.editor));\n\t}\n\n\tpublic getId(): string {\n\t\treturn GotoDefinitionWithMouseEditorContribution.ID;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.toUnhook = dispose(this.toUnhook);\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tlet activeLinkForeground = theme.getColor(editorActiveLinkForeground);\n\tif (activeLinkForeground) {\n\t\tcollector.addRule(`.monaco-editor .goto-definition-link { color: ${activeLinkForeground} !important; }`);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as nls from 'vs/nls';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport URI from 'vs/base/common/uri';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IEditorService } from 'vs/platform/editor/common/editor';\nimport { optional } from 'vs/platform/instantiation/common/instantiation';\nimport { CommandsRegistry, ICommandHandler } from 'vs/platform/commands/common/commands';\nimport { IContextKeyService, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';\nimport { KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry';\nimport { Position, IPosition } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { editorAction, ServicesAccessor, EditorAction, CommonEditorRegistry, commonEditorContribution } from 'vs/editor/common/editorCommonExtensions';\nimport { Location, ReferenceProviderRegistry } from 'vs/editor/common/modes';\nimport { IPeekViewService, PeekContext, getOuterEditor } from 'vs/editor/contrib/zoneWidget/browser/peekViewWidget';\nimport { ReferencesController, RequestOptions, ctxReferenceSearchVisible } from './referencesController';\nimport { ReferencesModel } from './referencesModel';\nimport { asWinJsPromise } from 'vs/base/common/async';\nimport { onUnexpectedExternalError } from 'vs/base/common/errors';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\n\nconst defaultReferenceSearchOptions: RequestOptions = {\n\tgetMetaTitle(model) {\n\t\treturn model.references.length > 1 && nls.localize('meta.titleReference', \" – {0} references\", model.references.length);\n\t}\n};\n\n@commonEditorContribution\nexport class ReferenceController implements editorCommon.IEditorContribution {\n\n\tprivate static ID = 'editor.contrib.referenceController';\n\n\tconstructor(\n\t\teditor: editorCommon.ICommonCodeEditor,\n\t\t@IContextKeyService contextKeyService: IContextKeyService,\n\t\t@optional(IPeekViewService) peekViewService: IPeekViewService\n\t) {\n\t\tif (peekViewService) {\n\t\t\tPeekContext.inPeekEditor.bindTo(contextKeyService);\n\t\t}\n\t}\n\n\tpublic dispose(): void {\n\t}\n\n\tpublic getId(): string {\n\t\treturn ReferenceController.ID;\n\t}\n}\n\n@editorAction\nexport class ReferenceAction extends EditorAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.referenceSearch.trigger',\n\t\t\tlabel: nls.localize('references.action.label', \"Find All References\"),\n\t\t\talias: 'Find All References',\n\t\t\tprecondition: ContextKeyExpr.and(\n\t\t\t\tEditorContextKeys.hasReferenceProvider,\n\t\t\t\tPeekContext.notInPeekEditor,\n\t\t\t\tEditorContextKeys.isInEmbeddedEditor.toNegated()),\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.textFocus,\n\t\t\t\tprimary: KeyMod.Shift | KeyCode.F12\n\t\t\t},\n\t\t\tmenuOpts: {\n\t\t\t\tgroup: 'navigation',\n\t\t\t\torder: 1.5\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: editorCommon.ICommonCodeEditor): void {\n\t\tlet controller = ReferencesController.get(editor);\n\t\tif (!controller) {\n\t\t\treturn;\n\t\t}\n\t\tlet range = editor.getSelection();\n\t\tlet model = editor.getModel();\n\t\tlet references = provideReferences(model, range.getStartPosition()).then(references => new ReferencesModel(references));\n\t\tcontroller.toggleWidget(range, references, defaultReferenceSearchOptions);\n\t}\n}\n\nlet findReferencesCommand: ICommandHandler = (accessor: ServicesAccessor, resource: URI, position: IPosition) => {\n\n\tif (!(resource instanceof URI)) {\n\t\tthrow new Error('illegal argument, uri');\n\t}\n\tif (!position) {\n\t\tthrow new Error('illegal argument, position');\n\t}\n\n\treturn accessor.get(IEditorService).openEditor({ resource }).then(editor => {\n\n\t\tlet control = editor.getControl();\n\t\tif (!editorCommon.isCommonCodeEditor(control)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tlet controller = ReferencesController.get(control);\n\t\tif (!controller) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tlet references = provideReferences(control.getModel(), Position.lift(position)).then(references => new ReferencesModel(references));\n\t\tlet range = new Range(position.lineNumber, position.column, position.lineNumber, position.column);\n\t\treturn TPromise.as(controller.toggleWidget(range, references, defaultReferenceSearchOptions));\n\t});\n};\n\nlet showReferencesCommand: ICommandHandler = (accessor: ServicesAccessor, resource: URI, position: IPosition, references: Location[]) => {\n\tif (!(resource instanceof URI)) {\n\t\tthrow new Error('illegal argument, uri expected');\n\t}\n\n\treturn accessor.get(IEditorService).openEditor({ resource: resource }).then(editor => {\n\n\t\tlet control = editor.getControl();\n\t\tif (!editorCommon.isCommonCodeEditor(control)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tlet controller = ReferencesController.get(control);\n\t\tif (!controller) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn TPromise.as(controller.toggleWidget(\n\t\t\tnew Range(position.lineNumber, position.column, position.lineNumber, position.column),\n\t\t\tTPromise.as(new ReferencesModel(references)),\n\t\t\tdefaultReferenceSearchOptions)).then(() => true);\n\t});\n};\n\n\n\n// register commands\n\nCommandsRegistry.registerCommand('editor.action.findReferences', findReferencesCommand);\n\nCommandsRegistry.registerCommand('editor.action.showReferences', {\n\thandler: showReferencesCommand,\n\tdescription: {\n\t\tdescription: 'Show references at a position in a file',\n\t\targs: [\n\t\t\t{ name: 'uri', description: 'The text document in which to show references', constraint: URI },\n\t\t\t{ name: 'position', description: 'The position at which to show', constraint: Position.isIPosition },\n\t\t\t{ name: 'locations', description: 'An array of locations.', constraint: Array },\n\t\t]\n\t}\n});\n\nfunction closeActiveReferenceSearch(accessor: ServicesAccessor, args: any) {\n\tvar outerEditor = getOuterEditor(accessor);\n\tif (!outerEditor) {\n\t\treturn;\n\t}\n\n\tlet controller = ReferencesController.get(outerEditor);\n\tif (!controller) {\n\t\treturn;\n\t}\n\n\tcontroller.closeWidget();\n}\n\nKeybindingsRegistry.registerCommandAndKeybindingRule({\n\tid: 'closeReferenceSearch',\n\tweight: CommonEditorRegistry.commandWeight(50),\n\tprimary: KeyCode.Escape,\n\tsecondary: [KeyMod.Shift | KeyCode.Escape],\n\twhen: ContextKeyExpr.and(ctxReferenceSearchVisible, ContextKeyExpr.not('config.editor.stablePeek')),\n\thandler: closeActiveReferenceSearch\n});\n\nKeybindingsRegistry.registerCommandAndKeybindingRule({\n\tid: 'closeReferenceSearchEditor',\n\tweight: CommonEditorRegistry.commandWeight(-101),\n\tprimary: KeyCode.Escape,\n\tsecondary: [KeyMod.Shift | KeyCode.Escape],\n\twhen: ContextKeyExpr.and(PeekContext.inPeekEditor, ContextKeyExpr.not('config.editor.stablePeek')),\n\thandler: closeActiveReferenceSearch\n});\n\n\nexport function provideReferences(model: editorCommon.IReadOnlyModel, position: Position): TPromise {\n\n\t// collect references from all providers\n\tconst promises = ReferenceProviderRegistry.ordered(model).map(provider => {\n\t\treturn asWinJsPromise((token) => {\n\t\t\treturn provider.provideReferences(model, position, { includeDeclaration: true }, token);\n\t\t}).then(result => {\n\t\t\tif (Array.isArray(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}, err => {\n\t\t\tonUnexpectedExternalError(err);\n\t\t});\n\t});\n\n\treturn TPromise.join(promises).then(references => {\n\t\tlet result: Location[] = [];\n\t\tfor (let ref of references) {\n\t\t\tif (ref) {\n\t\t\t\tresult.push(...ref);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t});\n}\n\nCommonEditorRegistry.registerDefaultLanguageCommand('_executeReferenceProvider', provideReferences);\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'use strict';\n\nimport 'vs/editor/common/controller/coreCommands';\nimport 'vs/editor/browser/widget/codeEditorWidget';\nimport 'vs/editor/browser/widget/diffEditorWidget';\nimport 'vs/editor/browser/widget/diffNavigator';\n\nimport 'vs/editor/contrib/bracketMatching/common/bracketMatching';\nimport 'vs/css!vs/editor/contrib/bracketMatching/browser/bracketMatching';\nimport 'vs/editor/contrib/caretOperations/common/caretOperations';\nimport 'vs/editor/contrib/caretOperations/common/transpose';\nimport 'vs/editor/contrib/clipboard/browser/clipboard';\nimport 'vs/editor/contrib/codelens/browser/codelensController';\nimport 'vs/editor/contrib/comment/common/comment';\nimport 'vs/editor/contrib/contextmenu/browser/contextmenu';\nimport 'vs/editor/contrib/cursorUndo/browser/cursorUndo';\nimport 'vs/editor/contrib/dnd/browser/dnd';\nimport 'vs/editor/contrib/find/browser/find';\nimport 'vs/editor/contrib/folding/browser/folding';\nimport 'vs/editor/contrib/format/browser/formatActions';\nimport 'vs/editor/contrib/goToDeclaration/browser/goToDeclarationCommands';\nimport 'vs/editor/contrib/goToDeclaration/browser/goToDeclarationMouse';\nimport 'vs/editor/contrib/gotoError/browser/gotoError';\nimport 'vs/editor/contrib/hover/browser/hover';\nimport 'vs/editor/contrib/inPlaceReplace/common/inPlaceReplace';\nimport 'vs/editor/contrib/linesOperations/common/linesOperations';\nimport 'vs/editor/contrib/links/browser/links';\nimport 'vs/editor/contrib/multicursor/common/multicursor';\nimport 'vs/editor/contrib/parameterHints/browser/parameterHints';\nimport 'vs/editor/contrib/quickFix/browser/quickFixCommands';\nimport 'vs/editor/contrib/referenceSearch/browser/referenceSearch';\nimport 'vs/editor/contrib/rename/browser/rename';\nimport 'vs/editor/contrib/smartSelect/common/smartSelect';\nimport 'vs/editor/contrib/snippet/browser/snippetController2';\nimport 'vs/editor/contrib/suggest/browser/suggestController';\nimport 'vs/editor/contrib/toggleTabFocusMode/common/toggleTabFocusMode';\nimport 'vs/editor/contrib/wordHighlighter/common/wordHighlighter';\nimport 'vs/editor/contrib/wordOperations/common/wordOperations';\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'use strict';\n\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { IConfigurationService } from 'vs/platform/configuration/common/configuration';\nimport { ContextMenuService } from 'vs/platform/contextview/browser/contextMenuService';\nimport { IContextMenuService, IContextViewService } from 'vs/platform/contextview/browser/contextView';\nimport { ContextViewService } from 'vs/platform/contextview/browser/contextViewService';\nimport { createDecorator, IInstantiationService, ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation';\nimport { InstantiationService } from 'vs/platform/instantiation/common/instantiationService';\nimport { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';\nimport { ICommandService } from 'vs/platform/commands/common/commands';\nimport { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';\nimport { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';\nimport { MarkerService } from 'vs/platform/markers/common/markerService';\nimport { IMarkerService } from 'vs/platform/markers/common/markers';\nimport { IMessageService } from 'vs/platform/message/common/message';\nimport { IProgressService } from 'vs/platform/progress/common/progress';\nimport { IStorageService, NullStorageService } from 'vs/platform/storage/common/storage';\nimport { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';\nimport { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';\nimport { ICodeEditorService } from 'vs/editor/common/services/codeEditorService';\nimport { IEditorWorkerService } from 'vs/editor/common/services/editorWorkerService';\nimport { EditorWorkerServiceImpl } from 'vs/editor/common/services/editorWorkerServiceImpl';\nimport { ITextResourceConfigurationService } from 'vs/editor/common/services/resourceConfiguration';\nimport { IModeService } from 'vs/editor/common/services/modeService';\nimport { ModeServiceImpl } from 'vs/editor/common/services/modeServiceImpl';\nimport { IModelService } from 'vs/editor/common/services/modelService';\nimport { ModelServiceImpl } from 'vs/editor/common/services/modelServiceImpl';\nimport { CodeEditorServiceImpl } from 'vs/editor/browser/services/codeEditorServiceImpl';\nimport {\n\tSimpleConfigurationService, SimpleResourceConfigurationService, SimpleMenuService, SimpleMessageService,\n\tSimpleProgressService, StandaloneCommandService, StandaloneKeybindingService,\n\tStandaloneTelemetryService, SimpleWorkspaceContextService\n} from 'vs/editor/standalone/browser/simpleServices';\nimport { ContextKeyService } from 'vs/platform/contextkey/browser/contextKeyService';\nimport { IMenuService } from 'vs/platform/actions/common/actions';\nimport { IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneThemeService';\nimport { StandaloneThemeServiceImpl } from 'vs/editor/standalone/browser/standaloneThemeServiceImpl';\n\nexport interface IEditorContextViewService extends IContextViewService {\n\tdispose(): void;\n\tsetContainer(domNode: HTMLElement): void;\n}\n\nexport interface IEditorOverrideServices {\n\t[index: string]: any;\n}\n\nexport module StaticServices {\n\n\tconst _serviceCollection = new ServiceCollection();\n\n\texport class LazyStaticService {\n\t\tprivate _serviceId: ServiceIdentifier;\n\t\tprivate _factory: (overrides: IEditorOverrideServices) => T;\n\t\tprivate _value: T;\n\n\t\tpublic get id() { return this._serviceId; }\n\n\t\tconstructor(serviceId: ServiceIdentifier, factory: (overrides: IEditorOverrideServices) => T) {\n\t\t\tthis._serviceId = serviceId;\n\t\t\tthis._factory = factory;\n\t\t\tthis._value = null;\n\t\t}\n\n\t\tpublic get(overrides?: IEditorOverrideServices): T {\n\t\t\tif (!this._value) {\n\t\t\t\tif (overrides) {\n\t\t\t\t\tthis._value = overrides[this._serviceId.toString()];\n\t\t\t\t}\n\t\t\t\tif (!this._value) {\n\t\t\t\t\tthis._value = this._factory(overrides);\n\t\t\t\t}\n\t\t\t\tif (!this._value) {\n\t\t\t\t\tthrow new Error('Service ' + this._serviceId + ' is missing!');\n\t\t\t\t}\n\t\t\t\t_serviceCollection.set(this._serviceId, this._value);\n\t\t\t}\n\t\t\treturn this._value;\n\t\t}\n\t}\n\n\tlet _all: LazyStaticService[] = [];\n\n\tfunction define(serviceId: ServiceIdentifier, factory: (overrides: IEditorOverrideServices) => T): LazyStaticService {\n\t\tlet r = new LazyStaticService(serviceId, factory);\n\t\t_all.push(r);\n\t\treturn r;\n\t}\n\n\texport function init(overrides: IEditorOverrideServices): [ServiceCollection, IInstantiationService] {\n\t\t// Create a fresh service collection\n\t\tlet result = new ServiceCollection();\n\n\t\t// Initialize the service collection with the overrides\n\t\tfor (let serviceId in overrides) {\n\t\t\tif (overrides.hasOwnProperty(serviceId)) {\n\t\t\t\tresult.set(createDecorator(serviceId), overrides[serviceId]);\n\t\t\t}\n\t\t}\n\n\t\t// Make sure the same static services are present in all service collections\n\t\t_all.forEach(service => result.set(service.id, service.get(overrides)));\n\n\t\t// Ensure the collection gets the correct instantiation service\n\t\tlet instantiationService = new InstantiationService(result, true);\n\t\tresult.set(IInstantiationService, instantiationService);\n\n\t\treturn [result, instantiationService];\n\t}\n\n\texport const instantiationService = define(IInstantiationService, () => new InstantiationService(_serviceCollection, true));\n\n\tconst configurationServiceImpl = new SimpleConfigurationService();\n\texport const configurationService = define(IConfigurationService, () => configurationServiceImpl);\n\n\texport const resourceConfigurationService = define(ITextResourceConfigurationService, () => new SimpleResourceConfigurationService(configurationServiceImpl));\n\n\texport const contextService = define(IWorkspaceContextService, () => new SimpleWorkspaceContextService());\n\n\texport const telemetryService = define(ITelemetryService, () => new StandaloneTelemetryService());\n\n\texport const messageService = define(IMessageService, () => new SimpleMessageService());\n\n\texport const markerService = define(IMarkerService, () => new MarkerService());\n\n\texport const modeService = define(IModeService, (o) => new ModeServiceImpl());\n\n\texport const modelService = define(IModelService, (o) => new ModelServiceImpl(markerService.get(o), configurationService.get(o)));\n\n\texport const editorWorkerService = define(IEditorWorkerService, (o) => new EditorWorkerServiceImpl(modelService.get(o), resourceConfigurationService.get(o), modeService.get(o)));\n\n\texport const standaloneThemeService = define(IStandaloneThemeService, () => new StandaloneThemeServiceImpl());\n\n\texport const codeEditorService = define(ICodeEditorService, (o) => new CodeEditorServiceImpl(standaloneThemeService.get(o)));\n\n\texport const progressService = define(IProgressService, () => new SimpleProgressService());\n\n\texport const storageService = define(IStorageService, () => NullStorageService);\n\n}\n\nexport class DynamicStandaloneServices extends Disposable {\n\n\tprivate _serviceCollection: ServiceCollection;\n\tprivate _instantiationService: IInstantiationService;\n\n\tconstructor(domElement: HTMLElement, overrides: IEditorOverrideServices) {\n\t\tsuper();\n\n\t\tconst [_serviceCollection, _instantiationService] = StaticServices.init(overrides);\n\t\tthis._serviceCollection = _serviceCollection;\n\t\tthis._instantiationService = _instantiationService;\n\n\t\tconst configurationService = this.get(IConfigurationService);\n\t\tconst messageService = this.get(IMessageService);\n\t\tconst telemetryService = this.get(ITelemetryService);\n\n\t\tlet ensure = (serviceId: ServiceIdentifier, factory: () => T): T => {\n\t\t\tlet value: T = null;\n\t\t\tif (overrides) {\n\t\t\t\tvalue = overrides[serviceId.toString()];\n\t\t\t}\n\t\t\tif (!value) {\n\t\t\t\tvalue = factory();\n\t\t\t}\n\t\t\tthis._serviceCollection.set(serviceId, value);\n\t\t\treturn value;\n\t\t};\n\n\t\tlet contextKeyService = ensure(IContextKeyService, () => this._register(new ContextKeyService(configurationService)));\n\n\t\tlet commandService = ensure(ICommandService, () => new StandaloneCommandService(this._instantiationService));\n\n\t\tensure(IKeybindingService, () => this._register(new StandaloneKeybindingService(contextKeyService, commandService, messageService, domElement)));\n\n\t\tlet contextViewService = ensure(IContextViewService, () => this._register(new ContextViewService(domElement, telemetryService, messageService)));\n\n\t\tensure(IContextMenuService, () => this._register(new ContextMenuService(domElement, telemetryService, messageService, contextViewService)));\n\n\t\tensure(IMenuService, () => new SimpleMenuService(commandService));\n\t}\n\n\tpublic get(serviceId: ServiceIdentifier): T {\n\t\tlet r = this._serviceCollection.get(serviceId);\n\t\tif (!r) {\n\t\t\tthrow new Error('Missing service ' + serviceId);\n\t\t}\n\t\treturn r;\n\t}\n\n\tpublic set(serviceId: ServiceIdentifier, instance: T): void {\n\t\tthis._serviceCollection.set(serviceId, instance);\n\t}\n\n\tpublic has(serviceId: ServiceIdentifier): boolean {\n\t\treturn this._serviceCollection.has(serviceId);\n\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport 'vs/css!./standalone-tokens';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { ICodeEditor, ContentWidgetPositionPreference, OverlayWidgetPositionPreference, MouseTargetType } from 'vs/editor/browser/editorBrowser';\nimport { StandaloneEditor, IStandaloneCodeEditor, StandaloneDiffEditor, IStandaloneDiffEditor, IEditorConstructionOptions, IDiffEditorConstructionOptions } from 'vs/editor/standalone/browser/standaloneCodeEditor';\nimport { ScrollbarVisibility } from 'vs/base/common/scrollable';\nimport { IEditorOverrideServices, DynamicStandaloneServices, StaticServices } from 'vs/editor/standalone/browser/standaloneServices';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport URI from 'vs/base/common/uri';\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { OpenerService } from 'vs/platform/opener/browser/openerService';\nimport { IOpenerService } from 'vs/platform/opener/common/opener';\nimport { Colorizer, IColorizerElementOptions, IColorizerOptions } from 'vs/editor/standalone/browser/colorizer';\nimport { SimpleEditorService, SimpleEditorModelResolverService } from 'vs/editor/standalone/browser/simpleServices';\nimport * as modes from 'vs/editor/common/modes';\nimport { IWebWorkerOptions, MonacoWebWorker, createWebWorker as actualCreateWebWorker } from 'vs/editor/common/services/webWorker';\nimport { IMarkerData } from 'vs/platform/markers/common/markers';\nimport { DiffNavigator } from 'vs/editor/browser/widget/diffNavigator';\nimport { IEditorService } from 'vs/platform/editor/common/editor';\nimport { ICommandService } from 'vs/platform/commands/common/commands';\nimport { IContextViewService } from 'vs/platform/contextview/browser/contextView';\nimport { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';\nimport { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';\nimport { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';\nimport { ICodeEditorService } from 'vs/editor/common/services/codeEditorService';\nimport { IEditorWorkerService } from 'vs/editor/common/services/editorWorkerService';\nimport { ITextModelService } from 'vs/editor/common/services/resolverService';\nimport { NULL_STATE, nullTokenize } from 'vs/editor/common/modes/nullMode';\nimport { IStandaloneThemeData, IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneThemeService';\nimport { Token } from 'vs/editor/common/core/token';\nimport { FontInfo, BareFontInfo } from 'vs/editor/common/config/fontInfo';\nimport * as editorOptions from 'vs/editor/common/config/editorOptions';\nimport { CursorChangeReason } from 'vs/editor/common/controller/cursorEvents';\n\n/**\n * @internal\n */\nexport function setupServices(overrides: IEditorOverrideServices): any {\n\treturn StaticServices.init(overrides);\n}\n\nfunction withAllStandaloneServices(domElement: HTMLElement, override: IEditorOverrideServices, callback: (services: DynamicStandaloneServices) => T): T {\n\tlet services = new DynamicStandaloneServices(domElement, override);\n\n\t// The editorService is a lovely beast. It needs to point back to the code editor instance...\n\tlet simpleEditorService: SimpleEditorService = null;\n\tif (!services.has(IEditorService)) {\n\t\tsimpleEditorService = new SimpleEditorService();\n\t\tservices.set(IEditorService, simpleEditorService);\n\t}\n\n\tlet simpleEditorModelResolverService: SimpleEditorModelResolverService = null;\n\tif (!services.has(ITextModelService)) {\n\t\tsimpleEditorModelResolverService = new SimpleEditorModelResolverService();\n\t\tservices.set(ITextModelService, simpleEditorModelResolverService);\n\t}\n\n\tif (!services.has(IOpenerService)) {\n\t\tservices.set(IOpenerService, new OpenerService(services.get(IEditorService), services.get(ICommandService)));\n\t}\n\n\tlet result = callback(services);\n\n\tif (simpleEditorService) {\n\t\tsimpleEditorService.setEditor(result);\n\t}\n\n\tif (simpleEditorModelResolverService) {\n\t\tsimpleEditorModelResolverService.setEditor(result);\n\t}\n\n\treturn result;\n}\n\n/**\n * Create a new editor under `domElement`.\n * `domElement` should be empty (not contain other dom nodes).\n * The editor will read the size of `domElement`.\n */\nexport function create(domElement: HTMLElement, options?: IEditorConstructionOptions, override?: IEditorOverrideServices): IStandaloneCodeEditor {\n\treturn withAllStandaloneServices(domElement, override, (services) => {\n\t\treturn new StandaloneEditor(\n\t\t\tdomElement,\n\t\t\toptions,\n\t\t\tservices,\n\t\t\tservices.get(IInstantiationService),\n\t\t\tservices.get(ICodeEditorService),\n\t\t\tservices.get(ICommandService),\n\t\t\tservices.get(IContextKeyService),\n\t\t\tservices.get(IKeybindingService),\n\t\t\tservices.get(IContextViewService),\n\t\t\tservices.get(IStandaloneThemeService)\n\t\t);\n\t});\n}\n\n/**\n * Emitted when an editor is created.\n * Creating a diff editor might cause this listener to be invoked with the two editors.\n * @event\n */\nexport function onDidCreateEditor(listener: (codeEditor: ICodeEditor) => void): IDisposable {\n\treturn StaticServices.codeEditorService.get().onCodeEditorAdd((editor) => {\n\t\tlistener(editor);\n\t});\n}\n\n/**\n * Create a new diff editor under `domElement`.\n * `domElement` should be empty (not contain other dom nodes).\n * The editor will read the size of `domElement`.\n */\nexport function createDiffEditor(domElement: HTMLElement, options?: IDiffEditorConstructionOptions, override?: IEditorOverrideServices): IStandaloneDiffEditor {\n\treturn withAllStandaloneServices(domElement, override, (services) => {\n\t\treturn new StandaloneDiffEditor(\n\t\t\tdomElement,\n\t\t\toptions,\n\t\t\tservices,\n\t\t\tservices.get(IInstantiationService),\n\t\t\tservices.get(IContextKeyService),\n\t\t\tservices.get(IKeybindingService),\n\t\t\tservices.get(IContextViewService),\n\t\t\tservices.get(IEditorWorkerService),\n\t\t\tservices.get(ICodeEditorService),\n\t\t\tservices.get(IStandaloneThemeService)\n\t\t);\n\t});\n}\n\nexport interface IDiffNavigator {\n\trevealFirst: boolean;\n\n\tcanNavigate(): boolean;\n\tnext(): void;\n\tprevious(): void;\n\tdispose(): void;\n}\n\nexport interface IDiffNavigatorOptions {\n\treadonly followsCaret?: boolean;\n\treadonly ignoreCharChanges?: boolean;\n\treadonly alwaysRevealFirst?: boolean;\n}\n\nexport function createDiffNavigator(diffEditor: IStandaloneDiffEditor, opts?: IDiffNavigatorOptions): IDiffNavigator {\n\treturn new DiffNavigator(diffEditor, opts);\n}\n\nfunction doCreateModel(value: string, mode: TPromise, uri?: URI): editorCommon.IModel {\n\treturn StaticServices.modelService.get().createModel(value, mode, uri);\n}\n\n/**\n * Create a new editor model.\n * You can specify the language that should be set for this model or let the language be inferred from the `uri`.\n */\nexport function createModel(value: string, language?: string, uri?: URI): editorCommon.IModel {\n\tvalue = value || '';\n\n\tif (!language) {\n\t\tlet path = uri ? uri.path : null;\n\n\t\tlet firstLF = value.indexOf('\\n');\n\t\tlet firstLine = value;\n\t\tif (firstLF !== -1) {\n\t\t\tfirstLine = value.substring(0, firstLF);\n\t\t}\n\n\t\treturn doCreateModel(value, StaticServices.modeService.get().getOrCreateModeByFilenameOrFirstLine(path, firstLine), uri);\n\t}\n\treturn doCreateModel(value, StaticServices.modeService.get().getOrCreateMode(language), uri);\n}\n\n/**\n * Change the language for a model.\n */\nexport function setModelLanguage(model: editorCommon.IModel, language: string): void {\n\tStaticServices.modelService.get().setMode(model, StaticServices.modeService.get().getOrCreateMode(language));\n}\n\n/**\n * Set the markers for a model.\n */\nexport function setModelMarkers(model: editorCommon.IModel, owner: string, markers: IMarkerData[]): void {\n\tif (model) {\n\t\tStaticServices.markerService.get().changeOne(owner, model.uri, markers);\n\t}\n}\n\n/**\n * Get the model that has `uri` if it exists.\n */\nexport function getModel(uri: URI): editorCommon.IModel {\n\treturn StaticServices.modelService.get().getModel(uri);\n}\n\n/**\n * Get all the created models.\n */\nexport function getModels(): editorCommon.IModel[] {\n\treturn StaticServices.modelService.get().getModels();\n}\n\n/**\n * Emitted when a model is created.\n * @event\n */\nexport function onDidCreateModel(listener: (model: editorCommon.IModel) => void): IDisposable {\n\treturn StaticServices.modelService.get().onModelAdded(listener);\n}\n\n/**\n * Emitted right before a model is disposed.\n * @event\n */\nexport function onWillDisposeModel(listener: (model: editorCommon.IModel) => void): IDisposable {\n\treturn StaticServices.modelService.get().onModelRemoved(listener);\n}\n\n/**\n * Emitted when a different language is set to a model.\n * @event\n */\nexport function onDidChangeModelLanguage(listener: (e: { readonly model: editorCommon.IModel; readonly oldLanguage: string; }) => void): IDisposable {\n\treturn StaticServices.modelService.get().onModelModeChanged((e) => {\n\t\tlistener({\n\t\t\tmodel: e.model,\n\t\t\toldLanguage: e.oldModeId\n\t\t});\n\t});\n}\n\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(opts: IWebWorkerOptions): MonacoWebWorker {\n\treturn actualCreateWebWorker(StaticServices.modelService.get(), opts);\n}\n\n/**\n * Colorize the contents of `domNode` using attribute `data-lang`.\n */\nexport function colorizeElement(domNode: HTMLElement, options: IColorizerElementOptions): TPromise {\n\treturn Colorizer.colorizeElement(StaticServices.standaloneThemeService.get(), StaticServices.modeService.get(), domNode, options);\n}\n\n/**\n * Colorize `text` using language `languageId`.\n */\nexport function colorize(text: string, languageId: string, options: IColorizerOptions): TPromise {\n\treturn Colorizer.colorize(StaticServices.modeService.get(), text, languageId, options);\n}\n\n/**\n * Colorize a line in a model.\n */\nexport function colorizeModelLine(model: editorCommon.IModel, lineNumber: number, tabSize: number = 4): string {\n\treturn Colorizer.colorizeModelLine(model, lineNumber, tabSize);\n}\n\n/**\n * @internal\n */\nfunction getSafeTokenizationSupport(languageId: string): modes.ITokenizationSupport {\n\tlet tokenizationSupport = modes.TokenizationRegistry.get(languageId);\n\tif (tokenizationSupport) {\n\t\treturn tokenizationSupport;\n\t}\n\treturn {\n\t\tgetInitialState: () => NULL_STATE,\n\t\ttokenize: (line: string, state: modes.IState, deltaOffset: number) => nullTokenize(languageId, line, state, deltaOffset),\n\t\ttokenize2: undefined,\n\t};\n}\n\n/**\n * Tokenize `text` using language `languageId`\n */\nexport function tokenize(text: string, languageId: string): Token[][] {\n\tlet modeService = StaticServices.modeService.get();\n\t// Needed in order to get the mode registered for subsequent look-ups\n\tmodeService.getOrCreateMode(languageId);\n\n\tlet tokenizationSupport = getSafeTokenizationSupport(languageId);\n\tlet lines = text.split(/\\r\\n|\\r|\\n/);\n\tlet result: Token[][] = [];\n\tlet state = tokenizationSupport.getInitialState();\n\tfor (let i = 0, len = lines.length; i < len; i++) {\n\t\tlet line = lines[i];\n\t\tlet tokenizationResult = tokenizationSupport.tokenize(line, state, 0);\n\n\t\tresult[i] = tokenizationResult.tokens;\n\t\tstate = tokenizationResult.endState;\n\t}\n\treturn result;\n}\n\n/**\n * Define a new theme.\n */\nexport function defineTheme(themeName: string, themeData: IStandaloneThemeData): void {\n\tStaticServices.standaloneThemeService.get().defineTheme(themeName, themeData);\n}\n\n/**\n * Switches to a theme.\n */\nexport function setTheme(themeName: string): void {\n\tStaticServices.standaloneThemeService.get().setTheme(themeName);\n}\n\n/**\n * @internal\n */\nexport function createMonacoEditorAPI(): typeof monaco.editor {\n\treturn {\n\t\t// methods\n\t\tcreate: create,\n\t\tonDidCreateEditor: onDidCreateEditor,\n\t\tcreateDiffEditor: createDiffEditor,\n\t\tcreateDiffNavigator: createDiffNavigator,\n\n\t\tcreateModel: createModel,\n\t\tsetModelLanguage: setModelLanguage,\n\t\tsetModelMarkers: setModelMarkers,\n\t\tgetModels: getModels,\n\t\tgetModel: getModel,\n\t\tonDidCreateModel: onDidCreateModel,\n\t\tonWillDisposeModel: onWillDisposeModel,\n\t\tonDidChangeModelLanguage: onDidChangeModelLanguage,\n\n\n\t\tcreateWebWorker: createWebWorker,\n\t\tcolorizeElement: colorizeElement,\n\t\tcolorize: colorize,\n\t\tcolorizeModelLine: colorizeModelLine,\n\t\ttokenize: tokenize,\n\t\tdefineTheme: defineTheme,\n\t\tsetTheme: setTheme,\n\n\t\t// enums\n\t\tScrollbarVisibility: ScrollbarVisibility,\n\t\tWrappingIndent: editorOptions.WrappingIndent,\n\t\tOverviewRulerLane: editorCommon.OverviewRulerLane,\n\t\tEndOfLinePreference: editorCommon.EndOfLinePreference,\n\t\tDefaultEndOfLine: editorCommon.DefaultEndOfLine,\n\t\tEndOfLineSequence: editorCommon.EndOfLineSequence,\n\t\tTrackedRangeStickiness: editorCommon.TrackedRangeStickiness,\n\t\tCursorChangeReason: CursorChangeReason,\n\t\tMouseTargetType: MouseTargetType,\n\t\tTextEditorCursorStyle: editorOptions.TextEditorCursorStyle,\n\t\tTextEditorCursorBlinkingStyle: editorOptions.TextEditorCursorBlinkingStyle,\n\t\tContentWidgetPositionPreference: ContentWidgetPositionPreference,\n\t\tOverlayWidgetPositionPreference: OverlayWidgetPositionPreference,\n\t\tRenderMinimap: editorOptions.RenderMinimap,\n\n\t\t// classes\n\t\tInternalEditorOptions: editorOptions.InternalEditorOptions,\n\t\tBareFontInfo: BareFontInfo,\n\t\tFontInfo: FontInfo,\n\t\tTextModelResolvedOptions: editorCommon.TextModelResolvedOptions,\n\t\tFindMatch: editorCommon.FindMatch,\n\n\t\t// vars\n\t\tEditorType: editorCommon.EditorType\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { TPromise } from 'vs/base/common/winjs.base';\nimport { IDisposable } from 'vs/base/common/lifecycle';\nimport { ModesRegistry } from 'vs/editor/common/modes/modesRegistry';\nimport { IMonarchLanguage } from 'vs/editor/standalone/common/monarch/monarchTypes';\nimport { ILanguageExtensionPoint } from 'vs/editor/common/services/modeService';\nimport { StaticServices } from 'vs/editor/standalone/browser/standaloneServices';\nimport * as modes from 'vs/editor/common/modes';\nimport { LanguageConfiguration, IndentAction } from 'vs/editor/common/modes/languageConfiguration';\nimport * as editorCommon from 'vs/editor/common/editorCommon';\nimport { Position } from 'vs/editor/common/core/position';\nimport { Range } from 'vs/editor/common/core/range';\nimport { CancellationToken } from 'vs/base/common/cancellation';\nimport { toThenable } from 'vs/base/common/async';\nimport { compile } from 'vs/editor/standalone/common/monarch/monarchCompile';\nimport { createTokenizationSupport } from 'vs/editor/standalone/common/monarch/monarchLexer';\nimport { LanguageConfigurationRegistry } from 'vs/editor/common/modes/languageConfigurationRegistry';\nimport { IMarkerData } from 'vs/platform/markers/common/markers';\nimport { Token, TokenizationResult, TokenizationResult2 } from 'vs/editor/common/core/token';\nimport { IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneThemeService';\n\n/**\n * Register information about a new language.\n */\nexport function register(language: ILanguageExtensionPoint): void {\n\tModesRegistry.registerLanguage(language);\n}\n\n/**\n * Get the information of all the registered languages.\n */\nexport function getLanguages(): ILanguageExtensionPoint[] {\n\tlet result: ILanguageExtensionPoint[] = [];\n\tresult = result.concat(ModesRegistry.getLanguages());\n\treturn result;\n}\n\n/**\n * An event emitted when a language is first time needed (e.g. a model has it set).\n * @event\n */\nexport function onLanguage(languageId: string, callback: () => void): IDisposable {\n\tlet disposable = StaticServices.modeService.get().onDidCreateMode((mode) => {\n\t\tif (mode.getId() === languageId) {\n\t\t\t// stop listening\n\t\t\tdisposable.dispose();\n\t\t\t// invoke actual listener\n\t\t\tcallback();\n\t\t}\n\t});\n\treturn disposable;\n}\n\n/**\n * Set the editing configuration for a language.\n */\nexport function setLanguageConfiguration(languageId: string, configuration: LanguageConfiguration): IDisposable {\n\tlet languageIdentifier = StaticServices.modeService.get().getLanguageIdentifier(languageId);\n\tif (!languageIdentifier) {\n\t\tthrow new Error(`Cannot set configuration for unknown language ${languageId}`);\n\t}\n\treturn LanguageConfigurationRegistry.register(languageIdentifier, configuration);\n}\n\n/**\n * @internal\n */\nexport class TokenizationSupport2Adapter implements modes.ITokenizationSupport {\n\n\tprivate readonly _standaloneThemeService: IStandaloneThemeService;\n\tprivate readonly _languageIdentifier: modes.LanguageIdentifier;\n\tprivate readonly _actual: TokensProvider;\n\n\tconstructor(standaloneThemeService: IStandaloneThemeService, languageIdentifier: modes.LanguageIdentifier, actual: TokensProvider) {\n\t\tthis._standaloneThemeService = standaloneThemeService;\n\t\tthis._languageIdentifier = languageIdentifier;\n\t\tthis._actual = actual;\n\t}\n\n\tpublic getInitialState(): modes.IState {\n\t\treturn this._actual.getInitialState();\n\t}\n\n\tprivate _toClassicTokens(tokens: IToken[], language: string, offsetDelta: number): Token[] {\n\t\tlet result: Token[] = [];\n\t\tlet previousStartIndex: number = 0;\n\t\tfor (let i = 0, len = tokens.length; i < len; i++) {\n\t\t\tconst t = tokens[i];\n\t\t\tlet startIndex = t.startIndex;\n\n\t\t\t// Prevent issues stemming from a buggy external tokenizer.\n\t\t\tif (i === 0) {\n\t\t\t\t// Force first token to start at first index!\n\t\t\t\tstartIndex = 0;\n\t\t\t} else if (startIndex < previousStartIndex) {\n\t\t\t\t// Force tokens to be after one another!\n\t\t\t\tstartIndex = previousStartIndex;\n\t\t\t}\n\n\t\t\tresult[i] = new Token(startIndex + offsetDelta, t.scopes, language);\n\n\t\t\tpreviousStartIndex = startIndex;\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic tokenize(line: string, state: modes.IState, offsetDelta: number): TokenizationResult {\n\t\tlet actualResult = this._actual.tokenize(line, state);\n\t\tlet tokens = this._toClassicTokens(actualResult.tokens, this._languageIdentifier.language, offsetDelta);\n\n\t\tlet endState: modes.IState;\n\t\t// try to save an object if possible\n\t\tif (actualResult.endState.equals(state)) {\n\t\t\tendState = state;\n\t\t} else {\n\t\t\tendState = actualResult.endState;\n\t\t}\n\n\t\treturn new TokenizationResult(tokens, endState);\n\t}\n\n\tprivate _toBinaryTokens(tokens: IToken[], offsetDelta: number): Uint32Array {\n\t\tconst languageId = this._languageIdentifier.id;\n\t\tconst tokenTheme = this._standaloneThemeService.getTheme().tokenTheme;\n\n\t\tlet result: number[] = [], resultLen = 0;\n\t\tlet previousStartIndex: number = 0;\n\t\tfor (let i = 0, len = tokens.length; i < len; i++) {\n\t\t\tconst t = tokens[i];\n\t\t\tconst metadata = tokenTheme.match(languageId, t.scopes);\n\t\t\tif (resultLen > 0 && result[resultLen - 1] === metadata) {\n\t\t\t\t// same metadata\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet startIndex = t.startIndex;\n\n\t\t\t// Prevent issues stemming from a buggy external tokenizer.\n\t\t\tif (i === 0) {\n\t\t\t\t// Force first token to start at first index!\n\t\t\t\tstartIndex = 0;\n\t\t\t} else if (startIndex < previousStartIndex) {\n\t\t\t\t// Force tokens to be after one another!\n\t\t\t\tstartIndex = previousStartIndex;\n\t\t\t}\n\n\t\t\tresult[resultLen++] = startIndex + offsetDelta;\n\t\t\tresult[resultLen++] = metadata;\n\n\t\t\tpreviousStartIndex = startIndex;\n\t\t}\n\n\t\tlet actualResult = new Uint32Array(resultLen);\n\t\tfor (let i = 0; i < resultLen; i++) {\n\t\t\tactualResult[i] = result[i];\n\t\t}\n\t\treturn actualResult;\n\t}\n\n\tpublic tokenize2(line: string, state: modes.IState, offsetDelta: number): TokenizationResult2 {\n\t\tlet actualResult = this._actual.tokenize(line, state);\n\t\tlet tokens = this._toBinaryTokens(actualResult.tokens, offsetDelta);\n\n\t\tlet endState: modes.IState;\n\t\t// try to save an object if possible\n\t\tif (actualResult.endState.equals(state)) {\n\t\t\tendState = state;\n\t\t} else {\n\t\t\tendState = actualResult.endState;\n\t\t}\n\n\t\treturn new TokenizationResult2(tokens, endState);\n\t}\n}\n\n/**\n * A token.\n */\nexport interface IToken {\n\tstartIndex: number;\n\tscopes: string;\n}\n\n/**\n * The result of a line tokenization.\n */\nexport interface ILineTokens {\n\t/**\n\t * The list of tokens on the line.\n\t */\n\ttokens: IToken[];\n\t/**\n\t * The tokenization end state.\n\t * A pointer will be held to this and the object should not be modified by the tokenizer after the pointer is returned.\n\t */\n\tendState: modes.IState;\n}\n\n/**\n * A \"manual\" provider of tokens.\n */\nexport interface TokensProvider {\n\t/**\n\t * The initial state of a language. Will be the state passed in to tokenize the first line.\n\t */\n\tgetInitialState(): modes.IState;\n\t/**\n\t * Tokenize a line given the state at the beginning of the line.\n\t */\n\ttokenize(line: string, state: modes.IState): ILineTokens;\n}\n\n/**\n * Set the tokens provider for a language (manual implementation).\n */\nexport function setTokensProvider(languageId: string, provider: TokensProvider): IDisposable {\n\tlet languageIdentifier = StaticServices.modeService.get().getLanguageIdentifier(languageId);\n\tif (!languageIdentifier) {\n\t\tthrow new Error(`Cannot set tokens provider for unknown language ${languageId}`);\n\t}\n\tlet adapter = new TokenizationSupport2Adapter(StaticServices.standaloneThemeService.get(), languageIdentifier, provider);\n\treturn modes.TokenizationRegistry.register(languageId, adapter);\n}\n\n/**\n * Set the tokens provider for a language (monarch implementation).\n */\nexport function setMonarchTokensProvider(languageId: string, languageDef: IMonarchLanguage): IDisposable {\n\tlet lexer = compile(languageId, languageDef);\n\tlet adapter = createTokenizationSupport(StaticServices.modeService.get(), StaticServices.standaloneThemeService.get(), languageId, lexer);\n\treturn modes.TokenizationRegistry.register(languageId, adapter);\n}\n\n/**\n * Register a reference provider (used by e.g. reference search).\n */\nexport function registerReferenceProvider(languageId: string, provider: modes.ReferenceProvider): IDisposable {\n\treturn modes.ReferenceProviderRegistry.register(languageId, provider);\n}\n\n/**\n * Register a rename provider (used by e.g. rename symbol).\n */\nexport function registerRenameProvider(languageId: string, provider: modes.RenameProvider): IDisposable {\n\treturn modes.RenameProviderRegistry.register(languageId, provider);\n}\n\n/**\n * Register a signature help provider (used by e.g. paremeter hints).\n */\nexport function registerSignatureHelpProvider(languageId: string, provider: modes.SignatureHelpProvider): IDisposable {\n\treturn modes.SignatureHelpProviderRegistry.register(languageId, provider);\n}\n\n/**\n * Register a hover provider (used by e.g. editor hover).\n */\nexport function registerHoverProvider(languageId: string, provider: modes.HoverProvider): IDisposable {\n\treturn modes.HoverProviderRegistry.register(languageId, {\n\t\tprovideHover: (model: editorCommon.IReadOnlyModel, position: Position, token: CancellationToken): Thenable => {\n\t\t\tlet word = model.getWordAtPosition(position);\n\n\t\t\treturn toThenable(provider.provideHover(model, position, token)).then((value) => {\n\t\t\t\tif (!value) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tif (!value.range && word) {\n\t\t\t\t\tvalue.range = new Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn);\n\t\t\t\t}\n\t\t\t\tif (!value.range) {\n\t\t\t\t\tvalue.range = new Range(position.lineNumber, position.column, position.lineNumber, position.column);\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t});\n\t\t}\n\t});\n}\n\n/**\n * Register a document symbol provider (used by e.g. outline).\n */\nexport function registerDocumentSymbolProvider(languageId: string, provider: modes.DocumentSymbolProvider): IDisposable {\n\treturn modes.DocumentSymbolProviderRegistry.register(languageId, provider);\n}\n\n/**\n * Register a document highlight provider (used by e.g. highlight occurrences).\n */\nexport function registerDocumentHighlightProvider(languageId: string, provider: modes.DocumentHighlightProvider): IDisposable {\n\treturn modes.DocumentHighlightProviderRegistry.register(languageId, provider);\n}\n\n/**\n * Register a definition provider (used by e.g. go to definition).\n */\nexport function registerDefinitionProvider(languageId: string, provider: modes.DefinitionProvider): IDisposable {\n\treturn modes.DefinitionProviderRegistry.register(languageId, provider);\n}\n\n/**\n * Register a implementation provider (used by e.g. go to implementation).\n */\nexport function registerImplementationProvider(languageId: string, provider: modes.ImplementationProvider): IDisposable {\n\treturn modes.ImplementationProviderRegistry.register(languageId, provider);\n}\n\n/**\n * Register a type definition provider (used by e.g. go to type definition).\n */\nexport function registerTypeDefinitionProvider(languageId: string, provider: modes.TypeDefinitionProvider): IDisposable {\n\treturn modes.TypeDefinitionProviderRegistry.register(languageId, provider);\n}\n\n/**\n * Register a code lens provider (used by e.g. inline code lenses).\n */\nexport function registerCodeLensProvider(languageId: string, provider: modes.CodeLensProvider): IDisposable {\n\treturn modes.CodeLensProviderRegistry.register(languageId, provider);\n}\n\n/**\n * Register a code action provider (used by e.g. quick fix).\n */\nexport function registerCodeActionProvider(languageId: string, provider: CodeActionProvider): IDisposable {\n\treturn modes.CodeActionProviderRegistry.register(languageId, {\n\t\tprovideCodeActions: (model: editorCommon.IReadOnlyModel, range: Range, token: CancellationToken): modes.CodeAction[] | Thenable => {\n\t\t\tlet markers = StaticServices.markerService.get().read({ resource: model.uri }).filter(m => {\n\t\t\t\treturn Range.areIntersectingOrTouching(m, range);\n\t\t\t});\n\t\t\treturn provider.provideCodeActions(model, range, { markers }, token);\n\t\t}\n\t});\n}\n\n/**\n * Register a formatter that can handle only entire models.\n */\nexport function registerDocumentFormattingEditProvider(languageId: string, provider: modes.DocumentFormattingEditProvider): IDisposable {\n\treturn modes.DocumentFormattingEditProviderRegistry.register(languageId, provider);\n}\n\n/**\n * Register a formatter that can handle a range inside a model.\n */\nexport function registerDocumentRangeFormattingEditProvider(languageId: string, provider: modes.DocumentRangeFormattingEditProvider): IDisposable {\n\treturn modes.DocumentRangeFormattingEditProviderRegistry.register(languageId, provider);\n}\n\n/**\n * Register a formatter than can do formatting as the user types.\n */\nexport function registerOnTypeFormattingEditProvider(languageId: string, provider: modes.OnTypeFormattingEditProvider): IDisposable {\n\treturn modes.OnTypeFormattingEditProviderRegistry.register(languageId, provider);\n}\n\n/**\n * Register a link provider that can find links in text.\n */\nexport function registerLinkProvider(languageId: string, provider: modes.LinkProvider): IDisposable {\n\treturn modes.LinkProviderRegistry.register(languageId, provider);\n}\n\n/**\n * Register a completion item provider (use by e.g. suggestions).\n */\nexport function registerCompletionItemProvider(languageId: string, provider: CompletionItemProvider): IDisposable {\n\tlet adapter = new SuggestAdapter(provider);\n\treturn modes.SuggestRegistry.register(languageId, {\n\t\ttriggerCharacters: provider.triggerCharacters,\n\t\tprovideCompletionItems: (model: editorCommon.IReadOnlyModel, position: Position, token: CancellationToken): Thenable => {\n\t\t\treturn adapter.provideCompletionItems(model, position, token);\n\t\t},\n\t\tresolveCompletionItem: (model: editorCommon.IReadOnlyModel, position: Position, suggestion: modes.ISuggestion, token: CancellationToken): Thenable => {\n\t\t\treturn adapter.resolveCompletionItem(model, position, suggestion, token);\n\t\t}\n\t});\n}\n\n/**\n * Contains additional diagnostic information about the context in which\n * a [code action](#CodeActionProvider.provideCodeActions) is run.\n */\nexport interface CodeActionContext {\n\n\t/**\n\t * An array of diagnostics.\n\t *\n\t * @readonly\n\t */\n\treadonly markers: IMarkerData[];\n}\n\n/**\n * The code action interface defines the contract between extensions and\n * the [light bulb](https://code.visualstudio.com/docs/editor/editingevolved#_code-action) feature.\n */\nexport interface CodeActionProvider {\n\t/**\n\t * Provide commands for the given document and range.\n\t */\n\tprovideCodeActions(model: editorCommon.IReadOnlyModel, range: Range, context: CodeActionContext, token: CancellationToken): modes.CodeAction[] | Thenable;\n}\n\n/**\n * Completion item kinds.\n */\nexport enum CompletionItemKind {\n\tText,\n\tMethod,\n\tFunction,\n\tConstructor,\n\tField,\n\tVariable,\n\tClass,\n\tInterface,\n\tModule,\n\tProperty,\n\tUnit,\n\tValue,\n\tEnum,\n\tKeyword,\n\tSnippet,\n\tColor,\n\tFile,\n\tReference,\n\tFolder\n}\n\n/**\n * A snippet string is a template which allows to insert text\n * and to control the editor cursor when insertion happens.\n *\n * A snippet can define tab stops and placeholders with `$1`, `$2`\n * and `${3:foo}`. `$0` defines the final tab stop, it defaults to\n * the end of the snippet. Variables are defined with `$name` and\n * `${name:default value}`. The full snippet syntax is documented\n * [here](http://code.visualstudio.com/docs/editor/userdefinedsnippets#_creating-your-own-snippets).\n */\nexport interface SnippetString {\n\n\t/**\n\t * The snippet string.\n\t */\n\tvalue: string;\n}\n\n/**\n * A completion item represents a text snippet that is\n * proposed to complete text that is being typed.\n */\nexport interface CompletionItem {\n\t/**\n\t * The label of this completion item. By default\n\t * this is also the text that is inserted when selecting\n\t * this completion.\n\t */\n\tlabel: string;\n\t/**\n\t * The kind of this completion item. Based on the kind\n\t * an icon is chosen by the editor.\n\t */\n\tkind: CompletionItemKind;\n\t/**\n\t * A human-readable string with additional information\n\t * about this item, like type or symbol information.\n\t */\n\tdetail?: string;\n\t/**\n\t * A human-readable string that represents a doc-comment.\n\t */\n\tdocumentation?: string;\n\t/**\n\t * A string that should be used when comparing this item\n\t * with other items. When `falsy` the [label](#CompletionItem.label)\n\t * is used.\n\t */\n\tsortText?: string;\n\t/**\n\t * A string that should be used when filtering a set of\n\t * completion items. When `falsy` the [label](#CompletionItem.label)\n\t * is used.\n\t */\n\tfilterText?: string;\n\t/**\n\t * A string or snippet that should be inserted in a document when selecting\n\t * this completion. When `falsy` the [label](#CompletionItem.label)\n\t * is used.\n\t */\n\tinsertText?: string | SnippetString;\n\t/**\n\t * A range of text that should be replaced by this completion item.\n\t *\n\t * Defaults to a range from the start of the [current word](#TextDocument.getWordRangeAtPosition) to the\n\t * current position.\n\t *\n\t * *Note:* The range must be a [single line](#Range.isSingleLine) and it must\n\t * [contain](#Range.contains) the position at which completion has been [requested](#CompletionItemProvider.provideCompletionItems).\n\t */\n\trange?: Range;\n\t/**\n\t * @deprecated **Deprecated** in favor of `CompletionItem.insertText` and `CompletionItem.range`.\n\t *\n\t * ~~An [edit](#TextEdit) which is applied to a document when selecting\n\t * this completion. When an edit is provided the value of\n\t * [insertText](#CompletionItem.insertText) is ignored.~~\n\t *\n\t * ~~The [range](#Range) of the edit must be single-line and on the same\n\t * line completions were [requested](#CompletionItemProvider.provideCompletionItems) at.~~\n\t */\n\ttextEdit?: editorCommon.ISingleEditOperation;\n}\n/**\n * Represents a collection of [completion items](#CompletionItem) to be presented\n * in the editor.\n */\nexport interface CompletionList {\n\t/**\n\t * This list it not complete. Further typing should result in recomputing\n\t * this list.\n\t */\n\tisIncomplete?: boolean;\n\t/**\n\t * The completion items.\n\t */\n\titems: CompletionItem[];\n}\n/**\n * The completion item provider interface defines the contract between extensions and\n * the [IntelliSense](https://code.visualstudio.com/docs/editor/intellisense).\n *\n * When computing *complete* completion items is expensive, providers can optionally implement\n * the `resolveCompletionItem`-function. In that case it is enough to return completion\n * items with a [label](#CompletionItem.label) from the\n * [provideCompletionItems](#CompletionItemProvider.provideCompletionItems)-function. Subsequently,\n * when a completion item is shown in the UI and gains focus this provider is asked to resolve\n * the item, like adding [doc-comment](#CompletionItem.documentation) or [details](#CompletionItem.detail).\n */\nexport interface CompletionItemProvider {\n\ttriggerCharacters?: string[];\n\t/**\n\t * Provide completion items for the given position and document.\n\t */\n\tprovideCompletionItems(model: editorCommon.IReadOnlyModel, position: Position, token: CancellationToken): CompletionItem[] | Thenable | CompletionList | Thenable;\n\t/**\n\t * Given a completion item fill in more data, like [doc-comment](#CompletionItem.documentation)\n\t * or [details](#CompletionItem.detail).\n\t *\n\t * The editor will only resolve a completion item once.\n\t */\n\tresolveCompletionItem?(item: CompletionItem, token: CancellationToken): CompletionItem | Thenable;\n}\n\ninterface ISuggestion2 extends modes.ISuggestion {\n\t_actual: CompletionItem;\n}\nfunction convertKind(kind: CompletionItemKind): modes.SuggestionType {\n\tswitch (kind) {\n\t\tcase CompletionItemKind.Method: return 'method';\n\t\tcase CompletionItemKind.Function: return 'function';\n\t\tcase CompletionItemKind.Constructor: return 'constructor';\n\t\tcase CompletionItemKind.Field: return 'field';\n\t\tcase CompletionItemKind.Variable: return 'variable';\n\t\tcase CompletionItemKind.Class: return 'class';\n\t\tcase CompletionItemKind.Interface: return 'interface';\n\t\tcase CompletionItemKind.Module: return 'module';\n\t\tcase CompletionItemKind.Property: return 'property';\n\t\tcase CompletionItemKind.Unit: return 'unit';\n\t\tcase CompletionItemKind.Value: return 'value';\n\t\tcase CompletionItemKind.Enum: return 'enum';\n\t\tcase CompletionItemKind.Keyword: return 'keyword';\n\t\tcase CompletionItemKind.Snippet: return 'snippet';\n\t\tcase CompletionItemKind.Text: return 'text';\n\t\tcase CompletionItemKind.Color: return 'color';\n\t\tcase CompletionItemKind.File: return 'file';\n\t\tcase CompletionItemKind.Reference: return 'reference';\n\t\tcase CompletionItemKind.Folder: return 'folder';\n\t}\n\treturn 'property';\n}\nclass SuggestAdapter {\n\n\tprivate _provider: CompletionItemProvider;\n\n\tconstructor(provider: CompletionItemProvider) {\n\t\tthis._provider = provider;\n\t}\n\n\tprivate static from(item: CompletionItem, position: Position, wordStartPos: Position): ISuggestion2 {\n\t\tlet suggestion: ISuggestion2 = {\n\t\t\t_actual: item,\n\t\t\tlabel: item.label,\n\t\t\tinsertText: item.label,\n\t\t\ttype: convertKind(item.kind),\n\t\t\tdetail: item.detail,\n\t\t\tdocumentation: item.documentation,\n\t\t\tsortText: item.sortText,\n\t\t\tfilterText: item.filterText,\n\t\t\tsnippetType: 'internal'\n\t\t};\n\t\tlet editRange = item.textEdit ? item.textEdit.range : item.range;\n\t\tif (editRange) {\n\t\t\tlet isSingleLine = (editRange.startLineNumber === editRange.endLineNumber);\n\n\t\t\t// invalid text edit\n\t\t\tif (!isSingleLine || editRange.startLineNumber !== position.lineNumber) {\n\t\t\t\tconsole.warn('INVALID range, must be single line and on the same line');\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// insert the text of the edit and create a dedicated\n\t\t\t// suggestion-container with overwrite[Before|After]\n\t\t\tsuggestion.overwriteBefore = position.column - editRange.startColumn;\n\t\t\tsuggestion.overwriteAfter = editRange.endColumn - position.column;\n\t\t} else {\n\t\t\tsuggestion.overwriteBefore = position.column - wordStartPos.column;\n\t\t\tsuggestion.overwriteAfter = 0;\n\t\t}\n\t\tif (item.textEdit) {\n\t\t\tsuggestion.insertText = item.textEdit.text;\n\t\t} else if (typeof item.insertText === 'object' && typeof item.insertText.value === 'string') {\n\t\t\tsuggestion.insertText = item.insertText.value;\n\t\t\tsuggestion.snippetType = 'textmate';\n\t\t} else if (typeof item.insertText === 'string') {\n\t\t\tsuggestion.insertText = item.insertText;\n\t\t}\n\t\treturn suggestion;\n\t}\n\n\tprovideCompletionItems(model: editorCommon.IReadOnlyModel, position: Position, token: CancellationToken): Thenable {\n\n\t\treturn toThenable(this._provider.provideCompletionItems(model, position, token)).then(value => {\n\t\t\tconst result: modes.ISuggestResult = {\n\t\t\t\tsuggestions: []\n\t\t\t};\n\n\t\t\t// default text edit start\n\t\t\tlet wordStartPos = position;\n\t\t\tconst word = model.getWordUntilPosition(position);\n\t\t\tif (word) {\n\t\t\t\twordStartPos = new Position(wordStartPos.lineNumber, word.startColumn);\n\t\t\t}\n\n\t\t\tlet list: CompletionList;\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tlist = {\n\t\t\t\t\titems: value,\n\t\t\t\t\tisIncomplete: false\n\t\t\t\t};\n\t\t\t} else if (typeof value === 'object' && Array.isArray(value.items)) {\n\t\t\t\tlist = value;\n\t\t\t\tresult.incomplete = list.isIncomplete;\n\t\t\t} else if (!value) {\n\t\t\t\t// undefined and null are valid results\n\t\t\t\treturn undefined;\n\t\t\t} else {\n\t\t\t\t// warn about everything else\n\t\t\t\tconsole.warn('INVALID result from completion provider. expected CompletionItem-array or CompletionList but got:', value);\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < list.items.length; i++) {\n\t\t\t\tconst item = list.items[i];\n\t\t\t\tconst suggestion = SuggestAdapter.from(item, position, wordStartPos);\n\t\t\t\tif (suggestion) {\n\t\t\t\t\tresult.suggestions.push(suggestion);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tresolveCompletionItem(model: editorCommon.IReadOnlyModel, position: Position, suggestion: modes.ISuggestion, token: CancellationToken): Thenable {\n\t\tif (typeof this._provider.resolveCompletionItem !== 'function') {\n\t\t\treturn TPromise.as(suggestion);\n\t\t}\n\n\t\tlet item = (suggestion)._actual;\n\t\tif (!item) {\n\t\t\treturn TPromise.as(suggestion);\n\t\t}\n\n\t\treturn toThenable(this._provider.resolveCompletionItem(item, token)).then(resolvedItem => {\n\t\t\tlet wordStartPos = position;\n\t\t\tconst word = model.getWordUntilPosition(position);\n\t\t\tif (word) {\n\t\t\t\twordStartPos = new Position(wordStartPos.lineNumber, word.startColumn);\n\t\t\t}\n\t\t\treturn SuggestAdapter.from(resolvedItem, position, wordStartPos);\n\t\t});\n\t}\n}\n\n/**\n * @internal\n */\nexport function createMonacoLanguagesAPI(): typeof monaco.languages {\n\treturn {\n\t\tregister: register,\n\t\tgetLanguages: getLanguages,\n\t\tonLanguage: onLanguage,\n\n\t\t// provider methods\n\t\tsetLanguageConfiguration: setLanguageConfiguration,\n\t\tsetTokensProvider: setTokensProvider,\n\t\tsetMonarchTokensProvider: setMonarchTokensProvider,\n\t\tregisterReferenceProvider: registerReferenceProvider,\n\t\tregisterRenameProvider: registerRenameProvider,\n\t\tregisterCompletionItemProvider: registerCompletionItemProvider,\n\t\tregisterSignatureHelpProvider: registerSignatureHelpProvider,\n\t\tregisterHoverProvider: registerHoverProvider,\n\t\tregisterDocumentSymbolProvider: registerDocumentSymbolProvider,\n\t\tregisterDocumentHighlightProvider: registerDocumentHighlightProvider,\n\t\tregisterDefinitionProvider: registerDefinitionProvider,\n\t\tregisterImplementationProvider: registerImplementationProvider,\n\t\tregisterTypeDefinitionProvider: registerTypeDefinitionProvider,\n\t\tregisterCodeLensProvider: registerCodeLensProvider,\n\t\tregisterCodeActionProvider: registerCodeActionProvider,\n\t\tregisterDocumentFormattingEditProvider: registerDocumentFormattingEditProvider,\n\t\tregisterDocumentRangeFormattingEditProvider: registerDocumentRangeFormattingEditProvider,\n\t\tregisterOnTypeFormattingEditProvider: registerOnTypeFormattingEditProvider,\n\t\tregisterLinkProvider: registerLinkProvider,\n\n\t\t// enums\n\t\tDocumentHighlightKind: modes.DocumentHighlightKind,\n\t\tCompletionItemKind: CompletionItemKind,\n\t\tSymbolKind: modes.SymbolKind,\n\t\tIndentAction: IndentAction,\n\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport 'vs/editor/editor.all';\nimport 'vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp';\nimport 'vs/editor/standalone/browser/inspectTokens/inspectTokens';\nimport 'vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard';\nimport 'vs/editor/standalone/browser/quickOpen/quickOutline';\nimport 'vs/editor/standalone/browser/quickOpen/gotoLine';\nimport 'vs/editor/standalone/browser/quickOpen/quickCommand';\nimport 'vs/editor/standalone/browser/toggleHighContrast/toggleHighContrast';\n\nimport { createMonacoBaseAPI } from 'vs/editor/common/standalone/standaloneBase';\nimport { createMonacoEditorAPI } from 'vs/editor/standalone/browser/standaloneEditor';\nimport { createMonacoLanguagesAPI } from 'vs/editor/standalone/browser/standaloneLanguages';\nimport { EDITOR_DEFAULTS, WrappingIndent } from 'vs/editor/common/config/editorOptions';\n\n// Set defaults for standalone editor\n(EDITOR_DEFAULTS).wrappingIndent = WrappingIndent.None;\n(EDITOR_DEFAULTS.contribInfo).folding = false;\n(EDITOR_DEFAULTS.viewInfo).glyphMargin = false;\n(EDITOR_DEFAULTS).autoIndent = false;\n\nlet base = createMonacoBaseAPI();\nfor (let prop in base) {\n\tif (base.hasOwnProperty(prop)) {\n\t\texports[prop] = base[prop];\n\t}\n}\nexports.editor = createMonacoEditorAPI();\nexports.languages = createMonacoLanguagesAPI();\n\nvar global: any = self;\nglobal.monaco = exports;\n\nif (typeof global.require !== 'undefined' && typeof global.require.config === 'function') {\n\tglobal.require.config({\n\t\tignoreDuplicateModules: [\n\t\t\t'vscode-languageserver-types',\n\t\t\t'vscode-languageserver-types/main',\n\t\t\t'vscode-nls',\n\t\t\t'vscode-nls/vscode-nls',\n\t\t\t'jsonc-parser',\n\t\t\t'jsonc-parser/main',\n\t\t\t'vscode-uri',\n\t\t\t'vscode-uri/index'\n\t\t]\n\t});\n}\n"]}