Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

Module:Armenian

Permanently protected module
From Wikipedia, the free encyclopedia

-- This module implements {{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