@codingame/monaco-vscode-editor-api 11.1.1 → 12.0.0

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 (35) hide show
  1. package/esm/vs/editor/browser/config/tabFocus.d.ts +1 -0
  2. package/esm/vs/editor/browser/coreCommands.d.ts +1 -0
  3. package/esm/vs/editor/common/commands/shiftCommand.d.ts +1 -0
  4. package/esm/vs/editor/contrib/bracketMatching/browser/bracketMatching.d.ts +1 -0
  5. package/esm/vs/editor/contrib/clipboard/browser/clipboard.d.ts +1 -0
  6. package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.d.ts +1 -0
  7. package/esm/vs/editor/contrib/cursorUndo/browser/cursorUndo.d.ts +1 -0
  8. package/esm/vs/editor/contrib/find/browser/findController.d.ts +1 -0
  9. package/esm/vs/editor/contrib/format/browser/formatActions.d.ts +1 -0
  10. package/esm/vs/editor/contrib/hover/browser/hoverContribution.d.ts +1 -0
  11. package/esm/vs/editor/contrib/hover/browser/hoverContribution.js +1 -0
  12. package/esm/vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.d.ts +1 -0
  13. package/esm/vs/editor/editor.api.d.ts +7 -2
  14. package/esm/vs/editor/editor.api.js +4 -2311
  15. package/package.json +14 -9
  16. package/vscode/src/vs/editor/editor.api.d.ts +9338 -0
  17. package/vscode/src/vs/editor/editor.api.js +35 -0
  18. package/vscode/src/vs/editor/standalone/browser/colorizer.d.ts +17 -0
  19. package/vscode/src/vs/editor/standalone/browser/colorizer.js +178 -0
  20. package/vscode/src/vs/editor/standalone/browser/standalone-tokens.css.js +6 -0
  21. package/vscode/src/vs/editor/standalone/browser/standaloneEditor.d.ts +73 -0
  22. package/vscode/src/vs/editor/standalone/browser/standaloneEditor.js +347 -0
  23. package/vscode/src/vs/editor/standalone/browser/standaloneLanguages.d.ts +114 -0
  24. package/vscode/src/vs/editor/standalone/browser/standaloneLanguages.js +444 -0
  25. package/vscode/src/vs/editor/standalone/browser/standaloneWebWorker.d.ts +15 -0
  26. package/vscode/src/vs/editor/standalone/browser/standaloneWebWorker.js +66 -0
  27. package/vscode/src/vs/editor/standalone/common/monarch/monarchCommon.d.ts +72 -0
  28. package/vscode/src/vs/editor/standalone/common/monarch/monarchCommon.js +111 -0
  29. package/vscode/src/vs/editor/standalone/common/monarch/monarchCompile.d.ts +3 -0
  30. package/vscode/src/vs/editor/standalone/common/monarch/monarchCompile.js +476 -0
  31. package/vscode/src/vs/editor/standalone/common/monarch/monarchLexer.d.ts +33 -0
  32. package/vscode/src/vs/editor/standalone/common/monarch/monarchLexer.js +707 -0
  33. package/vscode/src/vs/editor/standalone/common/monarch/monarchTypes.d.ts +46 -0
  34. package/editor.api.d.ts +0 -7
  35. package/monaco.d.ts +0 -10
@@ -1,2316 +1,9 @@
1
- import { ConfigurationChangedEvent, ApplyUpdateResult, EditorOptions } from 'vscode/vscode/vs/editor/common/config/editorOptions';
2
- import { createMonacoBaseAPI } from 'vscode/vscode/vs/editor/common/services/editorBaseApi';
3
- import { mainWindow } from 'vscode/vscode/vs/base/browser/window';
4
- import { Disposable, DisposableStore } from 'vscode/vscode/vs/base/common/lifecycle';
5
- import { startsWithUTF8BOM, splitLines } from 'vscode/vscode/vs/base/common/strings';
6
- import { URI } from 'vscode/vscode/vs/base/common/uri';
7
- import n from 'vscode/external/rollup-plugin-styles/dist/runtime/inject-css.js';
8
- import { FontMeasurements } from 'vscode/vscode/vs/editor/browser/config/fontMeasurements';
9
- import { EditorCommand } from 'vscode/vscode/vs/editor/browser/editorExtensions';
10
- import { ICodeEditorService } from 'vscode/vscode/vs/editor/browser/services/codeEditorService';
11
- import { getAllMethodNames } from 'vscode/vscode/vs/base/common/objects';
12
- import { EditorWorkerClient } from 'vscode/vscode/vs/editor/browser/services/editorWorkerService';
13
- import { standaloneEditorWorkerDescriptor, StandaloneServices, StandaloneKeybindingService } from 'vscode/vscode/vs/editor/standalone/browser/standaloneServices';
14
- import { EditorZoom } from 'vscode/vscode/vs/editor/common/config/editorZoom';
15
- import { BareFontInfo, FontInfo } from 'vscode/vscode/vs/editor/common/config/fontInfo';
16
- import { EditorType } from 'vscode/vscode/vs/editor/common/editorCommon';
17
- import { Token as Token$1, TokenizationRegistry, TokenizationResult, EncodedTokenizationResult, LazyTokenizationSupport, FoldingRangeKind, SelectedSuggestionInfo } from 'vscode/vscode/vs/editor/common/languages';
18
- import { ILanguageService } from 'vscode/vscode/vs/editor/common/languages/language';
19
- import { PLAINTEXT_LANGUAGE_ID, ModesRegistry } from 'vscode/vscode/vs/editor/common/languages/modesRegistry';
20
- import { nullTokenize, nullTokenizeEncoded, NullState } from 'vscode/vscode/vs/editor/common/languages/nullTokenize';
21
- import { TextModelResolvedOptions, FindMatch } from 'vscode/vscode/vs/editor/common/model';
22
- import { IModelService } from 'vscode/vscode/vs/editor/common/services/model';
23
- import { AccessibilitySupport, ContentWidgetPositionPreference, CursorChangeReason, DefaultEndOfLine, EditorAutoIndentStrategy, EditorOption, EndOfLinePreference, EndOfLineSequence, MinimapPosition, MinimapSectionHeaderStyle, MouseTargetType, OverlayWidgetPositionPreference, OverviewRulerLane, GlyphMarginLane, RenderLineNumbersType, RenderMinimap, ScrollbarVisibility, ScrollType, TextEditorCursorBlinkingStyle, TextEditorCursorStyle, TrackedRangeStickiness, WrappingIndent, InjectedTextCursorStops, PositionAffinity, ShowLightbulbIconMode, DocumentHighlightKind, CompletionItemKind, CompletionItemTag, CompletionItemInsertTextRule, SymbolKind, SymbolTag, IndentAction, CompletionTriggerKind, SignatureHelpTriggerKind, InlayHintKind, InlineCompletionTriggerKind, InlineEditTriggerKind, CodeActionTriggerType, NewSymbolNameTag, NewSymbolNameTriggerKind, PartialAcceptTriggerKind, HoverVerbosityAction } from 'vscode/vscode/vs/editor/common/standalone/standaloneEnums';
24
- import { createTrustedTypesPolicy } from 'vscode/vscode/vs/base/browser/trustedTypes';
25
- import { LineTokens } from 'vscode/vscode/vs/editor/common/tokens/lineTokens';
26
- import { renderViewLine2, RenderLineInput } from 'vscode/vscode/vs/editor/common/viewLayout/viewLineRenderer';
27
- import { ViewLineRenderingData } from 'vscode/vscode/vs/editor/common/viewModel';
28
- import { __decorate, __param } from 'vscode/external/tslib/tslib.es6.js';
29
- import { IConfigurationService } from 'vscode/vscode/vs/platform/configuration/common/configuration.service';
30
- import { StandaloneEditor, StandaloneDiffEditor2, createTextModel } from 'vscode/vscode/vs/editor/standalone/browser/standaloneCodeEditor';
31
- import { IStandaloneThemeService } from 'vscode/vscode/vs/editor/standalone/common/standaloneTheme';
32
- import { MenuRegistry, MenuId } from 'vscode/vscode/vs/platform/actions/common/actions';
33
- import { CommandsRegistry } from 'vscode/vscode/vs/platform/commands/common/commands';
34
- import { ContextKeyExpr } from 'vscode/vscode/vs/platform/contextkey/common/contextkey';
35
- import { IKeybindingService } from 'vscode/vscode/vs/platform/keybinding/common/keybinding.service';
36
- import { IMarkerService } from 'vscode/vscode/vs/platform/markers/common/markers.service';
37
- import { IOpenerService } from 'vscode/vscode/vs/platform/opener/common/opener.service';
38
- import { MultiDiffEditorWidget } from 'vscode/vscode/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidget';
39
- import { Color } from 'vscode/vscode/vs/base/common/color';
40
- import { Range as Range$1 } from 'vscode/vscode/vs/editor/common/core/range';
41
- import { ILanguageConfigurationService } from 'vscode/vscode/vs/editor/common/languages/languageConfigurationRegistry';
42
- import { ILanguageFeaturesService } from 'vscode/vscode/vs/editor/common/services/languageFeatures';
43
- import { FormattingConflicts } from 'vscode/vscode/vs/editor/contrib/format/browser/format';
1
+
2
+ import { languages, editor } from '../../../vscode/src/vs/editor/editor.api.js';
3
+ export { CancellationTokenSource, Emitter, KeyCode, KeyMod, MarkerSeverity, MarkerTag, Position, Range, Selection, SelectionDirection, Token, Uri } from '../../../vscode/src/vs/editor/editor.api.js';
44
4
  import { createConfiguredEditor, createConfiguredDiffEditor, createModelReference, writeFile } from 'vscode/monaco';
45
5
  import { withReadyServices } from 'vscode/services';
46
6
 
