JSDOC/PrettyPrint.js
[app.jsdoc] / JSDOC / PrettyPrint.js
1
2 // <script type="text/javascript">
3  
4
5 TokenReader = imports.TokenReader.TokenReader;
6 ScopeParser= imports.ScopeParser.ScopeParser;
7 Collapse = imports.Collapse.Collapse;
8 TextStream = imports.TextStream.TextStream;
9  
10 /**
11  * @scope JSDOC.PrettyPrint
12  * @function
13  * escape HTML, very basically
14  */
15 function  escapeHTML(str) { 
16     return str.replace(/&/g,'&amp;').
17             replace(/>/g,'&gt;'). 
18             replace(/</g,'&lt;'). 
19             replace(/"/g,'&quot;');
20 };
21 /**
22  * @scope PrettyPrint
23  * @function
24  * make a pretty HTML file out of a JS file, using the tokenizer.
25  */
26 function toPretty(str)
27 {
28     
29     var txs = new TextStream(str);
30     var tr = new TokenReader({ keepComments : true, keepWhite : true });
31     var toks = tr.tokenize(txs)
32     
33     //var sp = new ScopeParser(new Collapse(toks));
34     //sp.buildSymbolTree();
35     
36     
37    // sp.mungeSymboltree();
38     var r = '';
39     //r += sp.warnings.join("<BR>");
40     //r == "<BR>";
41     
42     
43     
44     
45     var cs = ''; // current style..
46     
47     function toStyle(tok)
48     {
49         if (tok.is("WHIT") || tok.is("COMM") ) {
50             if (tok.data.indexOf("/") > -1) {
51                 return 'comment';
52             }
53             return cs; // keep the same..
54         }
55         if (tok.is('STRN')) {
56             return 'string';
57         }
58         // other 'vary things??
59         if (tok.is('NAME') || tok.data == '.' || tok.name == 'THIS') {
60             return 'var';
61         }
62         if (/^[a-z]+/i.test(tok.data)) {
63             return 'keyword';
64         }
65         return 'syntax'
66     }
67     // loop through and print it...?
68     
69     
70     for (var i = 0;i < toks.length; i++) {
71         var ns = toStyle(toks[i]);
72         if (ns != cs) {
73             // change of style
74             if (cs.length) r +='</span>';
75             r +='<span class="jsdoc-'+ns+'">';
76             cs = ns;
77         }
78         if (toks[i].identifier) {
79             
80             r += '<span class="with-ident2">' +
81                 escapeHTML(toks[i].data) + '</span>';
82                 continue;
83                 
84         }
85         r += escapeHTML(toks[i].data); //.replace(/\n/g, "<BR/>\n");
86     }
87     if (cs.length) r +='</span>';
88     
89     return '<code class="jsdoc-pretty">'+r+'</code>';
90     
91         
92 }