Module:Chemie

Uit Wiki Raamsdonks Historie

Documentatie voor deze module kan aangemaakt worden op de volgende pagina: Module:Chemie/doc

local elements = {
	{protons=  1, symbol="H",  name="waterstof"},
	{protons=  2, symbol="He", name="helium"},
	{protons=  3, symbol="Li", name="lithium"},
	{protons=  4, symbol="Be", name="beryllium"},
	{protons=  5, symbol="B",  name="boor"},
	{protons=  6, symbol="C",  name="koolstof"},
	{protons=  7, symbol="N",  name="stikstof"},
	{protons=  8, symbol="O",  name="zuurstof"},
	{protons=  9, symbol="F",  name="fluor"},
	{protons= 10, symbol="Ne", name="neon"},
	{protons= 11, symbol="Na", name="natrium"},
	{protons= 12, symbol="Mg", name="magnesium"},
	{protons= 13, symbol="Al", name="aluminium"},
	{protons= 14, symbol="Si", name="silicium"},
	{protons= 15, symbol="P",  name="fosfor"},
	{protons= 16, symbol="S",  name="zwavel"},
	{protons= 17, symbol="Cl", name="chloor"},
	{protons= 18, symbol="Ar", name="argon"},
	{protons= 19, symbol="K",  name="kalium"},
	{protons= 20, symbol="Ca", name="calcium"},
	{protons= 21, symbol="Sc", name="scandium"},
	{protons= 22, symbol="Ti", name="titanium"},
	{protons= 23, symbol="V",  name="vanadium"},
	{protons= 24, symbol="Cr", name="chroom"},
	{protons= 25, symbol="Mn", name="mangaan"},
	{protons= 26, symbol="Fe", name="ijzer"},
	{protons= 27, symbol="Co", name="kobalt"},
	{protons= 28, symbol="Ni", name="nikkel"},
	{protons= 29, symbol="Cu", name="koper"},
	{protons= 30, symbol="Zn", name="zink"},
	{protons= 31, symbol="Ga", name="gallium"},
	{protons= 32, symbol="Ge", name="germanium"},
	{protons= 33, symbol="As", name="arseen"},
	{protons= 34, symbol="Se", name="seleen"},
	{protons= 35, symbol="Br", name="broom"},
	{protons= 36, symbol="Kr", name="krypton"},
	{protons= 37, symbol="Rb", name="rubidium"},
	{protons= 38, symbol="Sr", name="strontium"},
	{protons= 39, symbol="Y",  name="yttrium"},
	{protons= 40, symbol="Zr", name="zirkonium"},
	{protons= 41, symbol="Nb", name="niobium"},
	{protons= 42, symbol="Mo", name="molybdeen"},
	{protons= 43, symbol="Tc", name="technetium"},
	{protons= 44, symbol="Ru", name="ruthenium"},
	{protons= 45, symbol="Rh", name="rodium"},
	{protons= 46, symbol="Pd", name="palladium"},
	{protons= 47, symbol="Ag", name="zilver"},
	{protons= 48, symbol="Cd", name="cadmium"},
	{protons= 49, symbol="In", name="indium"},
	{protons= 50, symbol="Sn", name="tin"},
	{protons= 51, symbol="Sb", name="antimoon"},
	{protons= 52, symbol="Te", name="telluur"},
	{protons= 53, symbol="I",  name="jodium"},
	{protons= 54, symbol="Xe", name="xenon"},
	{protons= 55, symbol="Cs", name="cesium"},
	{protons= 56, symbol="Ba", name="barium"},
	{protons= 57, symbol="La", name="lanthaan"},
	{protons= 58, symbol="Ce", name="cerium"},
	{protons= 59, symbol="Pr", name="praseodymium"},
	{protons= 60, symbol="Nd", name="neodymium"},
	{protons= 61, symbol="Pm", name="promethium"},
	{protons= 62, symbol="Sm", name="samarium"},
	{protons= 63, symbol="Eu", name="europium"},
	{protons= 64, symbol="Gd", name="gadolinium"},
	{protons= 65, symbol="Tb", name="terbium"},
	{protons= 66, symbol="Dy", name="dysprosium"},
	{protons= 67, symbol="Ho", name="holmium"},
	{protons= 68, symbol="Er", name="erbium"},
	{protons= 69, symbol="Tm", name="thulium"},
	{protons= 70, symbol="Yb", name="ytterbium"},
	{protons= 71, symbol="Lu", name="lutetium"},
	{protons= 72, symbol="Hf", name="hafnium"},
	{protons= 73, symbol="Ta", name="tantaal"},
	{protons= 74, symbol="W",  name="wolfraam"},
	{protons= 75, symbol="Re", name="renium"},
	{protons= 76, symbol="Os", name="osmium"},
	{protons= 77, symbol="Ir", name="iridium"},
	{protons= 78, symbol="Pt", name="platina"},
	{protons= 79, symbol="Au", name="goud"},
	{protons= 80, symbol="Hg", name="kwik"},
	{protons= 81, symbol="Tl", name="thallium"},
	{protons= 82, symbol="Pb", name="lood"},
	{protons= 83, symbol="Bi", name="bismut"},
	{protons= 84, symbol="Po", name="polonium"},
	{protons= 85, symbol="At", name="astaat"},
	{protons= 86, symbol="Rn", name="radon"},
	{protons= 87, symbol="Fr", name="francium"},
	{protons= 88, symbol="Ra", name="radium"},
	{protons= 89, symbol="Ac", name="actinium"},
	{protons= 90, symbol="Th", name="thorium"},
	{protons= 91, symbol="Pa", name="protactinium"},
	{protons= 92, symbol="U",  name="uranium"},
	{protons= 93, symbol="Np", name="neptunium"},
	{protons= 94, symbol="Pu", name="plutonium"},
	{protons= 95, symbol="Am", name="americium"},
	{protons= 96, symbol="Cm", name="curium"},
	{protons= 97, symbol="Bk", name="berkelium"},
	{protons= 98, symbol="Cf", name="californium"},
	{protons= 99, symbol="Es", name="einsteinium"},
	{protons=100, symbol="Fm", name="fermium"},
	{protons=101, symbol="Md", name="mendelevium"},
	{protons=102, symbol="No", name="nobelium"},
	{protons=103, symbol="Lr", name="lawrencium"},
	{protons=104, symbol="Rf", name="rutherfordium"},
	{protons=105, symbol="Db", name="dubnium"},
	{protons=106, symbol="Sg", name="seaborgium"},
	{protons=107, symbol="Bh", name="bohrium"},
	{protons=108, symbol="Hs", name="hassium"},
	{protons=109, symbol="Mt", name="meitnerium"},
	{protons=110, symbol="Ds", name="darmstadtium"},
	{protons=111, symbol="Rg", name="röntgenium"},
	{protons=112, symbol="Cn", name="copernicium"},
	{protons=113, symbol="Nh", name="nihonium"},
	{protons=114, symbol="Fl", name="flerovium"},
	{protons=115, symbol="Mc", name="moscovium"},
	{protons=116, symbol="Lv", name="livermorium"},
	{protons=117, symbol="Ts", name="tennessine"},
	{protons=118, symbol="Og", name="oganesson"},
}
local MAX_ELEMENT_PROTONS = 118

