Documentation for this module may be created at Module:grc-nouns-decl/τεκμηρίωση

_module = {}

--σταθερές

kataliksicolor = 'DeepPink'

-- συναρτήσεις και μεταβλητές που δεν μπορουν να κληθούν απέξω
-- χρωματισμός κατάληξης
function _xk(kataliksi)
    return '<span style="color:' .. kataliksicolor ..';">' .. kataliksi .. '</span>'
end

errorhere = function(errstring)
    return '<div class="error">' .. errstring .. '</div>[[Κατηγορία:Σελίδες με σφάλματα στο πρότυπο κλίσης]]'
end

exeikati = function(onearg)
	if onearg == nil then 
		return false 
	end
    return  (mw.ustring.len(onearg) > 0)
end

getargs = function (frame)
    local args = frame:getParent().args
    local title = mw.title.getCurrentTitle()
    local einaistons0 = title:inNamespace(0)
    args['string_errorinlemma'] = ''
    local haserror = false
    if einaistons0 then
        PAGENAME = title.text
        --αφαίρεση κενών στην αρχή και στο τέλος
         args['λήμμα'] = PAGENAME:match( "^%s*(.-)%s*$" )
    else --αλλιώς
        --αν έχει δώσει παράμετρο λήμμα
        if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
            --do nothing. lemma = args['λήμμα']
        else--αλλιώς εμφάνισε λάθος. Είναι σε άλλο χώρο και πρέπει να έχει παράμετρο.
        	--προφανώς θα θέλει λίγο προσοχή στα Πρότυπα όπου θα βγάζει λάθος αν δεν είναι includeonly
            args['string_errorinlemma'] = 'Σφάλμα! Δεν δόθηκε η παράμετρος λήμμα.'
        end
    end
    --πλέον θα υπάρχουν:
    ----args['string_errorinlemma'] :κενό αν δεν έχει βρει σφάλμα ή το μήνυμα του σφάλματος
    ----args['λήμμα'] :το λήμμα που θα "επεξεργαστούμε"
    return args 
end

---- τονισμός άτονου με οξεία
---- υπάρχουν πολλά ζευγάρια ακόμη να συμπληρωθούν, πχ κεφαλαία με ή χωρίς πνεύμα κλπ
atona = { ['α'] = 'ά', ['ᾳ'] = 'ᾴ', ['ἀ'] = 'ἄ', ['ἁ'] = 'ἅ',
	    ['ε'] = 'έ', ['ἐ'] = 'ἔ', ['ἑ'] = 'ἕ',
	    ['η'] = 'ή', ['ῃ'] = 'ῄ', ['ἠ'] = 'ἤ', ['ἡ'] = 'ἥ',
	    ['ι'] = 'ί', ['ϊ'] = 'ΐ', ['ἰ'] = 'ἴ', ['ἱ'] = 'ἵ',
        ['ο'] = 'ό', ['ὀ'] = 'ὄ', ['ὁ'] = 'ὅ',
        ['υ'] = 'ύ', ['ϋ'] = 'ΰ', ['ὐ'] = 'ὔ', ['ὑ'] = 'ὕ',
        ['ω'] = 'ώ', ['ῳ'] = 'ῴ', ['ὠ'] = 'ὤ', ['ὡ'] = 'ὥ'
        }
---- αφαίρεση του τόνου
tonismena = {
   ['ό'] = 'ο', ['ὄ'] = 'ὀ', ['ὅ'] = 'ὁ', ['Ὄ'] = 'Ὀ', ['Ὅ'] = 'Ὁ',
   ['έ'] = 'ε', ['ἔ'] = 'ἐ', ['ἕ'] = 'ἑ', ['Ἔ'] = 'Ἐ', ['Ἕ'] = 'Ἑ',
   ['ά'] = 'α', ['ᾶ'] = 'α', ['ᾴ'] = 'ᾳ', ['ᾷ'] = 'ᾳ',
   ['ἄ'] = 'ἀ', ['ἆ'] = 'ἀ', ['ᾄ'] = 'ᾀ', ['ᾆ'] = 'ᾀ',
   ['ἅ'] = 'ἁ', ['ἇ'] = 'ἁ', ['ᾅ'] = 'ᾁ', ['ᾇ'] = 'ᾁ',
   ['Ἄ'] = 'Ἀ', ['Ἆ'] = 'Ἀ', ['Ἅ'] = 'Ἁ', ['Ἇ'] = 'Ἁ',
   ['ή'] = 'η', ['ῆ'] = 'η', ['ῄ'] = 'ῃ', ['ῇ'] = 'ῃ',
   ['ἤ'] = 'ἠ', ['ἦ'] = 'ἠ', ['ᾔ'] = 'ᾐ', ['ᾖ'] = 'ᾐ',
   ['ἥ'] = 'ἡ', ['ἧ'] = 'ἡ', ['ᾕ'] = 'ᾑ', ['ᾗ'] = 'ᾑ',
   ['Ἤ'] = 'Ἠ', ['Ἦ'] = 'Ἠ', ['Ἥ'] = 'Ἡ', ['Ἧ'] = 'Ἡ',
   ['ώ'] = 'ω', ['ῶ'] = 'ω', ['ῴ'] = 'ῳ', ['ῷ'] = 'ῳ',  
   ['ὤ'] = 'ὠ', ['ὦ'] = 'ὠ', ['ᾤ'] = 'ᾠ', ['ᾦ'] = 'ᾠ',
   ['ὥ'] = 'ὡ', ['ὧ'] = 'ὡ', ['ᾥ'] = 'ᾡ', ['ᾧ'] = 'ᾡ',
   ['Ὤ'] = 'Ὠ', ['Ὦ'] = 'Ὠ', ['Ὥ'] = 'Ὡ', ['Ὧ'] = 'Ὡ',
   ['ί'] = 'ι', ['ΐ'] = 'ϊ', ['ῖ'] = 'ι',
   ['ἴ'] = 'ἰ', ['ἶ'] = 'ἰ', ['ἵ'] = 'ἱ', ['ἷ'] = 'ἱ',
   ['Ἴ'] = 'Ἰ', ['Ἶ'] = 'Ἰ', ['Ἵ'] = 'Ἱ', ['Ἷ'] = 'Ἱ',
   ['ύ'] = 'υ', ['ΰ'] = 'ϋ', ['ῦ'] = 'υ', ['ὔ'] = 'ὐ', ['ὖ'] = 'ὐ', 
   ['ὕ'] = 'ὑ', ['ὗ'] = 'ὑ', ['Ὕ'] = 'Ὑ', ['Ὗ'] = 'Ὑ'
}
---- αλλαγή περισπωμένης σε οξεία
perispomeni = {
   ['ᾶ'] = 'ά', ['ᾷ'] = 'ᾴ', ['ἆ'] = 'ἄ', ['ᾆ'] = 'ᾄ', ['ἇ'] = 'ἅ', ['ᾇ'] = 'ᾅ',
   ['ῆ'] = 'ή', ['ῇ'] = 'ῄ', ['ἦ'] = 'ἤ', ['ᾖ'] = 'ᾔ', ['ἧ'] = 'ἥ', ['ᾗ'] = 'ᾕ',
   ['ῶ'] = 'ώ', ['ῷ'] = 'ῴ', ['ὦ'] = 'ὤ', ['ᾦ'] = 'ᾤ', ['ὧ'] = 'ὥ', ['ᾧ'] = 'ᾥ',
   ['ῖ'] = 'ί', ['ἶ'] = 'ἴ', ['ἷ'] = 'ἵ',
   ['ῦ'] = 'ύ', ['ὖ'] = 'ὔ', ['ὗ'] = 'ὕ'
}
---- αλλαγή οξείας σε περισπωμένη 
oxeia = {
   ['ά'] = 'ᾶ', ['ᾴ'] = 'ᾷ', ['ἄ'] = 'ἆ', ['ᾄ'] = 'ᾆ', ['ἅ'] = 'ἇ', ['ᾅ'] = 'ᾇ',
   ['ή'] = 'ῆ', ['ῄ'] = 'ῇ', ['ἤ'] = 'ἦ', ['ᾔ'] = 'ᾖ', ['ἥ'] = 'ἧ', ['ᾕ'] = 'ᾗ',
   ['ώ'] = 'ῶ', ['ῴ'] = 'ῷ', ['ὤ'] = 'ὦ', ['ᾤ'] = 'ᾦ', ['ὥ'] = 'ὧ', ['ᾥ'] = 'ᾧ',
   ['ί'] = 'ῖ', ['ἴ'] = 'ἶ', ['ἵ'] = 'ἷ',
   ['ύ'] = 'ῦ', ['ὔ'] = 'ὖ', ['ὕ'] = 'ὗ'
}

