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
8 function  escapeHTML() {                                        
9     return(                                                                 
10         this.replace(/&/g,'&amp;').                                         
11             replace(/>/g,'&gt;').                                           
12             replace(/</g,'&lt;').                                           
13             replace(/"/g,'&quot;')                                         
14     );                                                                      
15 };
16
17 function toPretty(str)
18 {
19     var tr = new TokenReader();
20     var toks = tr.tokenize(str,false); // dont merge xxx + . + yyyy etc.
21     var sp = new ScopeParser(new TokenStream(toks));
22     sp.buildSymbolTree();
23    // sp.mungeSymboltree();
24     var r = '';
25     r += sp.warnings.join("<BR>");
26     r == "<BR>";
27     
28     
29     
30     
31     var cs = ''; // current style..
32     
33     function toStyle(tok)
34     {
35         if (tok.is("WHIT") || tok.is("COMM") ) {
36             if (tok.data.indexOf("/") > -1) {
37                 return 'comment';
38             }
39             return cs; // keep the same..
40         }
41         if (tok.is('STRN')) {
42             return 'string';
43         }
44         // other 'vary things??
45         if (tok.is('NAME') || tok.data == '.' || tok.name == 'THIS')) {
46             return 'var';
47         }
48         if (/^[a-z]+/i.test(tok.data)) {
49             return 'keyword';
50         }
51         return 'syntax'
52     }
53     // loop through and print it...?
54     
55     
56     for (var i = 0;i < toks.length; i++) {
57         var ns = toStyle(toks[i]);
58         if (ns != cs) {
59             // change of style
60             if (cs.length) r +='</span>';
61             r +='<span class="jsdoc-'+ns+'">';
62             cs = ns;
63         }
64         if (toks[i].identifier) {
65             
66             r += '<span class="with-ident2">' +
67                 escapeHTML(toks[i].data) + '</span>';
68                 continue;
69                 
70         }
71         r += escapeHTML(toks[i].data).replace(/\n/g, '<BR>');
72     }
73     if (cs.length) r +='</span>';
74     return '<code class="jsdoc-pretty">'+r+'</code>';
75     
76         
77 }