Modul:Homokozó/Pepo41/LuaWiki
Megjelenés
Homokozó/Pepo41/LuaWiki[mi ez?] • [dokumentáció: mutat, ] • [tesztek: létrehozás]
--[=[ 2013-05
A modul segédfunkciókat tartalmaz a Lua programozási nyelv wiki kontextusba való beágyazásához
================================================================================================
A modul require módon használható, nem sablonokat támogatva, arra hogy a wiki-változók részhalmazát
magunknak összeállítsuk a wikiVariables táblában.
A CURRENTYEAR, FULLPAGENAMEE és egyéb hasonló mágikus szavak tartalmának lekérdezését támogatja.
A wiki-változók lekérdezése időigényes, ezért a modul nem tartalmaz a wikiVariables táblában
adatot.
Első lépésként az initVariables() segítségével megadunk egy táblát, benne azokkal a viki-változókkal,
amelyekre várhatóan szükségünk lesz abban a modulban, amiben a require fügvénnyel behívtuk a
"LuaWiki" modult.
Ha valamely wiki-változó még nem eleme a táblának és mégis lekérdezzük, akkor a getVariable()
beépíti ezt a táblába előbb. Így dinamikusan bővíthető a tábla.
LuaWiki - Lua programozás támogatása a Wiki környezetben
* .error(about) -- vörösben fog megjelenni az adott oldalon a hibaüzenet
-- Paraméter:
-- about -- string, a hibaüzenet
* .getArg( arg, assign )
-- Sablon paraméterét adja vissza
-- Paraméter:
-- arg -- string vagy szám a sablon paraméterének azonosítója
-- assign -- tetszőleges opcionális érték; default value
* .initVariables( request )
-- Inicializálja a wikiVariables táblát a request argumentumban megadott tábla szerint
-- Paraméter
-- @request -- tábla, melynek minden eleme vagy
-- * string; a változó neve (pl. CURRENTYEAR)
-- * tábla: két elemmel a névvel és true logikai értékkel, ha a névhez számérték tartozik
* .getVariable( seek, numeric )
-- Visszaad egy elemet a wikiVariables táblából; telepíti azt, ha még nincs ott
-- Argumentumok:
-- @seek, -- string; a lekérdezendő wiki-változó neve
-- @numeric -- true, ha a lekérdezendő numerikus, különben false
* .isExisting( seek )
-- visszaadott értéke true, amennyiben az oldal létezik, false különben
-- Paraméter
-- @seek -- string; az oldal teljes neve (full page name)
* .transclude ( s, args )
-- kibont egy s sablont, ha ilyen van, különben hibaüzenetet ad
-- Paraméterek:
-- s -- string; a keresett sablon neve
-- args -- tábla vagy nil; a sablon argumentumai
]=]
-- Module globals
local wikiVariables
local LuaWiki = {}
LuaWiki.error = function ( about )
-- vörösben fog megjelenni az adott oldalon a hibaüzenet
-- Paraméter:
-- about -- string, a hibaüzenet
local r = about
if type( about ) == "string" then
if #about == 0 then -- ha az argumentum egy string és a hossza nulla
r = "Error in Lua" -- default hibaüzenet
end
else
r = tostring( about ) -- ha az argumentum nem string típus, akkor azzá konvertálja
end
return "<span class='error'>" .. error( r, 3 ) .. "</span>" -- és emiatt jelenik meg pirosban
end -- LuaWiki.error()
LuaWiki.getArg = function ( arg, assign )
-- Sablon paraméterét adja vissza
-- Paraméter:
-- arg -- string vagy szám a sablon paraméterének azonosítója
-- assign -- tetszőleges opcionális érték; default value
-- Uses:
-- mw.getCurrentFrame()
local r = mw.getCurrentFrame().args[ arg ] -- a kurrens frame argumentumai közül az arg kulccsal megadott
if type( r ) ~= "string" then
if type( assign ) == nil then
r = "{{{<" .. arg .. ">}}}" --ha r szám és assign nil érték
else
r = assign -- ha assign nem nil, akkor ő maga
end
end
return r -- a sablon paramétere
end -- LuaWiki.getArg()
LuaWiki.getVariable = function ( seek, numeric )
-- Visszaad egy elemet a wikiVariables táblából; telepíti azt, ha még nincs ott
-- Argumentumok:
-- @seek, -- string; a lekérdezendő wiki-változó neve
-- @numeric -- true, ha a lekérdezendő numerikus, különben false
-- Használja:
-- wikiVariables tábla
-- mw.getCurrentFrame()
local g, i, n
local r = false
if type( wikiVariables ) == "table" then
n = #wikiVariables -- az utólsó táblaindex
for i = 1, n do
g = wikiVariables[ i ]
if g then
if g[ 1 ] == seek then
r = g[ 2 ] -- megtalálta, a keresett értékét visszaadja
break;
end
end
end -- for i
else -- a tipusa nil, azaz nem létező
wikiVariables = { } -- legyártja
n = 0
end
if not r then -- a keresett, de még hiányzó változót felveszi a táblába
g = mw.getCurrentFrame():preprocess( "{{" .. seek .. "}}" )
r = mw.ustring.match( g, "^(.*)$" )
if numeric then -- ha a második paraméter true
r = tonumber( g ) -- számmá konvertálja az értéket
end
table.insert( wikiVariables, n + 1, { seek, r } ) -- bővül a tábla
end
return r
end -- LuaWiki.getVariable()
LuaWiki.initVariables = function ( request )
-- Inicializálja a wikiVariables táblát a request argumentumban megadott tábla szerint
-- Paraméter
-- @request -- tábla, melynek minden eleme vagy
-- * string; a változó neve (pl. CURRENTYEAR)
-- * tábla: két elemmel a névvel és true logikai értékkel, ha a névhez számérték tartozik
-- 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 ) -- lekérdezi az összes megadottat
for i = 1, #request do -- egy ciklusmag futása egy elemmel bővíti a táblát
s = request[ i ]
n = ( type( s ) == "table" )
if n then
n = s[ 2 ]
end
if n then
g = "-?%d+" -- kidolgozza a zárványt
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 } ) -- beépíti az elemet
end -- for i
end -- LuaWiki.initVariables()
LuaWiki.isExisting = function ( seek )
-- visszaadott értéke true, amennyiben az oldal létezik, false különben
-- Paraméter
-- @seek -- string; az oldal teljes neve (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 )
-- kibont egy s sablont, ha ilyen van, különben hibaüzenetet ad
-- Paraméterek:
-- s -- string; a keresett sablon neve
-- args -- tábla vagy nil; a sablon argumentumai
-- használja a köv. függvényeket:
-- mw.getCurrentFrame()
-- error()
local r = { s, "1" }
local frame = mw.getCurrentFrame()
if frame:callParserFunction( "#ifexist", r ) == "1" then -- ha létezik a sablon a wikiben
if args then -- ha megadtuk
r = frame:expandTemplate{ title = s, args = args }
-- Note that, as with frame:expandTemplate(), the function name and
-- arguments are not preprocessed before being passed to the parser function.
else -- ha nem adtunk meg args táblát
r = frame:expandTemplate{ title = s }
end
else
r = error( "Nem létező sablon: '" .. s .. "'" )
end
return r
end -- LuaWiki.transclude()
return LuaWiki