x.target = "output.pathname.js"
x.debugTarget = "output.pathname.debug.js"
-
+
x.pack(); // writes files etc..
* we could do this in memory now, as I suspect vala will not be as bad as javascript for leakage...
*
*/
- public string tmpDir = "/tmp"; // FIXME??? in ctor?
-
+ //public string tmpDir = "/tmp"; // FIXME??? in ctor?
-
- /**
- * @cfg {Boolean} cleanup (optional) clean up temp files after done -
- * Defaults to false if you set tmpDir, otherwise true.
- */
- public bool cleanup = false;
-
-
- /**
- * @cfg {Boolean} keepWhite (optional) do not remove white space in output.
- * usefull for debugging compressed files.
- */
-
- public bool keepWhite = false;
-
- /**
- * @cfg {Boolean} skipScope (optional) skip Scope parsing and replacement.
- * usefull for debugging...
- */
-
- public bool skipScope = false;
-
-
- /**
- * @cfg {Boolean} dumpTokens (optional) read the first file and dump the tokens.
- * usefull for debugging...
- */
-
- public bool dumpTokens = false;
-
+
+
// list of files to compile...
- Gee.ArrayList<string> files;
+ public Gee.ArrayList<string> files;
/**
* @cfg activeFile ??? used???
*/
public string activeFile = "";
-
-
- /**
- * @cfg baseDir -- prefix the files listed in indexfiles with this.
- */
-
- public string baseDir = "";
-
-
+
public string outstr = ""; // if no target is specified - then this will contain the result
+ public PackerRun config;
-
-
- public Packer()
+ public Packer(PackerRun config)
{
+ this.config = config;
+#if HAVE_JSON_GLIB
this.result = new Json.Object();
+#else
+ this.result_count = new Gee.HashMap <string,int>();
+
+ this.result = new Gee.HashMap<
+ string /* errtype*/ , Gee.HashMap<string /*fn*/, Gee.HashMap<int /*line*/, Gee.ArrayList<string>>>
+ >();
+
+#endif
this.files = new Gee.ArrayList<string>();
new Lang_Class(); ///initilizaze lang..
+
+ //this.tmp = Glib.get_tmp_dir(); // do we have to delete this?
+
}
*
*/
+#if HAVE_JSON_GLIB
public Json.Object result; // output - what's the complication result
});
}
+#else
+ public Gee.HashMap <string,int> result_count; // output - what's the complication result
+ public Gee.HashMap<
+ string /* errtype*/ , Gee.HashMap<string /*fn*/, Gee.HashMap<int /*line*/, Gee.ArrayList<string>>>
+ > result;
+
+ public void logError(ResultType type, string filename, int line, string message) {
+
+
+ if (!this.result_count.has_key(type.to_string()+"-TOTAL")) {
+ this.result_count.set(type.to_string()+"-TOTAL", 1);
+ } else {
+ this.result_count.set(type.to_string()+"-TOTAL",
+ this.result_count.get(type.to_string()+"-TOTAL") +1
+ );
+ }
+
+
+
+ if (!this.result.has_key(type.to_string())) {
+ this.result.set(type.to_string(),
+ new Gee.HashMap<string /*fn*/, Gee.HashMap<int /*line*/, Gee.ArrayList<string>>>()
+ );
+ }
+ var t = this.result.get(type.to_string());
+ if (!t.has_key(filename)) {
+ t.set(filename, new Gee.HashMap<int /*line*/, Gee.ArrayList<string>>());
+ }
+ var tt = t.get(filename);
+ if (!tt.has_key(line)) {
+ tt.set(line, new Gee.ArrayList<string>());
+ }
+ var tl = tt.get(line);
+ tl.add(message);
+
+ }
+ public bool hasErrors(string fn)
+ {
+ if (!this.result.has_key(ResultType.err.to_string())) {
+ return false;
+ }
+
+ if (fn.length < 1) {
+ return true;
+ }
+ var t = this.result.get(ResultType.err.to_string());
+
+ if (t.has_key(fn)) {
+ return true;
+ }
+ return false;
+ }
+ public void dumpErrors(ResultType type)
+ {
+ if (!this.result.has_key(type.to_string())) {
+ return;
+ }
+ var t = this.result.get(type.to_string());
+ foreach(string filename in t.keys) {
+ var node = t.get(filename);
+ foreach(int line in node.keys) {
+ var errors = node.get(line);
+ foreach(string errstr in errors) {
+ print("%s: %s:%d %s\n", type.to_string(), filename, line, errstr);
+ }
+ }
+
+ }
+ }
+
+
+#endif
var srcfile = in_srcfile;
if (srcfile[0] != '/') {
- srcfile = this.baseDir + in_srcfile;
+ srcfile = config.opt_real_basedir + in_srcfile;
}
string str;
FileUtils.get_contents(srcfile,out str);
var add = f.replace(".", "/") + ".js";
if (add[0] != '/') {
- add = this.baseDir + add;
+ add = config.opt_real_basedir + add;
}
if (this.files.contains(add)) {
}
+ var tmpDir = GLib.DirUtils.make_tmp("roojspacker_XXXXXX");
+
foreach(var file in this.files) {
print("reading %s\n",file );
- var minfile = this.tmpDir + "/" + file.replace("/", ".");
+ var minfile = tmpDir + "/" + file.replace("/", ".");
// let's see if we have a min file already?
print("COMPRESSING to %s\n", minfile);
//var codeComp = pack(str, 10, 0, 0);
- if (this.cleanup && FileUtils.test (minfile, FileTest.EXISTS)) {
+ if (config.opt_clean_cache && FileUtils.test (minfile, FileTest.EXISTS)) {
FileUtils.remove(minfile);
}
if (!loaded_string) {
- if (this.dumpTokens || this.hasErrors("")) {
+ if (config.opt_dump_tokens || this.hasErrors("")) {
GLib.Process.exit(0);
}
for(var i=0; i < this.files.size; i++) {
var file = this.files[i];
- var minfile = this.tmpDir + "/" + file.replace("/", ".");
+ var minfile = tmpDir + "/" + file.replace("/", ".");
if ( !FileUtils.test(minfile, FileTest.EXISTS)) {
if (str.length > 0) {
if (this.targetStream != null) {
this.targetStream.write(("// " +
- ( (file.length > this.baseDir.length) ? file.substring(this.baseDir.length) : file ) +
+ ( (file.length > config.opt_real_basedir.length) ? file.substring(config.opt_real_basedir.length) : file ) +
"\n").data);
- this.targetStream.write((str + "\n").data);
+
+ this.targetStream.write((str + "\n").data);
} else {
this.outstr += "//" +
- ( (file.length > this.baseDir.length) ? file.substring(this.baseDir.length) : file ) + "\n";
- this.outstr += str + "\n";
+ ( (file.length > config.opt_real_basedir.length) ? file.substring(config.opt_real_basedir.length) : file ) + "\n";
+ this.outstr += "//" + file +"\n";
+
+ this.outstr += str + "\n";
}
}
- if (this.cleanup) {
+ if (config.opt_clean_cache) {
FileUtils.remove(minfile);
}
}
-
-
+ if (config.opt_clean_cache) {
+ FileUtils.remove(tmpDir);
+ }
if (this.target.length > 0 ) {
print("Output file: " + this.target);
TokenArray toks = tr.tokenize(new TextStream(str)); // dont merge xxx + . + yyyy etc.
- if (this.dumpTokens) {
+ if (config.opt_dump_tokens) {
toks.dump();
return "";
//GLib.Process.exit(0);
//var ts = new TokenStream(toks);
//print(JSON.stringify(toks, null,4 )); Seed.quit();
- var ts = new Collapse(toks.tokens);
+ var ts = new Collapse(toks.tokens, this, fn);
//ts.dumpAll(""); print("Done collaps"); Process.exit(1);
// print(JSON.stringify(ts.tokens, null,4 )); Seed.quit();
//return;//
- if (!this.skipScope) {
+ if (!config.opt_skip_scope) {
var sp = new ScopeParser(ts, this, fn);
//sp.packer = this;
//print(sp.warnings.join("\n"));
//(new TokenStream(toks.tokens)).dumpAll(""); GLib.Process.exit(1);
// compress works on the original array - in theory the replacements have already been done by now
- var outf = CompressWhite(new TokenStream(toks.tokens), this, this.keepWhite); // do not kill whitespace..
+ var outf = CompressWhite(new TokenStream(toks.tokens), this, config.opt_keep_whitespace); // do not kill whitespace..
- debug("RESULT: \n %s\n", outf);
+ // debug("RESULT: \n %s\n", outf);