pack.js
[gnome.introspection-doc-generator] / pack.js
1 #!/usr/bin/seed
2 //<script type="text/javascript">
3 /**
4  * Simple packer example
5  *
6  * compresses files listed as arguments and outputs result
7  */
8 TextStream      = imports['JSDOC/TextStream.js'].TextStream;
9 TokenReader     = imports['JSDOC/TokenReader.js'].TokenReader;
10 ScopeParser     = imports['JSDOC/ScopeParser.js'].ScopeParser;
11 TokenStream     = imports['JSDOC/TokenStream.js'].TokenStream;
12 CompressWhite   = imports['JSDOC/CompressWhite.js'].CompressWhite;
13 File = imports.File.File;
14  
15  
16 function pack(str)
17 {
18     
19     var tr = new  TokenReader(  { keepDocs :true, keepWhite : true,  keepComments : true });
20     var toks = tr.tokenize(new TextStream(str),false); // dont merge xxx + . + yyyy etc.
21     var sp = new  ScopeParser(new   TokenStream(toks));
22     sp.buildSymbolTree();
23     sp.mungeSymboltree();
24     print(sp.warnings.join("\n"));
25     var out =  CompressWhite(sp.ts);
26     return out;
27     
28 }
29
30
31 var args = Array.prototype.slice.call(Seed.argv);
32 args.shift(); //seed
33 args.shift(); // pack.js
34 var files = [];
35 var outfn = '';
36 if (!args.length) {
37     print( "no files selected");
38     Seed.quit();
39 }
40 for(var i =0; i < args.length;i++) {
41     if (args[i] == '-o') {
42         outfn = args[i+1];
43         i++;
44         continue;
45     }
46     files.push(args[i]);
47 }
48 print(files.join(', '));
49 if (!files.length) {
50     throw "no files selected";
51 }
52 var out = '';
53 files.forEach(function(f) {
54     out = pack(File.read(f)) + "\n";
55 });
56 if (outfn) {
57     File.write(outfn, out);
58     Seed.quit();
59 }
60 print(out);
61
62
63