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