Modul:Wikidata/Formatters/quantity
Vzhled
require 'Modul:No globals'
local p = {}
local lib = require 'Modul:Wikidata/lib'
local function formatUnit(unit)
local entityId = lib.getItemIdFromURI(unit)
if not entityId or entityId == 'Q199' then
return nil
end
local formatter = require('Modul:Wikidata/Formatters').Formatters['wikibase-entityid']
return formatter.formatEntityId(entityId, { label = 'unitsymbol' })
end
local function formatNumber(number)
local integer, decimal
if mw.ustring.find(number, '%.') then
integer, decimal = mw.ustring.match(number, '^(.+)%.(.+)$')
else
integer = number
end
local length = mw.ustring.len(integer)
local i = length % 3
if i == 0 then
i = 3
end
local formatted_num = mw.ustring.sub(integer, 1, i)
while i < length do
formatted_num = formatted_num .. ' ' .. mw.ustring.sub(integer, i + 1, i + 3)
i = i + 3
end
if decimal then
local length = mw.ustring.len(decimal)
local i = 3
formatted_num = formatted_num .. ',' .. mw.ustring.sub(decimal, 1, 3)
while i < length do
formatted_num = formatted_num .. ' ' .. mw.ustring.sub(decimal, i + 1, i + 3)
i = i + 3
end
end
return formatted_num
end
function p.getRawValue(value, options)
return tonumber(value.amount)
end
function p.formatValue(value, options)
local amount = tonumber(value.amount)
local margin
if lib.IsOptionTrue(options, 'showmargin') then
margin = tonumber(value.upperBound or amount) - amount
if margin == 0 then
margin = nil
end
end
local prefix = ''
if amount < 0 then
amount = tonumber(mw.ustring.sub(amount, 2))
prefix = '−'
end
amount = prefix .. formatNumber(amount)
if margin then
amount = amount .. '±' .. formatNumber(margin)
end
if tostring(options.showunit) ~= 'false' then
local unit = formatUnit(value.unit)
if unit then
return amount .. ' ' .. unit
end
end
return amount
end
return p