Module:LuaCall: Difference between revisions
Jump to navigation
Jump to search
nowiki |
Sometime I should figure out better answers to this annoyance of suppressed \ns |
||
Line 3: | Line 3: | ||
function p.main(frame) | function p.main(frame) | ||
local parent=frame.getParent(frame) or {} | local parent=frame.getParent(frame) or {} | ||
local debuglog="Parent: \n" | local debuglog="Parent: \n\n" | ||
for k,v in pairs(parent.args or {}) do | for k,v in pairs(parent.args or {}) do | ||
_G[k]=v -- transfer every parameter directly to the global variable table | _G[k]=v -- transfer every parameter directly to the global variable table | ||
debuglog=debuglog..k.."="..v.."\n" | debuglog=debuglog..k.."="..v.."\n\n" | ||
end | end | ||
debuglog=debuglog.."Frame: \n" | debuglog=debuglog.."Frame: \n\n" | ||
for k,v in pairs(frame.args or {}) do | for k,v in pairs(frame.args or {}) do | ||
debuglog=debuglog..k.."="..v.."\n" | debuglog=debuglog..k.."="..v.."\n\n" | ||
_G[k]=v -- transfer every parameter directly to the global variable table | _G[k]=v -- transfer every parameter directly to the global variable table | ||
end | end | ||
Line 18: | Line 18: | ||
if _G[1] then | if _G[1] then | ||
local reserved_function,reserved_contents=mw.ustring.match(_G[1],"^(%s*%a[^%s%(]*)%(([^%)]*)%)%s*$") | local reserved_function,reserved_contents=mw.ustring.match(_G[1],"^(%s*%a[^%s%(]*)%(([^%)]*)%)%s*$") | ||
debuglog=debuglog.."Function is:" .. reserved_function .. "\nContents are:"..reserved_contents.."\n" | debuglog=debuglog.."Function is:" .. reserved_function .. "\n\nContents are:"..reserved_contents.."\n\n" | ||
local reserved_value={} | local reserved_value={} | ||
local reserved_counter=0 | local reserved_counter=0 | ||
Line 25: | Line 25: | ||
reserved_counter=reserved_counter+1 | reserved_counter=reserved_counter+1 | ||
reserved_value[reserved_counter]=mw.ustring.match(reserved_contents,"([^%,]+)") | reserved_value[reserved_counter]=mw.ustring.match(reserved_contents,"([^%,]+)") | ||
debuglog=debuglog.."["..reserved_counter.."] = "..tostring(reserved_value[reserved_counter]) .. "\n" | debuglog=debuglog.."["..reserved_counter.."] = "..tostring(reserved_value[reserved_counter]) .. "\n\n" | ||
reserved_contents=mw.ustring.match(reserved_contents,"[^%,]+,(.*)$") | reserved_contents=mw.ustring.match(reserved_contents,"[^%,]+,(.*)$") | ||
until not reserved_contents | until not reserved_contents |
Revision as of 15:49, 17 April 2013
Documentation for this module may be created at Module:LuaCall/doc
local p={}
function p.main(frame)
local parent=frame.getParent(frame) or {}
local debuglog="Parent: \n\n"
for k,v in pairs(parent.args or {}) do
_G[k]=v -- transfer every parameter directly to the global variable table
debuglog=debuglog..k.."="..v.."\n\n"
end
debuglog=debuglog.."Frame: \n\n"
for k,v in pairs(frame.args or {}) do
debuglog=debuglog..k.."="..v.."\n\n"
_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*$")
debuglog=debuglog.."Function is:" .. reserved_function .. "\n\nContents are:"..reserved_contents.."\n\n"
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,"([^%,]+)")
debuglog=debuglog.."["..reserved_counter.."] = "..tostring(reserved_value[reserved_counter]) .. "\n\n"
reserved_contents=mw.ustring.match(reserved_contents,"[^%,]+,(.*)$")
until not reserved_contents
end
end
if not reserved_function then return frame.preprocess(frame,"<nowiki>"..debuglog.."</nowiki>") end
return _G[reserved_function](unpack(reserved_contents or {}))
end
return p