Documentation for this module may be created at Module:Sandbox/Xoristzatziki/klisi/τεκμηρίωση

p = {}
--σταθερές
bgcolor = 'd9ebff'
titlebgcolor = '#A1BDEA'
bordercolor = '#AAAACC'
kataliksicolor = 'DeepPink'
 
-- συναρτήσσεις και μεταβλητές που δεν μπορουν να κληθούν απέξω
-- χρωματισμός κατάληξης
function _xk(kataliksi)
    return '<font style="color:' .. kataliksicolor ..';">' .. kataliksi .. '</font>'
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 = {
    ['Ά'] = 'Α',
    ['ά'] = 'α',
    ['Έ'] = 'Ε',
    ['έ'] = 'ε',
    ['Ή'] = 'Η',
    ['ή'] = 'η',
    ['Ί'] = 'Ι',
    ['ί'] = 'ι',
    ['ΐ'] = 'ϊ',
    ['Ό'] = 'Ο',
    ['ό'] = 'ο',
    ['Ύ'] = 'Υ',
    ['ύ'] = 'υ',
    ['ΰ'] = 'ϋ',
    ['Ώ'] = 'Ω',
    ['ώ'] = 'ω',
}
 
tonismena2 ={
    ['άι'] = 'αϊ',
    ['έι'] = 'εϊ',
    ['όι'] = 'οϊ',
    ['άυ'] = 'αϋ',
    ['έυ'] = 'εϋ',
    ['όυ'] = 'οϋ' 
}
    -- ['ύι'] = 'υϊ', δεν υπάρχει σε ουσιαστικά, μόνο στο επίθετο δρύινος. Αντίθετα, θα βάλει διαλυτικά
    -- στο βούισμα, βουίσματα
 
function p.exeitono(anygreekstring)
    --για κάθε χαρακτήρα
    for codepoint in mw.ustring.gcodepoint( anygreekstring ) do
        --αντικατάστησέ τον με βάση τον πίνακα
        mychar = mw.ustring.char(codepoint)
        convertedchar = tonismena[mychar]            
        --αν βρήκε κάτι για αντικατάσταση
        --είναι δηλαδή τονισμένο γράμμα
        if convertedchar ~= nil then
            --βρήκα τονισμένο
            return true
        end
    end
    return false
end
 
function p.removeaccent(stem)
    --για κάθε χαρακτήρα
    wordproduced = ''
    --για κάθε συνδυασμό γραμμάτων που μπορεί να χρειαστούν διαλυτικά
    for diplotonismeno, neatimh in pairs(tonismena2) do
        arxi, telos = mw.ustring.find(stem, diplotonismeno)
        if arxi ~= nil then
            wordproduced = mw.ustring.gsub(stem, diplotonismeno, neatimh, 1) --μια φορά αντικατάσταση
            --βρέθηκε ο τόνος και αφαιρέθηκε
            return wordproduced
        end        
    end
    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
 
-- Η συνάρτηση αρχίζει από το τελευταίο γράμμα του θέματος και πηγαίνει προς το πρώτο. 
-- Όταν συναντήσει το πρώτο (άτονο) φωνήεν, το τονίζει και τέλος
-- Εννοείται ότι η μεταβλητή stem δεν πρέπει να περιέχει τονισμένα φωνήεντα.
 
 
function p.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
 
--δεν μπορεί να κληθεί απέξω
maintable = function (args)
    local stitlestr = ''
    local ptitlestr = ''
    local onomenstr = ''
    local onomplstr = ''
    local genenstr = ''
    local genplstr = ''
    local aitenstr = ''
    local aitplstr = ''
    local klenstr = ''
    local klplstr = ''
    local paratirisi = ''
    local hassingular = true --(args['εν'] ~= nil)
    if args['α'] == "πλ" then hassingular = false end
    local hasplural = true -- (args['πλ'] ~= nil)
    if args['α'] == "εν" then hasplural = false end
    if exeikati(args['παρατήρηση']) then        
        --mw.log('para')
        paratirisi = [=[</tr colspan="4" align="left" style="background:#d9ebff; font-size: 90%; font-style: italic;">]=] 
        paratirisi = paratirisi .. '<td>'.. args['παρατήρηση'] .. '</td>'
    end
    paratirisi = paratirisi .. '</tr>' 
