Module:Armenian
Appearance
![]() | This module is rated as beta. It is considered ready for widespread use, but as it is still relatively new, it should be applied with some caution to ensure results are as expected. |
![]() | This module is currently protected from editing. See the protection policy and protection log for more details. Please discuss any changes on the talk page; you may submit an edit request to ask an administrator to make an edit if it is uncontroversial or supported by consensus. You may also request that this page be unprotected. |
This module converts Arabic numerals into Armenian numerals. It currently works for any whole number between 1 and 29999.
Usage
To use it, enter {{#invoke:Armenian|main|YOURNUMBER}}, replacing "YOURNUMBER" with a number.
Arabic Numerals | Template Call | Armenian Numerals |
---|---|---|
1 | {{#invoke:Armenian|main|1}} | Ա |
2 | {{#invoke:Armenian|main|2}} | Բ |
49 | {{#invoke:Armenian|main|49}} | ԽԹ |
50 | {{#invoke:Armenian|main|50}} | Ծ |
51 | {{#invoke:Armenian|main|51}} | ԾԱ |
1024 | {{#invoke:Armenian|main|1024}} | ՌԻԴ |
4999 | {{#invoke:Armenian|main|4999}} | ՏՋՂԹ |
5000 | {{#invoke:Armenian|main|5000}} | Ր |
5001 | {{#invoke:Armenian|main|5001}} | ՐԱ |
If given a value larger than 29999, the output is blank and returns no value.
-- 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