Módulo:Wikidades/Units

Na Galipedia, a Wikipedia en galego.
Indicacións de uso do módulo

Aínda non se redactaron as instrucións sobre como usar este módulo.
Engadir a explicación sobre o seu uso.

Os editores poden probar cambios no mesmo en Módulo:Wikidades/Units/probas.
Por favor, engade as categorías na subpáxina de documentación e os interwikis no Wikidata. Ver as subpáxinas deste módulo.
-- Version copiada de cawiki 20231112
-- sintaxe:
--	Qxxx = { -- label de Wikidata para a referencia
--		label = "label a correxir",
--		plural = "plural a correxir",
--		ucode = "código a engadir",
--		},

local wikidata_units = {
    Q531 = { -- ano luz
		plural = "anos luz",
		},
	Q573 = { -- día
		ucode = "días",
		},
	Q1811 = { -- unidade astronómica
		ucode = "UA",
		},	
	Q5151 = { -- mes
		plural = "meses",
		},
	Q11229 = { -- porcentaxe
		plural = "porcentaxe",
		},
	Q25224 = { -- libra esterlina
		ucode = "£",
		},
	Q25267 = { -- grao Celsius
		plural = "graos Celsius",
		ucode = "°C",
	},
	Q42289 = { -- grao Fahrenheit
		plural = "graos Fahrenheit",
		ucode = "°F",
	},
    Q55627 = { -- anos de vida axustados por discapacidade 
		plural = "anos de vida axustados por discapacidade",
		ucode = "AVAD",
		},
	Q83327 = { -- electrón-voltio
		plural = "electróns-voltio",
		},
	Q93318 = { -- milla náutica
		ucode = "mn",
		},
	Q155009 = { -- Reichsmark
		ucode = "ℛℳ",
		},
	Q209426 = { -- minuto de arco
		label = "minuto",
		},
	Q483261 = { -- unidade de masa atómica
		ucode = "uma",
		},
	Q550207 = { -- dólar Geary-Khamis
		plural = "dólares Geary-Khamis",
		ucode = "$",
		},
	Q743895 = { -- pulsacións por minuto
		plural = "pulsacións por minuto",
		ucode = "ppm",
		},
	Q751310 = { -- poiseuille
		ucode = "PI",
		},
	Q794261 = { -- metro cúbico por segundo
		ucode = "m³/s",
		},
	Q829073 = { -- segundo de arco
		label = "segundo",
		ucode = "″", -- WD con comillas rectas
		},
	Q1463969 = { -- watt por metro-kelvin
		ucode = "W/(m·K)",
		},
	Q2080811 = { -- fracción volumétrica
		label = "porcentaxe en volume",
		plural = "porcentaxe en volume",
		ucode = "%",
		},
	Q3085309 = { -- joule por quilogramo-kelvin
		ucode = "J/Kg·K",
		},
    Q3858002 = { -- miliampere-hora
		ucode = "mAh",
		},
	Q6859652 = { -- milímetro de mercurio
		ucode = "mm Hg",		
		},
	Q20966435 = { -- amperes por voltio-metro
		plural = "amperes por voltio-metro",
		},
	Q20966455 = { -- joule por mol-kelvin
		ucode = "J/mol·K",
		},
	Q21006887 = { -- parte por millón
		ucode = "ppm",
		},
	Q21127659 = { -- gramo por 100 gramos de disolvente
		ucode = "g/100 g disolvente",
		},
	Q26156132 = { -- milinewton por metro
		ucode = "mN/m",
		},
	Q28739766 = { -- coulomb-metre
		ucode = "C·m",
		},
	}

local function getUnit(amount, label, unitID, code, symbol)
	if label == nil or label == '' then return unitID end
	local id_data = wikidata_units[unitID] or {}
	local unit_text = ''
	if code then
		unit_text = id_data.ucode or symbol or id_data.label or label
	elseif amount == "1" then
		unit_text = id_data.label or label
	end
	return unit_text
end

local convert_default = {
	Q218593 = "Q174789", -- in > mm
	Q3710 = "Q174728", -- ft > cm
	Q482798 = "Q11573", -- yd > m
	Q253276 = "Q828224", -- mi > km
	Q232291 = "Q712226", -- mi² > km²
	Q128822 = "Q180154", -- nus > km/h
}

-- fraction values are saved in Wikidata as decimal numbers, e.g. P6757
-- this helper function restores the fracion notation with 1 as numerator
local function fraction1(decimal)
	decimal = tonumber(decimal)
	if decimal >= 1 then
		return decimal
	end
	
	local precision = 1E-15
	local z = decimal
	local predenum = 0
	local sc, num
	local denum = 1
	
	repeat
		z = 1 / (z - math.floor(z))
		sc = denum
		denum = denum * math.floor(z) + predenum
		predenum = sc
		num = math.ceil(decimal * denum)
	until ((math.abs(decimal - (num / denum)) < precision) or (z == math.floor(z)) or num == 1)
	
	return num .. '/' .. denum
end

return {
	getUnit = getUnit,
	convert_default = convert_default,
	fraction1 = fraction1
}