Модул:NumberSpell
Изглед
Овај модул претвара број у његов писани облик на српском језику. На пример, "2" постаје "два", а "79" постаје "седамдесет девет". Бројеви морају бити цели и у интервалу [0, 100].
Употреба
[уреди извор]{{#invoke:NumberSpell|main|број}}
Примери
[уреди извор]{{#invoke:NumberSpell|main|8}}
→ осам{{#invoke:NumberSpell|main|56}}
→ педесет шест{{#invoke:NumberSpell|main|101}}
→ Грешка: Улаз мора бити цео број између 0 и 100
-- Овај модул претвара број у његов писани облик на српском језику.
-- На пример, "2" постаје "два", а "79" постаје "седамдесет девет".
local getArgs = require('Module:Arguments').getArgs
local p = {}
local max = 100 -- The maximum number that can be parsed.
local ones = {
[0] = 'нула',
[1] = 'један',
[2] = 'два',
[3] = 'три',
[4] = 'четири',
[5] = 'пет',
[6] = 'шест',
[7] = 'седам',
[8] = 'осам',
[9] = 'девет'
}
local specials = {
[10] = 'десет',
[11] = 'једанаест',
[14] = 'четрнаест',
[16] = 'шеснаест',
[20] = 'двадесет',
[30] = 'тридесет',
[40] = 'четрдесет',
[50] = 'педесет',
[60] = 'шездесет',
[70] = 'седамдесет',
[80] = 'осамдесет',
[90] = 'деведесет',
[100] = 'сто'
}
local formatRules = {
{num = 90, rule = 'деведесет %s'},
{num = 80, rule = 'осамдесет %s'},
{num = 70, rule = 'седамдесет %s'},
{num = 60, rule = 'шездесет %s'},
{num = 50, rule = 'педесет %s'},
{num = 40, rule = 'четрдесет %s'},
{num = 30, rule = 'тридесет %s'},
{num = 20, rule = 'двадесет %s'},
{num = 10, rule = '%sнаест'}
}
function p.main(frame)
local args = getArgs(frame)
local num = tonumber(args[1])
local success, result = pcall(p._main, num)
if success then
return result
else
return string.format('<strong class="error">Грешка: %s</strong>', result) -- "result" is the error message.
end
return p._main(num)
end
function p._main(num)
if type(num) ~= 'number' or math.floor(num) ~= num or num < 0 or num > max then
error('Улаз мора бити цео број између 0 и ' .. tostring(max), 2)
end
-- Check for numbers from 0 to 9.
local onesVal = ones[num]
if onesVal then
return onesVal
end
-- Check for special numbers.
local specialVal = specials[num]
if specialVal then
return specialVal
end
-- Construct the number from its format rule.
onesVal = ones[num % 10]
if not onesVal then
error('Неочекивана грешка у анализи улаза ' .. tostring(num))
end
for i, t in ipairs(formatRules) do
if num >= t.num then
return string.format(t.rule, onesVal)
end
end
error('Нема правила форматирања за тражени улаз ' .. tostring(num))
end
return p