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