Spaces:
Running
Running
import type { Extension } from "@codemirror/state"; | |
import { StreamLanguage } from "@codemirror/language"; | |
import { sql } from "@codemirror/legacy-modes/mode/sql"; | |
const possible_langs = [ | |
"python", | |
"markdown", | |
"json", | |
"html", | |
"css", | |
"javascript", | |
"typescript", | |
"yaml", | |
"dockerfile", | |
"shell", | |
"r", | |
"sql" | |
]; | |
const sql_dialects = [ | |
"standardSQL", | |
"msSQL", | |
"mySQL", | |
"mariaDB", | |
"sqlite", | |
"cassandra", | |
"plSQL", | |
"hive", | |
"pgSQL", | |
"gql", | |
"gpSQL", | |
"sparkSQL", | |
"esper" | |
] as const; | |
const lang_map: Record<string, (() => Promise<Extension>) | undefined> = { | |
python: () => import("@codemirror/lang-python").then((m) => m.python()), | |
markdown: async () => { | |
const [md, frontmatter] = await Promise.all([ | |
import("@codemirror/lang-markdown"), | |
import("./frontmatter") | |
]); | |
return md.markdown({ extensions: [frontmatter.frontmatter] }); | |
}, | |
json: () => import("@codemirror/lang-json").then((m) => m.json()), | |
html: () => import("@codemirror/lang-html").then((m) => m.html()), | |
css: () => import("@codemirror/lang-css").then((m) => m.css()), | |
javascript: () => | |
import("@codemirror/lang-javascript").then((m) => m.javascript()), | |
typescript: () => | |
import("@codemirror/lang-javascript").then((m) => | |
m.javascript({ typescript: true }) | |
), | |
yaml: () => | |
import("@codemirror/legacy-modes/mode/yaml").then((m) => | |
StreamLanguage.define(m.yaml) | |
), | |
dockerfile: () => | |
import("@codemirror/legacy-modes/mode/dockerfile").then((m) => | |
StreamLanguage.define(m.dockerFile) | |
), | |
shell: () => | |
import("@codemirror/legacy-modes/mode/shell").then((m) => | |
StreamLanguage.define(m.shell) | |
), | |
r: () => | |
import("@codemirror/legacy-modes/mode/r").then((m) => | |
StreamLanguage.define(m.r) | |
), | |
sql: () => | |
import("@codemirror/legacy-modes/mode/sql").then((m) => | |
StreamLanguage.define(m.standardSQL) | |
), | |
...Object.fromEntries( | |
sql_dialects.map((dialect) => [ | |
"sql-" + dialect, | |
() => | |
import("@codemirror/legacy-modes/mode/sql").then((m) => | |
StreamLanguage.define(m[dialect]) | |
) | |
]) | |
) | |
} as const; | |
const alias_map: Record<string, string> = { | |
py: "python", | |
md: "markdown", | |
js: "javascript", | |
ts: "typescript", | |
sh: "shell" | |
}; | |
export async function getLanguageExtension( | |
lang: string | |
): Promise<Extension | undefined> { | |
const _lang = lang_map[lang] || lang_map[alias_map[lang]] || undefined; | |
if (_lang) { | |
return _lang(); | |
} | |
return undefined; | |
} | |