--    if paratirisi == nil then paratirisi =
    if hassingular then
        stitlestr =  [=[<td bgcolor="#A1BDEA" colspan="1" align="center">'''''[[ενικός]]'''''</td>]=]
        onomenstr =  [=[<td align="left">]=] .. args['οε'] ..  '</td>'
        genenstr =  [=[<td align="left">]=] .. args['γε'] ..  '</td>'
        aitenstr =  [=[<td align="left">]=] .. args['αε'] ..  '</td>'
        klenstr =  [=[<td align="left">]=] .. args['κε'] ..  '</td>'
    end
    if hasplural then
        ptitlestr =  [=[<td bgcolor="#A1BDEA" colspan="1" align="center">'''''[[πληθυντικός]]'''''</td>]=]
        onomplstr =  [=[<td align="left">]=] .. args['οπ'] ..  '</td>'
        genplstr =  [=[<td align="left">]=] .. args['γπ'] ..  '</td>'
        aitplstr =  [=[<td align="left">]=] .. args['απ'] ..  '</td>'
        klplstr =  [=[<td align="left">]=] .. args['κπ'] ..  '</td>'
    end
 
    return [=[<table style="float:right;border:1px solid #AAAACC;margin-left:0.5em;margin-bottom:0.5em;text-align:right;" rules="all" cellpadding="3" cellspacing="0"><tr><td bgcolor="#A1BDEA">'''πτώση'''</td>]=] ..  stitlestr .. ptitlestr .. [=[
<tr><td bgcolor="#BED9ED">'''''[[ονομαστική]]'''''</td>]=] .. onomenstr .. onomplstr .. [=[</tr>
<tr><td bgcolor="#BED9ED">'''''[[γενική]]'''''</td>]=] .. genenstr .. genplstr .. [=[</tr>
<tr><td bgcolor="#BED9ED">'''''[[αιτιατική]]'''''</td>]=] .. aitenstr .. aitplstr .. [=[</tr>
<tr><td bgcolor="#BED9ED">'''''[[κλητική]]'''''</td>]=] .. klenstr .. klplstr .. paratirisi .. [=[</table>]=]

end
 
