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