Mercurial Hosting > luan
view 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 source
--Io.stdout.write "this is init.luan\n" local function print(...) local list = {} for v in Basic.values(...) do list[#list+1] = to_string(v) list[#list+1] = '\t' end if #list == 0 then Io.stdout.write( '\n' ) else list[#list] = '\n' Io.stdout.write( Table.unpack(list) ) end end _G.print = print local Debug = {} Package.loaded.Debug = Debug _G.Debug = Debug function Debug.debug(prompt) prompt = prompt or "luan_debug> " local function console() return Io.read_console_line(prompt) end for line in console do local fn = load(line,"stdin",true) local result = Table.pack( fn() ) if result.n > 0 then print( Table.unpack(result,1,result.n) ) end 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