Die Dokumentation für dieses Modul kann unter Modul:LuaWiki/Doku erstellt werden
--[=[ 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 <span> -- 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 "<span class='error'>" .. error( r, 3 ) .. "</span>" 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( "{{" .. 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 .. "={{" .. 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