blob: 2665873dd17a75a2a3d4425d459d9526cdb5a57f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
import {SynNode, put_cst} from "cstea";
import {EditorState, EditorView, basicSetup} from "@codemirror/basic-setup"
import {rust} from "@codemirror/lang-rust"
let cst = document.getElementById('cst');
let view = new EditorView({
state: EditorState.create({
extensions: [
basicSetup,
rust(),
EditorView.updateListener.of((v) => {
if (v.docChanged) {
doRender()
}
})
]
}),
parent: document.getElementById('source-code')
})
function render_cst(synRoot) {
cst.innerText += "\n" + synRoot.to_string();
if (!synRoot.is_token()) {
synRoot.children().forEach(node => {
render_cst(node);
return;
});
} else {
return;
}
}
function render_err(errorList) {
cst.innerText = "";
errorList.forEach(err => {
cst.innerText += "\n" + err.to_string();
});
}
function doRender() {
let sourceFile = view.state.doc.toString();;
cst.innerText = "";
try {
var synRoot = SynNode.from_str(sourceFile);
render_cst(synRoot);
} catch (synError) {
render_err(synError)
}
}
|