सामग्री पर जाएँ

मॉड्यूल:tengwar/numbers

विक्षनरी से

"इस मॉड्यूल हेतु प्रलेख मॉड्यूल:tengwar/numbers/doc पर बनाया जा सकता है"

local export = {}

function basen(n,b)
    n = math.floor(n)
    if not b or b == 10 then return tostring(n) end
    local digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    local t = {}
    local sign = ""
    if n < 0 then
        sign = "-"
    n = -n
    end
    repeat
        local d = (n % b) + 1
        n = math.floor(n / b)
        table.insert(t, 1, digits:sub(d,d))
    until n == 0
    return sign .. table.concat(t,"")
end

function export.ar2teng(number, base, font)
	local digits = {}
	local decmark, dozmark, dozlast
	if font == 'annatar' or not font then
		digits = {'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', '÷', 'ø', 'ù', 'ú', 'û'}
		digits[0] = 'ð'
		decmark = 'T'
		dozmark = 'Ê'
		dozlast = '™'
	elseif font == 'telcontar' then
		digits = {'', '', '', '', '', '', '', '', '', '', ''}
		digits[0] = ''
		decmark = ''
		dozmark = ''
		dozlast = ''
	else
		error ('invalid font, must be annatar or telcontar')
	end
	
	if base == 10 or not base then
		if key < 10 then
			number = digits[key]
		else
			local outp = {}
			for i = 0, #number do
		    	local pos = #number + 1 - i
		    	table.insert(outp, digits[tonumber(string.sub(number, pos, pos))]..decmark)
			end
			number = table.concat(outp)
		end
	elseif base == 12 then
		if key < 12 then
			number = digits[key]
		else
			number = basen(number, 12)
			local outp = {}
			for i = 0, #number do
		    	local pos = #number + 1 - i
		    	local cdig = string.gsub(string.gsub(string.sub(number, pos, pos), 'A', '10'), 'B', '11')
		    	if (i == #number) then
		    		table.insert(outp, digits[tonumber(cdig)]..dozlast)
		    	else
		    		table.insert(outp, digits[tonumber(cdig)]..dozmark)
		    	end
			end
			number = table.concat(outp)
		end
	else
		error ('invalid base, must be 10 or 12')
	end

	return number
end
return export