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