{"version":3,"file":"static/js/1834_51eded5117edbe85d91c.js","mappings":"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","sources":["file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/common/viewModel.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/common/viewModel/minimapTokensColorTracker.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/common/viewModel/monospaceLineBreaksComputer.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/common/viewModel/overviewZoneManager.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewContext.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewModelDecorations.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/common/viewModel/modelLineProjection.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewModelLines.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewModelImpl.js"],"sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as arrays from '../../base/common/arrays.js';\nimport * as strings from '../../base/common/strings.js';\nimport { Range } from './core/range.js';\nexport class Viewport {\n constructor(top, left, width, height) {\n this._viewportBrand = undefined;\n this.top = top | 0;\n this.left = left | 0;\n this.width = width | 0;\n this.height = height | 0;\n }\n}\nexport class MinimapLinesRenderingData {\n constructor(tabSize, data) {\n this.tabSize = tabSize;\n this.data = data;\n }\n}\nexport class ViewLineData {\n constructor(content, continuesWithWrappedLine, minColumn, maxColumn, startVisibleColumn, tokens, inlineDecorations) {\n this._viewLineDataBrand = undefined;\n this.content = content;\n this.continuesWithWrappedLine = continuesWithWrappedLine;\n this.minColumn = minColumn;\n this.maxColumn = maxColumn;\n this.startVisibleColumn = startVisibleColumn;\n this.tokens = tokens;\n this.inlineDecorations = inlineDecorations;\n }\n}\nexport class ViewLineRenderingData {\n constructor(minColumn, maxColumn, content, continuesWithWrappedLine, mightContainRTL, mightContainNonBasicASCII, tokens, inlineDecorations, tabSize, startVisibleColumn) {\n this.minColumn = minColumn;\n this.maxColumn = maxColumn;\n this.content = content;\n this.continuesWithWrappedLine = continuesWithWrappedLine;\n this.isBasicASCII = ViewLineRenderingData.isBasicASCII(content, mightContainNonBasicASCII);\n this.containsRTL = ViewLineRenderingData.containsRTL(content, this.isBasicASCII, mightContainRTL);\n this.tokens = tokens;\n this.inlineDecorations = inlineDecorations;\n this.tabSize = tabSize;\n this.startVisibleColumn = startVisibleColumn;\n }\n static isBasicASCII(lineContent, mightContainNonBasicASCII) {\n if (mightContainNonBasicASCII) {\n return strings.isBasicASCII(lineContent);\n }\n return true;\n }\n static containsRTL(lineContent, isBasicASCII, mightContainRTL) {\n if (!isBasicASCII && mightContainRTL) {\n return strings.containsRTL(lineContent);\n }\n return false;\n }\n}\nexport class InlineDecoration {\n constructor(range, inlineClassName, type) {\n this.range = range;\n this.inlineClassName = inlineClassName;\n this.type = type;\n }\n}\nexport class SingleLineInlineDecoration {\n constructor(startOffset, endOffset, inlineClassName, inlineClassNameAffectsLetterSpacing) {\n this.startOffset = startOffset;\n this.endOffset = endOffset;\n this.inlineClassName = inlineClassName;\n this.inlineClassNameAffectsLetterSpacing = inlineClassNameAffectsLetterSpacing;\n }\n toInlineDecoration(lineNumber) {\n return new InlineDecoration(new Range(lineNumber, this.startOffset + 1, lineNumber, this.endOffset + 1), this.inlineClassName, this.inlineClassNameAffectsLetterSpacing ? 3 /* InlineDecorationType.RegularAffectingLetterSpacing */ : 0 /* InlineDecorationType.Regular */);\n }\n}\nexport class ViewModelDecoration {\n constructor(range, options) {\n this._viewModelDecorationBrand = undefined;\n this.range = range;\n this.options = options;\n }\n}\nexport class OverviewRulerDecorationsGroup {\n constructor(color, zIndex, \n /**\n * Decorations are encoded in a number array using the following scheme:\n * - 3*i = lane\n * - 3*i+1 = startLineNumber\n * - 3*i+2 = endLineNumber\n */\n data) {\n this.color = color;\n this.zIndex = zIndex;\n this.data = data;\n }\n static compareByRenderingProps(a, b) {\n if (a.zIndex === b.zIndex) {\n if (a.color < b.color) {\n return -1;\n }\n if (a.color > b.color) {\n return 1;\n }\n return 0;\n }\n return a.zIndex - b.zIndex;\n }\n static equals(a, b) {\n return (a.color === b.color\n && a.zIndex === b.zIndex\n && arrays.equals(a.data, b.data));\n }\n static equalsArr(a, b) {\n return arrays.equals(a, b, OverviewRulerDecorationsGroup.equals);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable, markAsSingleton } from '../../../base/common/lifecycle.js';\nimport { RGBA8 } from '../core/rgba.js';\nimport { TokenizationRegistry } from '../languages.js';\nexport class MinimapTokensColorTracker extends Disposable {\n static getInstance() {\n if (!this._INSTANCE) {\n this._INSTANCE = markAsSingleton(new MinimapTokensColorTracker());\n }\n return this._INSTANCE;\n }\n constructor() {\n super();\n this._onDidChange = new Emitter();\n this.onDidChange = this._onDidChange.event;\n this._updateColorMap();\n this._register(TokenizationRegistry.onDidChange(e => {\n if (e.changedColorMap) {\n this._updateColorMap();\n }\n }));\n }\n _updateColorMap() {\n const colorMap = TokenizationRegistry.getColorMap();\n if (!colorMap) {\n this._colors = [RGBA8.Empty];\n this._backgroundIsLight = true;\n return;\n }\n this._colors = [RGBA8.Empty];\n for (let colorId = 1; colorId < colorMap.length; colorId++) {\n const source = colorMap[colorId].rgba;\n // Use a VM friendly data-type\n this._colors[colorId] = new RGBA8(source.r, source.g, source.b, Math.round(source.a * 255));\n }\n const backgroundLuminosity = colorMap[2 /* ColorId.DefaultBackground */].getRelativeLuminance();\n this._backgroundIsLight = backgroundLuminosity >= 0.5;\n this._onDidChange.fire(undefined);\n }\n getColor(colorId) {\n if (colorId < 1 || colorId >= this._colors.length) {\n // background color (basically invisible)\n colorId = 2 /* ColorId.DefaultBackground */;\n }\n return this._colors[colorId];\n }\n backgroundIsLight() {\n return this._backgroundIsLight;\n }\n}\nMinimapTokensColorTracker._INSTANCE = null;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nimport { CharacterClassifier } from '../core/characterClassifier.js';\nimport { LineInjectedText } from '../textModelEvents.js';\nimport { ModelLineProjectionData } from '../modelLineProjectionData.js';\nexport class MonospaceLineBreaksComputerFactory {\n static create(options) {\n return new MonospaceLineBreaksComputerFactory(options.get(134 /* EditorOption.wordWrapBreakBeforeCharacters */), options.get(133 /* EditorOption.wordWrapBreakAfterCharacters */));\n }\n constructor(breakBeforeChars, breakAfterChars) {\n this.classifier = new WrappingCharacterClassifier(breakBeforeChars, breakAfterChars);\n }\n createLineBreaksComputer(fontInfo, tabSize, wrappingColumn, wrappingIndent, wordBreak) {\n const requests = [];\n const injectedTexts = [];\n const previousBreakingData = [];\n return {\n addRequest: (lineText, injectedText, previousLineBreakData) => {\n requests.push(lineText);\n injectedTexts.push(injectedText);\n previousBreakingData.push(previousLineBreakData);\n },\n finalize: () => {\n const columnsForFullWidthChar = fontInfo.typicalFullwidthCharacterWidth / fontInfo.typicalHalfwidthCharacterWidth;\n const result = [];\n for (let i = 0, len = requests.length; i < len; i++) {\n const injectedText = injectedTexts[i];\n const previousLineBreakData = previousBreakingData[i];\n if (previousLineBreakData && !previousLineBreakData.injectionOptions && !injectedText) {\n result[i] = createLineBreaksFromPreviousLineBreaks(this.classifier, previousLineBreakData, requests[i], tabSize, wrappingColumn, columnsForFullWidthChar, wrappingIndent, wordBreak);\n }\n else {\n result[i] = createLineBreaks(this.classifier, requests[i], injectedText, tabSize, wrappingColumn, columnsForFullWidthChar, wrappingIndent, wordBreak);\n }\n }\n arrPool1.length = 0;\n arrPool2.length = 0;\n return result;\n }\n };\n }\n}\nclass WrappingCharacterClassifier extends CharacterClassifier {\n constructor(BREAK_BEFORE, BREAK_AFTER) {\n super(0 /* CharacterClass.NONE */);\n for (let i = 0; i < BREAK_BEFORE.length; i++) {\n this.set(BREAK_BEFORE.charCodeAt(i), 1 /* CharacterClass.BREAK_BEFORE */);\n }\n for (let i = 0; i < BREAK_AFTER.length; i++) {\n this.set(BREAK_AFTER.charCodeAt(i), 2 /* CharacterClass.BREAK_AFTER */);\n }\n }\n get(charCode) {\n if (charCode >= 0 && charCode < 256) {\n return this._asciiMap[charCode];\n }\n else {\n // Initialize CharacterClass.BREAK_IDEOGRAPHIC for these Unicode ranges:\n // 1. CJK Unified Ideographs (0x4E00 -- 0x9FFF)\n // 2. CJK Unified Ideographs Extension A (0x3400 -- 0x4DBF)\n // 3. Hiragana and Katakana (0x3040 -- 0x30FF)\n if ((charCode >= 0x3040 && charCode <= 0x30FF)\n || (charCode >= 0x3400 && charCode <= 0x4DBF)\n || (charCode >= 0x4E00 && charCode <= 0x9FFF)) {\n return 3 /* CharacterClass.BREAK_IDEOGRAPHIC */;\n }\n return (this._map.get(charCode) || this._defaultValue);\n }\n }\n}\nlet arrPool1 = [];\nlet arrPool2 = [];\nfunction createLineBreaksFromPreviousLineBreaks(classifier, previousBreakingData, lineText, tabSize, firstLineBreakColumn, columnsForFullWidthChar, wrappingIndent, wordBreak) {\n if (firstLineBreakColumn === -1) {\n return null;\n }\n const len = lineText.length;\n if (len <= 1) {\n return null;\n }\n const isKeepAll = (wordBreak === 'keepAll');\n const prevBreakingOffsets = previousBreakingData.breakOffsets;\n const prevBreakingOffsetsVisibleColumn = previousBreakingData.breakOffsetsVisibleColumn;\n const wrappedTextIndentLength = computeWrappedTextIndentLength(lineText, tabSize, firstLineBreakColumn, columnsForFullWidthChar, wrappingIndent);\n const wrappedLineBreakColumn = firstLineBreakColumn - wrappedTextIndentLength;\n const breakingOffsets = arrPool1;\n const breakingOffsetsVisibleColumn = arrPool2;\n let breakingOffsetsCount = 0;\n let lastBreakingOffset = 0;\n let lastBreakingOffsetVisibleColumn = 0;\n let breakingColumn = firstLineBreakColumn;\n const prevLen = prevBreakingOffsets.length;\n let prevIndex = 0;\n if (prevIndex >= 0) {\n let bestDistance = Math.abs(prevBreakingOffsetsVisibleColumn[prevIndex] - breakingColumn);\n while (prevIndex + 1 < prevLen) {\n const distance = Math.abs(prevBreakingOffsetsVisibleColumn[prevIndex + 1] - breakingColumn);\n if (distance >= bestDistance) {\n break;\n }\n bestDistance = distance;\n prevIndex++;\n }\n }\n while (prevIndex < prevLen) {\n // Allow for prevIndex to be -1 (for the case where we hit a tab when walking backwards from the first break)\n let prevBreakOffset = prevIndex < 0 ? 0 : prevBreakingOffsets[prevIndex];\n let prevBreakOffsetVisibleColumn = prevIndex < 0 ? 0 : prevBreakingOffsetsVisibleColumn[prevIndex];\n if (lastBreakingOffset > prevBreakOffset) {\n prevBreakOffset = lastBreakingOffset;\n prevBreakOffsetVisibleColumn = lastBreakingOffsetVisibleColumn;\n }\n let breakOffset = 0;\n let breakOffsetVisibleColumn = 0;\n let forcedBreakOffset = 0;\n let forcedBreakOffsetVisibleColumn = 0;\n // initially, we search as much as possible to the right (if it fits)\n if (prevBreakOffsetVisibleColumn <= breakingColumn) {\n let visibleColumn = prevBreakOffsetVisibleColumn;\n let prevCharCode = prevBreakOffset === 0 ? 0 /* CharCode.Null */ : lineText.charCodeAt(prevBreakOffset - 1);\n let prevCharCodeClass = prevBreakOffset === 0 ? 0 /* CharacterClass.NONE */ : classifier.get(prevCharCode);\n let entireLineFits = true;\n for (let i = prevBreakOffset; i < len; i++) {\n const charStartOffset = i;\n const charCode = lineText.charCodeAt(i);\n let charCodeClass;\n let charWidth;\n if (strings.isHighSurrogate(charCode)) {\n // A surrogate pair must always be considered as a single unit, so it is never to be broken\n i++;\n charCodeClass = 0 /* CharacterClass.NONE */;\n charWidth = 2;\n }\n else {\n charCodeClass = classifier.get(charCode);\n charWidth = computeCharWidth(charCode, visibleColumn, tabSize, columnsForFullWidthChar);\n }\n if (charStartOffset > lastBreakingOffset && canBreak(prevCharCode, prevCharCodeClass, charCode, charCodeClass, isKeepAll)) {\n breakOffset = charStartOffset;\n breakOffsetVisibleColumn = visibleColumn;\n }\n visibleColumn += charWidth;\n // check if adding character at `i` will go over the breaking column\n if (visibleColumn > breakingColumn) {\n // We need to break at least before character at `i`:\n if (charStartOffset > lastBreakingOffset) {\n forcedBreakOffset = charStartOffset;\n forcedBreakOffsetVisibleColumn = visibleColumn - charWidth;\n }\n else {\n // we need to advance at least by one character\n forcedBreakOffset = i + 1;\n forcedBreakOffsetVisibleColumn = visibleColumn;\n }\n if (visibleColumn - breakOffsetVisibleColumn > wrappedLineBreakColumn) {\n // Cannot break at `breakOffset` => reset it if it was set\n breakOffset = 0;\n }\n entireLineFits = false;\n break;\n }\n prevCharCode = charCode;\n prevCharCodeClass = charCodeClass;\n }\n if (entireLineFits) {\n // there is no more need to break => stop the outer loop!\n if (breakingOffsetsCount > 0) {\n // Add last segment, no need to assign to `lastBreakingOffset` and `lastBreakingOffsetVisibleColumn`\n breakingOffsets[breakingOffsetsCount] = prevBreakingOffsets[prevBreakingOffsets.length - 1];\n breakingOffsetsVisibleColumn[breakingOffsetsCount] = prevBreakingOffsetsVisibleColumn[prevBreakingOffsets.length - 1];\n breakingOffsetsCount++;\n }\n break;\n }\n }\n if (breakOffset === 0) {\n // must search left\n let visibleColumn = prevBreakOffsetVisibleColumn;\n let charCode = lineText.charCodeAt(prevBreakOffset);\n let charCodeClass = classifier.get(charCode);\n let hitATabCharacter = false;\n for (let i = prevBreakOffset - 1; i >= lastBreakingOffset; i--) {\n const charStartOffset = i + 1;\n const prevCharCode = lineText.charCodeAt(i);\n if (prevCharCode === 9 /* CharCode.Tab */) {\n // cannot determine the width of a tab when going backwards, so we must go forwards\n hitATabCharacter = true;\n break;\n }\n let prevCharCodeClass;\n let prevCharWidth;\n if (strings.isLowSurrogate(prevCharCode)) {\n // A surrogate pair must always be considered as a single unit, so it is never to be broken\n i--;\n prevCharCodeClass = 0 /* CharacterClass.NONE */;\n prevCharWidth = 2;\n }\n else {\n prevCharCodeClass = classifier.get(prevCharCode);\n prevCharWidth = (strings.isFullWidthCharacter(prevCharCode) ? columnsForFullWidthChar : 1);\n }\n if (visibleColumn <= breakingColumn) {\n if (forcedBreakOffset === 0) {\n forcedBreakOffset = charStartOffset;\n forcedBreakOffsetVisibleColumn = visibleColumn;\n }\n if (visibleColumn <= breakingColumn - wrappedLineBreakColumn) {\n // went too far!\n break;\n }\n if (canBreak(prevCharCode, prevCharCodeClass, charCode, charCodeClass, isKeepAll)) {\n breakOffset = charStartOffset;\n breakOffsetVisibleColumn = visibleColumn;\n break;\n }\n }\n visibleColumn -= prevCharWidth;\n charCode = prevCharCode;\n charCodeClass = prevCharCodeClass;\n }\n if (breakOffset !== 0) {\n const remainingWidthOfNextLine = wrappedLineBreakColumn - (forcedBreakOffsetVisibleColumn - breakOffsetVisibleColumn);\n if (remainingWidthOfNextLine <= tabSize) {\n const charCodeAtForcedBreakOffset = lineText.charCodeAt(forcedBreakOffset);\n let charWidth;\n if (strings.isHighSurrogate(charCodeAtForcedBreakOffset)) {\n // A surrogate pair must always be considered as a single unit, so it is never to be broken\n charWidth = 2;\n }\n else {\n charWidth = computeCharWidth(charCodeAtForcedBreakOffset, forcedBreakOffsetVisibleColumn, tabSize, columnsForFullWidthChar);\n }\n if (remainingWidthOfNextLine - charWidth < 0) {\n // it is not worth it to break at breakOffset, it just introduces an extra needless line!\n breakOffset = 0;\n }\n }\n }\n if (hitATabCharacter) {\n // cannot determine the width of a tab when going backwards, so we must go forwards from the previous break\n prevIndex--;\n continue;\n }\n }\n if (breakOffset === 0) {\n // Could not find a good breaking point\n breakOffset = forcedBreakOffset;\n breakOffsetVisibleColumn = forcedBreakOffsetVisibleColumn;\n }\n if (breakOffset <= lastBreakingOffset) {\n // Make sure that we are advancing (at least one character)\n const charCode = lineText.charCodeAt(lastBreakingOffset);\n if (strings.isHighSurrogate(charCode)) {\n // A surrogate pair must always be considered as a single unit, so it is never to be broken\n breakOffset = lastBreakingOffset + 2;\n breakOffsetVisibleColumn = lastBreakingOffsetVisibleColumn + 2;\n }\n else {\n breakOffset = lastBreakingOffset + 1;\n breakOffsetVisibleColumn = lastBreakingOffsetVisibleColumn + computeCharWidth(charCode, lastBreakingOffsetVisibleColumn, tabSize, columnsForFullWidthChar);\n }\n }\n lastBreakingOffset = breakOffset;\n breakingOffsets[breakingOffsetsCount] = breakOffset;\n lastBreakingOffsetVisibleColumn = breakOffsetVisibleColumn;\n breakingOffsetsVisibleColumn[breakingOffsetsCount] = breakOffsetVisibleColumn;\n breakingOffsetsCount++;\n breakingColumn = breakOffsetVisibleColumn + wrappedLineBreakColumn;\n while (prevIndex < 0 || (prevIndex < prevLen && prevBreakingOffsetsVisibleColumn[prevIndex] < breakOffsetVisibleColumn)) {\n prevIndex++;\n }\n let bestDistance = Math.abs(prevBreakingOffsetsVisibleColumn[prevIndex] - breakingColumn);\n while (prevIndex + 1 < prevLen) {\n const distance = Math.abs(prevBreakingOffsetsVisibleColumn[prevIndex + 1] - breakingColumn);\n if (distance >= bestDistance) {\n break;\n }\n bestDistance = distance;\n prevIndex++;\n }\n }\n if (breakingOffsetsCount === 0) {\n return null;\n }\n // Doing here some object reuse which ends up helping a huge deal with GC pauses!\n breakingOffsets.length = breakingOffsetsCount;\n breakingOffsetsVisibleColumn.length = breakingOffsetsCount;\n arrPool1 = previousBreakingData.breakOffsets;\n arrPool2 = previousBreakingData.breakOffsetsVisibleColumn;\n previousBreakingData.breakOffsets = breakingOffsets;\n previousBreakingData.breakOffsetsVisibleColumn = breakingOffsetsVisibleColumn;\n previousBreakingData.wrappedTextIndentLength = wrappedTextIndentLength;\n return previousBreakingData;\n}\nfunction createLineBreaks(classifier, _lineText, injectedTexts, tabSize, firstLineBreakColumn, columnsForFullWidthChar, wrappingIndent, wordBreak) {\n const lineText = LineInjectedText.applyInjectedText(_lineText, injectedTexts);\n let injectionOptions;\n let injectionOffsets;\n if (injectedTexts && injectedTexts.length > 0) {\n injectionOptions = injectedTexts.map(t => t.options);\n injectionOffsets = injectedTexts.map(text => text.column - 1);\n }\n else {\n injectionOptions = null;\n injectionOffsets = null;\n }\n if (firstLineBreakColumn === -1) {\n if (!injectionOptions) {\n return null;\n }\n // creating a `LineBreakData` with an invalid `breakOffsetsVisibleColumn` is OK\n // because `breakOffsetsVisibleColumn` will never be used because it contains injected text\n return new ModelLineProjectionData(injectionOffsets, injectionOptions, [lineText.length], [], 0);\n }\n const len = lineText.length;\n if (len <= 1) {\n if (!injectionOptions) {\n return null;\n }\n // creating a `LineBreakData` with an invalid `breakOffsetsVisibleColumn` is OK\n // because `breakOffsetsVisibleColumn` will never be used because it contains injected text\n return new ModelLineProjectionData(injectionOffsets, injectionOptions, [lineText.length], [], 0);\n }\n const isKeepAll = (wordBreak === 'keepAll');\n const wrappedTextIndentLength = computeWrappedTextIndentLength(lineText, tabSize, firstLineBreakColumn, columnsForFullWidthChar, wrappingIndent);\n const wrappedLineBreakColumn = firstLineBreakColumn - wrappedTextIndentLength;\n const breakingOffsets = [];\n const breakingOffsetsVisibleColumn = [];\n let breakingOffsetsCount = 0;\n let breakOffset = 0;\n let breakOffsetVisibleColumn = 0;\n let breakingColumn = firstLineBreakColumn;\n let prevCharCode = lineText.charCodeAt(0);\n let prevCharCodeClass = classifier.get(prevCharCode);\n let visibleColumn = computeCharWidth(prevCharCode, 0, tabSize, columnsForFullWidthChar);\n let startOffset = 1;\n if (strings.isHighSurrogate(prevCharCode)) {\n // A surrogate pair must always be considered as a single unit, so it is never to be broken\n visibleColumn += 1;\n prevCharCode = lineText.charCodeAt(1);\n prevCharCodeClass = classifier.get(prevCharCode);\n startOffset++;\n }\n for (let i = startOffset; i < len; i++) {\n const charStartOffset = i;\n const charCode = lineText.charCodeAt(i);\n let charCodeClass;\n let charWidth;\n if (strings.isHighSurrogate(charCode)) {\n // A surrogate pair must always be considered as a single unit, so it is never to be broken\n i++;\n charCodeClass = 0 /* CharacterClass.NONE */;\n charWidth = 2;\n }\n else {\n charCodeClass = classifier.get(charCode);\n charWidth = computeCharWidth(charCode, visibleColumn, tabSize, columnsForFullWidthChar);\n }\n if (canBreak(prevCharCode, prevCharCodeClass, charCode, charCodeClass, isKeepAll)) {\n breakOffset = charStartOffset;\n breakOffsetVisibleColumn = visibleColumn;\n }\n visibleColumn += charWidth;\n // check if adding character at `i` will go over the breaking column\n if (visibleColumn > breakingColumn) {\n // We need to break at least before character at `i`:\n if (breakOffset === 0 || visibleColumn - breakOffsetVisibleColumn > wrappedLineBreakColumn) {\n // Cannot break at `breakOffset`, must break at `i`\n breakOffset = charStartOffset;\n breakOffsetVisibleColumn = visibleColumn - charWidth;\n }\n breakingOffsets[breakingOffsetsCount] = breakOffset;\n breakingOffsetsVisibleColumn[breakingOffsetsCount] = breakOffsetVisibleColumn;\n breakingOffsetsCount++;\n breakingColumn = breakOffsetVisibleColumn + wrappedLineBreakColumn;\n breakOffset = 0;\n }\n prevCharCode = charCode;\n prevCharCodeClass = charCodeClass;\n }\n if (breakingOffsetsCount === 0 && (!injectedTexts || injectedTexts.length === 0)) {\n return null;\n }\n // Add last segment\n breakingOffsets[breakingOffsetsCount] = len;\n breakingOffsetsVisibleColumn[breakingOffsetsCount] = visibleColumn;\n return new ModelLineProjectionData(injectionOffsets, injectionOptions, breakingOffsets, breakingOffsetsVisibleColumn, wrappedTextIndentLength);\n}\nfunction computeCharWidth(charCode, visibleColumn, tabSize, columnsForFullWidthChar) {\n if (charCode === 9 /* CharCode.Tab */) {\n return (tabSize - (visibleColumn % tabSize));\n }\n if (strings.isFullWidthCharacter(charCode)) {\n return columnsForFullWidthChar;\n }\n if (charCode < 32) {\n // when using `editor.renderControlCharacters`, the substitutions are often wide\n return columnsForFullWidthChar;\n }\n return 1;\n}\nfunction tabCharacterWidth(visibleColumn, tabSize) {\n return (tabSize - (visibleColumn % tabSize));\n}\n/**\n * Kinsoku Shori : Don't break after a leading character, like an open bracket\n * Kinsoku Shori : Don't break before a trailing character, like a period\n */\nfunction canBreak(prevCharCode, prevCharCodeClass, charCode, charCodeClass, isKeepAll) {\n return (charCode !== 32 /* CharCode.Space */\n && ((prevCharCodeClass === 2 /* CharacterClass.BREAK_AFTER */ && charCodeClass !== 2 /* CharacterClass.BREAK_AFTER */) // break at the end of multiple BREAK_AFTER\n || (prevCharCodeClass !== 1 /* CharacterClass.BREAK_BEFORE */ && charCodeClass === 1 /* CharacterClass.BREAK_BEFORE */) // break at the start of multiple BREAK_BEFORE\n || (!isKeepAll && prevCharCodeClass === 3 /* CharacterClass.BREAK_IDEOGRAPHIC */ && charCodeClass !== 2 /* CharacterClass.BREAK_AFTER */)\n || (!isKeepAll && charCodeClass === 3 /* CharacterClass.BREAK_IDEOGRAPHIC */ && prevCharCodeClass !== 1 /* CharacterClass.BREAK_BEFORE */)));\n}\nfunction computeWrappedTextIndentLength(lineText, tabSize, firstLineBreakColumn, columnsForFullWidthChar, wrappingIndent) {\n let wrappedTextIndentLength = 0;\n if (wrappingIndent !== 0 /* WrappingIndent.None */) {\n const firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineText);\n if (firstNonWhitespaceIndex !== -1) {\n // Track existing indent\n for (let i = 0; i < firstNonWhitespaceIndex; i++) {\n const charWidth = (lineText.charCodeAt(i) === 9 /* CharCode.Tab */ ? tabCharacterWidth(wrappedTextIndentLength, tabSize) : 1);\n wrappedTextIndentLength += charWidth;\n }\n // Increase indent of continuation lines, if desired\n const numberOfAdditionalTabs = (wrappingIndent === 3 /* WrappingIndent.DeepIndent */ ? 2 : wrappingIndent === 2 /* WrappingIndent.Indent */ ? 1 : 0);\n for (let i = 0; i < numberOfAdditionalTabs; i++) {\n const charWidth = tabCharacterWidth(wrappedTextIndentLength, tabSize);\n wrappedTextIndentLength += charWidth;\n }\n // Force sticking to beginning of line if no character would fit except for the indentation\n if (wrappedTextIndentLength + columnsForFullWidthChar > firstLineBreakColumn) {\n wrappedTextIndentLength = 0;\n }\n }\n }\n return wrappedTextIndentLength;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport class ColorZone {\n constructor(from, to, colorId) {\n this._colorZoneBrand = undefined;\n this.from = from | 0;\n this.to = to | 0;\n this.colorId = colorId | 0;\n }\n static compare(a, b) {\n if (a.colorId === b.colorId) {\n if (a.from === b.from) {\n return a.to - b.to;\n }\n return a.from - b.from;\n }\n return a.colorId - b.colorId;\n }\n}\n/**\n * A zone in the overview ruler\n */\nexport class OverviewRulerZone {\n constructor(startLineNumber, endLineNumber, heightInLines, color) {\n this._overviewRulerZoneBrand = undefined;\n this.startLineNumber = startLineNumber;\n this.endLineNumber = endLineNumber;\n this.heightInLines = heightInLines;\n this.color = color;\n this._colorZone = null;\n }\n static compare(a, b) {\n if (a.color === b.color) {\n if (a.startLineNumber === b.startLineNumber) {\n if (a.heightInLines === b.heightInLines) {\n return a.endLineNumber - b.endLineNumber;\n }\n return a.heightInLines - b.heightInLines;\n }\n return a.startLineNumber - b.startLineNumber;\n }\n return a.color < b.color ? -1 : 1;\n }\n setColorZone(colorZone) {\n this._colorZone = colorZone;\n }\n getColorZones() {\n return this._colorZone;\n }\n}\nexport class OverviewZoneManager {\n constructor(getVerticalOffsetForLine) {\n this._getVerticalOffsetForLine = getVerticalOffsetForLine;\n this._zones = [];\n this._colorZonesInvalid = false;\n this._lineHeight = 0;\n this._domWidth = 0;\n this._domHeight = 0;\n this._outerHeight = 0;\n this._pixelRatio = 1;\n this._lastAssignedId = 0;\n this._color2Id = Object.create(null);\n this._id2Color = [];\n }\n getId2Color() {\n return this._id2Color;\n }\n setZones(newZones) {\n this._zones = newZones;\n this._zones.sort(OverviewRulerZone.compare);\n }\n setLineHeight(lineHeight) {\n if (this._lineHeight === lineHeight) {\n return false;\n }\n this._lineHeight = lineHeight;\n this._colorZonesInvalid = true;\n return true;\n }\n setPixelRatio(pixelRatio) {\n this._pixelRatio = pixelRatio;\n this._colorZonesInvalid = true;\n }\n getDOMWidth() {\n return this._domWidth;\n }\n getCanvasWidth() {\n return this._domWidth * this._pixelRatio;\n }\n setDOMWidth(width) {\n if (this._domWidth === width) {\n return false;\n }\n this._domWidth = width;\n this._colorZonesInvalid = true;\n return true;\n }\n getDOMHeight() {\n return this._domHeight;\n }\n getCanvasHeight() {\n return this._domHeight * this._pixelRatio;\n }\n setDOMHeight(height) {\n if (this._domHeight === height) {\n return false;\n }\n this._domHeight = height;\n this._colorZonesInvalid = true;\n return true;\n }\n getOuterHeight() {\n return this._outerHeight;\n }\n setOuterHeight(outerHeight) {\n if (this._outerHeight === outerHeight) {\n return false;\n }\n this._outerHeight = outerHeight;\n this._colorZonesInvalid = true;\n return true;\n }\n resolveColorZones() {\n const colorZonesInvalid = this._colorZonesInvalid;\n const lineHeight = Math.floor(this._lineHeight);\n const totalHeight = Math.floor(this.getCanvasHeight());\n const outerHeight = Math.floor(this._outerHeight);\n const heightRatio = totalHeight / outerHeight;\n const halfMinimumHeight = Math.floor(4 /* Constants.MINIMUM_HEIGHT */ * this._pixelRatio / 2);\n const allColorZones = [];\n for (let i = 0, len = this._zones.length; i < len; i++) {\n const zone = this._zones[i];\n if (!colorZonesInvalid) {\n const colorZone = zone.getColorZones();\n if (colorZone) {\n allColorZones.push(colorZone);\n continue;\n }\n }\n const offset1 = this._getVerticalOffsetForLine(zone.startLineNumber);\n const offset2 = (zone.heightInLines === 0\n ? this._getVerticalOffsetForLine(zone.endLineNumber) + lineHeight\n : offset1 + zone.heightInLines * lineHeight);\n const y1 = Math.floor(heightRatio * offset1);\n const y2 = Math.floor(heightRatio * offset2);\n let ycenter = Math.floor((y1 + y2) / 2);\n let halfHeight = (y2 - ycenter);\n if (halfHeight < halfMinimumHeight) {\n halfHeight = halfMinimumHeight;\n }\n if (ycenter - halfHeight < 0) {\n ycenter = halfHeight;\n }\n if (ycenter + halfHeight > totalHeight) {\n ycenter = totalHeight - halfHeight;\n }\n const color = zone.color;\n let colorId = this._color2Id[color];\n if (!colorId) {\n colorId = (++this._lastAssignedId);\n this._color2Id[color] = colorId;\n this._id2Color[colorId] = color;\n }\n const colorZone = new ColorZone(ycenter - halfHeight, ycenter + halfHeight, colorId);\n zone.setColorZone(colorZone);\n allColorZones.push(colorZone);\n }\n this._colorZonesInvalid = false;\n allColorZones.sort(ColorZone.compare);\n return allColorZones;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { EditorTheme } from '../editorTheme.js';\nexport class ViewContext {\n constructor(configuration, theme, model) {\n this.configuration = configuration;\n this.theme = new EditorTheme(theme);\n this.viewModel = model;\n this.viewLayout = model.viewLayout;\n }\n addEventHandler(eventHandler) {\n this.viewModel.addViewEventHandler(eventHandler);\n }\n removeEventHandler(eventHandler) {\n this.viewModel.removeViewEventHandler(eventHandler);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { InlineDecoration, ViewModelDecoration } from '../viewModel.js';\nimport { filterValidationDecorations } from '../config/editorOptions.js';\nexport class ViewModelDecorations {\n constructor(editorId, model, configuration, linesCollection, coordinatesConverter) {\n this.editorId = editorId;\n this.model = model;\n this.configuration = configuration;\n this._linesCollection = linesCollection;\n this._coordinatesConverter = coordinatesConverter;\n this._decorationsCache = Object.create(null);\n this._cachedModelDecorationsResolver = null;\n this._cachedModelDecorationsResolverViewRange = null;\n }\n _clearCachedModelDecorationsResolver() {\n this._cachedModelDecorationsResolver = null;\n this._cachedModelDecorationsResolverViewRange = null;\n }\n dispose() {\n this._decorationsCache = Object.create(null);\n this._clearCachedModelDecorationsResolver();\n }\n reset() {\n this._decorationsCache = Object.create(null);\n this._clearCachedModelDecorationsResolver();\n }\n onModelDecorationsChanged() {\n this._decorationsCache = Object.create(null);\n this._clearCachedModelDecorationsResolver();\n }\n onLineMappingChanged() {\n this._decorationsCache = Object.create(null);\n this._clearCachedModelDecorationsResolver();\n }\n _getOrCreateViewModelDecoration(modelDecoration) {\n const id = modelDecoration.id;\n let r = this._decorationsCache[id];\n if (!r) {\n const modelRange = modelDecoration.range;\n const options = modelDecoration.options;\n let viewRange;\n if (options.isWholeLine) {\n const start = this._coordinatesConverter.convertModelPositionToViewPosition(new Position(modelRange.startLineNumber, 1), 0 /* PositionAffinity.Left */, false, true);\n const end = this._coordinatesConverter.convertModelPositionToViewPosition(new Position(modelRange.endLineNumber, this.model.getLineMaxColumn(modelRange.endLineNumber)), 1 /* PositionAffinity.Right */);\n viewRange = new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n }\n else {\n // For backwards compatibility reasons, we want injected text before any decoration.\n // Thus, move decorations to the right.\n viewRange = this._coordinatesConverter.convertModelRangeToViewRange(modelRange, 1 /* PositionAffinity.Right */);\n }\n r = new ViewModelDecoration(viewRange, options);\n this._decorationsCache[id] = r;\n }\n return r;\n }\n getMinimapDecorationsInRange(range) {\n return this._getDecorationsInRange(range, true, false).decorations;\n }\n getDecorationsViewportData(viewRange) {\n let cacheIsValid = (this._cachedModelDecorationsResolver !== null);\n cacheIsValid = cacheIsValid && (viewRange.equalsRange(this._cachedModelDecorationsResolverViewRange));\n if (!cacheIsValid) {\n this._cachedModelDecorationsResolver = this._getDecorationsInRange(viewRange, false, false);\n this._cachedModelDecorationsResolverViewRange = viewRange;\n }\n return this._cachedModelDecorationsResolver;\n }\n getInlineDecorationsOnLine(lineNumber, onlyMinimapDecorations = false, onlyMarginDecorations = false) {\n const range = new Range(lineNumber, this._linesCollection.getViewLineMinColumn(lineNumber), lineNumber, this._linesCollection.getViewLineMaxColumn(lineNumber));\n return this._getDecorationsInRange(range, onlyMinimapDecorations, onlyMarginDecorations).inlineDecorations[0];\n }\n _getDecorationsInRange(viewRange, onlyMinimapDecorations, onlyMarginDecorations) {\n const modelDecorations = this._linesCollection.getDecorationsInRange(viewRange, this.editorId, filterValidationDecorations(this.configuration.options), onlyMinimapDecorations, onlyMarginDecorations);\n const startLineNumber = viewRange.startLineNumber;\n const endLineNumber = viewRange.endLineNumber;\n const decorationsInViewport = [];\n let decorationsInViewportLen = 0;\n const inlineDecorations = [];\n for (let j = startLineNumber; j <= endLineNumber; j++) {\n inlineDecorations[j - startLineNumber] = [];\n }\n for (let i = 0, len = modelDecorations.length; i < len; i++) {\n const modelDecoration = modelDecorations[i];\n const decorationOptions = modelDecoration.options;\n if (!isModelDecorationVisible(this.model, modelDecoration)) {\n continue;\n }\n const viewModelDecoration = this._getOrCreateViewModelDecoration(modelDecoration);\n const viewRange = viewModelDecoration.range;\n decorationsInViewport[decorationsInViewportLen++] = viewModelDecoration;\n if (decorationOptions.inlineClassName) {\n const inlineDecoration = new InlineDecoration(viewRange, decorationOptions.inlineClassName, decorationOptions.inlineClassNameAffectsLetterSpacing ? 3 /* InlineDecorationType.RegularAffectingLetterSpacing */ : 0 /* InlineDecorationType.Regular */);\n const intersectedStartLineNumber = Math.max(startLineNumber, viewRange.startLineNumber);\n const intersectedEndLineNumber = Math.min(endLineNumber, viewRange.endLineNumber);\n for (let j = intersectedStartLineNumber; j <= intersectedEndLineNumber; j++) {\n inlineDecorations[j - startLineNumber].push(inlineDecoration);\n }\n }\n if (decorationOptions.beforeContentClassName) {\n if (startLineNumber <= viewRange.startLineNumber && viewRange.startLineNumber <= endLineNumber) {\n const inlineDecoration = new InlineDecoration(new Range(viewRange.startLineNumber, viewRange.startColumn, viewRange.startLineNumber, viewRange.startColumn), decorationOptions.beforeContentClassName, 1 /* InlineDecorationType.Before */);\n inlineDecorations[viewRange.startLineNumber - startLineNumber].push(inlineDecoration);\n }\n }\n if (decorationOptions.afterContentClassName) {\n if (startLineNumber <= viewRange.endLineNumber && viewRange.endLineNumber <= endLineNumber) {\n const inlineDecoration = new InlineDecoration(new Range(viewRange.endLineNumber, viewRange.endColumn, viewRange.endLineNumber, viewRange.endColumn), decorationOptions.afterContentClassName, 2 /* InlineDecorationType.After */);\n inlineDecorations[viewRange.endLineNumber - startLineNumber].push(inlineDecoration);\n }\n }\n }\n return {\n decorations: decorationsInViewport,\n inlineDecorations: inlineDecorations\n };\n }\n}\nexport function isModelDecorationVisible(model, decoration) {\n if (decoration.options.hideInCommentTokens && isModelDecorationInComment(model, decoration)) {\n return false;\n }\n if (decoration.options.hideInStringTokens && isModelDecorationInString(model, decoration)) {\n return false;\n }\n return true;\n}\nexport function isModelDecorationInComment(model, decoration) {\n return testTokensInRange(model, decoration.range, (tokenType) => tokenType === 1 /* StandardTokenType.Comment */);\n}\nexport function isModelDecorationInString(model, decoration) {\n return testTokensInRange(model, decoration.range, (tokenType) => tokenType === 2 /* StandardTokenType.String */);\n}\n/**\n * Calls the callback for every token that intersects the range.\n * If the callback returns `false`, iteration stops and `false` is returned.\n * Otherwise, `true` is returned.\n */\nfunction testTokensInRange(model, range, callback) {\n for (let lineNumber = range.startLineNumber; lineNumber <= range.endLineNumber; lineNumber++) {\n const lineTokens = model.tokenization.getLineTokens(lineNumber);\n const isFirstLine = lineNumber === range.startLineNumber;\n const isEndLine = lineNumber === range.endLineNumber;\n let tokenIdx = isFirstLine ? lineTokens.findTokenIndexAtOffset(range.startColumn - 1) : 0;\n while (tokenIdx < lineTokens.getCount()) {\n if (isEndLine) {\n const startOffset = lineTokens.getStartOffset(tokenIdx);\n if (startOffset > range.endColumn - 1) {\n break;\n }\n }\n const callbackResult = callback(lineTokens.getStandardTokenType(tokenIdx));\n if (!callbackResult) {\n return false;\n }\n tokenIdx++;\n }\n }\n return true;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { LineTokens } from '../tokens/lineTokens.js';\nimport { Position } from '../core/position.js';\nimport { LineInjectedText } from '../textModelEvents.js';\nimport { SingleLineInlineDecoration, ViewLineData } from '../viewModel.js';\nexport function createModelLineProjection(lineBreakData, isVisible) {\n if (lineBreakData === null) {\n // No mapping needed\n if (isVisible) {\n return IdentityModelLineProjection.INSTANCE;\n }\n return HiddenModelLineProjection.INSTANCE;\n }\n else {\n return new ModelLineProjection(lineBreakData, isVisible);\n }\n}\n/**\n * This projection is used to\n * * wrap model lines\n * * inject text\n */\nclass ModelLineProjection {\n constructor(lineBreakData, isVisible) {\n this._projectionData = lineBreakData;\n this._isVisible = isVisible;\n }\n isVisible() {\n return this._isVisible;\n }\n setVisible(isVisible) {\n this._isVisible = isVisible;\n return this;\n }\n getProjectionData() {\n return this._projectionData;\n }\n getViewLineCount() {\n if (!this._isVisible) {\n return 0;\n }\n return this._projectionData.getOutputLineCount();\n }\n getViewLineContent(model, modelLineNumber, outputLineIndex) {\n this._assertVisible();\n const startOffsetInInputWithInjections = outputLineIndex > 0 ? this._projectionData.breakOffsets[outputLineIndex - 1] : 0;\n const endOffsetInInputWithInjections = this._projectionData.breakOffsets[outputLineIndex];\n let r;\n if (this._projectionData.injectionOffsets !== null) {\n const injectedTexts = this._projectionData.injectionOffsets.map((offset, idx) => new LineInjectedText(0, 0, offset + 1, this._projectionData.injectionOptions[idx], 0));\n const lineWithInjections = LineInjectedText.applyInjectedText(model.getLineContent(modelLineNumber), injectedTexts);\n r = lineWithInjections.substring(startOffsetInInputWithInjections, endOffsetInInputWithInjections);\n }\n else {\n r = model.getValueInRange({\n startLineNumber: modelLineNumber,\n startColumn: startOffsetInInputWithInjections + 1,\n endLineNumber: modelLineNumber,\n endColumn: endOffsetInInputWithInjections + 1\n });\n }\n if (outputLineIndex > 0) {\n r = spaces(this._projectionData.wrappedTextIndentLength) + r;\n }\n return r;\n }\n getViewLineLength(model, modelLineNumber, outputLineIndex) {\n this._assertVisible();\n return this._projectionData.getLineLength(outputLineIndex);\n }\n getViewLineMinColumn(_model, _modelLineNumber, outputLineIndex) {\n this._assertVisible();\n return this._projectionData.getMinOutputOffset(outputLineIndex) + 1;\n }\n getViewLineMaxColumn(model, modelLineNumber, outputLineIndex) {\n this._assertVisible();\n return this._projectionData.getMaxOutputOffset(outputLineIndex) + 1;\n }\n /**\n * Try using {@link getViewLinesData} instead.\n */\n getViewLineData(model, modelLineNumber, outputLineIndex) {\n const arr = new Array();\n this.getViewLinesData(model, modelLineNumber, outputLineIndex, 1, 0, [true], arr);\n return arr[0];\n }\n getViewLinesData(model, modelLineNumber, outputLineIdx, lineCount, globalStartIndex, needed, result) {\n this._assertVisible();\n const lineBreakData = this._projectionData;\n const injectionOffsets = lineBreakData.injectionOffsets;\n const injectionOptions = lineBreakData.injectionOptions;\n let inlineDecorationsPerOutputLine = null;\n if (injectionOffsets) {\n inlineDecorationsPerOutputLine = [];\n let totalInjectedTextLengthBefore = 0;\n let currentInjectedOffset = 0;\n for (let outputLineIndex = 0; outputLineIndex < lineBreakData.getOutputLineCount(); outputLineIndex++) {\n const inlineDecorations = new Array();\n inlineDecorationsPerOutputLine[outputLineIndex] = inlineDecorations;\n const lineStartOffsetInInputWithInjections = outputLineIndex > 0 ? lineBreakData.breakOffsets[outputLineIndex - 1] : 0;\n const lineEndOffsetInInputWithInjections = lineBreakData.breakOffsets[outputLineIndex];\n while (currentInjectedOffset < injectionOffsets.length) {\n const length = injectionOptions[currentInjectedOffset].content.length;\n const injectedTextStartOffsetInInputWithInjections = injectionOffsets[currentInjectedOffset] + totalInjectedTextLengthBefore;\n const injectedTextEndOffsetInInputWithInjections = injectedTextStartOffsetInInputWithInjections + length;\n if (injectedTextStartOffsetInInputWithInjections > lineEndOffsetInInputWithInjections) {\n // Injected text only starts in later wrapped lines.\n break;\n }\n if (lineStartOffsetInInputWithInjections < injectedTextEndOffsetInInputWithInjections) {\n // Injected text ends after or in this line (but also starts in or before this line).\n const options = injectionOptions[currentInjectedOffset];\n if (options.inlineClassName) {\n const offset = (outputLineIndex > 0 ? lineBreakData.wrappedTextIndentLength : 0);\n const start = offset + Math.max(injectedTextStartOffsetInInputWithInjections - lineStartOffsetInInputWithInjections, 0);\n const end = offset + Math.min(injectedTextEndOffsetInInputWithInjections - lineStartOffsetInInputWithInjections, lineEndOffsetInInputWithInjections - lineStartOffsetInInputWithInjections);\n if (start !== end) {\n inlineDecorations.push(new SingleLineInlineDecoration(start, end, options.inlineClassName, options.inlineClassNameAffectsLetterSpacing));\n }\n }\n }\n if (injectedTextEndOffsetInInputWithInjections <= lineEndOffsetInInputWithInjections) {\n totalInjectedTextLengthBefore += length;\n currentInjectedOffset++;\n }\n else {\n // injected text breaks into next line, process it again\n break;\n }\n }\n }\n }\n let lineWithInjections;\n if (injectionOffsets) {\n lineWithInjections = model.tokenization.getLineTokens(modelLineNumber).withInserted(injectionOffsets.map((offset, idx) => ({\n offset,\n text: injectionOptions[idx].content,\n tokenMetadata: LineTokens.defaultTokenMetadata\n })));\n }\n else {\n lineWithInjections = model.tokenization.getLineTokens(modelLineNumber);\n }\n for (let outputLineIndex = outputLineIdx; outputLineIndex < outputLineIdx + lineCount; outputLineIndex++) {\n const globalIndex = globalStartIndex + outputLineIndex - outputLineIdx;\n if (!needed[globalIndex]) {\n result[globalIndex] = null;\n continue;\n }\n result[globalIndex] = this._getViewLineData(lineWithInjections, inlineDecorationsPerOutputLine ? inlineDecorationsPerOutputLine[outputLineIndex] : null, outputLineIndex);\n }\n }\n _getViewLineData(lineWithInjections, inlineDecorations, outputLineIndex) {\n this._assertVisible();\n const lineBreakData = this._projectionData;\n const deltaStartIndex = (outputLineIndex > 0 ? lineBreakData.wrappedTextIndentLength : 0);\n const lineStartOffsetInInputWithInjections = outputLineIndex > 0 ? lineBreakData.breakOffsets[outputLineIndex - 1] : 0;\n const lineEndOffsetInInputWithInjections = lineBreakData.breakOffsets[outputLineIndex];\n const tokens = lineWithInjections.sliceAndInflate(lineStartOffsetInInputWithInjections, lineEndOffsetInInputWithInjections, deltaStartIndex);\n let lineContent = tokens.getLineContent();\n if (outputLineIndex > 0) {\n lineContent = spaces(lineBreakData.wrappedTextIndentLength) + lineContent;\n }\n const minColumn = this._projectionData.getMinOutputOffset(outputLineIndex) + 1;\n const maxColumn = lineContent.length + 1;\n const continuesWithWrappedLine = (outputLineIndex + 1 < this.getViewLineCount());\n const startVisibleColumn = (outputLineIndex === 0 ? 0 : lineBreakData.breakOffsetsVisibleColumn[outputLineIndex - 1]);\n return new ViewLineData(lineContent, continuesWithWrappedLine, minColumn, maxColumn, startVisibleColumn, tokens, inlineDecorations);\n }\n getModelColumnOfViewPosition(outputLineIndex, outputColumn) {\n this._assertVisible();\n return this._projectionData.translateToInputOffset(outputLineIndex, outputColumn - 1) + 1;\n }\n getViewPositionOfModelPosition(deltaLineNumber, inputColumn, affinity = 2 /* PositionAffinity.None */) {\n this._assertVisible();\n const r = this._projectionData.translateToOutputPosition(inputColumn - 1, affinity);\n return r.toPosition(deltaLineNumber);\n }\n getViewLineNumberOfModelPosition(deltaLineNumber, inputColumn) {\n this._assertVisible();\n const r = this._projectionData.translateToOutputPosition(inputColumn - 1);\n return deltaLineNumber + r.outputLineIndex;\n }\n normalizePosition(outputLineIndex, outputPosition, affinity) {\n const baseViewLineNumber = outputPosition.lineNumber - outputLineIndex;\n const normalizedOutputPosition = this._projectionData.normalizeOutputPosition(outputLineIndex, outputPosition.column - 1, affinity);\n const result = normalizedOutputPosition.toPosition(baseViewLineNumber);\n return result;\n }\n getInjectedTextAt(outputLineIndex, outputColumn) {\n return this._projectionData.getInjectedText(outputLineIndex, outputColumn - 1);\n }\n _assertVisible() {\n if (!this._isVisible) {\n throw new Error('Not supported');\n }\n }\n}\n/**\n * This projection does not change the model line.\n*/\nclass IdentityModelLineProjection {\n constructor() { }\n isVisible() {\n return true;\n }\n setVisible(isVisible) {\n if (isVisible) {\n return this;\n }\n return HiddenModelLineProjection.INSTANCE;\n }\n getProjectionData() {\n return null;\n }\n getViewLineCount() {\n return 1;\n }\n getViewLineContent(model, modelLineNumber, _outputLineIndex) {\n return model.getLineContent(modelLineNumber);\n }\n getViewLineLength(model, modelLineNumber, _outputLineIndex) {\n return model.getLineLength(modelLineNumber);\n }\n getViewLineMinColumn(model, modelLineNumber, _outputLineIndex) {\n return model.getLineMinColumn(modelLineNumber);\n }\n getViewLineMaxColumn(model, modelLineNumber, _outputLineIndex) {\n return model.getLineMaxColumn(modelLineNumber);\n }\n getViewLineData(model, modelLineNumber, _outputLineIndex) {\n const lineTokens = model.tokenization.getLineTokens(modelLineNumber);\n const lineContent = lineTokens.getLineContent();\n return new ViewLineData(lineContent, false, 1, lineContent.length + 1, 0, lineTokens.inflate(), null);\n }\n getViewLinesData(model, modelLineNumber, _fromOuputLineIndex, _toOutputLineIndex, globalStartIndex, needed, result) {\n if (!needed[globalStartIndex]) {\n result[globalStartIndex] = null;\n return;\n }\n result[globalStartIndex] = this.getViewLineData(model, modelLineNumber, 0);\n }\n getModelColumnOfViewPosition(_outputLineIndex, outputColumn) {\n return outputColumn;\n }\n getViewPositionOfModelPosition(deltaLineNumber, inputColumn) {\n return new Position(deltaLineNumber, inputColumn);\n }\n getViewLineNumberOfModelPosition(deltaLineNumber, _inputColumn) {\n return deltaLineNumber;\n }\n normalizePosition(outputLineIndex, outputPosition, affinity) {\n return outputPosition;\n }\n getInjectedTextAt(_outputLineIndex, _outputColumn) {\n return null;\n }\n}\nIdentityModelLineProjection.INSTANCE = new IdentityModelLineProjection();\n/**\n * This projection hides the model line.\n */\nclass HiddenModelLineProjection {\n constructor() { }\n isVisible() {\n return false;\n }\n setVisible(isVisible) {\n if (!isVisible) {\n return this;\n }\n return IdentityModelLineProjection.INSTANCE;\n }\n getProjectionData() {\n return null;\n }\n getViewLineCount() {\n return 0;\n }\n getViewLineContent(_model, _modelLineNumber, _outputLineIndex) {\n throw new Error('Not supported');\n }\n getViewLineLength(_model, _modelLineNumber, _outputLineIndex) {\n throw new Error('Not supported');\n }\n getViewLineMinColumn(_model, _modelLineNumber, _outputLineIndex) {\n throw new Error('Not supported');\n }\n getViewLineMaxColumn(_model, _modelLineNumber, _outputLineIndex) {\n throw new Error('Not supported');\n }\n getViewLineData(_model, _modelLineNumber, _outputLineIndex) {\n throw new Error('Not supported');\n }\n getViewLinesData(_model, _modelLineNumber, _fromOuputLineIndex, _toOutputLineIndex, _globalStartIndex, _needed, _result) {\n throw new Error('Not supported');\n }\n getModelColumnOfViewPosition(_outputLineIndex, _outputColumn) {\n throw new Error('Not supported');\n }\n getViewPositionOfModelPosition(_deltaLineNumber, _inputColumn) {\n throw new Error('Not supported');\n }\n getViewLineNumberOfModelPosition(_deltaLineNumber, _inputColumn) {\n throw new Error('Not supported');\n }\n normalizePosition(outputLineIndex, outputPosition, affinity) {\n throw new Error('Not supported');\n }\n getInjectedTextAt(_outputLineIndex, _outputColumn) {\n throw new Error('Not supported');\n }\n}\nHiddenModelLineProjection.INSTANCE = new HiddenModelLineProjection();\nconst _spaces = [''];\nfunction spaces(count) {\n if (count >= _spaces.length) {\n for (let i = 1; i <= count; i++) {\n _spaces[i] = _makeSpaces(i);\n }\n }\n return _spaces[count];\n}\nfunction _makeSpaces(count) {\n return new Array(count + 1).join(' ');\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as arrays from '../../../base/common/arrays.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { IndentGuide, IndentGuideHorizontalLine } from '../textModelGuides.js';\nimport { ModelDecorationOptions } from '../model/textModel.js';\nimport { LineInjectedText } from '../textModelEvents.js';\nimport * as viewEvents from '../viewEvents.js';\nimport { createModelLineProjection } from './modelLineProjection.js';\nimport { ConstantTimePrefixSumComputer } from '../model/prefixSumComputer.js';\nimport { ViewLineData } from '../viewModel.js';\nexport class ViewModelLinesFromProjectedModel {\n constructor(editorId, model, domLineBreaksComputerFactory, monospaceLineBreaksComputerFactory, fontInfo, tabSize, wrappingStrategy, wrappingColumn, wrappingIndent, wordBreak) {\n this._editorId = editorId;\n this.model = model;\n this._validModelVersionId = -1;\n this._domLineBreaksComputerFactory = domLineBreaksComputerFactory;\n this._monospaceLineBreaksComputerFactory = monospaceLineBreaksComputerFactory;\n this.fontInfo = fontInfo;\n this.tabSize = tabSize;\n this.wrappingStrategy = wrappingStrategy;\n this.wrappingColumn = wrappingColumn;\n this.wrappingIndent = wrappingIndent;\n this.wordBreak = wordBreak;\n this._constructLines(/*resetHiddenAreas*/ true, null);\n }\n dispose() {\n this.hiddenAreasDecorationIds = this.model.deltaDecorations(this.hiddenAreasDecorationIds, []);\n }\n createCoordinatesConverter() {\n return new CoordinatesConverter(this);\n }\n _constructLines(resetHiddenAreas, previousLineBreaks) {\n this.modelLineProjections = [];\n if (resetHiddenAreas) {\n this.hiddenAreasDecorationIds = this.model.deltaDecorations(this.hiddenAreasDecorationIds, []);\n }\n const linesContent = this.model.getLinesContent();\n const injectedTextDecorations = this.model.getInjectedTextDecorations(this._editorId);\n const lineCount = linesContent.length;\n const lineBreaksComputer = this.createLineBreaksComputer();\n const injectedTextQueue = new arrays.ArrayQueue(LineInjectedText.fromDecorations(injectedTextDecorations));\n for (let i = 0; i < lineCount; i++) {\n const lineInjectedText = injectedTextQueue.takeWhile(t => t.lineNumber === i + 1);\n lineBreaksComputer.addRequest(linesContent[i], lineInjectedText, previousLineBreaks ? previousLineBreaks[i] : null);\n }\n const linesBreaks = lineBreaksComputer.finalize();\n const values = [];\n const hiddenAreas = this.hiddenAreasDecorationIds.map((areaId) => this.model.getDecorationRange(areaId)).sort(Range.compareRangesUsingStarts);\n let hiddenAreaStart = 1, hiddenAreaEnd = 0;\n let hiddenAreaIdx = -1;\n let nextLineNumberToUpdateHiddenArea = (hiddenAreaIdx + 1 < hiddenAreas.length) ? hiddenAreaEnd + 1 : lineCount + 2;\n for (let i = 0; i < lineCount; i++) {\n const lineNumber = i + 1;\n if (lineNumber === nextLineNumberToUpdateHiddenArea) {\n hiddenAreaIdx++;\n hiddenAreaStart = hiddenAreas[hiddenAreaIdx].startLineNumber;\n hiddenAreaEnd = hiddenAreas[hiddenAreaIdx].endLineNumber;\n nextLineNumberToUpdateHiddenArea = (hiddenAreaIdx + 1 < hiddenAreas.length) ? hiddenAreaEnd + 1 : lineCount + 2;\n }\n const isInHiddenArea = (lineNumber >= hiddenAreaStart && lineNumber <= hiddenAreaEnd);\n const line = createModelLineProjection(linesBreaks[i], !isInHiddenArea);\n values[i] = line.getViewLineCount();\n this.modelLineProjections[i] = line;\n }\n this._validModelVersionId = this.model.getVersionId();\n this.projectedModelLineLineCounts = new ConstantTimePrefixSumComputer(values);\n }\n getHiddenAreas() {\n return this.hiddenAreasDecorationIds.map((decId) => this.model.getDecorationRange(decId));\n }\n setHiddenAreas(_ranges) {\n const validatedRanges = _ranges.map(r => this.model.validateRange(r));\n const newRanges = normalizeLineRanges(validatedRanges);\n // TODO@Martin: Please stop calling this method on each model change!\n // This checks if there really was a change\n const oldRanges = this.hiddenAreasDecorationIds.map((areaId) => this.model.getDecorationRange(areaId)).sort(Range.compareRangesUsingStarts);\n if (newRanges.length === oldRanges.length) {\n let hasDifference = false;\n for (let i = 0; i < newRanges.length; i++) {\n if (!newRanges[i].equalsRange(oldRanges[i])) {\n hasDifference = true;\n break;\n }\n }\n if (!hasDifference) {\n return false;\n }\n }\n const newDecorations = newRanges.map((r) => ({\n range: r,\n options: ModelDecorationOptions.EMPTY,\n }));\n this.hiddenAreasDecorationIds = this.model.deltaDecorations(this.hiddenAreasDecorationIds, newDecorations);\n const hiddenAreas = newRanges;\n let hiddenAreaStart = 1, hiddenAreaEnd = 0;\n let hiddenAreaIdx = -1;\n let nextLineNumberToUpdateHiddenArea = (hiddenAreaIdx + 1 < hiddenAreas.length) ? hiddenAreaEnd + 1 : this.modelLineProjections.length + 2;\n let hasVisibleLine = false;\n for (let i = 0; i < this.modelLineProjections.length; i++) {\n const lineNumber = i + 1;\n if (lineNumber === nextLineNumberToUpdateHiddenArea) {\n hiddenAreaIdx++;\n hiddenAreaStart = hiddenAreas[hiddenAreaIdx].startLineNumber;\n hiddenAreaEnd = hiddenAreas[hiddenAreaIdx].endLineNumber;\n nextLineNumberToUpdateHiddenArea = (hiddenAreaIdx + 1 < hiddenAreas.length) ? hiddenAreaEnd + 1 : this.modelLineProjections.length + 2;\n }\n let lineChanged = false;\n if (lineNumber >= hiddenAreaStart && lineNumber <= hiddenAreaEnd) {\n // Line should be hidden\n if (this.modelLineProjections[i].isVisible()) {\n this.modelLineProjections[i] = this.modelLineProjections[i].setVisible(false);\n lineChanged = true;\n }\n }\n else {\n hasVisibleLine = true;\n // Line should be visible\n if (!this.modelLineProjections[i].isVisible()) {\n this.modelLineProjections[i] = this.modelLineProjections[i].setVisible(true);\n lineChanged = true;\n }\n }\n if (lineChanged) {\n const newOutputLineCount = this.modelLineProjections[i].getViewLineCount();\n this.projectedModelLineLineCounts.setValue(i, newOutputLineCount);\n }\n }\n if (!hasVisibleLine) {\n // Cannot have everything be hidden => reveal everything!\n this.setHiddenAreas([]);\n }\n return true;\n }\n modelPositionIsVisible(modelLineNumber, _modelColumn) {\n if (modelLineNumber < 1 || modelLineNumber > this.modelLineProjections.length) {\n // invalid arguments\n return false;\n }\n return this.modelLineProjections[modelLineNumber - 1].isVisible();\n }\n getModelLineViewLineCount(modelLineNumber) {\n if (modelLineNumber < 1 || modelLineNumber > this.modelLineProjections.length) {\n // invalid arguments\n return 1;\n }\n return this.modelLineProjections[modelLineNumber - 1].getViewLineCount();\n }\n setTabSize(newTabSize) {\n if (this.tabSize === newTabSize) {\n return false;\n }\n this.tabSize = newTabSize;\n this._constructLines(/*resetHiddenAreas*/ false, null);\n return true;\n }\n setWrappingSettings(fontInfo, wrappingStrategy, wrappingColumn, wrappingIndent, wordBreak) {\n const equalFontInfo = this.fontInfo.equals(fontInfo);\n const equalWrappingStrategy = (this.wrappingStrategy === wrappingStrategy);\n const equalWrappingColumn = (this.wrappingColumn === wrappingColumn);\n const equalWrappingIndent = (this.wrappingIndent === wrappingIndent);\n const equalWordBreak = (this.wordBreak === wordBreak);\n if (equalFontInfo && equalWrappingStrategy && equalWrappingColumn && equalWrappingIndent && equalWordBreak) {\n return false;\n }\n const onlyWrappingColumnChanged = (equalFontInfo && equalWrappingStrategy && !equalWrappingColumn && equalWrappingIndent && equalWordBreak);\n this.fontInfo = fontInfo;\n this.wrappingStrategy = wrappingStrategy;\n this.wrappingColumn = wrappingColumn;\n this.wrappingIndent = wrappingIndent;\n this.wordBreak = wordBreak;\n let previousLineBreaks = null;\n if (onlyWrappingColumnChanged) {\n previousLineBreaks = [];\n for (let i = 0, len = this.modelLineProjections.length; i < len; i++) {\n previousLineBreaks[i] = this.modelLineProjections[i].getProjectionData();\n }\n }\n this._constructLines(/*resetHiddenAreas*/ false, previousLineBreaks);\n return true;\n }\n createLineBreaksComputer() {\n const lineBreaksComputerFactory = (this.wrappingStrategy === 'advanced'\n ? this._domLineBreaksComputerFactory\n : this._monospaceLineBreaksComputerFactory);\n return lineBreaksComputerFactory.createLineBreaksComputer(this.fontInfo, this.tabSize, this.wrappingColumn, this.wrappingIndent, this.wordBreak);\n }\n onModelFlushed() {\n this._constructLines(/*resetHiddenAreas*/ true, null);\n }\n onModelLinesDeleted(versionId, fromLineNumber, toLineNumber) {\n if (!versionId || versionId <= this._validModelVersionId) {\n // Here we check for versionId in case the lines were reconstructed in the meantime.\n // We don't want to apply stale change events on top of a newer read model state.\n return null;\n }\n const outputFromLineNumber = (fromLineNumber === 1 ? 1 : this.projectedModelLineLineCounts.getPrefixSum(fromLineNumber - 1) + 1);\n const outputToLineNumber = this.projectedModelLineLineCounts.getPrefixSum(toLineNumber);\n this.modelLineProjections.splice(fromLineNumber - 1, toLineNumber - fromLineNumber + 1);\n this.projectedModelLineLineCounts.removeValues(fromLineNumber - 1, toLineNumber - fromLineNumber + 1);\n return new viewEvents.ViewLinesDeletedEvent(outputFromLineNumber, outputToLineNumber);\n }\n onModelLinesInserted(versionId, fromLineNumber, _toLineNumber, lineBreaks) {\n if (!versionId || versionId <= this._validModelVersionId) {\n // Here we check for versionId in case the lines were reconstructed in the meantime.\n // We don't want to apply stale change events on top of a newer read model state.\n return null;\n }\n // cannot use this.getHiddenAreas() because those decorations have already seen the effect of this model change\n const isInHiddenArea = (fromLineNumber > 2 && !this.modelLineProjections[fromLineNumber - 2].isVisible());\n const outputFromLineNumber = (fromLineNumber === 1 ? 1 : this.projectedModelLineLineCounts.getPrefixSum(fromLineNumber - 1) + 1);\n let totalOutputLineCount = 0;\n const insertLines = [];\n const insertPrefixSumValues = [];\n for (let i = 0, len = lineBreaks.length; i < len; i++) {\n const line = createModelLineProjection(lineBreaks[i], !isInHiddenArea);\n insertLines.push(line);\n const outputLineCount = line.getViewLineCount();\n totalOutputLineCount += outputLineCount;\n insertPrefixSumValues[i] = outputLineCount;\n }\n // TODO@Alex: use arrays.arrayInsert\n this.modelLineProjections =\n this.modelLineProjections.slice(0, fromLineNumber - 1)\n .concat(insertLines)\n .concat(this.modelLineProjections.slice(fromLineNumber - 1));\n this.projectedModelLineLineCounts.insertValues(fromLineNumber - 1, insertPrefixSumValues);\n return new viewEvents.ViewLinesInsertedEvent(outputFromLineNumber, outputFromLineNumber + totalOutputLineCount - 1);\n }\n onModelLineChanged(versionId, lineNumber, lineBreakData) {\n if (versionId !== null && versionId <= this._validModelVersionId) {\n // Here we check for versionId in case the lines were reconstructed in the meantime.\n // We don't want to apply stale change events on top of a newer read model state.\n return [false, null, null, null];\n }\n const lineIndex = lineNumber - 1;\n const oldOutputLineCount = this.modelLineProjections[lineIndex].getViewLineCount();\n const isVisible = this.modelLineProjections[lineIndex].isVisible();\n const line = createModelLineProjection(lineBreakData, isVisible);\n this.modelLineProjections[lineIndex] = line;\n const newOutputLineCount = this.modelLineProjections[lineIndex].getViewLineCount();\n let lineMappingChanged = false;\n let changeFrom = 0;\n let changeTo = -1;\n let insertFrom = 0;\n let insertTo = -1;\n let deleteFrom = 0;\n let deleteTo = -1;\n if (oldOutputLineCount > newOutputLineCount) {\n changeFrom = this.projectedModelLineLineCounts.getPrefixSum(lineNumber - 1) + 1;\n changeTo = changeFrom + newOutputLineCount - 1;\n deleteFrom = changeTo + 1;\n deleteTo = deleteFrom + (oldOutputLineCount - newOutputLineCount) - 1;\n lineMappingChanged = true;\n }\n else if (oldOutputLineCount < newOutputLineCount) {\n changeFrom = this.projectedModelLineLineCounts.getPrefixSum(lineNumber - 1) + 1;\n changeTo = changeFrom + oldOutputLineCount - 1;\n insertFrom = changeTo + 1;\n insertTo = insertFrom + (newOutputLineCount - oldOutputLineCount) - 1;\n lineMappingChanged = true;\n }\n else {\n changeFrom = this.projectedModelLineLineCounts.getPrefixSum(lineNumber - 1) + 1;\n changeTo = changeFrom + newOutputLineCount - 1;\n }\n this.projectedModelLineLineCounts.setValue(lineIndex, newOutputLineCount);\n const viewLinesChangedEvent = (changeFrom <= changeTo ? new viewEvents.ViewLinesChangedEvent(changeFrom, changeTo - changeFrom + 1) : null);\n const viewLinesInsertedEvent = (insertFrom <= insertTo ? new viewEvents.ViewLinesInsertedEvent(insertFrom, insertTo) : null);\n const viewLinesDeletedEvent = (deleteFrom <= deleteTo ? new viewEvents.ViewLinesDeletedEvent(deleteFrom, deleteTo) : null);\n return [lineMappingChanged, viewLinesChangedEvent, viewLinesInsertedEvent, viewLinesDeletedEvent];\n }\n acceptVersionId(versionId) {\n this._validModelVersionId = versionId;\n if (this.modelLineProjections.length === 1 && !this.modelLineProjections[0].isVisible()) {\n // At least one line must be visible => reset hidden areas\n this.setHiddenAreas([]);\n }\n }\n getViewLineCount() {\n return this.projectedModelLineLineCounts.getTotalSum();\n }\n _toValidViewLineNumber(viewLineNumber) {\n if (viewLineNumber < 1) {\n return 1;\n }\n const viewLineCount = this.getViewLineCount();\n if (viewLineNumber > viewLineCount) {\n return viewLineCount;\n }\n return viewLineNumber | 0;\n }\n getActiveIndentGuide(viewLineNumber, minLineNumber, maxLineNumber) {\n viewLineNumber = this._toValidViewLineNumber(viewLineNumber);\n minLineNumber = this._toValidViewLineNumber(minLineNumber);\n maxLineNumber = this._toValidViewLineNumber(maxLineNumber);\n const modelPosition = this.convertViewPositionToModelPosition(viewLineNumber, this.getViewLineMinColumn(viewLineNumber));\n const modelMinPosition = this.convertViewPositionToModelPosition(minLineNumber, this.getViewLineMinColumn(minLineNumber));\n const modelMaxPosition = this.convertViewPositionToModelPosition(maxLineNumber, this.getViewLineMinColumn(maxLineNumber));\n const result = this.model.guides.getActiveIndentGuide(modelPosition.lineNumber, modelMinPosition.lineNumber, modelMaxPosition.lineNumber);\n const viewStartPosition = this.convertModelPositionToViewPosition(result.startLineNumber, 1);\n const viewEndPosition = this.convertModelPositionToViewPosition(result.endLineNumber, this.model.getLineMaxColumn(result.endLineNumber));\n return {\n startLineNumber: viewStartPosition.lineNumber,\n endLineNumber: viewEndPosition.lineNumber,\n indent: result.indent\n };\n }\n // #region ViewLineInfo\n getViewLineInfo(viewLineNumber) {\n viewLineNumber = this._toValidViewLineNumber(viewLineNumber);\n const r = this.projectedModelLineLineCounts.getIndexOf(viewLineNumber - 1);\n const lineIndex = r.index;\n const remainder = r.remainder;\n return new ViewLineInfo(lineIndex + 1, remainder);\n }\n getMinColumnOfViewLine(viewLineInfo) {\n return this.modelLineProjections[viewLineInfo.modelLineNumber - 1].getViewLineMinColumn(this.model, viewLineInfo.modelLineNumber, viewLineInfo.modelLineWrappedLineIdx);\n }\n getMaxColumnOfViewLine(viewLineInfo) {\n return this.modelLineProjections[viewLineInfo.modelLineNumber - 1].getViewLineMaxColumn(this.model, viewLineInfo.modelLineNumber, viewLineInfo.modelLineWrappedLineIdx);\n }\n getModelStartPositionOfViewLine(viewLineInfo) {\n const line = this.modelLineProjections[viewLineInfo.modelLineNumber - 1];\n const minViewColumn = line.getViewLineMinColumn(this.model, viewLineInfo.modelLineNumber, viewLineInfo.modelLineWrappedLineIdx);\n const column = line.getModelColumnOfViewPosition(viewLineInfo.modelLineWrappedLineIdx, minViewColumn);\n return new Position(viewLineInfo.modelLineNumber, column);\n }\n getModelEndPositionOfViewLine(viewLineInfo) {\n const line = this.modelLineProjections[viewLineInfo.modelLineNumber - 1];\n const maxViewColumn = line.getViewLineMaxColumn(this.model, viewLineInfo.modelLineNumber, viewLineInfo.modelLineWrappedLineIdx);\n const column = line.getModelColumnOfViewPosition(viewLineInfo.modelLineWrappedLineIdx, maxViewColumn);\n return new Position(viewLineInfo.modelLineNumber, column);\n }\n getViewLineInfosGroupedByModelRanges(viewStartLineNumber, viewEndLineNumber) {\n const startViewLine = this.getViewLineInfo(viewStartLineNumber);\n const endViewLine = this.getViewLineInfo(viewEndLineNumber);\n const result = new Array();\n let lastVisibleModelPos = this.getModelStartPositionOfViewLine(startViewLine);\n let viewLines = new Array();\n for (let curModelLine = startViewLine.modelLineNumber; curModelLine <= endViewLine.modelLineNumber; curModelLine++) {\n const line = this.modelLineProjections[curModelLine - 1];\n if (line.isVisible()) {\n const startOffset = curModelLine === startViewLine.modelLineNumber\n ? startViewLine.modelLineWrappedLineIdx\n : 0;\n const endOffset = curModelLine === endViewLine.modelLineNumber\n ? endViewLine.modelLineWrappedLineIdx + 1\n : line.getViewLineCount();\n for (let i = startOffset; i < endOffset; i++) {\n viewLines.push(new ViewLineInfo(curModelLine, i));\n }\n }\n if (!line.isVisible() && lastVisibleModelPos) {\n const lastVisibleModelPos2 = new Position(curModelLine - 1, this.model.getLineMaxColumn(curModelLine - 1) + 1);\n const modelRange = Range.fromPositions(lastVisibleModelPos, lastVisibleModelPos2);\n result.push(new ViewLineInfoGroupedByModelRange(modelRange, viewLines));\n viewLines = [];\n lastVisibleModelPos = null;\n }\n else if (line.isVisible() && !lastVisibleModelPos) {\n lastVisibleModelPos = new Position(curModelLine, 1);\n }\n }\n if (lastVisibleModelPos) {\n const modelRange = Range.fromPositions(lastVisibleModelPos, this.getModelEndPositionOfViewLine(endViewLine));\n result.push(new ViewLineInfoGroupedByModelRange(modelRange, viewLines));\n }\n return result;\n }\n // #endregion\n getViewLinesBracketGuides(viewStartLineNumber, viewEndLineNumber, activeViewPosition, options) {\n const modelActivePosition = activeViewPosition ? this.convertViewPositionToModelPosition(activeViewPosition.lineNumber, activeViewPosition.column) : null;\n const resultPerViewLine = [];\n for (const group of this.getViewLineInfosGroupedByModelRanges(viewStartLineNumber, viewEndLineNumber)) {\n const modelRangeStartLineNumber = group.modelRange.startLineNumber;\n const bracketGuidesPerModelLine = this.model.guides.getLinesBracketGuides(modelRangeStartLineNumber, group.modelRange.endLineNumber, modelActivePosition, options);\n for (const viewLineInfo of group.viewLines) {\n const bracketGuides = bracketGuidesPerModelLine[viewLineInfo.modelLineNumber - modelRangeStartLineNumber];\n // visibleColumns stay as they are (this is a bug and needs to be fixed, but it is not a regression)\n // model-columns must be converted to view-model columns.\n const result = bracketGuides.map(g => {\n if (g.forWrappedLinesAfterColumn !== -1) {\n const p = this.modelLineProjections[viewLineInfo.modelLineNumber - 1].getViewPositionOfModelPosition(0, g.forWrappedLinesAfterColumn);\n if (p.lineNumber >= viewLineInfo.modelLineWrappedLineIdx) {\n return undefined;\n }\n }\n if (g.forWrappedLinesBeforeOrAtColumn !== -1) {\n const p = this.modelLineProjections[viewLineInfo.modelLineNumber - 1].getViewPositionOfModelPosition(0, g.forWrappedLinesBeforeOrAtColumn);\n if (p.lineNumber < viewLineInfo.modelLineWrappedLineIdx) {\n return undefined;\n }\n }\n if (!g.horizontalLine) {\n return g;\n }\n let column = -1;\n if (g.column !== -1) {\n const p = this.modelLineProjections[viewLineInfo.modelLineNumber - 1].getViewPositionOfModelPosition(0, g.column);\n if (p.lineNumber === viewLineInfo.modelLineWrappedLineIdx) {\n column = p.column;\n }\n else if (p.lineNumber < viewLineInfo.modelLineWrappedLineIdx) {\n column = this.getMinColumnOfViewLine(viewLineInfo);\n }\n else if (p.lineNumber > viewLineInfo.modelLineWrappedLineIdx) {\n return undefined;\n }\n }\n const viewPosition = this.convertModelPositionToViewPosition(viewLineInfo.modelLineNumber, g.horizontalLine.endColumn);\n const p = this.modelLineProjections[viewLineInfo.modelLineNumber - 1].getViewPositionOfModelPosition(0, g.horizontalLine.endColumn);\n if (p.lineNumber === viewLineInfo.modelLineWrappedLineIdx) {\n return new IndentGuide(g.visibleColumn, column, g.className, new IndentGuideHorizontalLine(g.horizontalLine.top, viewPosition.column), -1, -1);\n }\n else if (p.lineNumber < viewLineInfo.modelLineWrappedLineIdx) {\n return undefined;\n }\n else {\n if (g.visibleColumn !== -1) {\n // Don't repeat horizontal lines that use visibleColumn for unrelated lines.\n return undefined;\n }\n return new IndentGuide(g.visibleColumn, column, g.className, new IndentGuideHorizontalLine(g.horizontalLine.top, this.getMaxColumnOfViewLine(viewLineInfo)), -1, -1);\n }\n });\n resultPerViewLine.push(result.filter((r) => !!r));\n }\n }\n return resultPerViewLine;\n }\n getViewLinesIndentGuides(viewStartLineNumber, viewEndLineNumber) {\n // TODO: Use the same code as in `getViewLinesBracketGuides`.\n // Future TODO: Merge with `getViewLinesBracketGuides`.\n // However, this requires more refactoring of indent guides.\n viewStartLineNumber = this._toValidViewLineNumber(viewStartLineNumber);\n viewEndLineNumber = this._toValidViewLineNumber(viewEndLineNumber);\n const modelStart = this.convertViewPositionToModelPosition(viewStartLineNumber, this.getViewLineMinColumn(viewStartLineNumber));\n const modelEnd = this.convertViewPositionToModelPosition(viewEndLineNumber, this.getViewLineMaxColumn(viewEndLineNumber));\n let result = [];\n const resultRepeatCount = [];\n const resultRepeatOption = [];\n const modelStartLineIndex = modelStart.lineNumber - 1;\n const modelEndLineIndex = modelEnd.lineNumber - 1;\n let reqStart = null;\n for (let modelLineIndex = modelStartLineIndex; modelLineIndex <= modelEndLineIndex; modelLineIndex++) {\n const line = this.modelLineProjections[modelLineIndex];\n if (line.isVisible()) {\n const viewLineStartIndex = line.getViewLineNumberOfModelPosition(0, modelLineIndex === modelStartLineIndex ? modelStart.column : 1);\n const viewLineEndIndex = line.getViewLineNumberOfModelPosition(0, this.model.getLineMaxColumn(modelLineIndex + 1));\n const count = viewLineEndIndex - viewLineStartIndex + 1;\n let option = 0 /* IndentGuideRepeatOption.BlockNone */;\n if (count > 1 && line.getViewLineMinColumn(this.model, modelLineIndex + 1, viewLineEndIndex) === 1) {\n // wrapped lines should block indent guides\n option = (viewLineStartIndex === 0 ? 1 /* IndentGuideRepeatOption.BlockSubsequent */ : 2 /* IndentGuideRepeatOption.BlockAll */);\n }\n resultRepeatCount.push(count);\n resultRepeatOption.push(option);\n // merge into previous request\n if (reqStart === null) {\n reqStart = new Position(modelLineIndex + 1, 0);\n }\n }\n else {\n // hit invisible line => flush request\n if (reqStart !== null) {\n result = result.concat(this.model.guides.getLinesIndentGuides(reqStart.lineNumber, modelLineIndex));\n reqStart = null;\n }\n }\n }\n if (reqStart !== null) {\n result = result.concat(this.model.guides.getLinesIndentGuides(reqStart.lineNumber, modelEnd.lineNumber));\n reqStart = null;\n }\n const viewLineCount = viewEndLineNumber - viewStartLineNumber + 1;\n const viewIndents = new Array(viewLineCount);\n let currIndex = 0;\n for (let i = 0, len = result.length; i < len; i++) {\n let value = result[i];\n const count = Math.min(viewLineCount - currIndex, resultRepeatCount[i]);\n const option = resultRepeatOption[i];\n let blockAtIndex;\n if (option === 2 /* IndentGuideRepeatOption.BlockAll */) {\n blockAtIndex = 0;\n }\n else if (option === 1 /* IndentGuideRepeatOption.BlockSubsequent */) {\n blockAtIndex = 1;\n }\n else {\n blockAtIndex = count;\n }\n for (let j = 0; j < count; j++) {\n if (j === blockAtIndex) {\n value = 0;\n }\n viewIndents[currIndex++] = value;\n }\n }\n return viewIndents;\n }\n getViewLineContent(viewLineNumber) {\n const info = this.getViewLineInfo(viewLineNumber);\n return this.modelLineProjections[info.modelLineNumber - 1].getViewLineContent(this.model, info.modelLineNumber, info.modelLineWrappedLineIdx);\n }\n getViewLineLength(viewLineNumber) {\n const info = this.getViewLineInfo(viewLineNumber);\n return this.modelLineProjections[info.modelLineNumber - 1].getViewLineLength(this.model, info.modelLineNumber, info.modelLineWrappedLineIdx);\n }\n getViewLineMinColumn(viewLineNumber) {\n const info = this.getViewLineInfo(viewLineNumber);\n return this.modelLineProjections[info.modelLineNumber - 1].getViewLineMinColumn(this.model, info.modelLineNumber, info.modelLineWrappedLineIdx);\n }\n getViewLineMaxColumn(viewLineNumber) {\n const info = this.getViewLineInfo(viewLineNumber);\n return this.modelLineProjections[info.modelLineNumber - 1].getViewLineMaxColumn(this.model, info.modelLineNumber, info.modelLineWrappedLineIdx);\n }\n getViewLineData(viewLineNumber) {\n const info = this.getViewLineInfo(viewLineNumber);\n return this.modelLineProjections[info.modelLineNumber - 1].getViewLineData(this.model, info.modelLineNumber, info.modelLineWrappedLineIdx);\n }\n getViewLinesData(viewStartLineNumber, viewEndLineNumber, needed) {\n viewStartLineNumber = this._toValidViewLineNumber(viewStartLineNumber);\n viewEndLineNumber = this._toValidViewLineNumber(viewEndLineNumber);\n const start = this.projectedModelLineLineCounts.getIndexOf(viewStartLineNumber - 1);\n let viewLineNumber = viewStartLineNumber;\n const startModelLineIndex = start.index;\n const startRemainder = start.remainder;\n const result = [];\n for (let modelLineIndex = startModelLineIndex, len = this.model.getLineCount(); modelLineIndex < len; modelLineIndex++) {\n const line = this.modelLineProjections[modelLineIndex];\n if (!line.isVisible()) {\n continue;\n }\n const fromViewLineIndex = (modelLineIndex === startModelLineIndex ? startRemainder : 0);\n let remainingViewLineCount = line.getViewLineCount() - fromViewLineIndex;\n let lastLine = false;\n if (viewLineNumber + remainingViewLineCount > viewEndLineNumber) {\n lastLine = true;\n remainingViewLineCount = viewEndLineNumber - viewLineNumber + 1;\n }\n line.getViewLinesData(this.model, modelLineIndex + 1, fromViewLineIndex, remainingViewLineCount, viewLineNumber - viewStartLineNumber, needed, result);\n viewLineNumber += remainingViewLineCount;\n if (lastLine) {\n break;\n }\n }\n return result;\n }\n validateViewPosition(viewLineNumber, viewColumn, expectedModelPosition) {\n viewLineNumber = this._toValidViewLineNumber(viewLineNumber);\n const r = this.projectedModelLineLineCounts.getIndexOf(viewLineNumber - 1);\n const lineIndex = r.index;\n const remainder = r.remainder;\n const line = this.modelLineProjections[lineIndex];\n const minColumn = line.getViewLineMinColumn(this.model, lineIndex + 1, remainder);\n const maxColumn = line.getViewLineMaxColumn(this.model, lineIndex + 1, remainder);\n if (viewColumn < minColumn) {\n viewColumn = minColumn;\n }\n if (viewColumn > maxColumn) {\n viewColumn = maxColumn;\n }\n const computedModelColumn = line.getModelColumnOfViewPosition(remainder, viewColumn);\n const computedModelPosition = this.model.validatePosition(new Position(lineIndex + 1, computedModelColumn));\n if (computedModelPosition.equals(expectedModelPosition)) {\n return new Position(viewLineNumber, viewColumn);\n }\n return this.convertModelPositionToViewPosition(expectedModelPosition.lineNumber, expectedModelPosition.column);\n }\n validateViewRange(viewRange, expectedModelRange) {\n const validViewStart = this.validateViewPosition(viewRange.startLineNumber, viewRange.startColumn, expectedModelRange.getStartPosition());\n const validViewEnd = this.validateViewPosition(viewRange.endLineNumber, viewRange.endColumn, expectedModelRange.getEndPosition());\n return new Range(validViewStart.lineNumber, validViewStart.column, validViewEnd.lineNumber, validViewEnd.column);\n }\n convertViewPositionToModelPosition(viewLineNumber, viewColumn) {\n const info = this.getViewLineInfo(viewLineNumber);\n const inputColumn = this.modelLineProjections[info.modelLineNumber - 1].getModelColumnOfViewPosition(info.modelLineWrappedLineIdx, viewColumn);\n // console.log('out -> in ' + viewLineNumber + ',' + viewColumn + ' ===> ' + (lineIndex+1) + ',' + inputColumn);\n return this.model.validatePosition(new Position(info.modelLineNumber, inputColumn));\n }\n convertViewRangeToModelRange(viewRange) {\n const start = this.convertViewPositionToModelPosition(viewRange.startLineNumber, viewRange.startColumn);\n const end = this.convertViewPositionToModelPosition(viewRange.endLineNumber, viewRange.endColumn);\n return new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n }\n convertModelPositionToViewPosition(_modelLineNumber, _modelColumn, affinity = 2 /* PositionAffinity.None */, allowZeroLineNumber = false, belowHiddenRanges = false) {\n const validPosition = this.model.validatePosition(new Position(_modelLineNumber, _modelColumn));\n const inputLineNumber = validPosition.lineNumber;\n const inputColumn = validPosition.column;\n let lineIndex = inputLineNumber - 1, lineIndexChanged = false;\n if (belowHiddenRanges) {\n while (lineIndex < this.modelLineProjections.length && !this.modelLineProjections[lineIndex].isVisible()) {\n lineIndex++;\n lineIndexChanged = true;\n }\n }\n else {\n while (lineIndex > 0 && !this.modelLineProjections[lineIndex].isVisible()) {\n lineIndex--;\n lineIndexChanged = true;\n }\n }\n if (lineIndex === 0 && !this.modelLineProjections[lineIndex].isVisible()) {\n // Could not reach a real line\n // console.log('in -> out ' + inputLineNumber + ',' + inputColumn + ' ===> ' + 1 + ',' + 1);\n // TODO@alexdima@hediet this isn't soo pretty\n return new Position(allowZeroLineNumber ? 0 : 1, 1);\n }\n const deltaLineNumber = 1 + this.projectedModelLineLineCounts.getPrefixSum(lineIndex);\n let r;\n if (lineIndexChanged) {\n if (belowHiddenRanges) {\n r = this.modelLineProjections[lineIndex].getViewPositionOfModelPosition(deltaLineNumber, 1, affinity);\n }\n else {\n r = this.modelLineProjections[lineIndex].getViewPositionOfModelPosition(deltaLineNumber, this.model.getLineMaxColumn(lineIndex + 1), affinity);\n }\n }\n else {\n r = this.modelLineProjections[inputLineNumber - 1].getViewPositionOfModelPosition(deltaLineNumber, inputColumn, affinity);\n }\n // console.log('in -> out ' + inputLineNumber + ',' + inputColumn + ' ===> ' + r.lineNumber + ',' + r);\n return r;\n }\n /**\n * @param affinity The affinity in case of an empty range. Has no effect for non-empty ranges.\n */\n convertModelRangeToViewRange(modelRange, affinity = 0 /* PositionAffinity.Left */) {\n if (modelRange.isEmpty()) {\n const start = this.convertModelPositionToViewPosition(modelRange.startLineNumber, modelRange.startColumn, affinity);\n return Range.fromPositions(start);\n }\n else {\n const start = this.convertModelPositionToViewPosition(modelRange.startLineNumber, modelRange.startColumn, 1 /* PositionAffinity.Right */);\n const end = this.convertModelPositionToViewPosition(modelRange.endLineNumber, modelRange.endColumn, 0 /* PositionAffinity.Left */);\n return new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n }\n }\n getViewLineNumberOfModelPosition(modelLineNumber, modelColumn) {\n let lineIndex = modelLineNumber - 1;\n if (this.modelLineProjections[lineIndex].isVisible()) {\n // this model line is visible\n const deltaLineNumber = 1 + this.projectedModelLineLineCounts.getPrefixSum(lineIndex);\n return this.modelLineProjections[lineIndex].getViewLineNumberOfModelPosition(deltaLineNumber, modelColumn);\n }\n // this model line is not visible\n while (lineIndex > 0 && !this.modelLineProjections[lineIndex].isVisible()) {\n lineIndex--;\n }\n if (lineIndex === 0 && !this.modelLineProjections[lineIndex].isVisible()) {\n // Could not reach a real line\n return 1;\n }\n const deltaLineNumber = 1 + this.projectedModelLineLineCounts.getPrefixSum(lineIndex);\n return this.modelLineProjections[lineIndex].getViewLineNumberOfModelPosition(deltaLineNumber, this.model.getLineMaxColumn(lineIndex + 1));\n }\n getDecorationsInRange(range, ownerId, filterOutValidation, onlyMinimapDecorations, onlyMarginDecorations) {\n const modelStart = this.convertViewPositionToModelPosition(range.startLineNumber, range.startColumn);\n const modelEnd = this.convertViewPositionToModelPosition(range.endLineNumber, range.endColumn);\n if (modelEnd.lineNumber - modelStart.lineNumber <= range.endLineNumber - range.startLineNumber) {\n // most likely there are no hidden lines => fast path\n // fetch decorations from column 1 to cover the case of wrapped lines that have whole line decorations at column 1\n return this.model.getDecorationsInRange(new Range(modelStart.lineNumber, 1, modelEnd.lineNumber, modelEnd.column), ownerId, filterOutValidation, onlyMinimapDecorations, onlyMarginDecorations);\n }\n let result = [];\n const modelStartLineIndex = modelStart.lineNumber - 1;\n const modelEndLineIndex = modelEnd.lineNumber - 1;\n let reqStart = null;\n for (let modelLineIndex = modelStartLineIndex; modelLineIndex <= modelEndLineIndex; modelLineIndex++) {\n const line = this.modelLineProjections[modelLineIndex];\n if (line.isVisible()) {\n // merge into previous request\n if (reqStart === null) {\n reqStart = new Position(modelLineIndex + 1, modelLineIndex === modelStartLineIndex ? modelStart.column : 1);\n }\n }\n else {\n // hit invisible line => flush request\n if (reqStart !== null) {\n const maxLineColumn = this.model.getLineMaxColumn(modelLineIndex);\n result = result.concat(this.model.getDecorationsInRange(new Range(reqStart.lineNumber, reqStart.column, modelLineIndex, maxLineColumn), ownerId, filterOutValidation, onlyMinimapDecorations));\n reqStart = null;\n }\n }\n }\n if (reqStart !== null) {\n result = result.concat(this.model.getDecorationsInRange(new Range(reqStart.lineNumber, reqStart.column, modelEnd.lineNumber, modelEnd.column), ownerId, filterOutValidation, onlyMinimapDecorations));\n reqStart = null;\n }\n result.sort((a, b) => {\n const res = Range.compareRangesUsingStarts(a.range, b.range);\n if (res === 0) {\n if (a.id < b.id) {\n return -1;\n }\n if (a.id > b.id) {\n return 1;\n }\n return 0;\n }\n return res;\n });\n // Eliminate duplicate decorations that might have intersected our visible ranges multiple times\n const finalResult = [];\n let finalResultLen = 0;\n let prevDecId = null;\n for (const dec of result) {\n const decId = dec.id;\n if (prevDecId === decId) {\n // skip\n continue;\n }\n prevDecId = decId;\n finalResult[finalResultLen++] = dec;\n }\n return finalResult;\n }\n getInjectedTextAt(position) {\n const info = this.getViewLineInfo(position.lineNumber);\n return this.modelLineProjections[info.modelLineNumber - 1].getInjectedTextAt(info.modelLineWrappedLineIdx, position.column);\n }\n normalizePosition(position, affinity) {\n const info = this.getViewLineInfo(position.lineNumber);\n return this.modelLineProjections[info.modelLineNumber - 1].normalizePosition(info.modelLineWrappedLineIdx, position, affinity);\n }\n getLineIndentColumn(lineNumber) {\n const info = this.getViewLineInfo(lineNumber);\n if (info.modelLineWrappedLineIdx === 0) {\n return this.model.getLineIndentColumn(info.modelLineNumber);\n }\n // wrapped lines have no indentation.\n // We deliberately don't handle the case that indentation is wrapped\n // to avoid two view lines reporting indentation for the very same model line.\n return 0;\n }\n}\n/**\n * Overlapping unsorted ranges:\n * [ ) [ ) [ )\n * [ ) [ )\n * ->\n * Non overlapping sorted ranges:\n * [ ) [ ) [ )\n *\n * Note: This function only considers line information! Columns are ignored.\n*/\nfunction normalizeLineRanges(ranges) {\n if (ranges.length === 0) {\n return [];\n }\n const sortedRanges = ranges.slice();\n sortedRanges.sort(Range.compareRangesUsingStarts);\n const result = [];\n let currentRangeStart = sortedRanges[0].startLineNumber;\n let currentRangeEnd = sortedRanges[0].endLineNumber;\n for (let i = 1, len = sortedRanges.length; i < len; i++) {\n const range = sortedRanges[i];\n if (range.startLineNumber > currentRangeEnd + 1) {\n result.push(new Range(currentRangeStart, 1, currentRangeEnd, 1));\n currentRangeStart = range.startLineNumber;\n currentRangeEnd = range.endLineNumber;\n }\n else if (range.endLineNumber > currentRangeEnd) {\n currentRangeEnd = range.endLineNumber;\n }\n }\n result.push(new Range(currentRangeStart, 1, currentRangeEnd, 1));\n return result;\n}\n/**\n * Represents a view line. Can be used to efficiently query more information about it.\n */\nclass ViewLineInfo {\n constructor(modelLineNumber, modelLineWrappedLineIdx) {\n this.modelLineNumber = modelLineNumber;\n this.modelLineWrappedLineIdx = modelLineWrappedLineIdx;\n }\n}\n/**\n * A list of view lines that have a contiguous span in the model.\n*/\nclass ViewLineInfoGroupedByModelRange {\n constructor(modelRange, viewLines) {\n this.modelRange = modelRange;\n this.viewLines = viewLines;\n }\n}\nclass CoordinatesConverter {\n constructor(lines) {\n this._lines = lines;\n }\n // View -> Model conversion and related methods\n convertViewPositionToModelPosition(viewPosition) {\n return this._lines.convertViewPositionToModelPosition(viewPosition.lineNumber, viewPosition.column);\n }\n convertViewRangeToModelRange(viewRange) {\n return this._lines.convertViewRangeToModelRange(viewRange);\n }\n validateViewPosition(viewPosition, expectedModelPosition) {\n return this._lines.validateViewPosition(viewPosition.lineNumber, viewPosition.column, expectedModelPosition);\n }\n validateViewRange(viewRange, expectedModelRange) {\n return this._lines.validateViewRange(viewRange, expectedModelRange);\n }\n // Model -> View conversion and related methods\n convertModelPositionToViewPosition(modelPosition, affinity, allowZero, belowHiddenRanges) {\n return this._lines.convertModelPositionToViewPosition(modelPosition.lineNumber, modelPosition.column, affinity, allowZero, belowHiddenRanges);\n }\n convertModelRangeToViewRange(modelRange, affinity) {\n return this._lines.convertModelRangeToViewRange(modelRange, affinity);\n }\n modelPositionIsVisible(modelPosition) {\n return this._lines.modelPositionIsVisible(modelPosition.lineNumber, modelPosition.column);\n }\n getModelLineViewLineCount(modelLineNumber) {\n return this._lines.getModelLineViewLineCount(modelLineNumber);\n }\n getViewLineNumberOfModelPosition(modelLineNumber, modelColumn) {\n return this._lines.getViewLineNumberOfModelPosition(modelLineNumber, modelColumn);\n }\n}\nexport class ViewModelLinesFromModelAsIs {\n constructor(model) {\n this.model = model;\n }\n dispose() {\n }\n createCoordinatesConverter() {\n return new IdentityCoordinatesConverter(this);\n }\n getHiddenAreas() {\n return [];\n }\n setHiddenAreas(_ranges) {\n return false;\n }\n setTabSize(_newTabSize) {\n return false;\n }\n setWrappingSettings(_fontInfo, _wrappingStrategy, _wrappingColumn, _wrappingIndent) {\n return false;\n }\n createLineBreaksComputer() {\n const result = [];\n return {\n addRequest: (lineText, injectedText, previousLineBreakData) => {\n result.push(null);\n },\n finalize: () => {\n return result;\n }\n };\n }\n onModelFlushed() {\n }\n onModelLinesDeleted(_versionId, fromLineNumber, toLineNumber) {\n return new viewEvents.ViewLinesDeletedEvent(fromLineNumber, toLineNumber);\n }\n onModelLinesInserted(_versionId, fromLineNumber, toLineNumber, lineBreaks) {\n return new viewEvents.ViewLinesInsertedEvent(fromLineNumber, toLineNumber);\n }\n onModelLineChanged(_versionId, lineNumber, lineBreakData) {\n return [false, new viewEvents.ViewLinesChangedEvent(lineNumber, 1), null, null];\n }\n acceptVersionId(_versionId) {\n }\n getViewLineCount() {\n return this.model.getLineCount();\n }\n getActiveIndentGuide(viewLineNumber, _minLineNumber, _maxLineNumber) {\n return {\n startLineNumber: viewLineNumber,\n endLineNumber: viewLineNumber,\n indent: 0\n };\n }\n getViewLinesBracketGuides(startLineNumber, endLineNumber, activePosition) {\n return new Array(endLineNumber - startLineNumber + 1).fill([]);\n }\n getViewLinesIndentGuides(viewStartLineNumber, viewEndLineNumber) {\n const viewLineCount = viewEndLineNumber - viewStartLineNumber + 1;\n const result = new Array(viewLineCount);\n for (let i = 0; i < viewLineCount; i++) {\n result[i] = 0;\n }\n return result;\n }\n getViewLineContent(viewLineNumber) {\n return this.model.getLineContent(viewLineNumber);\n }\n getViewLineLength(viewLineNumber) {\n return this.model.getLineLength(viewLineNumber);\n }\n getViewLineMinColumn(viewLineNumber) {\n return this.model.getLineMinColumn(viewLineNumber);\n }\n getViewLineMaxColumn(viewLineNumber) {\n return this.model.getLineMaxColumn(viewLineNumber);\n }\n getViewLineData(viewLineNumber) {\n const lineTokens = this.model.tokenization.getLineTokens(viewLineNumber);\n const lineContent = lineTokens.getLineContent();\n return new ViewLineData(lineContent, false, 1, lineContent.length + 1, 0, lineTokens.inflate(), null);\n }\n getViewLinesData(viewStartLineNumber, viewEndLineNumber, needed) {\n const lineCount = this.model.getLineCount();\n viewStartLineNumber = Math.min(Math.max(1, viewStartLineNumber), lineCount);\n viewEndLineNumber = Math.min(Math.max(1, viewEndLineNumber), lineCount);\n const result = [];\n for (let lineNumber = viewStartLineNumber; lineNumber <= viewEndLineNumber; lineNumber++) {\n const idx = lineNumber - viewStartLineNumber;\n result[idx] = needed[idx] ? this.getViewLineData(lineNumber) : null;\n }\n return result;\n }\n getDecorationsInRange(range, ownerId, filterOutValidation, onlyMinimapDecorations, onlyMarginDecorations) {\n return this.model.getDecorationsInRange(range, ownerId, filterOutValidation, onlyMinimapDecorations, onlyMarginDecorations);\n }\n normalizePosition(position, affinity) {\n return this.model.normalizePosition(position, affinity);\n }\n getLineIndentColumn(lineNumber) {\n return this.model.getLineIndentColumn(lineNumber);\n }\n getInjectedTextAt(position) {\n // Identity lines collection does not support injected text.\n return null;\n }\n}\nclass IdentityCoordinatesConverter {\n constructor(lines) {\n this._lines = lines;\n }\n _validPosition(pos) {\n return this._lines.model.validatePosition(pos);\n }\n _validRange(range) {\n return this._lines.model.validateRange(range);\n }\n // View -> Model conversion and related methods\n convertViewPositionToModelPosition(viewPosition) {\n return this._validPosition(viewPosition);\n }\n convertViewRangeToModelRange(viewRange) {\n return this._validRange(viewRange);\n }\n validateViewPosition(_viewPosition, expectedModelPosition) {\n return this._validPosition(expectedModelPosition);\n }\n validateViewRange(_viewRange, expectedModelRange) {\n return this._validRange(expectedModelRange);\n }\n // Model -> View conversion and related methods\n convertModelPositionToViewPosition(modelPosition) {\n return this._validPosition(modelPosition);\n }\n convertModelRangeToViewRange(modelRange) {\n return this._validRange(modelRange);\n }\n modelPositionIsVisible(modelPosition) {\n const lineCount = this._lines.model.getLineCount();\n if (modelPosition.lineNumber < 1 || modelPosition.lineNumber > lineCount) {\n // invalid arguments\n return false;\n }\n return true;\n }\n getModelLineViewLineCount(modelLineNumber) {\n return 1;\n }\n getViewLineNumberOfModelPosition(modelLineNumber, modelColumn) {\n return modelLineNumber;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { ArrayQueue } from '../../../base/common/arrays.js';\nimport { RunOnceScheduler } from '../../../base/common/async.js';\nimport { Color } from '../../../base/common/color.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as platform from '../../../base/common/platform.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { EDITOR_FONT_DEFAULTS, filterValidationDecorations } from '../config/editorOptions.js';\nimport { CursorsController } from '../cursor/cursor.js';\nimport { CursorConfiguration } from '../cursorCommon.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport * as textModelEvents from '../textModelEvents.js';\nimport { TokenizationRegistry } from '../languages.js';\nimport { PLAINTEXT_LANGUAGE_ID } from '../languages/modesRegistry.js';\nimport { tokenizeLineToHTML } from '../languages/textToHtmlTokenizer.js';\nimport * as viewEvents from '../viewEvents.js';\nimport { ViewLayout } from '../viewLayout/viewLayout.js';\nimport { MinimapTokensColorTracker } from './minimapTokensColorTracker.js';\nimport { MinimapLinesRenderingData, OverviewRulerDecorationsGroup, ViewLineRenderingData } from '../viewModel.js';\nimport { ViewModelDecorations } from './viewModelDecorations.js';\nimport { FocusChangedEvent, HiddenAreasChangedEvent, ModelContentChangedEvent, ModelDecorationsChangedEvent, ModelLanguageChangedEvent, ModelLanguageConfigurationChangedEvent, ModelOptionsChangedEvent, ModelTokensChangedEvent, ReadOnlyEditAttemptEvent, ScrollChangedEvent, ViewModelEventDispatcher, ViewZonesChangedEvent } from '../viewModelEventDispatcher.js';\nimport { ViewModelLinesFromModelAsIs, ViewModelLinesFromProjectedModel } from './viewModelLines.js';\nimport { GlyphMarginLanesModel } from './glyphLanesModel.js';\nconst USE_IDENTITY_LINES_COLLECTION = true;\nexport class ViewModel extends Disposable {\n constructor(editorId, configuration, model, domLineBreaksComputerFactory, monospaceLineBreaksComputerFactory, scheduleAtNextAnimationFrame, languageConfigurationService, _themeService, _attachedView) {\n super();\n this.languageConfigurationService = languageConfigurationService;\n this._themeService = _themeService;\n this._attachedView = _attachedView;\n this.hiddenAreasModel = new HiddenAreasModel();\n this.previousHiddenAreas = [];\n this._editorId = editorId;\n this._configuration = configuration;\n this.model = model;\n this._eventDispatcher = new ViewModelEventDispatcher();\n this.onEvent = this._eventDispatcher.onEvent;\n this.cursorConfig = new CursorConfiguration(this.model.getLanguageId(), this.model.getOptions(), this._configuration, this.languageConfigurationService);\n this._updateConfigurationViewLineCount = this._register(new RunOnceScheduler(() => this._updateConfigurationViewLineCountNow(), 0));\n this._hasFocus = false;\n this._viewportStart = ViewportStart.create(this.model);\n this.glyphLanes = new GlyphMarginLanesModel(0);\n if (USE_IDENTITY_LINES_COLLECTION && this.model.isTooLargeForTokenization()) {\n this._lines = new ViewModelLinesFromModelAsIs(this.model);\n }\n else {\n const options = this._configuration.options;\n const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n const wrappingStrategy = options.get(139 /* EditorOption.wrappingStrategy */);\n const wrappingInfo = options.get(146 /* EditorOption.wrappingInfo */);\n const wrappingIndent = options.get(138 /* EditorOption.wrappingIndent */);\n const wordBreak = options.get(129 /* EditorOption.wordBreak */);\n this._lines = new ViewModelLinesFromProjectedModel(this._editorId, this.model, domLineBreaksComputerFactory, monospaceLineBreaksComputerFactory, fontInfo, this.model.getOptions().tabSize, wrappingStrategy, wrappingInfo.wrappingColumn, wrappingIndent, wordBreak);\n }\n this.coordinatesConverter = this._lines.createCoordinatesConverter();\n this._cursor = this._register(new CursorsController(model, this, this.coordinatesConverter, this.cursorConfig));\n this.viewLayout = this._register(new ViewLayout(this._configuration, this.getLineCount(), scheduleAtNextAnimationFrame));\n this._register(this.viewLayout.onDidScroll((e) => {\n if (e.scrollTopChanged) {\n this._handleVisibleLinesChanged();\n }\n if (e.scrollTopChanged) {\n this._viewportStart.invalidate();\n }\n this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewScrollChangedEvent(e));\n this._eventDispatcher.emitOutgoingEvent(new ScrollChangedEvent(e.oldScrollWidth, e.oldScrollLeft, e.oldScrollHeight, e.oldScrollTop, e.scrollWidth, e.scrollLeft, e.scrollHeight, e.scrollTop));\n }));\n this._register(this.viewLayout.onDidContentSizeChange((e) => {\n this._eventDispatcher.emitOutgoingEvent(e);\n }));\n this._decorations = new ViewModelDecorations(this._editorId, this.model, this._configuration, this._lines, this.coordinatesConverter);\n this._registerModelEvents();\n this._register(this._configuration.onDidChangeFast((e) => {\n try {\n const eventsCollector = this._eventDispatcher.beginEmitViewEvents();\n this._onConfigurationChanged(eventsCollector, e);\n }\n finally {\n this._eventDispatcher.endEmitViewEvents();\n }\n }));\n this._register(MinimapTokensColorTracker.getInstance().onDidChange(() => {\n this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewTokensColorsChangedEvent());\n }));\n this._register(this._themeService.onDidColorThemeChange((theme) => {\n this._invalidateDecorationsColorCache();\n this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewThemeChangedEvent(theme));\n }));\n this._updateConfigurationViewLineCountNow();\n }\n dispose() {\n // First remove listeners, as disposing the lines might end up sending\n // model decoration changed events ... and we no longer care about them ...\n super.dispose();\n this._decorations.dispose();\n this._lines.dispose();\n this._viewportStart.dispose();\n this._eventDispatcher.dispose();\n }\n createLineBreaksComputer() {\n return this._lines.createLineBreaksComputer();\n }\n addViewEventHandler(eventHandler) {\n this._eventDispatcher.addViewEventHandler(eventHandler);\n }\n removeViewEventHandler(eventHandler) {\n this._eventDispatcher.removeViewEventHandler(eventHandler);\n }\n _updateConfigurationViewLineCountNow() {\n this._configuration.setViewLineCount(this._lines.getViewLineCount());\n }\n getModelVisibleRanges() {\n const linesViewportData = this.viewLayout.getLinesViewportData();\n const viewVisibleRange = new Range(linesViewportData.startLineNumber, this.getLineMinColumn(linesViewportData.startLineNumber), linesViewportData.endLineNumber, this.getLineMaxColumn(linesViewportData.endLineNumber));\n const modelVisibleRanges = this._toModelVisibleRanges(viewVisibleRange);\n return modelVisibleRanges;\n }\n visibleLinesStabilized() {\n const modelVisibleRanges = this.getModelVisibleRanges();\n this._attachedView.setVisibleLines(modelVisibleRanges, true);\n }\n _handleVisibleLinesChanged() {\n const modelVisibleRanges = this.getModelVisibleRanges();\n this._attachedView.setVisibleLines(modelVisibleRanges, false);\n }\n setHasFocus(hasFocus) {\n this._hasFocus = hasFocus;\n this._cursor.setHasFocus(hasFocus);\n this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewFocusChangedEvent(hasFocus));\n this._eventDispatcher.emitOutgoingEvent(new FocusChangedEvent(!hasFocus, hasFocus));\n }\n onCompositionStart() {\n this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewCompositionStartEvent());\n }\n onCompositionEnd() {\n this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewCompositionEndEvent());\n }\n _captureStableViewport() {\n // We might need to restore the current start view range, so save it (if available)\n // But only if the scroll position is not at the top of the file\n if (this._viewportStart.isValid && this.viewLayout.getCurrentScrollTop() > 0) {\n const previousViewportStartViewPosition = new Position(this._viewportStart.viewLineNumber, this.getLineMinColumn(this._viewportStart.viewLineNumber));\n const previousViewportStartModelPosition = this.coordinatesConverter.convertViewPositionToModelPosition(previousViewportStartViewPosition);\n return new StableViewport(previousViewportStartModelPosition, this._viewportStart.startLineDelta);\n }\n return new StableViewport(null, 0);\n }\n _onConfigurationChanged(eventsCollector, e) {\n const stableViewport = this._captureStableViewport();\n const options = this._configuration.options;\n const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n const wrappingStrategy = options.get(139 /* EditorOption.wrappingStrategy */);\n const wrappingInfo = options.get(146 /* EditorOption.wrappingInfo */);\n const wrappingIndent = options.get(138 /* EditorOption.wrappingIndent */);\n const wordBreak = options.get(129 /* EditorOption.wordBreak */);\n if (this._lines.setWrappingSettings(fontInfo, wrappingStrategy, wrappingInfo.wrappingColumn, wrappingIndent, wordBreak)) {\n eventsCollector.emitViewEvent(new viewEvents.ViewFlushedEvent());\n eventsCollector.emitViewEvent(new viewEvents.ViewLineMappingChangedEvent());\n eventsCollector.emitViewEvent(new viewEvents.ViewDecorationsChangedEvent(null));\n this._cursor.onLineMappingChanged(eventsCollector);\n this._decorations.onLineMappingChanged();\n this.viewLayout.onFlushed(this.getLineCount());\n this._updateConfigurationViewLineCount.schedule();\n }\n if (e.hasChanged(91 /* EditorOption.readOnly */)) {\n // Must read again all decorations due to readOnly filtering\n this._decorations.reset();\n eventsCollector.emitViewEvent(new viewEvents.ViewDecorationsChangedEvent(null));\n }\n if (e.hasChanged(98 /* EditorOption.renderValidationDecorations */)) {\n this._decorations.reset();\n eventsCollector.emitViewEvent(new viewEvents.ViewDecorationsChangedEvent(null));\n }\n eventsCollector.emitViewEvent(new viewEvents.ViewConfigurationChangedEvent(e));\n this.viewLayout.onConfigurationChanged(e);\n stableViewport.recoverViewportStart(this.coordinatesConverter, this.viewLayout);\n if (CursorConfiguration.shouldRecreate(e)) {\n this.cursorConfig = new CursorConfiguration(this.model.getLanguageId(), this.model.getOptions(), this._configuration, this.languageConfigurationService);\n this._cursor.updateConfiguration(this.cursorConfig);\n }\n }\n _registerModelEvents() {\n this._register(this.model.onDidChangeContentOrInjectedText((e) => {\n try {\n const eventsCollector = this._eventDispatcher.beginEmitViewEvents();\n let hadOtherModelChange = false;\n let hadModelLineChangeThatChangedLineMapping = false;\n const changes = (e instanceof textModelEvents.InternalModelContentChangeEvent ? e.rawContentChangedEvent.changes : e.changes);\n const versionId = (e instanceof textModelEvents.InternalModelContentChangeEvent ? e.rawContentChangedEvent.versionId : null);\n // Do a first pass to compute line mappings, and a second pass to actually interpret them\n const lineBreaksComputer = this._lines.createLineBreaksComputer();\n for (const change of changes) {\n switch (change.changeType) {\n case 4 /* textModelEvents.RawContentChangedType.LinesInserted */: {\n for (let lineIdx = 0; lineIdx < change.detail.length; lineIdx++) {\n const line = change.detail[lineIdx];\n let injectedText = change.injectedTexts[lineIdx];\n if (injectedText) {\n injectedText = injectedText.filter(element => (!element.ownerId || element.ownerId === this._editorId));\n }\n lineBreaksComputer.addRequest(line, injectedText, null);\n }\n break;\n }\n case 2 /* textModelEvents.RawContentChangedType.LineChanged */: {\n let injectedText = null;\n if (change.injectedText) {\n injectedText = change.injectedText.filter(element => (!element.ownerId || element.ownerId === this._editorId));\n }\n lineBreaksComputer.addRequest(change.detail, injectedText, null);\n break;\n }\n }\n }\n const lineBreaks = lineBreaksComputer.finalize();\n const lineBreakQueue = new ArrayQueue(lineBreaks);\n for (const change of changes) {\n switch (change.changeType) {\n case 1 /* textModelEvents.RawContentChangedType.Flush */: {\n this._lines.onModelFlushed();\n eventsCollector.emitViewEvent(new viewEvents.ViewFlushedEvent());\n this._decorations.reset();\n this.viewLayout.onFlushed(this.getLineCount());\n hadOtherModelChange = true;\n break;\n }\n case 3 /* textModelEvents.RawContentChangedType.LinesDeleted */: {\n const linesDeletedEvent = this._lines.onModelLinesDeleted(versionId, change.fromLineNumber, change.toLineNumber);\n if (linesDeletedEvent !== null) {\n eventsCollector.emitViewEvent(linesDeletedEvent);\n this.viewLayout.onLinesDeleted(linesDeletedEvent.fromLineNumber, linesDeletedEvent.toLineNumber);\n }\n hadOtherModelChange = true;\n break;\n }\n case 4 /* textModelEvents.RawContentChangedType.LinesInserted */: {\n const insertedLineBreaks = lineBreakQueue.takeCount(change.detail.length);\n const linesInsertedEvent = this._lines.onModelLinesInserted(versionId, change.fromLineNumber, change.toLineNumber, insertedLineBreaks);\n if (linesInsertedEvent !== null) {\n eventsCollector.emitViewEvent(linesInsertedEvent);\n this.viewLayout.onLinesInserted(linesInsertedEvent.fromLineNumber, linesInsertedEvent.toLineNumber);\n }\n hadOtherModelChange = true;\n break;\n }\n case 2 /* textModelEvents.RawContentChangedType.LineChanged */: {\n const changedLineBreakData = lineBreakQueue.dequeue();\n const [lineMappingChanged, linesChangedEvent, linesInsertedEvent, linesDeletedEvent] = this._lines.onModelLineChanged(versionId, change.lineNumber, changedLineBreakData);\n hadModelLineChangeThatChangedLineMapping = lineMappingChanged;\n if (linesChangedEvent) {\n eventsCollector.emitViewEvent(linesChangedEvent);\n }\n if (linesInsertedEvent) {\n eventsCollector.emitViewEvent(linesInsertedEvent);\n this.viewLayout.onLinesInserted(linesInsertedEvent.fromLineNumber, linesInsertedEvent.toLineNumber);\n }\n if (linesDeletedEvent) {\n eventsCollector.emitViewEvent(linesDeletedEvent);\n this.viewLayout.onLinesDeleted(linesDeletedEvent.fromLineNumber, linesDeletedEvent.toLineNumber);\n }\n break;\n }\n case 5 /* textModelEvents.RawContentChangedType.EOLChanged */: {\n // Nothing to do. The new version will be accepted below\n break;\n }\n }\n }\n if (versionId !== null) {\n this._lines.acceptVersionId(versionId);\n }\n this.viewLayout.onHeightMaybeChanged();\n if (!hadOtherModelChange && hadModelLineChangeThatChangedLineMapping) {\n eventsCollector.emitViewEvent(new viewEvents.ViewLineMappingChangedEvent());\n eventsCollector.emitViewEvent(new viewEvents.ViewDecorationsChangedEvent(null));\n this._cursor.onLineMappingChanged(eventsCollector);\n this._decorations.onLineMappingChanged();\n }\n }\n finally {\n this._eventDispatcher.endEmitViewEvents();\n }\n // Update the configuration and reset the centered view line\n const viewportStartWasValid = this._viewportStart.isValid;\n this._viewportStart.invalidate();\n this._configuration.setModelLineCount(this.model.getLineCount());\n this._updateConfigurationViewLineCountNow();\n // Recover viewport\n if (!this._hasFocus && this.model.getAttachedEditorCount() >= 2 && viewportStartWasValid) {\n const modelRange = this.model._getTrackedRange(this._viewportStart.modelTrackedRange);\n if (modelRange) {\n const viewPosition = this.coordinatesConverter.convertModelPositionToViewPosition(modelRange.getStartPosition());\n const viewPositionTop = this.viewLayout.getVerticalOffsetForLineNumber(viewPosition.lineNumber);\n this.viewLayout.setScrollPosition({ scrollTop: viewPositionTop + this._viewportStart.startLineDelta }, 1 /* ScrollType.Immediate */);\n }\n }\n try {\n const eventsCollector = this._eventDispatcher.beginEmitViewEvents();\n if (e instanceof textModelEvents.InternalModelContentChangeEvent) {\n eventsCollector.emitOutgoingEvent(new ModelContentChangedEvent(e.contentChangedEvent));\n }\n this._cursor.onModelContentChanged(eventsCollector, e);\n }\n finally {\n this._eventDispatcher.endEmitViewEvents();\n }\n this._handleVisibleLinesChanged();\n }));\n this._register(this.model.onDidChangeTokens((e) => {\n const viewRanges = [];\n for (let j = 0, lenJ = e.ranges.length; j < lenJ; j++) {\n const modelRange = e.ranges[j];\n const viewStartLineNumber = this.coordinatesConverter.convertModelPositionToViewPosition(new Position(modelRange.fromLineNumber, 1)).lineNumber;\n const viewEndLineNumber = this.coordinatesConverter.convertModelPositionToViewPosition(new Position(modelRange.toLineNumber, this.model.getLineMaxColumn(modelRange.toLineNumber))).lineNumber;\n viewRanges[j] = {\n fromLineNumber: viewStartLineNumber,\n toLineNumber: viewEndLineNumber\n };\n }\n this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewTokensChangedEvent(viewRanges));\n this._eventDispatcher.emitOutgoingEvent(new ModelTokensChangedEvent(e));\n }));\n this._register(this.model.onDidChangeLanguageConfiguration((e) => {\n this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewLanguageConfigurationEvent());\n this.cursorConfig = new CursorConfiguration(this.model.getLanguageId(), this.model.getOptions(), this._configuration, this.languageConfigurationService);\n this._cursor.updateConfiguration(this.cursorConfig);\n this._eventDispatcher.emitOutgoingEvent(new ModelLanguageConfigurationChangedEvent(e));\n }));\n this._register(this.model.onDidChangeLanguage((e) => {\n this.cursorConfig = new CursorConfiguration(this.model.getLanguageId(), this.model.getOptions(), this._configuration, this.languageConfigurationService);\n this._cursor.updateConfiguration(this.cursorConfig);\n this._eventDispatcher.emitOutgoingEvent(new ModelLanguageChangedEvent(e));\n }));\n this._register(this.model.onDidChangeOptions((e) => {\n // A tab size change causes a line mapping changed event => all view parts will repaint OK, no further event needed here\n if (this._lines.setTabSize(this.model.getOptions().tabSize)) {\n try {\n const eventsCollector = this._eventDispatcher.beginEmitViewEvents();\n eventsCollector.emitViewEvent(new viewEvents.ViewFlushedEvent());\n eventsCollector.emitViewEvent(new viewEvents.ViewLineMappingChangedEvent());\n eventsCollector.emitViewEvent(new viewEvents.ViewDecorationsChangedEvent(null));\n this._cursor.onLineMappingChanged(eventsCollector);\n this._decorations.onLineMappingChanged();\n this.viewLayout.onFlushed(this.getLineCount());\n }\n finally {\n this._eventDispatcher.endEmitViewEvents();\n }\n this._updateConfigurationViewLineCount.schedule();\n }\n this.cursorConfig = new CursorConfiguration(this.model.getLanguageId(), this.model.getOptions(), this._configuration, this.languageConfigurationService);\n this._cursor.updateConfiguration(this.cursorConfig);\n this._eventDispatcher.emitOutgoingEvent(new ModelOptionsChangedEvent(e));\n }));\n this._register(this.model.onDidChangeDecorations((e) => {\n this._decorations.onModelDecorationsChanged();\n this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewDecorationsChangedEvent(e));\n this._eventDispatcher.emitOutgoingEvent(new ModelDecorationsChangedEvent(e));\n }));\n }\n setHiddenAreas(ranges, source) {\n var _a;\n this.hiddenAreasModel.setHiddenAreas(source, ranges);\n const mergedRanges = this.hiddenAreasModel.getMergedRanges();\n if (mergedRanges === this.previousHiddenAreas) {\n return;\n }\n this.previousHiddenAreas = mergedRanges;\n const stableViewport = this._captureStableViewport();\n let lineMappingChanged = false;\n try {\n const eventsCollector = this._eventDispatcher.beginEmitViewEvents();\n lineMappingChanged = this._lines.setHiddenAreas(mergedRanges);\n if (lineMappingChanged) {\n eventsCollector.emitViewEvent(new viewEvents.ViewFlushedEvent());\n eventsCollector.emitViewEvent(new viewEvents.ViewLineMappingChangedEvent());\n eventsCollector.emitViewEvent(new viewEvents.ViewDecorationsChangedEvent(null));\n this._cursor.onLineMappingChanged(eventsCollector);\n this._decorations.onLineMappingChanged();\n this.viewLayout.onFlushed(this.getLineCount());\n this.viewLayout.onHeightMaybeChanged();\n }\n const firstModelLineInViewPort = (_a = stableViewport.viewportStartModelPosition) === null || _a === void 0 ? void 0 : _a.lineNumber;\n const firstModelLineIsHidden = firstModelLineInViewPort && mergedRanges.some(range => range.startLineNumber <= firstModelLineInViewPort && firstModelLineInViewPort <= range.endLineNumber);\n if (!firstModelLineIsHidden) {\n stableViewport.recoverViewportStart(this.coordinatesConverter, this.viewLayout);\n }\n }\n finally {\n this._eventDispatcher.endEmitViewEvents();\n }\n this._updateConfigurationViewLineCount.schedule();\n if (lineMappingChanged) {\n this._eventDispatcher.emitOutgoingEvent(new HiddenAreasChangedEvent());\n }\n }\n getVisibleRangesPlusViewportAboveBelow() {\n const layoutInfo = this._configuration.options.get(145 /* EditorOption.layoutInfo */);\n const lineHeight = this._configuration.options.get(67 /* EditorOption.lineHeight */);\n const linesAround = Math.max(20, Math.round(layoutInfo.height / lineHeight));\n const partialData = this.viewLayout.getLinesViewportData();\n const startViewLineNumber = Math.max(1, partialData.completelyVisibleStartLineNumber - linesAround);\n const endViewLineNumber = Math.min(this.getLineCount(), partialData.completelyVisibleEndLineNumber + linesAround);\n return this._toModelVisibleRanges(new Range(startViewLineNumber, this.getLineMinColumn(startViewLineNumber), endViewLineNumber, this.getLineMaxColumn(endViewLineNumber)));\n }\n getVisibleRanges() {\n const visibleViewRange = this.getCompletelyVisibleViewRange();\n return this._toModelVisibleRanges(visibleViewRange);\n }\n getHiddenAreas() {\n return this._lines.getHiddenAreas();\n }\n _toModelVisibleRanges(visibleViewRange) {\n const visibleRange = this.coordinatesConverter.convertViewRangeToModelRange(visibleViewRange);\n const hiddenAreas = this._lines.getHiddenAreas();\n if (hiddenAreas.length === 0) {\n return [visibleRange];\n }\n const result = [];\n let resultLen = 0;\n let startLineNumber = visibleRange.startLineNumber;\n let startColumn = visibleRange.startColumn;\n const endLineNumber = visibleRange.endLineNumber;\n const endColumn = visibleRange.endColumn;\n for (let i = 0, len = hiddenAreas.length; i < len; i++) {\n const hiddenStartLineNumber = hiddenAreas[i].startLineNumber;\n const hiddenEndLineNumber = hiddenAreas[i].endLineNumber;\n if (hiddenEndLineNumber < startLineNumber) {\n continue;\n }\n if (hiddenStartLineNumber > endLineNumber) {\n continue;\n }\n if (startLineNumber < hiddenStartLineNumber) {\n result[resultLen++] = new Range(startLineNumber, startColumn, hiddenStartLineNumber - 1, this.model.getLineMaxColumn(hiddenStartLineNumber - 1));\n }\n startLineNumber = hiddenEndLineNumber + 1;\n startColumn = 1;\n }\n if (startLineNumber < endLineNumber || (startLineNumber === endLineNumber && startColumn < endColumn)) {\n result[resultLen++] = new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n }\n return result;\n }\n getCompletelyVisibleViewRange() {\n const partialData = this.viewLayout.getLinesViewportData();\n const startViewLineNumber = partialData.completelyVisibleStartLineNumber;\n const endViewLineNumber = partialData.completelyVisibleEndLineNumber;\n return new Range(startViewLineNumber, this.getLineMinColumn(startViewLineNumber), endViewLineNumber, this.getLineMaxColumn(endViewLineNumber));\n }\n getCompletelyVisibleViewRangeAtScrollTop(scrollTop) {\n const partialData = this.viewLayout.getLinesViewportDataAtScrollTop(scrollTop);\n const startViewLineNumber = partialData.completelyVisibleStartLineNumber;\n const endViewLineNumber = partialData.completelyVisibleEndLineNumber;\n return new Range(startViewLineNumber, this.getLineMinColumn(startViewLineNumber), endViewLineNumber, this.getLineMaxColumn(endViewLineNumber));\n }\n saveState() {\n const compatViewState = this.viewLayout.saveState();\n const scrollTop = compatViewState.scrollTop;\n const firstViewLineNumber = this.viewLayout.getLineNumberAtVerticalOffset(scrollTop);\n const firstPosition = this.coordinatesConverter.convertViewPositionToModelPosition(new Position(firstViewLineNumber, this.getLineMinColumn(firstViewLineNumber)));\n const firstPositionDeltaTop = this.viewLayout.getVerticalOffsetForLineNumber(firstViewLineNumber) - scrollTop;\n return {\n scrollLeft: compatViewState.scrollLeft,\n firstPosition: firstPosition,\n firstPositionDeltaTop: firstPositionDeltaTop\n };\n }\n reduceRestoreState(state) {\n if (typeof state.firstPosition === 'undefined') {\n // This is a view state serialized by an older version\n return this._reduceRestoreStateCompatibility(state);\n }\n const modelPosition = this.model.validatePosition(state.firstPosition);\n const viewPosition = this.coordinatesConverter.convertModelPositionToViewPosition(modelPosition);\n const scrollTop = this.viewLayout.getVerticalOffsetForLineNumber(viewPosition.lineNumber) - state.firstPositionDeltaTop;\n return {\n scrollLeft: state.scrollLeft,\n scrollTop: scrollTop\n };\n }\n _reduceRestoreStateCompatibility(state) {\n return {\n scrollLeft: state.scrollLeft,\n scrollTop: state.scrollTopWithoutViewZones\n };\n }\n getTabSize() {\n return this.model.getOptions().tabSize;\n }\n getLineCount() {\n return this._lines.getViewLineCount();\n }\n /**\n * Gives a hint that a lot of requests are about to come in for these line numbers.\n */\n setViewport(startLineNumber, endLineNumber, centeredLineNumber) {\n this._viewportStart.update(this, startLineNumber);\n }\n getActiveIndentGuide(lineNumber, minLineNumber, maxLineNumber) {\n return this._lines.getActiveIndentGuide(lineNumber, minLineNumber, maxLineNumber);\n }\n getLinesIndentGuides(startLineNumber, endLineNumber) {\n return this._lines.getViewLinesIndentGuides(startLineNumber, endLineNumber);\n }\n getBracketGuidesInRangeByLine(startLineNumber, endLineNumber, activePosition, options) {\n return this._lines.getViewLinesBracketGuides(startLineNumber, endLineNumber, activePosition, options);\n }\n getLineContent(lineNumber) {\n return this._lines.getViewLineContent(lineNumber);\n }\n getLineLength(lineNumber) {\n return this._lines.getViewLineLength(lineNumber);\n }\n getLineMinColumn(lineNumber) {\n return this._lines.getViewLineMinColumn(lineNumber);\n }\n getLineMaxColumn(lineNumber) {\n return this._lines.getViewLineMaxColumn(lineNumber);\n }\n getLineFirstNonWhitespaceColumn(lineNumber) {\n const result = strings.firstNonWhitespaceIndex(this.getLineContent(lineNumber));\n if (result === -1) {\n return 0;\n }\n return result + 1;\n }\n getLineLastNonWhitespaceColumn(lineNumber) {\n const result = strings.lastNonWhitespaceIndex(this.getLineContent(lineNumber));\n if (result === -1) {\n return 0;\n }\n return result + 2;\n }\n getMinimapDecorationsInRange(range) {\n return this._decorations.getMinimapDecorationsInRange(range);\n }\n getDecorationsInViewport(visibleRange) {\n return this._decorations.getDecorationsViewportData(visibleRange).decorations;\n }\n getInjectedTextAt(viewPosition) {\n return this._lines.getInjectedTextAt(viewPosition);\n }\n getViewportViewLineRenderingData(visibleRange, lineNumber) {\n const allInlineDecorations = this._decorations.getDecorationsViewportData(visibleRange).inlineDecorations;\n const inlineDecorations = allInlineDecorations[lineNumber - visibleRange.startLineNumber];\n return this._getViewLineRenderingData(lineNumber, inlineDecorations);\n }\n getViewLineRenderingData(lineNumber) {\n const inlineDecorations = this._decorations.getInlineDecorationsOnLine(lineNumber);\n return this._getViewLineRenderingData(lineNumber, inlineDecorations);\n }\n _getViewLineRenderingData(lineNumber, inlineDecorations) {\n const mightContainRTL = this.model.mightContainRTL();\n const mightContainNonBasicASCII = this.model.mightContainNonBasicASCII();\n const tabSize = this.getTabSize();\n const lineData = this._lines.getViewLineData(lineNumber);\n if (lineData.inlineDecorations) {\n inlineDecorations = [\n ...inlineDecorations,\n ...lineData.inlineDecorations.map(d => d.toInlineDecoration(lineNumber))\n ];\n }\n return new ViewLineRenderingData(lineData.minColumn, lineData.maxColumn, lineData.content, lineData.continuesWithWrappedLine, mightContainRTL, mightContainNonBasicASCII, lineData.tokens, inlineDecorations, tabSize, lineData.startVisibleColumn);\n }\n getViewLineData(lineNumber) {\n return this._lines.getViewLineData(lineNumber);\n }\n getMinimapLinesRenderingData(startLineNumber, endLineNumber, needed) {\n const result = this._lines.getViewLinesData(startLineNumber, endLineNumber, needed);\n return new MinimapLinesRenderingData(this.getTabSize(), result);\n }\n getAllOverviewRulerDecorations(theme) {\n const decorations = this.model.getOverviewRulerDecorations(this._editorId, filterValidationDecorations(this._configuration.options));\n const result = new OverviewRulerDecorations();\n for (const decoration of decorations) {\n const decorationOptions = decoration.options;\n const opts = decorationOptions.overviewRuler;\n if (!opts) {\n continue;\n }\n const lane = opts.position;\n if (lane === 0) {\n continue;\n }\n const color = opts.getColor(theme.value);\n const viewStartLineNumber = this.coordinatesConverter.getViewLineNumberOfModelPosition(decoration.range.startLineNumber, decoration.range.startColumn);\n const viewEndLineNumber = this.coordinatesConverter.getViewLineNumberOfModelPosition(decoration.range.endLineNumber, decoration.range.endColumn);\n result.accept(color, decorationOptions.zIndex, viewStartLineNumber, viewEndLineNumber, lane);\n }\n return result.asArray;\n }\n _invalidateDecorationsColorCache() {\n const decorations = this.model.getOverviewRulerDecorations();\n for (const decoration of decorations) {\n const opts1 = decoration.options.overviewRuler;\n opts1 === null || opts1 === void 0 ? void 0 : opts1.invalidateCachedColor();\n const opts2 = decoration.options.minimap;\n opts2 === null || opts2 === void 0 ? void 0 : opts2.invalidateCachedColor();\n }\n }\n getValueInRange(range, eol) {\n const modelRange = this.coordinatesConverter.convertViewRangeToModelRange(range);\n return this.model.getValueInRange(modelRange, eol);\n }\n getValueLengthInRange(range, eol) {\n const modelRange = this.coordinatesConverter.convertViewRangeToModelRange(range);\n return this.model.getValueLengthInRange(modelRange, eol);\n }\n modifyPosition(position, offset) {\n const modelPosition = this.coordinatesConverter.convertViewPositionToModelPosition(position);\n const resultModelPosition = this.model.modifyPosition(modelPosition, offset);\n return this.coordinatesConverter.convertModelPositionToViewPosition(resultModelPosition);\n }\n deduceModelPositionRelativeToViewPosition(viewAnchorPosition, deltaOffset, lineFeedCnt) {\n const modelAnchor = this.coordinatesConverter.convertViewPositionToModelPosition(viewAnchorPosition);\n if (this.model.getEOL().length === 2) {\n // This model uses CRLF, so the delta must take that into account\n if (deltaOffset < 0) {\n deltaOffset -= lineFeedCnt;\n }\n else {\n deltaOffset += lineFeedCnt;\n }\n }\n const modelAnchorOffset = this.model.getOffsetAt(modelAnchor);\n const resultOffset = modelAnchorOffset + deltaOffset;\n return this.model.getPositionAt(resultOffset);\n }\n getPlainTextToCopy(modelRanges, emptySelectionClipboard, forceCRLF) {\n const newLineCharacter = forceCRLF ? '\\r\\n' : this.model.getEOL();\n modelRanges = modelRanges.slice(0);\n modelRanges.sort(Range.compareRangesUsingStarts);\n let hasEmptyRange = false;\n let hasNonEmptyRange = false;\n for (const range of modelRanges) {\n if (range.isEmpty()) {\n hasEmptyRange = true;\n }\n else {\n hasNonEmptyRange = true;\n }\n }\n if (!hasNonEmptyRange) {\n // all ranges are empty\n if (!emptySelectionClipboard) {\n return '';\n }\n const modelLineNumbers = modelRanges.map((r) => r.startLineNumber);\n let result = '';\n for (let i = 0; i < modelLineNumbers.length; i++) {\n if (i > 0 && modelLineNumbers[i - 1] === modelLineNumbers[i]) {\n continue;\n }\n result += this.model.getLineContent(modelLineNumbers[i]) + newLineCharacter;\n }\n return result;\n }\n if (hasEmptyRange && emptySelectionClipboard) {\n // mixed empty selections and non-empty selections\n const result = [];\n let prevModelLineNumber = 0;\n for (const modelRange of modelRanges) {\n const modelLineNumber = modelRange.startLineNumber;\n if (modelRange.isEmpty()) {\n if (modelLineNumber !== prevModelLineNumber) {\n result.push(this.model.getLineContent(modelLineNumber));\n }\n }\n else {\n result.push(this.model.getValueInRange(modelRange, forceCRLF ? 2 /* EndOfLinePreference.CRLF */ : 0 /* EndOfLinePreference.TextDefined */));\n }\n prevModelLineNumber = modelLineNumber;\n }\n return result.length === 1 ? result[0] : result;\n }\n const result = [];\n for (const modelRange of modelRanges) {\n if (!modelRange.isEmpty()) {\n result.push(this.model.getValueInRange(modelRange, forceCRLF ? 2 /* EndOfLinePreference.CRLF */ : 0 /* EndOfLinePreference.TextDefined */));\n }\n }\n return result.length === 1 ? result[0] : result;\n }\n getRichTextToCopy(modelRanges, emptySelectionClipboard) {\n const languageId = this.model.getLanguageId();\n if (languageId === PLAINTEXT_LANGUAGE_ID) {\n return null;\n }\n if (modelRanges.length !== 1) {\n // no multiple selection support at this time\n return null;\n }\n let range = modelRanges[0];\n if (range.isEmpty()) {\n if (!emptySelectionClipboard) {\n // nothing to copy\n return null;\n }\n const lineNumber = range.startLineNumber;\n range = new Range(lineNumber, this.model.getLineMinColumn(lineNumber), lineNumber, this.model.getLineMaxColumn(lineNumber));\n }\n const fontInfo = this._configuration.options.get(50 /* EditorOption.fontInfo */);\n const colorMap = this._getColorMap();\n const hasBadChars = (/[:;\\\\\\/<>]/.test(fontInfo.fontFamily));\n const useDefaultFontFamily = (hasBadChars || fontInfo.fontFamily === EDITOR_FONT_DEFAULTS.fontFamily);\n let fontFamily;\n if (useDefaultFontFamily) {\n fontFamily = EDITOR_FONT_DEFAULTS.fontFamily;\n }\n else {\n fontFamily = fontInfo.fontFamily;\n fontFamily = fontFamily.replace(/\"/g, '\\'');\n const hasQuotesOrIsList = /[,']/.test(fontFamily);\n if (!hasQuotesOrIsList) {\n const needsQuotes = /[+ ]/.test(fontFamily);\n if (needsQuotes) {\n fontFamily = `'${fontFamily}'`;\n }\n }\n fontFamily = `${fontFamily}, ${EDITOR_FONT_DEFAULTS.fontFamily}`;\n }\n return {\n mode: languageId,\n html: (`
`\n + this._getHTMLToCopy(range, colorMap)\n + '
')\n };\n }\n _getHTMLToCopy(modelRange, colorMap) {\n const startLineNumber = modelRange.startLineNumber;\n const startColumn = modelRange.startColumn;\n const endLineNumber = modelRange.endLineNumber;\n const endColumn = modelRange.endColumn;\n const tabSize = this.getTabSize();\n let result = '';\n for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n const lineTokens = this.model.tokenization.getLineTokens(lineNumber);\n const lineContent = lineTokens.getLineContent();\n const startOffset = (lineNumber === startLineNumber ? startColumn - 1 : 0);\n const endOffset = (lineNumber === endLineNumber ? endColumn - 1 : lineContent.length);\n if (lineContent === '') {\n result += '
';\n }\n else {\n result += tokenizeLineToHTML(lineContent, lineTokens.inflate(), colorMap, startOffset, endOffset, tabSize, platform.isWindows);\n }\n }\n return result;\n }\n _getColorMap() {\n const colorMap = TokenizationRegistry.getColorMap();\n const result = ['#000000'];\n if (colorMap) {\n for (let i = 1, len = colorMap.length; i < len; i++) {\n result[i] = Color.Format.CSS.formatHex(colorMap[i]);\n }\n }\n return result;\n }\n //#region cursor operations\n getPrimaryCursorState() {\n return this._cursor.getPrimaryCursorState();\n }\n getLastAddedCursorIndex() {\n return this._cursor.getLastAddedCursorIndex();\n }\n getCursorStates() {\n return this._cursor.getCursorStates();\n }\n setCursorStates(source, reason, states) {\n return this._withViewEventsCollector(eventsCollector => this._cursor.setStates(eventsCollector, source, reason, states));\n }\n getCursorColumnSelectData() {\n return this._cursor.getCursorColumnSelectData();\n }\n getCursorAutoClosedCharacters() {\n return this._cursor.getAutoClosedCharacters();\n }\n setCursorColumnSelectData(columnSelectData) {\n this._cursor.setCursorColumnSelectData(columnSelectData);\n }\n getPrevEditOperationType() {\n return this._cursor.getPrevEditOperationType();\n }\n setPrevEditOperationType(type) {\n this._cursor.setPrevEditOperationType(type);\n }\n getSelection() {\n return this._cursor.getSelection();\n }\n getSelections() {\n return this._cursor.getSelections();\n }\n getPosition() {\n return this._cursor.getPrimaryCursorState().modelState.position;\n }\n setSelections(source, selections, reason = 0 /* CursorChangeReason.NotSet */) {\n this._withViewEventsCollector(eventsCollector => this._cursor.setSelections(eventsCollector, source, selections, reason));\n }\n saveCursorState() {\n return this._cursor.saveState();\n }\n restoreCursorState(states) {\n this._withViewEventsCollector(eventsCollector => this._cursor.restoreState(eventsCollector, states));\n }\n _executeCursorEdit(callback) {\n if (this._cursor.context.cursorConfig.readOnly) {\n // we cannot edit when read only...\n this._eventDispatcher.emitOutgoingEvent(new ReadOnlyEditAttemptEvent());\n return;\n }\n this._withViewEventsCollector(callback);\n }\n executeEdits(source, edits, cursorStateComputer) {\n this._executeCursorEdit(eventsCollector => this._cursor.executeEdits(eventsCollector, source, edits, cursorStateComputer));\n }\n startComposition() {\n this._executeCursorEdit(eventsCollector => this._cursor.startComposition(eventsCollector));\n }\n endComposition(source) {\n this._executeCursorEdit(eventsCollector => this._cursor.endComposition(eventsCollector, source));\n }\n type(text, source) {\n this._executeCursorEdit(eventsCollector => this._cursor.type(eventsCollector, text, source));\n }\n compositionType(text, replacePrevCharCnt, replaceNextCharCnt, positionDelta, source) {\n this._executeCursorEdit(eventsCollector => this._cursor.compositionType(eventsCollector, text, replacePrevCharCnt, replaceNextCharCnt, positionDelta, source));\n }\n paste(text, pasteOnNewLine, multicursorText, source) {\n this._executeCursorEdit(eventsCollector => this._cursor.paste(eventsCollector, text, pasteOnNewLine, multicursorText, source));\n }\n cut(source) {\n this._executeCursorEdit(eventsCollector => this._cursor.cut(eventsCollector, source));\n }\n executeCommand(command, source) {\n this._executeCursorEdit(eventsCollector => this._cursor.executeCommand(eventsCollector, command, source));\n }\n executeCommands(commands, source) {\n this._executeCursorEdit(eventsCollector => this._cursor.executeCommands(eventsCollector, commands, source));\n }\n revealAllCursors(source, revealHorizontal, minimalReveal = false) {\n this._withViewEventsCollector(eventsCollector => this._cursor.revealAll(eventsCollector, source, minimalReveal, 0 /* viewEvents.VerticalRevealType.Simple */, revealHorizontal, 0 /* ScrollType.Smooth */));\n }\n revealPrimaryCursor(source, revealHorizontal, minimalReveal = false) {\n this._withViewEventsCollector(eventsCollector => this._cursor.revealPrimary(eventsCollector, source, minimalReveal, 0 /* viewEvents.VerticalRevealType.Simple */, revealHorizontal, 0 /* ScrollType.Smooth */));\n }\n revealTopMostCursor(source) {\n const viewPosition = this._cursor.getTopMostViewPosition();\n const viewRange = new Range(viewPosition.lineNumber, viewPosition.column, viewPosition.lineNumber, viewPosition.column);\n this._withViewEventsCollector(eventsCollector => eventsCollector.emitViewEvent(new viewEvents.ViewRevealRangeRequestEvent(source, false, viewRange, null, 0 /* viewEvents.VerticalRevealType.Simple */, true, 0 /* ScrollType.Smooth */)));\n }\n revealBottomMostCursor(source) {\n const viewPosition = this._cursor.getBottomMostViewPosition();\n const viewRange = new Range(viewPosition.lineNumber, viewPosition.column, viewPosition.lineNumber, viewPosition.column);\n this._withViewEventsCollector(eventsCollector => eventsCollector.emitViewEvent(new viewEvents.ViewRevealRangeRequestEvent(source, false, viewRange, null, 0 /* viewEvents.VerticalRevealType.Simple */, true, 0 /* ScrollType.Smooth */)));\n }\n revealRange(source, revealHorizontal, viewRange, verticalType, scrollType) {\n this._withViewEventsCollector(eventsCollector => eventsCollector.emitViewEvent(new viewEvents.ViewRevealRangeRequestEvent(source, false, viewRange, null, verticalType, revealHorizontal, scrollType)));\n }\n //#endregion\n //#region viewLayout\n changeWhitespace(callback) {\n const hadAChange = this.viewLayout.changeWhitespace(callback);\n if (hadAChange) {\n this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewZonesChangedEvent());\n this._eventDispatcher.emitOutgoingEvent(new ViewZonesChangedEvent());\n }\n }\n //#endregion\n _withViewEventsCollector(callback) {\n try {\n const eventsCollector = this._eventDispatcher.beginEmitViewEvents();\n return callback(eventsCollector);\n }\n finally {\n this._eventDispatcher.endEmitViewEvents();\n }\n }\n batchEvents(callback) {\n this._withViewEventsCollector(() => { callback(); });\n }\n normalizePosition(position, affinity) {\n return this._lines.normalizePosition(position, affinity);\n }\n /**\n * Gets the column at which indentation stops at a given line.\n * @internal\n */\n getLineIndentColumn(lineNumber) {\n return this._lines.getLineIndentColumn(lineNumber);\n }\n}\nclass ViewportStart {\n static create(model) {\n const viewportStartLineTrackedRange = model._setTrackedRange(null, new Range(1, 1, 1, 1), 1 /* TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges */);\n return new ViewportStart(model, 1, false, viewportStartLineTrackedRange, 0);\n }\n get viewLineNumber() {\n return this._viewLineNumber;\n }\n get isValid() {\n return this._isValid;\n }\n get modelTrackedRange() {\n return this._modelTrackedRange;\n }\n get startLineDelta() {\n return this._startLineDelta;\n }\n constructor(_model, _viewLineNumber, _isValid, _modelTrackedRange, _startLineDelta) {\n this._model = _model;\n this._viewLineNumber = _viewLineNumber;\n this._isValid = _isValid;\n this._modelTrackedRange = _modelTrackedRange;\n this._startLineDelta = _startLineDelta;\n }\n dispose() {\n this._model._setTrackedRange(this._modelTrackedRange, null, 1 /* TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges */);\n }\n update(viewModel, startLineNumber) {\n const position = viewModel.coordinatesConverter.convertViewPositionToModelPosition(new Position(startLineNumber, viewModel.getLineMinColumn(startLineNumber)));\n const viewportStartLineTrackedRange = viewModel.model._setTrackedRange(this._modelTrackedRange, new Range(position.lineNumber, position.column, position.lineNumber, position.column), 1 /* TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges */);\n const viewportStartLineTop = viewModel.viewLayout.getVerticalOffsetForLineNumber(startLineNumber);\n const scrollTop = viewModel.viewLayout.getCurrentScrollTop();\n this._viewLineNumber = startLineNumber;\n this._isValid = true;\n this._modelTrackedRange = viewportStartLineTrackedRange;\n this._startLineDelta = scrollTop - viewportStartLineTop;\n }\n invalidate() {\n this._isValid = false;\n }\n}\nclass OverviewRulerDecorations {\n constructor() {\n this._asMap = Object.create(null);\n this.asArray = [];\n }\n accept(color, zIndex, startLineNumber, endLineNumber, lane) {\n const prevGroup = this._asMap[color];\n if (prevGroup) {\n const prevData = prevGroup.data;\n const prevLane = prevData[prevData.length - 3];\n const prevEndLineNumber = prevData[prevData.length - 1];\n if (prevLane === lane && prevEndLineNumber + 1 >= startLineNumber) {\n // merge into prev\n if (endLineNumber > prevEndLineNumber) {\n prevData[prevData.length - 1] = endLineNumber;\n }\n return;\n }\n // push\n prevData.push(lane, startLineNumber, endLineNumber);\n }\n else {\n const group = new OverviewRulerDecorationsGroup(color, zIndex, [lane, startLineNumber, endLineNumber]);\n this._asMap[color] = group;\n this.asArray.push(group);\n }\n }\n}\nclass HiddenAreasModel {\n constructor() {\n this.hiddenAreas = new Map();\n this.shouldRecompute = false;\n this.ranges = [];\n }\n setHiddenAreas(source, ranges) {\n const existing = this.hiddenAreas.get(source);\n if (existing && rangeArraysEqual(existing, ranges)) {\n return;\n }\n this.hiddenAreas.set(source, ranges);\n this.shouldRecompute = true;\n }\n /**\n * The returned array is immutable.\n */\n getMergedRanges() {\n if (!this.shouldRecompute) {\n return this.ranges;\n }\n this.shouldRecompute = false;\n const newRanges = Array.from(this.hiddenAreas.values()).reduce((r, hiddenAreas) => mergeLineRangeArray(r, hiddenAreas), []);\n if (rangeArraysEqual(this.ranges, newRanges)) {\n return this.ranges;\n }\n this.ranges = newRanges;\n return this.ranges;\n }\n}\nfunction mergeLineRangeArray(arr1, arr2) {\n const result = [];\n let i = 0;\n let j = 0;\n while (i < arr1.length && j < arr2.length) {\n const item1 = arr1[i];\n const item2 = arr2[j];\n if (item1.endLineNumber < item2.startLineNumber - 1) {\n result.push(arr1[i++]);\n }\n else if (item2.endLineNumber < item1.startLineNumber - 1) {\n result.push(arr2[j++]);\n }\n else {\n const startLineNumber = Math.min(item1.startLineNumber, item2.startLineNumber);\n const endLineNumber = Math.max(item1.endLineNumber, item2.endLineNumber);\n result.push(new Range(startLineNumber, 1, endLineNumber, 1));\n i++;\n j++;\n }\n }\n while (i < arr1.length) {\n result.push(arr1[i++]);\n }\n while (j < arr2.length) {\n result.push(arr2[j++]);\n }\n return result;\n}\nfunction rangeArraysEqual(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return false;\n }\n for (let i = 0; i < arr1.length; i++) {\n if (!arr1[i].equalsRange(arr2[i])) {\n return false;\n }\n }\n return true;\n}\n/**\n * Maintain a stable viewport by trying to keep the first line in the viewport constant.\n */\nclass StableViewport {\n constructor(viewportStartModelPosition, startLineDelta) {\n this.viewportStartModelPosition = viewportStartModelPosition;\n this.startLineDelta = startLineDelta;\n }\n recoverViewportStart(coordinatesConverter, viewLayout) {\n if (!this.viewportStartModelPosition) {\n return;\n }\n const viewPosition = coordinatesConverter.convertModelPositionToViewPosition(this.viewportStartModelPosition);\n const viewPositionTop = viewLayout.getVerticalOffsetForLineNumber(viewPosition.lineNumber);\n viewLayout.setScrollPosition({ scrollTop: viewPositionTop + this.startLineDelta }, 1 /* ScrollType.Immediate */);\n }\n}\n"],"names":["Viewport","constructor","top","left","width","height","this","_viewportBrand","undefined","MinimapLinesRenderingData","tabSize","data","ViewLineData","content","continuesWithWrappedLine","minColumn","maxColumn","startVisibleColumn","tokens","inlineDecorations","_viewLineDataBrand","ViewLineRenderingData","mightContainRTL","mightContainNonBasicASCII","isBasicASCII","containsRTL","lineContent","InlineDecoration","range","inlineClassName","type","SingleLineInlineDecoration","startOffset","endOffset","inlineClassNameAffectsLetterSpacing","toInlineDecoration","lineNumber","ViewModelDecoration","options","_viewModelDecorationBrand","OverviewRulerDecorationsGroup","color","zIndex","compareByRenderingProps","a","b","equals","equalsArr","MinimapTokensColorTracker","getInstance","_INSTANCE","super","_onDidChange","onDidChange","event","_updateColorMap","_register","e","changedColorMap","colorMap","_colors","_backgroundIsLight","colorId","length","source","rgba","r","g","Math","round","backgroundLuminosity","getRelativeLuminance","fire","getColor","backgroundIsLight","MonospaceLineBreaksComputerFactory","create","get","breakBeforeChars","breakAfterChars","classifier","WrappingCharacterClassifier","createLineBreaksComputer","fontInfo","wrappingColumn","wrappingIndent","wordBreak","requests","injectedTexts","previousBreakingData","addRequest","lineText","injectedText","previousLineBreakData","push","finalize","columnsForFullWidthChar","typicalFullwidthCharacterWidth","typicalHalfwidthCharacterWidth","result","i","len","injectionOptions","createLineBreaks","createLineBreaksFromPreviousLineBreaks","arrPool1","arrPool2","BREAK_BEFORE","BREAK_AFTER","set","charCodeAt","charCode","_asciiMap","_map","_defaultValue","firstLineBreakColumn","isKeepAll","prevBreakingOffsets","breakOffsets","prevBreakingOffsetsVisibleColumn","breakOffsetsVisibleColumn","wrappedTextIndentLength","computeWrappedTextIndentLength","wrappedLineBreakColumn","breakingOffsets","breakingOffsetsVisibleColumn","breakingOffsetsCount","lastBreakingOffset","lastBreakingOffsetVisibleColumn","breakingColumn","prevLen","prevIndex","bestDistance","abs","distance","prevBreakOffset","prevBreakOffsetVisibleColumn","breakOffset","breakOffsetVisibleColumn","forcedBreakOffset","forcedBreakOffsetVisibleColumn","visibleColumn","prevCharCode","prevCharCodeClass","entireLineFits","charStartOffset","charCodeClass","charWidth","computeCharWidth","canBreak","hitATabCharacter","prevCharWidth","remainingWidthOfNextLine","charCodeAtForcedBreakOffset","_lineText","injectionOffsets","map","t","text","column","tabCharacterWidth","firstNonWhitespaceIndex","numberOfAdditionalTabs","ColorZone","from","to","_colorZoneBrand","compare","OverviewRulerZone","startLineNumber","endLineNumber","heightInLines","_overviewRulerZoneBrand","_colorZone","setColorZone","colorZone","getColorZones","OverviewZoneManager","getVerticalOffsetForLine","_getVerticalOffsetForLine","_zones","_colorZonesInvalid","_lineHeight","_domWidth","_domHeight","_outerHeight","_pixelRatio","_lastAssignedId","_color2Id","Object","_id2Color","getId2Color","setZones","newZones","sort","setLineHeight","lineHeight","setPixelRatio","pixelRatio","getDOMWidth","getCanvasWidth","setDOMWidth","getDOMHeight","getCanvasHeight","setDOMHeight","getOuterHeight","setOuterHeight","outerHeight","resolveColorZones","colorZonesInvalid","floor","totalHeight","heightRatio","halfMinimumHeight","allColorZones","zone","offset1","offset2","y1","y2","ycenter","halfHeight","ViewContext","configuration","theme","model","viewModel","viewLayout","addEventHandler","eventHandler","addViewEventHandler","removeEventHandler","removeViewEventHandler","ViewModelDecorations","editorId","linesCollection","coordinatesConverter","_linesCollection","_coordinatesConverter","_decorationsCache","_cachedModelDecorationsResolver","_cachedModelDecorationsResolverViewRange","_clearCachedModelDecorationsResolver","dispose","reset","onModelDecorationsChanged","onLineMappingChanged","_getOrCreateViewModelDecoration","modelDecoration","id","modelRange","viewRange","isWholeLine","start","convertModelPositionToViewPosition","end","getLineMaxColumn","convertModelRangeToViewRange","getMinimapDecorationsInRange","_getDecorationsInRange","decorations","getDecorationsViewportData","cacheIsValid","equalsRange","getInlineDecorationsOnLine","onlyMinimapDecorations","onlyMarginDecorations","getViewLineMinColumn","getViewLineMaxColumn","modelDecorations","getDecorationsInRange","decorationsInViewport","decorationsInViewportLen","j","decorationOptions","isModelDecorationVisible","viewModelDecoration","inlineDecoration","intersectedStartLineNumber","max","intersectedEndLineNumber","min","beforeContentClassName","startColumn","afterContentClassName","endColumn","decoration","hideInCommentTokens","isModelDecorationInComment","hideInStringTokens","isModelDecorationInString","testTokensInRange","tokenType","callback","lineTokens","tokenization","getLineTokens","isFirstLine","isEndLine","tokenIdx","findTokenIndexAtOffset","getCount","getStartOffset","getStandardTokenType","createModelLineProjection","lineBreakData","isVisible","IdentityModelLineProjection","INSTANCE","HiddenModelLineProjection","ModelLineProjection","_projectionData","_isVisible","setVisible","getProjectionData","getViewLineCount","getOutputLineCount","getViewLineContent","modelLineNumber","outputLineIndex","_assertVisible","startOffsetInInputWithInjections","endOffsetInInputWithInjections","offset","idx","getLineContent","substring","getValueInRange","spaces","getViewLineLength","getLineLength","_model","_modelLineNumber","getMinOutputOffset","getMaxOutputOffset","getViewLineData","arr","Array","getViewLinesData","outputLineIdx","lineCount","globalStartIndex","needed","lineWithInjections","inlineDecorationsPerOutputLine","totalInjectedTextLengthBefore","currentInjectedOffset","lineStartOffsetInInputWithInjections","lineEndOffsetInInputWithInjections","injectedTextStartOffsetInInputWithInjections","injectedTextEndOffsetInInputWithInjections","withInserted","tokenMetadata","globalIndex","_getViewLineData","deltaStartIndex","sliceAndInflate","getModelColumnOfViewPosition","outputColumn","translateToInputOffset","getViewPositionOfModelPosition","deltaLineNumber","inputColumn","affinity","translateToOutputPosition","toPosition","getViewLineNumberOfModelPosition","normalizePosition","outputPosition","baseViewLineNumber","normalizeOutputPosition","getInjectedTextAt","getInjectedText","Error","_outputLineIndex","getLineMinColumn","inflate","_fromOuputLineIndex","_toOutputLineIndex","_inputColumn","_outputColumn","_globalStartIndex","_needed","_result","_deltaLineNumber","_spaces","count","_makeSpaces","join","ViewModelLinesFromProjectedModel","domLineBreaksComputerFactory","monospaceLineBreaksComputerFactory","wrappingStrategy","_editorId","_validModelVersionId","_domLineBreaksComputerFactory","_monospaceLineBreaksComputerFactory","_constructLines","hiddenAreasDecorationIds","deltaDecorations","createCoordinatesConverter","CoordinatesConverter","resetHiddenAreas","previousLineBreaks","modelLineProjections","linesContent","getLinesContent","injectedTextDecorations","getInjectedTextDecorations","lineBreaksComputer","injectedTextQueue","arrays","lineInjectedText","takeWhile","linesBreaks","values","hiddenAreas","areaId","getDecorationRange","hiddenAreaStart","hiddenAreaEnd","hiddenAreaIdx","nextLineNumberToUpdateHiddenArea","isInHiddenArea","line","getVersionId","projectedModelLineLineCounts","getHiddenAreas","decId","setHiddenAreas","_ranges","newRanges","ranges","sortedRanges","slice","currentRangeStart","currentRangeEnd","normalizeLineRanges","validateRange","oldRanges","hasDifference","newDecorations","hasVisibleLine","lineChanged","newOutputLineCount","setValue","modelPositionIsVisible","_modelColumn","getModelLineViewLineCount","setTabSize","newTabSize","setWrappingSettings","equalFontInfo","equalWrappingStrategy","equalWrappingColumn","equalWrappingIndent","equalWordBreak","onlyWrappingColumnChanged","onModelFlushed","onModelLinesDeleted","versionId","fromLineNumber","toLineNumber","outputFromLineNumber","getPrefixSum","outputToLineNumber","splice","removeValues","viewEvents","onModelLinesInserted","_toLineNumber","lineBreaks","totalOutputLineCount","insertLines","insertPrefixSumValues","outputLineCount","concat","insertValues","onModelLineChanged","lineIndex","oldOutputLineCount","lineMappingChanged","changeFrom","changeTo","insertFrom","insertTo","deleteFrom","deleteTo","acceptVersionId","getTotalSum","_toValidViewLineNumber","viewLineNumber","viewLineCount","getActiveIndentGuide","minLineNumber","maxLineNumber","modelPosition","convertViewPositionToModelPosition","modelMinPosition","modelMaxPosition","guides","viewStartPosition","viewEndPosition","indent","getViewLineInfo","getIndexOf","index","remainder","ViewLineInfo","getMinColumnOfViewLine","viewLineInfo","modelLineWrappedLineIdx","getMaxColumnOfViewLine","getModelStartPositionOfViewLine","minViewColumn","getModelEndPositionOfViewLine","maxViewColumn","getViewLineInfosGroupedByModelRanges","viewStartLineNumber","viewEndLineNumber","startViewLine","endViewLine","lastVisibleModelPos","viewLines","curModelLine","lastVisibleModelPos2","ViewLineInfoGroupedByModelRange","getViewLinesBracketGuides","activeViewPosition","modelActivePosition","resultPerViewLine","group","modelRangeStartLineNumber","bracketGuidesPerModelLine","getLinesBracketGuides","forWrappedLinesAfterColumn","forWrappedLinesBeforeOrAtColumn","horizontalLine","p","viewPosition","className","filter","getViewLinesIndentGuides","modelStart","modelEnd","resultRepeatCount","resultRepeatOption","modelStartLineIndex","modelEndLineIndex","reqStart","modelLineIndex","viewLineStartIndex","viewLineEndIndex","option","getLinesIndentGuides","viewIndents","currIndex","value","blockAtIndex","info","startModelLineIndex","startRemainder","getLineCount","fromViewLineIndex","remainingViewLineCount","lastLine","validateViewPosition","viewColumn","expectedModelPosition","computedModelColumn","validatePosition","validateViewRange","expectedModelRange","validViewStart","getStartPosition","validViewEnd","getEndPosition","convertViewRangeToModelRange","allowZeroLineNumber","belowHiddenRanges","validPosition","inputLineNumber","lineIndexChanged","isEmpty","modelColumn","ownerId","filterOutValidation","maxLineColumn","res","finalResult","finalResultLen","prevDecId","dec","position","getLineIndentColumn","lines","_lines","allowZero","ViewModelLinesFromModelAsIs","IdentityCoordinatesConverter","_newTabSize","_fontInfo","_wrappingStrategy","_wrappingColumn","_wrappingIndent","_versionId","_minLineNumber","_maxLineNumber","activePosition","fill","_validPosition","pos","_validRange","_viewPosition","_viewRange","ViewModel","scheduleAtNextAnimationFrame","languageConfigurationService","_themeService","_attachedView","hiddenAreasModel","HiddenAreasModel","previousHiddenAreas","_configuration","_eventDispatcher","onEvent","cursorConfig","getLanguageId","getOptions","_updateConfigurationViewLineCount","_updateConfigurationViewLineCountNow","_hasFocus","_viewportStart","ViewportStart","glyphLanes","isTooLargeForTokenization","wrappingInfo","_cursor","onDidScroll","scrollTopChanged","_handleVisibleLinesChanged","invalidate","emitSingleViewEvent","emitOutgoingEvent","oldScrollWidth","oldScrollLeft","oldScrollHeight","oldScrollTop","scrollWidth","scrollLeft","scrollHeight","scrollTop","onDidContentSizeChange","_decorations","_registerModelEvents","onDidChangeFast","eventsCollector","beginEmitViewEvents","_onConfigurationChanged","endEmitViewEvents","onDidColorThemeChange","_invalidateDecorationsColorCache","setViewLineCount","getModelVisibleRanges","linesViewportData","getLinesViewportData","viewVisibleRange","_toModelVisibleRanges","visibleLinesStabilized","modelVisibleRanges","setVisibleLines","setHasFocus","hasFocus","onCompositionStart","onCompositionEnd","_captureStableViewport","isValid","getCurrentScrollTop","previousViewportStartViewPosition","previousViewportStartModelPosition","StableViewport","startLineDelta","stableViewport","emitViewEvent","onFlushed","schedule","hasChanged","onConfigurationChanged","recoverViewportStart","updateConfiguration","onDidChangeContentOrInjectedText","hadOtherModelChange","hadModelLineChangeThatChangedLineMapping","changes","textModelEvents","rawContentChangedEvent","change","changeType","lineIdx","detail","element","lineBreakQueue","linesDeletedEvent","onLinesDeleted","insertedLineBreaks","takeCount","linesInsertedEvent","onLinesInserted","changedLineBreakData","dequeue","linesChangedEvent","onHeightMaybeChanged","viewportStartWasValid","setModelLineCount","getAttachedEditorCount","_getTrackedRange","modelTrackedRange","viewPositionTop","getVerticalOffsetForLineNumber","setScrollPosition","contentChangedEvent","onModelContentChanged","onDidChangeTokens","viewRanges","lenJ","onDidChangeLanguageConfiguration","onDidChangeLanguage","onDidChangeOptions","onDidChangeDecorations","_a","mergedRanges","getMergedRanges","firstModelLineInViewPort","viewportStartModelPosition","some","getVisibleRangesPlusViewportAboveBelow","layoutInfo","linesAround","partialData","startViewLineNumber","completelyVisibleStartLineNumber","endViewLineNumber","completelyVisibleEndLineNumber","getVisibleRanges","visibleViewRange","getCompletelyVisibleViewRange","visibleRange","resultLen","hiddenStartLineNumber","hiddenEndLineNumber","getCompletelyVisibleViewRangeAtScrollTop","getLinesViewportDataAtScrollTop","saveState","compatViewState","firstViewLineNumber","getLineNumberAtVerticalOffset","firstPosition","firstPositionDeltaTop","reduceRestoreState","state","_reduceRestoreStateCompatibility","scrollTopWithoutViewZones","getTabSize","setViewport","centeredLineNumber","update","getBracketGuidesInRangeByLine","getLineFirstNonWhitespaceColumn","strings","getLineLastNonWhitespaceColumn","getDecorationsInViewport","getViewportViewLineRenderingData","_getViewLineRenderingData","getViewLineRenderingData","lineData","d","getMinimapLinesRenderingData","getAllOverviewRulerDecorations","getOverviewRulerDecorations","OverviewRulerDecorations","opts","overviewRuler","lane","accept","asArray","opts1","invalidateCachedColor","opts2","minimap","eol","getValueLengthInRange","modifyPosition","resultModelPosition","deduceModelPositionRelativeToViewPosition","viewAnchorPosition","deltaOffset","lineFeedCnt","modelAnchor","getEOL","resultOffset","getOffsetAt","getPositionAt","getPlainTextToCopy","modelRanges","emptySelectionClipboard","forceCRLF","newLineCharacter","hasEmptyRange","hasNonEmptyRange","modelLineNumbers","prevModelLineNumber","getRichTextToCopy","languageId","_getColorMap","fontFamily","test","replace","mode","html","fontWeight","fontSize","_getHTMLToCopy","platform","getPrimaryCursorState","getLastAddedCursorIndex","getCursorStates","setCursorStates","reason","states","_withViewEventsCollector","setStates","getCursorColumnSelectData","getCursorAutoClosedCharacters","getAutoClosedCharacters","setCursorColumnSelectData","columnSelectData","getPrevEditOperationType","setPrevEditOperationType","getSelection","getSelections","getPosition","modelState","setSelections","selections","saveCursorState","restoreCursorState","restoreState","_executeCursorEdit","context","readOnly","executeEdits","edits","cursorStateComputer","startComposition","endComposition","compositionType","replacePrevCharCnt","replaceNextCharCnt","positionDelta","paste","pasteOnNewLine","multicursorText","cut","executeCommand","command","executeCommands","commands","revealAllCursors","revealHorizontal","minimalReveal","revealAll","revealPrimaryCursor","revealPrimary","revealTopMostCursor","getTopMostViewPosition","revealBottomMostCursor","getBottomMostViewPosition","revealRange","verticalType","scrollType","changeWhitespace","batchEvents","viewportStartLineTrackedRange","_setTrackedRange","_viewLineNumber","_isValid","_modelTrackedRange","_startLineDelta","viewportStartLineTop","_asMap","prevGroup","prevData","prevLane","prevEndLineNumber","Map","shouldRecompute","existing","rangeArraysEqual","reduce","arr1","arr2","item1","item2","mergeLineRangeArray"],"sourceRoot":""}