-- Η συνάρτηση αφαιρεί τον τόνο του θέματος
function _module.removeaccent(stem)
    --για κάθε χαρακτήρα
    wordproduced = ''
    for codepoint in mw.ustring.gcodepoint( stem ) do
        --αντικατάστησέ τον με βάση τον πίνακα
        mychar = mw.ustring.char(codepoint)
        convertedchar = tonismena[mychar]            
        --αν βρήκε κάτι για αντικατάσταση
        --είναι δηλαδή τονισμένο γράμμα
        if convertedchar ~= nil then
            --πρόσθεσέ το στη δημιουργούμενη κλείδα
            wordproduced = wordproduced .. convertedchar
        else
            --αλλιώς άσε το ίδιο
            wordproduced = wordproduced .. mychar        
        end
    end
    return wordproduced
end

-- Η συνάρτηση αλλάζει την περισπωμένη του θέματος σε οξεία. Αν δεν βρει περισπωμένη δεν κάνει τίποτα.
 
function _module.PerispomeniToOxia(stem)
    stempoint = mw.ustring.len(stem)
    wordproduced = ""
    while stempoint > 0 do
       mychar = mw.ustring.sub(stem, stempoint, stempoint)
       newchar = perispomeni[mychar]
       if newchar ~= nil then
          if stempoint > 1 then
              return mw.ustring.sub(stem, 1, stempoint-1 ) .. newchar .. wordproduced
          else
              return newchar .. wordproduced
          end
       else
           wordproduced = mychar .. wordproduced
           stempoint = stempoint -1
       end
    end
    return wordproduced
end

-- Η συνάρτηση αλλάζει την οξεία του θέματος σε περισπωμένη. Αν δεν βρει οξεία δεν κάνει τίποτα.
 
function _module.OxiaToPerispomeni(stem)
    stempoint = mw.ustring.len(stem)
    wordproduced = ""
    while stempoint > 0 do
       mychar = mw.ustring.sub(stem, stempoint, stempoint)
       newchar = oxeia[mychar]
       if newchar ~= nil then
          if stempoint > 1 then
              return mw.ustring.sub(stem, 1, stempoint-1 ) .. newchar .. wordproduced
          else
              return newchar .. wordproduced
          end
       else
           wordproduced = mychar .. wordproduced
           stempoint = stempoint -1
       end
    end
    return wordproduced
end

-- Η συνάρτηση αρχίζει από το τελευταίο γράμμα του θέματος και πηγαίνει προς το πρώτο. 
-- Όταν συναντήσει το πρώτο (άτονο) φωνήεν, το τονίζει και τέλος
-- Εννοείται ότι η μεταβλητή stem δεν πρέπει να περιέχει τονισμένα φωνήεντα.

function _module.neostonos(stem)
    stempoint = mw.ustring.len(stem)
    wordproduced = ""
    while stempoint > 0 do
       mychar = mw.ustring.sub(stem, stempoint, stempoint)
       newchar = atona[mychar]
       if newchar ~= nil then
          if stempoint > 1 then
              return mw.ustring.sub(stem, 1, stempoint-1 ) .. newchar .. wordproduced
          else
              return newchar .. wordproduced
          end
       else
           wordproduced = mychar .. wordproduced
           stempoint = stempoint -1
       end
    end
    return wordproduced
end

--η συνάρτηση βρίσκει το φωνήεν της προπαραλήγουσας και του βάζει οξεία.
--σε αυτή τη φάση υποθέτει ότι το δεύτερο φωνήεν του θέματος από το τέλος
--ανήκει στην προπαραλήγουσα

function _module.tonospro(stem)
    stempoint = mw.ustring.len(stem)
    wordproduced = ""
    profound = false
    while stempoint > 0 do
       mychar = mw.ustring.sub(stem, stempoint, stempoint)
       newchar = atona[mychar]
       if newchar ~= nil and profound then
            if stempoint > 1 then
                return mw.ustring.sub(stem, 1, stempoint-1 ) .. newchar .. wordproduced
            else
                return newchar .. wordproduced
            end
       else
       	   if newchar ~= nil then profound = true end
           wordproduced = mychar .. wordproduced
           stempoint = stempoint -1
       end
    end
    return wordproduced
end

