Moduł:Brudnopis/Paweł Ziemian/Wikidane/formatQuantity1

Z Wikipedii, wolnej encyklopedii

Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:Brudnopis/Paweł Ziemian/Wikidane/formatQuantity1/opis

local i18n = mw.loadData("Moduł:Wikidane/data").quantityFormats

local function selectRoundCoefficients(value)
	local num = math.abs(value)
	if num > i18n.maximumAmount then
		return false, "", math.floor(num * i18n.maximumVarFactor)
	end

	for i, v in ipairs(i18n) do
		if num > v.amount then
			return v.factor, v.suffix, v.minvar
		end
	end

	return false, "", 0
end

return {

scope = "snak",

format = function(snak, options)
	local amount = tonumber(snak.datavalue.value.amount)
	local upperVar = tonumber(snak.datavalue.value.upperBound or amount) - amount
	local lowerVar = amount - tonumber(snak.datavalue.value.lowerBound or amount)
	local div, suffix, var = selectRoundCoefficients(amount)
	local lang = mw.getContentLanguage()
	if (div == 1) or not div then
		if (upperVar == 0) and (lowerVar == 0) then
			return tostring(amount)
		elseif math.max(upperVar, lowerVar) <= var then
			return string.format(i18n.around, lang:formatNum(amount))
		elseif upperVar == lowerVar then
			return string.format(i18n.variance, lang:formatNum(amount), lang:formatNum(upperVar))
		else
			return string.format(i18n.between, lang:formatNum(tonumber(snak.datavalue.value.lowerBound)), lang:formatNum(tonumber(snak.datavalue.value.upperBound)))
		end		
	elseif div then
		if math.max(upperVar, lowerVar) <= var then
			local atxt = lang:formatNum(tonumber(string.format("%.2f", amount / div)))..suffix
			return string.format(i18n.around, atxt)
		elseif upperVar == lowerVar then
			local atxt = lang:formatNum(tonumber(string.format("%.2f", amount / div)))..suffix
			local vtxt = lang:formatNum(tonumber(string.format("%.2f", upperVar / div)))..suffix
			return string.format(i18n.variance, atxt, vtxt)
		else
			local ltxt = lang:formatNum(tonumber(string.format("%.2f", tonumber(snak.datavalue.value.lowerBound) / div)))..suffix
			local utxt = lang:formatNum(tonumber(string.format("%.2f", tonumber(snak.datavalue.value.upperBound) / div)))..suffix
			return string.format(i18n.between, ltxt, utxt)
		end
	end
end,

}