Fix #5732 - change to cmake for build
[roojspacker] / roojspacker / PrettyPrint.vala
1
2 namespace JSDOC {
3         class PrettyPrint : Object 
4         {
5
6                 // pretty simple...
7                 static string  escapeHTML(string str) { 
8                         return str.replace("&","&").
9                                     replace(">",">"). 
10                                     replace("<","&lt;"). 
11                                     replace("\"","&quot;");
12                 }
13
14                  public static  string toPretty(string str)
15                 {
16                         
17                         var txs = new TextStream(str);
18                         var tr = new TokenReader(null);
19                         tr.keepComments = true;
20                         tr.keepWhite = true;
21                         var toks = tr.tokenize(txs);
22                         
23                         //var sp = new ScopeParser(new Collapse(toks));
24                         //sp.buildSymbolTree();
25                         
26                         
27                    // sp.mungeSymboltree();
28                         var r = "";
29                         //r += sp.warnings.join("<BR>");
30                         //r == "<BR>";
31                         
32                         
33                         
34                         
35                         var cs = ""; // current style..
36                         
37                         // loop through and print it...?
38                         
39                         
40                         for (var i = 0;i < toks.length; i++) {
41                                 var ns = toStyle(toks.get(i),cs);
42                                 if (ns != cs) {
43                                     // change of style
44                                     if (cs.length > 0) { r += "</span>"; };
45                                     r +="<span class=\"jsdoc-"+ns+"\">";
46                                     cs = ns;
47                                 }
48                                 if (toks.get(i).identifier != null) {
49                                     
50                                     r += "<span class=\"with-ident2\">" +
51                                         escapeHTML(toks.get(i).data) + "</span>";
52                                         continue;
53                                         
54                                 }
55                                 r += escapeHTML(toks.get(i).data); //.replace(/\n/g, "<BR/>\n");
56                         }
57                         if (cs.length > 0) r += "</span>";
58                         
59                         return "<code class=\"jsdoc-pretty\">"+r+"</code>";
60                         
61                                 
62                 }
63                 
64                 static string toStyle(Token tok, string cs)
65                 {
66
67                         if (tok.isName(TokenName.SPACE) || tok.isName(TokenName.NEWLINE) ) {
68                                 return cs;
69                         }
70                         if (tok.isName(TokenName.MULTI_LINE_COMM) || 
71                                 tok.isName(TokenName.JSDOC) ||
72                                 tok.isName(TokenName.SINGLE_LINE_COMM) ) {
73                             return "comment";
74                             
75                         }
76                         if (tok.isType(TokenType.STRN)) {
77                             return "string";
78                         }
79                         // other 'vary things??
80                         if (tok.isType(TokenType.NAME) || tok.data == "." || tok.isName(TokenName.THIS)) {
81                             return "var";
82                         }
83                         var r = new Regex("^[a-zA-Z]+");
84                         
85                         if (r.match(tok.data)) {
86                             return "keyword";
87                         }
88                         return "syntax";
89                 }
90         }
91 }