From 63be5587a21ac4090b43e10751ce78ed1b1be778 Mon Sep 17 00:00:00 2001 From: deuce <> Date: Wed, 9 Aug 2006 20:11:54 +0000 Subject: [PATCH] Move everything into a function named xjs_load() which can be called by xjs files to convert another xjs file to ssjs and load() it. --- exec/xjs_handler.js | 125 ++++++++++++++++++++++++-------------------- 1 file changed, 69 insertions(+), 56 deletions(-) diff --git a/exec/xjs_handler.js b/exec/xjs_handler.js index 9b0764702e..066142c582 100644 --- a/exec/xjs_handler.js +++ b/exec/xjs_handler.js @@ -2,86 +2,99 @@ /* $Id$ */ -var filename; +var xjs_filename; if(this.http_request!=undefined) /* Requested through web-server */ - filename = http_request.real_path; + xjs_filename = http_request.real_path; else - filename = argv[0]; + xjs_filename = argv[0]; -var ssjs_filename=filename+".ssjs"; +var last_cwd=''; -// Probably a race condition on Win32 -if(file_exists(ssjs_filename)) { - if(file_date(ssjs_filename)<=file_date(filename)) { - file_remove(ssjs_filename); - } -} +xjs_load(xjs_filename); + +function xjs_load(filename) { + var cwd=filename; + cwd=cwd.replace(/[^\\\/]*$/,''); -if(!file_exists(ssjs_filename)) { - var file = new File(filename); - if(!file.open("r",true,8192)) { - writeln("!ERROR " + file.error + " opening " + filename); - exit(); + if(last_cwd != '') + filename=last_cwd+'/'+filename; + 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); + } } - var text = file.readAll(8192); - file.close(); - var script=""; + 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=='<?xjs' || str=='<?') { - in_xjs=true; - str=''; + var in_xjs=false; + for (line in text) { + var str=text[line]; + while(str != '') { + if(!in_xjs) { + if(str=='<?xjs' || str=='<?') { + in_xjs=true; + str=''; + } + else { + if(str.search(/<\?(xjs)?\s+/)==-1) { + script += "writeln("+escape_quotes(str)+");"; + str=''; + } + else { + str=str.replace(/^(.*?)<\?(xjs)?\s+/, + function (str, p1, p2, offset, s) { + if(p1 != '') + script += "write("+escape_quotes(p1)+");"; + in_xjs=true; + return ''; + } + ); + } + } } else { - if(str.search(/<\?(xjs)?\s+/)==-1) { - script += "writeln("+escape_quotes(str)+");"; + if(str.search(/\?>/)==-1) { + script += str; str=''; } else { - str=str.replace(/^(.*?)<\?(xjs)?\s+/, - function (str, p1, p2, offset, s) { - if(p1 != '') - script += "write("+escape_quotes(p1)+");"; - in_xjs=true; + str=str.replace(/^(.*?)\?>/, + function (str, p1, offset, s) { + script += p1+";"; + in_xjs=false; 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'; } - script += '\n'; - } - var f=new File(ssjs_filename); - if(f.open("w",false)) { - f.write(script); - f.close(); + var f=new File(ssjs_filename); + if(f.open("w",false)) { + f.write(script); + f.close(); + } } -} -load(ssjs_filename); + last_cwd=cwd; + + load(ssjs_filename); +} function escape_quotes(arg) { return("'"+arg.replace(/'/g,"'+"+'"'+"'"+'"+'+"'")+"'"); -- GitLab