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]

require('strict')
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    local 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 = tostring(mw.title.getCurrentTitle())  -- a hívó szócikk címe
	local modul
	
	for _, nev in ipairs(modlista) do
		if nev == 'adatlap' then      -- nem szép, de legalább csúnya
			modul = require('Modul:Kembox/kozos')
			local adatlap = mw.title.new(lapcim .. ' (adatlap)')
			if adatlap.exists 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