Add script to generate files for new language

This commit is contained in:
Nilay Majorwar
2022-01-30 20:32:50 +05:30
parent 3889b97df5
commit 0bf7c0de3a
9 changed files with 184 additions and 2 deletions

View 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",
};

View File

@ -0,0 +1,5 @@
// @ts-nocheck
import { setupWorker } from "../setup-worker";
import XYZLanguageEngine from "./runtime";
setupWorker(new XYZLanguageEngine());

View 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;

View 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;

View 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>;
};

View 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 } };
}
}