@jupyterlab/codemirror 4.0.0-alpha.9 → 4.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/lib/codemirror-ipythongfm.d.ts +9 -3
  2. package/lib/codemirror-ipythongfm.js +52 -30
  3. package/lib/codemirror-ipythongfm.js.map +1 -1
  4. package/lib/commands.d.ts +13 -0
  5. package/lib/commands.js +32 -0
  6. package/lib/commands.js.map +1 -0
  7. package/lib/editor.d.ts +48 -273
  8. package/lib/editor.js +220 -819
  9. package/lib/editor.js.map +1 -1
  10. package/lib/extension.d.ts +236 -0
  11. package/lib/extension.js +696 -0
  12. package/lib/extension.js.map +1 -0
  13. package/lib/extensions/customStyle.d.ts +25 -0
  14. package/lib/extensions/customStyle.js +51 -0
  15. package/lib/extensions/customStyle.js.map +1 -0
  16. package/lib/extensions/index.d.ts +3 -0
  17. package/lib/extensions/index.js +8 -0
  18. package/lib/extensions/index.js.map +1 -0
  19. package/lib/extensions/rulers.d.ts +8 -0
  20. package/lib/extensions/rulers.js +85 -0
  21. package/lib/extensions/rulers.js.map +1 -0
  22. package/lib/extensions/ybinding.d.ts +129 -0
  23. package/lib/extensions/ybinding.js +229 -0
  24. package/lib/extensions/ybinding.js.map +1 -0
  25. package/lib/factory.d.ts +15 -5
  26. package/lib/factory.js +53 -24
  27. package/lib/factory.js.map +1 -1
  28. package/lib/index.d.ts +7 -19
  29. package/lib/index.js +7 -23
  30. package/lib/index.js.map +1 -1
  31. package/lib/language.d.ts +96 -0
  32. package/lib/language.js +1687 -0
  33. package/lib/language.js.map +1 -0
  34. package/lib/mimetype.d.ts +3 -0
  35. package/lib/mimetype.js +16 -5
  36. package/lib/mimetype.js.map +1 -1
  37. package/lib/searchprovider.d.ts +219 -0
  38. package/lib/searchprovider.js +640 -0
  39. package/lib/searchprovider.js.map +1 -0
  40. package/lib/theme.d.ts +57 -0
  41. package/lib/theme.js +194 -0
  42. package/lib/theme.js.map +1 -0
  43. package/lib/token.d.ts +375 -0
  44. package/lib/token.js +18 -0
  45. package/lib/token.js.map +1 -0
  46. package/package.json +45 -41
  47. package/src/codemirror-ipythongfm.ts +109 -0
  48. package/src/commands.ts +34 -0
  49. package/src/editor.ts +783 -0
  50. package/src/extension.ts +890 -0
  51. package/src/extensions/customStyle.ts +79 -0
  52. package/src/extensions/index.ts +8 -0
  53. package/src/extensions/rulers.ts +112 -0
  54. package/src/extensions/ybinding.ts +295 -0
  55. package/src/factory.ts +100 -0
  56. package/src/index.ts +17 -0
  57. package/src/language.ts +1726 -0
  58. package/src/mimetype.ts +54 -0
  59. package/src/searchprovider.ts +813 -0
  60. package/src/theme.ts +219 -0
  61. package/src/token.ts +436 -0
  62. package/src/typings.d.ts +13 -0
  63. package/style/base.css +33 -187
  64. package/style/index.css +1 -7
  65. package/style/index.js +1 -7
  66. package/lib/codemirror-ipython.d.ts +0 -2
  67. package/lib/codemirror-ipython.js +0 -30
  68. package/lib/codemirror-ipython.js.map +0 -1
  69. package/lib/mode.d.ts +0 -82
  70. package/lib/mode.js +0 -150
  71. package/lib/mode.js.map +0 -1
  72. package/lib/syntaxstatus.d.ts +0 -67
  73. package/lib/syntaxstatus.js +0 -140
  74. package/lib/syntaxstatus.js.map +0 -1
  75. package/lib/tokens.d.ts +0 -18
  76. package/lib/tokens.js +0 -8
  77. package/lib/tokens.js.map +0 -1
  78. package/typings/codemirror/codemirror.d.ts +0 -227
