Module:LuaCall

From Test Wiki
Revision as of 15:38, 17 April 2013 by w>Wnt (Trying to execute one arbitrary Lua built-in library function from a template. Inspired by the guy trying to do string.rep with a module)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Documentation for this module may be created at Module:LuaCall/doc

local p={}

function p.main(frame)
    local parent=frame.getParent(frame) or {}
    for k,v in pairs(parent.args or {}) do
        _G[k]=v -- transfer every parameter directly to the global variable table
    end
    for k,v in pairs(frame.args or {}) do
        _G[k]=v -- transfer every parameter directly to the global variable table
    end
     --- Alas Scribunto does NOT implement coroutines, according to
     --- http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#string.format
     --- this will not stop us from trying to implement one single lousy function call
    if _G[1] then
        local reserved_function,reserved_contents=mw.ustring.match(_G[1],"^(%s*%a[^%s%(]*)%(([^%)]*)%)%s*$")
        local reserved_value={}
        local reserved_counter=0
        if reserved_contents then
            repeat
                reserved_counter=reserved_counter+1
                reserved_value[reserved_counter]=mw.ustring.match(reserved_contents,"([^%,]+)")
                reserved_contents=mw.ustring.match(reserved_contents,"[^%,]+,(.*)$")
            until not reserved_contents
        end
    end
    return _G[reserved_function](unpack(reserved_contents or {}))
end
return p