1 /*
2
3 This script is responsible for turning games into the structures seen on the
4 structure tab.
5
6 */
7
8 function getPrettyStructure(tree){
9
10 if(is_array(tree[0])){ return getPrettyStructure(tree[0]); }
11
12 switch(tree[0]){
13
14 case "script":
15 return getThePrettyRest(tree);
16
17 case "func":
18 funcname = tree[1][1];
19 return "<div class=\"disp-func\">"
20 +"<span class=\"funcname\">"+funcname+"</span>"
21 +"<div class=\"disp-func-inner\">"+getThePrettyRest(tree,2)+"</div></div>";
22
23 case "assign":
24 first = tree[1][1];
25 second = tree[2][1];
26 return "<span class=\"disp-statement\">set <span class=\"disp-var\">"+first+"</span> to <span class=\"disp-var\">"+second+"</span></span><br>";
27
28 case "print":
29 return "<div class=\"disp-print\">"+getThePrettyRest(tree)+"</div>";
30
31 case "string":
32 return String(tree[1]).replace(/\\\//g,'/');
33
34 case "link":
35 return "<u>"+tree[1]+"</u>";
36
37 case "upname":
38 return "<b>^"+tree[1]+"</b>";
39
40 case "strname":
41 return "<b>"+tree[1]+"</b>";
42
43 case "break":
44 return "<br><b>—</b><br>";
45
46 case "ifseq":
47 test1 = tree[1][1];
48 test = tree[2][1];
49 test2 = tree[3][1];
50 return "<div class=\"disp-if\">"
51 +"<span class=\"disp-if-test\">if <span class=\"disp-var\">"+test1+"</span> "
52 +test+" <span class=\"disp-var\">"+test2+"</span></span>"
53 +"<div class=\"disp-if-inner\">"+getThePrettyRest(tree,4)+"</div></div>";
54
55 case "elseseq":
56 return "</div></div><div class=\"disp-if\"><span class=\"disp-if-test\">else </span><div class=\"disp-if-inner\">"+getThePrettyRest(tree);
57
58 case "incr":
59 name = tree[1][1];
60 return "<span class=\"disp-statement\">increase <span class=\"disp-var\">"+name+"</span></span><br>";
61
62 case "decr":
63 name = tree[1][1];
64 return "<span class=\"disp-statement\">decrease <span class=\"disp-var\">"+name+"</span></span><br>";
65
66 case "runme":
67 name = tree[1][1];
68 return "<span class=\"disp-statement\">run <span class=\"disp-var\">"+name+"</span></span><br>";
69
70
71 default:
72 return "<span class=\"disp-unk\">unknown thing '"+tree[0]+"'</span><div class=\"disp-func\">"+getThePrettyRest(tree)+"</div>";
73 }
74 }
75
76 function getThePrettyRest(tree, startwith){
77 var o="";
78 var i = startwith ? startwith : 1;
79 for( ; i<tree.length; i++){
80 o += getPrettyStructure(tree[i]);
81 }
82 return o;
83 }
84
85
86
87 function is_array(thing){
88 return Object.prototype.toString.apply(thing) == '[object Array]';
89 }