Module:LuaCall: Difference between revisions

From Test Wiki
Jump to navigation Jump to search
Content deleted Content added
rm unnecessary use of preprocess
NaN is another var, which is nil. tonumber('0') is conditionally true
Line 6: Line 6:
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
if tonumber(v)~=NaN then v=tonumber(v) end
--if tonumber(v) then v=tonumber(v) end
_G[k]=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
-- debuglog=debuglog..k.."="..v.."</nowiki><br /><nowiki>"
-- debuglog=debuglog..k.."="..v.."</nowiki><br /><nowiki>"
end
end
for k,v in pairs(frame.args or {}) do
for k,v in pairs(frame.args or {}) do
if tonumber(v)~=NaN then v=tonumber(v) end
--if tonumber(v) then v=tonumber(v) end
_G[k]=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

Revision as of 08:11, 1 March 2019

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

local p={}

function p.main(frame)
    local parent=frame.getParent(frame) or {}
    local reserved_value={}
    local reserved_function,reserved_contents
    for k,v in pairs(parent.args or {}) do
        --if tonumber(v) then v=tonumber(v) end
        _G[k]=tonumber(v) or v -- transfer every parameter directly to the global variable table
        -- debuglog=debuglog..k.."="..v.."</nowiki><br /><nowiki>"
    end
    for k,v in pairs(frame.args or {}) do
        --if tonumber(v) then v=tonumber(v) end       
        _G[k]=tonumber(v) or 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
        reserved_function,reserved_contents=mw.ustring.match(_G[1],"^%s*(%a[^%s%(]*)%(([^%)]*)%)%s*$")
    end
    if reserved_contents then
        local reserved_counter=0
        repeat
            reserved_counter=reserved_counter+1
            reserved_value[reserved_counter]=_G[mw.ustring.match(reserved_contents,"([^%,]+)")]
            reserved_contents=mw.ustring.match(reserved_contents,"[^%,]+,(.*)$")
        until not reserved_contents
    end
    local reserved_arraypart=_G
    while mw.ustring.match(reserved_function,"%.") do
        reserved_functionpart,reserved_function=mw.ustring.match(reserved_function,"^(%a[^%.]*)%.(.*)$")
        reserved_arraypart=reserved_arraypart[reserved_functionpart]
    end
    local reserved_call=reserved_arraypart[reserved_function]
    if type(reserved_call)~="function" then
        return tostring(reserved_call)
    elseif reserved_debug or not reserved_function then return mw.text.nowiki(debuglog)
    else reserved_output={reserved_call(unpack(reserved_value))}
        return reserved_output[reserved_return or 1]
    end
end
return p