مۆدیوول:Number to word
ڕواڵەت
بەڵگەدارکردنی مۆدیوول[دروست بکە]
لەوانەیە بتەوێ پەڕەیەکی بەڵگەدارکردن بۆ ئەم مۆدیوولی سکریبونتۆیە دروست بکەی. دەستکاریکەران دەتوانن ئەم مۆدیوولە لە پەڕەکانی خۆڵەپەتانێ (دروست بکە | ئاوێنە) و ئەزموون (دروست بکە) تاقی بکەنەوە. تکایە پۆلەکان بە ژێرپەڕەی /doc زیاد بکە. ژێرپەڕەکانی ئەم مۆدیوول. |
local p = {}
local convert = require('Module:Numeral converter').convert
local yekan = {
'',
'یەک',
'دوو',
'سێ',
'چوار',
'پێنج',
'شەش',
'حەوت',
'ھەشت',
'نۆ'}
local dahgan = {
'',
'',
'بیست',
'سی',
'چل',
'پەنجا',
'شەست',
'حەفتا',
'ھەشتا',
'نەوەد'}
local sadgan = {
'',
'سەد',
'دووسەد',
'سێسەد',
'چوارسەد',
'پێنجسەد',
'شەسسەد',
'حەوتسەد',
'ھەشتسەد',
'نۆسەد'}
local exceptions = {
'دە',
'یازدە',
'دوازدە',
'سێزدە',
'چواردە',
'پازدە',
'شازدە',
'حەڤدە',
'ھەژدە',
'نۆزدە'}
local scale = {
'',
' ھەزار',
' ملیۆن',
' ملیار',
' بلیۆن',
' بلیارد',
' ترلیۆن',
' ترلیارد',
' کوادرلیۆن',
' کادریلیارد',
' کوینتیلیۆن',
' کوانتینیارد'}
function threedigit_words(threedigit)
local words = ''
if string.sub(threedigit,1,1) ~= '0' and string.sub( threedigit, 2)~='00' then
words = sadgan[tonumber(string.sub(threedigit,1,1))+1] .. ' و '
else
words = sadgan[tonumber(string.sub(threedigit,1,1))+1]
end
if string.sub(threedigit,2,2) == '1' then
words = words .. exceptions[tonumber(string.sub(threedigit,3,3))+1]
else
if string.sub(threedigit,3,3) ~= '0' and string.sub(threedigit,2,2)~='0' then
words = words .. dahgan[tonumber(string.sub(threedigit,2,2))+1] .. ' و '
else
words = words .. dahgan[tonumber(string.sub(threedigit,2,2))+1]
end
words = words .. yekan[tonumber(string.sub(threedigit,3,3))+1]
end
return words
end
function strnum2words(strnumber)
if tonumber(strnumber) == 0 then
return 'سفر'
end
if #strnumber > #scale * 3 then
error('لەدەرەوەی مەودایە!')
end
length = #strnumber
if length%3 ~= 0 then
strnumber = string.rep('0', 3-length%3) .. strnumber
end
groups = (#strnumber) / 3
local words = ''
group = groups
while group > 0 do
threedigit = string.sub( strnumber, group*3-2, group*3)
word3 = threedigit_words(threedigit)
if word3 ~= '' and group ~= groups then
if words == '' then
words = word3 .. scale[groups-group+1]
else
words = word3 .. scale[groups-group+1] .. ' و ' .. words
end
else
words = word3 .. words
end
group = group - 1
end
return sign.. words
end
function ordinal(nubmer)
words = strnum2words(nubmer)
if mw.ustring.sub(words,-2) == 'سێ' then
words = words:gsub('سێ$', 'سێیەم')
elseif mw.ustring.sub(words,-2) == 'نۆ' then
words = words:gsub('نۆ$', 'نۆیەم')
else
words = words .. 'ەم'
end
return words
end
function ordinal2(nubmer)
words = strnum2words(nubmer)
if mw.ustring.sub(words,-2) == 'سێ' then
words = words:gsub('سێ$', 'سێیەمین')
elseif mw.ustring.sub(words,-2) == 'نۆ' then
words = words:gsub('نۆ$', 'نۆیەمین')
else
words = words .. 'ەمین'
end
return words
end
function p.run(frame)
local args = frame.args
number = mw.ustring.match(convert("en",args[1]), "(%d*)%W*$")
if string.sub(number,1,1) == '-' or string.sub(number,1,1) == '−' then
sign = 'سالب '
number = mw.text.trim(string.sub(number,2))
else
sign = ''
end
if args[2] == 'ەم' then
return ordinal(number)
elseif args[2] == 'ەمین' then
return ordinal2(number)
else
return strnum2words(number)
end
end
return p