--δεν μπορεί να κληθεί απέξω
fulltable2 = function (args)
    local stitlestr = ''
    local ptitlestr = ''
    local dtitlestr = ''
    local onomenstr = ''
    local onomplstr = ''
    local genenstr = ''
    local genplstr = ''
    local gendustr = ''
    local dotenstr = ''
    local dotdustr = ''
    local dotplstr = ''
    local aitenstr = ''
    local aitplstr = ''
    local aitdustr = ''
    local klenstr = ''
    local klplstr = ''
    
    local paratirisi = ''
    local hassingular = true --(args['εν'] ~= nil)
    local hasplural = true -- (args['πλ'] ~= nil)
    local hasdual = true -- (args['πλ'] ~= nil)
    if args['α'] == "πλ2" then hassingular = false end
    if args['α'] == "πλ" then
    	hassingular = false
    	hasdual = false
    end
    if args['α'] == "εν2" then hasplural = false end
    if args['α'] == "εν" then
    	hasplural = false
    	hasdual = false
    end
    if not (args['παρατήρηση'] == nil or mw.ustring.len(args['παρατήρηση']) < 1) then        
        --mw.log('para')
        paratirisi = '|-' .. "\n" .. [=[| colspan="4" align="left" style="background:#d9ebff; font-size: 90%; font-style: italic;" | ]=] 
        paratirisi = paratirisi .. args['παρατήρηση'] .. "\n"
    end 
--    if paratirisi == nil then paratirisi =
    if hassingular then
        stitlestr =  [=[! bgcolor="#8FBC8F" colspan="1" align="center"| '''''Ενικός''''']=] .. "\n"
        onomenstr =  [=[| align="left" | ]=] .. args['οε'] ..  "\n"
        genenstr =  [=[| align="left" | ]=] .. args['γε'] ..  "\n"
        dotenstr =  [=[| align="left" | ]=] .. args['δε'] ..  "\n"
        aitenstr =  [=[| align="left" | ]=] .. args['αε'] ..  "\n"
        klenstr =  [=[| align="left" | ]=] .. args['κε'] ..  "\n"
    end
    if hasdual then
    	dtitlestr = [=[! bgcolor="#8FBC8F" colspan="1" align="center"| '''''Δυϊκός''''']=] .. "\n"
    	gendustr =  [=[| align="left" | ]=] .. args['γδ'] ..  "\n"
        aitdustr =  [=[| align="left" | ]=] .. args['αδ'] ..  "\n"
    end
    if hasplural then
        ptitlestr = [=[! bgcolor="#8FBC8F" colspan="1" align="center"| '''''Πληθυντικός''''']=] .. "\n"
        onomplstr =  [=[| align="left" | ]=] .. args['οπ'] ..  "\n"
        genplstr =  [=[| align="left" | ]=] .. args['γπ'] ..  "\n"
        dotplstr =  [=[| align="left" | ]=] .. args['δπ'] ..  "\n"
        aitplstr =  [=[| align="left" | ]=] .. args['απ'] ..  "\n"
        klplstr =  [=[| align="left" | ]=] .. args['οπ'] ..  "\n"
    end
 
    return [=[{| style="float:right;border:1px solid #AAAACC;margin-left:0.5em;margin-bottom:0.5em;text-align:right;" rules="all" cellpadding="3" cellspacing="0"
|-
! bgcolor="#8FBC8F" | Πτώση]=] .. "\n" .. stitlestr .. dtitlestr .. ptitlestr .. [=[|-
| bgcolor="#c0e4c0" | '''''Ονομαστική''''']=] .. "\n" .. onomenstr .. aitdustr .. onomplstr .. [=[|-
| bgcolor="#c0e4c0" | '''''Γενική''''']=] .. "\n" .. genenstr .. gendustr .. genplstr .. [=[|-
| bgcolor="#c0e4c0" | '''''Δοτική''''']=] .. "\n" .. dotenstr .. gendustr .. dotplstr .. [=[|-
| bgcolor="#c0e4c0" | '''''Αιτιατική''''']=] .. "\n" .. aitenstr .. aitdustr .. aitplstr .. [=[|-
| bgcolor="#c0e4c0" | '''''Κλητική''''']=] .. "\n" .. klenstr .. aitdustr .. klplstr .. paratirisi .. [=[|}]=] 
end

------------------
 
--Συναρτήσεις που παίρνουν παράμετρο το frame

--Aυτή η συνάρτηση καλείται όταν απαιτείται μόνο ένα θέμα για την κλίση
klisi1 = function(args)
    local lemma = ""
    --αν χρησιμοποιηθεί η getargs μπορεί να παρακαμφθεί το if
    --και το local lemma να γίνει args['λήμμα'] κατευθείαν
    if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
        lemma = args['λήμμα']
    else
        PAGENAME = mw.title.getCurrentTitle().text
        --αφαίρεση κενών στην αρχή και στο τέλος
        lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    end
    local stemnumber = 0
    if args['α'] ~= "πλ" then
        stemnumber = tonumber(mw.ustring.len(args['οε']))
    else
        stemnumber = tonumber(mw.ustring.len(args['οπ']))
    end
    local stem1 = mw.ustring.sub(lemma,1,-stemnumber-1)
    args['οε'] = stem1 .. _xk(args['οε'])
    args['γε'] = stem1 .. _xk(args['γε'])
    args['δε'] = stem1 .. _xk(args['δε'])
    args['αε'] = stem1 .. _xk(args['αε'])
   	args['κε'] = stem1 .. _xk(args['κε'])
    args['οπ'] = stem1 .. _xk(args['οπ'])
    args['γπ'] = stem1 .. _xk(args['γπ'])
    args['δπ'] = stem1 .. _xk(args['δπ'])
    args['απ'] = stem1 .. _xk(args['απ'])
    args['αδ'] = stem1 .. _xk(args['αδ'])
    args['γδ'] = stem1 .. _xk(args['γδ'])
    return fulltable2(args)
end

-- Εδώ αρχίζουν οι καταλήξεις των επιμέρους προτύπων

