Skip to content

Commit 2a5e6d6

Browse files
committed
switch文をterminal/以下に集約
1 parent 53f55b3 commit 2a5e6d6

File tree

3 files changed

+44
-38
lines changed

3 files changed

+44
-38
lines changed

app/[docs_id]/markdown.tsx

Lines changed: 4 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
import Markdown, { Components } from "react-markdown";
22
import remarkGfm from "remark-gfm";
33
import SyntaxHighlighter from "react-syntax-highlighter";
4-
import { type AceLang, EditorComponent } from "../terminal/editor";
4+
import { type AceLang, EditorComponent, getAceLang } from "../terminal/editor";
55
import { ExecFile } from "../terminal/exec";
66
import { useChangeTheme } from "./themeToggle";
77
import {
88
tomorrow,
99
atomOneDark,
1010
} from "react-syntax-highlighter/dist/esm/styles/hljs";
1111
import { ReactNode } from "react";
12-
import { RuntimeLang } from "@/terminal/runtime";
12+
import { getRuntimeLang, RuntimeLang } from "@/terminal/runtime";
1313
import { ReplTerminal } from "@/terminal/repl";
1414

1515
export function StyledMarkdown({ content }: { content: string }) {
@@ -95,19 +95,7 @@ function CodeComponent({
9595
className || ""
9696
);
9797
if (match) {
98-
let runtimeLang: RuntimeLang | undefined = undefined;
99-
switch (match[1]) {
100-
case "python":
101-
runtimeLang = "python";
102-
break;
103-
case "cpp":
104-
case "c++":
105-
runtimeLang = "cpp";
106-
break;
107-
default:
108-
console.warn(`Unsupported language for runtime: ${match[1]}`);
109-
break;
110-
}
98+
const runtimeLang = getRuntimeLang(match[1]);
11199
if (match[2] === "-exec" && match[3]) {
112100
/*
113101
```python-exec:main.py
@@ -150,29 +138,7 @@ function CodeComponent({
150138
}
151139
} else if (match[3]) {
152140
// ファイル名指定がある場合、ファイルエディター
153-
let aceLang: AceLang | undefined = undefined;
154-
switch (match[1]) {
155-
case "python":
156-
aceLang = "python";
157-
break;
158-
case "cpp":
159-
case "c++":
160-
aceLang = "c_cpp";
161-
break;
162-
case "json":
163-
aceLang = "json";
164-
break;
165-
case "csv":
166-
aceLang = "csv";
167-
break;
168-
case "text":
169-
case "txt":
170-
aceLang = "text";
171-
break;
172-
default:
173-
console.warn(`Unsupported language for editor: ${match[1]}`);
174-
break;
175-
}
141+
const aceLang = getAceLang(match[1]);
176142
return (
177143
<div className="border border-primary border-2 shadow-md m-2 rounded-lg">
178144
<EditorComponent

app/terminal/editor.tsx

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,29 @@ import { langConstants } from "./runtime";
2929

3030
// mode-xxxx.js のファイル名と、AceEditorの mode プロパティの値が対応する
3131
export type AceLang = "python" | "c_cpp" | "json" | "csv" | "text";
32+
export function getAceLang(lang: string | undefined): AceLang {
33+
// Markdownで指定される可能性のある言語名からAceLangを取得
34+
switch (lang) {
35+
case "python":
36+
case "py":
37+
return "python";
38+
case "cpp":
39+
case "c++":
40+
return "c_cpp";
41+
case "json":
42+
return "json";
43+
case "csv":
44+
return "csv";
45+
case "text":
46+
case "txt":
47+
return "text";
48+
default:
49+
console.warn(
50+
`Unsupported language for ace editor: ${lang}, fallback to text mode.`
51+
);
52+
return "text";
53+
}
54+
}
3255

3356
interface EditorProps {
3457
language?: AceLang;

app/terminal/runtime.tsx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,24 @@ export interface LangConstants {
3030
}
3131
export type RuntimeLang = "python" | "cpp";
3232

33+
export function getRuntimeLang(
34+
lang: string | undefined
35+
): RuntimeLang | undefined {
36+
// markdownで指定される可能性のある言語名からRuntimeLangを取得
37+
switch (lang) {
38+
case "python":
39+
case "py":
40+
return "python";
41+
case "cpp":
42+
case "c++":
43+
return "cpp";
44+
default:
45+
console.warn(`Unsupported language for runtime: ${lang}`);
46+
return undefined;
47+
}
48+
}
3349
export function useRuntime(language: RuntimeLang): RuntimeContext {
50+
// すべての言語のcontextをインスタンス化
3451
const pyodide = usePyodide();
3552
const wandboxCpp = useWandbox("cpp");
3653

0 commit comments

Comments
 (0)