diff --git a/dingus/dingus.html b/dingus/dingus.html index b5ae407..e15ccca 100644 --- a/dingus/dingus.html +++ b/dingus/dingus.html @@ -15,37 +15,19 @@
-
- Write Your Grammar Here -
- -
+
- -
+
Loading python...
-
- Write In Your Language Here -
- -
+
-
- Results - - - - -
- -
-

-        
+
+
diff --git a/dingus/dingus.js b/dingus/dingus.js index 9a4c6a9..ca70cc3 100644 --- a/dingus/dingus.js +++ b/dingus/dingus.js @@ -1,16 +1,4 @@ const STATUS = document.getElementById("status-line"); -const ERRORS = document.getElementById("error-root"); -const TREE = document.getElementById("tree-root"); - -function show_tree() { - ERRORS.classList.add("hidden"); - TREE.classList.remove("hidden"); -} - -function show_errors() { - ERRORS.classList.remove("hidden"); - TREE.classList.add("hidden"); -} const DOC_CHAINS = {}; function chain_document_submit(kind, editor, on_success) { @@ -46,10 +34,6 @@ function chain_document_submit(kind, editor, on_success) { if (message.status === "ok" && on_success) { on_success(message); } - - if (message.status === "error") { - render_errors(message.errors); - } } DOC_CHAINS[kind] = on_result; @@ -87,11 +71,9 @@ worker.onmessage = (e) => { let grammar_editor = null; let input_editor = null; -function render_errors(errors) { - ERRORS.innerText = errors.join("\n") -} - function render_parse_results(message) { + console.log("WHAT?"); + function render_tree_node(parent, node) { const tree_div = document.createElement("div"); tree_div.classList.add("parsed-node"); @@ -107,12 +89,8 @@ function render_parse_results(message) { {scroll: true}, ); }; - if (node.start == node.end) { - node_label.classList.add("parsed-error-node"); - } tree_div.appendChild(node_label); - if (node.kind === "tree") { tree_div.classList.add("parsed-tree"); for (const child of node.children) { @@ -124,10 +102,9 @@ function render_parse_results(message) { parent.appendChild(tree_div); } - const root = document.getElementById("tree-root"); + const root = document.getElementById("output-root"); root.innerHTML = ""; render_tree_node(root, message.tree); - render_errors(message.errors); } function setup_editors() { diff --git a/dingus/style.css b/dingus/style.css index eb95b4a..0b9426f 100644 --- a/dingus/style.css +++ b/dingus/style.css @@ -8,92 +8,60 @@ body { .page-container { display: grid; grid-template-columns: 1fr 1fr 1fr; - grid-template-rows: 4rem 2rem 1fr 2rem; + grid-template-rows: 4rem 1fr 2em; width: 100%; height: 100%; } -.panel { +.grammar-container { + grid-column: 1; + grid-row: 2; padding: 0.25rem; /* Establishing minimum sizes here causes the codemirror CSS to work */ min-height: 0; min-width: 0; - overflow-y: scroll; - border-left: 1px solid; - border-right: 1px solid; - border-bottom: 1px solid; } -.panel-top { - padding: 0.5rem; - border-bottom: 1px dashed; - border-right: 1px solid; - border-left: 1px solid; - border-top: 1px solid; -} - -.grammar-title { - grid-column: 1; - grid-row: 2; -} - -.grammar-container { - grid-column: 1; +.status { + grid-column: 1 / 3; grid-row: 3; -} - -.input-title { - grid-column: 2; - grid-row: 2; + padding: 0.25rem; } .input-container { grid-column: 2; - grid-row: 3; -} - -.result-selector { - position: relative; - grid-column: 3; grid-row: 2; + padding: 0.25rem; + + /* Establishing minimum sizes here causes the codemirror CSS to work */ + min-height: 0; + min-width: 0; } -.result-selector-buttons { - position: absolute; - top: 0.25rem; - right: 1rem; +.input-status { + grid-column: 2; + grid-row: 3; + padding: 0.25rem; } .results-container { grid-column: 3; - grid-row: 3; -} - -.status { - grid-column: 1 / 4; - grid-row: 4; + grid-row: 2; padding: 0.25rem; - border: 1px solid; + + overflow-y: scroll; } .parsed-node { margin-left: 1rem; } -.parsed-error-node { - color: red; -} - .main-textarea { height: 100%; width: 100%; } -.hidden { - display: none; -} - .CodeMirror { height: 100%; } diff --git a/dingus/worker.js b/dingus/worker.js index adeb615..d9dc326 100644 --- a/dingus/worker.js +++ b/dingus/worker.js @@ -31,15 +31,9 @@ const dingus_module = { postMessage({kind: "grammar", status: "ok", message: msg}); }, - post_grammar_error: function(errors) { - errors = data_to_js(errors); - console.log("Grammar Error:", errors); - postMessage({ - kind:"grammar", - status: "error", - message: "An error occurred loading the grammar", - errors: errors, - }); + post_grammar_error: function(error) { + console.log("Grammar Error:", error); + postMessage({kind:"grammar", status: "error", message: error}); }, post_doc_parse: function(tree, errors) { @@ -56,15 +50,9 @@ const dingus_module = { }); }, - post_doc_error: function(errors) { - errors = data_to_js(errors); - console.log("Doc Error:", errors); - postMessage({ - kind:"input", - status: "error", - message: "An error occurred parsing the document", - errors: errors, - }); + post_doc_error: function(error) { + console.log("Doc Error:", error); + postMessage({kind:"input", status: "error", message: error}); }, }; @@ -92,23 +80,23 @@ import parser.runtime as runtime import pyodide.code import pyodide.ffi as ffi +GRAMMAR_GLOBALS = {} GRAMMAR = None PARSE_TABLE = None LEXER = None def eval_grammar(code): + global GRAMMAR_GLOBALS global GRAMMAR global PARSE_TABLE global LEXER try: dingus.post_grammar_status("Evaluating grammar...") - print("Hey?") - grammar_globals={} - pyodide.code.eval_code(code, globals=grammar_globals) + pyodide.code.eval_code(code, globals=GRAMMAR_GLOBALS) grammar = None - for key, value in grammar_globals.items(): + for key, value in GRAMMAR_GLOBALS.items(): if isinstance(value, type) and issubclass(value, parser.Grammar) and value is not parser.Grammar: value = value() @@ -132,9 +120,8 @@ def eval_grammar(code): dingus.post_grammar_loaded(grammar.name) except Exception as e: - ohno = traceback.format_exc() - print(f"grammar: {ohno}") - dingus.post_grammar_error(ohno.splitlines()) + traceback.print_exc() + dingus.post_grammar_error(f"{e}") def tree_to_js(tree): if tree is None: @@ -165,9 +152,8 @@ def eval_document(code): tree, errors = runtime.parse(PARSE_TABLE, LEXER, code) dingus.post_doc_parse(tree_to_js(tree), errors) except Exception as e: - ohno = traceback.format_exc() - print(f"doc: {ohno}") - dingus.post_doc_error(ohno.splitlines()) + traceback.print_exc() + dingus.post_doc_error(f"{e}") `); dingus_module.post_grammar_status("Ready.");