monaco-editor11 1.0.9 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/monaco-editor11.es.js +12 -16
  3. package/dist/monaco-editor11.umd.js +1 -1
  4. package/package.json +2 -2
  5. package/dist/monaco.d.ts +0 -8
  6. package/dist/workers/common/initialize.js +0 -16
  7. package/dist/workers/common/workers.js +0 -141
  8. package/dist/workers/editor/common/abstractSyntaxTokenBackend.js +0 -128
  9. package/dist/workers/editor/common/abstractText.js +0 -89
  10. package/dist/workers/editor/common/ast.js +0 -485
  11. package/dist/workers/editor/common/autoIndent.js +0 -390
  12. package/dist/workers/editor/common/beforeEditPositionMapper.js +0 -110
  13. package/dist/workers/editor/common/bracketPairsImpl.js +0 -717
  14. package/dist/workers/editor/common/bracketPairsTree.js +0 -343
  15. package/dist/workers/editor/common/brackets.js +0 -108
  16. package/dist/workers/editor/common/characterClassifier.js +0 -59
  17. package/dist/workers/editor/common/characterPair.js +0 -40
  18. package/dist/workers/editor/common/colorizedBracketPairsDecorationProvider.js +0 -97
  19. package/dist/workers/editor/common/columnRange.js +0 -35
  20. package/dist/workers/editor/common/combineTextEditInfos.js +0 -124
  21. package/dist/workers/editor/common/common.js +0 -20
  22. package/dist/workers/editor/common/computeMovedLines.js +0 -249
  23. package/dist/workers/editor/common/concat23Trees.js +0 -192
  24. package/dist/workers/editor/common/contiguousMultilineTokens.js +0 -32
  25. package/dist/workers/editor/common/contiguousMultilineTokensBuilder.js +0 -23
  26. package/dist/workers/editor/common/contiguousTokensEditing.js +0 -128
  27. package/dist/workers/editor/common/contiguousTokensStore.js +0 -207
  28. package/dist/workers/editor/common/coordinatesConverter.js +0 -51
  29. package/dist/workers/editor/common/cursor.js +0 -899
  30. package/dist/workers/editor/common/cursorAtomicMoveOperations.js +0 -145
  31. package/dist/workers/editor/common/cursorCollection.js +0 -194
  32. package/dist/workers/editor/common/cursorColumnSelection.js +0 -93
  33. package/dist/workers/editor/common/cursorColumns.js +0 -112
  34. package/dist/workers/editor/common/cursorCommon.js +0 -250
  35. package/dist/workers/editor/common/cursorContext.js +0 -15
  36. package/dist/workers/editor/common/cursorDeleteOperations.js +0 -231
  37. package/dist/workers/editor/common/cursorMoveCommands.js +0 -676
  38. package/dist/workers/editor/common/cursorMoveOperations.js +0 -290
  39. package/dist/workers/editor/common/cursorTypeEditOperations.js +0 -968
  40. package/dist/workers/editor/common/cursorTypeOperations.js +0 -173
  41. package/dist/workers/editor/common/cursorUtils.js +0 -75
  42. package/dist/workers/editor/common/cursorWordOperations.js +0 -720
  43. package/dist/workers/editor/common/defaultDocumentColorsComputer.js +0 -138
  44. package/dist/workers/editor/common/defaultLinesDiffComputer.js +0 -188
  45. package/dist/workers/editor/common/diffAlgorithm.js +0 -139
  46. package/dist/workers/editor/common/diffEditor.js +0 -38
  47. package/dist/workers/editor/common/dynamicProgrammingDiffing.js +0 -101
  48. package/dist/workers/editor/common/edit.js +0 -183
  49. package/dist/workers/editor/common/editOperation.js +0 -36
  50. package/dist/workers/editor/common/editStack.js +0 -363
  51. package/dist/workers/editor/common/editorAction.js +0 -26
  52. package/dist/workers/editor/common/editorBaseApi.js +0 -43
  53. package/dist/workers/editor/common/editorColorRegistry.js +0 -102
  54. package/dist/workers/editor/common/editorCommon.js +0 -13
  55. package/dist/workers/editor/common/editorConfigurationSchema.js +0 -338
  56. package/dist/workers/editor/common/editorContextKeys.js +0 -84
  57. package/dist/workers/editor/common/editorFeatures.js +0 -17
  58. package/dist/workers/editor/common/editorOptions.js +0 -3440
  59. package/dist/workers/editor/common/editorTheme.js +0 -23
  60. package/dist/workers/editor/common/editorWebWorker.js +0 -299
  61. package/dist/workers/editor/common/editorWorker.js +0 -9
  62. package/dist/workers/editor/common/editorWorkerHost.js +0 -15
  63. package/dist/workers/editor/common/editorZoom.js +0 -26
  64. package/dist/workers/editor/common/electricCharacter.js +0 -55
  65. package/dist/workers/editor/common/encodedTokenAttributes.js +0 -79
  66. package/dist/workers/editor/common/enterAction.js +0 -53
  67. package/dist/workers/editor/common/eolCounter.js +0 -44
  68. package/dist/workers/editor/common/findSectionHeaders.js +0 -128
  69. package/dist/workers/editor/common/fixBrackets.js +0 -67
  70. package/dist/workers/editor/common/fixedArray.js +0 -70
  71. package/dist/workers/editor/common/fontInfo.js +0 -172
  72. package/dist/workers/editor/common/fontInfoFromSettings.js +0 -29
  73. package/dist/workers/editor/common/getIconClasses.js +0 -106
  74. package/dist/workers/editor/common/getPositionOffsetTransformerFromTextModel.js +0 -24
  75. package/dist/workers/editor/common/glyphLanesModel.js +0 -61
  76. package/dist/workers/editor/common/guidesTextModelPart.js +0 -405
  77. package/dist/workers/editor/common/heuristicSequenceOptimizations.js +0 -374
  78. package/dist/workers/editor/common/indentRules.js +0 -63
  79. package/dist/workers/editor/common/indentation.js +0 -39
  80. package/dist/workers/editor/common/indentationGuesser.js +0 -178
  81. package/dist/workers/editor/common/indentationLineProcessor.js +0 -193
  82. package/dist/workers/editor/common/inlineDecorations.js +0 -26
  83. package/dist/workers/editor/common/inplaceReplaceSupport.js +0 -87
  84. package/dist/workers/editor/common/inputMode.js +0 -22
  85. package/dist/workers/editor/common/intervalTree.js +0 -1002
  86. package/dist/workers/editor/common/language.js +0 -9
  87. package/dist/workers/editor/common/languageBracketsConfiguration.js +0 -133
  88. package/dist/workers/editor/common/languageConfiguration.js +0 -138
  89. package/dist/workers/editor/common/languageConfigurationRegistry.js +0 -361
  90. package/dist/workers/editor/common/languageFeatureDebounce.js +0 -137
  91. package/dist/workers/editor/common/languageFeatureRegistry.js +0 -180
  92. package/dist/workers/editor/common/languageFeatures.js +0 -9
  93. package/dist/workers/editor/common/languageFeaturesService.js +0 -47
  94. package/dist/workers/editor/common/languageSelector.js +0 -112
  95. package/dist/workers/editor/common/languageService.js +0 -92
  96. package/dist/workers/editor/common/languages.js +0 -522
  97. package/dist/workers/editor/common/languagesAssociations.js +0 -193
  98. package/dist/workers/editor/common/languagesRegistry.js +0 -237
  99. package/dist/workers/editor/common/legacyLinesDiffComputer.js +0 -468
  100. package/dist/workers/editor/common/length.js +0 -129
  101. package/dist/workers/editor/common/lineDecorations.js +0 -208
  102. package/dist/workers/editor/common/lineEdit.js +0 -75
  103. package/dist/workers/editor/common/lineHeights.js +0 -370
  104. package/dist/workers/editor/common/linePart.js +0 -25
  105. package/dist/workers/editor/common/lineRange.js +0 -312
  106. package/dist/workers/editor/common/lineSequence.js +0 -36
  107. package/dist/workers/editor/common/lineTokens.js +0 -405
  108. package/dist/workers/editor/common/linesDiffComputer.js +0 -29
  109. package/dist/workers/editor/common/linesDiffComputers.js +0 -13
  110. package/dist/workers/editor/common/linesLayout.js +0 -765
  111. package/dist/workers/editor/common/linesSliceCharSequence.js +0 -205
  112. package/dist/workers/editor/common/linkComputer.js +0 -269
  113. package/dist/workers/editor/common/markerDecorations.js +0 -9
  114. package/dist/workers/editor/common/markerDecorationsService.js +0 -248
  115. package/dist/workers/editor/common/minimapTokensColorTracker.js +0 -58
  116. package/dist/workers/editor/common/mirrorTextModel.js +0 -117
  117. package/dist/workers/editor/common/model.js +0 -9
  118. package/dist/workers/editor/common/modelLineProjection.js +0 -350
  119. package/dist/workers/editor/common/modelLineProjectionData.js +0 -297
  120. package/dist/workers/editor/common/modelService.js +0 -413
  121. package/dist/workers/editor/common/modesRegistry.js +0 -75
  122. package/dist/workers/editor/common/monospaceLineBreaksComputer.js +0 -473
  123. package/dist/workers/editor/common/myersDiffAlgorithm.js +0 -159
  124. package/dist/workers/editor/common/nodeReader.js +0 -127
  125. package/dist/workers/editor/common/nullTokenize.js +0 -29
  126. package/dist/workers/editor/common/offsetRange.js +0 -225
  127. package/dist/workers/editor/common/onEnter.js +0 -109
  128. package/dist/workers/editor/common/oneCursor.js +0 -117
  129. package/dist/workers/editor/common/overviewZoneManager.js +0 -176
  130. package/dist/workers/editor/common/parser.js +0 -121
  131. package/dist/workers/editor/common/pieceTreeBase.js +0 -1473
  132. package/dist/workers/editor/common/pieceTreeTextBuffer.js +0 -461
  133. package/dist/workers/editor/common/pieceTreeTextBufferBuilder.js +0 -140
  134. package/dist/workers/editor/common/point.js +0 -50
  135. package/dist/workers/editor/common/position.js +0 -142
  136. package/dist/workers/editor/common/positionToOffset.js +0 -17
  137. package/dist/workers/editor/common/positionToOffsetImpl.js +0 -98
  138. package/dist/workers/editor/common/prefixSumComputer.js +0 -226
  139. package/dist/workers/editor/common/range.js +0 -421
  140. package/dist/workers/editor/common/rangeMapping.js +0 -229
  141. package/dist/workers/editor/common/rangeSingleLine.js +0 -17
  142. package/dist/workers/editor/common/rbTreeBase.js +0 -362
  143. package/dist/workers/editor/common/rect.js +0 -163
  144. package/dist/workers/editor/common/replaceCommand.js +0 -158
  145. package/dist/workers/editor/common/resolverService.js +0 -5
  146. package/dist/workers/editor/common/rgba.js +0 -35
  147. package/dist/workers/editor/common/richEditBrackets.js +0 -356
  148. package/dist/workers/editor/common/selection.js +0 -145
  149. package/dist/workers/editor/common/semanticTokensDto.js +0 -82
  150. package/dist/workers/editor/common/semanticTokensProviderStyling.js +0 -263
  151. package/dist/workers/editor/common/semanticTokensStyling.js +0 -9
  152. package/dist/workers/editor/common/semanticTokensStylingService.js +0 -47
  153. package/dist/workers/editor/common/shiftCommand.js +0 -241
  154. package/dist/workers/editor/common/smallImmutableSet.js +0 -108
  155. package/dist/workers/editor/common/sparseMultilineTokens.js +0 -548
  156. package/dist/workers/editor/common/sparseTokensStore.js +0 -210
  157. package/dist/workers/editor/common/standaloneEnums.js +0 -1017
  158. package/dist/workers/editor/common/standaloneStrings.js +0 -42
  159. package/dist/workers/editor/common/stringBuilder.js +0 -122
  160. package/dist/workers/editor/common/stringEdit.js +0 -165
  161. package/dist/workers/editor/common/supports.js +0 -58
  162. package/dist/workers/editor/common/surroundSelectionCommand.js +0 -44
  163. package/dist/workers/editor/common/textChange.js +0 -248
  164. package/dist/workers/editor/common/textEdit.js +0 -269
  165. package/dist/workers/editor/common/textLength.js +0 -87
  166. package/dist/workers/editor/common/textModel.js +0 -2031
  167. package/dist/workers/editor/common/textModelBracketPairs.js +0 -45
  168. package/dist/workers/editor/common/textModelDefaults.js +0 -18
  169. package/dist/workers/editor/common/textModelEditSource.js +0 -166
  170. package/dist/workers/editor/common/textModelEvents.js +0 -216
  171. package/dist/workers/editor/common/textModelGuides.js +0 -40
  172. package/dist/workers/editor/common/textModelPart.js +0 -23
  173. package/dist/workers/editor/common/textModelSearch.js +0 -455
  174. package/dist/workers/editor/common/textModelStringEdit.js +0 -11
  175. package/dist/workers/editor/common/textModelSync.impl.js +0 -307
  176. package/dist/workers/editor/common/textModelText.js +0 -26
  177. package/dist/workers/editor/common/textModelTokens.js +0 -436
  178. package/dist/workers/editor/common/textResourceConfiguration.js +0 -6
  179. package/dist/workers/editor/common/textToHtmlTokenizer.js +0 -139
  180. package/dist/workers/editor/common/tokenStore.js +0 -407
  181. package/dist/workers/editor/common/tokenWithTextArray.js +0 -73
  182. package/dist/workers/editor/common/tokenization.js +0 -287
  183. package/dist/workers/editor/common/tokenizationRegistry.js +0 -123
  184. package/dist/workers/editor/common/tokenizationTextModelPart.js +0 -275
  185. package/dist/workers/editor/common/tokenizer.js +0 -301
  186. package/dist/workers/editor/common/tokenizerSyntaxTokenBackend.js +0 -261
  187. package/dist/workers/editor/common/treeSitterLibraryService.js +0 -9
  188. package/dist/workers/editor/common/treeSitterSyntaxTokenBackend.js +0 -167
  189. package/dist/workers/editor/common/treeSitterThemeService.js +0 -9
  190. package/dist/workers/editor/common/treeSitterTokenizationImpl.js +0 -713
  191. package/dist/workers/editor/common/treeSitterTree.js +0 -395
  192. package/dist/workers/editor/common/treeViewsDnd.js +0 -24
  193. package/dist/workers/editor/common/treeViewsDndService.js +0 -12
  194. package/dist/workers/editor/common/trimTrailingWhitespaceCommand.js +0 -98
  195. package/dist/workers/editor/common/unicodeTextModelHighlighter.js +0 -188
  196. package/dist/workers/editor/common/utils.js +0 -62
  197. package/dist/workers/editor/common/viewContext.js +0 -22
  198. package/dist/workers/editor/common/viewEventHandler.js +0 -186
  199. package/dist/workers/editor/common/viewEvents.js +0 -180
  200. package/dist/workers/editor/common/viewLayout.js +0 -368
  201. package/dist/workers/editor/common/viewLineRenderer.js +0 -948
  202. package/dist/workers/editor/common/viewLinesViewportData.js +0 -30
  203. package/dist/workers/editor/common/viewModel.js +0 -98
  204. package/dist/workers/editor/common/viewModelDecoration.js +0 -55
  205. package/dist/workers/editor/common/viewModelDecorations.js +0 -132
  206. package/dist/workers/editor/common/viewModelEventDispatcher.js +0 -398
  207. package/dist/workers/editor/common/viewModelImpl.js +0 -1163
  208. package/dist/workers/editor/common/viewModelLines.js +0 -938
  209. package/dist/workers/editor/common/wordCharacterClassifier.js +0 -87
  210. package/dist/workers/editor/common/wordHelper.js +0 -127
  211. package/dist/workers/language/cssMode.js +0 -198
  212. package/dist/workers/language/cssWorker.js +0 -183
  213. package/dist/workers/language/htmlMode.js +0 -213
  214. package/dist/workers/language/htmlWorker.js +0 -126
  215. package/dist/workers/language/jsonMode.js +0 -224
  216. package/dist/workers/language/jsonWorker.js +0 -187
  217. package/dist/workers/language/languageFeatures.js +0 -1009
  218. package/dist/workers/language/lib.index.js +0 -103
  219. package/dist/workers/language/lib.js +0 -1107
  220. package/dist/workers/language/lspLanguageFeatures.js +0 -716
  221. package/dist/workers/language/monaco.contribution.js +0 -144
  222. package/dist/workers/language/tokenization.js +0 -189
  223. package/dist/workers/language/tsMode.js +0 -212
  224. package/dist/workers/language/tsWorker.js +0 -352
  225. package/dist/workers/language/typescriptServices.js +0 -210154
  226. package/dist/workers/language/typescriptServicesMetadata.js +0 -3
  227. package/dist/workers/language/workerManager.js +0 -65
  228. /package/dist/workers/{language/css.worker.js → css.worker.js} +0 -0
  229. /package/dist/workers/{editor/editor.worker.js → editor.worker.js} +0 -0
  230. /package/dist/workers/{language/html.worker.js → html.worker.js} +0 -0
  231. /package/dist/workers/{language/json.worker.js → json.worker.js} +0 -0
  232. /package/dist/workers/{language/ts.worker.js → ts.worker.js} +0 -0