-- allow element lookup by symbol
for i,v in ipairs(elements) do
	elements[v.symbol] = v
end

local function symChar(n, i)
  i = string.sub(n, i, i) + 1
  return string.sub("nubtqphsoe", i, i)
end

local p = {}

-- Lua internal functions with English names

function p.elementSymbol(protons)
	if protons == 0 then
		return "n"
	elseif protons > 0 and protons <= MAX_ELEMENT_PROTONS then
		return elements[protons].symbol
	elseif protons < 0 or protons > 999 then
		return nil
	end
	-- systematic symbol
	local m = tostring(protons)
	return string.upper(symChar(m, 1)) .. symChar(m, 2) .. symChar(m, 3)
end

-- arg is atomic number or symbol
function p.elementName(arg)
	local protons = tonumber(arg)
	local e
	if protons == nil then	-- symbol
		e = elements[arg]
	else
		e = elements[protons]
	end
	return e.name
end

function p.atomNumber(symbol)
	return elements[symbol].protons
end

-- wiki functions with Dutch names

-- arg is atomic number
function p.elementSymbool(frame)
	local args = frame:getParent().args
	return p.elementSymbol(tonumber(args[1]))
end

-- arg is atomic number or symbol
function p.elementNaam(frame)
	local args = frame:getParent().args
	local arg = args[1]
	local num = tonumber(arg)
	if num ~= nil then
		arg = num
	end
	return p.elementName(arg)
end

-- arg is symbol
function p.atoomNummer(frame)
	local args = frame:getParent().args
	return p.atomNumber(args[1])
end

return p