esolang/ui/code-editor/use-editor-config.ts
Nilay Majorwar 01ba292b9f Implement basic execution system and UI
This is a rather large commit that includes all of the following:
- React UI with code editor, runtime renderer and input-output panes
- Language providers for a sample language and Brainfuck
- Implementation of code execution in a web worker
- All-at-once unabortable execution of program fully functional
2021-12-14 22:30:41 +05:30

29 lines
743 B
TypeScript

import React from "react";
import { useMonaco } from "@monaco-editor/react";
import { MonacoTokensProvider } from "../../engines/types";
type ConfigParams = {
languageId: string;
tokensProvider?: MonacoTokensProvider;
};
/** Add custom language and relevant providers to Monaco */
export const useEditorConfig = (params: ConfigParams) => {
const monaco = useMonaco();
React.useEffect(() => {
if (!monaco) return;
// Register language
monaco.languages.register({ id: params.languageId });
// If provided, register token provider for language
if (params.tokensProvider) {
monaco.languages.setMonarchTokensProvider(
params.languageId,
params.tokensProvider
);
}
}, [monaco]);
};