Module:tengwar/numbers
Jump to navigation
Jump to search
- The following documentation is located at Module:tengwar/numbers/documentation. [edit]
- Useful links: root page • root page’s subpages • links • transclusions • testcases • sandbox
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