Ugrás a tartalomhoz

Modul:Kembox/Chembox Identifiers

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

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

local csopfej = "Kémiai azonosítók"

local boxtbl = {   -- a paraméterek sorrendje és infóboxbeli felirata. Az 1-es sorszám fenntartva csopfejnek
          Abbreviations        = {  2, "Rövidítés" },
--                                                                            -- a 3-as szám fenntartva CASNo-nak (lásd alább)
          PubChem              = {  4, "[[PubChem]]" },                       -- linket tesz az értékre
          ChemSpiderID         = {  5, "[[ChemSpider]]" },                    -- linket tesz az értékre
          EINECS               = {  6, "[[EINECS-szám]]" },                   -- linket tesz az értékre
          EINECSCASNO          = {  7, "[[EINECS CAS-szám]]" },               -- tudnám, mi ez
          DrugBank             = {  8, "[[DrugBank]]" },                      -- linket tesz az értékre
          KEGG                 = {  9, "[[KEGG]]" },                          -- linket tesz az értékre
          MeSHName             = { 10, "[[Medical Subject Headings|MeSH]]" }, -- linket tesz az értékre
          ChEBI                = { 11, "[[ChEBI]]" },                         -- linket tesz az értékre
          RTECS                = { 12, "[[RTECS|RTECS szám]]" },
--                                                                            -- a 13-as szám fenntartva ATCCode-nak (lásd alább)
          INN                  = { 14, "[[nemzetközi szabadnév (gyógyszer)|Gyógyszer szabadnév]]" },
          phhg8                = { 15, "[[VIII. Magyar Gyógyszerkönyv|Gyógyszerkönyv]]i név[[Kategória:VIII. Magyar Gyógyszerkönyvben hivatalos anyagok]]" },
--                                                                            -- a 16-os szám fenntartva SMILES-nak (lásd alább)
--                                                                            -- a 17-es szám fenntartva InChI-nak (lásd alább)
          StdInChIKey          = { 18, "[[InChIKey]]" },
          Beilstein            = { 19, "[[Beilstein adatbázis|Beilstein]]" },
          Gmelin               = { 20, "[[Gmelin]]" },
          UNII                 = { 21, "[[Unique Ingredient Identifier|UNII]]" }, -- linket tesz az értékre
          ["UN-szám"]          = { 22, "[[UN-szám]]" },
          ChEMBL               = { 23, "[[ChEMBL]]" },                         -- linket tesz az értékre
          Jmol                 = { 24, "[[Jmol]] 3D képek" },
          }
local szinonima = {       -- szinonimák. Programon belül a Chembox_new-beli neveket használjuk
          ["Rövidítés"]        = "Abbreviations",    -- Chembox_új
          ChemSpider           = "ChemSpiderID",     -- Vegyület_infobox
          ["EINECS-szám"]      = "EINECS",           -- Vegyület_infobox
          ["MeSHNév"]          = "MeSHName",         -- Chembox_új
          MeSH                 = "MeSHName",         -- Vegyület_infobox
          ["RTECS-szám"]       = "RTECS",            -- Vegyület_infobox
          smiles               = "SMILES",           -- Drugbox
          ["Gmelin_adatbázis"] = "Gmelin",           -- Vegyület_infobox
          ['ATCKód']           = "ATCCODE",          -- Chembox_új
          ['ATCKód_előtag']    = "ATCCode_prefix",   -- Chembox_új
          ['ATC_prefix']       = "ATCCode_prefix",   -- Drugbox
          ['ATCelőtag']        = "ATCCode_prefix",   -- Gyógyszeresdoboz
          ['ATCKód_utótag']    = "ATCCode_suffix",   -- Chembox_új
          ['ATC_suffix']       = "ATCCode_suffix",   -- Drugbox
          ['ATCutótag']        = "ATCCode_suffix",   -- Gyógyszeresdoboz
          ATC_kieg             = "ATC_Supplemental", -- Chembox_új
          ATC_supplemental     = "ATC_Supplemental", -- Drugbox
          ATCkieg              = "ATC_Supplemental", -- Gyógyszeresdoboz
          }

local link = {            -- Chembox_new-azonosító, link előtag
          PubChem        = '[http://pubchem.ncbi.nlm.nih.gov/summary/summary.cgi?cid=',
          ChemSpiderID   = '[http://www.chemspider.com/',
--          EINECS       = '[http://ecb.jrc.it/esis/index.php?GENRE=ECNO&ENTREE=',         -- nem működik
          DrugBank       = '[http://redpoll.pharmacy.ualberta.ca/drugbank/cgi-bin/getCard.cgi?CARD=',
--          KEGG           = '[http://www.genome.ad.jp/dbget-bin/www_bget?cpd:',           -- egyedileg kezeljuk
          MeSHName       = '[http://www.nlm.nih.gov/cgi/mesh/2007/MB_cgi?mode=&term=',
          ChEBI          = '[http://www.ebi.ac.uk/chebi/searchId.do?chebiId=CHEBI:',
          UNII           = '[http://fdasis.nlm.nih.gov/srs/srsdirect.jsp?regno=',
          ChEMBL         = '[https://www.ebi.ac.uk/chembl/compound/inspect/CHEMBL',
          }
local lnkspan = '<span class="reflink plainlinks">'