------------------
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 stem = {}
    stem["1"] = mw.ustring.sub(lemma,1,-stemnumber-1)
    stem["2"] = p.removeaccent(stem["1"])
    stem["3"] = p.neostonos(stem["2"])
 
    for  i, ptwsi in ipairs({'οε', 'γε', 'γε2', 'αε', 'κε', 'κε2', 'κε0', 'οπ', 'οπ2', 'γπ', 'γπ0', 'γπ2', 'απ', 'απ2'}) do
       if args[ptwsi .. 'θ'] == nil then args[ptwsi .. 'θ'] = "1" end
    end
    for  i, ptwsi in ipairs({'γε', 'γε2', 'γπ', 'γπ0', 'γπ2'}) do
       if args[ptwsi] ~= nil then
          if p.exeitono(args[ptwsi]) then args[ptwsi .. 'θ'] = "2" end
       end
    end
    if args['οπ'] == "άδες" then 
    args['οπθ'] = "2"
	args['απθ'] = "2"
    end
    if args['οπ2'] == "άδες" or args['οπ2'] == "αίοι" then 
	args['οπ2θ'] = "2"
	args['απ2θ'] = "2"
    end
    if args['απ'] == nil then 
       args['απ'] = args['οπ']
       args['απθ'] = args['οπθ']
    end
    if args['απ2'] == nil then
       args['απ2'] = args['οπ2']
       args['απθ2'] = args['οπθ2']
    end
    if args['κε'] == nil then args['κε'] = args['αε'] end
 
    args['οε'] = stem[args['οεθ']] .. _xk( args['οε'])
    -- Γενική ενικού
    if (args['γε'] == "-" or args['γε'] == "" or args['γε'] == nil) then
        args['γε'] = ""
    else
        args['γε'] = stem[args['γεθ']] .. _xk( args['γε'])
    end
    if args['γε2'] ~=nil and args['γε2'] ~= "" and args['γε2'] ~= "-" then
        args['γε2'] = "<br />& " .. stem[args['γε2θ']] .. _xk( args['γε2'])
    else 
        args['γε2'] = ''
    end
    args['γε'] = args['γε'] .. args['γε2']
 
    args['αε'] = stem[args['αεθ']] .. _xk( args['αε'])
 
    ----ΚΛΗΤΙΚΗ ΕΝΙΚΟΥ
    if args['κε0'] ~= nil then
        args['κε'] = '(' .. stem[args['κε0θ']] .. _xk( args['κε0']) .. ')'
    else
	args['κε'] = stem[args['κεθ']] .. _xk( args['κε'])
    end
    if args['κε2'] ~=nil and args['κε2'] ~= "" and args['κε2'] ~= "-" then
        args['κε2'] = "<br />" .. stem[args['κε2θ']] .. _xk( args['κε2']) .. '*'
    else
        args['κε2'] = ""
    end
    args['κε'] = args['κε'] .. args['κε2']
 
    --Ονομ. πληθ
    args['οπ'] = stem[args['οπθ']] .. _xk( args['οπ'])
    if args['οπ2'] ~=nil and args['οπ2'] ~= "" and args['οπ2'] ~= "-" then
        args['οπ2'] = "<br />& " .. stem[args['οπ2θ']] .. _xk( args['οπ2'])
    else
        args['οπ2'] = ''
    end
    args['οπ'] = args['οπ'] .. args['οπ2']
    args['κπ'] = args['οπ']
 
    --γενική πληθυντικού
    if (args['γπ'] == "-" or args['γπ'] == "" or args['γπ'] == nil) then
        args['γπ'] = ""
    else
        args['γπ'] = stem[args['γπθ']] .. _xk( args['γπ'])
    end
    if args['γπ0'] ~= nil then
        args['γπ'] = '(' .. stem[args['γπ0θ']] .. _xk( args['γπ0']) .. ')'
    end
    if args['γπ2'] ~=nil and args['γπ2'] ~= "" and args['γπ2'] ~= "-" then
        args['γπ2'] = stem[args['γπ2θ']] .. _xk( args['γπ2'])
        if args['γπ'] ~= "" then 
	        args['γπ2'] = "<br />& " .. args['γπ2']
	    end
    else
        args['γπ2'] = ""
    end
    args['γπ'] = args['γπ'] .. args['γπ2']
 
    --Αιτιατική πληθ.
    args['απ'] = stem[args['απθ']] .. _xk( args['απ'])
    if args['απ2'] ~=nil and args['απ2'] ~= "" and args['απ2'] ~= "-" then
        args['απ2'] = "<br />& " .. stem[args['απ2θ']] .. _xk( args['απ2'])
    else
        args['απ2'] = ''
    end
    args['απ'] = args['απ'] .. args['απ2']
 
    return maintable(args)
