diff options
author | Marius <mariausol@gmail.com> | 2013-05-20 03:20:28 +0300 |
---|---|---|
committer | Marius <mariausol@gmail.com> | 2013-05-20 03:20:28 +0300 |
commit | 5fc5cfb5014ddcc2942e13a559f4082fb66aa6e7 (patch) | |
tree | 53f81e99fac8c80ddd2fb70e233a7e5d5735722f /tex/context/base/luat-exe.lua | |
parent | 13ec4b540e0d46c97fd7b089e0b7413da81e0a9f (diff) | |
download | context-5fc5cfb5014ddcc2942e13a559f4082fb66aa6e7.tar.gz |
beta 2013.05.20 02:00
Diffstat (limited to 'tex/context/base/luat-exe.lua')
-rw-r--r-- | tex/context/base/luat-exe.lua | 252 |
1 files changed, 126 insertions, 126 deletions
diff --git a/tex/context/base/luat-exe.lua b/tex/context/base/luat-exe.lua index 6f7137cad..a57a5a006 100644 --- a/tex/context/base/luat-exe.lua +++ b/tex/context/base/luat-exe.lua @@ -1,126 +1,126 @@ -if not modules then modules = { } end modules ['luat-exe'] = {
- version = 1.001,
- comment = "companion to luat-lib.mkiv",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
--- this module needs checking (very old and never really used, not even enabled)
-
-local match, find, gmatch = string.match, string.find, string.gmatch
-local concat = table.concat
-local select = select
-
-local report_executers = logs.reporter("system","executers")
-
-resolvers.executers = resolvers.executers or { }
-local executers = resolvers.executers
-
-local permitted = { }
-
-local osexecute = os.execute
-local osexec = os.exec
-local osspawn = os.spawn
-local iopopen = io.popen
-
-local execute = osexecute
-local exec = osexec
-local spawn = osspawn
-local popen = iopopen
-
-local function register(...)
- for k=1,select("#",...) do
- local v = select(k,...)
- permitted[#permitted+1] = v == "*" and ".*" or v
- end
-end
-
-local function prepare(...)
- -- todo: make more clever first split
- local t = { ... }
- local n = #n
- local one = t[1]
- if n == 1 then
- if type(one) == 'table' then
- return one, concat(t," ",2,n)
- else
- local name, arguments = match(one,"^(.-)%s+(.+)$")
- if name and arguments then
- return name, arguments
- else
- return one, ""
- end
- end
- else
- return one, concat(t," ",2,n)
- end
-end
-
-local function executer(action)
- return function(...)
- local name, arguments = prepare(...)
- for k=1,#permitted do
- local v = permitted[k]
- if find(name,v) then
- return action(name .. " " .. arguments)
- else
- report_executers("not permitted: %s %s",name,arguments)
- end
- end
- return action("")
- end
-end
-
-local function finalize() -- todo: os.exec, todo: report ipv print
- execute = executer(osexecute)
- exec = executer(osexec)
- spawn = executer(osspawn)
- popen = executer(iopopen)
- finalize = function()
- report_executers("already finalized")
- end
- register = function()
- report_executers("already finalized, no registration permitted")
- end
- os.execute = execute
- os.exec = exec
- os.spawn = spawn
- io.popen = popen
-end
-
-executers.finalize = function(...) return finalize(...) end
-executers.register = function(...) return register(...) end
-executers.execute = function(...) return execute (...) end
-executers.exec = function(...) return exec (...) end
-executers.spawn = function(...) return spawn (...) end
-executers.popen = function(...) return popen (...) end
-
-local execution_mode directives.register("system.executionmode", function(v) execution_mode = v end)
-local execution_list directives.register("system.executionlist", function(v) execution_list = v end)
-
-function executers.check()
- if execution_mode == "none" then
- finalize()
- elseif execution_mode == "list" and execution_list ~= "" then
- for s in gmatch("[^%s,]",execution_list) do
- register(s)
- end
- finalize()
- else
- -- all
- end
-end
-
---~ resolvers.executers.register('.*')
---~ resolvers.executers.register('*')
---~ resolvers.executers.register('dir','ls')
---~ resolvers.executers.register('dir')
-
---~ resolvers.executers.finalize()
---~ resolvers.executers.execute('dir',"*.tex")
---~ resolvers.executers.execute("dir *.tex")
---~ resolvers.executers.execute("ls *.tex")
---~ os.execute('ls')
-
---~ resolvers.executers.check()
+if not modules then modules = { } end modules ['luat-exe'] = { + version = 1.001, + comment = "companion to luat-lib.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- this module needs checking (very old and never really used, not even enabled) + +local match, find, gmatch = string.match, string.find, string.gmatch +local concat = table.concat +local select = select + +local report_executers = logs.reporter("system","executers") + +resolvers.executers = resolvers.executers or { } +local executers = resolvers.executers + +local permitted = { } + +local osexecute = os.execute +local osexec = os.exec +local osspawn = os.spawn +local iopopen = io.popen + +local execute = osexecute +local exec = osexec +local spawn = osspawn +local popen = iopopen + +local function register(...) + for k=1,select("#",...) do + local v = select(k,...) + permitted[#permitted+1] = v == "*" and ".*" or v + end +end + +local function prepare(...) + -- todo: make more clever first split + local t = { ... } + local n = #n + local one = t[1] + if n == 1 then + if type(one) == 'table' then + return one, concat(t," ",2,n) + else + local name, arguments = match(one,"^(.-)%s+(.+)$") + if name and arguments then + return name, arguments + else + return one, "" + end + end + else + return one, concat(t," ",2,n) + end +end + +local function executer(action) + return function(...) + local name, arguments = prepare(...) + for k=1,#permitted do + local v = permitted[k] + if find(name,v) then + return action(name .. " " .. arguments) + else + report_executers("not permitted: %s %s",name,arguments) + end + end + return action("") + end +end + +local function finalize() -- todo: os.exec, todo: report ipv print + execute = executer(osexecute) + exec = executer(osexec) + spawn = executer(osspawn) + popen = executer(iopopen) + finalize = function() + report_executers("already finalized") + end + register = function() + report_executers("already finalized, no registration permitted") + end + os.execute = execute + os.exec = exec + os.spawn = spawn + io.popen = popen +end + +executers.finalize = function(...) return finalize(...) end +executers.register = function(...) return register(...) end +executers.execute = function(...) return execute (...) end +executers.exec = function(...) return exec (...) end +executers.spawn = function(...) return spawn (...) end +executers.popen = function(...) return popen (...) end + +local execution_mode directives.register("system.executionmode", function(v) execution_mode = v end) +local execution_list directives.register("system.executionlist", function(v) execution_list = v end) + +function executers.check() + if execution_mode == "none" then + finalize() + elseif execution_mode == "list" and execution_list ~= "" then + for s in gmatch("[^%s,]",execution_list) do + register(s) + end + finalize() + else + -- all + end +end + +--~ resolvers.executers.register('.*') +--~ resolvers.executers.register('*') +--~ resolvers.executers.register('dir','ls') +--~ resolvers.executers.register('dir') + +--~ resolvers.executers.finalize() +--~ resolvers.executers.execute('dir',"*.tex") +--~ resolvers.executers.execute("dir *.tex") +--~ resolvers.executers.execute("ls *.tex") +--~ os.execute('ls') + +--~ resolvers.executers.check() |