Add script to generate files for new language
This commit is contained in:
27
scripts/new-lang-template/common.ts
Normal file
27
scripts/new-lang-template/common.ts
Normal file
@ -0,0 +1,27 @@
|
||||
// @ts-nocheck
|
||||
import { MonacoTokensProvider } from "../types";
|
||||
|
||||
/** Type of props passed to renderer */
|
||||
export type RS = {
|
||||
value: number;
|
||||
};
|
||||
|
||||
/** Sample program */
|
||||
export const sampleProgram = [
|
||||
"Program line 1",
|
||||
"Program line 2",
|
||||
"Program line 3",
|
||||
].join("\n");
|
||||
|
||||
/** Syntax highlighting */
|
||||
export const editorTokensProvider: MonacoTokensProvider = {
|
||||
tokenizer: {
|
||||
root: [
|
||||
[/i/, "orange"],
|
||||
[/d/, "red"],
|
||||
[/s/, "blue"],
|
||||
[/o/, "green"],
|
||||
],
|
||||
},
|
||||
defaultToken: "comment",
|
||||
};
|
5
scripts/new-lang-template/engine.ts
Normal file
5
scripts/new-lang-template/engine.ts
Normal file
@ -0,0 +1,5 @@
|
||||
// @ts-nocheck
|
||||
import { setupWorker } from "../setup-worker";
|
||||
import XYZLanguageEngine from "./runtime";
|
||||
|
||||
setupWorker(new XYZLanguageEngine());
|
27
scripts/new-lang-template/ide-page.tsx
Normal file
27
scripts/new-lang-template/ide-page.tsx
Normal file
@ -0,0 +1,27 @@
|
||||
// @ts-nocheck
|
||||
import React from "react";
|
||||
import { NextPage } from "next";
|
||||
import Head from "next/head";
|
||||
import { Mainframe } from "../../ui/Mainframe";
|
||||
import { Header } from "../../ui/header";
|
||||
import LangProvider from "../../engines/$LANG_ID";
|
||||
const LANG_ID = "$LANG_ID";
|
||||
const LANG_NAME = "$LANG_NAME";
|
||||
|
||||
const IDE: NextPage = () => {
|
||||
return (
|
||||
<>
|
||||
<Head>
|
||||
<title>{LANG_NAME} | Esolang Park</title>
|
||||
</Head>
|
||||
<div style={{ height: "100%", display: "flex", flexDirection: "column" }}>
|
||||
<Header langName={LANG_NAME} />
|
||||
<div style={{ flexGrow: 1 }}>
|
||||
<Mainframe langName={LANG_ID} provider={LangProvider} />
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default IDE;
|
12
scripts/new-lang-template/index.ts
Normal file
12
scripts/new-lang-template/index.ts
Normal file
@ -0,0 +1,12 @@
|
||||
// @ts-nocheck
|
||||
import { Renderer } from "./renderer";
|
||||
import { LanguageProvider } from "../types";
|
||||
import { RS, sampleProgram, editorTokensProvider } from "./common";
|
||||
|
||||
const provider: LanguageProvider<RS> = {
|
||||
Renderer,
|
||||
sampleProgram,
|
||||
editorTokensProvider,
|
||||
};
|
||||
|
||||
export default provider;
|
7
scripts/new-lang-template/renderer.tsx
Normal file
7
scripts/new-lang-template/renderer.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
// @ts-nocheck
|
||||
import { RendererProps } from "../types";
|
||||
import { RS } from "./common";
|
||||
|
||||
export const Renderer = ({ state }: RendererProps<RS>) => {
|
||||
return state == null ? null : <p>state.value</p>;
|
||||
};
|
22
scripts/new-lang-template/runtime.ts
Normal file
22
scripts/new-lang-template/runtime.ts
Normal file
@ -0,0 +1,22 @@
|
||||
// @ts-nocheck
|
||||
import { LanguageEngine, StepExecutionResult } from "../types";
|
||||
import { RS } from "./common";
|
||||
|
||||
export default class XYZLanguageEngine implements LanguageEngine<RS> {
|
||||
resetState() {
|
||||
// TODO: Unimplemented
|
||||
}
|
||||
|
||||
validateCode(code: string) {
|
||||
// TODO: Unimplemented
|
||||
}
|
||||
|
||||
prepare(code: string, input: string) {
|
||||
// TODO: Unimplemented
|
||||
}
|
||||
|
||||
executeStep(): StepExecutionResult<RS> {
|
||||
// TODO: Unimplemented
|
||||
return { rendererState: { value: 0 }, nextStepLocation: { line: 0 } };
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user