Jump to content

Module:Lua call and Module:Lua call/sandbox: Difference between pages

(Difference between pages)
Page 1
Page 2
Content deleted Content added
m HouseBlaster moved page Module:LuaCall to Module:Lua call: expand module name in the spirit of WP:TPN
 
m HouseBlaster moved page Module:LuaCall/sandbox to Module:Lua call/sandbox: expand module name in the spirit of WP:TPN
 
Line 2: Line 2:


function p.main(frame)
function p.main(frame)
local parent = frame.getParent(frame) or {}
local parent=frame.getParent(frame) or {}
local reserved_value = {}
local reserved_value={}
local reserved_function, reserved_contents
local reserved_function,reserved_contents
for k, v in pairs(parent.args or {}) do
for k,v in pairs(parent.args or {}) do
_G[k] = tonumber(v) or v -- transfer every parameter directly to the global variable table
_G[k]=tonumber(v) or v -- transfer every parameter directly to the global variable table
end
end
for k, v in pairs(frame.args or {}) do
for k,v in pairs(frame.args or {}) do
_G[k] = tonumber(v) or v -- transfer every parameter directly to the global variable table
_G[k]=tonumber(v) or v -- transfer every parameter directly to the global variable table
end
end
--- Alas Scribunto does NOT implement coroutines, according to
--- Alas Scribunto does NOT implement coroutines, according to
Line 15: Line 15:
--- this will not stop us from trying to implement one single lousy function call
--- this will not stop us from trying to implement one single lousy function call
if _G[1] then
if _G[1] then
reserved_function, reserved_contents = mw.ustring.match(_G[1], "^%s*(%a[^%s%(]*)%(([^%)]*)%)%s*$")
reserved_function,reserved_contents=mw.ustring.match(_G[1],"^%s*(%a[^%s%(]*)%(([^%)]*)%)%s*$")
end
end
if reserved_contents then
if reserved_contents then
local reserved_counter = 0
local reserved_counter=0
repeat
repeat
reserved_counter = reserved_counter + 1
reserved_counter=reserved_counter+1
reserved_value[reserved_counter] = _G[mw.ustring.match(reserved_contents, "([^%,]+)")]
reserved_value[reserved_counter]=_G[mw.ustring.match(reserved_contents,"([^%,]+)")]
reserved_contents = mw.ustring.match(reserved_contents, "[^%,]+,(.*)$")
reserved_contents=mw.ustring.match(reserved_contents,"[^%,]+,(.*)$")
until not reserved_contents
until not reserved_contents
end
end
local reserved_arraypart = _G
local reserved_arraypart=_G
while mw.ustring.match(reserved_function, "%.") do
while mw.ustring.match(reserved_function,"%.") do
reserved_functionpart, reserved_function = mw.ustring.match(reserved_function, "^(%a[^%.]*)%.(.*)$")
reserved_functionpart,reserved_function=mw.ustring.match(reserved_function,"^(%a[^%.]*)%.(.*)$")
reserved_arraypart = reserved_arraypart[reserved_functionpart]
reserved_arraypart=reserved_arraypart[reserved_functionpart]
end
end
local reserved_call = reserved_arraypart[reserved_function]
local reserved_call=reserved_arraypart[reserved_function]
if type(reserved_call) ~= "function" then
if type(reserved_call)~="function" then
return tostring(reserved_call)
return tostring(reserved_call)
else reserved_output={reserved_call(unpack(reserved_value))}
else
reserved_output = {reserved_call(unpack(reserved_value))}
return reserved_output[reserved_return or 1]
return reserved_output[reserved_return or 1]
end
end
Line 153: Line 152:
pfargs[2], usedpargs[2] = pframe.args[2], true
pfargs[2], usedpargs[2] = pframe.args[2], true
end
end
else
elseif not pfargs[2] then
pfargs[2], usedpargs[1] = pframe.args[1], true
if not pfargs[2] then
pfargs[2], usedpargs[1] = pframe.args[1], true
end
end
end
-- repack sequential args
-- repack sequential args