Modul:Kembox/Chembox Hazards

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

local csopfej = "Veszélyek"

local boxtbl = {   -- a paraméterek sorrendje és infoboxbeli felirata. Az 1-es sorszám fenntartva csopfej-nek.
        ExternalMSDS            = { 2,  "[[Biztonsági adatlap|MSDS]]" },
        EUClass                 = { 3,  "[[67/548/EGK irányelv|EU osztályozás]]" },
        EUIndex                 = { 4,  "EU Index" },
        MainHazards             = { 5,  "Főbb [[Veszélyességi szimbólumok|veszélyek]]" },
        IngestionHazard         = { 6,  "[[Lenyelés]] [[veszély]]e" },
        InhalationHazard        = { 7,  "[[Belégzés]] [[veszély]]e" },
        EyeHazard               = { 8,  "[[Szem]]be kerülés [[veszély]]e" },
        SkinHazard              = { 9,  "[[Bőr-kontaktus]] [[veszély]]e" },
--                                                              -- a 10-es kód fenntartva a tűzgyémántnak (NFPA-''x'')
        RPhrases                = { 11, "[[R mondatok]]" },
        SPhrases                = { 12, "[[S mondatok]]" },
        RSPhrases               = { 13, "[[R/S mondatok]]" },
        FlashPt                 = { 14, "[[Lobbanáspont]]" },
        ["gyúlékonyság"]        = { 15, "[[Gyúlékonyság]]" },
        Autoignition            = { 16, "[[Öngyulladási hőmérséklet|Öngyulladási hőmérséklet]]" },
        ExploLimits             = { 17, "[[Robbanási határ]]" },
        PEL                     = { 18, "[[Megengedhető expozíció határ|PEL]]" },
        LD50                    = { 19, "[[LD50|LD<sub>50</sub>]]" },
        }

local szintbl = {  -- szinonimaszótár. Programon belül Chembox_new neveit használjuk.
        ["KülsőMSDS"]           = 'ExternalMSDS',               -- Chembox_új
        ["MSDS"]                = 'ExternalMSDS',               -- Vegyület_infobox
        ["EUOsztály"]           = 'EUClass',                    -- Chembox_új
        ["EU-osztályozás"]      = 'EUClass',                    -- Vegyület_infobox
        ["EG-Index-szám"]       = 'EUIndex',                    -- Vegyület_infobox
        ["FőbbVeszély"]         = 'MainHazards',                -- Chembox_új
        ["főbb_veszélyek"]      = 'MainHazards',                -- Vegyület_infobox
        ["LenyelésVeszély"]     = 'IngestionHazard',            -- Chembox_új
        ["BelégzésVeszély"]     = 'InhalationHazard',           -- Chembox_új
        ["SzemVeszély"]         = 'EyeHazard',                  -- Chembox_új
        ["BőrVeszély"]          = 'SkinHazard',                 -- Chembox_új
        ["RMondat"]             = 'RPhrases',                   -- Chembox_új
        ["R_mondatok"]          = 'RPhrases',                   -- Vegyület_infobox
        ["SMondat"]             = 'SPhrases',                   -- Chembox_új
        ["S_mondatok"]          = 'SPhrases',                   -- Vegyület_infobox
        ["RSMondat"]            = 'RSPhrases',                  -- Chembox_új
        ["LobbanásPont"]        = 'FlashPt',                    -- Chembox_új
        ["lobbanáspont"]        = 'FlashPt',                    -- Vegyület_infobox
        ["Öngyulladás"]         = 'Autoignition',               -- Chembox_új
        ["öngyulladás_hőmérséklete"] = 'Autoignition',          -- Vegyület_infobox
        ["RobHatár"]            = 'ExploLimits',                -- Chembox_új
        ["robbanási_határ"]     = 'ExploLimits',                -- Vegyület_infobox
        }


local munka = {}    -- { { sorsz, címke }, érték }
local uto   = {}    -- utófeldolgozást igénylő paraméterek (egy eredménysor több paraméterből áll elő)