_module.sfaira = function(frame)
    local args = frame:getParent().args
    local lemma = ""
    if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
        lemma = args['λήμμα']
    else
        PAGENAME = mw.title.getCurrentTitle().text
        --αφαίρεση κενών στην αρχή και στο τέλος
        lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    end
    args['γε'] = 'ας'
    args['δε'] = 'ᾳ'
    local stemnumber = 2
    if args['α'] == "πλ" then stemnumber = 3 end
    local stem1 = mw.ustring.sub(lemma,1,-stemnumber)
    local stem2 = _module.removeaccent(stem1)
    local stem3 = _module.PerispomeniToOxia(stem1)
    local stem4 = _module.OxiaToPerispomeni(stem1)
    local xaraktiras = mw.ustring.sub(stem1,-1)
    for  i, xar in ipairs({'β', 'γ', 'δ', 'ζ', 'θ', 'κ', 'λ', 'μ', 'ν', 'ξ', 'π', 'σ', 'τ', 'φ', 'χ', 'ψ'}) do
       if xaraktiras == xar then
       	args['γε'] = 'ης'
       	args['δε'] = 'ῃ'
       end
    end
    if args['δίχρ'] == 'β' then stem4=stem1 end
    -- Μπορούμε στην Ονομ Πληθ να βάλουμε το stem4, με την εξαίρεση των λέξεων που
    -- τονίζονται σε δίχρονο α,ι,υ. Ο χρήστης θα πρέπει να μας λέει αν αυτό το δίχρονο είναι βραχύ, με παράμετρο «δίχρ=β»
    args['οε'] = stem1 .. _xk("α")
    args['γε'] = stem3 .. _xk(args['γε'])
    args['δε'] = stem3 .. _xk(args['δε'])
    args['αε'] = stem1 .. _xk("αν")
    args['κε'] = args['οε']
    args['οπ'] = stem4 .. _xk("αι")
    args['γπ'] = stem2 .. _xk("ῶν")
    args['δπ'] = stem3 .. _xk("αις")
    args['απ'] = stem3 .. _xk("ας")
    args['αδ'] = stem3 .. _xk("α")
    args['γδ'] = stem3 .. _xk("αιν")
    return frame:preprocess(fulltable2(args))
end

_module.thalassa = function(frame)
    local args = frame:getParent().args
    local lemma = ""
    if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
        lemma = args['λήμμα']
    else
        PAGENAME = mw.title.getCurrentTitle().text
        --αφαίρεση κενών στην αρχή και στο τέλος
        lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    end
    args['γε'] = 'ας'
    args['δε'] = 'ᾳ'
    local stemnumber = 2
    if args['α'] == "πλ" then stemnumber = 3 end
    local stem1 = mw.ustring.sub(lemma,1,-stemnumber)
    local stem2 = _module.removeaccent(stem1)
    local stem3 = _module.neostonos(stem2)
    local xaraktiras = mw.ustring.sub(stem1,-1)
    for  i, xar in ipairs({'β', 'γ', 'δ', 'ζ', 'θ', 'κ', 'λ', 'μ', 'ν', 'ξ', 'π', 'σ', 'τ', 'φ', 'χ', 'ψ'}) do
       if xaraktiras == xar then
       	args['γε'] = 'ης'
       	args['δε'] = 'ῃ'
       end
    end
    args['οε'] = stem1 .. _xk("α")
    args['γε'] = stem3 .. _xk(args['γε'])
    args['δε'] = stem3 .. _xk(args['δε'])
    args['αε'] = stem1 .. _xk("αν")
    args['κε'] = args['οε']
    args['οπ'] = stem1 .. _xk("αι")
    args['γπ'] = stem2 .. _xk("ῶν")
    args['δπ'] = stem3 .. _xk("αις")
    args['απ'] = stem3 .. _xk("ας")
    args['αδ'] = stem3 .. _xk("α")
    args['γδ'] = stem3 .. _xk("αιν")
    return frame:preprocess(fulltable2(args))
end

_module.stratia = function(frame)
	local args = frame:getParent().args
	args['οε'] = "ά"
    args['γε'] = 'ᾶς'
    args['δε'] = 'ᾷ'
    args['αε'] = "άν"
    args['κε'] = "ά"
    args['οπ'] = "αί"
    args['γπ'] = "ῶν"
    args['δπ'] = "αῖς"
    args['απ'] = "άς"
    args['αδ'] = "ά"
    args['γδ'] = "αῖν"
    return frame:preprocess(klisi1(args))
end

_module.mna = function(frame)
	local args = frame:getParent().args
	args['οε'] = "ᾶ"
    args['γε'] = 'ᾶς'
    args['δε'] = 'ᾷ'
    args['αε'] = "ᾶν"
    args['κε'] = "ᾶ"
    args['οπ'] = "αῖ"
    args['γπ'] = "ῶν"
    args['δπ'] = "αῖς"
    args['απ'] = "ᾶς"
    args['αδ'] = "ᾶ"
    args['γδ'] = "αῖν"
    return frame:preprocess(klisi1(args))
end

_module.timi = function(frame)
	local args = frame:getParent().args
	args['οε'] = "ή"
    args['γε'] = 'ῆς'
    args['δε'] = 'ῇ'
    args['αε'] = "ήν"
    args['κε'] = "ή"
    args['οπ'] = "αί"
    args['γπ'] = "ῶν"
    args['δπ'] = "αῖς"
    args['απ'] = "άς"
    args['αδ'] = "ά"
    args['γδ'] = "αῖν"
    return frame:preprocess(klisi1(args))
end

_module.poiitis = function(frame)
	local args = frame:getParent().args
	args['οε'] = "ής"
    args['γε'] = 'οῦ'
    args['δε'] = 'ῇ'
    args['αε'] = "ήν"
    args['κε'] = "ά"
    args['οπ'] = "αί"
    args['γπ'] = "ῶν"
    args['δπ'] = "αῖς"
    args['απ'] = "άς"
    args['αδ'] = "ά"
    args['γδ'] = "αῖν"
    return frame:preprocess(klisi1(args))
end

_module.meni = function(frame) -- θηλυκά μετοχών σε -μένη
    local args = frame:getParent().args
    local lemma = ""
    if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
        lemma = args['λήμμα']
    else
        PAGENAME = mw.title.getCurrentTitle().text
        --αφαίρεση κενών στην αρχή και στο τέλος
        lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    end
    local stem1 = ""
    local stem2 = ""
    local stem4 = ""
    if args['α'] == "πλ" then 
    	stem4 = mw.ustring.sub(lemma,1,-3)
    	stem2 = _module.removeaccent(stem4)
    	stem1 = _module.neostonos(stem2)
    else
    	stem1 = mw.ustring.sub(lemma,1,-2)
    	stem2 = _module.removeaccent(stem1)
    	stem4 = _module.tonospro(stem2)
    end
    args['οε'] = stem1 .. _xk("η")
    args['γε'] = stem1 .. _xk("ης")
    args['δε'] = stem1 .. _xk("ῃ")
    args['αε'] = stem1 .. _xk("ην")
    args['κε'] = args['οε']
    args['οπ'] = stem4 .. _xk("αι")
    args['γπ'] = stem1 .. _xk("ων")
    args['δπ'] = stem1 .. _xk("αις")
    args['απ'] = stem1 .. _xk("ας")
    args['αδ'] = stem1 .. _xk("α")
    args['γδ'] = stem1 .. _xk("αιν")
    return frame:preprocess(fulltable2(args))