end
 
 
--κλίση ουδετέρων ουσιαστικών που παίρνουν επιπλέον σύμφωνο στο «θέμα», τσάι, προϊόν, μέλλον
klisi2 = function(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 = 0
    if args['α'] ~= "πλ" then
        stemnumber = tonumber(mw.ustring.len(args['οε']))
    else
        stemnumber = tonumber(mw.ustring.len(args['οπ'])) +1
    end
    local stem = {}
    stem["1"] = mw.ustring.sub(lemma,1,-stemnumber-1)
    stem["2"] = p.removeaccent(stem["1"])
    stem["3"] = p.neostonos(stem["2"])
 
    args['οε'] = stem[args['οεθ']] .. _xk( args['οε'])
    args['γε'] = stem[args['γεθ']] .. args['πρόσφ'] .. _xk( args['γε'])
    args['αε'] = args['οε']
    args['κε'] = args['οε']
    args['οπ'] = stem[args['οπθ']] .. args['πρόσφ'] .. _xk( args['οπ'])
    args['γπ'] = stem[args['γπθ']] .. args['πρόσφ'] .. _xk( args['γπ'])
    args['απ'] = args['οπ']
    args['κπ'] = args['οπ']
 
    return maintable(args)
end
 
--Συναρτήσεις που παίρνουν παράμετρο το frame
--διάμετρος : μια ιδιαίτερη περίπτωση
p['διάμετρος'] = 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 = p.removeaccent(stem1)
    local stem3 = p.neostonos(stem2)
 
    args['οε'] = stem1 .. _xk("ος")
    args['γε'] = stem3 .. _xk("ου")
    args['αε'] = stem1 .. _xk("ο")
    args['κε'] = "(" .. stem1 .. _xk("ο") .. ")"
    args['οπ'] = stem1 .. _xk("οι") .. " (" .. stem1 .. _xk("ες") .. ")"
    args['γπ'] = stem3 .. _xk("ων")
    args['απ'] = stem3 .. _xk("ους") .. " (" .. stem1 .. _xk("ες") .. ")"
    args['κπ'] = stem1 .. _xk("οι")
 
    return frame:preprocess(maintable(args))
end

p.export = function (frame)
	local parent = frame:getParent()
	--local parentname = parent:GetName()
	--local templatename = frame:GetName()
	--local parentname = parent:getTitle()
	--local templatename = frame:getTitle()
	local templatename = frame:getParent():getTitle()
	--return '#' .. parentname.. '#' .. templatename .. '#'
	return  mw.ustring.sub(templatename, mw.ustring.len('Πρότυπο:el-κλίσ-')+2,-2)
end

-- Εδώ αρχίζουν οι καταλήξεις των επιμέρους προτύπων
 
p['αφέντης'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ης"
    args['γε'] = "η"
    args['αε'] = "η"
    args['οπ'] = "ες"
    args['γπ'] = "ών"
    args['οπ2'] = "άδες"
    args['γπ2'] = "άδων"
    args['απ2'] = "άδες"
    return frame:preprocess(klisi1(args))
end
 
p['αγώνας'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ας"
    args['γε'] = "α"
    args['αε'] = "α"
    args['κε'] = "α"
    args['οπ'] = "ες"
    if args['γπ'] == nil then args['γπ'] = "ων" end
    args['απ'] = "ες"
    return frame:preprocess(klisi1(args))
end
 
p['αγυιά'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ά"
    args['γε'] = "ᾶς"
    args['αε'] = "άν"
    args['κε'] = "ά"
    args['οπ'] = "αί"
    args['γπ'] = "ῶν"
    args['απ'] = "άς"
    return frame:preprocess(klisi1(args))
end
 
p['αιλουροειδές'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ές"
    args['γε'] = "ούς"
    args['αε'] = "ές"
    args['οπ'] = "ή"
    args['γπ'] = "ών"
    return frame:preprocess(klisi1(args))
end
 
p['αλεπού'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ού"
    args['γε'] = "ούς"
    args['αε'] = "ού"
    args['οπ'] = "ούδες"
    args['γπ'] = "ούδων"
    return frame:preprocess(klisi1(args))
end
 
p['άγγελος'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ος"
    args['γε'] = "ου"
    args['αε'] = "ο"
    args['κε'] = "ε"
    args['οπ'] = "οι"
    args['γπ'] = "ων"
    args['απ'] = "ους"
    args['γεθ'] = "3"
    args['γπθ'] = "3"
    args['απθ'] = "3"
    return frame:preprocess(klisi1(args))
end
 
p['μπαλωματής'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ής"
    args['γε'] = "ή"
    args['αε'] = "ή"
    args['οπ'] = "ήδες"
    args['γπ'] = "ήδων"
    return frame:preprocess(klisi1(args))
end
 
p['δέσιμο'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ο"
    args['γε'] = "ατος"
    args['αε'] = "ο"
    args['οπ'] = "ατα"
    args['γπ'] = "άτων"
    args['γεθ'] = "3"
    args['οπθ'] = "3"
    args['απθ'] = "3"
    return frame:preprocess(klisi1(args))
end
 
p['δρόμος'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ος"
    args['γε'] = "ου"
    args['αε'] = "ο"
    args['κε'] = "ε"
    args['οπ'] = "οι"
    args['γπ'] = "ων"
    args['απ'] = "ους"
    return frame:preprocess(klisi1(args))
end
 
p['ηχώ'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ώ"
    args['γε'] = "ώς"
    args['γε2'] = "ούς"
    args['αε'] = "ώ"
    args['οπ'] = "οί"
    args['απ'] = "ούς"
    args['α'] = "εν"
    return frame:preprocess(klisi1(args))
end
 
p['έδαφος'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ος"
    args['γε'] = "ους"
    args['αε'] = "ος"
    args['οπ'] = "η"
    if args['γπ'] == nil then args['γπ'] = "ών" end
    args['γεθ'] = "3"
    args['οπθ'] = "3"
    args['απθ'] = "3"
    return frame:preprocess(klisi1(args))
end
 
p['ελπίδα'] = function(frame)
    local args = frame:getParent().args
    local arg2 = frame.args
    args['οε'] = "α"
    args['γε'] = "ας"
    args['αε'] = "α"
    args['οπ'] = "ες"
    if arg2['πείνα'] == nil and args['γπ'] == nil then args['γπ'] = "ων" end
    return frame:preprocess(klisi1(args))
end
 
p['έρημος'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ος"
    args['γε'] = "ου"
    args['αε'] = "ο"
    args['κε0'] = "o"
    args['οπ'] = "οι"
    args['γπ'] = "ων"
    args['απ'] = "ους"
    args['γεθ'] = "3"
    args['γπθ'] = "3"
    args['απθ'] = "3"
    return frame:preprocess(klisi1(args))
end
 
p['Φρόσω'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ω"
    args['γε'] = "ως"
    args['αε'] = "ω"
    args['οπ'] = "ΧΧ"
    args['α'] = "εν"
    return frame:preprocess(klisi1(args))
end
 
p['φύλακας'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ας"
    args['γε'] = "α"
    args['αε'] = "α"
    args['οπ'] = "ες"
    args['γπ'] = "ων"
    args['γπθ'] = "3"
    return frame:preprocess(klisi1(args))
end
 
p['γέρος'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ος"
    args['γε'] = "ου"
    args['αε'] = "ο"
    args['οπ'] = "οι"
    args['γπ'] = "ων"
    args['απ'] = "ους"
    return frame:preprocess(klisi1(args))
end
 
p['γιαγιά'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ά"
    args['γε'] = "άς"
    args['αε'] = "ά"
    args['οπ'] = "άδες"
    args['γπ'] = "άδων"
    return frame:preprocess(klisi1(args))
end
 
p['γυαλάκιας'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ιας"
    args['γε'] = "ια"
    args['αε'] = "ια"
    args['οπ'] = "ηδες"
    if args['γπ'] == nil then args['γπ'] = "ηδων" end
    return frame:preprocess(klisi1(args))
end
 
p['ιππέας'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "έας"
    args['γε'] = "έα"
    args['αε'] = "έα"
    args['οπ'] = "είς"
    args['γπ'] = "έων"
    if args['2gen'] == "1" then args['γε2'] = "έως" end
    return frame:preprocess(klisi1(args))
end
 
p['ισχύς'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ς"
    args['γε'] = "ος"
    args['αε'] = ""
    args['κε'] = ""
    args['οπ'] = "ες"
    args['γπ'] = "ων"
    args['απ'] = "ς"
    return frame:preprocess(klisi1(args))
end
 
p['καφές'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ές"
    args['γε'] = "έ"
    args['αε'] = "έ"
    args['οπ'] = "έδες"
    args['γπ'] = "έδων"
    return frame:preprocess(klisi1(args))
end
 
p['καρδιά'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ά"
    args['γε'] = "άς"
    args['αε'] = "ά"
    args['οπ'] = "ές"
    if args['γπ'] == nil then args['γπ'] = "ών" end
    return frame:preprocess(klisi1(args))
end
 
p['καρδινάλιος'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ος"
    args['γε'] = "ου"
    args['γε2'] = "ου"
    args['αε'] = "ο"
    args['κε'] = "ε"
    args['οπ'] = "οι"
    args['γπ'] = "ων"
    args['απ'] = "ους"
    args['γπ2'] = "ων"
    args['απ2'] = "ους"
    args['γεθ'] = "3"
    args['γπθ'] = "3"
    args['απθ'] = "3"
    return frame:preprocess(klisi1(args))
end
 
p['κόντες'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ες"
    args['γε'] = "ε"
    args['αε'] = "ε"
    args['οπ'] = "ηδες"
    args['γπ'] = "ηδων"
    return frame:preprocess(klisi1(args))
end
 
p['λαχειοπώλης'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ης"
    args['γε'] = "η"
    args['αε'] = "η"
    args['οπ'] = "ες"
    if args['γπ'] == nil then args['γπ'] = "ών" end
    args['οπ2'] = "ηδες"
    args['γπ2'] = "ηδων"
    return frame:preprocess(klisi1(args))
end
 
p['λύση'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "η"
    args['γε'] = "ης"
    args['γε2'] = "εως"
    args['αε'] = "η"
    args['οπ'] = "εις"
    args['γπ'] = "εων"
    args['γε2θ'] = "3"
    args['οπθ'] = "3"
    args['γπθ'] = "3"
    return frame:preprocess(klisi1(args))
end
 
p['μανάβης'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ης"
    args['γε'] = "η"
    args['αε'] = "η"
    args['οπ'] = "ηδες"
    args['γπ'] = "ηδων"
    args['οπθ'] = "3"
    args['γπθ'] = "3"
    if args['2πλ'] == "1" then
        args['οπ2'] = "αίοι"
        args['γπ2'] = "αίων"
        args['απ2'] = "αίους"
        --TODO τσοπάνης -ηδες - αραίοι
        --if args['προσφ'] ~= nil then 
    end
    return frame:preprocess(klisi1(args))
end
 
p['μίλι'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ι"
    args['γε'] = "ίου"
    args['αε'] = "ι"
    args['οπ'] = "ια"
    args['γπ'] = "ίων"
    return frame:preprocess(klisi1(args))
end
 
p['ναύτης'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ης"
    args['γε'] = "η"
    args['αε'] = "η"
    args['οπ'] = "ες"
    if args['γπ'] == nil then args['γπ'] = "ών" end
    return frame:preprocess(klisi1(args))
end
 
p['νίκη'] = function(frame)
    local args = frame:getParent().args
    local arg2 = frame.args
    args['οε'] = "η"
    args['γε'] = "ης"
    args['αε'] = "η"
    args['οπ'] = "ες"
    if arg2['σκόνη'] ~= nil then args['γπ0'] = "ών" end
    if arg2['βιασύνη'] ~= nil then args['γπ0'] = "ων" end
    if arg2['ζάχαρη'] == nil then args['γπ'] = "ών" end
    return frame:preprocess(klisi1(args))
end
 
p['νικητής'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ής"
    args['γε'] = "ή"
    args['αε'] = "ή"
    args['οπ'] = "ές"
    args['γπ'] = "ών"
    return frame:preprocess(klisi1(args))
end
 
p['νότα'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "α"
    args['γε'] = "ας"
    args['αε'] = "α"
    args['οπ'] = "ες"
    args['γπ0'] = "ών"
    return frame:preprocess(klisi1(args))
end
 
p['όνομα'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "α"
    args['γε'] = "ατος"
    args['αε'] = "α"
    args['οπ'] = "ατα"
    args['γπ'] = "άτων"
    args['γεθ'] = "3"
    args['οπθ'] = "3"
    return frame:preprocess(klisi1(args))
end
 
p['ουρανός'] = function(frame)
    local args = frame:getParent().args
    local arg2 = frame.args
    args['οε'] = "ός"
    args['γε'] = "ού"
    args['αε'] = "ό"
    if arg2['οδός'] == nil then
       if args['κε'] == nil then args['κε'] = "έ" end
    else
       args['κε0'] = "ό"
    end
    args['οπ'] = "οί"
    args['γπ'] = "ών"
    args['απ'] = "ούς"
    return frame:preprocess(klisi1(args))
end
 
p['παιδί'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ί"
    args['γε'] = "ιού"
    args['αε'] = "ί"
    args['οπ'] = "ιά"
    args['γπ'] = "ιών"
    return frame:preprocess(klisi1(args))
end
 
p['παιδάκι'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ι"
    args['αε'] = "ι"
    args['οπ'] = "ια"
    return frame:preprocess(klisi1(args))
end
 
p['πεύκο'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ο"
    args['γε'] = "ου"
    args['αε'] = "ο"
    args['οπ'] = "α"
    if args['γπ'] == nil then args['γπ'] = "ων" end
    return frame:preprocess(klisi1(args))
end
 
p['πραματευτής'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ής"
    args['γε'] = "ή"
    args['αε'] = "ή"
    args['οπ'] = "ές"
    args['γπ'] = "ών"
    args['οπ2'] = "άδες"
    args['γπ2'] = "άδων"
    return frame:preprocess(klisi1(args))
end
 
p['πρόσωπο'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ο"
    args['γε'] = "ου"
    args['αε'] = "ο"
    args['οπ'] = "α"
    args['γπ'] = "ων"
    args['γεθ'] = "3"
    args['γπθ'] = "3"
    return frame:preprocess(klisi1(args))
end
 
p['πρόβατο'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ο"
    args['γε'] = "ου"
    args['γε2'] = "ου"
    args['αε'] = "ο"
    args['οπ'] = "α"
    args['γπ'] = "ων"
    args['γπ2'] = "ων"
    args['γεθ'] = "3"
    args['γπθ'] = "3"
    return frame:preprocess(klisi1(args))
end
 
p['ψυχή'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ή"
    args['γε'] = "ής"
    args['αε'] = "ή"
    args['οπ'] = "ές"
    if args['γπ'] == nil then args['γπ'] = "ών" end
    return frame:preprocess(klisi1(args))
end
 
p['ρήγας'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ας"
    args['γε'] = "α"
    args['αε'] = "α"
    args['οπ'] = "άδες"
    args['γπ'] = "άδων"
    return frame:preprocess(klisi1(args))
end
 
p['Ρηνιώ'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ώ"
    args['γε'] = "ώς"
    args['αε'] = "ώ"
    args['οπ'] = "XX"
    args['α'] = "εν"
    return frame:preprocess(klisi1(args))
end
 
p['σάλπιγγα'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "α"
    args['γε'] = "ας"
    args['αε'] = "α"
    args['οπ'] = "ες"
    args['γπ'] = "ων"
    args['γπθ'] = "3"
    if args['2gen'] == "1" then args['γπ2'] = "ων"
    end
    return frame:preprocess(klisi1(args))
end
 
p.sfoungaras = function(frame)
    local args = frame:getParent().args
    args['οε'] = "άς"
    args['γε'] = "ά"
    args['αε'] = "ά"
    args['οπ'] = "άδες"
    args['γπ'] = "άδων"
    return frame:preprocess(klisi1(args))
end
 
p['ταμίας'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ας"
    args['γε'] = "α"
    args['αε'] = "α"
    args['οπ'] = "ες"
    args['γπ'] = "ών"
    return frame:preprocess(klisi1(args))
end
 
p['τέρας'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ας"
    args['γε'] = "ατος"
    args['αε'] = "ας"
    args['οπ'] = "ατα"
    args['γπ'] = "άτων"
    return frame:preprocess(klisi1(args))
end
 
p['θάλασσα'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "α"
    args['γε'] = "ας"
    args['αε'] = "α"
    args['οπ'] = "ες"
    args['γπ'] = "ών"
    return frame:preprocess(klisi1(args))
end
 
p['τραγούδι'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ι"
    args['γε'] = "ιού"
    args['αε'] = "ι"
    args['οπ'] = "ια"
    args['γπ'] = "ιών"
    return frame:preprocess(klisi1(args))
end
 
p['βουνό'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ό"
    args['γε'] = "ού"
    args['αε'] = "ό"
    args['οπ'] = "ά"
    args['γπ'] = "ών"
    return frame:preprocess(klisi1(args))
end
 
-- με πρόσθετο σύμφωνο γ ή τ
p['τσάι'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = "ι"
    args['γε'] = "ιού"
    args['οπ'] = "ια"
    args['γπ'] = "ιών"
    args['οεθ'] = "1"
    args['γεθ'] = "2"
    args['οπθ'] = "1"
    args['γπθ'] = "2"
    args['πρόσφ'] ="γ"
    return frame:preprocess(klisi2(args))
end
 
p['παρόν'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = ""
    args['γε'] = "ος"
    args['οπ'] = "α"
    args['γπ'] = "ων"
    args['οεθ'] = "1"
    args['γεθ'] = "1"
    args['οπθ'] = "1"
    args['γπθ'] = "1"
    args['πρόσφ'] ="τ"
    return frame:preprocess(klisi2(args))
end
 
p['μέλλον'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = ""
    args['γε'] = "ος"
    args['οπ'] = "α"
    args['γπ'] = "ων"
    args['οεθ'] = "1"
    args['γεθ'] = "1"
    args['οπθ'] = "1"
    args['γπθ'] = "3"
    args['πρόσφ'] ="τ"
    return frame:preprocess(klisi2(args))
end
 
p['ον'] = function(frame)
    local args = frame:getParent().args
    args['οε'] = ""
    args['γε'] = "ος"
    args['οπ'] = "α"
    args['γπ'] = "ων"
    args['οεθ'] = "1"
    args['γεθ'] = "3"
    args['οπθ'] = "3"
    args['γπθ'] = "3"
    args['πρόσφ'] ="τ"
    return frame:preprocess(klisi2(args))
end
 
return p