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