-- Függvény egy CAS-kód feldolgozására
local function cas(str,ertek,link) -- str=eredmény, ertek: a sablonból kapott paraméter értéke, link: bool (kell-e linket tenni rá)
    if ertek and #ertek > 0
    then    if #str > 0 then str = str..', ' end
        if link
        then  str = str..lnkspan..'[http://www.emolecules.com/cgi-bin/search?t=ss&q='..ertek..'&c=1&v= '..ertek..']</span>'
        else  str = str..ertek
        end
    end
    return str
end

-- Függvény egy kétrészes ATC-kód feldolgozására
local function atc2(str,ertek1,ertek2)
    if ertek1 and ertek2 and #ertek1 == 3 and #ertek2 == 4
    then    if #str > 0 then str = str..', ' end
            str = str..'[[ATC_'..ertek1..'|'..ertek1..']]'      -- az első három karakter Wiki-link
            str = str..lnkspan..'[http://www.whocc.no/atc_ddd_index/?code='..ertek1..ertek2..' '..ertek2..']</span>'
    end
    return  str
end

-- Függvény egyben adott ATC-kód feldolgozására. Két részre vágjuk.
local function atc1(str,ertek)
    if ertek
    then    return atc2(str,string.sub(ertek,1,3),string.sub(ertek,4,7))
    else    return str
    end
end

-- Vesszővel elválasztott listához hozzáírunk még egy tagot
local function strcat(str,ertek)
    if ertek
    then    if #str > 0 then str = str..', ' end
            return str..ertek
    else    return str
    end
end


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

function egysor(nev,ertek)
    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.
          ATCCODE             = true,
          ATCCode_prefix      = true,
          ATCCode_suffix      = true,
          ATC_Supplemental    = true,
          }
    local lenyit = { -- lenyitható mezők           
          SMILES              = { { 16, 5}, { "[[SMILES]]" } },
          InChI               = { { 17, 5}, { "[[International Chemical Identifier|InChI]]" } },
          }

    n = string.gsub(nev,' ','_')
    if szinonima[n] then    n = szinonima[n] end     --  n a paraméter Chembox_new-neve
    if boxtbl[n]    -- a boxtbl tábla (lásd feljebb) az ismert paramétereket és azok sorrendjét tartalmazza
    then    if link[n] and ertek and #ertek > 0
            then  str = lnkspan..link[n]..ertek..' '..ertek..']</span>'
            else  if n == 'KEGG'
                  then  if string.sub(ertek,1,1) == 'D'
                        then  str = '?dr:'
                        elseif string.sub(ertek,1,1) == 'C'
                        then str = '?cpd:' 
                        else str = ''
                        end
                        if #str > 0
                        then str = lnkspan..'[http://www.genome.jp/dbget-bin/www_bget'..str..ertek..' '..ertek..']</span>'
                        end
                  else  str = ertek
                  end
            end
            if str and #str > 0 then table.insert(munka,{boxtbl[n],str}) end    -- az üres paramétereket nem írjuk ki
    end
    if lenyit[n] and ertek and #ertek > 0
    then    lenyit[n][2][2] = ertek
            table.insert(munka,lenyit[n])
    elseif utotbl[n] and ertek and #ertek > 0 then uto[n] = ertek -- a második menetben feldolgozandó paraméter: az elsőben nincs vele tennivaló
    end
end


local function menet2(hivo,partbl)
    local castomb = {      -- CAS szinonima, és kell-e rá link
          { "CASNo",            true },         -- Chembox_new
          { "CAS",              true },         -- Chembox_új
          { "CAS-szám",         true },         -- Vegyület_infobox
          { "CAS_number",       true },         -- Drugbox
          { "CASszám",          true },         -- Gyógyszeresdoboz
          { "CASNos",           false },        -- Chembox_new
          { "CAS_supplemental", false },        -- Drugbox
          { "CASkieg",          false },        -- Gyógyszeresdoboz
          { "CASOther",         false },        -- Chembox_new
    }
    local CASNo   = {  3, "[[CAS-szám]]" }
    local ATCCode = { 13, "[[Anatómiai, gyógyászati és kémiai osztályozási rendszer|ATC kód]]" }

--  A CAS-számokat speciálisan kezeljük
    str = ""
    for i=1,#castomb
    do    str = cas(str,partbl[castomb[i][1]],castomb[i][2])
    end
    if #str > 0 then table.insert(munka,{CASNo,str}) end

--  Az ATC-kódokat is külön kezeljük
    str = ""
    str = atc1(str,uto.ATCCODE)
    str = atc2(str,uto.ATCCode_prefix,uto.ATCCode_suffix)
    str = strcat(str,uto.ATC_Supplemental)
    if #str > 0 then table.insert(munka,{ATCCode,str}) end
end


local eredm = {}    -- { címke, érték } rendezve

-- A munka-beli értékek rendezése és kiírása
local function rendez(hivo)
    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_Identifiers(frame)
    local hivo  = frame.args['infobox']   -- hívó sablon
    local szulo = frame:getParent()       -- a chembox_new sablon által kapott paraméterek
    for nev,ertek in szulo:argumentPairs()
    do  egysor(nev,ertek)
    end
    menet2(hivo,szulo.args)
    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(hivo,partbl)
    return rendez(hivo)
end

return p;