aboutsummaryrefslogtreecommitdiff
path: root/www/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/index.js')
m---------www0
-rw-r--r--www/index.js49
2 files changed, 49 insertions, 0 deletions
diff --git a/www b/www
deleted file mode 160000
Subproject 9ac3dff9ebea4675e5c478bcdcbc0fd547d1529
diff --git a/www/index.js b/www/index.js
new file mode 100644
index 0000000..2665873
--- /dev/null
+++ b/www/index.js
@@ -0,0 +1,49 @@
1import {SynNode, put_cst} from "cstea";
2import {EditorState, EditorView, basicSetup} from "@codemirror/basic-setup"
3import {rust} from "@codemirror/lang-rust"
4
5let cst = document.getElementById('cst');
6let view = new EditorView({
7 state: EditorState.create({
8 extensions: [
9 basicSetup,
10 rust(),
11 EditorView.updateListener.of((v) => {
12 if (v.docChanged) {
13 doRender()
14 }
15 })
16 ]
17 }),
18 parent: document.getElementById('source-code')
19})
20
21function render_cst(synRoot) {
22 cst.innerText += "\n" + synRoot.to_string();
23 if (!synRoot.is_token()) {
24 synRoot.children().forEach(node => {
25 render_cst(node);
26 return;
27 });
28 } else {
29 return;
30 }
31}
32
33function render_err(errorList) {
34 cst.innerText = "";
35 errorList.forEach(err => {
36 cst.innerText += "\n" + err.to_string();
37 });
38}
39
40function doRender() {
41 let sourceFile = view.state.doc.toString();;
42 cst.innerText = "";
43 try {
44 var synRoot = SynNode.from_str(sourceFile);
45 render_cst(synRoot);
46 } catch (synError) {
47 render_err(synError)
48 }
49}