JSDOC/PrettyPrint.js
[gnome.introspection-doc-generator] / JSDOC / PrettyPrint.js
1
2 // <script type="text/javascript">
3
4 TokenReader = imports.TokenReader.TokenReader;
5 ScopeParser= imports.ScopeParser.ScopeParser;
6 TokenStream = imports.TokenStream.TokenStream;
7 TextStream = imports.TextStream.TextStream;
8
9 function  escapeHTML() {                                        
10     return(                                                                 
11         this.replace(/&/g,'&amp;').                                         
12             replace(/>/g,'&gt;').                                           
13             replace(/</g,'&lt;').                                           
14             replace(/"/g,'&quot;')                                         
15     );                                                                      
16 };
17
18 function toPretty(str)
19 {
20     
21     var txs = new TextStream(File.read(str));
22     var tr = TokenReader({ keepComments : true, keepWhite : true });
23     var toks = tr.tokenize(txs)
24     
25     var sp = new ScopeParser(new TokenStream(toks));
26     sp.buildSymbolTree();
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     function toStyle(tok)
38     {
39         if (tok.is("WHIT") || tok.is("COMM") ) {
40             if (tok.data.indexOf("/") > -1) {
41                 return 'comment';
42             }
43             return cs; // keep the same..
44         }
45         if (tok.is('STRN')) {
46             return 'string';
47         }
48         // other 'vary things??
49         if (tok.is('NAME') || tok.data == '.' || tok.name == 'THIS') {
50             return 'var';
51         }
52         if (/^[a-z]+/i.test(tok.data)) {
53             return 'keyword';
54         }
55         return 'syntax'
56     }
57     // loop through and print it...?
58     
59     
60     for (var i = 0;i < toks.length; i++) {
61         var ns = toStyle(toks[i]);
62         if (ns != cs) {
63             // change of style
64             if (cs.length) r +='</span>';
65             r +='<span class="jsdoc-'+ns+'">';
66             cs = ns;
67         }
68         if (toks[i].identifier) {
69             
70             r += '<span class="with-ident2">' +
71                 escapeHTML(toks[i].data) + '</span>';
72                 continue;
73                 
74         }
75         r += escapeHTML(toks[i].data).replace(/\n/g, '<BR>');
76     }
77     if (cs.length) r +='</span>';
78     return '<code class="jsdoc-pretty">'+r+'</code>';
79     
80         
81 }