Mercurial Hosting > luan
diff src/luan/lib/init.luan @ 120:8d7730a5e3b4
move standalone logic from Java to Luan
git-svn-id: https://luan-java.googlecode.com/svn/trunk@121 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Mon, 02 Jun 2014 04:43:45 +0000 |
parents | f1bf2890d80f |
children | cba7ed3f06cc |
line wrap: on
line diff
--- a/src/luan/lib/init.luan Sun Jun 01 09:38:40 2014 +0000 +++ b/src/luan/lib/init.luan Mon Jun 02 04:43:45 2014 +0000 @@ -35,3 +35,74 @@ end end + +local standalone_usage = [=[ +usage: java luan.CmdLine [options] [script [args]] +Available options are: + -e stat execute string 'stat' + -i enter interactive mode after executing 'script' + -v show version information + -- stop handling options + - stop handling options and execute stdin +]=] + +local function standalone_error(msg) + Io.stderr.write( msg, "\n", standalone_usage ) +end + +function Basic.standalone(...) + local args = {...} + local interactive = false + local showVersion = false + local i = 1 + if #args == 0 then + interactive = true + showVersion = true + else + while i <= #args do + local arg = args[i] + if arg.sub(1,1) ~= "-" or arg == "--" then + break + end + if arg == "-i" then + interactive = true + elseif arg == "-v" then + showVersion = true + elseif arg == "-e" then + i = i + 1 + if i == #args then + standalone_error "'-e' needs argument" + return + end + local cmd = args[i] + local fn = load(cmd,"(command line)",true) + local result = Table.pack( fn() ) + if result.n > 0 then + print( Table.unpack(result,1,result.n) ) + end + elseif arg == "-" then + local src = Io.stdin.read_text() + local fn = load(src,"stdin",false) + fn() + return + else + standalone_error( "unrecognized option '"..arg.."'" ) + return + end + i = i + 1 + end + end + if showVersion then print(_VERSION) end + if i < #args then + local file = args[i] + _G.arg = {} + for j,v in ipairs(args) do + _G.arg[j-i] = v + end + local fn = load_file(file) + fn( Table.unpack(_G.arg) ) + end + if interactive then + Debug.debug("> ") + end +end