1 import {StreamLanguage} from "@codemirror/language"
3 import {css} from '@codemirror/legacy-modes/mode/css';
4 import {c, java, cpp, csharp, kotlin, scala} 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 {html} from '@codemirror/lang-html';
10 import {javascript} from '@codemirror/lang-javascript';
11 import {json} from '@codemirror/lang-json';
12 import {julia} from '@codemirror/legacy-modes/mode/julia';
13 import {lua} from '@codemirror/legacy-modes/mode/lua';
14 import {markdown} from '@codemirror/lang-markdown';
15 import {oCaml, fSharp, sml} from '@codemirror/legacy-modes/mode/mllike';
16 import {nginx} from '@codemirror/legacy-modes/mode/nginx';
17 import {perl} from '@codemirror/legacy-modes/mode/perl';
18 import {pascal} from '@codemirror/legacy-modes/mode/pascal';
19 import {php} from '@codemirror/lang-php';
20 import {powerShell} from '@codemirror/legacy-modes/mode/powershell';
21 import {properties} from '@codemirror/legacy-modes/mode/properties';
22 import {python} from '@codemirror/legacy-modes/mode/python';
23 import {ruby} from '@codemirror/legacy-modes/mode/ruby';
24 import {rust} from '@codemirror/legacy-modes/mode/rust';
25 import {shell} from '@codemirror/legacy-modes/mode/shell';
26 import {sql} 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 {vb} from '@codemirror/legacy-modes/mode/vb';
30 import {vbScript} from '@codemirror/legacy-modes/mode/vbscript';
31 import {xml} from '@codemirror/legacy-modes/mode/xml';
32 import {yaml} from '@codemirror/legacy-modes/mode/yaml';
35 // Mapping of possible languages or formats from user input to their codemirror modes.
36 // Value can be a mode string or a function that will receive the code content & return the mode string.
37 // The function option is used in the event the exact mode could be dynamic depending on the code.
39 bash: () => StreamLanguage.define(shell),
40 css: () => StreamLanguage.define(css),
41 c: () => StreamLanguage.define(c),
42 java: () => StreamLanguage.define(java),
43 scala: () => StreamLanguage.define(scala),
44 kotlin: () => StreamLanguage.define(kotlin),
45 'c++': () => StreamLanguage.define(cpp),
46 'c#': () => StreamLanguage.define(csharp),
47 csharp: () => StreamLanguage.define(csharp),
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),
57 ini: () => StreamLanguage.define(properties),
58 javascript: () => javascript(),
60 js: () => javascript(),
61 jl: () => StreamLanguage.define(julia),
62 julia: () => StreamLanguage.define(julia),
63 latex: () => StreamLanguage.define(stex),
64 lua: () => StreamLanguage.define(lua),
65 md: () => StreamLanguage.define(markdown),
66 mdown: () => StreamLanguage.define(markdown),
67 markdown: () => StreamLanguage.define(markdown),
68 ml: () => StreamLanguage.define(sml),
69 nginx: () => StreamLanguage.define(nginx),
70 perl: () => StreamLanguage.define(perl),
71 pl: () => StreamLanguage.define(perl),
72 powershell: () => StreamLanguage.define(powerShell),
73 properties: () => StreamLanguage.define(properties),
74 ocaml: () => StreamLanguage.define(oCaml),
75 pascal: () => StreamLanguage.define(pascal),
76 pas: () => StreamLanguage.define(pascal),
78 const hasTags = code.includes('<?php');
79 return php({plain: !hasTags});
81 py: () => StreamLanguage.define(python),
82 python: () => StreamLanguage.define(python),
83 ruby: () => StreamLanguage.define(ruby),
84 rust: () => StreamLanguage.define(rust),
85 rb: () => StreamLanguage.define(ruby),
86 rs: () => StreamLanguage.define(rust),
87 shell: () => StreamLanguage.define(shell),
88 sh: () => StreamLanguage.define(shell),
89 stext: () => StreamLanguage.define(stex),
90 toml: () => StreamLanguage.define(toml),
91 ts: () => javascript({typescript: true}),
92 typescript: () => javascript({typescript: true}),
93 sql: () => StreamLanguage.define(sql),
94 vbs: () => StreamLanguage.define(vbScript),
95 vbscript: () => StreamLanguage.define(vbScript),
96 'vb.net': () => StreamLanguage.define(vb),
97 vbnet: () => StreamLanguage.define(vb),
98 xml: () => StreamLanguage.define(xml),
99 yaml: () => StreamLanguage.define(yaml),
100 yml: () => StreamLanguage.define(yaml),
104 * Get the relevant codemirror language extension based upon the given language
105 * suggestion and content.
106 * @param {String} langSuggestion
107 * @param {String} content
108 * @returns {StreamLanguage}
110 export function getLanguageExtension(langSuggestion, content) {
111 const suggestion = langSuggestion.trim().replace(/^\./g, '').toLowerCase();
113 const language = modeMap[suggestion];
115 if (typeof language === 'undefined') {
119 return language(content);