end

_module.gnomi = function(frame)
    local args = frame:getParent().args
    local lemma = ""
    if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
        lemma = args['λήμμα']
    else
        PAGENAME = mw.title.getCurrentTitle().text
        --αφαίρεση κενών στην αρχή και στο τέλος
        lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    end
    local stem1 = ""
    local stem4 = ""
    if args['α'] == "πλ" then 
    	stem4 = mw.ustring.sub(lemma,1,-3)
    	stem1 = _module.PerispomeniToOxia(stem4)
    else
    	stem1 = mw.ustring.sub(lemma,1,-2)
    	stem4 = _module.OxiaToPerispomeni(stem1)
    	if args['δίχρ'] == 'β' then stem4=stem1 end
    -- Μπορούμε στην Ονομ Πληθ να βάλουμε το stem4, με την εξαίρεση των λέξεων που
    -- τονίζονται σε δίχρονο α,ι,υ. Ο χρήστης θα πρέπει να μας λέει αν αυτό το δίχρονο είναι βραχύ, με παράμετρο «δίχρ=β»
    end
    local stem2 = _module.removeaccent(stem1)
    args['οε'] = stem1 .. _xk("η")
    args['γε'] = stem1 .. _xk("ης")
    args['δε'] = stem1 .. _xk("ῃ")
    args['αε'] = stem1 .. _xk("ην")
    args['κε'] = args['οε']
    args['οπ'] = stem4 .. _xk("αι")
    args['γπ'] = stem2 .. _xk("ῶν")
    args['δπ'] = stem1 .. _xk("αις")
    args['απ'] = stem1 .. _xk("ας")
    args['αδ'] = stem1 .. _xk("α")
    args['γδ'] = stem1 .. _xk("αιν")
    return frame:preprocess(fulltable2(args))
end

-- Β' κλίση
_module.naos = function(frame)
	local args = frame:getParent().args
	args['οε'] = "ός"
    args['γε'] = 'οῦ'
    args['δε'] = 'ῷ'
    args['αε'] = "όν"
    args['κε'] = "έ"
    args['οπ'] = "οί"
    args['γπ'] = "ῶν"
    args['δπ'] = "οῖς"
    args['απ'] = "ούς"
    args['αδ'] = "ώ"
    args['γδ'] = "οῖν"
    return frame:preprocess(klisi1(args))
end

_module.xronos = function(frame)
    local args = frame:getParent().args
    local lemma = ""
    if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
        lemma = args['λήμμα']
    else
        PAGENAME = mw.title.getCurrentTitle().text
        --αφαίρεση κενών στην αρχή και στο τέλος
        lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    end
    local stem1 = mw.ustring.sub(lemma,1,-3)
    local stem2 = _module.PerispomeniToOxia(stem1)
    args['οε'] = stem1 .. _xk("ος")
    args['γε'] = stem2 .. _xk('ου')
    args['δε'] = stem2 .. _xk('ῳ')
    args['αε'] = stem1 .. _xk("ον")
    args['κε'] = stem1 .. _xk("ε")
    args['οπ'] = stem1 .. _xk("οι")
    args['γπ'] = stem2 .. _xk("ων")
    args['δπ'] = stem2 .. _xk("οις")
    args['απ'] = stem2 .. _xk("ους")
    args['αδ'] = stem2 .. _xk("ω")
    args['γδ'] = stem2 .. _xk("οιν")
    return frame:preprocess(fulltable2(args))
end

_module.thriamvos = function(frame)
    local args = frame:getParent().args
    local lemma = ""
    if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
        lemma = args['λήμμα']
    else
        PAGENAME = mw.title.getCurrentTitle().text
        --αφαίρεση κενών στην αρχή και στο τέλος
        lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    end
    local stem1 = mw.ustring.sub(lemma,1,-3)
    local stem2 = _module.removeaccent(stem1)
    local stem3 = _module.neostonos(stem2)
    args['οε'] = stem1 .. _xk("ος")
    args['γε'] = stem3 .. _xk('ου')
    args['δε'] = stem3 .. _xk('ῳ')
    args['αε'] = stem1 .. _xk("ον")
    args['κε'] = stem1 .. _xk("ε")
    args['οπ'] = stem1 .. _xk("οι")
    args['γπ'] = stem3 .. _xk("ων")
    args['δπ'] = stem3 .. _xk("οις")
    args['απ'] = stem3 .. _xk("ους")
    args['αδ'] = stem3 .. _xk("ω")
    args['γδ'] = stem3 .. _xk("οιν")
    return frame:preprocess(fulltable2(args))
end

_module.fyton = function(frame)
	local args = frame:getParent().args
	args['οε'] = "όν"
    args['γε'] = 'οῦ'
    args['δε'] = 'ῷ'
    args['αε'] = "όν"
    args['κε'] = "όν"
    args['οπ'] = "ά"
    args['γπ'] = "ῶν"
    args['απ'] = "ά"
    args['δπ'] = "οῖς"
    args['αδ'] = "ώ"
    args['γδ'] = "οῖν"
    return frame:preprocess(klisi1(args))
end

_module.krinon = function(frame)
    local args = frame:getParent().args
    local lemma = ""
    if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
        lemma = args['λήμμα']
    else
        PAGENAME = mw.title.getCurrentTitle().text
        lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    end
    local stemnumber = 3
    if args['α'] == "πλ" then stemnumber = 2 end
    local stem1 = mw.ustring.sub(lemma,1,-stemnumber)
    local stem2 = _module.PerispomeniToOxia(stem1)
    args['οε'] = stem1 .. _xk("ον")
    args['γε'] = stem2 .. _xk('ου')
    args['δε'] = stem2 .. _xk('ῳ')
    args['αε'] = args['οε']
    args['κε'] = args['οε']
    args['οπ'] = stem1 .. _xk("α")
    args['γπ'] = stem2 .. _xk("ων")
    args['δπ'] = stem2 .. _xk("οις")
    args['απ'] = args['οπ']
    args['αδ'] = stem2 .. _xk("ω")
    args['γδ'] = stem2 .. _xk("οιν")
    return frame:preprocess(fulltable2(args))
