Modul:Kembox/Chembox
Megjelenés
Kembox/Chembox[mi ez?] • [dokumentáció: mutat, ] • [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