Questa pagina è semiprotetta. Può essere modificata solo da utenti registrati

Modulo:Formula chimica

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

Modulo che implementa il template {{Formula chimica}}.


--[[
* Modulo che implementa il template Formula chimica.
]]--

require('strict')

local getArgs = require('Modulo:Arguments').getArgs
local mWikidata = require('Modulo:Wikidata')
local p = {}

-- Converte la formula dal formato Wikidata (C₁₀H₁₄) a quello itwiki (C<sub>10</sub>H<sub>14</sub>)
local function convertFormula(text)
	return mw.ustring.gsub(text, '([₀-₉]+)', function(subtext) 
		subtext = mw.ustring.gsub(subtext, '.', function(char)
			return mw.ustring.char(mw.ustring.codepoint(char) - 8272)
		end)
		return string.format('<sub>%s</sub>', subtext)
	end)
end

local function getWikidataCategory(userval, wdval)
	local cat
	if userval then
		if not wdval then
			cat = 'P274 assente su Wikidata'
		elseif wdval == userval or wdval == string.gsub(userval, '</sub><sub>', '') then
			cat = 'P274 uguale su Wikidata'
		else
			cat = 'P274 differente su Wikidata'
		end
	elseif wdval then
		cat = 'P274 letta da Wikidata'
	end
	return cat and string.format('[[Categoria:%s]]', cat) or ''
end

-- Per l'utilizzo da altro modulo
function p._main(args)
	local userval, wdval, cat 

	-- valore utente e wikidata
	userval = args[1]
	wdval = mWikidata._getProperty({ 'P274', from = args.from })

	-- converte il formato Wikidata a quello itwiki
	if wdval then
		wdval = convertFormula(wdval)
	end

	-- categorie di servizio
	if mw.title.getCurrentTitle().namespace == 0 then
		if not userval and not wdval and args.cat then
			cat = string.format('[[Categoria:%s]]', args.cat)
		elseif userval or wdval then
			cat = getWikidataCategory(userval, wdval)
		end
	end

	return (userval or wdval or '') .. (cat or '')
end

-- Funzione per il template {{Formula chimica}}
function p.main(frame)
	return p._main(getArgs(frame, { parentOnly = true }))
end

return p