end

_module.prosopon = function(frame)
    local args = frame:getParent().args
    local lemma = ""
    if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
        lemma = args['λήμμα']
    else
        PAGENAME = mw.title.getCurrentTitle().text
        --αφαίρεση κενών στην αρχή και στο τέλος
        lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    end
    local stemnumber = 3
    if args['α'] == "πλ" then stemnumber = 2 end
    local stem1 = mw.ustring.sub(lemma,1,-stemnumber)
    local stem2 = _module.removeaccent(stem1)
    local stem3 = _module.neostonos(stem2)
    args['οε'] = stem1 .. _xk("ον")
    args['γε'] = stem3 .. _xk('ου')
    args['δε'] = stem3 .. _xk('ῳ')
    args['αε'] = args['οε']
    args['κε'] = args['οε']
    args['οπ'] = stem1 .. _xk("α")
    args['γπ'] = stem3 .. _xk("ων")
    args['δπ'] = stem3 .. _xk("οις")
    args['απ'] = args['οπ']
    args['αδ'] = stem3 .. _xk("ω")
    args['γδ'] = stem3 .. _xk("οιν")
    return frame:preprocess(fulltable2(args))
end

_module.plous = function(frame)
	local args = frame:getParent().args
	args['οε'] = "όῦς"
    args['γε'] = 'οῦ'
    args['δε'] = 'ῷ'
    args['αε'] = "όῦν"
    args['κε'] = "οῦ"
    args['οπ'] = "οῖ"
    args['γπ'] = "ῶν"
    args['απ'] = "οῦς"
    args['δπ'] = "οῖς"
    args['αδ'] = "ώ"
    args['γδ'] = "οῖν"
    return frame:preprocess(klisi1(args))
end

_module.ostoun = function(frame)
	local args = frame:getParent().args
	args['οε'] = "οῦν"
    args['γε'] = 'οῦ'
    args['δε'] = 'ῷ'
    args['αε'] = "οῦν"
    args['κε'] = "οῦν"
    args['οπ'] = "ᾶ"
    args['γπ'] = "ῶν"
    args['απ'] = "ᾶ"
    args['δπ'] = "ᾶ"
    args['αδ'] = "ώ"
    args['γδ'] = "οῖν"
    return frame:preprocess(klisi1(args))
end

_module.lews = function(frame) -- αττικόκλιτα, πχ λεώς
	local args = frame:getParent().args
	args['οε'] = "ώς"
    args['γε'] = 'ώ'
    args['δε'] = 'ῴ'
    args['αε'] = "ών"
    args['κε'] = "ώς"
    args['οπ'] = "ῴ"
    args['γπ'] = "ών"
    args['απ'] = "ώς"
    args['δπ'] = "ῴς"
    args['αδ'] = "ώ"
    args['γδ'] = "ῴν"
    return frame:preprocess(klisi1(args))
end

-- Τριτόκλιτα

_module.iros = function(frame) -- φωνηεντόληκτα, ἥρως
    local args = frame:getParent().args
    local lemma = ""
    if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
        lemma = args['λήμμα']
    else
        PAGENAME = mw.title.getCurrentTitle().text
        --αφαίρεση κενών στην αρχή και στο τέλος
        lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    end
    local stemnumber = 2
    if args['α'] == "πλ" then stemnumber = 3 end
    local stem1 = mw.ustring.sub(lemma,1,-stemnumber)
    local stem3 = _module.removeaccent(stem1)
    local stem2 = _module.neostonos(stem3)
    args['οε'] = stem1 .. _xk("ς")
    args['γε'] = stem1 .. _xk('ος')
    args['δε'] = stem1 .. _xk('ι')
    args['αε'] = stem1 .. _xk("α")
    args['κε'] = args['οε']
    args['οπ'] = stem1 .. _xk("ες")
    args['γπ'] = stem2 .. _xk("ων")
    args['δπ'] = stem1 .. _xk("σι(ν)")
    args['απ'] = stem1 .. _xk("ας")
    args['αδ'] = stem1 .. _xk("ε")
    args['γδ'] = stem2 .. _xk("οιν")
    return frame:preprocess(fulltable2(args))
end

_module.votrys = function(frame) -- φωνηεντόληκτα, βότρυς
    local args = frame:getParent().args
    local lemma = ""
    if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
        lemma = args['λήμμα']
    else
        PAGENAME = mw.title.getCurrentTitle().text
        --αφαίρεση κενών στην αρχή και στο τέλος
        lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    end
    local stemnumber = 2
    if args['α'] == "πλ" then stemnumber = 3 end
    local stem1 = mw.ustring.sub(lemma,1,-stemnumber)
    local stem3 = _module.removeaccent(stem1)
    local stem2 = _module.neostonos(stem3)
    args['οε'] = stem1 .. _xk("ς")
    args['γε'] = stem1 .. _xk('ος')
    args['δε'] = stem1 .. _xk('ϊ')
    args['αε'] = stem1 .. _xk("ν")
    args['κε'] = stem1
    args['οπ'] = stem1 .. _xk("ες")
    args['γπ'] = stem2 .. _xk("ων")
    args['δπ'] = stem1 .. _xk("σι(ν)")
    args['απ'] = stem1 .. _xk("ς")
    args['αδ'] = stem1 .. _xk("ε")
    args['γδ'] = stem2 .. _xk("οιν")
    return frame:preprocess(fulltable2(args))
end

_module.ixthys = function(frame) -- φωνηεντόληκτα, ιχθύς
    local args = frame:getParent().args
    local lemma = ""
    if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
        lemma = args['λήμμα']
    else
        PAGENAME = mw.title.getCurrentTitle().text
        --αφαίρεση κενών στην αρχή και στο τέλος
        lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    end
    local stemnumber = 2
    if args['α'] == "πλ" then stemnumber = 3 end
    local stem1 = mw.ustring.sub(lemma,1,-stemnumber)
    local stem2 = _module.OxiaToPerispomeni(stem1)
    args['οε'] = stem1 .. _xk("ς")
    args['γε'] = stem1 .. _xk('ος')
    args['δε'] = stem1 .. _xk('ϊ')
    args['αε'] = stem1 .. _xk("ν")
    args['κε'] = stem1
    args['οπ'] = stem1 .. _xk("ες")
    args['γπ'] = stem1 .. _xk("ων")
    args['δπ'] = stem1 .. _xk("σι(ν)")
    args['απ'] = stem2 .. _xk("ς")
    args['αδ'] = stem1 .. _xk("ε")
    args['γδ'] = stem1 .. _xk("οιν")
    return frame:preprocess(fulltable2(args))
