Module:ολογράφως
Documentation for this module may be created at Module:ολογράφως/τεκμηρίωση
local export = {}
divmod = function (num,divider)
return math.floor(num / divider), num % divider
end
function ReverseTable(t)
local reversedTable = {}
local itemCount = #t
for k, v in ipairs(t) do
reversedTable[itemCount + 1 - k] = v
end
return reversedTable
end
function remove_extra_delim(s, delim)
local t = {}
for each in s:gmatch("[^"..delim.."]+") do
table.insert(t, each)
end
return table.concat(t, delim)
end
lektiko = {}
initthis = function(sex,case)
if (sex == 1 and case == 1) then lektiko = mw.loadData("Module:ολογράφως/αο")
elseif (sex == 2 and case == 1) then lektiko = mw.loadData("Module:ολογράφως/θο")
elseif (sex == 3 and case == 1) then lektiko = mw.loadData("Module:ολογράφως/οο")
elseif (sex == 1 and case == 2) then lektiko = mw.loadData("Module:ολογράφως/αγ")
elseif (sex == 2 and case == 2) then lektiko = mw.loadData("Module:ολογράφως/θγ")
elseif (sex == 3 and case == 2) then lektiko = mw.loadData("Module:ολογράφως/αγ") --ίδιο με το mw.loadData("Module:ολογράφως/ογ")
elseif (sex == 1 and case == 3) then lektiko = mw.loadData("Module:ολογράφως/αα")
elseif (sex == 2 and case == 3) then lektiko = mw.loadData("Module:ολογράφως/θα")
elseif (sex == 3 and case == 3) then lektiko = mw.loadData("Module:ολογράφως/οο") --ίδιο με το mw.loadData("Module:ολογράφως/οα")
else --do nothing else
end
end
export.olografos = function(frame)
-- if sex <1 or sex > 3 or case <1 or case >3 then
-- return error_here("Δεν δόθηκαν σωστά το γένος και η πτώση")
-- end
local args = frame.args
numstr = args[1] or ''
sexstr = args[2] or ''
casestr = args[3] or ''
keimeno = export.calculations (numstr, sexstr, casestr)
return keimeno
end
export.calculations = function(numstr, sexstr, casestr)
sex = tonumber(sexstr)
case = tonumber(casestr)
if not (sex == 1 or sex == 2 or sex == 3) then sex = 3 end--ουδέτερο
if not (case == 1 or case == 2 or case == 3) then case = 1 end--ονομαστική
num = tonumber(numstr)
if num == 0 then
return "μηδέν"
end
initthis(sex, case)
local deksia = {}
local ycounter = 1
local rest2, dyada
local rest, triada = divmod(num,1000)
if triada == 0 then
deksia[ycounter] = ''
else
rest2, dyada = divmod(triada, 100)
end
if dyada == 0 then
deksia[ycounter] = ''
elseif dyada < 20 then
deksia[ycounter] = lektiko['σκέτα1_19'][dyada]
else
deksia[ycounter] = lektiko['σκέτα1_19'][dyada % 10]
ycounter = ycounter+1
deksia[ycounter] = lektiko['σκέτα20_99'][math.floor(dyada / 10)]
end
if rest2 == 0 then
--pass
elseif rest2 == 1 then
if deksia[ycounter] == '' then
deksia[ycounter] = 'εκατό ' .. deksia[ycounter]
else
deksia[ycounter] = 'εκατόν ' .. deksia[ycounter]
end
else
deksia[ycounter] = lektiko['σκέτα100'][rest2] .. ' ' .. deksia[ycounter]
end
if rest > 0 then --χιλιάδες
ycounter = ycounter+1
rest2 = 0
dyada = 0
rest, triada = divmod(rest, 1000)
if triada == 0 then --έχει μηδενικές χιλιάδες π.χ. 1000256
deksia[ycounter] = ''
else
rest2, dyada = divmod(triada, 100)--rest2=πόσες εκατοντάδες χιλιάδας έχει
if dyada == 0 then
deksia[ycounter] = ''
elseif dyada == 1 then --αν τα δύο δεξιά ψηφία είναι 01
if rest2 > 0 then --αν έχει εκατοντάδα χιλιάδας
deksia[ycounter] = lektiko['χιλιάδες1_19'][1] .. ' ' .. lektiko['κατάληξη'][1][1]
else
deksia[ycounter] = lektiko['κατάληξη'][1][2]
end
elseif dyada < 20 then --τα δύο δεξιά ψηφία είναι μεταξύ 2 και 19
deksia[ycounter] = lektiko['χιλιάδες1_19'][dyada] .. ' ' .. lektiko['κατάληξη'][1][1]
else--μεταξύ 20 και 99
--μονάδες
deksia[ycounter] = lektiko['χιλιάδες1_19'][dyada % 10] .. ' ' .. lektiko['κατάληξη'][1][1]
--δεκάδες
deksia[ycounter] = lektiko['χιλιάδες20_99'][math.floor(dyada / 10)] .. ' ' .. deksia[ycounter]
end
end
if rest2 == 0 then
--pass
elseif rest2 == 1 then
if deksia[ycounter] == '' then --έχει ακριβώς 100 χιλιάδες
deksia[ycounter] = 'εκατό ' .. lektiko['κατάληξη'][1][1]
else --είχε και κάποιες χιλιάδες π.χ. 132
deksia[ycounter] = 'εκατόν ' .. deksia[ycounter]
end
else --έχει παραπάνω από 199 χιλιάδες...
if deksia[ycounter] == '' then --έχει ακέραιο αριθμό εκατοντάδων χιλιάδων
deksia[ycounter] = lektiko['χιλιάδες100'][rest2] .. ' ' .. lektiko['κατάληξη'][1][1]
else --έχει και κάτι ψιλά... που τα βρήκα πριν
deksia[ycounter] = lektiko['χιλιάδες100'][rest2] .. ' ' .. deksia[ycounter]
end
end
end
myria=1
--while rest > 0 do
ycounter = ycounter+1
myria = myria + 1
rest2 = 0
dyada = 0
rest, triada = divmod(rest, 1000)
if triada == 0 then --έχει μηδενικά "εκατομμύρια" π.χ. 1000000256
deksia[ycounter] = ''
else
rest2, dyada = divmod(triada, 100)--rest2=πόσες εκατοντάδες από τα αντίστοιχα εκατομμύρια έχει
if dyada == 0 then
deksia[ycounter] = ''
elseif dyada == 1 then --αν τα δύο δεξιά ψηφία είναι 01
if rest2 > 0 then --αν έχει εκατοντάδα "μύριου"
deksia[ycounter] = lektiko['μύρια1_19'][1] .. ' ' .. lektiko['κατάληξη'][myria][1]
else
deksia[ycounter] = lektiko['μύρια1_19'][1] .. ' ' .. lektiko['κατάληξη'][myria][2]
end
elseif dyada < 20 then --τα δύο δεξιά ψηφία είναι μεταξύ 2 και 19
deksia[ycounter] = lektiko['μύρια1_19'][dyada] .. ' ' .. lektiko['κατάληξη'][myria][1]
else--μεταξύ 20 και 99
--μονάδες
deksia[ycounter] = lektiko['μύρια1_19'][dyada % 10] .. ' ' .. lektiko['κατάληξη'][myria][1]
--δεκάδες
deksia[ycounter] = lektiko['μύρια20_99'][math.floor(dyada / 10)] .. ' ' .. deksia[ycounter]
end
end
if rest2 == 0 then
--pass
elseif rest2 == 1 then
if deksia[ycounter] == '' then --έχει ακριβώς 100 "μύρια"
deksia[ycounter] = 'εκατό ' .. lektiko['κατάληξη'][myria][1]
else --είχε και κάποιες χιλιάδες π.χ. 132
deksia[ycounter] = 'εκατόν ' .. deksia[ycounter]
end
else --έχει παραπάνω από 199 χιλιάδες...
if deksia[ycounter] == '' then --έχει ακέραιο αριθμό εκατοντάδων "μυρίων"
deksia[ycounter] = lektiko['μύρια100'][rest2] .. ' ' .. lektiko['κατάληξη'][myria][1]
else --έχει και κάτι ψιλά... που τα βρήκα πριν
deksia[ycounter] = lektiko['μύρια100'][rest2] .. ' ' .. deksia[ycounter]
end
end
--end --do while rest
--return rest, triada, num, dyada,rest2,deksia[ycounter]
local theanswer = table.concat(ReverseTable(deksia)," ")
--return ycounter,sex,deksia[ycounter], "#" .. remove_extra_delim(theanswer, " ") .. "#"
return remove_extra_delim(theanswer, " ")
end
return export