gradio / js /code /shared /language.ts
mindmime's picture
Upload folder using huggingface_hub
a03b3ba verified
import type { Extension } from "@codemirror/state";
import { StreamLanguage } from "@codemirror/language";
const possible_langs = [
"python",
"markdown",
"json",
"html",
"css",
"javascript",
"typescript",
"yaml",
"dockerfile",
"shell",
"r"
];
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)
)
} 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;
}