Modul:LuaWiki
--[=[ 2013-05-07 LuaWiki - Support Lua programming in Wiki environment
- .getArg()
- .initVariables()
- .getVariable()
- .isExisting()
- .setFrame()
- .transclude()
]=]
-- Module globals local wikiVariables local LuaWiki = {}
LuaWiki.error = function ( about )
-- Enclose errorMsg with
-- Precondition:
-- about -- string
local r = about
if type( about ) == "string" then
if #about == 0 then
r = "Error in Lua"
end
else
r = tostring( about )
end
return "" .. error( r, 3 ) .. ""
end -- LuaWiki.error()
LuaWiki.getArg = function ( arg, assign )
-- Retrieve template argument -- Precondition: -- arg -- string or number; argument identifier -- assign -- any, optional; default value -- Uses: -- mw.getCurrentFrame() local r = mw.getCurrentFrame().args[ arg ] if type( r ) ~= "string" then if type( assign ) == nil then r = "{{{<" .. arg .. ">}}}" else r = assign end end return r
end -- LuaWiki.getArg()
LuaWiki.getVariable = function ( seek, numeric )
-- Retrieve item from wikiVariables; populate if not yet present -- Precondition: -- seek -- string; name of variable -- numeric -- true: seek is numeric (else string) -- Uses: -- >< wikiVariables -- mw.getCurrentFrame() local g, i, n local r = false if type( wikiVariables ) == "table" then n = #wikiVariables for i = 1, n do g = wikiVariables[ i ] if g then if g[ 1 ] == seek then r = g[ 2 ] break; end end end -- for i else wikiVariables = { } n = 0 end if not r then g = mw.getCurrentFrame():preprocess( "Vorlage:" .. seek .. "" ) r = mw.ustring.match( g, "^(.*)$" ) if numeric then r = tonumber( g ) end table.insert( wikiVariables, n + 1, { seek, r } ) end return r
end -- LuaWiki.getVariable()
LuaWiki.initVariables = function ( request )
-- Initialize wikiVariables -- Precondition: -- request -- table; every element either -- * string; name of variable -- * table; name string and true, if numeric -- Uses: -- < wikiVariables -- mw.getCurrentFrame() local g, i, n, s local src = "|" wikiVariables = { } for i = 1, #request do s = request[ i ] if type( s ) == "table" then s = s[ 1 ] end src = src .. s .. "=Vorlage:" .. s .. "|" end -- for i src = mw.getCurrentFrame():preprocess( src ) for i = 1, #request do s = request[ i ] n = ( type( s ) == "table" ) if n then n = s[ 2 ] end if n then g = "-?%d+" s = s[ 1 ] else g = "[^|]*" end g = mw.ustring.match( src, "|" .. s .. "=(" .. g .. ")|" ) if n then g = tonumber( g ) end table.insert( wikiVariables, i, { s, g } ) end -- for i
end -- LuaWiki.initVariables()
LuaWiki.isExisting = function ( seek )
-- Return true if page exists, else false -- Precondition: -- seek -- string; full page name -- Uses: -- mw.getCurrentFrame() local g = mw.getCurrentFrame():callParserFunction( "#ifexist", { seek, "1", "0" } ) return ( g == "1" )
end -- LuaWiki.isExisting()
LuaWiki.transclude = function ( s, args )
-- Save transclusion of a page, or error message -- Precondition: -- s -- string; page name -- args -- table or nil; arguments -- Uses: -- mw.getCurrentFrame() -- error() local r = { s, "1" } local frame = mw.getCurrentFrame() if frame:callParserFunction( "#ifexist", r ) == "1" then if args then r = frame:expandTemplate{ title = s, args = args } else r = frame:expandTemplate{ title = s } end else r = error( "No transclude page '" .. s .. "'" ) end return r
end -- LuaWiki.transclude()
return LuaWiki