Modul:Kembox/kozos
Megjelenés
Kembox/kozos[mi ez?] • [dokumentáció: mutat, ] • [tesztek: létrehozás]
Ez a modul tartalmazza a kémiai infoboxok (lásd: Sablon:Chembox/infóboxok) több részmodulja által használt/nem infoboxspecifikus függvényeket.
Chembox_new | Chembox_új | Vegyület_infobox | Drugbox | Gyógyszeresdoboz |
---|---|---|---|---|
hexametapil | heptán | hidrogén-klorid | gemfibrozil | kokain |
glükóz | koffein | meptazinol |
local p = {}
--[[ Az eredmény kiírása: az adatcsoport táblázatsorainak generálása az infóboxba
eredm: string
Alcsoport fejléc.
{ címke, érték1, érték2, ... }
Normál érték. Minden érték külön táblázatsorba kerül. Egynél több érték esetén címke rowspan-os mező lesz.
{ típus, ... }
A típus szám, és a különlegesen kezelendő mezők típusát adja meg. A további paraméterek a típustól függenek. Lásd hivtomb alább.
1: egy vagy két kép. Paraméter: egy vagy két tábla a kép leírásával.
2: két oszlop széles szöveg. Paraméter: tábla a szöveggel és a betűmérettel.
3: címke/érték, ahol az értéket 2 oszlop szélesen kell kiírni. Paraméter: a két string.
4: a box címe. Paraméter: string.
5: két oszlop széles elrejthető szöveg. Két string paramétere van, becsukva csak az első látszik.
infobox: a hívó infóbox neve. Ettől függ a kiírás formátuma
]]
--[[
Függvény egy kép kirajzolására. A paraméter egy asszociatív tömb az alábbi elemekkel:
ImageFile: képfile zárójel és file: előtag nélkül. Kötelező.
ImageSize: képméret. Kötelező.
ImageAlt: alternatív képszöveg (ha a böngésző a képet nem tudja kirajzolni)
ImageName: kép felirat, ha ráállunk a kurzorral.
]]
local function egykep(infobox,kep)
if kep and kep.ImageFile then
str = '[[file:'..kep.ImageFile..'|'..kep.ImageSize
if tonumber(kep.ImageSize) then str = str..'px' end
if kep.ImageAlt then str = str..'|alt='..kep.ImageAlt end
str = str..']]'
if kep.ImageName then str = str..'<br>'..kep.ImageName end
return str
else return ''
end
end
--[[
Függvény egy vagy két kép kirajzolására. Mindkét paraméter egy-egy asszociatív tömb az alábbi elemekkel:
ImageFile: képfile zárójel és file: előtag nélkül. Egyedül ez kötelező.
ImageSize: képméret. A default a hívó sablontól függ.
ImageAlt: alternatív képszöveg (ha a böngésző a képet nem tudja kirajzolni)
ImageName: kép felirat, ha ráállunk a kurzorral.
]]
local function kepkiir(infobox,par1,par2)
local meret1 = { -- képméretek, ha egy sorban egy kép van
Chembox_new = '200px',
["Chembox_új"] = '200px',
["Vegyület_infobox"] = '250px',
Drugbox = '280px',
Drugbox_new = '200px',
}
local meret2 = { -- képméretek, ha egy sorban két kép van
Chembox_new = '100px',
["Chembox_új"] = '100px',
Drugbox_new = '130px',
}
if par1 and par1.ImageFile
then if par2 == nil -- egy sorban egy kép
then if not par1.ImageSize then par1.ImageSize = meret1[infobox] end
if not par1.ImageSize then par1.ImageSize = '200px' end -- rossz az infobox paraméter értéke
return 'colspan="2" align="center" | '..egykep(infobox,par1)
else if not par1.ImageSize then par1.ImageSize = meret2[infobox] end
if not par1.ImageSize then par1.ImageSize = '100px' end -- rossz az infobox paraméter értéke
if not par2.ImageSize then par2.ImageSize = meret2[infobox] end
if not par2.ImageSize then par2.ImageSize = '100px' end -- rossz az infobox paraméter értéke
return 'align="center" | '..egykep(infobox,par1)..' || '..
'align="center" | '..egykep(infobox,par2)
end
else return ''
end
end
local function szeles(infobox,par) -- 2 oszlop szeles szoveget ir ki. Attribútumot zár (|) és megkezdi az értékmezőt.
local szoveg = par[1] -- kiirando szoveg
local betumeret = par[2] -- betumeret
local str = 'colspan="2" align="center" | '
if betumeret then return str..'<font size="'..betumeret..'">'..szoveg..'</font>'
else return str..szoveg
end
end
local fejszoveg = { -- adatcsoport fejléc új sor, stílus, címke előtti és utáni (HTML-formázó) szöveg
Chembox_new = { '! colspan="2" ', 'style="background-color: #F8EABA; padding: 0.5em" align="center" ', ' <b>', '</b>' },
["Chembox_új"] = { '! colspan="2" ', 'style="background-color: #F8EABA; padding: 0.5em" align="center" ', ' <b>', '</b>' },
["Vegyület_infobox"] = { '\n|-\n| colspan="2" ', 'style="line-height: 200%; background-color:#F8EABA" align="center" ', ' \'\'\'' , "'''" },
Drugbox = { '\n|-\n| colspan="2" ', 'bgcolor="#dddddd" ', ' \'\'\'' , "'''" },
["Gyógyszeresdoboz"] = { '\n|-\n| colspan="2" ', 'bgcolor="#dddddd" ', ' \'\'\'' , "'''" },
} -- Chembox_new==Chembox_új és Drugbox=Gyógyszeresdoboz
local function fejlec(infobox,szoveg) -- adatcsoport fejléc kiírása
local fej = fejszoveg[infobox]
if fej --TNT "infóbox"-ban nem írunk ki alcsoport fejlécet
then return fej[1]..fej[2]..' | '..fej[3]..szoveg..fej[4]..'\n|-\n'
end
return ''
end
local function boxfej(infobox,par) -- par[1] az infobox fejlece.
local str = 'colspan="2" align="center" | '
if infobox == 'Vegyület_infobox'
then return 'class="fejlec vegyuletinfobox" style="background-color:#F8EABA; font-size:larger; line-height: 200%" '..str..par[1]
elseif infobox == 'Chembox_new' or infobox == 'Chembox_új'
then return fejlec(infobox,'<font style="font-size: larger">'..par[1]..'</font>')
else return fejlec(infobox,par[1])
end
end
local function smiles(infobox,par)
local fej
if fejszoveg[infobox] then fej = fejszoveg[infobox] else fej = fejszoveg.Chembox_new end
-- return fej[1]..'| <table class="mw-collapsible mw-collapsed"><tr><th '..fej[2]..'>'..fej[3]..par[1]..fej[4]..'</th></tr><tr><td>'..par[2]..'</td></tr></table>\n|-\n'
return fej[1]..fej[2]..'| <table class="mw-collapsible mw-collapsed"><tr><th width="500">'..fej[3]..par[1]..fej[4]..'</th></tr><tr><td>'..par[2]..'</td></tr></table>\n|-\n'
end
-- 1 2 3 4 5
local mezo = { -- sor eleji, címke előtti, címke utáni, értékattrkezdő, értékmezőkezdő, értékmező utáni (HTML-formázó) szöveg
Chembox_new = { '|', '', '', ' || ', '', '' },
["Chembox_új"] = { '|', '', '', ' || ', '', '' },
TNT = { '! align="left"', '', '', '\n| ', '', '' },
-- Drugbox = { '| bgcolor="#ddeeff"', '', '\n| bgcolor="#eeeeee" ', '| ', '', '' },
Drugbox = { '| bgcolor="#ddeeff"', '', '', '\n| bgcolor="#eeeeee" ', ' | ', '' },
["Gyógyszeresdoboz"] = { '| bgcolor="#ddeeff"', '', '', '\n| bgcolor="#eeeeee" ', ' | ', '' },
["Vegyület_infobox"] = { '|', '<b>', '</b>', ' || ', '', '' },
}
local function iupac(infobox,cimke,szoveg)
local frm
if mezo[infobox] then frm = mezo[infobox] else frm = mezo.Chembox_new end
return fejlec(infobox,cimke)..frm[3]..frm[4]..szeles(infobox,{szoveg, '-2'})..frm[6]
end
function p.lablec(frame)
local labszoveg = { -- adatcsoport fejléc előtti (HTML-formázó) szöveg
Chembox_new = '| align="center" style="background-color: #F8EABA; padding: 0.5em" colspan="2" | ',
["Vegyület_infobox"] = '\n|-\n| colspan="2" style="background-color:#F8EABA;" align="center" | ',
Drugbox = '\n|-\n| colspan="2" bgcolor="#dddddd" | ',
}
labszoveg["Chembox_új"] = labszoveg.Chembox_new
labszoveg["Gyógyszeresdoboz"] = labszoveg.Drugbox
fej = labszoveg[frame.args['infobox']]
if fej --TNT "infóbox"-ban nem írunk ki alcsoport fejlécet
then return fej..frame.args['szoveg']..'\n'
end
return ''
end
function p.kiir(eredm,infobox)
local hivtomb = { kepkiir, szeles, iupac, boxfej, smiles } -- az egyes rekordtípusokat kiíró függvények. Max. 2 paraméterük lehet + az infóbox.
local str = ""
for i,par in ipairs(eredm) do
if type(par) == "string" -- infóbox alcsoport fejléc
then str = str..fejlec(infobox,par)
elseif type(par[1]) == 'number' -- speciálisan kezelt mező
then fv = hivtomb[par[1]]
if fv ~= nil then str = str..'\n| '..fv(infobox,par[2],par[3])..'\n|-\n' end
else frm = mezo[infobox] -- név+érték mező
if not frm then frm = mezo.Chembox_new end
str = str..frm[1] -- táblázat sor eleje
if #par > 2 then str = str..' rowspan="'..(#par-1)..'"' end
str = str..' | '..frm[2]..par[1]..frm[3] -- sorcímke
for i=2, #par -- értékek kiírása
do str = str..frm[4]..frm[5]..par[i]..frm[6]..'\n|-\n' -- értékek:
end
end
end
return str
end
--[[ munkatábla rendezése és átmásolása az eredménytáblába.
A munkatábla alakja: { { sorsz, címke }, { érték1, érték2, ... } }
Az eredménytábla: { címke, érték1, érték2, ... } rendezve
]]
-- A munkatábla két rekordjának összehasonlítása
local function hasonl(x,y)
return x[1][1] < y[1][1]
end
-- A rendezés és átmásolás
function p.adatcsoport(munka,eredm)
local i
table.sort(munka,hasonl)
if eredm[1] then i = 2 else i = 1 end -- 1 az adatcsoport címkéje, amit a hívó modul tesz eredm-be
for nev,ertek in ipairs(munka)
do eredm[i] = { ertek[1][2] }
for k=2, #ertek
do table.insert(eredm[i],ertek[k])
end
i = i+1
end -- for vége
end -- p.adatcsoport vége
-- Sablon formában adja vissza a sablon paramétereit. Arra jó, hogy a sablon tudja feldolgozni az alsablon paramétereit.
function p.alsablon(frame)
str = ''
for n,v in frame:getParent():argumentPairs()
do str = str..n..'='..v..'\0'
end
return str
end
return p