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 }