end

_module.drys = function(frame) -- φωνηεντόληκτα, δρῦς
    local args = frame:getParent().args
    local lemma = ""
    if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
        lemma = args['λήμμα']
    else
        PAGENAME = mw.title.getCurrentTitle().text
        --αφαίρεση κενών στην αρχή και στο τέλος
        lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    end
    local stemnumber = 2
    if args['α'] == "πλ" then stemnumber = 3 end
    local stem1 = mw.ustring.sub(lemma,1,-stemnumber)
    local stem2 = _module.removeaccent(stem1)
    local stem3 = _module.PerispomeniToOxia(stem1)
    args['οε'] = stem1 .. _xk("ς")
    args['γε'] = stem2 .. _xk('ός')
    args['δε'] = stem2 .. _xk('ΐ')
    args['αε'] = stem1 .. _xk("ν")
    args['κε'] = stem1
    args['οπ'] = stem3 .. _xk("ες") .. " - " .. args['οε']
    args['γπ'] = stem2 .. _xk("ῶν")
    args['δπ'] = stem2 .. _xk("σί(ν)")
    args['απ'] = stem3 .. _xk("ας") .. " - " .. args['οε']
    args['αδ'] = stem3 .. _xk("ε")
    args['γδ'] = stem2 .. _xk("οῖν")
    return frame:preprocess(fulltable2(args))
end

_module.polis = function(frame) -- φωνηεντόληκτα, πόλις -εως, πέλεκυς, -εως
    local args = frame:getParent().args
    local lemma = ""
    if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
        lemma = args['λήμμα']
    else
        PAGENAME = mw.title.getCurrentTitle().text
        --αφαίρεση κενών στην αρχή και στο τέλος
        lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    end
    local stemnumber = 3
    local xarakt = "ι"
    if args['α'] == "πλ" then 
    	stemnumber = 4 
    else
    	xarakt = mw.ustring.sub(lemma,-2,-2)
    end
    local stem1 = mw.ustring.sub(lemma,1,-stemnumber)
    local stem2 = _module.removeaccent(stem1)
    local stem3 = _module.neostonos(stem2)
    stem1 = stem1 .. xarakt
    args['οε'] = stem1 .. _xk("ς")
    args['γε'] = stem3 .. "ε" .. _xk('ως')
    args['δε'] = stem3 .. _xk('ει')
    args['αε'] = stem1 .. _xk("ν")
    args['κε'] = stem1  
    args['οπ'] = stem3 .. _xk("εις")
    args['γπ'] = stem3 .. "ε"  .. _xk("ων")
    args['δπ'] = stem3 .. "ε"  .. _xk("σι(ν)")
    args['απ'] = args['οπ']
    args['αδ'] = stem3 .. _xk("ει")
    args['γδ'] = stem2 .. "έ" .. _xk("οιν")
    return frame:preprocess(fulltable2(args))
end

_module.vasileus = function(frame) -- φωνηεντόληκτα, βασιλεύς -έως
    local args = frame:getParent().args
    local lemma = ""
    if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
        lemma = args['λήμμα']
    else
        PAGENAME = mw.title.getCurrentTitle().text
        --αφαίρεση κενών στην αρχή και στο τέλος
        lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    end
    local stemnumber = 4
    local stem1 = mw.ustring.sub(lemma,1,-stemnumber)

    args['οε'] = stem1 .. "εύ" .. _xk("ς")
    args['γε'] = stem1 .. "έ" .. _xk('ως')
    args['δε'] = stem1 .. _xk('εῖ')
    args['αε'] = stem1 .. "έ" .. _xk("α")
    args['κε'] = stem1 .. "εῦ"
    args['οπ'] = stem1 .. _xk("εῖς")
    args['γπ'] = stem1 .. "έ"  .. _xk("ων")
    args['δπ'] = stem1 .. "εῦ"  .. _xk("σι(ν)")
    args['απ'] = stem1 .. "έ" .. _xk("ας")
    args['αδ'] = stem1 .. _xk("εῖ")
    args['γδ'] = stem1 .. "έ" .. _xk("οιν")
    return frame:preprocess(fulltable2(args))
end

_module.fylax = function(frame) -- αφωνόληκτα προπαροξύτονα, φύλαξ, Άραψ, τάπης
    local args = frame:getParent().args
    local lemma = ""
    if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
        lemma = args['λήμμα']
    else
        PAGENAME = mw.title.getCurrentTitle().text
        --αφαίρεση κενών στην αρχή και στο τέλος
        lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    end
    local stemnumber = 2
    local stem1 = ''
    local stem2 = ''
    local stem4 = ''
    local symf1 = ''
    local symf2 = ''
    if args['α'] ~= 'πλ' then
    	stem1 = mw.ustring.sub(lemma,1,-2)
    	symf1 = mw.ustring.sub(lemma,-1)
    	if symf1 == "ς" then symf2 = "σ" else symf2 = symf1 end
    	if args['θέμα'] ~= null then
    		stem2 = args['θέμα']
    		stem4 = mw.ustring.sub(stem2,1,-2)
    	else
    		stem4 = _module.PerispomeniToOxia(stem1)
    		stem2 = stem4 .. (args['χαρ'] or 'κ')
    	end
    else
    	stem2 = mw.ustring.sub(lemma,1,-3)
    	if args['χαρ'] == null then args['χαρ'] = mw.ustring.sub(stem2,-1,-1) end
    	if args['χαρ'] == "κ" or args['χαρ'] == "χ" or args['χαρ'] == "γ" then
    		symf2="ξ"
    	elseif args['χαρ'] == "π" or args['χαρ'] == "β" or args['χαρ'] == "φ" then
    		symf2="ψ"
    	else symf2="σ" end
    	stem4 = mw.ustring.sub(stem2,1,-mw.ustring.len(args['χαρ'])-1)
    end
    local stem3 = _module.neostonos(_module.removeaccent(stem2))
    args['οε'] = stem1 .. _xk(symf1)
    args['γε'] = stem2 .. _xk('ος')
    args['δε'] = stem2 .. _xk('ι')
    args['αε'] = stem2 .. _xk("α")
    args['κε'] = args['οε']
    if args['χαρ'] == "ντ" then args['κε'] = stem1 .. "ν" end
    args['οπ'] = stem2 .. _xk("ες")
    args['γπ'] = stem3 .. _xk("ων")
    args['δπ'] = stem4 .. _xk(symf2 .. "ι(ν)")
    args['απ'] = stem2 .. _xk("ας")
    args['αδ'] = stem2 .. _xk("ε")
    args['γδ'] = stem3 .. _xk("οιν")
    return frame:preprocess(fulltable2(args))
