Wed, 23 Sep 2015 01:03:56 +0200
client: Apply variable expansion to text nodes
#!/usr/bin/env lua5.1 function read_script() io.input(arg[1]); return io.read("*a"); end function parse_script(data) local parser = require "scansion.parser"; return assert(parser.parse(data)); end function initialize_script(script) local c = 0; for name, object in pairs(script.objects) do local o = require("scansion.objects."..object.type); object.handler = o; object.script = script; o._validate(object); c = c + 1; end --print("Script defines "..c.." objects, and "..#script.actions.." actions"); return script; end function initialize_verse(errcb) local verse = require "verse"; verse.set_log_handler(verse._default_log_handler, { "debug", "info", "warn", "error" }); local function error_handler(err) verse.log("error", "Error: %s", err); verse.log("error", "Traceback: %s", debug.traceback()); errcb(err); end verse.set_error_handler(error_handler); return verse; end function main() local ok, err = true; local script = initialize_script(parse_script(read_script())); local verse = initialize_verse(function (_err) ok, err = false, _err end); local async = require "scansion.async"; local runner = async.runner(function (d) for _, action in pairs(script.actions) do local object = script.objects[action.object_name]; local handler = object.handler; assert(handler[action.action], "Objects of type '"..object.type.."' do not support action '"..action.action.."'"); print(object.name, action.action.."..."); local ok, err = pcall(handler[action.action], object, action.extra); if not ok then error(err); end end verse.log("info", "Completed script!"); verse.quit(); end, { error = function (runner, _err) verse.log("error", "Runner caught error: %s", _err); ok, err = false, _err; verse.quit(); end; }); runner:run(true); verse.log("debug", "runner paused") verse.loop(); return ok, err; end local ok, result, err = pcall(main); if not ok then print("TEST ERROR:", result); os.exit(2); elseif not result then print("TEST FAILED", err); os.exit(1); else print("TEST PASSED"); os.exit(0); end