-- This module implements .requirestrict
local p =
-- This function implements the template.local function overline(s) return mw.ustring.format('
%s', s)end-- Gets the Roman numerals for a given numeral table. Returns both the string of-- numerals and the value of the number after it is finished being processed.local function getLetters(num, t) local ret = for _, v in ipairs(t) do local val, letter = unpack(v) while num >= val do num = num - val table.insert(ret, letter) end end
return table.concat(ret), numend
-- The main control flow of the module.local function _main(args) -- Get input and exit displaying nothing if the input is empty. if args[1]
math.huge then error('Invalid number ' .. args[1], 2) elseif num
-- Return a message for numbers too big to be expressed in Roman numerals. if num >= 5000000 then return args[2] or 'N/A' end
local ret = -- Find the Roman numerals for the large part of numbers. -- 23 April 2016 - tweaked to >= 4000 to accept big Roman 'IV' -- The if statement is not strictly necessary, but makes the algorithm -- more efficient for smaller numbers. if num >= 4000 then local bigRomans = local bigLetters bigLetters, num = getLetters(num, bigRomans) ret = overline(bigLetters) end
-- Find the Roman numerals for numbers less than the big Roman threshold. local smallRomans = local smallLetters = getLetters(num, smallRomans) ret = ret .. smallLetters
if args.fraction
return retend
function p.main(frame) -- If called via #invoke, use the args passed into the invoking -- template, or the args passed to #invoke if any exist. Otherwise -- assume args are being passed directly in from the debug console -- or from another Lua module. local origArgs if frame
'string' then v = mw.text.trim(v) end if v ~= then args[k] = v end end -- exit if not given anything if args
then return end -- Given mathematical expression, simplify to a number if type(args[1])
return p