{{i}} Документація модуля[перегляд] [редагувати] [історія] [очистити кеш]

Модуль використовується для реалізації функціональності шаблону {{Нуклід}}.

Використання ред.

  • {{#invoke: ChemElement|nuclide_ref| гідроген | 2}} — 2H
  • {{#invoke: ChemElement|nuclide_ref|гідроген||3}} — 31H
  • {{#invoke: ChemElement|nuclide_ref|гідроген||3|посилання= так }} — 31H
  • {{#invoke: ChemElement|nuclide_ref|водень||3|посилання = ні }} — 31H
  • {{#invoke: ChemElement|nuclide_ref|Уран||238|посилання = ні }} — 23892U
local m = {}

m.names_num = {
    ["h"]   = 1,   ["hydrogen"]  = 1,   ["водень"]    = 1,   ["гідроген"] = 1, 
    ["d"]   = 1,   ["deuterium"] = 1,   ["дейтерій"]  = 1, 
    ["t"]   = 1,   ["tritium"]   = 1,   ["тритій"]    = 1,
    ["he"]  = 2,   ["helium"]    = 2,   ["гелій"]     = 2,
    ["li"]  = 3,   ["lithium"]   = 3,   ["літій"]     = 3,
    ["be"]  = 4,   ["beryllium"] = 4,   ["берилій"]   = 4,
    ["b"]   = 5,   ["boron"]     = 5,   ["бор"]       = 5,
    ["c"]   = 6,   ["carbon"]    = 6,   ["вуглець"]   = 6,   ["карбон"] = 6,
    ["n"]   = 7,   ["nitrogen"]  = 7,   ["азот"]      = 7,   ["нітроген"] = 7,
    ["o"]   = 8,   ["oxygen"]    = 8,   ["кисень"]    = 8,   ["оксиген"] = 8,
    ["f"]   = 9,   ["fluorine"]  = 9,   ["фтор"]      = 9,   ["флуор"] = 9,
    ["ne"]  = 10,  ["neon"]      = 10,  ["неон"]      = 10,
    ["na"]  = 11,  ["sodium"]    = 11,  ["натрій"]    = 11,
    ["mg"]  = 12,  ["magnesium"] = 12,  ["магній"]    = 12,
    ["al"]  = 13,  ["aluminium"] = 13,  ["алюміній"]  = 13,
    ["si"]  = 14,  ["silicon"]   = 14,  ["кремній"]   = 14,  ["силіцій"] = 14,
    ["p"]   = 15,  ["phosphorus"]= 15,  ["фосфор"]    = 15,
    ["s"]   = 16,  ["sulfur"]    = 16,  ["сірка"]     = 16,  ["сульфур"] = 16,
    ["cl"]  = 17,  ["chlorine"]  = 17,  ["хлор"]      = 17,
    ["ar"]  = 18,  ["argon"]     = 18,  ["аргон"]     = 18,
    ["k"]   = 19,  ["potassium"] = 19,  ["калій"]     = 19,
    ["ca"]  = 20,  ["calcium"]   = 20,  ["кальцій"]   = 20,
    ["sc"]  = 21,  ["scandium"]  = 21,  ["скандій"]   = 21,
    ["ti"]  = 22,  ["titanium"]  = 22,  ["титан"]     = 22,
    ["v"]   = 23,  ["vanadium"]  = 23,  ["ванадій"]   = 23,
    ["cr"]  = 24,  ["chromium"]  = 24,  ["хром"]      = 24,
    ["mn"]  = 25,  ["manganese"] = 25,  ["марганець"] = 25,  ["манган"] = 25,
    ["fe"]  = 26,  ["iron"]      = 26,  ["залізо"]    = 26,  ["ферум"] = 26,
    ["co"]  = 27,  ["cobalt"]    = 27,  ["кобальт"]   = 27,
    ["ni"]  = 28,  ["nickel"]    = 28,  ["нікель"]    = 28,
    ["cu"]  = 29,  ["copper"]    = 29,  ["мідь"]      = 29,  ["купрум"] = 29,
    ["zn"]  = 30,  ["zinc"]      = 30,  ["цинк"]      = 30,
    ["ga"]  = 31,  ["gallium"]   = 31,  ["галій"]     = 31,
    ["ge"]  = 32,  ["germanium"] = 32,  ["германій"]  = 32,
    ["as"]  = 33,  ["arsenic"]   = 33,  ["миш'як"]    = 33,  ["арсен"] = 33,
    ["se"]  = 34,  ["selenium"]  = 34,  ["селен"]     = 34,
    ["br"]  = 35,  ["bromine"]   = 35,  ["бром"]      = 35,
    ["kr"]  = 36,  ["krypton"]   = 36,  ["криптон"]   = 36,
    ["rb"]  = 37,  ["rubidium"]  = 37,  ["рубідій"]   = 37,
    ["sr"]  = 38,  ["strontium"] = 38,  ["стронцій"]  = 38,
    ["y"]   = 39,  ["yttrium"]   = 39,  ["ітрій"]     = 39,
    ["zr"]  = 40,  ["zirconium"] = 40,  ["цирконій"]  = 40,
    ["nb"]  = 41,  ["niobium"]   = 41,  ["ніобій"]    = 41,
    ["mo"]  = 42,  ["molybdenum"]= 42,  ["молібден"]  = 42,
    ["tc"]  = 43,  ["technetium"]= 43,  ["технецій"]  = 43,
    ["ru"]  = 44,  ["ruthenium"] = 44,  ["рутеній"]   = 44,
    ["rh"]  = 45,  ["rhodium"]   = 45,  ["родій"]     = 45,
    ["pd"]  = 46,  ["palladium"] = 46,  ["паладій"]   = 46,
    ["ag"]  = 47,  ["silver"]    = 47,  ["срібло"]    = 47,  ["аргентум"] = 47,
    ["cd"]  = 48,  ["cadmium"]   = 48,  ["кадмій"]    = 48,
    ["in"]  = 49,  ["indium"]    = 49,  ["індій"]     = 49,
    ["sn"]  = 50,  ["tin"]       = 50,  ["олово"]     = 50,  ["станум"] = 50,
    ["sb"]  = 51,  ["antimony"]  = 51,  ["сурма"]     = 51,  ["стибій"] = 51,
    ["te"]  = 52,  ["tellurium"] = 52,  ["телур"]     = 52,
    ["i"]   = 53,  ["iodine"]    = 53,  ["йод"]       = 53,
    ["xe"]  = 54,  ["xenon"]     = 54,  ["ксенон"]    = 54,
    ["cs"]  = 55,  ["caesium"]   = 55,  ["цезій"]     = 55,
    ["ba"]  = 56,  ["barium"]    = 56,  ["барій"]     = 56,
    ["la"]  = 57,  ["lanthanum"] = 57,  ["лантан"]    = 57,
    ["ce"]  = 58,  ["cerium"]    = 58,  ["церій"]     = 58,
    ["pr"]  = 59,  ["praseodymium"]= 59,["празеодим"] = 59,
    ["nd"]  = 60,  ["neodymium"] = 60,  ["неодим"]    = 60,
    ["pm"]  = 61,  ["promethium"]= 61,  ["прометій"]  = 61,
    ["sm"]  = 62,  ["samarium"]  = 62,  ["самарій"]   = 62,
    ["eu"]  = 63,  ["europium"]  = 63,  ["європій"]   = 63,
    ["gd"]  = 64,  ["gadolinium"]= 64,  ["гадоліній"] = 64,
    ["tb"]  = 65,  ["terbium"]   = 65,  ["тербій"]    = 65,
    ["dy"]  = 66,  ["dysprosium"]= 66,  ["диспрозій"] = 66,
    ["ho"]  = 67,  ["holmium"]   = 67,  ["гольмій"]   = 67,
    ["er"]  = 68,  ["erbium"]    = 68,  ["ербій"]     = 68,
    ["tm"]  = 69,  ["thulium"]   = 69,  ["тулій"]     = 69,
    ["yb"]  = 70,  ["ytterbium"] = 70,  ["ітербій"]   = 70,
    ["lu"]  = 71,  ["lutetium"]  = 71,  ["лютецій"]   = 71,
    ["hf"]  = 72,  ["hafnium"]   = 72,  ["гафній"]    = 72,
    ["ta"]  = 73,  ["tantalum"]  = 73,  ["тантал"]    = 73,
    ["w"]   = 74,  ["tungsten"]  = 74,  ["вольфрам"]  = 74,
    ["re"]  = 75,  ["rhenium"]   = 75,  ["реній"]     = 75,
    ["os"]  = 76,  ["osmium"]    = 76,  ["осмій"]     = 76,
    ["ir"]  = 77,  ["iridium"]   = 77,  ["іридій"]    = 77,
    ["pt"]  = 78,  ["platinum"]  = 78,  ["платина"]   = 78,
    ["au"]  = 79,  ["gold"]      = 79,  ["золото"]    = 79,  ["аурум"] = 79,
    ["hg"]  = 80,  ["mercury"]   = 80,  ["ртуть"]     = 80,  ["меркурій"] = 80, ["гідраргірум"] = 80,
    ["tl"]  = 81,  ["thallium"]  = 81,  ["талій"]     = 81,
    ["pb"]  = 82,  ["lead"]      = 82,  ["свинець"]   = 82,  ["плюмбум"] = 82,
    ["bi"]  = 83,  ["bismuth"]   = 83,  ["вісмут"]    = 83,  ["бісмут"] = 83,
    ["po"]  = 84,  ["polonium"]  = 84,  ["полоній"]   = 84,
    ["at"]  = 85,  ["astatine"]  = 85,  ["астат"]     = 85,
    ["rn"]  = 86,  ["radon"]     = 86,  ["радон"]     = 86,
    ["fr"]  = 87,  ["francium"]  = 87,  ["францій"]   = 87,
    ["ra"]  = 88,  ["radium"]    = 88,  ["радій"]     = 88,
    ["ac"]  = 89,  ["actinium"]  = 89,  ["актиній"]   = 89,
    ["th"]  = 90,  ["thorium"]   = 90,  ["торій"]     = 90,
    ["pa"]  = 91,  ["protactinium"]= 91,["протактиній"] = 91,
    ["u"]   = 92,  ["uranium"]   = 92,  ["уран"]      = 92,
    ["np"]  = 93,  ["neptunium"] = 93,  ["нептуній"]  = 93,
    ["pu"]  = 94,  ["plutonium"] = 94,  ["плутоній"]  = 94,
    ["am"]  = 95,  ["americium"] = 95,  ["америцій"]  = 95,
    ["cm"]  = 96,  ["curium"]    = 96,  ["кюрій"]     = 96,
    ["bk"]  = 97,  ["berkelium"] = 97,  ["берклій"]   = 97,
    ["cf"]  = 98,  ["californium"]= 98, ["каліфорній"]= 98,
    ["es"]  = 99,  ["einsteinium"]= 99, ["ейнштейній"]= 99,
    ["fm"] = 100,  ["fermium"]   = 100, ["фермій"]    = 100,
    ["md"] = 101,  ["mendelevium"]= 101,["менделєвій"]= 101,
    ["no"] = 102,  ["nobelium"]  = 102, ["нобелій"]   = 102,
    ["lr"] = 103,  ["lawrencium"]= 103, ["лоуренсій"] = 103,
    ["rf"] = 104,  ["rutherfordium"] = 104, ["резерфордій"] = 104,
    ["db"] = 105,  ["dubnium"]   = 105, ["дубній"]    = 105,
    ["sg"] = 106,  ["seaborgium"]= 106, ["сіборгій"]  = 106,
    ["bh"] = 107,  ["bohrium"]   = 107, ["борій"]     = 107,
    ["hs"] = 108,  ["hassium"]   = 108, ["гасій"]     = 108,
    ["mt"] = 109,  ["meitnerium"]= 109, ["мейтнерій"] = 109,
    ["ds"] = 110,  ["darmstadtium"] = 110, ["дармштадтій"] = 110,
    ["rg"] = 111,  ["roentgenium"] = 111, ["рентгеній"] = 111,
    ["cn"] = 112,  ["copernicium"] = 112, ["коперницій"] = 112,
    ["uut"] = 113, ["ununtrium"] = 113, ["унунтрій"] = 113,
    ["fl"]  = 114, ["flerovium"] = 114, ["флеровій"] = 114,
    ["uup"] = 115, ["ununpentium"] = 115, ["унунпентій"] = 115,
    ["lv"]  = 116, ["livermorium"] = 116, ["ліверморій"] = 116,
    ["uus"] = 117, ["ununseptium"] = 117, ["унунсептій"] = 117,
    ["uuo"] = 118, ["ununoctium"] = 118, ["унуноктій"] = 118,
    ["uue"] = 119, ["ununennium"] = 119, ["унуненній"] = 119
}

m.symbols = {
    "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", 
    "Ar", "K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn", "Ga", "Ge", "As", 
    "Se", "Br", "Kr", "Rb", "Sr", "Y", "Zr", "Nb", "Mo", "Tc", "Ru", "Rh", "Pd", "Ag", "Cd", "In", 
    "Sn", "Sb", "Te", "I", "Xe", "Cs", "Ba", "La", "Ce", "Pr", "Nd", "Pm", "Sm", "Eu", "Gd", "Tb", 
    "Dy", "Ho", "Er", "Tm", "Yb", "Lu", "Hf", "Ta", "W", "Re", "Os", "Ir", "Pt", "Au", "Hg", "Tl", 
    "Pb", "Bi", "Po", "At", "Rn", "Fr", "Ra", "Ac", "Th", "Pa", "U", "Np", "Pu", "Am", "Cm", "Bk", 
    "Cf", "Es", "Fm", "Md", "No", "Lr", "Rf", "Db", "Sg", "Bh", "Hs", "Mt", "Ds", "Rg", "Cn", "Uut", 
    "Fl", "Uup", "Lv", "Uus", "Uuo", "Uue", "Ubn", "Ubu", "Ubb", "Ubt", "Ubq", "Ubp", "Ubh"
}

m.wikinames = {
    "Водень", "Гелій",  "Літій", "Берилій", "Бор", "Вуглець", "Азот", "Кисень", "Фтор", "Неон",
    "Натрій", "Магній", "Алюміній", "Кремній", "Фосфор", "Сірка", "Хлор", "Аргон",
    "Калій", "Кальцій", "Скандій", "Титан", "Ванадій", "Хром", "Манган", "Залізо",
    "Кобальт", "Нікель", "Мідь", "Цинк", "Ґалій", "Ґерманій", "Арсен", "Селен", "Бром",
    "Криптон", "Рубідій", "Стронцій", "Ітрій", "Цирконій", "Ніобій", "Молібден",
    "Технецій", "Рутеній", "Родій", "Паладій", "Срібло", "Кадмій", "Індій", "Олово",
    "Стибій", "Телур", "Йод", "Ксенон", "Цезій", "Барій", "Лантан", "Церій", "Празеодим",
    "Неодим", "Прометій", "Самарій", "Європій", "Гадоліній", "Тербій", "Диспрозій", "Гольмій",
    "Ербій", "Тулій", "Ітербій", "Лютецій", "Гафній", "Тантал", "Вольфрам", "Реній",
    "Осмій", "Іридій", "Платина", "Золото", "Ртуть", "Талій", "Свинець", "Бісмут", "Полоній",
    "Астат", "Радон", "Францій", "Радій", "Актиній", "Торій", "Протактиній", "Уран",
    "Нептуній", "Плутоній", "Америцій", "Кюрій", "Берклій", "Каліфорній", "Ейнштейній",
    "Фермій", "Менделєвій", "Нобелій", "Лоуренсій", "Резерфордій", "Дубній", "Сіборгій",
    "Борій", "Гасій", "Мейтнерій", "Дармштадтій", "Рентгеній", "Коперницій", "Унунтрій",
    "Флеровій", "Унунпентій", "Ліверморій", "Унунсептій", "Унуноктій", "Унуненній",
    "Унбінілій", "Унбіуній", "Унбібій", "Унбітрій", "Унбіквадій", "Унбіпентій", "Унбігексій"
}

function m._error(message)
	return '<strong class="error">' .. message .. '</strong>'
end

function m.number(frame)
	-- отримуємо назву елемента з параметрів без пробілів і в нижньому регістрі
	local name = mw.ustring.lower(frame.args[1]:gsub("%s+", ""))
	
	-- повертаємо порядковий номер елемента	
	local num = m.names_num[name]
	
	if not num then
		return m._error('Некоректний елемент: ' .. name)
	end
	
	return num
end

function m.symbol(frame)
	local num = tonumber(frame.args[1])
	
	if not num then
		return m._error('Некоректний номер елемента: ' .. frame.args[1])	
	end
	
	return m.symbols[num]
end

function m.symbol_by_name(frame)
	local name = mw.ustring.lower(frame.args[1]:gsub("%s+", ""))
	
	local num = m.names_num[name]
	
	if not num then
		return m._error('Некоректний елемент: ' .. frame.args[1])	
	end
	
	return m.symbols[num]
end

function m.wikiname(frame)
    local num = tonumber(frame.args[1])
	
	if not num then
		return m._error('Некоректний номер елемента: ' .. frame.args[1])	
	end	
	
	return m.wikinames[num]
end	

function m._name(a, z, symbol, anti)
	if not a and not z then
		return symbol
	end
	
	local res = '<span style="white-space: nowrap;"><span style="display:-moz-inline-box;-moz-box-orient:vertical;display:inline-block;vertical-align:bottom;min-height:1em;font-size:80%;line-height:1;margin-bottom:-0.1em;overflow:visible;text-align:right">'
	
	local resa = ''
	if a then
		resa = '<span style="display:block;min-height:1em;margin-top:-1.1em;line-height:1;background:transparent;overflow:visible">' .. tostring(a) .. '</span>'
	end
	
	local resz = ''
	if z then
		resz = '<span style="display:block;min-height:1em;background:transparent;line-height:1;overflow:visible">' .. tostring(z) .. '</span>'
	end
	
	local sym = (anti and anti == "так") and ('<span style="text-decoration:overline;">' .. symbol .. '</span>') or symbol
	
	return res .. resa .. resz .. '</span>' .. sym .. '</span>'
end	

function m.nuclide_ref(frame)
	-- отримуємо назву елемента з параметрів без пробілів і в нижньому регістрі
	local name = mw.ustring.lower(frame.args[1]:gsub("%s+", ""))
	
	-- отримуємо порядковий номер елемента	
	local num = m.names_num[name]
	
	-- перевіримо, чи знайдено такий елемент
	if not num then
		return m._error('Некоректний елемент: ' .. name)
	end
	
	-- отримаємо масове число
	local a = frame.args[2]
	
	-- це антиелемент?
	local anti = frame.args["анти"]
		
	-- формуємо кінцеве позначення
	local res = nil
	
	-- в залежності від того, чи є другий аргумент, чи немає,
	-- формуємо різні позначення для нуклідів
	if not a or a == "" then
		a = frame.args[3]
		res = m._name(a, num, m.symbols[num], anti)
	else
		res = m._name(a, nil, m.symbols[num], anti)
	end
	
	-- чи потрібне посилання?
	local use_link = frame.args["посилання"]
	
	-- повертаємо позначення з посиланням
	if use_link and use_link == "так" then
		return '[[' .. m.wikinames[num] .. "-" .. tostring(a) .. '|' .. res .. ']]'
	end
	
	-- повертаємо тільки позначення
	return res	
end

return m