@@ -0,0 +1,1726 @@
1
+ // Copyright (c) Jupyter Development Team.
2
+ // Distributed under the terms of the Modified BSD License.
3
+
4
+ import {
5
+ LanguageDescription,
6
+ LanguageSupport,
7
+ LRLanguage,
8
+ StreamLanguage,
9
+ StreamParser
10
+ } from '@codemirror/language';
11
+ import { IEditorMimeTypeService } from '@jupyterlab/codeeditor';
12
+ import { PathExt } from '@jupyterlab/coreutils';
13
+ import { ITranslator, nullTranslator } from '@jupyterlab/translation';
14
+ import { buildParser } from '@lezer/generator';
15
+ import { highlightTree } from '@lezer/highlight';
16
+
17
+ import { jupyterHighlightStyle } from './theme';
18
+ import { IEditorLanguage, IEditorLanguageRegistry } from './token';
19
+
20
+ /**
21
+ * CodeMirror language registry
22
+ */
23
+ export class EditorLanguageRegistry implements IEditorLanguageRegistry {
24
+ private _modeList: IEditorLanguage[] = [];
25
+
26
+ constructor() {
27
+ // Add default language text/plain -> No expressions to parse
28
+ this.addLanguage({
29
+ name: 'none',
30
+ mime: 'text/plain',
31
+ support: new LanguageSupport(
32
+ // Create a dummy parser that as no expression to parse
33
+ LRLanguage.define({ parser: buildParser('@top Program { }') })
34
+ )
35
+ });
36
+ }
37
+
38
+ /**
39
+ * Register a new language for CodeMirror
40
+ *
41
+ * @param language Language to register
42
+ */
43
+ addLanguage(language: IEditorLanguage): void {
44
+ const info =
45
+ this.findByName(language.name) ?? this.findByMIME(language.mime, true);
46
+ if (info) {
47
+ throw new Error(`${language.mime} already registered`);
48
+ }
49
+ this._modeList.push(this.makeSpec(language));
50
+ }
51
+
52
+ /**
53
+ * Ensure a codemirror mode is available by name or Codemirror spec.
54
+ *
55
+ * @param language - The mode to ensure. If it is a string, uses [findBest]
56
+ * to get the appropriate spec.
57
+ *
58
+ * @returns A promise that resolves when the mode is available.
59
+ */
60
+ async getLanguage(
61
+ language: string | IEditorLanguage
62
+ ): Promise<IEditorLanguage | null> {
63
+ const spec = this.findBest(language);
64
+ if (spec && !spec.support) {
65
+ spec.support = await spec.load!();
66
+ }
67
+ return spec;
68
+ }
69
+
70
+ /**
71
+ * Get the raw list of available modes specs.
72
+ *
73
+ * @returns The available modes
74
+ */
75
+ getLanguages(): IEditorLanguage[] {
76
+ return [...this._modeList] as IEditorLanguage[];
77
+ }
78
+
79
+ /**
80
+ * Find a codemirror mode by MIME.
81
+ *
82
+ * @param mime Mime type to look for
83
+ * @param strict Whether xml and json should be assimilated to the generic mimetype
84
+ * @returns The mode or null
85
+ */
86
+ findByMIME(
87
+ mime: string | readonly string[],
88
+ strict = false
89
+ ): IEditorLanguage | null {
90
+ if (Array.isArray(mime)) {
91
+ for (let i = 0; i < mime.length; i++) {
92
+ const spec = this.findByMIME(mime[i]);
93
+ if (spec) return spec;
94
+ }
95
+ return null;
96
+ }
97
+ mime = (mime as string).toLowerCase();
98
+ for (let i = 0; i < this._modeList.length; i++) {
99
+ let info = this._modeList[i];
100
+ if (Array.isArray(info.mime)) {
101
+ for (let j = 0; j < info.mime.length; j++) {
102
+ if (info.mime[j] == mime) {
103
+ return info;
104
+ }
105
+ }
106
+ } else if (info.mime == mime) {
107
+ return info;
108
+ }
109
+ }
110
+ if (!strict) {
111
+ if (/\+xml$/.test(mime)) return this.findByMIME('application/xml');
112
+ if (/\+json$/.test(mime)) return this.findByMIME('application/json');
113
+ }
114
+ return null;
115
+ }
116
+
117
+ /**
118
+ * Find a codemirror mode by name.
119
+ *
120
+ * @param name The mode name
121
+ * @returns The mode or null
122
+ */
123
+ findByName(name: string): IEditorLanguage | null {
124
+ name = name.toLowerCase();
125
+ for (let i = 0; i < this._modeList.length; i++) {
126
+ let info = this._modeList[i];
127
+ if (info.name.toLowerCase() == name) return info;
128
+ if (info.alias) {
129
+ for (let j = 0; j < info.alias.length; j++) {
130
+ if (info.alias[j].toLowerCase() == name) {
131
+ return info;
132
+ }
133
+ }
134
+ }
135
+ }
136
+ return null;
137
+ }
138
+
139
+ /**
140
+ * Find a codemirror mode by extension.
141
+ *
142
+ * @param ext The extension name
143
+ * @returns The mode or null
144
+ */
145
+ findByExtension(ext: string | readonly string[]): IEditorLanguage | null {
146
+ if (Array.isArray(ext)) {
147
+ for (let i = 0; i < ext.length; i++) {
148
+ const spec = this.findByExtension(ext[i]);
149
+ if (spec) return spec;
150
+ }
151
+ return null;
152
+ }
153
+ ext = (ext as string).toLowerCase();
154
+ for (let i = 0; i < this._modeList.length; i++) {
155
+ let info = this._modeList[i];
156
+ for (let j = 0; j < info.extensions!.length; j++) {
157
+ if (info.extensions![j].toLowerCase() == ext) {
158
+ return info;
159
+ }
160
+ }
161
+ }
162
+ return null;
163
+ }
164
+
165
+ /**
166
+ * Find a codemirror mode by filename.
167
+ *
168
+ * @param name File name
169
+ * @returns The mode or null
170
+ */
171
+ findByFileName(name: string): IEditorLanguage | null {
172
+ const basename = PathExt.basename(name);
173
+ for (let i = 0; i < this._modeList.length; i++) {
174
+ let info = this._modeList[i];
175
+ if (info.filename && info.filename.test(basename)) {
176
+ return info;
177
+ }
178
+ }
179
+ let dot = basename.lastIndexOf('.');
180
+ let ext = dot > -1 && basename.substring(dot + 1, basename.length);
181
+ if (ext) {
182
+ return this.findByExtension(ext);
183
+ }
184
+ return null;
185
+ }
186
+
187
+ /**
188
+ * Find a codemirror mode by name or CodeMirror spec.
189
+ *
190
+ * @param language The CodeMirror mode
191
+ * @param fallback Whether to fallback to default mimetype spec or not
192
+ * @returns The mode or null
193
+ */
194
+ findBest(
195
+ language: string | IEditorLanguage,
196
+ fallback = true
197
+ ): IEditorLanguage | null {
198
+ const modename = typeof language === 'string' ? language : language.name;
199
+ const mimetype = typeof language !== 'string' ? language.mime : modename;
200
+ const ext = typeof language !== 'string' ? language.extensions ?? [] : [];
201
+
202
+ return (
203
+ (modename ? this.findByName(modename) : null) ??
204
+ (mimetype ? this.findByMIME(mimetype) : null) ??
205
+ this.findByExtension(ext) ??
206
+ (fallback
207
+ ? this.findByMIME(IEditorMimeTypeService.defaultMimeType)
208
+ : null)
209
+ );
210
+ }
211
+
212
+ /**
213
+ * Parse and style a string.
214
+ *
215
+ * @param code Code to highlight
216
+ * @param language Code language
217
+ * @param el HTML element into which the highlighted code will be inserted
218
+ */
219
+ async highlight(
220
+ code: string,
221
+ language: IEditorLanguage | null,
222
+ el: HTMLElement
223
+ ): Promise<void> {
224
+ if (language) {
225
+ await this.getLanguage(language);
226
+ }
227
+
228
+ const language_ = language?.support?.language;
229
+ if (!language_) {
230
+ el.appendChild(document.createTextNode(code));
231
+ return;
232
+ }
233
+
234
+ const tree = language_.parser.parse(code);
235
+ // position state required because unstyled tokens are not emitted
236
+ // in highlightTree
237
+ let pos = 0;
238
+ highlightTree(tree, jupyterHighlightStyle, (from, to, classes) => {
239
+ if (from > pos) {
240
+ // No style applied to the token between pos and from
241
+ el.appendChild(document.createTextNode(code.slice(pos, from)));
242
+ }
243
+ const sp = el.appendChild(document.createElement('span'));
244
+ sp.className = classes;
245
+ sp.appendChild(document.createTextNode(code.slice(from, to)));
246
+ pos = to;
247
+ });
248
+
249
+ if (pos < tree.length - 1) {
250
+ // No style applied on the trailing text
251
+ el.appendChild(document.createTextNode(code.slice(pos, tree.length)));
252
+ }
253
+ }
254
+
255
+ // Code mirror uses two similar structures, a plain object with optional fields,
256
+ // and a class with the same fields but all mandatory. Maybe adopting the same
257
+ // pattern would be less confusing (although far more verbose)
258
+ protected makeSpec(spec: IEditorLanguage): IEditorLanguage {
259
+ let res = LanguageDescription.of(spec) as any;
260
+ // CodeMirror does not store/use mime type of a language
261
+ res.mime = spec.mime;
262
+ res.displayName = spec.displayName;
263
+ return res as IEditorLanguage;
264
+ }
265
+ }
266
+
267
+ /**
268
+ * EditorLanguageRegistry namespace
269
+ */
270
+ export namespace EditorLanguageRegistry {
271
+ /**
272
+ * Convert an CodeMirror 5 language parser to CodeMirror 6
273
+ *
274
+ * @param parser Legacy parser
275
+ * @returns Language object
276
+ */
277
+ export function legacy(parser: StreamParser<unknown>): LanguageSupport {
278
+ return new LanguageSupport(StreamLanguage.define(parser));
279
+ }
280
+
281
+ /**
282
+ * Create a dialect of SQL
283
+ *
284
+ * @param dialectName SQL dialect
285
+ * @returns Language object
286
+ */
287
+ async function sql(
288
+ dialectName: keyof typeof import('@codemirror/lang-sql')
289
+ ): Promise<LanguageSupport> {
290
+ const m = await import('@codemirror/lang-sql');
291
+ return m.sql({ dialect: (m as any)[dialectName] });
292
+ }
293
+
294
+ /**
295
+ * Get the default editor languages
296
+ *
297
+ * @param translator Application translator
298
+ * @returns Default CodeMirror 6 languages
299
+ */
300
+ export function getDefaultLanguages(
301
+ translator?: ITranslator | null
302
+ ): ReadonlyArray<IEditorLanguage> {
303
+ const trans = (translator ?? nullTranslator).load('jupyterlab');
304
+ return [
305
+ {
306
+ name: 'C',
307
+ displayName: trans.__('C'),
308
+ mime: 'text/x-csrc',
309
+ extensions: ['c', 'h', 'ino'],
310
+ async load() {
311
+ const m = await import('@codemirror/lang-cpp');
312
+ return m.cpp();
313
+ }
314
+ },
315
+ {
316
+ name: 'C++',
317
+ displayName: trans.__('C++'),
318
+ mime: 'text/x-c++src',
319
+ extensions: ['cpp', 'c++', 'cc', 'cxx', 'hpp', 'h++', 'hh', 'hxx'],
320
+ async load() {
321
+ const m = await import('@codemirror/lang-cpp');
322
+ return m.cpp();
323
+ }
324
+ },
325
+ {
326
+ name: 'CQL',
327
+ displayName: trans.__('CQL'),
328
+ mime: 'text/x-cassandra',
329
+ extensions: ['cql'],
330
+ load() {
331
+ return sql('Cassandra');
332
+ }
333
+ },
334
+ {
335
+ name: 'CSS',
336
+ displayName: trans.__('CSS'),
337
+ mime: 'text/css',
338
+ extensions: ['css'],
339
+ async load() {
340
+ const m = await import('@codemirror/lang-css');
341
+ return m.css();
342
+ }
343
+ },
344
+ {
345
+ name: 'HTML',
346
+ displayName: trans.__('HTML'),
347
+ alias: ['xhtml'],
348
+ mime: 'text/html',
349
+ extensions: ['html', 'htm', 'handlebars', 'hbs'],
350
+ async load() {
351
+ const m = await import('@codemirror/lang-html');
352
+ return m.html();
353
+ }
354
+ },
355
+ {
356
+ name: 'Java',
357
+ displayName: trans.__('Java'),
358
+ mime: 'text/x-java',
359
+ extensions: ['java'],
360
+ async load() {
361
+ const m = await import('@codemirror/lang-java');
362
+ return m.java();
363
+ }
364
+ },
365
+ {
366
+ name: 'Javascript',
367
+ displayName: trans.__('Javascript'),
368
+ alias: ['ecmascript', 'js', 'node'],
369
+ mime: [
370
+ 'text/javascript',
371
+ 'text/ecmascript',
372
+ 'application/javascript',
373
+ 'application/x-javascript',
374
+ 'application/ecmascript'
375
+ ],
376
+ extensions: ['js', 'mjs', 'cjs'],
377
+ async load() {
378
+ const m = await import('@codemirror/lang-javascript');
379
+ return m.javascript();
380
+ }
381
+ },
382
+ {
383
+ name: 'JSON',
384
+ displayName: trans.__('JSON'),
385
+ alias: ['json5'],
386
+ mime: ['application/json', 'application/x-json'],
387
+ extensions: ['json', 'map'],
388
+ async load() {
389
+ const m = await import('@codemirror/lang-json');
390
+ return m.json();
391
+ }
392
+ },
393
+ {
394
+ name: 'JSX',
395
+ displayName: trans.__('JSX'),
396
+ mime: 'text/jsx',
397
+ extensions: ['jsx'],
398
+ async load() {
399
+ const m = await import('@codemirror/lang-javascript');
400
+ return m.javascript({ jsx: true });
401
+ }
402
+ },
403
+ {
404
+ name: 'MariaDB SQL',
405
+ displayName: trans.__('MariaDB SQL'),
406
+ mime: 'text/x-mariadb',
407
+ load() {
408
+ return sql('MariaSQL');
409
+ }
410
+ },
411
+ {
412
+ name: 'Markdown',
413
+ displayName: trans.__('Markdown'),
414
+ mime: 'text/x-markdown',
415
+ extensions: ['md', 'markdown', 'mkd'],
416
+ async load() {
417
+ const m = await import('@codemirror/lang-markdown');
418
+ return m.markdown({ codeLanguages: this._modeList as any });
419
+ }
420
+ },
421
+ {
422
+ name: 'MS SQL',
423
+ displayName: trans.__('MS SQL'),
424
+ mime: 'text/x-mssql',
425
+ load() {
426
+ return sql('MSSQL');
427
+ }
428
+ },
429
+ {
430
+ name: 'MySQL',
431
+ displayName: trans.__('MySQL'),
432
+ mime: 'text/x-mysql',
433
+ load() {
434
+ return sql('MySQL');
435
+ }
436
+ },
437
+ {
438
+ name: 'PHP',
439
+ displayName: trans.__('PHP'),
440
+ mime: [
441
+ 'text/x-php',
442
+ 'application/x-httpd-php',
443
+ 'application/x-httpd-php-open'
444
+ ],
445
+ extensions: ['php', 'php3', 'php4', 'php5', 'php7', 'phtml'],
446
+ async load() {
447
+ const m = await import('@codemirror/lang-php');
448
+ return m.php();
449
+ }
450
+ },
451
+ {
452
+ name: 'PLSQL',
453
+ displayName: trans.__('PLSQL'),
454
+ mime: 'text/x-plsql',
455
+ extensions: ['pls'],
456
+ load() {
457
+ return sql('PLSQL');
458
+ }
459
+ },
460
+ {
461
+ name: 'PostgreSQL',
462
+ displayName: trans.__('PostgreSQL'),
463
+ mime: 'text/x-pgsql',
464
+ load() {
465
+ return sql('PostgreSQL');
466
+ }
467
+ },
468
+ {
469
+ name: 'Python',
470
+ displayName: trans.__('Python'),
471
+ mime: 'text/x-python',
472
+ extensions: ['BUILD', 'bzl', 'py', 'pyw'],
473
+ filename: /^(BUCK|BUILD)$/,
474
+ async load() {
475
+ const m = await import('@codemirror/lang-python');
476
+ return m.python();
477
+ }
478
+ },
479
+ {
480
+ name: 'ipython',
481
+ displayName: trans.__('ipython'),
482
+ mime: 'text/x-ipython',
483
+ async load() {
484
+ // FIXME Restore '?' operator - using the default python LanguageSupport allows
485
+ // to activate feature such as code folding.
486
+ // return Promise.resolve(legacy(mkPython({ singleOperators: /\?/ })));
487
+ const m = await import('@codemirror/lang-python');
488
+ return m.python();
489
+ }
490
+ },
491
+ {
492
+ name: 'Rust',
493
+ displayName: trans.__('Rust'),
494
+ mime: 'text/x-rustsrc',
495
+ extensions: ['rs'],
496
+ async load() {
497
+ const m = await import('@codemirror/lang-rust');
498
+ return m.rust();
499
+ }
500
+ },
501
+ {
502
+ name: 'SQL',
503
+ displayName: trans.__('SQL'),
504
+ mime: 'text/x-sql',
505
+ extensions: ['sql'],
506
+ load() {
507
+ return sql('StandardSQL');
508
+ }
509
+ },
510
+ {
511
+ name: 'SQLite',
512
+ displayName: trans.__('SQLite'),
513
+ mime: 'text/x-sqlite',
514
+ load() {
515
+ return sql('SQLite');
516
+ }
517
+ },
518
+ {
519
+ name: 'TSX',
520
+ displayName: trans.__('TSX'),
521
+ alias: ['TypeScript-JSX'],
522
+ mime: 'text/typescript-jsx',
523
+ extensions: ['tsx'],
524
+ async load() {
525
+ const m = await import('@codemirror/lang-javascript');
526
+ return m.javascript({ jsx: true, typescript: true });
527
+ }
528
+ },
529
+ {
530
+ name: 'TypeScript',
531
+ displayName: trans.__('TypeScript'),
532
+ alias: ['ts'],
533
+ mime: 'application/typescript',
534
+ extensions: ['ts'],
535
+ async load() {
536
+ const m = await import('@codemirror/lang-javascript');
537
+ return m.javascript({ typescript: true });
538
+ }
539
+ },
540
+ {
541
+ name: 'WebAssembly',
542
+ displayName: trans.__('WebAssembly'),
543
+ mime: 'text/webassembly',
544
+ extensions: ['wat', 'wast'],
545
+ async load() {
546
+ const m = await import('@codemirror/lang-wast');
547
+ return m.wast();
548
+ }
549
+ },
550
+ {
551
+ name: 'XML',
552
+ displayName: trans.__('XML'),
553
+ alias: ['rss', 'wsdl', 'xsd'],
554
+ mime: ['application/xml', 'text/xml'],
555
+ extensions: ['xml', 'xsl', 'xsd', 'svg'],
556
+ async load() {
557
+ const m = await import('@codemirror/lang-xml');
558
+ return m.xml();
559
+ }
560
+ },
561
+ // Legacy modes ported from CodeMirror 5
562
+ {
563
+ name: 'APL',
564
+ displayName: trans.__('APL'),
565
+ mime: 'text/apl',
566
+ extensions: ['dyalog', 'apl'],
567
+ async load() {
568
+ const m = await import('@codemirror/legacy-modes/mode/apl');
569
+ return legacy(m.apl);
570
+ }
571
+ },
572
+ {
573
+ name: 'PGP',
574
+ displayName: trans.__('PGP'),
575
+ alias: ['asciiarmor'],
576
+ mime: [
577
+ 'application/pgp',
578
+ 'application/pgp-encrypted',
579
+ 'application/pgp-keys',
580
+ 'application/pgp-signature'
581
+ ],
582
+ extensions: ['asc', 'pgp', 'sig'],
583
+ async load() {
584
+ const m = await import('@codemirror/legacy-modes/mode/asciiarmor');
585
+ return legacy(m.asciiArmor);
586
+ }
587
+ },
588
+ {
589
+ name: 'ASN.1',
590
+ displayName: trans.__('ASN.1'),
591
+ mime: 'text/x-ttcn-asn',
592
+ extensions: ['asn', 'asn1'],
593
+ async load() {
594
+ const m = await import('@codemirror/legacy-modes/mode/asn1');
595
+ return legacy(m.asn1({}));
596
+ }
597
+ },
598
+ {
599
+ name: 'Asterisk',
600
+ displayName: trans.__('Asterisk'),
601
+ mime: 'text/x-asterisk',
602
+ filename: /^extensions\.conf$/i,
603
+ async load() {
604
+ const m = await import('@codemirror/legacy-modes/mode/asterisk');
605
+ return legacy(m.asterisk);
606
+ }
607
+ },
608
+ {
609
+ name: 'Brainfuck',
610
+ displayName: trans.__('Brainfuck'),
611
+ mime: 'text/x-brainfuck',
612
+ extensions: ['b', 'bf'],
613
+ async load() {
614
+ const m = await import('@codemirror/legacy-modes/mode/brainfuck');
615
+ return legacy(m.brainfuck);
616
+ }
617
+ },
618
+ {
619
+ name: 'Cobol',
620
+ displayName: trans.__('Cobol'),
621
+ mime: 'text/x-cobol',
622
+ extensions: ['cob', 'cpy'],
623
+ async load() {
624
+ const m = await import('@codemirror/legacy-modes/mode/cobol');
625
+ return legacy(m.cobol);
626
+ }
627
+ },
628
+ {
629
+ name: 'C#',
630
+ displayName: trans.__('C#'),
631
+ alias: ['csharp', 'cs'],
632
+ mime: 'text/x-csharp',
633
+ extensions: ['cs'],
634
+ async load() {
635
+ const m = await import('@codemirror/legacy-modes/mode/clike');
636
+ return legacy(m.csharp);
637
+ }
638
+ },
639
+ {
640
+ name: 'Clojure',
641
+ displayName: trans.__('Clojure'),
642
+ mime: 'text/x-clojure',
643
+ extensions: ['clj', 'cljc', 'cljx'],
644
+ async load() {
645
+ const m = await import('@codemirror/legacy-modes/mode/clojure');
646
+ return legacy(m.clojure);
647
+ }
648
+ },
649
+ {
650
+ name: 'ClojureScript',
651
+ displayName: trans.__('ClojureScript'),
652
+ mime: 'text/x-clojurescript',
653
+ extensions: ['cljs'],
654
+ async load() {
655
+ const m = await import('@codemirror/legacy-modes/mode/clojure');
656
+ return legacy(m.clojure);
657
+ }
658
+ },
659
+ {
660
+ name: 'Closure Stylesheets (GSS)',
661
+ displayName: trans.__('Closure Stylesheets (GSS)'),
662
+ mime: 'text/x-gss',
663
+ extensions: ['gss'],
664
+ async load() {
665
+ const m = await import('@codemirror/legacy-modes/mode/css');
666
+ return legacy(m.gss);
667
+ }
668
+ },
669
+ {
670
+ name: 'CMake',
671
+ displayName: trans.__('CMake'),
672
+ mime: 'text/x-cmake',
673
+ extensions: ['cmake', 'cmake.in'],
674
+ filename: /^CMakeLists\.txt$/,
675
+ async load() {
676
+ const m = await import('@codemirror/legacy-modes/mode/cmake');
677
+ return legacy(m.cmake);
678
+ }
679
+ },
680
+ {
681
+ name: 'CoffeeScript',
682
+ displayName: trans.__('CoffeScript'),
683
+ alias: ['coffee', 'coffee-script'],
684
+ mime: [
685
+ 'application/vnd.coffeescript',
686
+ 'text/coffeescript',
687
+ 'text/x-coffeescript'
688
+ ],
689
+ extensions: ['coffee'],
690
+ async load() {
691
+ const m = await import('@codemirror/legacy-modes/mode/coffeescript');
692
+ return legacy(m.coffeeScript);
693
+ }
694
+ },
695
+ {
696
+ name: 'Common Lisp',
697
+ displayName: trans.__('Common Lisp'),
698
+ alias: ['lisp'],
699
+ mime: 'text/x-common-lisp',
700
+ extensions: ['cl', 'lisp', 'el'],
701
+ async load() {
702
+ const m = await import('@codemirror/legacy-modes/mode/commonlisp');
703
+ return legacy(m.commonLisp);
704
+ }
705
+ },
706
+ {
707
+ name: 'Cypher',
708
+ displayName: trans.__('Cypher'),
709
+ mime: 'application/x-cypher-query',
710
+ extensions: ['cyp', 'cypher'],
711
+ async load() {
712
+ const m = await import('@codemirror/legacy-modes/mode/cypher');
713
+ return legacy(m.cypher);
714
+ }
715
+ },
716
+ {
717
+ name: 'Cython',
718
+ displayName: trans.__('Cython'),
719
+ mime: 'text/x-cython',
720
+ extensions: ['pyx', 'pxd', 'pxi'],
721
+ async load() {
722
+ const m = await import('@codemirror/legacy-modes/mode/python');
723
+ return legacy(m.cython);
724
+ }
725
+ },
726
+ {
727
+ name: 'Crystal',
728
+ displayName: trans.__('Crystal'),
729
+ mime: 'text/x-crystal',
730
+ extensions: ['cr'],
731
+ async load() {
732
+ const m = await import('@codemirror/legacy-modes/mode/crystal');
733
+ return legacy(m.crystal);
734
+ }
735
+ },
736
+ {
737
+ name: 'D',
738
+ displayName: trans.__('D'),
739
+ mime: 'text/x-d',
740
+ extensions: ['d'],
741
+ async load() {
742
+ const m = await import('@codemirror/legacy-modes/mode/d');
743
+ return legacy(m.d);
744
+ }
745
+ },
746
+ {
747
+ name: 'Dart',
748
+ displayName: trans.__('Dart'),
749
+ mime: ['application/dart', 'text/x-dart'],
750
+ extensions: ['dart'],
751
+ async load() {
752
+ const m = await import('@codemirror/legacy-modes/mode/clike');
753
+ return legacy(m.dart);
754
+ }
755
+ },
756
+ {
757
+ name: 'diff',
758
+ displayName: trans.__('diff'),
759
+ mime: 'text/x-diff',
760
+ extensions: ['diff', 'patch'],
761
+ async load() {
762
+ const m = await import('@codemirror/legacy-modes/mode/diff');
763
+ return legacy(m.diff);
764
+ }
765
+ },
766
+ {
767
+ name: 'Dockerfile',
768
+ displayName: trans.__('Dockerfile'),
769
+ mime: 'text/x-dockerfile',
770
+ filename: /^Dockerfile$/,
771
+ async load() {
772
+ const m = await import('@codemirror/legacy-modes/mode/dockerfile');
773
+ return legacy(m.dockerFile);
774
+ }
775
+ },
776
+ {
777
+ name: 'DTD',
778
+ displayName: trans.__('DTD'),
779
+ mime: 'application/xml-dtd',
780
+ extensions: ['dtd'],
781
+ async load() {
782
+ const m = await import('@codemirror/legacy-modes/mode/dtd');
783
+ return legacy(m.dtd);
784
+ }
785
+ },
786
+ {
787
+ name: 'Dylan',
788
+ displayName: trans.__('Dylan'),
789
+ mime: 'text/x-dylan',
790
+ extensions: ['dylan', 'dyl', 'intr'],
791
+ async load() {
792
+ const m = await import('@codemirror/legacy-modes/mode/dylan');
793
+ return legacy(m.dylan);
794
+ }
795
+ },
796
+ {
797
+ name: 'EBNF',
798
+ displayName: trans.__('EBNF'),
799
+ mime: 'text/x-ebnf',
800
+ async load() {
801
+ const m = await import('@codemirror/legacy-modes/mode/ebnf');
802
+ return legacy(m.ebnf);
803
+ }
804
+ },
805
+ {
806
+ name: 'ECL',
807
+ displayName: trans.__('ECL'),
808
+ mime: 'text/x-ecl',
809
+ extensions: ['ecl'],
810
+ async load() {
811
+ const m = await import('@codemirror/legacy-modes/mode/ecl');
812
+ return legacy(m.ecl);
813
+ }
814
+ },
815
+ {
816
+ name: 'edn',
817
+ displayName: trans.__('edn'),
818
+ mime: 'application/edn',
819
+ extensions: ['edn'],
820
+ async load() {
821
+ const m = await import('@codemirror/legacy-modes/mode/clojure');
822
+ return legacy(m.clojure);
823
+ }
824
+ },
825
+ {
826
+ name: 'Eiffel',
827
+ displayName: trans.__('Eiffel'),
828
+ mime: 'text/x-eiffel',
829
+ extensions: ['e'],
830
+ async load() {
831
+ const m = await import('@codemirror/legacy-modes/mode/eiffel');
832
+ return legacy(m.eiffel);
833
+ }
834
+ },
835
+ {
836
+ name: 'Elm',
837
+ displayName: trans.__('Elm'),
838
+ mime: 'text/x-elm',
839
+ extensions: ['elm'],
840
+ async load() {
841
+ const m = await import('@codemirror/legacy-modes/mode/elm');
842
+ return legacy(m.elm);
843
+ }
844
+ },
845
+ {
846
+ name: 'Erlang',
847
+ displayName: trans.__('Erlang'),
848
+ mime: 'text/x-erlang',
849
+ extensions: ['erl'],
850
+ async load() {
851
+ const m = await import('@codemirror/legacy-modes/mode/erlang');
852
+ return legacy(m.erlang);
853
+ }
854
+ },
855
+ {
856
+ name: 'Esper',
857
+ displayName: trans.__('Esper'),
858
+ mime: 'text/x-esper',
859
+ async load() {
860
+ const m = await import('@codemirror/legacy-modes/mode/sql');
861
+ return legacy(m.esper);
862
+ }
863
+ },
864
+ {
865
+ name: 'Factor',
866
+ displayName: trans.__('Factor'),
867
+ mime: 'text/x-factor',
868
+ extensions: ['factor'],
869
+ async load() {
870
+ const m = await import('@codemirror/legacy-modes/mode/factor');
871
+ return legacy(m.factor);
872
+ }
873
+ },
874
+ {
875
+ name: 'FCL',
876
+ displayName: trans.__('FCL'),
877
+ mime: 'text/x-fcl',
878
+ async load() {
879
+ const m = await import('@codemirror/legacy-modes/mode/fcl');
880
+ return legacy(m.fcl);
881
+ }
882
+ },
883
+ {
884
+ name: 'Forth',
885
+ displayName: trans.__('Forth'),
886
+ mime: 'text/x-forth',
887
+ extensions: ['forth', 'fth', '4th'],
888
+ async load() {
889
+ const m = await import('@codemirror/legacy-modes/mode/forth');
890
+ return legacy(m.forth);
891
+ }
892
+ },
893
+ {
894
+ name: 'Fortran',
895
+ displayName: trans.__('Fortran'),
896
+ mime: 'text/x-fortran',
897
+ extensions: ['f', 'for', 'f77', 'f90', 'f95'],
898
+ async load() {
899
+ const m = await import('@codemirror/legacy-modes/mode/fortran');
900
+ return legacy(m.fortran);
901
+ }
902
+ },
903
+ {
904
+ name: 'F#',
905
+ displayName: trans.__('F#'),
906
+ alias: ['fsharp'],
907
+ mime: 'text/x-fsharp',
908
+ extensions: ['fs'],
909
+ async load() {
910
+ const m = await import('@codemirror/legacy-modes/mode/mllike');
911
+ return legacy(m.fSharp);
912
+ }
913
+ },
914
+ {
915
+ name: 'Gas',
916
+ displayName: trans.__('Gas'),
917
+ mime: 'text/x-gas',
918
+ extensions: ['s'],
919
+ async load() {
920
+ const m = await import('@codemirror/legacy-modes/mode/gas');
921
+ return legacy(m.gas);
922
+ }
923
+ },
924
+ {
925
+ name: 'Gherkin',
926
+ displayName: trans.__('Gherkin'),
927
+ mime: 'text/x-feature',
928
+ extensions: ['feature'],
929
+ async load() {
930
+ const m = await import('@codemirror/legacy-modes/mode/gherkin');
931
+ return legacy(m.gherkin);
932
+ }
933
+ },
934
+ {
935
+ name: 'Go',
936
+ displayName: trans.__('Go'),
937
+ mime: 'text/x-go',
938
+ extensions: ['go'],
939
+ async load() {
940
+ const m = await import('@codemirror/legacy-modes/mode/go');
941
+ return legacy(m.go);
942
+ }
943
+ },
944
+ {
945
+ name: 'Groovy',
946
+ displayName: trans.__('Groovy'),
947
+ mime: 'text/x-groovy',
948
+ extensions: ['groovy', 'gradle'],
949
+ filename: /^Jenkinsfile$/,
950
+ async load() {
951
+ const m = await import('@codemirror/legacy-modes/mode/groovy');
952
+ return legacy(m.groovy);
953
+ }
954
+ },
955
+ {
956
+ name: 'Haskell',
957
+ displayName: trans.__('Haskell'),
958
+ mime: 'text/x-haskell',
959
+ extensions: ['hs'],
960
+ async load() {
961
+ const m = await import('@codemirror/legacy-modes/mode/haskell');
962
+ return legacy(m.haskell);
963
+ }
964
+ },
965
+ {
966
+ name: 'Haxe',
967
+ displayName: trans.__('Haxe'),
968
+ mime: 'text/x-haxe',
969
+ extensions: ['hx'],
970
+ async load() {
971
+ const m = await import('@codemirror/legacy-modes/mode/haxe');
972
+ return legacy(m.haxe);
973
+ }
974
+ },
975
+ {
976
+ name: 'HXML',
977
+ displayName: trans.__('HXML'),
978
+ mime: 'text/x-hxml',
979
+ extensions: ['hxml'],
980
+ async load() {
981
+ const m = await import('@codemirror/legacy-modes/mode/haxe');
982
+ return legacy(m.hxml);
983
+ }
984
+ },
985
+ {
986
+ name: 'HTTP',
987
+ displayName: trans.__('HTTP'),
988
+ mime: 'message/http',
989
+ async load() {
990
+ const m = await import('@codemirror/legacy-modes/mode/http');
991
+ return legacy(m.http);
992
+ }
993
+ },
994
+ {
995
+ name: 'IDL',
996
+ displayName: trans.__('IDL'),
997
+ mime: 'text/x-idl',
998
+ extensions: ['pro'],
999
+ async load() {
1000
+ const m = await import('@codemirror/legacy-modes/mode/idl');
1001
+ return legacy(m.idl);
1002
+ }
1003
+ },
1004
+ {
1005
+ name: 'JSON-LD',
1006
+ displayName: trans.__('JSON-LD'),
1007
+ alias: ['jsonld'],
1008
+ mime: 'application/ld+json',
1009
+ extensions: ['jsonld'],
1010
+ async load() {
1011
+ const m = await import('@codemirror/legacy-modes/mode/javascript');
1012
+ return legacy(m.jsonld);
1013
+ }
1014
+ },
1015
+ {
1016
+ name: 'Jinja2',
1017
+ displayName: trans.__('Jinja2'),
1018
+ mime: 'text/jinja2',
1019
+ extensions: ['j2', 'jinja', 'jinja2'],
1020
+ async load() {
1021
+ const m = await import('@codemirror/legacy-modes/mode/jinja2');
1022
+ return legacy(m.jinja2);
1023
+ }
1024
+ },
1025
+ {
1026
+ name: 'Julia',
1027
+ displayName: trans.__('Julia'),
1028
+ mime: 'text/x-julia',
1029
+ extensions: ['jl'],
1030
+ async load() {
1031
+ const m = await import('@codemirror/legacy-modes/mode/julia');
1032
+ return legacy(m.julia);
1033
+ }
1034
+ },
1035
+ {
1036
+ name: 'Kotlin',
1037
+ displayName: trans.__('Kotlin'),
1038
+ mime: 'text/x-kotlin',
1039
+ extensions: ['kt'],
1040
+ async load() {
1041
+ const m = await import('@codemirror/legacy-modes/mode/clike');
1042
+ return legacy(m.kotlin);
1043
+ }
1044
+ },
1045
+ {
1046
+ name: 'LESS',
1047
+ displayName: trans.__('LESS'),
1048
+ mime: 'text/x-less',
1049
+ extensions: ['less'],
1050
+ async load() {
1051
+ const m = await import('@codemirror/legacy-modes/mode/css');
1052
+ return legacy(m.less);
1053
+ }
1054
+ },
1055
+ {
1056
+ name: 'LiveScript',
1057
+ displayName: trans.__('LiveScript'),
1058
+ alias: ['ls'],
1059
+ mime: 'text/x-livescript',
1060
+ extensions: ['ls'],
1061
+ async load() {
1062
+ const m = await import('@codemirror/legacy-modes/mode/livescript');
1063
+ return legacy(m.liveScript);
1064
+ }
1065
+ },
1066
+ {
1067
+ name: 'Lua',
1068
+ displayName: trans.__('Lua'),
1069
+ mime: 'text/x-lua',
1070
+ extensions: ['lua'],
1071
+ async load() {
1072
+ const m = await import('@codemirror/legacy-modes/mode/lua');
1073
+ return legacy(m.lua);
1074
+ }
1075
+ },
1076
+ {
1077
+ name: 'mIRC',
1078
+ displayName: trans.__('mIRC'),
1079
+ mime: 'text/mirc',
1080
+ async load() {
1081
+ const m = await import('@codemirror/legacy-modes/mode/mirc');
1082
+ return legacy(m.mirc);
1083
+ }
1084
+ },
1085
+ {
1086
+ name: 'Mathematica',
1087
+ displayName: trans.__('Mathematica'),
1088
+ mime: 'text/x-mathematica',
1089
+ extensions: ['m', 'nb', 'wl', 'wls'],
1090
+ async load() {
1091
+ const m = await import('@codemirror/legacy-modes/mode/mathematica');
1092
+ return legacy(m.mathematica);
1093
+ }
1094
+ },
1095
+ {
1096
+ name: 'Modelica',
1097
+ displayName: trans.__('Modelica'),
1098
+ mime: 'text/x-modelica',
1099
+ extensions: ['mo'],
1100
+ async load() {
1101
+ const m = await import('@codemirror/legacy-modes/mode/modelica');
1102
+ return legacy(m.modelica);
1103
+ }
1104
+ },
1105
+ {
1106
+ name: 'MUMPS',
1107
+ displayName: trans.__('MUMPS'),
1108
+ mime: 'text/x-mumps',
1109
+ extensions: ['mps'],
1110
+ async load() {
1111
+ const m = await import('@codemirror/legacy-modes/mode/mumps');
1112
+ return legacy(m.mumps);
1113
+ }
1114
+ },
1115
+ {
1116
+ name: 'mbox',
1117
+ displayName: trans.__('mbox'),
1118
+ mime: 'application/mbox',
1119
+ extensions: ['mbox'],
1120
+ async load() {
1121
+ const m = await import('@codemirror/legacy-modes/mode/mbox');
1122
+ return legacy(m.mbox);
1123
+ }
1124
+ },
1125
+ {
1126
+ name: 'Nginx',
1127
+ displayName: trans.__('Nginx'),
1128
+ mime: 'text/x-nginx-conf',
1129
+ filename: /nginx.*\.conf$/i,
1130
+ async load() {
1131
+ const m = await import('@codemirror/legacy-modes/mode/nginx');
1132
+ return legacy(m.nginx);
1133
+ }
1134
+ },
1135
+ {
1136
+ name: 'NSIS',
1137
+ displayName: trans.__('NSIS'),
1138
+ mime: 'text/x-nsis',
1139
+ extensions: ['nsh', 'nsi'],
1140
+ async load() {
1141
+ const m = await import('@codemirror/legacy-modes/mode/nsis');
1142
+ return legacy(m.nsis);
1143
+ }
1144
+ },
1145
+ {
1146
+ name: 'NTriples',
1147
+ displayName: trans.__('NTriples'),
1148
+ mime: [
1149
+ 'application/n-triples',
1150
+ 'application/n-quads',
1151
+ 'text/n-triples'
1152
+ ],
1153
+ extensions: ['nt', 'nq'],
1154
+ async load() {
1155
+ const m = await import('@codemirror/legacy-modes/mode/ntriples');
1156
+ return legacy(m.ntriples);
1157
+ }
1158
+ },
1159
+ {
1160
+ name: 'Objective-C',
1161
+ displayName: trans.__('Objective-C'),
1162
+ alias: ['objective-c', 'objc'],
1163
+ mime: 'text/x-objectivec',
1164
+ extensions: ['m'],
1165
+ async load() {
1166
+ const m = await import('@codemirror/legacy-modes/mode/clike');
1167
+ return legacy(m.objectiveC);
1168
+ }
1169
+ },
1170
+ {
1171
+ name: 'Objective-C++',
1172
+ displayName: trans.__('Objective-C++'),
1173
+ alias: ['objective-c++', 'objc++'],
1174
+ mime: 'text/x-objectivec++',
1175
+ extensions: ['mm'],
1176
+ async load() {
1177
+ const m = await import('@codemirror/legacy-modes/mode/clike');
1178
+ return legacy(m.objectiveCpp);
1179
+ }
1180
+ },
1181
+ {
1182
+ name: 'OCaml',
1183
+ displayName: trans.__('OCaml'),
1184
+ mime: 'text/x-ocaml',
1185
+ extensions: ['ml', 'mli', 'mll', 'mly'],
1186
+ async load() {
1187
+ const m = await import('@codemirror/legacy-modes/mode/mllike');
1188
+ return legacy(m.oCaml);
1189
+ }
1190
+ },
1191
+ {
1192
+ name: 'Octave',
1193
+ displayName: trans.__('Octave'),
1194
+ mime: 'text/x-octave',
1195
+ extensions: ['m'],
1196
+ async load() {
1197
+ const m = await import('@codemirror/legacy-modes/mode/octave');
1198
+ return legacy(m.octave);
1199
+ }
1200
+ },
1201
+ {
1202
+ name: 'Oz',
1203
+ displayName: trans.__('Oz'),
1204
+ mime: 'text/x-oz',
1205
+ extensions: ['oz'],
1206
+ async load() {
1207
+ const m = await import('@codemirror/legacy-modes/mode/oz');
1208
+ return legacy(m.oz);
1209
+ }
1210
+ },
1211
+ {
1212
+ name: 'Pascal',
1213
+ displayName: trans.__('Pascal'),
1214
+ mime: 'text/x-pascal',
1215
+ extensions: ['p', 'pas'],
1216
+ async load() {
1217
+ const m = await import('@codemirror/legacy-modes/mode/pascal');
1218
+ return legacy(m.pascal);
1219
+ }
1220
+ },
1221
+ {
1222
+ name: 'Perl',
1223
+ displayName: trans.__('Perl'),
1224
+ mime: 'text/x-perl',
1225
+ extensions: ['pl', 'pm'],
1226
+ async load() {
1227
+ const m = await import('@codemirror/legacy-modes/mode/perl');
1228
+ return legacy(m.perl);
1229
+ }
1230
+ },
1231
+ {
1232
+ name: 'Pig',
1233
+ displayName: trans.__('Pig'),
1234
+ mime: 'text/x-pig',
1235
+ extensions: ['pig'],
1236
+ async load() {
1237
+ const m = await import('@codemirror/legacy-modes/mode/pig');
1238
+ return legacy(m.pig);
1239
+ }
1240
+ },
1241
+ {
1242
+ name: 'PowerShell',
1243
+ displayName: trans.__('PowerShell'),
1244
+ mime: 'application/x-powershell',
1245
+ extensions: ['ps1', 'psd1', 'psm1'],
1246
+ async load() {
1247
+ const m = await import('@codemirror/legacy-modes/mode/powershell');
1248
+ return legacy(m.powerShell);
1249
+ }
1250
+ },
1251
+ {
1252
+ name: 'Properties files',
1253
+ displayName: trans.__('Properties files'),
1254
+ alias: ['ini', 'properties'],
1255
+ mime: 'text/x-properties',
1256
+ extensions: ['properties', 'ini', 'in'],
1257
+ async load() {
1258
+ const m = await import('@codemirror/legacy-modes/mode/properties');
1259
+ return legacy(m.properties);
1260
+ }
1261
+ },
1262
+ {
1263
+ name: 'ProtoBuf',
1264
+ displayName: trans.__('ProtoBuf'),
1265
+ mime: 'text/x-protobuf',
1266
+ extensions: ['proto'],
1267
+ async load() {
1268
+ const m = await import('@codemirror/legacy-modes/mode/protobuf');
1269
+ return legacy(m.protobuf);
1270
+ }
1271
+ },
1272
+ {
1273
+ name: 'Puppet',
1274
+ displayName: trans.__('Puppet'),
1275
+ mime: 'text/x-puppet',
1276
+ extensions: ['pp'],
1277
+ async load() {
1278
+ const m = await import('@codemirror/legacy-modes/mode/puppet');
1279
+ return legacy(m.puppet);
1280
+ }
1281
+ },
1282
+ {
1283
+ name: 'Q',
1284
+ displayName: trans.__('Q'),
1285
+ mime: 'text/x-q',
1286
+ extensions: ['q'],
1287
+ async load() {
1288
+ const m = await import('@codemirror/legacy-modes/mode/q');
1289
+ return legacy(m.q);
1290
+ }
1291
+ },
1292
+ {
1293
+ name: 'R',
1294
+ displayName: trans.__('R'),
1295
+ alias: ['rscript'],
1296
+ mime: 'text/x-rsrc',
1297
+ extensions: ['r', 'R'],
1298
+ async load() {
1299
+ const m = await import('@codemirror/legacy-modes/mode/r');
1300
+ return legacy(m.r);
1301
+ }
1302
+ },
1303
+ {
1304
+ name: 'RPM Changes',
1305
+ displayName: trans.__('RPM Changes'),
1306
+ mime: 'text/x-rpm-changes',
1307
+ async load() {
1308
+ const m = await import('@codemirror/legacy-modes/mode/rpm');
1309
+ return legacy(m.rpmChanges);
1310
+ }
1311
+ },
1312
+ {
1313
+ name: 'RPM Spec',
1314
+ displayName: trans.__('RPM Spec'),
1315
+ mime: 'text/x-rpm-spec',
1316
+ extensions: ['spec'],
1317
+ async load() {
1318
+ const m = await import('@codemirror/legacy-modes/mode/rpm');
1319
+ return legacy(m.rpmSpec);
1320
+ }
1321
+ },
1322
+ {
1323
+ name: 'Ruby',
1324
+ displayName: trans.__('Ruby'),
1325
+ alias: ['jruby', 'macruby', 'rake', 'rb', 'rbx'],
1326
+ mime: 'text/x-ruby',
1327
+ extensions: ['rb'],
1328
+ async load() {
1329
+ const m = await import('@codemirror/legacy-modes/mode/ruby');
1330
+ return legacy(m.ruby);
1331
+ }
1332
+ },
1333
+ {
1334
+ name: 'SAS',
1335
+ displayName: trans.__('SAS'),
1336
+ mime: 'text/x-sas',
1337
+ extensions: ['sas'],
1338
+ async load() {
1339
+ const m = await import('@codemirror/legacy-modes/mode/sas');
1340
+ return legacy(m.sas);
1341
+ }
1342
+ },
1343
+ {
1344
+ name: 'Scala',
1345
+ displayName: trans.__('Scala'),
1346
+ mime: 'text/x-scala',
1347
+ extensions: ['scala'],
1348
+ async load() {
1349
+ const m = await import('@codemirror/legacy-modes/mode/clike');
1350
+ return legacy(m.scala);
1351
+ }
1352
+ },
1353
+ {
1354
+ name: 'Scheme',
1355
+ displayName: trans.__('Scheme'),
1356
+ mime: 'text/x-scheme',
1357
+ extensions: ['scm', 'ss'],
1358
+ async load() {
1359
+ const m = await import('@codemirror/legacy-modes/mode/scheme');
1360
+ return legacy(m.scheme);
1361
+ }
1362
+ },
1363
+ {
1364
+ name: 'SCSS',
1365
+ displayName: trans.__('SCSS'),
1366
+ mime: 'text/x-scss',
1367
+ extensions: ['scss'],
1368
+ async load() {
1369
+ const m = await import('@codemirror/legacy-modes/mode/css');
1370
+ return legacy(m.sCSS);
1371
+ }
1372
+ },
1373
+ {
1374
+ name: 'Shell',
1375
+ displayName: trans.__('Shell'),
1376
+ alias: ['bash', 'sh', 'zsh'],
1377
+ mime: ['text/x-sh', 'application/x-sh'],
1378
+ extensions: ['sh', 'ksh', 'bash'],
1379
+ filename: /^PKGBUILD$/,
1380
+ async load() {
1381
+ const m = await import('@codemirror/legacy-modes/mode/shell');
1382
+ return legacy(m.shell);
1383
+ }
1384
+ },
1385
+ {
1386
+ name: 'Sieve',
1387
+ displayName: trans.__('Sieve'),
1388
+ mime: 'application/sieve',
1389
+ extensions: ['siv', 'sieve'],
1390
+ async load() {
1391
+ const m = await import('@codemirror/legacy-modes/mode/sieve');
1392
+ return legacy(m.sieve);
1393
+ }
1394
+ },
1395
+ {
1396
+ name: 'Smalltalk',
1397
+ displayName: trans.__('Smalltalk'),
1398
+ mime: 'text/x-stsrc',
1399
+ extensions: ['st'],
1400
+ async load() {
1401
+ const m = await import('@codemirror/legacy-modes/mode/smalltalk');
1402
+ return legacy(m.smalltalk);
1403
+ }
1404
+ },
1405
+ {
1406
+ name: 'Solr',
1407
+ displayName: trans.__('Solr'),
1408
+ mime: 'text/x-solr',
1409
+ async load() {
1410
+ const m = await import('@codemirror/legacy-modes/mode/solr');
1411
+ return legacy(m.solr);
1412
+ }
1413
+ },
1414
+ {
1415
+ name: 'SML',
1416
+ displayName: trans.__('SML'),
1417
+ mime: 'text/x-sml',
1418
+ extensions: ['sml', 'sig', 'fun', 'smackspec'],
1419
+ async load() {
1420
+ const m = await import('@codemirror/legacy-modes/mode/mllike');
1421
+ return legacy(m.sml);
1422
+ }
1423
+ },
1424
+ {
1425
+ name: 'SPARQL',
1426
+ displayName: trans.__('SPARQL'),
1427
+ alias: ['sparul'],
1428
+ mime: 'application/sparql-query',
1429
+ extensions: ['rq', 'sparql'],
1430
+ async load() {
1431
+ const m = await import('@codemirror/legacy-modes/mode/sparql');
1432
+ return legacy(m.sparql);
1433
+ }
1434
+ },
1435
+ {
1436
+ name: 'Spreadsheet',
1437
+ displayName: trans.__('Spreadsheet'),
1438
+ alias: ['excel', 'formula'],
1439
+ mime: 'text/x-spreadsheet',
1440
+ async load() {
1441
+ const m = await import('@codemirror/legacy-modes/mode/spreadsheet');
1442
+ return legacy(m.spreadsheet);
1443
+ }
1444
+ },
1445
+ {
1446
+ name: 'Squirrel',
1447
+ displayName: trans.__('Squirrel'),
1448
+ mime: 'text/x-squirrel',
1449
+ extensions: ['nut'],
1450
+ async load() {
1451
+ const m = await import('@codemirror/legacy-modes/mode/clike');
1452
+ return legacy(m.squirrel);
1453
+ }
1454
+ },
1455
+ {
1456
+ name: 'Stylus',
1457
+ displayName: trans.__('Stylus'),
1458
+ mime: 'text/x-styl',
1459
+ extensions: ['styl'],
1460
+ async load() {
1461
+ const m = await import('@codemirror/legacy-modes/mode/stylus');
1462
+ return legacy(m.stylus);
1463
+ }
1464
+ },
1465
+ {
1466
+ name: 'Swift',
1467
+ displayName: trans.__('Swift'),
1468
+ mime: 'text/x-swift',
1469
+ extensions: ['swift'],
1470
+ async load() {
1471
+ const m = await import('@codemirror/legacy-modes/mode/swift');
1472
+ return legacy(m.swift);
1473
+ }
1474
+ },
1475
+ {
1476
+ name: 'sTeX',
1477
+ displayName: trans.__('sTeX'),
1478
+ mime: 'text/x-stex',
1479
+ async load() {
1480
+ const m = await import('@codemirror/legacy-modes/mode/stex');
1481
+ return legacy(m.stex);
1482
+ }
1483
+ },
1484
+ {
1485
+ name: 'LaTeX',
1486
+ displayName: trans.__('LaTeX'),
1487
+ alias: ['tex'],
1488
+ mime: 'text/x-latex',
1489
+ extensions: ['text', 'ltx', 'tex'],
1490
+ async load() {
1491
+ const m = await import('@codemirror/legacy-modes/mode/stex');
1492
+ return legacy(m.stex);
1493
+ }
1494
+ },
1495
+ {
1496
+ name: 'SystemVerilog',
1497
+ displayName: trans.__('SystemVerilog'),
1498
+ mime: 'text/x-systemverilog',
1499
+ extensions: ['v', 'sv', 'svh'],
1500
+ async load() {
1501
+ const m = await import('@codemirror/legacy-modes/mode/verilog');
1502
+ return legacy(m.verilog);
1503
+ }
1504
+ },
1505
+ {
1506
+ name: 'Tcl',
1507
+ displayName: trans.__('Tcl'),
1508
+ mime: 'text/x-tcl',
1509
+ extensions: ['tcl'],
1510
+ async load() {
1511
+ const m = await import('@codemirror/legacy-modes/mode/tcl');
1512
+ return legacy(m.tcl);
1513
+ }
1514
+ },
1515
+ {
1516
+ name: 'Textile',
1517
+ displayName: trans.__('Textile'),
1518
+ mime: 'text/x-textile',
1519
+ extensions: ['textile'],
1520
+ async load() {
1521
+ const m = await import('@codemirror/legacy-modes/mode/textile');
1522
+ return legacy(m.textile);
1523
+ }
1524
+ },
1525
+ {
1526
+ name: 'TiddlyWiki',
1527
+ displayName: trans.__('TiddlyWiki'),
1528
+ mime: 'text/x-tiddlywiki',
1529
+ async load() {
1530
+ const m = await import('@codemirror/legacy-modes/mode/tiddlywiki');
1531
+ return legacy(m.tiddlyWiki);
1532
+ }
1533
+ },
1534
+ {
1535
+ name: 'Tiki wiki',
1536
+ displayName: trans.__('Tiki wiki'),
1537
+ mime: 'text/tiki',
1538
+ async load() {
1539
+ const m = await import('@codemirror/legacy-modes/mode/tiki');
1540
+ return legacy(m.tiki);
1541
+ }
1542
+ },
1543
+ {
1544
+ name: 'TOML',
1545
+ displayName: trans.__('TOML'),
1546
+ mime: 'text/x-toml',
1547
+ extensions: ['toml'],
1548
+ async load() {
1549
+ const m = await import('@codemirror/legacy-modes/mode/toml');
1550
+ return legacy(m.toml);
1551
+ }
1552
+ },
1553
+ {
1554
+ name: 'troff',
1555
+ displayName: trans.__('troff'),
1556
+ mime: 'text/troff',
1557
+ extensions: ['1', '2', '3', '4', '5', '6', '7', '8', '9'],
1558
+ async load() {
1559
+ const m = await import('@codemirror/legacy-modes/mode/troff');
1560
+ return legacy(m.troff);
1561
+ }
1562
+ },
1563
+ {
1564
+ name: 'TTCN',
1565
+ displayName: trans.__('TTCN'),
1566
+ mime: 'text/x-ttcn',
1567
+ extensions: ['ttcn', 'ttcn3', 'ttcnpp'],
1568
+ async load() {
1569
+ const m = await import('@codemirror/legacy-modes/mode/ttcn');
1570
+ return legacy(m.ttcn);
1571
+ }
1572
+ },
1573
+ {
1574
+ name: 'TTCN_CFG',
1575
+ displayName: trans.__('TTCN_CFG'),
1576
+ mime: 'text/x-ttcn-cfg',
1577
+ extensions: ['cfg'],
1578
+ async load() {
1579
+ const m = await import('@codemirror/legacy-modes/mode/ttcn-cfg');
1580
+ return legacy(m.ttcnCfg);
1581
+ }
1582
+ },
1583
+ {
1584
+ name: 'Turtle',
1585
+ displayName: trans.__('Turtle'),
1586
+ mime: 'text/turtle',
1587
+ extensions: ['ttl'],
1588
+ async load() {
1589
+ const m = await import('@codemirror/legacy-modes/mode/turtle');
1590
+ return legacy(m.turtle);
1591
+ }
1592
+ },
1593
+ {
1594
+ name: 'Web IDL',
1595
+ displayName: trans.__('Web IDL'),
1596
+ mime: 'text/x-webidl',
1597
+ extensions: ['webidl'],
1598
+ async load() {
1599
+ const m = await import('@codemirror/legacy-modes/mode/webidl');
1600
+ return legacy(m.webIDL);
1601
+ }
1602
+ },
1603
+ {
1604
+ name: 'VB.NET',
1605
+ displayName: trans.__('VB.NET'),
1606
+ mime: 'text/x-vb',
1607
+ extensions: ['vb'],
1608
+ async load() {
1609
+ const m = await import('@codemirror/legacy-modes/mode/vb');
1610
+ return legacy(m.vb);
1611
+ }
1612
+ },
1613
+ {
1614
+ name: 'VBScript',
1615
+ displayName: trans.__('VBScript'),
1616
+ mime: 'text/vbscript',
1617
+ extensions: ['vbs'],
1618
+ async load() {
1619
+ const m = await import('@codemirror/legacy-modes/mode/vbscript');
1620
+ return legacy(m.vbScript);
1621
+ }
1622
+ },
1623
+ {
1624
+ name: 'Velocity',
1625
+ displayName: trans.__('Velocity'),
1626
+ mime: 'text/velocity',
1627
+ extensions: ['vtl'],
1628
+ async load() {
1629
+ const m = await import('@codemirror/legacy-modes/mode/velocity');
1630
+ return legacy(m.velocity);
1631
+ }
1632
+ },
1633
+ {
1634
+ name: 'Verilog',
1635
+ displayName: trans.__('Verilog'),
1636
+ mime: 'text/x-verilog',
1637
+ extensions: ['v'],
1638
+ async load() {
1639
+ const m = await import('@codemirror/legacy-modes/mode/verilog');
1640
+ return legacy(m.verilog);
1641
+ }
1642
+ },
1643
+ {
1644
+ name: 'VHDL',
1645
+ displayName: trans.__('VHDL'),
1646
+ mime: 'text/x-vhdl',
1647
+ extensions: ['vhd', 'vhdl'],
1648
+ async load() {
1649
+ const m = await import('@codemirror/legacy-modes/mode/vhdl');
1650
+ return legacy(m.vhdl);
1651
+ }
1652
+ },
1653
+ {
1654
+ name: 'XQuery',
1655
+ displayName: trans.__('XQuery'),
1656
+ mime: 'application/xquery',
1657
+ extensions: ['xy', 'xquery'],
1658
+ async load() {
1659
+ const m = await import('@codemirror/legacy-modes/mode/xquery');
1660
+ return legacy(m.xQuery);
1661
+ }
1662
+ },
1663
+ {
1664
+ name: 'Yacas',
1665
+ displayName: trans.__('Yacas'),
1666
+ mime: 'text/x-yacas',
1667
+ extensions: ['ys'],
1668
+ async load() {
1669
+ const m = await import('@codemirror/legacy-modes/mode/yacas');
1670
+ return legacy(m.yacas);
1671
+ }
1672
+ },
1673
+ {
1674
+ name: 'YAML',
1675
+ displayName: trans.__('YAML'),
1676
+ alias: ['yml'],
1677
+ mime: ['text/x-yaml', 'text/yaml'],
1678
+ extensions: ['yaml', 'yml'],
1679
+ async load() {
1680
+ const m = await import('@codemirror/legacy-modes/mode/yaml');
1681
+ return legacy(m.yaml);
1682
+ }
1683
+ },
1684
+ {
1685
+ name: 'Z80',
1686
+ displayName: trans.__('Z80'),
1687
+ mime: 'text/x-z80',
1688
+ extensions: ['z80'],
1689
+ async load() {
1690
+ const m = await import('@codemirror/legacy-modes/mode/z80');
1691
+ return legacy(m.z80);
1692
+ }
1693
+ },
1694
+ {
1695
+ name: 'mscgen',
1696
+ displayName: trans.__('mscgen'),
1697
+ mime: 'text/x-mscgen',
1698
+ extensions: ['mscgen', 'mscin', 'msc'],
1699
+ async load() {
1700
+ const m = await import('@codemirror/legacy-modes/mode/mscgen');
1701
+ return legacy(m.mscgen);
1702
+ }
1703
+ },
1704
+ {
1705
+ name: 'xu',
1706
+ displayName: trans.__('xu'),
1707
+ mime: 'text/x-xu',
1708
+ extensions: ['xu'],
1709
+ async load() {
1710
+ const m = await import('@codemirror/legacy-modes/mode/mscgen');
1711
+ return legacy(m.xu);
1712
+ }
1713
+ },
1714
+ {
1715
+ name: 'msgenny',
1716
+ displayName: trans.__('msgenny'),
1717
+ mime: 'text/x-msgenny',
1718
+ extensions: ['msgenny'],
1719
+ async load() {
1720
+ const m = await import('@codemirror/legacy-modes/mode/mscgen');
1721
+ return legacy(m.msgenny);
1722
+ }
1723
+ }
1724
+ ];
1725
+ }
1726
+ }