47
- var css = ".monaco-editor.standalone{--monaco-monospace-font:\"SF Mono\",Monaco,Menlo,Consolas,\"Ubuntu Mono\",\"Liberation Mono\",\"DejaVu Sans Mono\",\"Courier New\",monospace;font-family:-apple-system,BlinkMacSystemFont,Segoe WPC,Segoe UI,HelveticaNeue-Light,system-ui,Ubuntu,Droid Sans,sans-serif}.monaco-editor.standalone.hc-black .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label,.monaco-editor.standalone.hc-light .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label,.monaco-editor.standalone.vs-dark .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label,.monaco-menu .monaco-action-bar.vertical .action-item .action-menu-item:focus .action-label{stroke-width:1.2px}.monaco-hover p{margin:0}.monaco-aria-container{clip:rect(1px,1px,1px,1px);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;top:0;width:1px}.monaco-diff-editor.standalone .synthetic-focus,.monaco-diff-editor.standalone [tabindex=\"-1\"]:focus,.monaco-diff-editor.standalone [tabindex=\"0\"]:focus,.monaco-diff-editor.standalone button:focus,.monaco-diff-editor.standalone input[type=button]:focus,.monaco-diff-editor.standalone input[type=checkbox]:focus,.monaco-diff-editor.standalone input[type=search]:focus,.monaco-diff-editor.standalone input[type=text]:focus,.monaco-diff-editor.standalone select:focus,.monaco-diff-editor.standalone textarea:focus,.monaco-editor.standalone .synthetic-focus,.monaco-editor.standalone [tabindex=\"-1\"]:focus,.monaco-editor.standalone [tabindex=\"0\"]:focus,.monaco-editor.standalone button:focus,.monaco-editor.standalone input[type=button]:focus,.monaco-editor.standalone input[type=checkbox]:focus,.monaco-editor.standalone input[type=search]:focus,.monaco-editor.standalone input[type=text]:focus,.monaco-editor.standalone select:focus,.monaco-editor.standalone textarea:focus{opacity:1;outline-color:var(--vscode-focusBorder);outline-offset:-1px;outline-style:solid;outline-width:1px}";
48
- n(css,{});
49
-
50
- function createWebWorker$1(modelService, opts) {
51
- return ( new MonacoWebWorkerImpl(modelService, opts));
52
- }
53
- class MonacoWebWorkerImpl extends EditorWorkerClient {
54
- constructor(modelService, opts) {
55
- const workerDescriptor = {
56
- moduleId: standaloneEditorWorkerDescriptor.moduleId,
57
- esmModuleLocation: standaloneEditorWorkerDescriptor.esmModuleLocation,
58
- label: opts.label,
59
- };
60
- super(workerDescriptor, opts.keepIdleModels || false, modelService);
61
- this._foreignModuleId = opts.moduleId;
62
- this._foreignModuleCreateData = opts.createData || null;
63
- this._foreignModuleHost = opts.host || null;
64
- this._foreignProxy = null;
65
- }
66
- fhr(method, args) {
67
- if (!this._foreignModuleHost || typeof this._foreignModuleHost[method] !== 'function') {
68
- return Promise.reject(( new Error('Missing method ' + method + ' or missing main thread foreign host.')));
69
- }
70
- try {
71
- return Promise.resolve(this._foreignModuleHost[method].apply(this._foreignModuleHost, args));
72
- }
73
- catch (e) {
74
- return Promise.reject(e);
75
- }
76
- }
77
- _getForeignProxy() {
78
- if (!this._foreignProxy) {
79
- this._foreignProxy = this._getProxy().then((proxy) => {
80
- const foreignHostMethods = this._foreignModuleHost ? getAllMethodNames(this._foreignModuleHost) : [];
81
- return proxy.$loadForeignModule(this._foreignModuleId, this._foreignModuleCreateData, foreignHostMethods).then((foreignMethods) => {
82
- this._foreignModuleCreateData = null;
83
- const proxyMethodRequest = (method, args) => {
84
- return proxy.$fmr(method, args);
85
- };
86
- const createProxyMethod = (method, proxyMethodRequest) => {
87
- return function () {
88
- const args = Array.prototype.slice.call(arguments, 0);
89
- return proxyMethodRequest(method, args);
90
- };
91
- };
92
- const foreignProxy = {};
93
- for (const foreignMethod of foreignMethods) {
94
- foreignProxy[foreignMethod] = createProxyMethod(foreignMethod, proxyMethodRequest);
95
- }
96
- return foreignProxy;
97
- });
98
- });
99
- }
100
- return this._foreignProxy;
101
- }
102
- getProxy() {
103
- return this._getForeignProxy();
104
- }
105
- withSyncedResources(resources) {
106
- return this.workerWithSyncedResources(resources).then(_ => ( this.getProxy()));
107
- }
108
- }
109
-
110
- function isFuzzyActionArr(what) {
111
- return (Array.isArray(what));
112
- }
113
- function isFuzzyAction(what) {
114
- return !isFuzzyActionArr(what);
115
- }
116
- function isString(what) {
117
- return (typeof what === 'string');
118
- }
119
- function isIAction(what) {
120
- return !isString(what);
121
- }
122
- function empty(s) {
123
- return (s ? false : true);
124
- }
125
- function fixCase(lexer, str) {
126
- return (lexer.ignoreCase && str ? str.toLowerCase() : str);
127
- }
128
- function sanitize(s) {
129
- return s.replace(/[&<>'"_]/g, '-');
130
- }
131
- function log(lexer, msg) {
132
- console.log(`${lexer.languageId}: ${msg}`);
133
- }
134
- function createError(lexer, msg) {
135
- return ( new Error(`${lexer.languageId}: ${msg}`));
136
- }
137
- function substituteMatches(lexer, str, id, matches, state) {
138
- const re = /\$((\$)|(#)|(\d\d?)|[sS](\d\d?)|@(\w+))/g;
139
- let stateMatches = null;
140
- return str.replace(re, function (full, sub, dollar, hash, n, s, attr, ofs, total) {
141
- if (!empty(dollar)) {
142
- return '$';
143
- }
144
- if (!empty(hash)) {
145
- return fixCase(lexer, id);
146
- }
147
- if (!empty(n) && n < matches.length) {
148
- return fixCase(lexer, matches[n]);
149
- }
150
- if (!empty(attr) && lexer && typeof (lexer[attr]) === 'string') {
151
- return lexer[attr];
152
- }
153
- if (stateMatches === null) {
154
- stateMatches = state.split('.');
155
- stateMatches.unshift(state);
156
- }
157
- if (!empty(s) && s < stateMatches.length) {
158
- return fixCase(lexer, stateMatches[s]);
159
- }
160
- return '';
161
- });
162
- }
163
- function substituteMatchesRe(lexer, str, state) {
164
- const re = /\$[sS](\d\d?)/g;
165
- let stateMatches = null;
166
- return str.replace(re, function (full, s) {
167
- if (stateMatches === null) {
168
- stateMatches = state.split('.');
169
- stateMatches.unshift(state);
170
- }
171
- if (!empty(s) && s < stateMatches.length) {
172
- return fixCase(lexer, stateMatches[s]);
173
- }
174
- return '';
175
- });
176
- }
177
- function findRules(lexer, inState) {
178
- let state = inState;
179
- while (state && state.length > 0) {
180
- const rules = lexer.tokenizer[state];
181
- if (rules) {
182
- return rules;
183
- }
184
- const idx = state.lastIndexOf('.');
185
- if (idx < 0) {
186
- state = null;
187
- }
188
- else {
189
- state = state.substr(0, idx);
190
- }
191
- }
192
- return null;
193
- }
194
- function stateExists(lexer, inState) {
195
- let state = inState;
196
- while (state && state.length > 0) {
197
- const exist = lexer.stateNames[state];
198
- if (exist) {
199
- return true;
200
- }
201
- const idx = state.lastIndexOf('.');
202
- if (idx < 0) {
203
- state = null;
204
- }
205
- else {
206
- state = state.substr(0, idx);
207
- }
208
- }
209
- return false;
210
- }
211
-
212
- var MonarchTokenizer_1;
213
- const CACHE_STACK_DEPTH = 5;
214
- class MonarchStackElementFactory {
215
- static { this._INSTANCE = ( new MonarchStackElementFactory(CACHE_STACK_DEPTH)); }
216
- static create(parent, state) {
217
- return this._INSTANCE.create(parent, state);
218
- }
219
- constructor(maxCacheDepth) {
220
- this._maxCacheDepth = maxCacheDepth;
221
- this._entries = Object.create(null);
222
- }
223
- create(parent, state) {
224
- if (parent !== null && parent.depth >= this._maxCacheDepth) {
225
- return ( new MonarchStackElement(parent, state));
226
- }
227
- let stackElementId = MonarchStackElement.getStackElementId(parent);
228
- if (stackElementId.length > 0) {
229
- stackElementId += '|';
230
- }
231
- stackElementId += state;
232
- let result = this._entries[stackElementId];
233
- if (result) {
234
- return result;
235
- }
236
- result = ( new MonarchStackElement(parent, state));
237
- this._entries[stackElementId] = result;
238
- return result;
239
- }
240
- }
241
- class MonarchStackElement {
242
- constructor(parent, state) {
243
- this.parent = parent;
244
- this.state = state;
245
- this.depth = (this.parent ? this.parent.depth : 0) + 1;
246
- }
247
- static getStackElementId(element) {
248
- let result = '';
249
- while (element !== null) {
250
- if (result.length > 0) {
251
- result += '|';
252
- }
253
- result += element.state;
254
- element = element.parent;
255
- }
256
- return result;
257
- }
258
- static _equals(a, b) {
259
- while (a !== null && b !== null) {
260
- if (a === b) {
261
- return true;
262
- }
263
- if (a.state !== b.state) {
264
- return false;
265
- }
266
- a = a.parent;
267
- b = b.parent;
268
- }
269
- if (a === null && b === null) {
270
- return true;
271
- }
272
- return false;
273
- }
274
- equals(other) {
275
- return MonarchStackElement._equals(this, other);
276
- }
277
- push(state) {
278
- return MonarchStackElementFactory.create(this, state);
279
- }
280
- pop() {
281
- return this.parent;
282
- }
283
- popall() {
284
- let result = this;
285
- while (result.parent) {
286
- result = result.parent;
287
- }
288
- return result;
289
- }
290
- switchTo(state) {
291
- return MonarchStackElementFactory.create(this.parent, state);
292
- }
293
- }
294
- class EmbeddedLanguageData {
295
- constructor(languageId, state) {
296
- this.languageId = languageId;
297
- this.state = state;
298
- }
299
- equals(other) {
300
- return (this.languageId === other.languageId
301
- && this.state.equals(other.state));
302
- }
303
- clone() {
304
- const stateClone = this.state.clone();
305
- if (stateClone === this.state) {
306
- return this;
307
- }
308
- return ( new EmbeddedLanguageData(this.languageId, this.state));
309
- }
310
- }
311
- class MonarchLineStateFactory {
312
- static { this._INSTANCE = ( new MonarchLineStateFactory(CACHE_STACK_DEPTH)); }
313
- static create(stack, embeddedLanguageData) {
314
- return this._INSTANCE.create(stack, embeddedLanguageData);
315
- }
316
- constructor(maxCacheDepth) {
317
- this._maxCacheDepth = maxCacheDepth;
318
- this._entries = Object.create(null);
319
- }
320
- create(stack, embeddedLanguageData) {
321
- if (embeddedLanguageData !== null) {
322
- return ( new MonarchLineState(stack, embeddedLanguageData));
323
- }
324
- if (stack !== null && stack.depth >= this._maxCacheDepth) {
325
- return ( new MonarchLineState(stack, embeddedLanguageData));
326
- }
327
- const stackElementId = MonarchStackElement.getStackElementId(stack);
328
- let result = this._entries[stackElementId];
329
- if (result) {
330
- return result;
331
- }
332
- result = ( new MonarchLineState(stack, null));
333
- this._entries[stackElementId] = result;
334
- return result;
335
- }
336
- }
337
- class MonarchLineState {
338
- constructor(stack, embeddedLanguageData) {
339
- this.stack = stack;
340
- this.embeddedLanguageData = embeddedLanguageData;
341
- }
342
- clone() {
343
- const embeddedlanguageDataClone = this.embeddedLanguageData ? this.embeddedLanguageData.clone() : null;
344
- if (embeddedlanguageDataClone === this.embeddedLanguageData) {
345
- return this;
346
- }
347
- return MonarchLineStateFactory.create(this.stack, this.embeddedLanguageData);
348
- }
349
- equals(other) {
350
- if (!(other instanceof MonarchLineState)) {
351
- return false;
352
- }
353
- if (!this.stack.equals(other.stack)) {
354
- return false;
355
- }
356
- if (this.embeddedLanguageData === null && other.embeddedLanguageData === null) {
357
- return true;
358
- }
359
- if (this.embeddedLanguageData === null || other.embeddedLanguageData === null) {
360
- return false;
361
- }
362
- return this.embeddedLanguageData.equals(other.embeddedLanguageData);
363
- }
364
- }
365
- class MonarchClassicTokensCollector {
366
- constructor() {
367
- this._tokens = [];
368
- this._languageId = null;
369
- this._lastTokenType = null;
370
- this._lastTokenLanguage = null;
371
- }
372
- enterLanguage(languageId) {
373
- this._languageId = languageId;
374
- }
375
- emit(startOffset, type) {
376
- if (this._lastTokenType === type && this._lastTokenLanguage === this._languageId) {
377
- return;
378
- }
379
- this._lastTokenType = type;
380
- this._lastTokenLanguage = this._languageId;
381
- this._tokens.push(new Token$1(startOffset, type, this._languageId));
382
- }
383
- nestedLanguageTokenize(embeddedLanguageLine, hasEOL, embeddedLanguageData, offsetDelta) {
384
- const nestedLanguageId = embeddedLanguageData.languageId;
385
- const embeddedModeState = embeddedLanguageData.state;
386
- const nestedLanguageTokenizationSupport = TokenizationRegistry.get(nestedLanguageId);
387
- if (!nestedLanguageTokenizationSupport) {
388
- this.enterLanguage(nestedLanguageId);
389
- this.emit(offsetDelta, '');
390
- return embeddedModeState;
391
- }
392
- const nestedResult = nestedLanguageTokenizationSupport.tokenize(embeddedLanguageLine, hasEOL, embeddedModeState);
393
- if (offsetDelta !== 0) {
394
- for (const token of nestedResult.tokens) {
395
- this._tokens.push(new Token$1(token.offset + offsetDelta, token.type, token.language));
396
- }
397
- }
398
- else {
399
- this._tokens = this._tokens.concat(nestedResult.tokens);
400
- }
401
- this._lastTokenType = null;
402
- this._lastTokenLanguage = null;
403
- this._languageId = null;
404
- return nestedResult.endState;
405
- }
406
- finalize(endState) {
407
- return new TokenizationResult(this._tokens, endState);
408
- }
409
- }
410
- class MonarchModernTokensCollector {
411
- constructor(languageService, theme) {
412
- this._languageService = languageService;
413
- this._theme = theme;
414
- this._prependTokens = null;
415
- this._tokens = [];
416
- this._currentLanguageId = 0 ;
417
- this._lastTokenMetadata = 0;
418
- }
419
- enterLanguage(languageId) {
420
- this._currentLanguageId = this._languageService.languageIdCodec.encodeLanguageId(languageId);
421
- }
422
- emit(startOffset, type) {
423
- const metadata = this._theme.match(this._currentLanguageId, type) | 1024 ;
424
- if (this._lastTokenMetadata === metadata) {
425
- return;
426
- }
427
- this._lastTokenMetadata = metadata;
428
- this._tokens.push(startOffset);
429
- this._tokens.push(metadata);
430
- }
431
- static _merge(a, b, c) {
432
- const aLen = (a !== null ? a.length : 0);
433
- const bLen = b.length;
434
- const cLen = (c !== null ? c.length : 0);
435
- if (aLen === 0 && bLen === 0 && cLen === 0) {
436
- return ( new Uint32Array(0));
437
- }
438
- if (aLen === 0 && bLen === 0) {
439
- return c;
440
- }
441
- if (bLen === 0 && cLen === 0) {
442
- return a;
443
- }
444
- const result = ( new Uint32Array(aLen + bLen + cLen));
445
- if (a !== null) {
446
- result.set(a);
447
- }
448
- for (let i = 0; i < bLen; i++) {
449
- result[aLen + i] = b[i];
450
- }
451
- if (c !== null) {
452
- result.set(c, aLen + bLen);
453
- }
454
- return result;
455
- }
456
- nestedLanguageTokenize(embeddedLanguageLine, hasEOL, embeddedLanguageData, offsetDelta) {
457
- const nestedLanguageId = embeddedLanguageData.languageId;
458
- const embeddedModeState = embeddedLanguageData.state;
459
- const nestedLanguageTokenizationSupport = TokenizationRegistry.get(nestedLanguageId);
460
- if (!nestedLanguageTokenizationSupport) {
461
- this.enterLanguage(nestedLanguageId);
462
- this.emit(offsetDelta, '');
463
- return embeddedModeState;
464
- }
465
- const nestedResult = nestedLanguageTokenizationSupport.tokenizeEncoded(embeddedLanguageLine, hasEOL, embeddedModeState);
466
- if (offsetDelta !== 0) {
467
- for (let i = 0, len = nestedResult.tokens.length; i < len; i += 2) {
468
- nestedResult.tokens[i] += offsetDelta;
469
- }
470
- }
471
- this._prependTokens = MonarchModernTokensCollector._merge(this._prependTokens, this._tokens, nestedResult.tokens);
472
- this._tokens = [];
473
- this._currentLanguageId = 0;
474
- this._lastTokenMetadata = 0;
475
- return nestedResult.endState;
476
- }
477
- finalize(endState) {
478
- return new EncodedTokenizationResult(MonarchModernTokensCollector._merge(this._prependTokens, this._tokens, null), endState);
479
- }
480
- }
481
- let MonarchTokenizer = MonarchTokenizer_1 = class MonarchTokenizer extends Disposable {
482
- constructor(languageService, standaloneThemeService, languageId, lexer, _configurationService) {
483
- super();
484
- this._configurationService = _configurationService;
485
- this._languageService = languageService;
486
- this._standaloneThemeService = standaloneThemeService;
487
- this._languageId = languageId;
488
- this._lexer = lexer;
489
- this._embeddedLanguages = Object.create(null);
490
- this.embeddedLoaded = Promise.resolve(undefined);
491
- let emitting = false;
492
- this._register(TokenizationRegistry.onDidChange((e) => {
493
- if (emitting) {
494
- return;
495
- }
496
- let isOneOfMyEmbeddedModes = false;
497
- for (let i = 0, len = e.changedLanguages.length; i < len; i++) {
498
- const language = e.changedLanguages[i];
499
- if (this._embeddedLanguages[language]) {
500
- isOneOfMyEmbeddedModes = true;
501
- break;
502
- }
503
- }
504
- if (isOneOfMyEmbeddedModes) {
505
- emitting = true;
506
- TokenizationRegistry.handleChange([this._languageId]);
507
- emitting = false;
508
- }
509
- }));
510
- this._maxTokenizationLineLength = this._configurationService.getValue('editor.maxTokenizationLineLength', {
511
- overrideIdentifier: this._languageId
512
- });
513
- this._register(this._configurationService.onDidChangeConfiguration(e => {
514
- if (e.affectsConfiguration('editor.maxTokenizationLineLength')) {
515
- this._maxTokenizationLineLength = this._configurationService.getValue('editor.maxTokenizationLineLength', {
516
- overrideIdentifier: this._languageId
517
- });
518
- }
519
- }));
520
- }
521
- getLoadStatus() {
522
- const promises = [];
523
- for (const nestedLanguageId in this._embeddedLanguages) {
524
- const tokenizationSupport = TokenizationRegistry.get(nestedLanguageId);
525
- if (tokenizationSupport) {
526
- if (tokenizationSupport instanceof MonarchTokenizer_1) {
527
- const nestedModeStatus = tokenizationSupport.getLoadStatus();
528
- if (nestedModeStatus.loaded === false) {
529
- promises.push(nestedModeStatus.promise);
530
- }
531
- }
532
- continue;
533
- }
534
- if (!TokenizationRegistry.isResolved(nestedLanguageId)) {
535
- promises.push(TokenizationRegistry.getOrCreate(nestedLanguageId));
536
- }
537
- }
538
- if (promises.length === 0) {
539
- return {
540
- loaded: true
541
- };
542
- }
543
- return {
544
- loaded: false,
545
- promise: Promise.all(promises).then(_ => undefined)
546
- };
547
- }
548
- getInitialState() {
549
- const rootState = MonarchStackElementFactory.create(null, this._lexer.start);
550
- return MonarchLineStateFactory.create(rootState, null);
551
- }
552
- tokenize(line, hasEOL, lineState) {
553
- if (line.length >= this._maxTokenizationLineLength) {
554
- return nullTokenize(this._languageId, lineState);
555
- }
556
- const tokensCollector = ( new MonarchClassicTokensCollector());
557
- const endLineState = this._tokenize(line, hasEOL, lineState, tokensCollector);
558
- return tokensCollector.finalize(endLineState);
559
- }
560
- tokenizeEncoded(line, hasEOL, lineState) {
561
- if (line.length >= this._maxTokenizationLineLength) {
562
- return nullTokenizeEncoded(this._languageService.languageIdCodec.encodeLanguageId(this._languageId), lineState);
563
- }
564
- const tokensCollector = ( new MonarchModernTokensCollector(
565
- this._languageService,
566
- this._standaloneThemeService.getColorTheme().tokenTheme
567
- ));
568
- const endLineState = this._tokenize(line, hasEOL, lineState, tokensCollector);
569
- return tokensCollector.finalize(endLineState);
570
- }
571
- _tokenize(line, hasEOL, lineState, collector) {
572
- if (lineState.embeddedLanguageData) {
573
- return this._nestedTokenize(line, hasEOL, lineState, 0, collector);
574
- }
575
- else {
576
- return this._myTokenize(line, hasEOL, lineState, 0, collector);
577
- }
578
- }
579
- _findLeavingNestedLanguageOffset(line, state) {
580
- let rules = this._lexer.tokenizer[state.stack.state];
581
- if (!rules) {
582
- rules = findRules(this._lexer, state.stack.state);
583
- if (!rules) {
584
- throw createError(this._lexer, 'tokenizer state is not defined: ' + state.stack.state);
585
- }
586
- }
587
- let popOffset = -1;
588
- let hasEmbeddedPopRule = false;
589
- for (const rule of rules) {
590
- if (!isIAction(rule.action) || rule.action.nextEmbedded !== '@pop') {
591
- continue;
592
- }
593
- hasEmbeddedPopRule = true;
594
- let regex = rule.resolveRegex(state.stack.state);
595
- const regexSource = regex.source;
596
- if (regexSource.substr(0, 4) === '^(?:' && regexSource.substr(regexSource.length - 1, 1) === ')') {
597
- const flags = (regex.ignoreCase ? 'i' : '') + (regex.unicode ? 'u' : '');
598
- regex = ( new RegExp(regexSource.substr(4, regexSource.length - 5), flags));
599
- }
600
- const result = line.search(regex);
601
- if (result === -1 || (result !== 0 && rule.matchOnlyAtLineStart)) {
602
- continue;
603
- }
604
- if (popOffset === -1 || result < popOffset) {
605
- popOffset = result;
606
- }
607
- }
608
- if (!hasEmbeddedPopRule) {
609
- throw createError(this._lexer, 'no rule containing nextEmbedded: "@pop" in tokenizer embedded state: ' + state.stack.state);
610
- }
611
- return popOffset;
612
- }
613
- _nestedTokenize(line, hasEOL, lineState, offsetDelta, tokensCollector) {
614
- const popOffset = this._findLeavingNestedLanguageOffset(line, lineState);
615
- if (popOffset === -1) {
616
- const nestedEndState = tokensCollector.nestedLanguageTokenize(line, hasEOL, lineState.embeddedLanguageData, offsetDelta);
617
- return MonarchLineStateFactory.create(lineState.stack, ( new EmbeddedLanguageData(lineState.embeddedLanguageData.languageId, nestedEndState)));
618
- }
619
- const nestedLanguageLine = line.substring(0, popOffset);
620
- if (nestedLanguageLine.length > 0) {
621
- tokensCollector.nestedLanguageTokenize(nestedLanguageLine, false, lineState.embeddedLanguageData, offsetDelta);
622
- }
623
- const restOfTheLine = line.substring(popOffset);
624
- return this._myTokenize(restOfTheLine, hasEOL, lineState, offsetDelta + popOffset, tokensCollector);
625
- }
626
- _safeRuleName(rule) {
627
- if (rule) {
628
- return rule.name;
629
- }
630
- return '(unknown)';
631
- }
632
- _myTokenize(lineWithoutLF, hasEOL, lineState, offsetDelta, tokensCollector) {
633
- tokensCollector.enterLanguage(this._languageId);
634
- const lineWithoutLFLength = lineWithoutLF.length;
635
- const line = (hasEOL && this._lexer.includeLF ? lineWithoutLF + '\n' : lineWithoutLF);
636
- const lineLength = line.length;
637
- let embeddedLanguageData = lineState.embeddedLanguageData;
638
- let stack = lineState.stack;
639
- let pos = 0;
640
- let groupMatching = null;
641
- let forceEvaluation = true;
642
- while (forceEvaluation || pos < lineLength) {
643
- const pos0 = pos;
644
- const stackLen0 = stack.depth;
645
- const groupLen0 = groupMatching ? groupMatching.groups.length : 0;
646
- const state = stack.state;
647
- let matches = null;
648
- let matched = null;
649
- let action = null;
650
- let rule = null;
651
- let enteringEmbeddedLanguage = null;
652
- if (groupMatching) {
653
- matches = groupMatching.matches;
654
- const groupEntry = groupMatching.groups.shift();
655
- matched = groupEntry.matched;
656
- action = groupEntry.action;
657
- rule = groupMatching.rule;
658
- if (groupMatching.groups.length === 0) {
659
- groupMatching = null;
660
- }
661
- }
662
- else {
663
- if (!forceEvaluation && pos >= lineLength) {
664
- break;
665
- }
666
- forceEvaluation = false;
667
- let rules = this._lexer.tokenizer[state];
668
- if (!rules) {
669
- rules = findRules(this._lexer, state);
670
- if (!rules) {
671
- throw createError(this._lexer, 'tokenizer state is not defined: ' + state);
672
- }
673
- }
674
- const restOfLine = line.substr(pos);
675
- for (const rule of rules) {
676
- if (pos === 0 || !rule.matchOnlyAtLineStart) {
677
- matches = restOfLine.match(rule.resolveRegex(state));
678
- if (matches) {
679
- matched = matches[0];
680
- action = rule.action;
681
- break;
682
- }
683
- }
684
- }
685
- }
686
- if (!matches) {
687
- matches = [''];
688
- matched = '';
689
- }
690
- if (!action) {
691
- if (pos < lineLength) {
692
- matches = [line.charAt(pos)];
693
- matched = matches[0];
694
- }
695
- action = this._lexer.defaultToken;
696
- }
697
- if (matched === null) {
698
- break;
699
- }
700
- pos += matched.length;
701
- while (isFuzzyAction(action) && isIAction(action) && action.test) {
702
- action = action.test(matched, matches, state, pos === lineLength);
703
- }
704
- let result = null;
705
- if (typeof action === 'string' || Array.isArray(action)) {
706
- result = action;
707
- }
708
- else if (action.group) {
709
- result = action.group;
710
- }
711
- else if (action.token !== null && action.token !== undefined) {
712
- if (action.tokenSubst) {
713
- result = substituteMatches(this._lexer, action.token, matched, matches, state);
714
- }
715
- else {
716
- result = action.token;
717
- }
718
- if (action.nextEmbedded) {
719
- if (action.nextEmbedded === '@pop') {
720
- if (!embeddedLanguageData) {
721
- throw createError(this._lexer, 'cannot pop embedded language if not inside one');
722
- }
723
- embeddedLanguageData = null;
724
- }
725
- else if (embeddedLanguageData) {
726
- throw createError(this._lexer, 'cannot enter embedded language from within an embedded language');
727
- }
728
- else {
729
- enteringEmbeddedLanguage = substituteMatches(this._lexer, action.nextEmbedded, matched, matches, state);
730
- }
731
- }
732
- if (action.goBack) {
733
- pos = Math.max(0, pos - action.goBack);
734
- }
735
- if (action.switchTo && typeof action.switchTo === 'string') {
736
- let nextState = substituteMatches(this._lexer, action.switchTo, matched, matches, state);
737
- if (nextState[0] === '@') {
738
- nextState = nextState.substr(1);
739
- }
740
- if (!findRules(this._lexer, nextState)) {
741
- throw createError(this._lexer, 'trying to switch to a state \'' + nextState + '\' that is undefined in rule: ' + this._safeRuleName(rule));
742
- }
743
- else {
744
- stack = stack.switchTo(nextState);
745
- }
746
- }
747
- else if (action.transform && typeof action.transform === 'function') {
748
- throw createError(this._lexer, 'action.transform not supported');
749
- }
750
- else if (action.next) {
751
- if (action.next === '@push') {
752
- if (stack.depth >= this._lexer.maxStack) {
753
- throw createError(this._lexer, 'maximum tokenizer stack size reached: [' +
754
- stack.state + ',' + stack.parent.state + ',...]');
755
- }
756
- else {
757
- stack = stack.push(state);
758
- }
759
- }
760
- else if (action.next === '@pop') {
761
- if (stack.depth <= 1) {
762
- throw createError(this._lexer, 'trying to pop an empty stack in rule: ' + this._safeRuleName(rule));
763
- }
764
- else {
765
- stack = stack.pop();
766
- }
767
- }
768
- else if (action.next === '@popall') {
769
- stack = stack.popall();
770
- }
771
- else {
772
- let nextState = substituteMatches(this._lexer, action.next, matched, matches, state);
773
- if (nextState[0] === '@') {
774
- nextState = nextState.substr(1);
775
- }
776
- if (!findRules(this._lexer, nextState)) {
777
- throw createError(this._lexer, 'trying to set a next state \'' + nextState + '\' that is undefined in rule: ' + this._safeRuleName(rule));
778
- }
779
- else {
780
- stack = stack.push(nextState);
781
- }
782
- }
783
- }
784
- if (action.log && typeof (action.log) === 'string') {
785
- log(this._lexer, this._lexer.languageId + ': ' + substituteMatches(this._lexer, action.log, matched, matches, state));
786
- }
787
- }
788
- if (result === null) {
789
- throw createError(this._lexer, 'lexer rule has no well-defined action in rule: ' + this._safeRuleName(rule));
790
- }
791
- const computeNewStateForEmbeddedLanguage = (enteringEmbeddedLanguage) => {
792
- const languageId = (this._languageService.getLanguageIdByLanguageName(enteringEmbeddedLanguage)
793
- || this._languageService.getLanguageIdByMimeType(enteringEmbeddedLanguage)
794
- || enteringEmbeddedLanguage);
795
- const embeddedLanguageData = this._getNestedEmbeddedLanguageData(languageId);
796
- if (pos < lineLength) {
797
- const restOfLine = lineWithoutLF.substr(pos);
798
- return this._nestedTokenize(restOfLine, hasEOL, MonarchLineStateFactory.create(stack, embeddedLanguageData), offsetDelta + pos, tokensCollector);
799
- }
800
- else {
801
- return MonarchLineStateFactory.create(stack, embeddedLanguageData);
802
- }
803
- };
804
- if (Array.isArray(result)) {
805
- if (groupMatching && groupMatching.groups.length > 0) {
806
- throw createError(this._lexer, 'groups cannot be nested: ' + this._safeRuleName(rule));
807
- }
808
- if (matches.length !== result.length + 1) {
809
- throw createError(this._lexer, 'matched number of groups does not match the number of actions in rule: ' + this._safeRuleName(rule));
810
- }
811
- let totalLen = 0;
812
- for (let i = 1; i < matches.length; i++) {
813
- totalLen += matches[i].length;
814
- }
815
- if (totalLen !== matched.length) {
816
- throw createError(this._lexer, 'with groups, all characters should be matched in consecutive groups in rule: ' + this._safeRuleName(rule));
817
- }
818
- groupMatching = {
819
- rule: rule,
820
- matches: matches,
821
- groups: []
822
- };
823
- for (let i = 0; i < result.length; i++) {
824
- groupMatching.groups[i] = {
825
- action: result[i],
826
- matched: matches[i + 1]
827
- };
828
- }
829
- pos -= matched.length;
830
- continue;
831
- }
832
- else {
833
- if (result === '@rematch') {
834
- pos -= matched.length;
835
- matched = '';
836
- matches = null;
837
- result = '';
838
- if (enteringEmbeddedLanguage !== null) {
839
- return computeNewStateForEmbeddedLanguage(enteringEmbeddedLanguage);
840
- }
841
- }
842
- if (matched.length === 0) {
843
- if (lineLength === 0 || stackLen0 !== stack.depth || state !== stack.state || (!groupMatching ? 0 : groupMatching.groups.length) !== groupLen0) {
844
- continue;
845
- }
846
- else {
847
- throw createError(this._lexer, 'no progress in tokenizer in rule: ' + this._safeRuleName(rule));
848
- }
849
- }
850
- let tokenType = null;
851
- if (isString(result) && result.indexOf('@brackets') === 0) {
852
- const rest = result.substr('@brackets'.length);
853
- const bracket = findBracket(this._lexer, matched);
854
- if (!bracket) {
855
- throw createError(this._lexer, '@brackets token returned but no bracket defined as: ' + matched);
856
- }
857
- tokenType = sanitize(bracket.token + rest);
858
- }
859
- else {
860
- const token = (result === '' ? '' : result + this._lexer.tokenPostfix);
861
- tokenType = sanitize(token);
862
- }
863
- if (pos0 < lineWithoutLFLength) {
864
- tokensCollector.emit(pos0 + offsetDelta, tokenType);
865
- }
866
- }
867
- if (enteringEmbeddedLanguage !== null) {
868
- return computeNewStateForEmbeddedLanguage(enteringEmbeddedLanguage);
869
- }
870
- }
871
- return MonarchLineStateFactory.create(stack, embeddedLanguageData);
872
- }
873
- _getNestedEmbeddedLanguageData(languageId) {
874
- if (!this._languageService.isRegisteredLanguageId(languageId)) {
875
- return ( new EmbeddedLanguageData(languageId, NullState));
876
- }
877
- if (languageId !== this._languageId) {
878
- this._languageService.requestBasicLanguageFeatures(languageId);
879
- TokenizationRegistry.getOrCreate(languageId);
880
- this._embeddedLanguages[languageId] = true;
881
- }
882
- const tokenizationSupport = TokenizationRegistry.get(languageId);
883
- if (tokenizationSupport) {
884
- return ( new EmbeddedLanguageData(languageId, tokenizationSupport.getInitialState()));
885
- }
886
- return ( new EmbeddedLanguageData(languageId, NullState));
887
- }
888
- };
889
- MonarchTokenizer = MonarchTokenizer_1 = ( __decorate([
890
- ( __param(4, IConfigurationService))
891
- ], MonarchTokenizer));
892
- function findBracket(lexer, matched) {
893
- if (!matched) {
894
- return null;
895
- }
896
- matched = fixCase(lexer, matched);
897
- const brackets = lexer.brackets;
898
- for (const bracket of brackets) {
899
- if (bracket.open === matched) {
900
- return { token: bracket.token, bracketType: 1 };
901
- }
902
- else if (bracket.close === matched) {
903
- return { token: bracket.token, bracketType: -1 };
904
- }
905
- }
906
- return null;
907
- }
908
-
909
- const ttPolicy = createTrustedTypesPolicy('standaloneColorizer', { createHTML: value => value });
910
- class Colorizer {
911
- static colorizeElement(themeService, languageService, domNode, options) {
912
- options = options || {};
913
- const theme = options.theme || 'vs';
914
- const mimeType = options.mimeType || domNode.getAttribute('lang') || domNode.getAttribute('data-lang');
915
- if (!mimeType) {
916
- console.error('Mode not detected');
917
- return Promise.resolve();
918
- }
919
- const languageId = languageService.getLanguageIdByMimeType(mimeType) || mimeType;
920
- themeService.setTheme(theme);
921
- const text = domNode.firstChild ? domNode.firstChild.nodeValue : '';
922
- domNode.className += ' ' + theme;
923
- const render = (str) => {
924
- const trustedhtml = ttPolicy?.createHTML(str) ?? str;
925
- domNode.innerHTML = trustedhtml;
926
- };
927
- return this.colorize(languageService, text || '', languageId, options).then(render, (err) => console.error(err));
928
- }
929
- static async colorize(languageService, text, languageId, options) {
930
- const languageIdCodec = languageService.languageIdCodec;
931
- let tabSize = 4;
932
- if (options && typeof options.tabSize === 'number') {
933
- tabSize = options.tabSize;
934
- }
935
- if (startsWithUTF8BOM(text)) {
936
- text = text.substr(1);
937
- }
938
- const lines = splitLines(text);
939
- if (!languageService.isRegisteredLanguageId(languageId)) {
940
- return _fakeColorize(lines, tabSize, languageIdCodec);
941
- }
942
- const tokenizationSupport = await TokenizationRegistry.getOrCreate(languageId);
943
- if (tokenizationSupport) {
944
- return _colorize(lines, tabSize, tokenizationSupport, languageIdCodec);
945
- }
946
- return _fakeColorize(lines, tabSize, languageIdCodec);
947
- }
948
- static colorizeLine(line, mightContainNonBasicASCII, mightContainRTL, tokens, tabSize = 4) {
949
- const isBasicASCII = ViewLineRenderingData.isBasicASCII(line, mightContainNonBasicASCII);
950
- const containsRTL = ViewLineRenderingData.containsRTL(line, isBasicASCII, mightContainRTL);
951
- const renderResult = renderViewLine2(( new RenderLineInput(
952
- false,
953
- true,
954
- line,
955
- false,
956
- isBasicASCII,
957
- containsRTL,
958
- 0,
959
- tokens,
960
- [],
961
- tabSize,
962
- 0,
963
- 0,
964
- 0,
965
- 0,
966
- -1,
967
- 'none',
968
- false,
969
- false,
970
- null
971
- )));
972
- return renderResult.html;
973
- }
974
- static colorizeModelLine(model, lineNumber, tabSize = 4) {
975
- const content = model.getLineContent(lineNumber);
976
- model.tokenization.forceTokenization(lineNumber);
977
- const tokens = model.tokenization.getLineTokens(lineNumber);
978
- const inflatedTokens = tokens.inflate();
979
- return this.colorizeLine(content, model.mightContainNonBasicASCII(), model.mightContainRTL(), inflatedTokens, tabSize);
980
- }
981
- }
982
- function _colorize(lines, tabSize, tokenizationSupport, languageIdCodec) {
983
- return ( new Promise((c, e) => {
984
- const execute = () => {
985
- const result = _actualColorize(lines, tabSize, tokenizationSupport, languageIdCodec);
986
- if (tokenizationSupport instanceof MonarchTokenizer) {
987
- const status = tokenizationSupport.getLoadStatus();
988
- if (status.loaded === false) {
989
- status.promise.then(execute, e);
990
- return;
991
- }
992
- }
993
- c(result);
994
- };
995
- execute();
996
- }));
997
- }
998
- function _fakeColorize(lines, tabSize, languageIdCodec) {
999
- let html = [];
1000
- const defaultMetadata = (((0 << 11) )
1001
- | ((1 << 15) )
1002
- | ((2 << 24) )) >>> 0;
1003
- const tokens = ( new Uint32Array(2));
1004
- tokens[0] = 0;
1005
- tokens[1] = defaultMetadata;
1006
- for (let i = 0, length = lines.length; i < length; i++) {
1007
- const line = lines[i];
1008
- tokens[0] = line.length;
1009
- const lineTokens = ( new LineTokens(tokens, line, languageIdCodec));
1010
- const isBasicASCII = ViewLineRenderingData.isBasicASCII(line, true);
1011
- const containsRTL = ViewLineRenderingData.containsRTL(line, isBasicASCII, true);
1012
- const renderResult = renderViewLine2(( new RenderLineInput(
1013
- false,
1014
- true,
1015
- line,
1016
- false,
1017
- isBasicASCII,
1018
- containsRTL,
1019
- 0,
1020
- lineTokens,
1021
- [],
1022
- tabSize,
1023
- 0,
1024
- 0,
1025
- 0,
1026
- 0,
1027
- -1,
1028
- 'none',
1029
- false,
1030
- false,
1031
- null
1032
- )));
1033
- html = html.concat(renderResult.html);
1034
- html.push('<br/>');
1035
- }
1036
- return html.join('');
1037
- }
1038
- function _actualColorize(lines, tabSize, tokenizationSupport, languageIdCodec) {
1039
- let html = [];
1040
- let state = tokenizationSupport.getInitialState();
1041
- for (let i = 0, length = lines.length; i < length; i++) {
1042
- const line = lines[i];
1043
- const tokenizeResult = tokenizationSupport.tokenizeEncoded(line, true, state);
1044
- LineTokens.convertToEndOffset(tokenizeResult.tokens, line.length);
1045
- const lineTokens = ( new LineTokens(tokenizeResult.tokens, line, languageIdCodec));
1046
- const isBasicASCII = ViewLineRenderingData.isBasicASCII(line, true);
1047
- const containsRTL = ViewLineRenderingData.containsRTL(line, isBasicASCII, true);
1048
- const renderResult = renderViewLine2(( new RenderLineInput(
1049
- false,
1050
- true,
1051
- line,
1052
- false,
1053
- isBasicASCII,
1054
- containsRTL,
1055
- 0,
1056
- lineTokens.inflate(),
1057
- [],
1058
- tabSize,
1059
- 0,
1060
- 0,
1061
- 0,
1062
- 0,
1063
- -1,
1064
- 'none',
1065
- false,
1066
- false,
1067
- null
1068
- )));
1069
- html = html.concat(renderResult.html);
1070
- html.push('<br/>');
1071
- state = tokenizeResult.endState;
1072
- }
1073
- return html.join('');
1074
- }
1075
-
1076
- function create(domElement, options, override) {
1077
- const instantiationService = StandaloneServices.initialize(override || {});
1078
- return instantiationService.createInstance(StandaloneEditor, domElement, options);
1079
- }
1080
- function onDidCreateEditor(listener) {
1081
- const codeEditorService = StandaloneServices.get(ICodeEditorService);
1082
- return codeEditorService.onCodeEditorAdd((editor) => {
1083
- listener(editor);
1084
- });
1085
- }
1086
- function onDidCreateDiffEditor(listener) {
1087
- const codeEditorService = StandaloneServices.get(ICodeEditorService);
1088
- return codeEditorService.onDiffEditorAdd((editor) => {
1089
- listener(editor);
1090
- });
1091
- }
1092
- function getEditors() {
1093
- const codeEditorService = StandaloneServices.get(ICodeEditorService);
1094
- return codeEditorService.listCodeEditors();
1095
- }
1096
- function getDiffEditors() {
1097
- const codeEditorService = StandaloneServices.get(ICodeEditorService);
1098
- return codeEditorService.listDiffEditors();
1099
- }
1100
- function createDiffEditor(domElement, options, override) {
1101
- const instantiationService = StandaloneServices.initialize(override || {});
1102
- return instantiationService.createInstance(StandaloneDiffEditor2, domElement, options);
1103
- }
1104
- function createMultiFileDiffEditor(domElement, override) {
1105
- const instantiationService = StandaloneServices.initialize(override || {});
1106
- return ( new MultiDiffEditorWidget(domElement, {}, instantiationService));
1107
- }
1108
- function addCommand(descriptor) {
1109
- if ((typeof descriptor.id !== 'string') || (typeof descriptor.run !== 'function')) {
1110
- throw ( new Error('Invalid command descriptor, `id` and `run` are required properties!'));
1111
- }
1112
- return CommandsRegistry.registerCommand(descriptor.id, descriptor.run);
1113
- }
1114
- function addEditorAction(descriptor) {
1115
- if ((typeof descriptor.id !== 'string') || (typeof descriptor.label !== 'string') || (typeof descriptor.run !== 'function')) {
1116
- throw ( new Error(
1117
- 'Invalid action descriptor, `id`, `label` and `run` are required properties!'
1118
- ));
1119
- }
1120
- const precondition = ContextKeyExpr.deserialize(descriptor.precondition);
1121
- const run = (accessor, ...args) => {
1122
- return EditorCommand.runEditorCommand(accessor, args, precondition, (accessor, editor, args) => Promise.resolve(descriptor.run(editor, ...args)));
1123
- };
1124
- const toDispose = ( new DisposableStore());
1125
- toDispose.add(CommandsRegistry.registerCommand(descriptor.id, run));
1126
- if (descriptor.contextMenuGroupId) {
1127
- const menuItem = {
1128
- command: {
1129
- id: descriptor.id,
1130
- title: descriptor.label
1131
- },
1132
- when: precondition,
1133
- group: descriptor.contextMenuGroupId,
1134
- order: descriptor.contextMenuOrder || 0
1135
- };
1136
- toDispose.add(MenuRegistry.appendMenuItem(MenuId.EditorContext, menuItem));
1137
- }
1138
- if (Array.isArray(descriptor.keybindings)) {
1139
- const keybindingService = StandaloneServices.get(IKeybindingService);
1140
- if (!(keybindingService instanceof StandaloneKeybindingService)) {
1141
- console.warn('Cannot add keybinding because the editor is configured with an unrecognized KeybindingService');
1142
- }
1143
- else {
1144
- const keybindingsWhen = ( ContextKeyExpr.and(precondition, ContextKeyExpr.deserialize(descriptor.keybindingContext)));
1145
- toDispose.add(keybindingService.addDynamicKeybindings(( descriptor.keybindings.map((keybinding) => {
1146
- return {
1147
- keybinding,
1148
- command: descriptor.id,
1149
- when: keybindingsWhen
1150
- };
1151
- }))));
1152
- }
1153
- }
1154
- return toDispose;
1155
- }
1156
- function addKeybindingRule(rule) {
1157
- return addKeybindingRules([rule]);
1158
- }
1159
- function addKeybindingRules(rules) {
1160
- const keybindingService = StandaloneServices.get(IKeybindingService);
1161
- if (!(keybindingService instanceof StandaloneKeybindingService)) {
1162
- console.warn('Cannot add keybinding because the editor is configured with an unrecognized KeybindingService');
1163
- return Disposable.None;
1164
- }
1165
- return keybindingService.addDynamicKeybindings(( rules.map((rule) => {
1166
- return {
1167
- keybinding: rule.keybinding,
1168
- command: rule.command,
1169
- commandArgs: rule.commandArgs,
1170
- when: ContextKeyExpr.deserialize(rule.when),
1171
- };
1172
- })));
1173
- }
1174
- function createModel(value, language, uri) {
1175
- const languageService = StandaloneServices.get(ILanguageService);
1176
- const languageId = languageService.getLanguageIdByMimeType(language) || language;
1177
- return createTextModel(StandaloneServices.get(IModelService), languageService, value, languageId, uri);
1178
- }
1179
- function setModelLanguage(model, mimeTypeOrLanguageId) {
1180
- const languageService = StandaloneServices.get(ILanguageService);
1181
- const languageId = languageService.getLanguageIdByMimeType(mimeTypeOrLanguageId) || mimeTypeOrLanguageId || PLAINTEXT_LANGUAGE_ID;
1182
- model.setLanguage(languageService.createById(languageId));
1183
- }
1184
- function setModelMarkers(model, owner, markers) {
1185
- if (model) {
1186
- const markerService = StandaloneServices.get(IMarkerService);
1187
- markerService.changeOne(owner, model.uri, markers);
1188
- }
1189
- }
1190
- function removeAllMarkers(owner) {
1191
- const markerService = StandaloneServices.get(IMarkerService);
1192
- markerService.changeAll(owner, []);
1193
- }
1194
- function getModelMarkers(filter) {
1195
- const markerService = StandaloneServices.get(IMarkerService);
1196
- return markerService.read(filter);
1197
- }
1198
- function onDidChangeMarkers(listener) {
1199
- const markerService = StandaloneServices.get(IMarkerService);
1200
- return markerService.onMarkerChanged(listener);
1201
- }
1202
- function getModel(uri) {
1203
- const modelService = StandaloneServices.get(IModelService);
1204
- return modelService.getModel(uri);
1205
- }
1206
- function getModels() {
1207
- const modelService = StandaloneServices.get(IModelService);
1208
- return modelService.getModels();
1209
- }
1210
- function onDidCreateModel(listener) {
1211
- const modelService = StandaloneServices.get(IModelService);
1212
- return modelService.onModelAdded(listener);
1213
- }
1214
- function onWillDisposeModel(listener) {
1215
- const modelService = StandaloneServices.get(IModelService);
1216
- return modelService.onModelRemoved(listener);
1217
- }
1218
- function onDidChangeModelLanguage(listener) {
1219
- const modelService = StandaloneServices.get(IModelService);
1220
- return modelService.onModelLanguageChanged((e) => {
1221
- listener({
1222
- model: e.model,
1223
- oldLanguage: e.oldLanguageId
1224
- });
1225
- });
1226
- }
1227
- function createWebWorker(opts) {
1228
- return createWebWorker$1(StandaloneServices.get(IModelService), opts);
1229
- }
1230
- function colorizeElement(domNode, options) {
1231
- const languageService = StandaloneServices.get(ILanguageService);
1232
- const themeService = StandaloneServices.get(IStandaloneThemeService);
1233
- return Colorizer.colorizeElement(themeService, languageService, domNode, options).then(() => {
1234
- themeService.registerEditorContainer(domNode);
1235
- });
1236
- }
1237
- function colorize(text, languageId, options) {
1238
- const languageService = StandaloneServices.get(ILanguageService);
1239
- const themeService = StandaloneServices.get(IStandaloneThemeService);
1240
- themeService.registerEditorContainer(mainWindow.document.body);
1241
- return Colorizer.colorize(languageService, text, languageId, options);
1242
- }
1243
- function colorizeModelLine(model, lineNumber, tabSize = 4) {
1244
- const themeService = StandaloneServices.get(IStandaloneThemeService);
1245
- themeService.registerEditorContainer(mainWindow.document.body);
1246
- return Colorizer.colorizeModelLine(model, lineNumber, tabSize);
1247
- }
1248
- function getSafeTokenizationSupport(language) {
1249
- const tokenizationSupport = TokenizationRegistry.get(language);
1250
- if (tokenizationSupport) {
1251
- return tokenizationSupport;
1252
- }
1253
- return {
1254
- getInitialState: () => NullState,
1255
- tokenize: (line, hasEOL, state) => nullTokenize(language, state)
1256
- };
1257
- }
1258
- function tokenize(text, languageId) {
1259
- TokenizationRegistry.getOrCreate(languageId);
1260
- const tokenizationSupport = getSafeTokenizationSupport(languageId);
1261
- const lines = splitLines(text);
1262
- const result = [];
1263
- let state = tokenizationSupport.getInitialState();
1264
- for (let i = 0, len = lines.length; i < len; i++) {
1265
- const line = lines[i];
1266
- const tokenizationResult = tokenizationSupport.tokenize(line, true, state);
1267
- result[i] = tokenizationResult.tokens;
1268
- state = tokenizationResult.endState;
1269
- }
1270
- return result;
1271
- }
1272
- function defineTheme(themeName, themeData) {
1273
- const standaloneThemeService = StandaloneServices.get(IStandaloneThemeService);
1274
- standaloneThemeService.defineTheme(themeName, themeData);
1275
- }
1276
- function setTheme(themeName) {
1277
- const standaloneThemeService = StandaloneServices.get(IStandaloneThemeService);
1278
- standaloneThemeService.setTheme(themeName);
1279
- }
1280
- function remeasureFonts() {
1281
- FontMeasurements.clearAllFontInfos();
1282
- }
1283
- function registerCommand(id, handler) {
1284
- return CommandsRegistry.registerCommand({ id, handler });
1285
- }
1286
- function registerLinkOpener(opener) {
1287
- const openerService = StandaloneServices.get(IOpenerService);
1288
- return openerService.registerOpener({
1289
- async open(resource) {
1290
- if (typeof resource === 'string') {
1291
- resource = ( URI.parse(resource));
1292
- }
1293
- return opener.open(resource);
1294
- }
1295
- });
1296
- }
1297
- function registerEditorOpener(opener) {
1298
- const codeEditorService = StandaloneServices.get(ICodeEditorService);
1299
- return codeEditorService.registerCodeEditorOpenHandler(async (input, source, sideBySide) => {
1300
- if (!source) {
1301
- return null;
1302
- }
1303
- const selection = input.options?.selection;
1304
- let selectionOrPosition;
1305
- if (selection && typeof selection.endLineNumber === 'number' && typeof selection.endColumn === 'number') {
1306
- selectionOrPosition = selection;
1307
- }
1308
- else if (selection) {
1309
- selectionOrPosition = { lineNumber: selection.startLineNumber, column: selection.startColumn };
1310
- }
1311
- if (await opener.openCodeEditor(source, input.resource, selectionOrPosition)) {
1312
- return source;
1313
- }
1314
- return null;
1315
- });
1316
- }
1317
- function createMonacoEditorAPI() {
1318
- return {
1319
- create: create,
1320
- getEditors: getEditors,
1321
- getDiffEditors: getDiffEditors,
1322
- onDidCreateEditor: onDidCreateEditor,
1323
- onDidCreateDiffEditor: onDidCreateDiffEditor,
1324
- createDiffEditor: createDiffEditor,
1325
- addCommand: addCommand,
1326
- addEditorAction: addEditorAction,
1327
- addKeybindingRule: addKeybindingRule,
1328
- addKeybindingRules: addKeybindingRules,
1329
- createModel: createModel,
1330
- setModelLanguage: setModelLanguage,
1331
- setModelMarkers: setModelMarkers,
1332
- getModelMarkers: getModelMarkers,
1333
- removeAllMarkers: removeAllMarkers,
1334
- onDidChangeMarkers: onDidChangeMarkers,
1335
- getModels: getModels,
1336
- getModel: getModel,
1337
- onDidCreateModel: onDidCreateModel,
1338
- onWillDisposeModel: onWillDisposeModel,
1339
- onDidChangeModelLanguage: onDidChangeModelLanguage,
1340
- createWebWorker: createWebWorker,
1341
- colorizeElement: colorizeElement,
1342
- colorize: colorize,
1343
- colorizeModelLine: colorizeModelLine,
1344
- tokenize: tokenize,
1345
- defineTheme: defineTheme,
1346
- setTheme: setTheme,
1347
- remeasureFonts: remeasureFonts,
1348
- registerCommand: registerCommand,
1349
- registerLinkOpener: registerLinkOpener,
1350
- registerEditorOpener: registerEditorOpener,
1351
- AccessibilitySupport: AccessibilitySupport,
1352
- ContentWidgetPositionPreference: ContentWidgetPositionPreference,
1353
- CursorChangeReason: CursorChangeReason,
1354
- DefaultEndOfLine: DefaultEndOfLine,
1355
- EditorAutoIndentStrategy: EditorAutoIndentStrategy,
1356
- EditorOption: EditorOption,
1357
- EndOfLinePreference: EndOfLinePreference,
1358
- EndOfLineSequence: EndOfLineSequence,
1359
- MinimapPosition: MinimapPosition,
1360
- MinimapSectionHeaderStyle: MinimapSectionHeaderStyle,
1361
- MouseTargetType: MouseTargetType,
1362
- OverlayWidgetPositionPreference: OverlayWidgetPositionPreference,
1363
- OverviewRulerLane: OverviewRulerLane,
1364
- GlyphMarginLane: GlyphMarginLane,
1365
- RenderLineNumbersType: RenderLineNumbersType,
1366
- RenderMinimap: RenderMinimap,
1367
- ScrollbarVisibility: ScrollbarVisibility,
1368
- ScrollType: ScrollType,
1369
- TextEditorCursorBlinkingStyle: TextEditorCursorBlinkingStyle,
1370
- TextEditorCursorStyle: TextEditorCursorStyle,
1371
- TrackedRangeStickiness: TrackedRangeStickiness,
1372
- WrappingIndent: WrappingIndent,
1373
- InjectedTextCursorStops: InjectedTextCursorStops,
1374
- PositionAffinity: PositionAffinity,
1375
- ShowLightbulbIconMode: ShowLightbulbIconMode,
1376
- ConfigurationChangedEvent: ConfigurationChangedEvent,
1377
- BareFontInfo: BareFontInfo,
1378
- FontInfo: FontInfo,
1379
- TextModelResolvedOptions: TextModelResolvedOptions,
1380
- FindMatch: FindMatch,
1381
- ApplyUpdateResult: ApplyUpdateResult,
1382
- EditorZoom: EditorZoom,
1383
- createMultiFileDiffEditor: createMultiFileDiffEditor,
1384
- EditorType: EditorType,
1385
- EditorOptions: EditorOptions
1386
- };
1387
- }
1388
-
1389
- function isArrayOf(elemType, obj) {
1390
- if (!obj) {
1391
- return false;
1392
- }
1393
- if (!(Array.isArray(obj))) {
1394
- return false;
1395
- }
1396
- for (const el of obj) {
1397
- if (!(elemType(el))) {
1398
- return false;
1399
- }
1400
- }
1401
- return true;
1402
- }
1403
- function bool(prop, defValue) {
1404
- if (typeof prop === 'boolean') {
1405
- return prop;
1406
- }
1407
- return defValue;
1408
- }
1409
- function string(prop, defValue) {
1410
- if (typeof (prop) === 'string') {
1411
- return prop;
1412
- }
1413
- return defValue;
1414
- }
1415
- function arrayToHash(array) {
1416
- const result = {};
1417
- for (const e of array) {
1418
- result[e] = true;
1419
- }
1420
- return result;
1421
- }
1422
- function createKeywordMatcher(arr, caseInsensitive = false) {
1423
- if (caseInsensitive) {
1424
- arr = ( arr.map(function (x) { return x.toLowerCase(); }));
1425
- }
1426
- const hash = arrayToHash(arr);
1427
- if (caseInsensitive) {
1428
- return function (word) {
1429
- return hash[word.toLowerCase()] !== undefined && hash.hasOwnProperty(word.toLowerCase());
1430
- };
1431
- }
1432
- else {
1433
- return function (word) {
1434
- return hash[word] !== undefined && hash.hasOwnProperty(word);
1435
- };
1436
- }
1437
- }
1438
- function compileRegExp(lexer, str, handleSn) {
1439
- str = str.replace(/@@/g, `\x01`);
1440
- let n = 0;
1441
- let hadExpansion;
1442
- do {
1443
- hadExpansion = false;
1444
- str = str.replace(/@(\w+)/g, function (s, attr) {
1445
- hadExpansion = true;
1446
- let sub = '';
1447
- if (typeof (lexer[attr]) === 'string') {
1448
- sub = lexer[attr];
1449
- }
1450
- else if (lexer[attr] && lexer[attr] instanceof RegExp) {
1451
- sub = lexer[attr].source;
1452
- }
1453
- else {
1454
- if (lexer[attr] === undefined) {
1455
- throw createError(lexer, 'language definition does not contain attribute \'' + attr + '\', used at: ' + str);
1456
- }
1457
- else {
1458
- throw createError(lexer, 'attribute reference \'' + attr + '\' must be a string, used at: ' + str);
1459
- }
1460
- }
1461
- return (empty(sub) ? '' : '(?:' + sub + ')');
1462
- });
1463
- n++;
1464
- } while (hadExpansion && n < 5);
1465
- str = str.replace(/\x01/g, '@');
1466
- const flags = (lexer.ignoreCase ? 'i' : '') + (lexer.unicode ? 'u' : '');
1467
- if (handleSn) {
1468
- const match = str.match(/\$[sS](\d\d?)/g);
1469
- if (match) {
1470
- let lastState = null;
1471
- let lastRegEx = null;
1472
- return (state) => {
1473
- if (lastRegEx && lastState === state) {
1474
- return lastRegEx;
1475
- }
1476
- lastState = state;
1477
- lastRegEx = ( new RegExp(substituteMatchesRe(lexer, str, state), flags));
1478
- return lastRegEx;
1479
- };
1480
- }
1481
- }
1482
- return ( new RegExp(str, flags));
1483
- }
1484
- function selectScrutinee(id, matches, state, num) {
1485
- if (num < 0) {
1486
- return id;
1487
- }
1488
- if (num < matches.length) {
1489
- return matches[num];
1490
- }
1491
- if (num >= 100) {
1492
- num = num - 100;
1493
- const parts = state.split('.');
1494
- parts.unshift(state);
1495
- if (num < parts.length) {
1496
- return parts[num];
1497
- }
1498
- }
1499
- return null;
1500
- }
1501
- function createGuard(lexer, ruleName, tkey, val) {
1502
- let scrut = -1;
1503
- let oppat = tkey;
1504
- let matches = tkey.match(/^\$(([sS]?)(\d\d?)|#)(.*)$/);
1505
- if (matches) {
1506
- if (matches[3]) {
1507
- scrut = parseInt(matches[3]);
1508
- if (matches[2]) {
1509
- scrut = scrut + 100;
1510
- }
1511
- }
1512
- oppat = matches[4];
1513
- }
1514
- let op = '~';
1515
- let pat = oppat;
1516
- if (!oppat || oppat.length === 0) {
1517
- op = '!=';
1518
- pat = '';
1519
- }
1520
- else if (/^\w*$/.test(pat)) {
1521
- op = '==';
1522
- }
1523
- else {
1524
- matches = oppat.match(/^(@|!@|~|!~|==|!=)(.*)$/);
1525
- if (matches) {
1526
- op = matches[1];
1527
- pat = matches[2];
1528
- }
1529
- }
1530
- let tester;
1531
- if ((op === '~' || op === '!~') && /^(\w|\|)*$/.test(pat)) {
1532
- const inWords = createKeywordMatcher(pat.split('|'), lexer.ignoreCase);
1533
- tester = function (s) { return (op === '~' ? inWords(s) : !inWords(s)); };
1534
- }
1535
- else if (op === '@' || op === '!@') {
1536
- const words = lexer[pat];
1537
- if (!words) {
1538
- throw createError(lexer, 'the @ match target \'' + pat + '\' is not defined, in rule: ' + ruleName);
1539
- }
1540
- if (!(isArrayOf(function (elem) { return (typeof (elem) === 'string'); }, words))) {
1541
- throw createError(lexer, 'the @ match target \'' + pat + '\' must be an array of strings, in rule: ' + ruleName);
1542
- }
1543
- const inWords = createKeywordMatcher(words, lexer.ignoreCase);
1544
- tester = function (s) { return (op === '@' ? inWords(s) : !inWords(s)); };
1545
- }
1546
- else if (op === '~' || op === '!~') {
1547
- if (pat.indexOf('$') < 0) {
1548
- const re = compileRegExp(lexer, '^' + pat + '$', false);
1549
- tester = function (s) { return (op === '~' ? re.test(s) : !re.test(s)); };
1550
- }
1551
- else {
1552
- tester = function (s, id, matches, state) {
1553
- const re = compileRegExp(lexer, '^' + substituteMatches(lexer, pat, id, matches, state) + '$', false);
1554
- return re.test(s);
1555
- };
1556
- }
1557
- }
1558
- else {
1559
- if (pat.indexOf('$') < 0) {
1560
- const patx = fixCase(lexer, pat);
1561
- tester = function (s) { return (op === '==' ? s === patx : s !== patx); };
1562
- }
1563
- else {
1564
- const patx = fixCase(lexer, pat);
1565
- tester = function (s, id, matches, state, eos) {
1566
- const patexp = substituteMatches(lexer, patx, id, matches, state);
1567
- return (op === '==' ? s === patexp : s !== patexp);
1568
- };
1569
- }
1570
- }
1571
- if (scrut === -1) {
1572
- return {
1573
- name: tkey, value: val, test: function (id, matches, state, eos) {
1574
- return tester(id, id, matches, state, eos);
1575
- }
1576
- };
1577
- }
1578
- else {
1579
- return {
1580
- name: tkey, value: val, test: function (id, matches, state, eos) {
1581
- const scrutinee = selectScrutinee(id, matches, state, scrut);
1582
- return tester(!scrutinee ? '' : scrutinee, id, matches, state, eos);
1583
- }
1584
- };
1585
- }
1586
- }
1587
- function compileAction(lexer, ruleName, action) {
1588
- if (!action) {
1589
- return { token: '' };
1590
- }
1591
- else if (typeof (action) === 'string') {
1592
- return action;
1593
- }
1594
- else if (action.token || action.token === '') {
1595
- if (typeof (action.token) !== 'string') {
1596
- throw createError(lexer, 'a \'token\' attribute must be of type string, in rule: ' + ruleName);
1597
- }
1598
- else {
1599
- const newAction = { token: action.token };
1600
- if (action.token.indexOf('$') >= 0) {
1601
- newAction.tokenSubst = true;
1602
- }
1603
- if (typeof (action.bracket) === 'string') {
1604
- if (action.bracket === '@open') {
1605
- newAction.bracket = 1 ;
1606
- }
1607
- else if (action.bracket === '@close') {
1608
- newAction.bracket = -1 ;
1609
- }
1610
- else {
1611
- throw createError(lexer, 'a \'bracket\' attribute must be either \'@open\' or \'@close\', in rule: ' + ruleName);
1612
- }
1613
- }
1614
- if (action.next) {
1615
- if (typeof (action.next) !== 'string') {
1616
- throw createError(lexer, 'the next state must be a string value in rule: ' + ruleName);
1617
- }
1618
- else {
1619
- let next = action.next;
1620
- if (!/^(@pop|@push|@popall)$/.test(next)) {
1621
- if (next[0] === '@') {
1622
- next = next.substr(1);
1623
- }
1624
- if (next.indexOf('$') < 0) {
1625
- if (!stateExists(lexer, substituteMatches(lexer, next, '', [], ''))) {
1626
- throw createError(lexer, 'the next state \'' + action.next + '\' is not defined in rule: ' + ruleName);
1627
- }
1628
- }
1629
- }
1630
- newAction.next = next;
1631
- }
1632
- }
1633
- if (typeof (action.goBack) === 'number') {
1634
- newAction.goBack = action.goBack;
1635
- }
1636
- if (typeof (action.switchTo) === 'string') {
1637
- newAction.switchTo = action.switchTo;
1638
- }
1639
- if (typeof (action.log) === 'string') {
1640
- newAction.log = action.log;
1641
- }
1642
- if (typeof (action.nextEmbedded) === 'string') {
1643
- newAction.nextEmbedded = action.nextEmbedded;
1644
- lexer.usesEmbedded = true;
1645
- }
1646
- return newAction;
1647
- }
1648
- }
1649
- else if (Array.isArray(action)) {
1650
- const results = [];
1651
- for (let i = 0, len = action.length; i < len; i++) {
1652
- results[i] = compileAction(lexer, ruleName, action[i]);
1653
- }
1654
- return { group: results };
1655
- }
1656
- else if (action.cases) {
1657
- const cases = [];
1658
- for (const tkey in action.cases) {
1659
- if (action.cases.hasOwnProperty(tkey)) {
1660
- const val = compileAction(lexer, ruleName, action.cases[tkey]);
1661
- if (tkey === '@default' || tkey === '@' || tkey === '') {
1662
- cases.push({ test: undefined, value: val, name: tkey });
1663
- }
1664
- else if (tkey === '@eos') {
1665
- cases.push({ test: function (id, matches, state, eos) { return eos; }, value: val, name: tkey });
1666
- }
1667
- else {
1668
- cases.push(createGuard(lexer, ruleName, tkey, val));
1669
- }
1670
- }
1671
- }
1672
- const def = lexer.defaultToken;
1673
- return {
1674
- test: function (id, matches, state, eos) {
1675
- for (const _case of cases) {
1676
- const didmatch = (!_case.test || _case.test(id, matches, state, eos));
1677
- if (didmatch) {
1678
- return _case.value;
1679
- }
1680
- }
1681
- return def;
1682
- }
1683
- };
1684
- }
1685
- else {
1686
- throw createError(lexer, 'an action must be a string, an object with a \'token\' or \'cases\' attribute, or an array of actions; in rule: ' + ruleName);
1687
- }
1688
- }
1689
- class Rule {
1690
- constructor(name) {
1691
- this.regex = ( new RegExp(''));
1692
- this.action = { token: '' };
1693
- this.matchOnlyAtLineStart = false;
1694
- this.name = '';
1695
- this.name = name;
1696
- }
1697
- setRegex(lexer, re) {
1698
- let sregex;
1699
- if (typeof (re) === 'string') {
1700
- sregex = re;
1701
- }
1702
- else if (re instanceof RegExp) {
1703
- sregex = re.source;
1704
- }
1705
- else {
1706
- throw createError(lexer, 'rules must start with a match string or regular expression: ' + this.name);
1707
- }
1708
- this.matchOnlyAtLineStart = (sregex.length > 0 && sregex[0] === '^');
1709
- this.name = this.name + ': ' + sregex;
1710
- this.regex = compileRegExp(lexer, '^(?:' + (this.matchOnlyAtLineStart ? sregex.substr(1) : sregex) + ')', true);
1711
- }
1712
- setAction(lexer, act) {
1713
- this.action = compileAction(lexer, this.name, act);
1714
- }
1715
- resolveRegex(state) {
1716
- if (this.regex instanceof RegExp) {
1717
- return this.regex;
1718
- }
1719
- else {
1720
- return this.regex(state);
1721
- }
1722
- }
1723
- }
1724
- function compile(languageId, json) {
1725
- if (!json || typeof (json) !== 'object') {
1726
- throw ( new Error('Monarch: expecting a language definition object'));
1727
- }
1728
- const lexer = {
1729
- languageId: languageId,
1730
- includeLF: bool(json.includeLF, false),
1731
- noThrow: false,
1732
- maxStack: 100,
1733
- start: (typeof json.start === 'string' ? json.start : null),
1734
- ignoreCase: bool(json.ignoreCase, false),
1735
- unicode: bool(json.unicode, false),
1736
- tokenPostfix: string(json.tokenPostfix, '.' + languageId),
1737
- defaultToken: string(json.defaultToken, 'source'),
1738
- usesEmbedded: false,
1739
- stateNames: {},
1740
- tokenizer: {},
1741
- brackets: []
1742
- };
1743
- const lexerMin = json;
1744
- lexerMin.languageId = languageId;
1745
- lexerMin.includeLF = lexer.includeLF;
1746
- lexerMin.ignoreCase = lexer.ignoreCase;
1747
- lexerMin.unicode = lexer.unicode;
1748
- lexerMin.noThrow = lexer.noThrow;
1749
- lexerMin.usesEmbedded = lexer.usesEmbedded;
1750
- lexerMin.stateNames = json.tokenizer;
1751
- lexerMin.defaultToken = lexer.defaultToken;
1752
- function addRules(state, newrules, rules) {
1753
- for (const rule of rules) {
1754
- let include = rule.include;
1755
- if (include) {
1756
- if (typeof (include) !== 'string') {
1757
- throw createError(lexer, 'an \'include\' attribute must be a string at: ' + state);
1758
- }
1759
- if (include[0] === '@') {
1760
- include = include.substr(1);
1761
- }
1762
- if (!json.tokenizer[include]) {
1763
- throw createError(lexer, 'include target \'' + include + '\' is not defined at: ' + state);
1764
- }
1765
- addRules(state + '.' + include, newrules, json.tokenizer[include]);
1766
- }
1767
- else {
1768
- const newrule = ( new Rule(state));
1769
- if (Array.isArray(rule) && rule.length >= 1 && rule.length <= 3) {
1770
- newrule.setRegex(lexerMin, rule[0]);
1771
- if (rule.length >= 3) {
1772
- if (typeof (rule[1]) === 'string') {
1773
- newrule.setAction(lexerMin, { token: rule[1], next: rule[2] });
1774
- }
1775
- else if (typeof (rule[1]) === 'object') {
1776
- const rule1 = rule[1];
1777
- rule1.next = rule[2];
1778
- newrule.setAction(lexerMin, rule1);
1779
- }
1780
- else {
1781
- throw createError(lexer, 'a next state as the last element of a rule can only be given if the action is either an object or a string, at: ' + state);
1782
- }
1783
- }
1784
- else {
1785
- newrule.setAction(lexerMin, rule[1]);
1786
- }
1787
- }
1788
- else {
1789
- if (!rule.regex) {
1790
- throw createError(lexer, 'a rule must either be an array, or an object with a \'regex\' or \'include\' field at: ' + state);
1791
- }
1792
- if (rule.name) {
1793
- if (typeof rule.name === 'string') {
1794
- newrule.name = rule.name;
1795
- }
1796
- }
1797
- if (rule.matchOnlyAtStart) {
1798
- newrule.matchOnlyAtLineStart = bool(rule.matchOnlyAtLineStart, false);
1799
- }
1800
- newrule.setRegex(lexerMin, rule.regex);
1801
- newrule.setAction(lexerMin, rule.action);
1802
- }
1803
- newrules.push(newrule);
1804
- }
1805
- }
1806
- }
1807
- if (!json.tokenizer || typeof (json.tokenizer) !== 'object') {
1808
- throw createError(lexer, 'a language definition must define the \'tokenizer\' attribute as an object');
1809
- }
1810
- lexer.tokenizer = [];
1811
- for (const key in json.tokenizer) {
1812
- if (json.tokenizer.hasOwnProperty(key)) {
1813
- if (!lexer.start) {
1814
- lexer.start = key;
1815
- }
1816
- const rules = json.tokenizer[key];
1817
- lexer.tokenizer[key] = ( new Array());
1818
- addRules('tokenizer.' + key, lexer.tokenizer[key], rules);
1819
- }
1820
- }
1821
- lexer.usesEmbedded = lexerMin.usesEmbedded;
1822
- if (json.brackets) {
1823
- if (!(Array.isArray(json.brackets))) {
1824
- throw createError(lexer, 'the \'brackets\' attribute must be defined as an array');
1825
- }
1826
- }
1827
- else {
1828
- json.brackets = [
1829
- { open: '{', close: '}', token: 'delimiter.curly' },
1830
- { open: '[', close: ']', token: 'delimiter.square' },
1831
- { open: '(', close: ')', token: 'delimiter.parenthesis' },
1832
- { open: '<', close: '>', token: 'delimiter.angle' }
1833
- ];
1834
- }
1835
- const brackets = [];
1836
- for (const el of json.brackets) {
1837
- let desc = el;
1838
- if (desc && Array.isArray(desc) && desc.length === 3) {
1839
- desc = { token: desc[2], open: desc[0], close: desc[1] };
1840
- }
1841
- if (desc.open === desc.close) {
1842
- throw createError(lexer, 'open and close brackets in a \'brackets\' attribute must be different: ' + desc.open +
1843
- '\n hint: use the \'bracket\' attribute if matching on equal brackets is required.');
1844
- }
1845
- if (typeof desc.open === 'string' && typeof desc.token === 'string' && typeof desc.close === 'string') {
1846
- brackets.push({
1847
- token: desc.token + lexer.tokenPostfix,
1848
- open: fixCase(lexer, desc.open),
1849
- close: fixCase(lexer, desc.close)
1850
- });
1851
- }
1852
- else {
1853
- throw createError(lexer, 'every element in the \'brackets\' array must be a \'{open,close,token}\' object or array');
1854
- }
1855
- }
1856
- lexer.brackets = brackets;
1857
- lexer.noThrow = true;
1858
- return lexer;
1859
- }
1860
-
1861
- function register(language) {
1862
- ModesRegistry.registerLanguage(language);
1863
- }
1864
- function getLanguages() {
1865
- let result = [];
1866
- result = result.concat(ModesRegistry.getLanguages());
1867
- return result;
1868
- }
1869
- function getEncodedLanguageId(languageId) {
1870
- const languageService = StandaloneServices.get(ILanguageService);
1871
- return languageService.languageIdCodec.encodeLanguageId(languageId);
1872
- }
1873
- function onLanguage(languageId, callback) {
1874
- return StandaloneServices.withServices(() => {
1875
- const languageService = StandaloneServices.get(ILanguageService);
1876
- const disposable = languageService.onDidRequestRichLanguageFeatures((encounteredLanguageId) => {
1877
- if (encounteredLanguageId === languageId) {
1878
- disposable.dispose();
1879
- callback();
1880
- }
1881
- });
1882
- return disposable;
1883
- });
1884
- }
1885
- function onLanguageEncountered(languageId, callback) {
1886
- return StandaloneServices.withServices(() => {
1887
- const languageService = StandaloneServices.get(ILanguageService);
1888
- const disposable = languageService.onDidRequestBasicLanguageFeatures((encounteredLanguageId) => {
1889
- if (encounteredLanguageId === languageId) {
1890
- disposable.dispose();
1891
- callback();
1892
- }
1893
- });
1894
- return disposable;
1895
- });
1896
- }
1897
- function setLanguageConfiguration(languageId, configuration) {
1898
- const languageService = StandaloneServices.get(ILanguageService);
1899
- if (!languageService.isRegisteredLanguageId(languageId)) {
1900
- throw ( new Error(`Cannot set configuration for unknown language ${languageId}`));
1901
- }
1902
- const languageConfigurationService = StandaloneServices.get(ILanguageConfigurationService);
1903
- return languageConfigurationService.register(languageId, configuration, 100);
1904
- }
1905
- class EncodedTokenizationSupportAdapter {
1906
- constructor(languageId, actual) {
1907
- this._languageId = languageId;
1908
- this._actual = actual;
1909
- }
1910
- dispose() {
1911
- }
1912
- getInitialState() {
1913
- return this._actual.getInitialState();
1914
- }
1915
- tokenize(line, hasEOL, state) {
1916
- if (typeof this._actual.tokenize === 'function') {
1917
- return TokenizationSupportAdapter.adaptTokenize(this._languageId, this._actual, line, state);
1918
- }
1919
- throw ( new Error('Not supported!'));
1920
- }
1921
- tokenizeEncoded(line, hasEOL, state) {
1922
- const result = this._actual.tokenizeEncoded(line, state);
1923
- return new EncodedTokenizationResult(result.tokens, result.endState);
1924
- }
1925
- }
1926
- class TokenizationSupportAdapter {
1927
- constructor(_languageId, _actual, _languageService, _standaloneThemeService) {
1928
- this._languageId = _languageId;
1929
- this._actual = _actual;
1930
- this._languageService = _languageService;
1931
- this._standaloneThemeService = _standaloneThemeService;
1932
- }
1933
- dispose() {
1934
- }
1935
- getInitialState() {
1936
- return this._actual.getInitialState();
1937
- }
1938
- static _toClassicTokens(tokens, language) {
1939
- const result = [];
1940
- let previousStartIndex = 0;
1941
- for (let i = 0, len = tokens.length; i < len; i++) {
1942
- const t = tokens[i];
1943
- let startIndex = t.startIndex;
1944
- if (i === 0) {
1945
- startIndex = 0;
1946
- }
1947
- else if (startIndex < previousStartIndex) {
1948
- startIndex = previousStartIndex;
1949
- }
1950
- result[i] = new Token$1(startIndex, t.scopes, language);
1951
- previousStartIndex = startIndex;
1952
- }
1953
- return result;
1954
- }
1955
- static adaptTokenize(language, actual, line, state) {
1956
- const actualResult = actual.tokenize(line, state);
1957
- const tokens = TokenizationSupportAdapter._toClassicTokens(actualResult.tokens, language);
1958
- let endState;
1959
- if (actualResult.endState.equals(state)) {
1960
- endState = state;
1961
- }
1962
- else {
1963
- endState = actualResult.endState;
1964
- }
1965
- return new TokenizationResult(tokens, endState);
1966
- }
1967
- tokenize(line, hasEOL, state) {
1968
- return TokenizationSupportAdapter.adaptTokenize(this._languageId, this._actual, line, state);
1969
- }
1970
- _toBinaryTokens(languageIdCodec, tokens) {
1971
- const languageId = languageIdCodec.encodeLanguageId(this._languageId);
1972
- const tokenTheme = this._standaloneThemeService.getColorTheme().tokenTheme;
1973
- const result = [];
1974
- let resultLen = 0;
1975
- let previousStartIndex = 0;
1976
- for (let i = 0, len = tokens.length; i < len; i++) {
1977
- const t = tokens[i];
1978
- const metadata = tokenTheme.match(languageId, t.scopes) | 1024 ;
1979
- if (resultLen > 0 && result[resultLen - 1] === metadata) {
1980
- continue;
1981
- }
1982
- let startIndex = t.startIndex;
1983
- if (i === 0) {
1984
- startIndex = 0;
1985
- }
1986
- else if (startIndex < previousStartIndex) {
1987
- startIndex = previousStartIndex;
1988
- }
1989
- result[resultLen++] = startIndex;
1990
- result[resultLen++] = metadata;
1991
- previousStartIndex = startIndex;
1992
- }
1993
- const actualResult = ( new Uint32Array(resultLen));
1994
- for (let i = 0; i < resultLen; i++) {
1995
- actualResult[i] = result[i];
1996
- }
1997
- return actualResult;
1998
- }
1999
- tokenizeEncoded(line, hasEOL, state) {
2000
- const actualResult = this._actual.tokenize(line, state);
2001
- const tokens = this._toBinaryTokens(this._languageService.languageIdCodec, actualResult.tokens);
2002
- let endState;
2003
- if (actualResult.endState.equals(state)) {
2004
- endState = state;
2005
- }
2006
- else {
2007
- endState = actualResult.endState;
2008
- }
2009
- return new EncodedTokenizationResult(tokens, endState);
2010
- }
2011
- }
2012
- function isATokensProvider(provider) {
2013
- return (typeof provider.getInitialState === 'function');
2014
- }
2015
- function isEncodedTokensProvider(provider) {
2016
- return 'tokenizeEncoded' in provider;
2017
- }
2018
- function isThenable(obj) {
2019
- return obj && typeof obj.then === 'function';
2020
- }
2021
- function setColorMap(colorMap) {
2022
- const standaloneThemeService = StandaloneServices.get(IStandaloneThemeService);
2023
- if (colorMap) {
2024
- const result = [null];
2025
- for (let i = 1, len = colorMap.length; i < len; i++) {
2026
- result[i] = ( Color.fromHex(colorMap[i]));
2027
- }
2028
- standaloneThemeService.setColorMapOverride(result);
2029
- }
2030
- else {
2031
- standaloneThemeService.setColorMapOverride(null);
2032
- }
2033
- }
2034
- function createTokenizationSupportAdapter(languageId, provider) {
2035
- if (isEncodedTokensProvider(provider)) {
2036
- return ( new EncodedTokenizationSupportAdapter(languageId, provider));
2037
- }
2038
- else {
2039
- return ( new TokenizationSupportAdapter(
2040
- languageId,
2041
- provider,
2042
- StandaloneServices.get(ILanguageService),
2043
- StandaloneServices.get(IStandaloneThemeService)
2044
- ));
2045
- }
2046
- }
2047
- function registerTokensProviderFactory(languageId, factory) {
2048
- const adaptedFactory = new LazyTokenizationSupport(async () => {
2049
- const result = await Promise.resolve(factory.create());
2050
- if (!result) {
2051
- return null;
2052
- }
2053
- if (isATokensProvider(result)) {
2054
- return createTokenizationSupportAdapter(languageId, result);
2055
- }
2056
- return ( new MonarchTokenizer(
2057
- StandaloneServices.get(ILanguageService),
2058
- StandaloneServices.get(IStandaloneThemeService),
2059
- languageId,
2060
- compile(languageId, result),
2061
- StandaloneServices.get(IConfigurationService)
2062
- ));
2063
- });
2064
- return TokenizationRegistry.registerFactory(languageId, adaptedFactory);
2065
- }
2066
- function setTokensProvider(languageId, provider) {
2067
- const languageService = StandaloneServices.get(ILanguageService);
2068
- if (!languageService.isRegisteredLanguageId(languageId)) {
2069
- throw ( new Error(`Cannot set tokens provider for unknown language ${languageId}`));
2070
- }
2071
- if (isThenable(provider)) {
2072
- return registerTokensProviderFactory(languageId, { create: () => provider });
2073
- }
2074
- return TokenizationRegistry.register(languageId, createTokenizationSupportAdapter(languageId, provider));
2075
- }
2076
- function setMonarchTokensProvider(languageId, languageDef) {
2077
- const create = (languageDef) => {
2078
- return ( new MonarchTokenizer(
2079
- StandaloneServices.get(ILanguageService),
2080
- StandaloneServices.get(IStandaloneThemeService),
2081
- languageId,
2082
- compile(languageId, languageDef),
2083
- StandaloneServices.get(IConfigurationService)
2084
- ));
2085
- };
2086
- if (isThenable(languageDef)) {
2087
- return registerTokensProviderFactory(languageId, { create: () => languageDef });
2088
- }
2089
- return TokenizationRegistry.register(languageId, create(languageDef));
2090
- }
2091
- function registerReferenceProvider(languageSelector, provider) {
2092
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2093
- return languageFeaturesService.referenceProvider.register(languageSelector, provider);
2094
- }
2095
- function registerRenameProvider(languageSelector, provider) {
2096
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2097
- return languageFeaturesService.renameProvider.register(languageSelector, provider);
2098
- }
2099
- function registerNewSymbolNameProvider(languageSelector, provider) {
2100
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2101
- return languageFeaturesService.newSymbolNamesProvider.register(languageSelector, provider);
2102
- }
2103
- function registerSignatureHelpProvider(languageSelector, provider) {
2104
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2105
- return languageFeaturesService.signatureHelpProvider.register(languageSelector, provider);
2106
- }
2107
- function registerHoverProvider(languageSelector, provider) {
2108
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2109
- return languageFeaturesService.hoverProvider.register(languageSelector, {
2110
- provideHover: async (model, position, token, context) => {
2111
- const word = model.getWordAtPosition(position);
2112
- return Promise.resolve(provider.provideHover(model, position, token, context)).then((value) => {
2113
- if (!value) {
2114
- return undefined;
2115
- }
2116
- if (!value.range && word) {
2117
- value.range = ( new Range$1(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn));
2118
- }
2119
- if (!value.range) {
2120
- value.range = ( new Range$1(position.lineNumber, position.column, position.lineNumber, position.column));
2121
- }
2122
- return value;
2123
- });
2124
- }
2125
- });
2126
- }
2127
- function registerDocumentSymbolProvider(languageSelector, provider) {
2128
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2129
- return languageFeaturesService.documentSymbolProvider.register(languageSelector, provider);
2130
- }
2131
- function registerDocumentHighlightProvider(languageSelector, provider) {
2132
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2133
- return languageFeaturesService.documentHighlightProvider.register(languageSelector, provider);
2134
- }
2135
- function registerLinkedEditingRangeProvider(languageSelector, provider) {
2136
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2137
- return languageFeaturesService.linkedEditingRangeProvider.register(languageSelector, provider);
2138
- }
2139
- function registerDefinitionProvider(languageSelector, provider) {
2140
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2141
- return languageFeaturesService.definitionProvider.register(languageSelector, provider);
2142
- }
2143
- function registerImplementationProvider(languageSelector, provider) {
2144
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2145
- return languageFeaturesService.implementationProvider.register(languageSelector, provider);
2146
- }
2147
- function registerTypeDefinitionProvider(languageSelector, provider) {
2148
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2149
- return languageFeaturesService.typeDefinitionProvider.register(languageSelector, provider);
2150
- }
2151
- function registerCodeLensProvider(languageSelector, provider) {
2152
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2153
- return languageFeaturesService.codeLensProvider.register(languageSelector, provider);
2154
- }
2155
- function registerCodeActionProvider(languageSelector, provider, metadata) {
2156
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2157
- return languageFeaturesService.codeActionProvider.register(languageSelector, {
2158
- providedCodeActionKinds: metadata?.providedCodeActionKinds,
2159
- documentation: metadata?.documentation,
2160
- provideCodeActions: (model, range, context, token) => {
2161
- const markerService = StandaloneServices.get(IMarkerService);
2162
- const markers = markerService.read({ resource: model.uri }).filter(m => {
2163
- return Range$1.areIntersectingOrTouching(m, range);
2164
- });
2165
- return provider.provideCodeActions(model, range, { markers, only: context.only, trigger: context.trigger }, token);
2166
- },
2167
- resolveCodeAction: provider.resolveCodeAction
2168
- });
2169
- }
2170
- function registerDocumentFormattingEditProvider(languageSelector, provider) {
2171
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2172
- return languageFeaturesService.documentFormattingEditProvider.register(languageSelector, provider);
2173
- }
2174
- function registerDocumentRangeFormattingEditProvider(languageSelector, provider) {
2175
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2176
- return languageFeaturesService.documentRangeFormattingEditProvider.register(languageSelector, provider);
2177
- }
2178
- function registerOnTypeFormattingEditProvider(languageSelector, provider) {
2179
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2180
- return languageFeaturesService.onTypeFormattingEditProvider.register(languageSelector, provider);
2181
- }
2182
- function registerLinkProvider(languageSelector, provider) {
2183
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2184
- return languageFeaturesService.linkProvider.register(languageSelector, provider);
2185
- }
2186
- function registerCompletionItemProvider(languageSelector, provider) {
2187
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2188
- return languageFeaturesService.completionProvider.register(languageSelector, provider);
2189
- }
2190
- function registerColorProvider(languageSelector, provider) {
2191
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2192
- return languageFeaturesService.colorProvider.register(languageSelector, provider);
2193
- }
2194
- function registerFoldingRangeProvider(languageSelector, provider) {
2195
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2196
- return languageFeaturesService.foldingRangeProvider.register(languageSelector, provider);
2197
- }
2198
- function registerDeclarationProvider(languageSelector, provider) {
2199
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2200
- return languageFeaturesService.declarationProvider.register(languageSelector, provider);
2201
- }
2202
- function registerSelectionRangeProvider(languageSelector, provider) {
2203
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2204
- return languageFeaturesService.selectionRangeProvider.register(languageSelector, provider);
2205
- }
2206
- function registerDocumentSemanticTokensProvider(languageSelector, provider) {
2207
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2208
- return languageFeaturesService.documentSemanticTokensProvider.register(languageSelector, provider);
2209
- }
2210
- function registerDocumentRangeSemanticTokensProvider(languageSelector, provider) {
2211
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2212
- return languageFeaturesService.documentRangeSemanticTokensProvider.register(languageSelector, provider);
2213
- }
2214
- function registerInlineCompletionsProvider(languageSelector, provider) {
2215
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2216
- return languageFeaturesService.inlineCompletionsProvider.register(languageSelector, provider);
2217
- }
2218
- function registerInlineEditProvider(languageSelector, provider) {
2219
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2220
- return languageFeaturesService.inlineEditProvider.register(languageSelector, provider);
2221
- }
2222
- function registerInlayHintsProvider(languageSelector, provider) {
2223
- const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
2224
- return languageFeaturesService.inlayHintsProvider.register(languageSelector, provider);
2225
- }
2226
- function createMonacoLanguagesAPI() {
2227
- return {
2228
- register: register,
2229
- getLanguages: getLanguages,
2230
- onLanguage: onLanguage,
2231
- onLanguageEncountered: onLanguageEncountered,
2232
- getEncodedLanguageId: getEncodedLanguageId,
2233
- setLanguageConfiguration: setLanguageConfiguration,
2234
- setColorMap: setColorMap,
2235
- registerTokensProviderFactory: registerTokensProviderFactory,
2236
- setTokensProvider: setTokensProvider,
2237
- setMonarchTokensProvider: setMonarchTokensProvider,
2238
- registerReferenceProvider: registerReferenceProvider,
2239
- registerRenameProvider: registerRenameProvider,
2240
- registerNewSymbolNameProvider: registerNewSymbolNameProvider,
2241
- registerCompletionItemProvider: registerCompletionItemProvider,
2242
- registerSignatureHelpProvider: registerSignatureHelpProvider,
2243
- registerHoverProvider: registerHoverProvider,
2244
- registerDocumentSymbolProvider: registerDocumentSymbolProvider,
2245
- registerDocumentHighlightProvider: registerDocumentHighlightProvider,
2246
- registerLinkedEditingRangeProvider: registerLinkedEditingRangeProvider,
2247
- registerDefinitionProvider: registerDefinitionProvider,
2248
- registerImplementationProvider: registerImplementationProvider,
2249
- registerTypeDefinitionProvider: registerTypeDefinitionProvider,
2250
- registerCodeLensProvider: registerCodeLensProvider,
2251
- registerCodeActionProvider: registerCodeActionProvider,
2252
- registerDocumentFormattingEditProvider: registerDocumentFormattingEditProvider,
2253
- registerDocumentRangeFormattingEditProvider: registerDocumentRangeFormattingEditProvider,
2254
- registerOnTypeFormattingEditProvider: registerOnTypeFormattingEditProvider,
2255
- registerLinkProvider: registerLinkProvider,
2256
- registerColorProvider: registerColorProvider,
2257
- registerFoldingRangeProvider: registerFoldingRangeProvider,
2258
- registerDeclarationProvider: registerDeclarationProvider,
2259
- registerSelectionRangeProvider: registerSelectionRangeProvider,
2260
- registerDocumentSemanticTokensProvider: registerDocumentSemanticTokensProvider,
2261
- registerDocumentRangeSemanticTokensProvider: registerDocumentRangeSemanticTokensProvider,
2262
- registerInlineCompletionsProvider: registerInlineCompletionsProvider,
2263
- registerInlineEditProvider: registerInlineEditProvider,
2264
- registerInlayHintsProvider: registerInlayHintsProvider,
2265
- DocumentHighlightKind: DocumentHighlightKind,
2266
- CompletionItemKind: CompletionItemKind,
2267
- CompletionItemTag: CompletionItemTag,
2268
- CompletionItemInsertTextRule: CompletionItemInsertTextRule,
2269
- SymbolKind: SymbolKind,
2270
- SymbolTag: SymbolTag,
2271
- IndentAction: IndentAction,
2272
- CompletionTriggerKind: CompletionTriggerKind,
2273
- SignatureHelpTriggerKind: SignatureHelpTriggerKind,
2274
- InlayHintKind: InlayHintKind,
2275
- InlineCompletionTriggerKind: InlineCompletionTriggerKind,
2276
- InlineEditTriggerKind: InlineEditTriggerKind,
2277
- CodeActionTriggerType: CodeActionTriggerType,
2278
- NewSymbolNameTag: NewSymbolNameTag,
2279
- NewSymbolNameTriggerKind: NewSymbolNameTriggerKind,
2280
- PartialAcceptTriggerKind: PartialAcceptTriggerKind,
2281
- HoverVerbosityAction: HoverVerbosityAction,
2282
- FoldingRangeKind: FoldingRangeKind,
2283
- SelectedSuggestionInfo: SelectedSuggestionInfo,
2284
- };
2285
- }
2286
-
2287
- EditorOptions.wrappingIndent.defaultValue = 0 ;
2288
- EditorOptions.glyphMargin.defaultValue = false;
2289
- EditorOptions.autoIndent.defaultValue = 3 ;
2290
- EditorOptions.overviewRulerLanes.defaultValue = 2;
2291
- FormattingConflicts.setFormatterSelector((formatter, document, mode) => Promise.resolve(formatter[0]));
2292
- const api = createMonacoBaseAPI();
2293
- api.editor = createMonacoEditorAPI();
2294
- api.languages = createMonacoLanguagesAPI();
2295
- const CancellationTokenSource = api.CancellationTokenSource;
2296
- const Emitter = api.Emitter;
2297
- const KeyCode = api.KeyCode;
2298
- const KeyMod = api.KeyMod;
2299
- const Position = api.Position;
2300
- const Range = api.Range;
2301
- const Selection = api.Selection;
2302
- const SelectionDirection = api.SelectionDirection;
2303
- const MarkerSeverity = api.MarkerSeverity;
2304
- const MarkerTag = api.MarkerTag;
2305
- const Uri = api.Uri;
2306
- const Token = api.Token;
2307
- const editor = api.editor;
2308
- const languages = api.languages;
2309
- const monacoEnvironment = globalThis.MonacoEnvironment;
2310
- if (monacoEnvironment?.globalAPI || (typeof globalThis.define === 'function' && (globalThis.define).amd)) {
2311
- globalThis.monaco = api;
2312
- }
2313
-
2314
7
  const originalOnLanguage = languages.onLanguage;
2315
8
  languages.onLanguage = (languageId, callback) => withReadyServices(() => originalOnLanguage(languageId, callback));
2316
9
  const originalOnLanguageEncountered = languages.onLanguage;
@@ -2320,4 +13,4 @@ editor.createDiffEditor = createConfiguredDiffEditor;
2320
13
  editor.createModelReference = createModelReference;
2321
14
  editor.writeFile = writeFile;
2322
15
 
2323
- export { CancellationTokenSource, Emitter, KeyCode, KeyMod, MarkerSeverity, MarkerTag, Position, Range, Selection, SelectionDirection, Token, Uri, editor, languages };
16
+ export { editor, languages };