function egysor(nev,ertek,hivo)
    local utotbl = {    -- automatikusan uto-ba kerülő paraméterek listája. A true nem kell, de enélkül nem lesz asszociatív a tömb.
        ["NFPA-H"]              = true,
        ["NFPA-F"]              = true,
        ["NFPA-R"]              = true,
        ["NFPA-O"]              = true,
        }

    n = string.gsub(nev,' ','_')
    if szintbl[n] then n = szintbl[n] end  -- n a Chembox_new-beli név
    if hivo == 'Vegyület_infobox'
    then    if n == 'H' then n = 'NFPA-H' end
            if n == 'F' then n = 'NFPA-F' end
            if n == 'O' then n = 'NFPA-O' end
    end
    if boxtbl[n] and ertek and #ertek > 0    -- a boxtbl tábla (lásd feljebb) az ismert paramétereket és azok sorrendjét tartalmazza
    then   table.insert(munka,{boxtbl[n],ertek})                    -- az üres paramétereket nem írjuk ki
    end
    if utotbl[n] and ertek and #ertek > 0 then uto[n] = ertek end   -- a második menetben feldolgozandó paraméter: az elsőben nincs vele tennivaló
end


function menet2()
    local Ftbl = {
        ["0"] = 'title="0. gyúlékonysági osztály. Nem éghető. (pl. víz)">0</span>',
        ["1"] = 'title="1. gyúlékonysági osztály. Csak hevítés során gyullad be. Lobbanáspont: 93°C felett.">1</span>',
        ["2"] = 'title="2. gyúlékonysági fokozat. Enyhén hevítve gyúlékony. Lobbanáspont  38°C és 93°C között.">2</span>',
        ["3"] = 'title="3. gyúlékonysági fokozat. Olyan anyag, ami majdnem minden környezeti hőmérsékleten begyulladhat (pl. benzin). Lobbanáspont 38°C  alatt és 23°C felett.">3</span>',
        ["4"] = 'title="4. gyúlékonysági osztály. Normál atmoszférikus nyomáson és hőmérsékleten gyorsan és teljes mértékben elpárolog a levegővel diszperziót képez és gyorsan elég. (pl. propán) Lobbanáspont:  23°C alatt.">4</span>'
        }
    local Htbl = {
        ["0"] = 'title="0. egészségi osztály. Az emberi egészségre  még égéstermékeinek sincs különösebb veszélye. (pl. nátrium-klorid)">0</span>',
        ["1"] = 'title="1. egészségi osztály. Érintése irritációt okozhat, de maradandó sérülést nem. (pl. terpentin)">1</span>',
        ["2"] = 'title="2. egészségi osztály. Intenzív vagy krónikus érintkezés eszméletvesztést vagy maradandó sérülést okozhat. (pl. kloroform)">2</span>',
        ["3"] = 'title="3. egészségi osztály. Már rövid érintkezés is komoly egészségi károsodást okozhat. (pl. klórgáz)">3</span>',
        ["4"] = 'title="4. egészségi osztály. Nagyon rövid érintkezés is halálhoz vagy súlyos és maradandó sérüléshez vezethet. (pl. VX gáz)">4</span>',
        }
    local Rtbl = {
        ["0"] = 'title="0. reaktivitási osztály. Normál esetben stabil, vízzel hevítve sem reagál (pl. folyékony nitrogén).">0</span>',
        ["1"] = 'title="1. reaktivitási osztály. Normál körülmények között stabil, de magasabb hőmérsékleten vagy nyomáson instabillá válhat (pl. kalcium).">1</span>',
        ["2"] = 'title="2. reaktivitási osztály. Magas hőmérsékleten és nyomáson heves kémiai változáson megy keresztül és vízzel robbanóelegyet képezhet (pl. foszfor).">2</span>',
        ["3"] = 'title="3. reaktivitási osztály. Robbanásra vagy robbanásszerű bomlásra képes, de erős kezdeti erő szükséges hozzá, és biztonságok körülmények között kell hevíteni a reakció indításához. Nagyon hevesen reagál vízzel, és ütés hatására felrobbanhat (pl. fluor).">3</span>',
        ["4"] = 'title="4. reaktivitási osztály. Normál hőmérsékleten és nyomáson könnyen robbanhat vagy robbanással járó bomlást szenvedhet (pl. nitroglicerin).">4</span>'
        }
    local Otbl = {
        W = 'title="W. A vízzel szokatlan vagy veszélyes módon reakcióba lép (pl. cézium, nátrium)"><s>W</s></span>',
        OX = 'title="OX – oxidálószer (pl. Kálium-perklorát)">OX</span>',
        COR = 'title="Korrozív – erős sav vagy bázis (pl. kénsav, KOH).">COR</span>',
        BIO = 'title="Biológiai veszély (pl. feketehimlő vírus).">BIO</span>',
        CRYO = 'title="−150 °C alatti anyag.">CRYO</span>',
        ACID = 'title="Maró sav.">ACID</span>',
        ALK = 'title="Maró lúg.">ALK</span>',
        RA = 'title="Radioaktív anyag.">RA</span>',
        }
    local NFPAstilus = 'background:     transparent;'..
                       'height:         2em; '..
                       'text-align:     center; '..
                       'vertical-align: middle; '..
                       'position:       absolute; '..
                       'font-size:      large; '
    local NFPA                  = { 10, "[[NFPA 704]]" }