@@ -1,938 +0,0 @@
1
- import { ArrayQueue } from '../../../base/common/arrays.js';
2
- import { Position } from '../core/position.js';
3
- import { Range } from '../core/range.js';
4
- import { IndentGuide, IndentGuideHorizontalLine } from '../textModelGuides.js';
5
- import { ModelDecorationOptions } from '../model/textModel.js';
6
- import { LineInjectedText } from '../textModelEvents.js';
7
- import { ViewLinesDeletedEvent, ViewLinesInsertedEvent, ViewLinesChangedEvent } from '../viewEvents.js';
8
- import { createModelLineProjection } from './modelLineProjection.js';
9
- import { ConstantTimePrefixSumComputer } from '../model/prefixSumComputer.js';
10
- import { ViewLineData } from '../viewModel.js';
11
- import { IdentityCoordinatesConverter } from '../coordinatesConverter.js';
12
-
13
- /*---------------------------------------------------------------------------------------------
14
- * Copyright (c) Microsoft Corporation. All rights reserved.
15
- * Licensed under the MIT License. See License.txt in the project root for license information.
16
- *--------------------------------------------------------------------------------------------*/
17
- class ViewModelLinesFromProjectedModel {
18
- constructor(editorId, model, domLineBreaksComputerFactory, monospaceLineBreaksComputerFactory, fontInfo, tabSize, wrappingStrategy, wrappingColumn, wrappingIndent, wordBreak, wrapOnEscapedLineFeeds) {
19
- this._editorId = editorId;
20
- this.model = model;
21
- this._validModelVersionId = -1;
22
- this._domLineBreaksComputerFactory = domLineBreaksComputerFactory;
23
- this._monospaceLineBreaksComputerFactory = monospaceLineBreaksComputerFactory;
24
- this.fontInfo = fontInfo;
25
- this.tabSize = tabSize;
26
- this.wrappingStrategy = wrappingStrategy;
27
- this.wrappingColumn = wrappingColumn;
28
- this.wrappingIndent = wrappingIndent;
29
- this.wordBreak = wordBreak;
30
- this.wrapOnEscapedLineFeeds = wrapOnEscapedLineFeeds;
31
- this._constructLines(/*resetHiddenAreas*/ true, null);
32
- }
33
- dispose() {
34
- this.hiddenAreasDecorationIds = this.model.deltaDecorations(this.hiddenAreasDecorationIds, []);
35
- }
36
- createCoordinatesConverter() {
37
- return new CoordinatesConverter(this);
38
- }
39
- _constructLines(resetHiddenAreas, previousLineBreaks) {
40
- this.modelLineProjections = [];
41
- if (resetHiddenAreas) {
42
- this.hiddenAreasDecorationIds = this.model.deltaDecorations(this.hiddenAreasDecorationIds, []);
43
- }
44
- const linesContent = this.model.getLinesContent();
45
- const injectedTextDecorations = this.model.getInjectedTextDecorations(this._editorId);
46
- const lineCount = linesContent.length;
47
- const lineBreaksComputer = this.createLineBreaksComputer();
48
- const injectedTextQueue = new ArrayQueue(LineInjectedText.fromDecorations(injectedTextDecorations));
49
- for (let i = 0; i < lineCount; i++) {
50
- const lineInjectedText = injectedTextQueue.takeWhile(t => t.lineNumber === i + 1);
51
- lineBreaksComputer.addRequest(linesContent[i], lineInjectedText, previousLineBreaks ? previousLineBreaks[i] : null);
52
- }
53
- const linesBreaks = lineBreaksComputer.finalize();
54
- const values = [];
55
- const hiddenAreas = this.hiddenAreasDecorationIds.map((areaId) => this.model.getDecorationRange(areaId)).sort(Range.compareRangesUsingStarts);
56
- let hiddenAreaStart = 1, hiddenAreaEnd = 0;
57
- let hiddenAreaIdx = -1;
58
- let nextLineNumberToUpdateHiddenArea = (hiddenAreaIdx + 1 < hiddenAreas.length) ? hiddenAreaEnd + 1 : lineCount + 2;
59
- for (let i = 0; i < lineCount; i++) {
60
- const lineNumber = i + 1;
61
- if (lineNumber === nextLineNumberToUpdateHiddenArea) {
62
- hiddenAreaIdx++;
63
- hiddenAreaStart = hiddenAreas[hiddenAreaIdx].startLineNumber;
64
- hiddenAreaEnd = hiddenAreas[hiddenAreaIdx].endLineNumber;
65
- nextLineNumberToUpdateHiddenArea = (hiddenAreaIdx + 1 < hiddenAreas.length) ? hiddenAreaEnd + 1 : lineCount + 2;
66
- }
67
- const isInHiddenArea = (lineNumber >= hiddenAreaStart && lineNumber <= hiddenAreaEnd);
68
- const line = createModelLineProjection(linesBreaks[i], !isInHiddenArea);
69
- values[i] = line.getViewLineCount();
70
- this.modelLineProjections[i] = line;
71
- }
72
- this._validModelVersionId = this.model.getVersionId();
73
- this.projectedModelLineLineCounts = new ConstantTimePrefixSumComputer(values);
74
- }
75
- getHiddenAreas() {
76
- return this.hiddenAreasDecorationIds.map((decId) => this.model.getDecorationRange(decId));
77
- }
78
- setHiddenAreas(_ranges) {
79
- const validatedRanges = _ranges.map(r => this.model.validateRange(r));
80
- const newRanges = normalizeLineRanges(validatedRanges);
81
- // TODO@Martin: Please stop calling this method on each model change!
82
- // This checks if there really was a change
83
- const oldRanges = this.hiddenAreasDecorationIds.map((areaId) => this.model.getDecorationRange(areaId)).sort(Range.compareRangesUsingStarts);
84
- if (newRanges.length === oldRanges.length) {
85
- let hasDifference = false;
86
- for (let i = 0; i < newRanges.length; i++) {
87
- if (!newRanges[i].equalsRange(oldRanges[i])) {
88
- hasDifference = true;
89
- break;
90
- }
91
- }
92
- if (!hasDifference) {
93
- return false;
94
- }
95
- }
96
- const newDecorations = newRanges.map((r) => ({
97
- range: r,
98
- options: ModelDecorationOptions.EMPTY,
99
- }));
100
- this.hiddenAreasDecorationIds = this.model.deltaDecorations(this.hiddenAreasDecorationIds, newDecorations);
101
- const hiddenAreas = newRanges;
102
- let hiddenAreaStart = 1, hiddenAreaEnd = 0;
103
- let hiddenAreaIdx = -1;
104
- let nextLineNumberToUpdateHiddenArea = (hiddenAreaIdx + 1 < hiddenAreas.length) ? hiddenAreaEnd + 1 : this.modelLineProjections.length + 2;
105
- let hasVisibleLine = false;
106
- for (let i = 0; i < this.modelLineProjections.length; i++) {
107
- const lineNumber = i + 1;
108
- if (lineNumber === nextLineNumberToUpdateHiddenArea) {
109
- hiddenAreaIdx++;
110
- hiddenAreaStart = hiddenAreas[hiddenAreaIdx].startLineNumber;
111
- hiddenAreaEnd = hiddenAreas[hiddenAreaIdx].endLineNumber;
112
- nextLineNumberToUpdateHiddenArea = (hiddenAreaIdx + 1 < hiddenAreas.length) ? hiddenAreaEnd + 1 : this.modelLineProjections.length + 2;
113
- }
114
- let lineChanged = false;
115
- if (lineNumber >= hiddenAreaStart && lineNumber <= hiddenAreaEnd) {
116
- // Line should be hidden
117
- if (this.modelLineProjections[i].isVisible()) {
118
- this.modelLineProjections[i] = this.modelLineProjections[i].setVisible(false);
119
- lineChanged = true;
120
- }
121
- }
122
- else {
123
- hasVisibleLine = true;
124
- // Line should be visible
125
- if (!this.modelLineProjections[i].isVisible()) {
126
- this.modelLineProjections[i] = this.modelLineProjections[i].setVisible(true);
127
- lineChanged = true;
128
- }
129
- }
130
- if (lineChanged) {
131
- const newOutputLineCount = this.modelLineProjections[i].getViewLineCount();
132
- this.projectedModelLineLineCounts.setValue(i, newOutputLineCount);
133
- }
134
- }
135
- if (!hasVisibleLine) {
136
- // Cannot have everything be hidden => reveal everything!
137
- this.setHiddenAreas([]);
138
- }
139
- return true;
140
- }
141
- modelPositionIsVisible(modelLineNumber, _modelColumn) {
142
- if (modelLineNumber < 1 || modelLineNumber > this.modelLineProjections.length) {
143
- // invalid arguments
144
- return false;
145
- }
146
- return this.modelLineProjections[modelLineNumber - 1].isVisible();
147
- }
148
- getModelLineViewLineCount(modelLineNumber) {
149
- if (modelLineNumber < 1 || modelLineNumber > this.modelLineProjections.length) {
150
- // invalid arguments
151
- return 1;
152
- }
153
- return this.modelLineProjections[modelLineNumber - 1].getViewLineCount();
154
- }
155
- setTabSize(newTabSize) {
156
- if (this.tabSize === newTabSize) {
157
- return false;
158
- }
159
- this.tabSize = newTabSize;
160
- this._constructLines(/*resetHiddenAreas*/ false, null);
161
- return true;
162
- }
163
- setWrappingSettings(fontInfo, wrappingStrategy, wrappingColumn, wrappingIndent, wordBreak) {
164
- const equalFontInfo = this.fontInfo.equals(fontInfo);
165
- const equalWrappingStrategy = (this.wrappingStrategy === wrappingStrategy);
166
- const equalWrappingColumn = (this.wrappingColumn === wrappingColumn);
167
- const equalWrappingIndent = (this.wrappingIndent === wrappingIndent);
168
- const equalWordBreak = (this.wordBreak === wordBreak);
169
- if (equalFontInfo && equalWrappingStrategy && equalWrappingColumn && equalWrappingIndent && equalWordBreak) {
170
- return false;
171
- }
172
- const onlyWrappingColumnChanged = (equalFontInfo && equalWrappingStrategy && !equalWrappingColumn && equalWrappingIndent && equalWordBreak);
173
- this.fontInfo = fontInfo;
174
- this.wrappingStrategy = wrappingStrategy;
175
- this.wrappingColumn = wrappingColumn;
176
- this.wrappingIndent = wrappingIndent;
177
- this.wordBreak = wordBreak;
178
- let previousLineBreaks = null;
179
- if (onlyWrappingColumnChanged) {
180
- previousLineBreaks = [];
181
- for (let i = 0, len = this.modelLineProjections.length; i < len; i++) {
182
- previousLineBreaks[i] = this.modelLineProjections[i].getProjectionData();
183
- }
184
- }
185
- this._constructLines(/*resetHiddenAreas*/ false, previousLineBreaks);
186
- return true;
187
- }
188
- createLineBreaksComputer() {
189
- const lineBreaksComputerFactory = (this.wrappingStrategy === 'advanced'
190
- ? this._domLineBreaksComputerFactory
191
- : this._monospaceLineBreaksComputerFactory);
192
- return lineBreaksComputerFactory.createLineBreaksComputer(this.fontInfo, this.tabSize, this.wrappingColumn, this.wrappingIndent, this.wordBreak, this.wrapOnEscapedLineFeeds);
193
- }
194
- onModelFlushed() {
195
- this._constructLines(/*resetHiddenAreas*/ true, null);
196
- }
197
- onModelLinesDeleted(versionId, fromLineNumber, toLineNumber) {
198
- if (!versionId || versionId <= this._validModelVersionId) {
199
- // Here we check for versionId in case the lines were reconstructed in the meantime.
200
- // We don't want to apply stale change events on top of a newer read model state.
201
- return null;
202
- }
203
- const outputFromLineNumber = (fromLineNumber === 1 ? 1 : this.projectedModelLineLineCounts.getPrefixSum(fromLineNumber - 1) + 1);
204
- const outputToLineNumber = this.projectedModelLineLineCounts.getPrefixSum(toLineNumber);
205
- this.modelLineProjections.splice(fromLineNumber - 1, toLineNumber - fromLineNumber + 1);
206
- this.projectedModelLineLineCounts.removeValues(fromLineNumber - 1, toLineNumber - fromLineNumber + 1);
207
- return new ViewLinesDeletedEvent(outputFromLineNumber, outputToLineNumber);
208
- }
209
- onModelLinesInserted(versionId, fromLineNumber, _toLineNumber, lineBreaks) {
210
- if (!versionId || versionId <= this._validModelVersionId) {
211
- // Here we check for versionId in case the lines were reconstructed in the meantime.
212
- // We don't want to apply stale change events on top of a newer read model state.
213
- return null;
214
- }
215
- // cannot use this.getHiddenAreas() because those decorations have already seen the effect of this model change
216
- const isInHiddenArea = (fromLineNumber > 2 && !this.modelLineProjections[fromLineNumber - 2].isVisible());
217
- const outputFromLineNumber = (fromLineNumber === 1 ? 1 : this.projectedModelLineLineCounts.getPrefixSum(fromLineNumber - 1) + 1);
218
- let totalOutputLineCount = 0;
219
- const insertLines = [];
220
- const insertPrefixSumValues = [];
221
- for (let i = 0, len = lineBreaks.length; i < len; i++) {
222
- const line = createModelLineProjection(lineBreaks[i], !isInHiddenArea);
223
- insertLines.push(line);
224
- const outputLineCount = line.getViewLineCount();
225
- totalOutputLineCount += outputLineCount;
226
- insertPrefixSumValues[i] = outputLineCount;
227
- }
228
- // TODO@Alex: use arrays.arrayInsert
229
- this.modelLineProjections =
230
- this.modelLineProjections.slice(0, fromLineNumber - 1)
231
- .concat(insertLines)
232
- .concat(this.modelLineProjections.slice(fromLineNumber - 1));
233
- this.projectedModelLineLineCounts.insertValues(fromLineNumber - 1, insertPrefixSumValues);
234
- return new ViewLinesInsertedEvent(outputFromLineNumber, outputFromLineNumber + totalOutputLineCount - 1);
235
- }
236
- onModelLineChanged(versionId, lineNumber, lineBreakData) {
237
- if (versionId !== null && versionId <= this._validModelVersionId) {
238
- // Here we check for versionId in case the lines were reconstructed in the meantime.
239
- // We don't want to apply stale change events on top of a newer read model state.
240
- return [false, null, null, null];
241
- }
242
- const lineIndex = lineNumber - 1;
243
- const oldOutputLineCount = this.modelLineProjections[lineIndex].getViewLineCount();
244
- const isVisible = this.modelLineProjections[lineIndex].isVisible();
245
- const line = createModelLineProjection(lineBreakData, isVisible);
246
- this.modelLineProjections[lineIndex] = line;
247
- const newOutputLineCount = this.modelLineProjections[lineIndex].getViewLineCount();
248
- let lineMappingChanged = false;
249
- let changeFrom = 0;
250
- let changeTo = -1;
251
- let insertFrom = 0;
252
- let insertTo = -1;
253
- let deleteFrom = 0;
254
- let deleteTo = -1;
255
- if (oldOutputLineCount > newOutputLineCount) {
256
- changeFrom = this.projectedModelLineLineCounts.getPrefixSum(lineNumber - 1) + 1;
257
- changeTo = changeFrom + newOutputLineCount - 1;
258
- deleteFrom = changeTo + 1;
259
- deleteTo = deleteFrom + (oldOutputLineCount - newOutputLineCount) - 1;
260
- lineMappingChanged = true;
261
- }
262
- else if (oldOutputLineCount < newOutputLineCount) {
263
- changeFrom = this.projectedModelLineLineCounts.getPrefixSum(lineNumber - 1) + 1;
264
- changeTo = changeFrom + oldOutputLineCount - 1;
265
- insertFrom = changeTo + 1;
266
- insertTo = insertFrom + (newOutputLineCount - oldOutputLineCount) - 1;
267
- lineMappingChanged = true;
268
- }
269
- else {
270
- changeFrom = this.projectedModelLineLineCounts.getPrefixSum(lineNumber - 1) + 1;
271
- changeTo = changeFrom + newOutputLineCount - 1;
272
- }
273
- this.projectedModelLineLineCounts.setValue(lineIndex, newOutputLineCount);
274
- const viewLinesChangedEvent = (changeFrom <= changeTo ? new ViewLinesChangedEvent(changeFrom, changeTo - changeFrom + 1) : null);
275
- const viewLinesInsertedEvent = (insertFrom <= insertTo ? new ViewLinesInsertedEvent(insertFrom, insertTo) : null);
276
- const viewLinesDeletedEvent = (deleteFrom <= deleteTo ? new ViewLinesDeletedEvent(deleteFrom, deleteTo) : null);
277
- return [lineMappingChanged, viewLinesChangedEvent, viewLinesInsertedEvent, viewLinesDeletedEvent];
278
- }
279
- acceptVersionId(versionId) {
280
- this._validModelVersionId = versionId;
281
- if (this.modelLineProjections.length === 1 && !this.modelLineProjections[0].isVisible()) {
282
- // At least one line must be visible => reset hidden areas
283
- this.setHiddenAreas([]);
284
- }
285
- }
286
- getViewLineCount() {
287
- return this.projectedModelLineLineCounts.getTotalSum();
288
- }
289
- _toValidViewLineNumber(viewLineNumber) {
290
- if (viewLineNumber < 1) {
291
- return 1;
292
- }
293
- const viewLineCount = this.getViewLineCount();
294
- if (viewLineNumber > viewLineCount) {
295
- return viewLineCount;
296
- }
297
- return viewLineNumber | 0;
298
- }
299
- getActiveIndentGuide(viewLineNumber, minLineNumber, maxLineNumber) {
300
- viewLineNumber = this._toValidViewLineNumber(viewLineNumber);
301
- minLineNumber = this._toValidViewLineNumber(minLineNumber);
302
- maxLineNumber = this._toValidViewLineNumber(maxLineNumber);
303
- const modelPosition = this.convertViewPositionToModelPosition(viewLineNumber, this.getViewLineMinColumn(viewLineNumber));
304
- const modelMinPosition = this.convertViewPositionToModelPosition(minLineNumber, this.getViewLineMinColumn(minLineNumber));
305
- const modelMaxPosition = this.convertViewPositionToModelPosition(maxLineNumber, this.getViewLineMinColumn(maxLineNumber));
306
- const result = this.model.guides.getActiveIndentGuide(modelPosition.lineNumber, modelMinPosition.lineNumber, modelMaxPosition.lineNumber);
307
- const viewStartPosition = this.convertModelPositionToViewPosition(result.startLineNumber, 1);
308
- const viewEndPosition = this.convertModelPositionToViewPosition(result.endLineNumber, this.model.getLineMaxColumn(result.endLineNumber));
309
- return {
310
- startLineNumber: viewStartPosition.lineNumber,
311
- endLineNumber: viewEndPosition.lineNumber,
312
- indent: result.indent
313
- };
314
- }
315
- // #region ViewLineInfo
316
- getViewLineInfo(viewLineNumber) {
317
- viewLineNumber = this._toValidViewLineNumber(viewLineNumber);
318
- const r = this.projectedModelLineLineCounts.getIndexOf(viewLineNumber - 1);
319
- const lineIndex = r.index;
320
- const remainder = r.remainder;
321
- return new ViewLineInfo(lineIndex + 1, remainder);
322
- }
323
- getMinColumnOfViewLine(viewLineInfo) {
324
- return this.modelLineProjections[viewLineInfo.modelLineNumber - 1].getViewLineMinColumn(this.model, viewLineInfo.modelLineNumber, viewLineInfo.modelLineWrappedLineIdx);
325
- }
326
- getMaxColumnOfViewLine(viewLineInfo) {
327
- return this.modelLineProjections[viewLineInfo.modelLineNumber - 1].getViewLineMaxColumn(this.model, viewLineInfo.modelLineNumber, viewLineInfo.modelLineWrappedLineIdx);
328
- }
329
- getModelStartPositionOfViewLine(viewLineInfo) {
330
- const line = this.modelLineProjections[viewLineInfo.modelLineNumber - 1];
331
- const minViewColumn = line.getViewLineMinColumn(this.model, viewLineInfo.modelLineNumber, viewLineInfo.modelLineWrappedLineIdx);
332
- const column = line.getModelColumnOfViewPosition(viewLineInfo.modelLineWrappedLineIdx, minViewColumn);
333
- return new Position(viewLineInfo.modelLineNumber, column);
334
- }
335
- getModelEndPositionOfViewLine(viewLineInfo) {
336
- const line = this.modelLineProjections[viewLineInfo.modelLineNumber - 1];
337
- const maxViewColumn = line.getViewLineMaxColumn(this.model, viewLineInfo.modelLineNumber, viewLineInfo.modelLineWrappedLineIdx);
338
- const column = line.getModelColumnOfViewPosition(viewLineInfo.modelLineWrappedLineIdx, maxViewColumn);
339
- return new Position(viewLineInfo.modelLineNumber, column);
340
- }
341
- getViewLineInfosGroupedByModelRanges(viewStartLineNumber, viewEndLineNumber) {
342
- const startViewLine = this.getViewLineInfo(viewStartLineNumber);
343
- const endViewLine = this.getViewLineInfo(viewEndLineNumber);
344
- const result = new Array();
345
- let lastVisibleModelPos = this.getModelStartPositionOfViewLine(startViewLine);
346
- let viewLines = new Array();
347
- for (let curModelLine = startViewLine.modelLineNumber; curModelLine <= endViewLine.modelLineNumber; curModelLine++) {
348
- const line = this.modelLineProjections[curModelLine - 1];
349
- if (line.isVisible()) {
350
- const startOffset = curModelLine === startViewLine.modelLineNumber
351
- ? startViewLine.modelLineWrappedLineIdx
352
- : 0;
353
- const endOffset = curModelLine === endViewLine.modelLineNumber
354
- ? endViewLine.modelLineWrappedLineIdx + 1
355
- : line.getViewLineCount();
356
- for (let i = startOffset; i < endOffset; i++) {
357
- viewLines.push(new ViewLineInfo(curModelLine, i));
358
- }
359
- }
360
- if (!line.isVisible() && lastVisibleModelPos) {
361
- const lastVisibleModelPos2 = new Position(curModelLine - 1, this.model.getLineMaxColumn(curModelLine - 1) + 1);
362
- const modelRange = Range.fromPositions(lastVisibleModelPos, lastVisibleModelPos2);
363
- result.push(new ViewLineInfoGroupedByModelRange(modelRange, viewLines));
364
- viewLines = [];
365
- lastVisibleModelPos = null;
366
- }
367
- else if (line.isVisible() && !lastVisibleModelPos) {
368
- lastVisibleModelPos = new Position(curModelLine, 1);
369
- }
370
- }
371
- if (lastVisibleModelPos) {
372
- const modelRange = Range.fromPositions(lastVisibleModelPos, this.getModelEndPositionOfViewLine(endViewLine));
373
- result.push(new ViewLineInfoGroupedByModelRange(modelRange, viewLines));
374
- }
375
- return result;
376
- }
377
- // #endregion
378
- getViewLinesBracketGuides(viewStartLineNumber, viewEndLineNumber, activeViewPosition, options) {
379
- const modelActivePosition = activeViewPosition ? this.convertViewPositionToModelPosition(activeViewPosition.lineNumber, activeViewPosition.column) : null;
380
- const resultPerViewLine = [];
381
- for (const group of this.getViewLineInfosGroupedByModelRanges(viewStartLineNumber, viewEndLineNumber)) {
382
- const modelRangeStartLineNumber = group.modelRange.startLineNumber;
383
- const bracketGuidesPerModelLine = this.model.guides.getLinesBracketGuides(modelRangeStartLineNumber, group.modelRange.endLineNumber, modelActivePosition, options);
384
- for (const viewLineInfo of group.viewLines) {
385
- const bracketGuides = bracketGuidesPerModelLine[viewLineInfo.modelLineNumber - modelRangeStartLineNumber];
386
- // visibleColumns stay as they are (this is a bug and needs to be fixed, but it is not a regression)
387
- // model-columns must be converted to view-model columns.
388
- const result = bracketGuides.map(g => {
389
- if (g.forWrappedLinesAfterColumn !== -1) {
390
- const p = this.modelLineProjections[viewLineInfo.modelLineNumber - 1].getViewPositionOfModelPosition(0, g.forWrappedLinesAfterColumn);
391
- if (p.lineNumber >= viewLineInfo.modelLineWrappedLineIdx) {
392
- return undefined;
393
- }
394
- }
395
- if (g.forWrappedLinesBeforeOrAtColumn !== -1) {
396
- const p = this.modelLineProjections[viewLineInfo.modelLineNumber - 1].getViewPositionOfModelPosition(0, g.forWrappedLinesBeforeOrAtColumn);
397
- if (p.lineNumber < viewLineInfo.modelLineWrappedLineIdx) {
398
- return undefined;
399
- }
400
- }
401
- if (!g.horizontalLine) {
402
- return g;
403
- }
404
- let column = -1;
405
- if (g.column !== -1) {
406
- const p = this.modelLineProjections[viewLineInfo.modelLineNumber - 1].getViewPositionOfModelPosition(0, g.column);
407
- if (p.lineNumber === viewLineInfo.modelLineWrappedLineIdx) {
408
- column = p.column;
409
- }
410
- else if (p.lineNumber < viewLineInfo.modelLineWrappedLineIdx) {
411
- column = this.getMinColumnOfViewLine(viewLineInfo);
412
- }
413
- else if (p.lineNumber > viewLineInfo.modelLineWrappedLineIdx) {
414
- return undefined;
415
- }
416
- }
417
- const viewPosition = this.convertModelPositionToViewPosition(viewLineInfo.modelLineNumber, g.horizontalLine.endColumn);
418
- const p = this.modelLineProjections[viewLineInfo.modelLineNumber - 1].getViewPositionOfModelPosition(0, g.horizontalLine.endColumn);
419
- if (p.lineNumber === viewLineInfo.modelLineWrappedLineIdx) {
420
- return new IndentGuide(g.visibleColumn, column, g.className, new IndentGuideHorizontalLine(g.horizontalLine.top, viewPosition.column), -1, -1);
421
- }
422
- else if (p.lineNumber < viewLineInfo.modelLineWrappedLineIdx) {
423
- return undefined;
424
- }
425
- else {
426
- if (g.visibleColumn !== -1) {
427
- // Don't repeat horizontal lines that use visibleColumn for unrelated lines.
428
- return undefined;
429
- }
430
- return new IndentGuide(g.visibleColumn, column, g.className, new IndentGuideHorizontalLine(g.horizontalLine.top, this.getMaxColumnOfViewLine(viewLineInfo)), -1, -1);
431
- }
432
- });
433
- resultPerViewLine.push(result.filter((r) => !!r));
434
- }
435
- }
436
- return resultPerViewLine;
437
- }
438
- getViewLinesIndentGuides(viewStartLineNumber, viewEndLineNumber) {
439
- // TODO: Use the same code as in `getViewLinesBracketGuides`.
440
- // Future TODO: Merge with `getViewLinesBracketGuides`.
441
- // However, this requires more refactoring of indent guides.
442
- viewStartLineNumber = this._toValidViewLineNumber(viewStartLineNumber);
443
- viewEndLineNumber = this._toValidViewLineNumber(viewEndLineNumber);
444
- const modelStart = this.convertViewPositionToModelPosition(viewStartLineNumber, this.getViewLineMinColumn(viewStartLineNumber));
445
- const modelEnd = this.convertViewPositionToModelPosition(viewEndLineNumber, this.getViewLineMaxColumn(viewEndLineNumber));
446
- let result = [];
447
- const resultRepeatCount = [];
448
- const resultRepeatOption = [];
449
- const modelStartLineIndex = modelStart.lineNumber - 1;
450
- const modelEndLineIndex = modelEnd.lineNumber - 1;
451
- let reqStart = null;
452
- for (let modelLineIndex = modelStartLineIndex; modelLineIndex <= modelEndLineIndex; modelLineIndex++) {
453
- const line = this.modelLineProjections[modelLineIndex];
454
- if (line.isVisible()) {
455
- const viewLineStartIndex = line.getViewLineNumberOfModelPosition(0, modelLineIndex === modelStartLineIndex ? modelStart.column : 1);
456
- const viewLineEndIndex = line.getViewLineNumberOfModelPosition(0, this.model.getLineMaxColumn(modelLineIndex + 1));
457
- const count = viewLineEndIndex - viewLineStartIndex + 1;
458
- let option = 0 /* IndentGuideRepeatOption.BlockNone */;
459
- if (count > 1 && line.getViewLineMinColumn(this.model, modelLineIndex + 1, viewLineEndIndex) === 1) {
460
- // wrapped lines should block indent guides
461
- option = (viewLineStartIndex === 0 ? 1 /* IndentGuideRepeatOption.BlockSubsequent */ : 2 /* IndentGuideRepeatOption.BlockAll */);
462
- }
463
- resultRepeatCount.push(count);
464
- resultRepeatOption.push(option);
465
- // merge into previous request
466
- if (reqStart === null) {
467
- reqStart = new Position(modelLineIndex + 1, 0);
468
- }
469
- }
470
- else {
471
- // hit invisible line => flush request
472
- if (reqStart !== null) {
473
- result = result.concat(this.model.guides.getLinesIndentGuides(reqStart.lineNumber, modelLineIndex));
474
- reqStart = null;
475
- }
476
- }
477
- }
478
- if (reqStart !== null) {
479
- result = result.concat(this.model.guides.getLinesIndentGuides(reqStart.lineNumber, modelEnd.lineNumber));
480
- reqStart = null;
481
- }
482
- const viewLineCount = viewEndLineNumber - viewStartLineNumber + 1;
483
- const viewIndents = new Array(viewLineCount);
484
- let currIndex = 0;
485
- for (let i = 0, len = result.length; i < len; i++) {
486
- let value = result[i];
487
- const count = Math.min(viewLineCount - currIndex, resultRepeatCount[i]);
488
- const option = resultRepeatOption[i];
489
- let blockAtIndex;
490
- if (option === 2 /* IndentGuideRepeatOption.BlockAll */) {
491
- blockAtIndex = 0;
492
- }
493
- else if (option === 1 /* IndentGuideRepeatOption.BlockSubsequent */) {
494
- blockAtIndex = 1;
495
- }
496
- else {
497
- blockAtIndex = count;
498
- }
499
- for (let j = 0; j < count; j++) {
500
- if (j === blockAtIndex) {
501
- value = 0;
502
- }
503
- viewIndents[currIndex++] = value;
504
- }
505
- }
506
- return viewIndents;
507
- }
508
- getViewLineContent(viewLineNumber) {
509
- const info = this.getViewLineInfo(viewLineNumber);
510
- return this.modelLineProjections[info.modelLineNumber - 1].getViewLineContent(this.model, info.modelLineNumber, info.modelLineWrappedLineIdx);
511
- }
512
- getViewLineLength(viewLineNumber) {
513
- const info = this.getViewLineInfo(viewLineNumber);
514
- return this.modelLineProjections[info.modelLineNumber - 1].getViewLineLength(this.model, info.modelLineNumber, info.modelLineWrappedLineIdx);
515
- }
516
- getViewLineMinColumn(viewLineNumber) {
517
- const info = this.getViewLineInfo(viewLineNumber);
518
- return this.modelLineProjections[info.modelLineNumber - 1].getViewLineMinColumn(this.model, info.modelLineNumber, info.modelLineWrappedLineIdx);
519
- }
520
- getViewLineMaxColumn(viewLineNumber) {
521
- const info = this.getViewLineInfo(viewLineNumber);
522
- return this.modelLineProjections[info.modelLineNumber - 1].getViewLineMaxColumn(this.model, info.modelLineNumber, info.modelLineWrappedLineIdx);
523
- }
524
- getViewLineData(viewLineNumber) {
525
- const info = this.getViewLineInfo(viewLineNumber);
526
- return this.modelLineProjections[info.modelLineNumber - 1].getViewLineData(this.model, info.modelLineNumber, info.modelLineWrappedLineIdx);
527
- }
528
- getViewLinesData(viewStartLineNumber, viewEndLineNumber, needed) {
529
- viewStartLineNumber = this._toValidViewLineNumber(viewStartLineNumber);
530
- viewEndLineNumber = this._toValidViewLineNumber(viewEndLineNumber);
531
- const start = this.projectedModelLineLineCounts.getIndexOf(viewStartLineNumber - 1);
532
- let viewLineNumber = viewStartLineNumber;
533
- const startModelLineIndex = start.index;
534
- const startRemainder = start.remainder;
535
- const result = [];
536
- for (let modelLineIndex = startModelLineIndex, len = this.model.getLineCount(); modelLineIndex < len; modelLineIndex++) {
537
- const line = this.modelLineProjections[modelLineIndex];
538
- if (!line.isVisible()) {
539
- continue;
540
- }
541
- const fromViewLineIndex = (modelLineIndex === startModelLineIndex ? startRemainder : 0);
542
- let remainingViewLineCount = line.getViewLineCount() - fromViewLineIndex;
543
- let lastLine = false;
544
- if (viewLineNumber + remainingViewLineCount > viewEndLineNumber) {
545
- lastLine = true;
546
- remainingViewLineCount = viewEndLineNumber - viewLineNumber + 1;
547
- }
548
- line.getViewLinesData(this.model, modelLineIndex + 1, fromViewLineIndex, remainingViewLineCount, viewLineNumber - viewStartLineNumber, needed, result);
549
- viewLineNumber += remainingViewLineCount;
550
- if (lastLine) {
551
- break;
552
- }
553
- }
554
- return result;
555
- }
556
- validateViewPosition(viewLineNumber, viewColumn, expectedModelPosition) {
557
- viewLineNumber = this._toValidViewLineNumber(viewLineNumber);
558
- const r = this.projectedModelLineLineCounts.getIndexOf(viewLineNumber - 1);
559
- const lineIndex = r.index;
560
- const remainder = r.remainder;
561
- const line = this.modelLineProjections[lineIndex];
562
- const minColumn = line.getViewLineMinColumn(this.model, lineIndex + 1, remainder);
563
- const maxColumn = line.getViewLineMaxColumn(this.model, lineIndex + 1, remainder);
564
- if (viewColumn < minColumn) {
565
- viewColumn = minColumn;
566
- }
567
- if (viewColumn > maxColumn) {
568
- viewColumn = maxColumn;
569
- }
570
- const computedModelColumn = line.getModelColumnOfViewPosition(remainder, viewColumn);
571
- const computedModelPosition = this.model.validatePosition(new Position(lineIndex + 1, computedModelColumn));
572
- if (computedModelPosition.equals(expectedModelPosition)) {
573
- return new Position(viewLineNumber, viewColumn);
574
- }
575
- return this.convertModelPositionToViewPosition(expectedModelPosition.lineNumber, expectedModelPosition.column);
576
- }
577
- validateViewRange(viewRange, expectedModelRange) {
578
- const validViewStart = this.validateViewPosition(viewRange.startLineNumber, viewRange.startColumn, expectedModelRange.getStartPosition());
579
- const validViewEnd = this.validateViewPosition(viewRange.endLineNumber, viewRange.endColumn, expectedModelRange.getEndPosition());
580
- return new Range(validViewStart.lineNumber, validViewStart.column, validViewEnd.lineNumber, validViewEnd.column);
581
- }
582
- convertViewPositionToModelPosition(viewLineNumber, viewColumn) {
583
- const info = this.getViewLineInfo(viewLineNumber);
584
- const inputColumn = this.modelLineProjections[info.modelLineNumber - 1].getModelColumnOfViewPosition(info.modelLineWrappedLineIdx, viewColumn);
585
- // console.log('out -> in ' + viewLineNumber + ',' + viewColumn + ' ===> ' + (lineIndex+1) + ',' + inputColumn);
586
- return this.model.validatePosition(new Position(info.modelLineNumber, inputColumn));
587
- }
588
- convertViewRangeToModelRange(viewRange) {
589
- const start = this.convertViewPositionToModelPosition(viewRange.startLineNumber, viewRange.startColumn);
590
- const end = this.convertViewPositionToModelPosition(viewRange.endLineNumber, viewRange.endColumn);
591
- return new Range(start.lineNumber, start.column, end.lineNumber, end.column);
592
- }
593
- convertModelPositionToViewPosition(_modelLineNumber, _modelColumn, affinity = 2 /* PositionAffinity.None */, allowZeroLineNumber = false, belowHiddenRanges = false) {
594
- const validPosition = this.model.validatePosition(new Position(_modelLineNumber, _modelColumn));
595
- const inputLineNumber = validPosition.lineNumber;
596
- const inputColumn = validPosition.column;
597
- let lineIndex = inputLineNumber - 1, lineIndexChanged = false;
598
- if (belowHiddenRanges) {
599
- while (lineIndex < this.modelLineProjections.length && !this.modelLineProjections[lineIndex].isVisible()) {
600
- lineIndex++;
601
- lineIndexChanged = true;
602
- }
603
- }
604
- else {
605
- while (lineIndex > 0 && !this.modelLineProjections[lineIndex].isVisible()) {
606
- lineIndex--;
607
- lineIndexChanged = true;
608
- }
609
- }
610
- if (lineIndex === 0 && !this.modelLineProjections[lineIndex].isVisible()) {
611
- // Could not reach a real line
612
- // console.log('in -> out ' + inputLineNumber + ',' + inputColumn + ' ===> ' + 1 + ',' + 1);
613
- // TODO@alexdima@hediet this isn't soo pretty
614
- return new Position(allowZeroLineNumber ? 0 : 1, 1);
615
- }
616
- const deltaLineNumber = 1 + this.projectedModelLineLineCounts.getPrefixSum(lineIndex);
617
- let r;
618
- if (lineIndexChanged) {
619
- if (belowHiddenRanges) {
620
- r = this.modelLineProjections[lineIndex].getViewPositionOfModelPosition(deltaLineNumber, 1, affinity);
621
- }
622
- else {
623
- r = this.modelLineProjections[lineIndex].getViewPositionOfModelPosition(deltaLineNumber, this.model.getLineMaxColumn(lineIndex + 1), affinity);
624
- }
625
- }
626
- else {
627
- r = this.modelLineProjections[inputLineNumber - 1].getViewPositionOfModelPosition(deltaLineNumber, inputColumn, affinity);
628
- }
629
- // console.log('in -> out ' + inputLineNumber + ',' + inputColumn + ' ===> ' + r.lineNumber + ',' + r);
630
- return r;
631
- }
632
- /**
633
- * @param affinity The affinity in case of an empty range. Has no effect for non-empty ranges.
634
- */
635
- convertModelRangeToViewRange(modelRange, affinity = 0 /* PositionAffinity.Left */) {
636
- if (modelRange.isEmpty()) {
637
- const start = this.convertModelPositionToViewPosition(modelRange.startLineNumber, modelRange.startColumn, affinity);
638
- return Range.fromPositions(start);
639
- }
640
- else {
641
- const start = this.convertModelPositionToViewPosition(modelRange.startLineNumber, modelRange.startColumn, 1 /* PositionAffinity.Right */);
642
- const end = this.convertModelPositionToViewPosition(modelRange.endLineNumber, modelRange.endColumn, 0 /* PositionAffinity.Left */);
643
- return new Range(start.lineNumber, start.column, end.lineNumber, end.column);
644
- }
645
- }
646
- getViewLineNumberOfModelPosition(modelLineNumber, modelColumn) {
647
- let lineIndex = modelLineNumber - 1;
648
- if (this.modelLineProjections[lineIndex].isVisible()) {
649
- // this model line is visible
650
- const deltaLineNumber = 1 + this.projectedModelLineLineCounts.getPrefixSum(lineIndex);
651
- return this.modelLineProjections[lineIndex].getViewLineNumberOfModelPosition(deltaLineNumber, modelColumn);
652
- }
653
- // this model line is not visible
654
- while (lineIndex > 0 && !this.modelLineProjections[lineIndex].isVisible()) {
655
- lineIndex--;
656
- }
657
- if (lineIndex === 0 && !this.modelLineProjections[lineIndex].isVisible()) {
658
- // Could not reach a real line
659
- return 1;
660
- }
661
- const deltaLineNumber = 1 + this.projectedModelLineLineCounts.getPrefixSum(lineIndex);
662
- return this.modelLineProjections[lineIndex].getViewLineNumberOfModelPosition(deltaLineNumber, this.model.getLineMaxColumn(lineIndex + 1));
663
- }
664
- getDecorationsInRange(range, ownerId, filterOutValidation, filterFontDecorations, onlyMinimapDecorations, onlyMarginDecorations) {
665
- const modelStart = this.convertViewPositionToModelPosition(range.startLineNumber, range.startColumn);
666
- const modelEnd = this.convertViewPositionToModelPosition(range.endLineNumber, range.endColumn);
667
- if (modelEnd.lineNumber - modelStart.lineNumber <= range.endLineNumber - range.startLineNumber) {
668
- // most likely there are no hidden lines => fast path
669
- // fetch decorations from column 1 to cover the case of wrapped lines that have whole line decorations at column 1
670
- return this.model.getDecorationsInRange(new Range(modelStart.lineNumber, 1, modelEnd.lineNumber, modelEnd.column), ownerId, filterOutValidation, filterFontDecorations, onlyMinimapDecorations, onlyMarginDecorations);
671
- }
672
- let result = [];
673
- const modelStartLineIndex = modelStart.lineNumber - 1;
674
- const modelEndLineIndex = modelEnd.lineNumber - 1;
675
- let reqStart = null;
676
- for (let modelLineIndex = modelStartLineIndex; modelLineIndex <= modelEndLineIndex; modelLineIndex++) {
677
- const line = this.modelLineProjections[modelLineIndex];
678
- if (line.isVisible()) {
679
- // merge into previous request
680
- if (reqStart === null) {
681
- reqStart = new Position(modelLineIndex + 1, modelLineIndex === modelStartLineIndex ? modelStart.column : 1);
682
- }
683
- }
684
- else {
685
- // hit invisible line => flush request
686
- if (reqStart !== null) {
687
- const maxLineColumn = this.model.getLineMaxColumn(modelLineIndex);
688
- result = result.concat(this.model.getDecorationsInRange(new Range(reqStart.lineNumber, reqStart.column, modelLineIndex, maxLineColumn), ownerId, filterOutValidation, filterFontDecorations, onlyMinimapDecorations));
689
- reqStart = null;
690
- }
691
- }
692
- }
693
- if (reqStart !== null) {
694
- result = result.concat(this.model.getDecorationsInRange(new Range(reqStart.lineNumber, reqStart.column, modelEnd.lineNumber, modelEnd.column), ownerId, filterOutValidation, filterFontDecorations, onlyMinimapDecorations));
695
- reqStart = null;
696
- }
697
- result.sort((a, b) => {
698
- const res = Range.compareRangesUsingStarts(a.range, b.range);
699
- if (res === 0) {
700
- if (a.id < b.id) {
701
- return -1;
702
- }
703
- if (a.id > b.id) {
704
- return 1;
705
- }
706
- return 0;
707
- }
708
- return res;
709
- });
710
- // Eliminate duplicate decorations that might have intersected our visible ranges multiple times
711
- const finalResult = [];
712
- let finalResultLen = 0;
713
- let prevDecId = null;
714
- for (const dec of result) {
715
- const decId = dec.id;
716
- if (prevDecId === decId) {
717
- // skip
718
- continue;
719
- }
720
- prevDecId = decId;
721
- finalResult[finalResultLen++] = dec;
722
- }
723
- return finalResult;
724
- }
725
- getInjectedTextAt(position) {
726
- const info = this.getViewLineInfo(position.lineNumber);
727
- return this.modelLineProjections[info.modelLineNumber - 1].getInjectedTextAt(info.modelLineWrappedLineIdx, position.column);
728
- }
729
- normalizePosition(position, affinity) {
730
- const info = this.getViewLineInfo(position.lineNumber);
731
- return this.modelLineProjections[info.modelLineNumber - 1].normalizePosition(info.modelLineWrappedLineIdx, position, affinity);
732
- }
733
- getLineIndentColumn(lineNumber) {
734
- const info = this.getViewLineInfo(lineNumber);
735
- if (info.modelLineWrappedLineIdx === 0) {
736
- return this.model.getLineIndentColumn(info.modelLineNumber);
737
- }
738
- // wrapped lines have no indentation.
739
- // We deliberately don't handle the case that indentation is wrapped
740
- // to avoid two view lines reporting indentation for the very same model line.
741
- return 0;
742
- }
743
- }
744
- /**
745
- * Overlapping unsorted ranges:
746
- * [ ) [ ) [ )
747
- * [ ) [ )
748
- * ->
749
- * Non overlapping sorted ranges:
750
- * [ ) [ ) [ )
751
- *
752
- * Note: This function only considers line information! Columns are ignored.
753
- */
754
- function normalizeLineRanges(ranges) {
755
- if (ranges.length === 0) {
756
- return [];
757
- }
758
- const sortedRanges = ranges.slice();
759
- sortedRanges.sort(Range.compareRangesUsingStarts);
760
- const result = [];
761
- let currentRangeStart = sortedRanges[0].startLineNumber;
762
- let currentRangeEnd = sortedRanges[0].endLineNumber;
763
- for (let i = 1, len = sortedRanges.length; i < len; i++) {
764
- const range = sortedRanges[i];
765
- if (range.startLineNumber > currentRangeEnd + 1) {
766
- result.push(new Range(currentRangeStart, 1, currentRangeEnd, 1));
767
- currentRangeStart = range.startLineNumber;
768
- currentRangeEnd = range.endLineNumber;
769
- }
770
- else if (range.endLineNumber > currentRangeEnd) {
771
- currentRangeEnd = range.endLineNumber;
772
- }
773
- }
774
- result.push(new Range(currentRangeStart, 1, currentRangeEnd, 1));
775
- return result;
776
- }
777
- /**
778
- * Represents a view line. Can be used to efficiently query more information about it.
779
- */
780
- class ViewLineInfo {
781
- constructor(modelLineNumber, modelLineWrappedLineIdx) {
782
- this.modelLineNumber = modelLineNumber;
783
- this.modelLineWrappedLineIdx = modelLineWrappedLineIdx;
784
- }
785
- }
786
- /**
787
- * A list of view lines that have a contiguous span in the model.
788
- */
789
- class ViewLineInfoGroupedByModelRange {
790
- constructor(modelRange, viewLines) {
791
- this.modelRange = modelRange;
792
- this.viewLines = viewLines;
793
- }
794
- }
795
- class CoordinatesConverter {
796
- constructor(lines) {
797
- this._lines = lines;
798
- }
799
- // View -> Model conversion and related methods
800
- convertViewPositionToModelPosition(viewPosition) {
801
- return this._lines.convertViewPositionToModelPosition(viewPosition.lineNumber, viewPosition.column);
802
- }
803
- convertViewRangeToModelRange(viewRange) {
804
- return this._lines.convertViewRangeToModelRange(viewRange);
805
- }
806
- validateViewPosition(viewPosition, expectedModelPosition) {
807
- return this._lines.validateViewPosition(viewPosition.lineNumber, viewPosition.column, expectedModelPosition);
808
- }
809
- validateViewRange(viewRange, expectedModelRange) {
810
- return this._lines.validateViewRange(viewRange, expectedModelRange);
811
- }
812
- // Model -> View conversion and related methods
813
- convertModelPositionToViewPosition(modelPosition, affinity, allowZero, belowHiddenRanges) {
814
- return this._lines.convertModelPositionToViewPosition(modelPosition.lineNumber, modelPosition.column, affinity, allowZero, belowHiddenRanges);
815
- }
816
- convertModelRangeToViewRange(modelRange, affinity) {
817
- return this._lines.convertModelRangeToViewRange(modelRange, affinity);
818
- }
819
- modelPositionIsVisible(modelPosition) {
820
- return this._lines.modelPositionIsVisible(modelPosition.lineNumber, modelPosition.column);
821
- }
822
- getModelLineViewLineCount(modelLineNumber) {
823
- return this._lines.getModelLineViewLineCount(modelLineNumber);
824
- }
825
- getViewLineNumberOfModelPosition(modelLineNumber, modelColumn) {
826
- return this._lines.getViewLineNumberOfModelPosition(modelLineNumber, modelColumn);
827
- }
828
- }
829
- class ViewModelLinesFromModelAsIs {
830
- constructor(model) {
831
- this.model = model;
832
- }
833
- dispose() {
834
- }
835
- createCoordinatesConverter() {
836
- return new IdentityCoordinatesConverter(this.model);
837
- }
838
- getHiddenAreas() {
839
- return [];
840
- }
841
- setHiddenAreas(_ranges) {
842
- return false;
843
- }
844
- setTabSize(_newTabSize) {
845
- return false;
846
- }
847
- setWrappingSettings(_fontInfo, _wrappingStrategy, _wrappingColumn, _wrappingIndent) {
848
- return false;
849
- }
850
- createLineBreaksComputer() {
851
- const result = [];
852
- return {
853
- addRequest: (lineText, injectedText, previousLineBreakData) => {
854
- result.push(null);
855
- },
856
- finalize: () => {
857
- return result;
858
- }
859
- };
860
- }
861
- onModelFlushed() {
862
- }
863
- onModelLinesDeleted(_versionId, fromLineNumber, toLineNumber) {
864
- return new ViewLinesDeletedEvent(fromLineNumber, toLineNumber);
865
- }
866
- onModelLinesInserted(_versionId, fromLineNumber, toLineNumber, lineBreaks) {
867
- return new ViewLinesInsertedEvent(fromLineNumber, toLineNumber);
868
- }
869
- onModelLineChanged(_versionId, lineNumber, lineBreakData) {
870
- return [false, new ViewLinesChangedEvent(lineNumber, 1), null, null];
871
- }
872
- acceptVersionId(_versionId) {
873
- }
874
- getViewLineCount() {
875
- return this.model.getLineCount();
876
- }
877
- getActiveIndentGuide(viewLineNumber, _minLineNumber, _maxLineNumber) {
878
- return {
879
- startLineNumber: viewLineNumber,
880
- endLineNumber: viewLineNumber,
881
- indent: 0
882
- };
883
- }
884
- getViewLinesBracketGuides(startLineNumber, endLineNumber, activePosition) {
885
- return new Array(endLineNumber - startLineNumber + 1).fill([]);
886
- }
887
- getViewLinesIndentGuides(viewStartLineNumber, viewEndLineNumber) {
888
- const viewLineCount = viewEndLineNumber - viewStartLineNumber + 1;
889
- const result = new Array(viewLineCount);
890
- for (let i = 0; i < viewLineCount; i++) {
891
- result[i] = 0;
892
- }
893
- return result;
894
- }
895
- getViewLineContent(viewLineNumber) {
896
- return this.model.getLineContent(viewLineNumber);
897
- }
898
- getViewLineLength(viewLineNumber) {
899
- return this.model.getLineLength(viewLineNumber);
900
- }
901
- getViewLineMinColumn(viewLineNumber) {
902
- return this.model.getLineMinColumn(viewLineNumber);
903
- }
904
- getViewLineMaxColumn(viewLineNumber) {
905
- return this.model.getLineMaxColumn(viewLineNumber);
906
- }
907
- getViewLineData(viewLineNumber) {
908
- const lineTokens = this.model.tokenization.getLineTokens(viewLineNumber);
909
- const lineContent = lineTokens.getLineContent();
910
- return new ViewLineData(lineContent, false, 1, lineContent.length + 1, 0, lineTokens.inflate(), null);
911
- }
912
- getViewLinesData(viewStartLineNumber, viewEndLineNumber, needed) {
913
- const lineCount = this.model.getLineCount();
914
- viewStartLineNumber = Math.min(Math.max(1, viewStartLineNumber), lineCount);
915
- viewEndLineNumber = Math.min(Math.max(1, viewEndLineNumber), lineCount);
916
- const result = [];
917
- for (let lineNumber = viewStartLineNumber; lineNumber <= viewEndLineNumber; lineNumber++) {
918
- const idx = lineNumber - viewStartLineNumber;
919
- result[idx] = needed[idx] ? this.getViewLineData(lineNumber) : null;
920
- }
921
- return result;
922
- }
923
- getDecorationsInRange(range, ownerId, filterOutValidation, filterFontDecorations, onlyMinimapDecorations, onlyMarginDecorations) {
924
- return this.model.getDecorationsInRange(range, ownerId, filterOutValidation, filterFontDecorations, onlyMinimapDecorations, onlyMarginDecorations);
925
- }
926
- normalizePosition(position, affinity) {
927
- return this.model.normalizePosition(position, affinity);
928
- }
929
- getLineIndentColumn(lineNumber) {
930
- return this.model.getLineIndentColumn(lineNumber);
931
- }
932
- getInjectedTextAt(position) {
933
- // Identity lines collection does not support injected text.
934
- return null;
935
- }
936
- }
937
-
938
- export { ViewModelLinesFromModelAsIs, ViewModelLinesFromProjectedModel };