Modul:LuaWiki
Xuyakirin
Belgekirina modulê[biafirîne]
--[=[ 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 = "Çewtiya Lua'yê"
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( "Rûpelên transclude tune ye '" .. s .. "'" )
end
return r
end -- LuaWiki.transclude()
return LuaWiki