Module:Armenian

From Chalo Chatu, Zambia online encyclopedia

-- This module implements Template:Armenian. It converts numbers to old Armenian -- numerals, for numbers from 1-29999.

local p = {}

function p.main( frame )

   -- If we are being called from #invoke, then the number is the first positional
   -- argument. If not, it is the frame parameter.
   local num
   if frame == mw.getCurrentFrame() then
       num = frame:getParent().args[ 1 ]
       local frameArgsNum = frame.args[ 1 ]
       if frameArgsNum then
           num = frameArgsNum
       end
   else
       num = frame
   end
   -- Convert the input to an integer if possible.
   if type( num ) ~= 'number' then
       num = tonumber( num )
   end
   if not num then return  end
   num = math.floor( num )
   -- Exit if the number is not expressible in Armenian numerals.
   -- FIXME: Check if Armenian numerals can really be made 10,000x bigger through
   -- overlining them as it says in our article. (That claim is unsourced.) If they
   -- can, there is code at Module:Roman that can be stolen from to make it work.
   if num < 1 or num > 29999 then return  end
   
   local numerals = {
       { 20000, "Ֆ" }, { 10000, "Օ" },
       { 9000, "Ք" },  { 8000, "Փ" },  { 7000, "Ւ" },  { 6000, "Ց" },  { 5000, "Ր" },  { 4000, "Տ" },  { 3000, "Վ" },  { 2000, "Ս" },  { 1000, "Ռ" },
       { 900, "Ջ" },   { 800, "Պ" },   { 700, "Չ" },   { 600, "Ո" },   { 500, "Շ" },   { 400, "Ն" },   { 300, "Յ" },   { 200, "Մ" },   { 100, "Ճ" },
       { 90, "Ղ" },    { 80, "Ձ" },    { 70, "Հ" },    { 60, "Կ" },    { 50, "Ծ" },    { 40, "Խ" },    { 30, "Լ" },    { 20, "Ի" },    { 10, "Ժ" },
       { 9, "Թ" },     { 8, "Ը" },     { 7, "Է" },     { 6, "Զ" },     { 5, "Ե" },     { 4, "Դ" },     { 3, "Գ" },     { 2, "Բ" },     { 1, "Ա" }
   }
   

local ret = {}

   for _, v in ipairs( numerals ) do
       local val, letter = unpack( v )
       while num >= val do
           num = num - val
           table.insert( ret, letter )
       end
   end
   return table.concat( ret )

end

return p