end

_module.velos = function(frame) -- σιγμόληκτα ουδέτερα, βέλος
    local args = frame:getParent().args
    local lemma = ""
    if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
        lemma = args['λήμμα']
    else
        PAGENAME = mw.title.getCurrentTitle().text
        --αφαίρεση κενών στην αρχή και στο τέλος
        lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    end
    local stemnumber = 3
    if args['α'] == "πλ" then stemnumber = 2 end
    local stem1 = mw.ustring.sub(lemma,1,-stemnumber)
    local stem3 = _module.removeaccent(stem1)
    local stem2 = _module.neostonos(stem3)
    args['οε'] = stem1 .. 'ος'
    args['γε'] = stem2 .. _xk('ους')
    args['δε'] = stem2 .. _xk('ει')
    args['αε'] = args['οε']
    args['κε'] = args['οε']
    args['οπ'] = stem2 .. _xk("η")
    args['γπ'] = stem3 .. _xk("ῶν")
    args['δπ'] = stem2 .. _xk("εσι(ν)")
    args['απ'] = args['οπ']
    args['αδ'] = stem2 .. _xk("ει")
    args['γδ'] = stem3 .. _xk("οῖν")
    return frame:preprocess(fulltable2(args))
end

_module.kreas = function(frame) -- σιγμόληκτα ουδέτερα, κρέας, γεν: κρέως
    local args = frame:getParent().args
    local lemma = ""
    if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
        lemma = args['λήμμα']
    else
        PAGENAME = mw.title.getCurrentTitle().text
        --αφαίρεση κενών στην αρχή και στο τέλος
        lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    end
    local stem1 = ""
    if args['α'] == "πλ" then
    	stem1 = mw.ustring.sub(lemma,1,-2)
    else
    	stem1 = mw.ustring.sub(lemma,1,-3)
    end
   	local stem2 = _module.removeaccent(stem2)
    args['οε'] = stem1 .. 'ας'
    args['γε'] = stem1 .. _xk('ως')
    args['δε'] = stem1 .. _xk('ᾳ')
    args['αε'] = args['οε']
    args['κε'] = args['οε']
    args['οπ'] = stem1 .. _xk("α")
    args['γπ'] = stem2 .. _xk("ῶν")
    args['δπ'] = stem1 .. 'α' .. _xk("σι(ν)")
    args['απ'] = args['οπ']
    args['αδ'] = stem1 .. _xk("α")
    args['γδ'] = stem2 .. _xk("οῖν")
    return frame:preprocess(fulltable2(args))
end

_module.xeimon = function(frame) -- ενρινόληκτα, χειμών-ῶνος, κανών-όνος
    local args = frame:getParent().args
    local args2 =frame.args
    local lemma = ""
    if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
        lemma = args['λήμμα']
    else
        PAGENAME = mw.title.getCurrentTitle().text
        lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    end
    local stemnumber = 3
    if args['α'] == "πλ" then stemnumber = 5 end
    local fon1 = "ῶ"
    local fon2 = "ώ"
    if args2['διπλ'] ~= null then
    	fon1 = "ό" 
    	fon2 = fon1
    end
    local stem1 = mw.ustring.sub(lemma,1,-stemnumber)
    local stem4 = stem1 .. fon1
    local stem3 = stem1 .. fon2 .. 'ν'
    local stem2 = stem4 .. 'ν'
    args['οε'] = stem1 .. 'ών'
    args['γε'] = stem2 .. _xk('ος')
    args['δε'] = stem2 .. _xk('ι')
    args['αε'] = stem2 .. _xk("α")
    args['κε'] = args['οε']
    args['οπ'] = stem2 .. _xk("ες")
    args['γπ'] = stem3 .. _xk("ων")
    args['δπ'] = stem4 .. _xk("σι(ν)")
    args['απ'] = stem2 .. _xk("ας")
    args['αδ'] = stem2 .. _xk("ε")
    args['γδ'] = stem3 .. _xk("οιν")
    return frame:preprocess(fulltable2(args))
end

_module.geiton = function(frame) -- ενρινόληκτα, γείτων-ονος, κώδων-ωνος
    local args = frame:getParent().args
    local args2 =frame.args
    local lemma = ""
    if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
        lemma = args['λήμμα']
    else
        PAGENAME = mw.title.getCurrentTitle().text
        lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    end
    local stemnumber = 3
    if args['α'] == "πλ" then stemnumber = 5 end
    local fon1 = "ω"
    local fon2 = "ώ"
    local stem1 = mw.ustring.sub(lemma,1,-stemnumber)
    local stem2 = _module.removeaccent(stem1)
    local stem3 = stem1
    if args2['διπλ'] ~= null then
    	fon1 = "ο" 
    	fon2 = "ό"
    	if args['δίχρ'] ~= 'β' then
    		stem3 = _module.OxiaToPerispomeni(stem1)
    	end
    end
    if stem1 == "Ἀγαμέμν" then stem3 = "Ἀγάμεμν" end
    if stem1 == "Ἀριστογείτ" then stem3 = "Ἀριστόγειτ" end
    args['οε'] = stem1 .. 'ων'
    args['γε'] = stem1 .. fon1 .. 'ν' .. _xk('ος')
    args['δε'] = stem1 .. fon1 .. 'ν' .. _xk('ι')
    args['αε'] = stem1 .. fon1 .. 'ν' .. _xk("α")
    args['κε'] = stem3 .. fon1 .. 'ν'
    args['οπ'] = stem1 .. fon1 .. 'ν' .. _xk("ες")
    args['γπ'] = stem2 .. fon2 .. 'ν' .. _xk("ων")
    args['δπ'] = stem1 .. fon1 .. _xk("σι(ν)")
    args['απ'] = stem1 .. fon1 .. 'ν' .. _xk("ας")
    args['αδ'] = stem1 .. fon1 .. 'ν' .. _xk("ε")
    args['γδ'] = stem2 .. fon2 .. 'ν' .. _xk("οιν")
    return frame:preprocess(fulltable2(args))
end

return _module