Difference between revisions of "Module:Armenian"
Jump to navigation
Jump to search
blackwiki>Mr. Stradivarius m (Changed protection level of Module:Armenian: High-risk Lua module: 1300 transclusions ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite))) |
blackwiki>Andy M. Wang (fix when passing value greater than 29999 (for templates not spazzing)) |
||
| Line 22: | Line 22: | ||
num = tonumber( num ) | num = tonumber( num ) | ||
end | end | ||
| − | if not num then return end | + | if not num then return '' end |
| + | |||
num = math.floor( num ) | num = math.floor( num ) | ||
-- Exit if the number is not expressible in Armenian numerals. | -- Exit if the number is not expressible in Armenian numerals. | ||
| Line 28: | Line 29: | ||
-- overlining them as it says in our article. (That claim is unsourced.) If they | -- 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. | -- 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 | + | if num < 1 or num > 29999 then return '' end |
local numerals = { | local numerals = { | ||
| Line 38: | Line 39: | ||
} | } | ||
| − | + | local ret = {} | |
for _, v in ipairs( numerals ) do | for _, v in ipairs( numerals ) do | ||
local val, letter = unpack( v ) | local val, letter = unpack( v ) | ||
Revision as of 22:07, 25 April 2016
| This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
This module implements {{Armenian}}. It converts numbers into old Armenian numerals, for numbers from 1-29999. Please see the template page for documentation.
-- 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