Modul:NumberSpell
Loncat ke navigasi
Loncat ke pencarian
Dokumentasi untuk modul ini dapat dibuat di Modul:NumberSpell/doc
-- This module converts a number into its written English form. -- For example, "2" becomes "two", and "79" becomes "seventy-nine". local getArgs = require('Module:Arguments').getArgs local p = {} local max = 100 -- The maximum number that can be parsed. local ones = { [0] = 'nol', [1] = 'satu', [2] = 'dua', [3] = 'tiga', [4] = 'empat', [5] = 'lima', [6] = 'enam', [7] = 'tujuh', [8] = 'delapan', [9] = 'sembilan' } local specials = { [10] = 'sepuluh', [11] = 'sebelas', [20] = 'dua puluh', [30] = 'tiga puluh', [40] = 'empat puluh', [50] = 'lima puluh', [60] = 'enam puluh', [70] = 'tujuh puluh', [80] = 'delapan puluh', [90] = 'sembilan puluh', [100] = 'seratus' } local formatRules = { {num = 90, rule = 'sembilan puluh %s'}, {num = 80, rule = 'delapan puluh %s'}, {num = 70, rule = 'tujuh puluh %s'}, {num = 60, rule = 'enam puluh %s'}, {num = 50, rule = 'lima puluh %s'}, {num = 40, rule = 'empat puluh %s'}, {num = 30, rule = 'tiga puluh %s'}, {num = 20, rule = 'dua puluh %s'}, {num = 10, rule = '%s belas'} } 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">Kesalahan: %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('input must be an integer between 0 and ' .. 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('Unexpected error parsing input ' .. tostring(num)) end for i, t in ipairs(formatRules) do if num >= t.num then return string.format(t.rule, onesVal) end end error('No format rule found for input ' .. tostring(num)) end return p