Modul:LuaWiki

A Wikipédiából, a szabad enciklopédiából

LuaWiki[mi ez?] • [dokumentáció: mutat, szerkeszt] • [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