From ca76b74ba907221feb437734b3fef2164711a0dd Mon Sep 17 00:00:00 2001 From: echicken <> Date: Sat, 1 Sep 2012 01:54:22 +0000 Subject: [PATCH] Moved xjs_compile in here so that it can be used separately from the XJS handler. --- exec/load/xjs.js | 90 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 exec/load/xjs.js diff --git a/exec/load/xjs.js b/exec/load/xjs.js new file mode 100644 index 0000000000..fb1c891e2d --- /dev/null +++ b/exec/load/xjs.js @@ -0,0 +1,90 @@ +function xjs_compile(filename) { + if(cwd != '') { + if(filename.search(/^((\/)|([A-Za-z]:[\/\\]))/)==-1) + filename=cwd+filename; + } + cwd=filename; + cwd=backslash(cwd.replace(/[^\\\/]*$/,'')); + var ssjs_filename=filename+".ssjs"; + + // Probably a race condition on Win32 + if(file_exists(ssjs_filename)) { + if(file_date(ssjs_filename)<=file_date(filename)) { + file_remove(ssjs_filename); + } + } + + if(!file_exists(ssjs_filename)) { + var file = new File(filename); + if(!file.open("r",true,8192)) { + writeln("!ERROR " + file.error + " opening " + filename); + exit(); + } + var text = file.readAll(8192); + file.close(); + + var script=""; + + var in_xjs=false; + for (line in text) { + var str=text[line]; + while(str != '') { + if(!in_xjs) { + if(str.search(/<\?(xjs)?\s+/)==-1) { + var ln=true; + if(str.substr(-5)=='<?xjs') { + str=str.substr(0, str.length-5); + in_xjs=true; + ln=false; + } + else if(str.substr(-2)=='<?') { + str=str.substr(0, str.length-2); + in_xjs=true; + ln=false; + } + if(str != '') { + if(ln) + script += "writeln("+str.toSource()+");"; + else + script += "write("+str.toSource()+");"; + } + str=''; + } + else { + str=str.replace(/^(.*?)<\?(xjs)?\s+/, + function (str, p1, p2, offset, s) { + if(p1 != '') + script += "write("+p1.toSource()+");"; + in_xjs=true; + return ''; + } + ); + } + } + else { + if(str.search(/\?>/)==-1) { + script += str; + str=''; + } + else { + str=str.replace(/^(.*?)\?>/, + function (str, p1, offset, s) { + script += p1+";"; + in_xjs=false; + return ''; + } + ); + } + } + } + script += '\n'; + } + + var f=new File(ssjs_filename); + if(f.open("w",false)) { + f.write(script); + f.close(); + } + } + return(ssjs_filename); +} \ No newline at end of file -- GitLab