Ugrás a tartalomhoz

Modul:Kembox/Chembox

Ellenőrzött
A Wikipédiából, a szabad enciklopédiából

Kembox/Chembox[mi ez?] • [dokumentáció: mutat, szerkeszt] • [tesztek: létrehozás]

local p = {}

local partbl = {}                               -- átírt alsablonokból és a fő sablonból kapott paraméterek.
                                                -- asszociativ tomb: partbl[chemboxnev] = chemboxertek.

-- alsablonból kapott paraméter beszúrása partbl-be.
-- A paraméter alakja par1=ert1\0par2=ert2\0 alakú string.
local function alsabfv(param)
    local str = param
    local veg, sor, egyen
    while str
    do  veg = string.find(str,'\0',1,plain)     -- \0 indexe
        if veg == nil then break end
        sor   = string.sub(str,1,veg-1)         -- str \0 elotti resze
        egyen = string.find(str,'=',1,plain)    -- = indexe
        if egyen == nil then break end          -- a sorban nincs =
        partbl[string.sub(str,1,egyen-1)] = string.sub(str,egyen+1,veg-1)
        str   = string.sub(str,veg+1)
    end
end

function p.Chembox_new(frame)
    local szulo = frame:getParent()       -- a chembox_new sablon által kapott paraméterekairs()
    local alsabtip = {   -- alsablonból jövő paraméterek
        Section1  = true,  Szakasz1  = true,
        Section2  = true,  Szakasz2  = true,
        Section3  = true,  Szakasz3  = true,
        Section4  = true,  Szakasz4  = true,
        Section5  = true,  Szakasz5  = true,
        Section6  = true,  Szakasz6  = true,
        Section7  = true,  Szakasz7  = true,
        Section8  = true,  Szakasz8  = true,
        Section9  = true,  Szakasz9  = true,
        Section10 = true,  Szakasz10 = true,
        Section11 = true,  Szakasz11 = true,
        Section12 = true,  Szakasz12 = true,
        Section13 = true,  Szakasz13 = true,
        Section14 = true,  Szakasz14 = true,
        Section15 = true,  Szakasz15 = true,
    }

    local regi = ''                                            -- át nem írt alsablonból jövő paraméterek
    for nev,ertek in szulo:argumentPairs()
    do    v = string.gsub(ertek,string.char(239,191,189),'\0') -- a modulhívás átkonvertálja \0-t a 239,191,189 karaktersorozatra. Visszacsináljuk.
          if alsabtip[nev]
          then         -- alsablonból jöhető paraméter
                if string.find(v,'\0',1,plain) ~= nil
                then   alsabfv(v)                              -- vannak benne \0-k: tényleg alsablonból jött
                else   regi = regi..'\n'..v                    -- át nem írt alsablonból jött
                end
          else         -- fősablon paraméter
                partbl[nev] = v
          end
    end

--  A sablonbeli és az összes alsablonbeli paraméter partbl-ben van. Most behívjuk az alsablonokat, 
--  hogy ki-ki írja ki belőle azokat a paraméterket, amelyeket ért.
--  str-be csak akkor kerül(ne) érték, ha valamelyik alsablon kiírja a paramétereit ahelyett, hogy visszapasszolná.
--  Ez jól jött az átállás alatt, de most már nem kell.

    local modlista = {     -- modulnevek
        'module:Kembox/Chembox_Images',         
        'module:kembox/Chembox_Identifiers',    
        'module:kembox/Chembox_Properties',
        'adatlap',
        'module:kembox/Chembox_Structure',
        'module:kembox/Chembox_Thermochemistry',
        'module:Kembox/Drugbox_Farmakokinetika',
        'module:Kembox/Drugbox_Terápia',
        'module:kembox/Chembox_explosive',
        'module:kembox/Chembox_Hazards',
        'module:kembox/Chembox_Related',        
    }

    local hivo  = frame.args['infobox']              -- hívó sablon
    local str = ''
    local lapcim = frame:preprocess('{{PAGENAME}}')  -- a hívó szócikk címe

    for i, nev in ipairs(modlista)
    do    if nev == 'adatlap'      -- nem szép, de legalább csúnya
          then  modul = require('module:kembox/kozos')
                local adatlap = lapcim..'_(adatlap)'
                if frame:preprocess('{{#ifexist: '..adatlap..'|1|0}}') == '1'
                then str = str..modul.kiir({'[['..adatlap..']]'},'Chembox_new')
                end
          else  modul = require(nev)
                str = str..modul.lua(partbl,hivo,lapcim)
          end
    end
    return str..regi
end

return p