1 import {StreamLanguage} from "@codemirror/language"
3 import {css} from '@codemirror/legacy-modes/mode/css';
4 import {c, cpp, csharp, java, kotlin, scala, dart} from '@codemirror/legacy-modes/mode/clike';
5 import {diff} from '@codemirror/legacy-modes/mode/diff';
6 import {fortran} from '@codemirror/legacy-modes/mode/fortran';
7 import {go} from '@codemirror/legacy-modes/mode/go';
8 import {haskell} from '@codemirror/legacy-modes/mode/haskell';
9 import {javascript, json, typescript} from '@codemirror/legacy-modes/mode/javascript';
10 import {julia} from '@codemirror/legacy-modes/mode/julia';
11 import {lua} from '@codemirror/legacy-modes/mode/lua';
12 import {markdown} from '@codemirror/lang-markdown';
13 import {oCaml, fSharp, sml} from '@codemirror/legacy-modes/mode/mllike';
14 import {nginx} from '@codemirror/legacy-modes/mode/nginx';
15 import {octave} from '@codemirror/legacy-modes/mode/octave';
16 import {perl} from '@codemirror/legacy-modes/mode/perl';
17 import {pascal} from '@codemirror/legacy-modes/mode/pascal';
18 import {php} from '@codemirror/lang-php';
19 import {powerShell} from '@codemirror/legacy-modes/mode/powershell';
20 import {properties} from '@codemirror/legacy-modes/mode/properties';
21 import {python} from '@codemirror/legacy-modes/mode/python';
22 import {ruby} from '@codemirror/legacy-modes/mode/ruby';
23 import {rust} from '@codemirror/legacy-modes/mode/rust';
24 import {scheme} from '@codemirror/legacy-modes/mode/scheme';
25 import {shell} from '@codemirror/legacy-modes/mode/shell';
26 import {standardSQL, pgSQL, msSQL, mySQL, sqlite, plSQL} from '@codemirror/legacy-modes/mode/sql';
27 import {stex} from '@codemirror/legacy-modes/mode/stex';
28 import {toml} from '@codemirror/legacy-modes/mode/toml';
29 // import {twig, smarty} from '@codemirror/legacy-modes/mode/php'; // TODO
30 import {vb} from '@codemirror/legacy-modes/mode/vb';
31 import {vbScript} from '@codemirror/legacy-modes/mode/vbscript';
32 import {xml, html} from '@codemirror/legacy-modes/mode/xml';
33 import {yaml} from '@codemirror/legacy-modes/mode/yaml';
34 import {swift} from "@codemirror/legacy-modes/mode/swift";
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),
43 css: () => StreamLanguage.define(css),
44 'c++': () => StreamLanguage.define(cpp),
45 'c#': () => StreamLanguage.define(csharp),
46 csharp: () => StreamLanguage.define(csharp),
47 dart: () => StreamLanguage.define(dart),
48 diff: () => StreamLanguage.define(diff),
49 for: () => StreamLanguage.define(fortran),
50 fortran: () => StreamLanguage.define(fortran),
51 'f#': () => StreamLanguage.define(fSharp),
52 fsharp: () => StreamLanguage.define(fSharp),
53 go: () => StreamLanguage.define(go),
54 haskell: () => StreamLanguage.define(haskell),
55 hs: () => StreamLanguage.define(haskell),
56 html: () => StreamLanguage.define(html),
57 ini: () => StreamLanguage.define(properties),
58 java: () => StreamLanguage.define(java),
59 javascript: () => StreamLanguage.define(javascript),
60 json: () => StreamLanguage.define(json),
61 js: () => StreamLanguage.define(javascript),
62 jl: () => StreamLanguage.define(julia),
63 julia: () => StreamLanguage.define(julia),
64 kotlin: () => StreamLanguage.define(kotlin),
65 latex: () => StreamLanguage.define(stex),
66 lua: () => StreamLanguage.define(lua),
67 markdown: () => markdown(),
68 matlab: () => StreamLanguage.define(octave),
70 mdown: () => markdown(),
71 ml: () => StreamLanguage.define(sml),
72 mssql: () => StreamLanguage.define(msSQL),
73 mysql: () => StreamLanguage.define(mySQL),
74 nginx: () => StreamLanguage.define(nginx),
75 octave: () => StreamLanguage.define(octave),
76 pas: () => StreamLanguage.define(pascal),
77 pascal: () => StreamLanguage.define(pascal),
78 perl: () => StreamLanguage.define(perl),
79 pgsql: () => StreamLanguage.define(pgSQL),
81 const hasTags = code.includes('<?php');
82 return php({plain: !hasTags});
84 pl: () => StreamLanguage.define(perl),
85 'pl/sql': () => StreamLanguage.define(plSQL),
86 postgresql: () => StreamLanguage.define(pgSQL),
87 powershell: () => StreamLanguage.define(powerShell),
88 properties: () => StreamLanguage.define(properties),
89 ocaml: () => StreamLanguage.define(oCaml),
90 py: () => StreamLanguage.define(python),
91 python: () => StreamLanguage.define(python),
92 rb: () => StreamLanguage.define(ruby),
93 rs: () => StreamLanguage.define(rust),
94 ruby: () => StreamLanguage.define(ruby),
95 rust: () => StreamLanguage.define(rust),
96 scala: () => StreamLanguage.define(scala),
97 scheme: () => StreamLanguage.define(scheme),
98 shell: () => StreamLanguage.define(shell),
99 sh: () => StreamLanguage.define(shell),
100 stext: () => StreamLanguage.define(stex),
101 swift: () => StreamLanguage.define(swift),
102 toml: () => StreamLanguage.define(toml),
103 ts: () => StreamLanguage.define(typescript),
104 typescript: () => StreamLanguage.define(typescript),
105 sql: () => StreamLanguage.define(standardSQL),
106 sqlite: () => StreamLanguage.define(sqlite),
107 vbs: () => StreamLanguage.define(vbScript),
108 vbscript: () => StreamLanguage.define(vbScript),
109 'vb.net': () => StreamLanguage.define(vb),
110 vbnet: () => StreamLanguage.define(vb),
111 xml: () => StreamLanguage.define(xml),
112 yaml: () => StreamLanguage.define(yaml),
113 yml: () => StreamLanguage.define(yaml),
117 * Get the relevant codemirror language extension based upon the given language
118 * suggestion and content.
119 * @param {String} langSuggestion
120 * @param {String} content
121 * @returns {StreamLanguage}
123 export function getLanguageExtension(langSuggestion, content) {
124 const suggestion = langSuggestion.trim().replace(/^\./g, '').toLowerCase();
126 const language = modeMap[suggestion];
128 if (typeof language === 'undefined') {
132 return language(content);