--  Tűzgyémánt
    if uto["NFPA-H"] or uto["NFPA-F"] or uto["NFPA-R"] or uto["NFPA-O"]
    then   if not uto["NFPA-H"] then uto["NFPA-H"] = '0' end
           if not uto["NFPA-F"] then uto["NFPA-F"] = '0' end
           if not uto["NFPA-R"] then uto["NFPA-R"] = '0' end
           str = '<div style="position: relative; height: 85px; width: 75px;">'..
                 '<div style="position: absolute; height: 75px; width: 75px;">'..
                 '[[Kép:NFPA 704.svg|75px]]</div>\n'
           kod = Ftbl[uto["NFPA-F"]]
           if not kod then kod = '">&nbsp;</span>' end
           str = str..'<div title="Gyúlékonyság" style="'..
                 'width:          75px; '..
                 'top:            10px; '..
                 NFPAstilus..'"><span class="abbr" style="color: black;" '..kod..'</div>\n'
           kod = Htbl[uto["NFPA-H"]]
           if not kod then kod = '">&nbsp;</span>' end
           str = str..'<div title="Egészség" style="'..
                 'width:          37.5px; '..
                 'top:            28px; '..
                 NFPAstilus..'"><span class="abbr" style="color: black;" '..kod..'</div>\n'
           kod = Rtbl[uto["NFPA-R"]]
           if not kod then kod = '">&nbsp;</span>' end
           str = str..'<div title="Reakciókészség" style="'..
                 'width:          37.5px; '..
                 'left:           37.5px; '..
                 'top:            28px; '..
                 NFPAstilus..'"><span class="abbr" style="color: black;" '..kod..'</div>\n'
           if uto["NFPA-O"] and Otbl[string.upper(uto["NFPA-O"])] then kod = Otbl[string.upper(uto["NFPA-O"])] else kod = '">&nbsp;</span>' end
           str = str..'<div title="Egyéb" style="'..
                 'width:          75px; '..
                 'top:            47px; '..
                 NFPAstilus..'"><span class="abbr" style="color: black;" '..kod..'</div>\n'
           str = str..'</div>'
           table.insert(munka,{NFPA,str})
    end
end


-- A munka-beli értékek rendezése és kiírása
local function rendez(hivo)
    local eredm = {}    -- { címke, érték } rendezve
    if next(munka)
    then    -- van megadott paraméter
          local kozos = require("Module:Kembox/kozos")
          eredm[1] = csopfej
          kozos.adatcsoport(munka,eredm)       -- munka rendezése és átmásolása eredm-be
          return kozos.kiir(eredm,hivo)
    end
return ""
end


-- Kívülről is hívható függvények
local p = {}

-- Hívás sablonból
function p.Chembox_Hazards(frame)
    local hivo  = frame.args['infobox']   -- hívó sablon
    local szulo = frame:getParent()       -- a chembox_related sablon által kapott paraméterek

    for nev,ertek in szulo:argumentPairs()
    do  egysor(nev,ertek,hivo)
    end
    menet2()
    return rendez(hivo)
end


-- Hívás modulból
function p.lua(partbl,hivo)
    for nev,ertek in pairs(partbl)
    do    egysor(nev,ertek)
    end
    menet2()
    return rendez(hivo)
end

return p;