1 import {StreamLanguage} from "@codemirror/language"
3 import {css} from '@codemirror/lang-css';
4 import {c, csharp, kotlin, scala} from '@codemirror/legacy-modes/mode/clike';
5 import {cpp} from '@codemirror/lang-cpp';
6 import {diff} from '@codemirror/legacy-modes/mode/diff';
7 import {fortran} from '@codemirror/legacy-modes/mode/fortran';
8 import {go} from '@codemirror/legacy-modes/mode/go';
9 import {haskell} from '@codemirror/legacy-modes/mode/haskell';
10 import {html} from '@codemirror/lang-html';
11 import {java} from '@codemirror/lang-java';
12 import {javascript} from '@codemirror/lang-javascript';
13 import {json} from '@codemirror/lang-json';
14 import {julia} from '@codemirror/legacy-modes/mode/julia';
15 import {lua} from '@codemirror/legacy-modes/mode/lua';
16 import {markdown} from '@codemirror/lang-markdown';
17 import {oCaml, fSharp, sml} from '@codemirror/legacy-modes/mode/mllike';
18 import {nginx} from '@codemirror/legacy-modes/mode/nginx';
19 import {perl} from '@codemirror/legacy-modes/mode/perl';
20 import {pascal} from '@codemirror/legacy-modes/mode/pascal';
21 import {php} from '@codemirror/lang-php';
22 import {powerShell} from '@codemirror/legacy-modes/mode/powershell';
23 import {properties} from '@codemirror/legacy-modes/mode/properties';
24 import {python} from '@codemirror/lang-python';
25 import {ruby} from '@codemirror/legacy-modes/mode/ruby';
26 import {rust} from '@codemirror/lang-rust';
27 import {shell} from '@codemirror/legacy-modes/mode/shell';
28 import {sql} from '@codemirror/lang-sql';
29 import {stex} from '@codemirror/legacy-modes/mode/stex';
30 import {toml} from '@codemirror/legacy-modes/mode/toml';
31 import {vb} from '@codemirror/legacy-modes/mode/vb';
32 import {vbScript} from '@codemirror/legacy-modes/mode/vbscript';
33 import {xml} from '@codemirror/lang-xml';
34 import {yaml} from '@codemirror/legacy-modes/mode/yaml';
37 // Mapping of possible languages or formats from user input to their codemirror modes.
38 // Value can be a mode string or a function that will receive the code content & return the mode string.
39 // The function option is used in the event the exact mode could be dynamic depending on the code.
41 bash: () => StreamLanguage.define(shell),
42 c: () => StreamLanguage.define(c),
45 'c#': () => StreamLanguage.define(csharp),
46 csharp: () => StreamLanguage.define(csharp),
47 diff: () => StreamLanguage.define(diff),
48 for: () => StreamLanguage.define(fortran),
49 fortran: () => StreamLanguage.define(fortran),
50 'f#': () => StreamLanguage.define(fSharp),
51 fsharp: () => StreamLanguage.define(fSharp),
52 go: () => StreamLanguage.define(go),
53 haskell: () => StreamLanguage.define(haskell),
54 hs: () => StreamLanguage.define(haskell),
56 ini: () => StreamLanguage.define(properties),
58 javascript: () => javascript(),
60 js: () => javascript(),
61 jl: () => StreamLanguage.define(julia),
62 julia: () => StreamLanguage.define(julia),
63 kotlin: () => StreamLanguage.define(kotlin),
64 latex: () => StreamLanguage.define(stex),
65 lua: () => StreamLanguage.define(lua),
66 markdown: () => markdown(),
68 mdown: () => markdown(),
69 ml: () => StreamLanguage.define(sml),
70 nginx: () => StreamLanguage.define(nginx),
71 pas: () => StreamLanguage.define(pascal),
72 pascal: () => StreamLanguage.define(pascal),
73 perl: () => StreamLanguage.define(perl),
75 const hasTags = code.includes('<?php');
76 return php({plain: !hasTags});
78 pl: () => StreamLanguage.define(perl),
79 powershell: () => StreamLanguage.define(powerShell),
80 properties: () => StreamLanguage.define(properties),
81 ocaml: () => StreamLanguage.define(oCaml),
83 python: () => python(),
84 rb: () => StreamLanguage.define(ruby),
86 ruby: () => StreamLanguage.define(ruby),
88 scala: () => StreamLanguage.define(scala),
89 shell: () => StreamLanguage.define(shell),
90 sh: () => StreamLanguage.define(shell),
91 stext: () => StreamLanguage.define(stex),
92 toml: () => StreamLanguage.define(toml),
93 ts: () => javascript({typescript: true}),
94 typescript: () => javascript({typescript: true}),
96 vbs: () => StreamLanguage.define(vbScript),
97 vbscript: () => StreamLanguage.define(vbScript),
98 'vb.net': () => StreamLanguage.define(vb),
99 vbnet: () => StreamLanguage.define(vb),
101 yaml: () => StreamLanguage.define(yaml),
102 yml: () => StreamLanguage.define(yaml),
106 * Get the relevant codemirror language extension based upon the given language
107 * suggestion and content.
108 * @param {String} langSuggestion
109 * @param {String} content
110 * @returns {StreamLanguage}
112 export function getLanguageExtension(langSuggestion, content) {
113 const suggestion = langSuggestion.trim().replace(/^\./g, '').toLowerCase();
115 const language = modeMap[suggestion];
117 if (typeof language === 'undefined') {
121 return language(content);