Module:Wt/grc/κλίση

From Wikimedia Incubator

Documentation for this module may be created at Module:Wt/grc/κλίση/doc

--TODO:
--στις επιμέρους συναρτήσεις τῶν κλίσεων
--να αντικατασταθοῦν οι πίνακαι wiki με πίνακες html
--ώστε να αποφύγουμε τῆν κλήση τοῦ frame:preprocess ποῦ είναι βαρύ
--TODO:
--να βρεθεί τρόπος ώστε να επιστρέφονται οι τοπικοί παράμετροι δημιουργίας τοῦ πίνακα
--(οε,γε,αε,κε κλπ)
--για να μπορούμε να παίρνουμε λ.χ. τῆ γενικῆ πληθυντικού τῶν "μερών τοῦ λόγου"
--(ουσιαστικῶν,επιθέτων,κλπ.)
--χωρίς να εμφανίζουμε τον πίνακα
export = {}

local Lf = {} -- local functions
local Ld = {['main'] = 1, } -- local params and constants

Ld['μέρη τοῦ λόγου'] = require('Module:Wt/grc/μέρη τοῦ λόγου')
Ld['υπόδειξη'] = 'main'
Ld['κατηγορίες για σφάλματα'] = '[[Category:Wt/grc/Σελίδαι με σφάλμα στον κωδικόν γλώσσας]]'

Lf['σφάλμα'] = function(errstring)
    output = ''
    errstring = errstring or ''
    if errstring ~= '' then
        output = '<font class="error">' .. errstring .. '</font>'
    end
    output = output .. Ld['υπόδειξη'] .. Ld['κατηγορίες για σφάλματα']
    return output 
end

--Τα Πρότυπα(Templates) κλίσης που έχουν δημιουργηθεί (σχεδόν όλα) μέχρι σήμερα ακουλουθοῦν τῆν εξῆς ονοματοδοσία:
--Τὸ όνομα του προτύπου(Template) αποτελείται απόν τρία μέρη:
--1. Ο κωδικός τῆς γλώσσας (ποῦ μπορεί να περιέχει παύλες όπως τὸ zh-min-nan)
--2. Τὸ ένθεμα:  -κλίσ-
--Και τὸ πρότυπο (λέξη-λήμμα) σύμφωνα με τὸ οποίο κλίνεται τὸ λήμμα.

--Ο πίνακας splittednames θα περιέχει τον κωδικόν γλώσσας
--και τὸ μέρος τοῦ λόγου
Lf['main'] = function(args)
	local lc = Lf['main']
    local protypo = Lf['main']
    local allargs = frame:getParent().args
    if protypo == '' then return Lf['σφάλμα']('Σφάλμα! Η κλήση δεν έγινε μέσω προτύπου.') end
    local splittednames = Lf['χωρισμός σε μέρη'](protypo,'%-κλίσ%-')
    --θεωρητικὴ τὸ -κλίσ- δεν μπορεί να είναι ούτε iso γλώσσας οῦτε υποδειγματικόν όνομα κλίσης
    --για τῆν περίπτωση ποῦ κάποιος έχει δημιουργήσει πρότυπο τὸ οποίο περιέχει  τὸ -κλισ-
    --ῶς iso γλώσσας ῆ ῶς υποδειγματικόν όνομα κλίσης ῆ δεν έχει βάλει καν τὸ -κλισ-
    --ελέγχουμε αν ήρθαν 2 ακριβώς
    if #splittednames ~= 2 then
        Ld['υπόδειξη'] = 'Τὸ Πρότυπο κλίσης θα πρέπει να αρχίζει με κωδικόν γλώσσας, να ακολουθεί τὸ -κλισ- και μετά ένα όνομα-υπόδειγμα.'
        return Lf['σφάλμα']('Σφάλμα! Λάθος στο όνομα του προτύπου κλίσης.')
    end
    allargs['isoγλώσσας'] = splittednames[1]
    allargs['τύπος'] = splittednames[2]
    local page = mw.title.getCurrentTitle()
    page.name = page.text:match( "^%s*(.-)%s*$" )
    --local args['όνομα'] = mw.title.getCurrentTitle().text:match( "^%s*(.-)%s*$" )
    --αν ῆ σελίδα είναι σε κύριο ονοματοχώρο θα πρέπει υποχρεωτικὴ να χρησιμοποιήσουμε τὸ όνομα τοῦ άρθρου
    --αν κάποιο άρθρο χρειάζεται να έχει κλίση άλλου άρθρου εῖτε θα παραπέμπουμε εκεί
    --ῆ θα βρούμε μελλοντικά άλλο τρόπο
    if page.namespace == 0 then
        allargs['λήμμα'] = page.name
        allargs['ονοματοχώρος'] = 0
    else
    	--Εδώ μπορεί να γίνεται έλεγχος αν προέρχεται απόν πρότυπο οδηγιῶν.
    	--Θα πρέπει επίσης να προστεθεί παράμετρος στον κάθε "τύπο" (στὸ submodule) για τὸ γένος
    	--ώστε να προστίθεται σωστᾶ και ῆ κατηγορία.
    	lc['λήμμα'] = frame:getParent().args['λήμμα'] or ''
        if lc['λήμμα'] == '' then
            return Lf['σφάλμα']('Σφάλμα! δεν δόθηκε η λέξη για την κλίση.')
        else
        	allargs['λήμμα'] = lc['λήμμα']
        end
    end
    --αν τὸ υποδειγματικόν όνομα κλίσης αρχίζει και τελειώνει σε μονά εισαγωγικά
    --αφαίρεσέ τα.
    if string.sub(allargs['τύπος'],1,1) == "'" and string.sub(allargs['τύπος'],-1) =="'" then
        allargs['τύπος'] = mw.ustring.sub(allargs['τύπος'],2,-2)
    end
    allargs['κατηγορία κλίσης'] = ''
    allargs['τίτλος αρθρώματος'] = ''
    --αν υπάρχει τὸ συγκεκριμένο όνομα προτύπου κλίσης
    --θα επιστρέψει στις παραμέτρους και τὸ "τίτλοςαρθρώματος"
    if Lf['βρες το όνομα του αρθρώματος'](allargs) then
        --κάλεσε τῆ συνάρτηση κλίσης,
        --checkpoint = checkpoint .. '#in#'
        mdl = require(allargs['τίτλος αρθρώματος'])
        --checkpoint = checkpoint .. "*" .. allargs['τίτλος αρθρώματος'] .. "*"
        output = mdl[allargs['τύπος']](allargs)
        --και επέστρεψε.
        --Τὸ τῖ θα επιστραφεί (κείμενο html, preprocessed ῆ απλό) ας τὸ ξεκαθαρίσουμε στὸ καλούμενο άρθρωμα.
        return frame:preprocess(output)
    end
    --επέστρεψε σφάλμα
    return Lf['σφάλμα']('Σφάλμα! Παρουσιάστηκε πρόβλημα στὸ Module για τῆν κλίση.')
end

--βρες το όνομα του Προτύπου που κάλεσε το Module
--αλλά μόνο αν κληθηκε από σελίδα η οποία κάλεσε το πρότυπο
Lf['βρες το όνομα του Προτύπου'] = function(frame)
    if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
        local templateobj = mw.title.new(frame:getParent():getTitle())
        if templateobj.namespace == 10 then -- NS_TEMPLATE
            return templateobj.text:match( "^%s*(.-)%s*$" )
        else
            return nil
        end
    else
        return nil
    end
end

Lf['βρες το όνομα του αρθρώματος'] = function(args)
    --για κάθε "μέρος του λόγου"
    --checkpoint = checkpoint .. '#inβρες το όνομα του αρθρώματος#'
    for code, data in pairs(Ld['μέρη τοῦ λόγου']) do
        --δημιούργησε όνομα αντίστοιχου αρθρώματος
        local tmpmodulename = "Module:Wt/grc/κλίση/" .. args['isoγλώσσας'] .. '/' .. code
        --δες αν υπάρχει τέτοιο άρθρωμα
        if Lf['αν υπάρχει το άρθωμα'](tmpmodulename) then
            --δες αν έχει υπάρχει εκεί αυτό το υπόδειγμα κλίσης
            local test1 = Lf['αν υπάρχει το υπόδειγμα'](tmpmodulename, args['τύπος'])
            if  test1 == true then
                --πρόσθεσε στις παραμέτρους και το όνομα για την κατηγορία κλίσης
                args['κατηγορία κλίσης'] = data['κατηγορία']
                args['τίτλος αρθρώματος'] = "Module:Wt/grc/κλίση/" .. args['isoγλώσσας'] .. '/' .. code
                --και επέστρεψε ΑΛΗΘΕΙΑ
                return true
            end
        end
    end
    --αλλιώς σβήσε τη μεταβλητή με το όνομα και επέστρεψε ΨΕΜΑ
    args['τίτλος αρθρώματος'] = nil
    return false
end

Lf['αν υπάρχει το υπόδειγμα'] = function(tmpmodulename, tmptype)
    --ήδη ελέγξαμε ότι υπάρχει το άρθρωμα π.χ. Module:Wt/grc/κλίση/grc/ουσιαστικόν
    --το φορτώνουμε και αναζητάμε αν υπάρχει η συνάρτηση
    local tmprequest = require(tmpmodulename)
    --θα πρέπει να είναι συνάρτηση
    if type(tmprequest[tmptype]) =='function' then
        return true
    else
        return false
    end
end

Lf['αν υπάρχει το άρθωμα'] = function(modulefulltitle)
    local ok, err = pcall(require, modulefulltitle)
    if ok then
        return true
    else
        return false
    end
end

Lf['χωρισμός σε μέρη'] = function(s, inSplitPattern, outResults )
   if not outResults then
      outResults = {}
   end
   local theStart = 1
   local theSplitStart, theSplitEnd = mw.ustring.find( s, inSplitPattern, theStart )
   while theSplitStart do
      table.insert( outResults, mw.ustring.sub( s, theStart, theSplitStart-1 ) )
      theStart = theSplitEnd + 1
      theSplitStart, theSplitEnd = mw.ustring.find( s, inSplitPattern, theStart )
   end
   table.insert( outResults, mw.ustring.sub( s, theStart ) )
   return outResults
end

--Module:Wt/grc/κλίση/grc/ουσιαστικόν (από [[Module:Wt/grc/κλίση]])
--[=[
	Module για τη δημιουργία πινάκων κλίσης ουσιαστικών νέων ελληνικών
	Καλείται από διάφορα πρότυπα του τύπου Πρότυπο:el-κλίσ-'ωωωωω'
	για κάθε είδος κλίσης
	
	Αυτό το Module δημιουργήθηκε και βασίστηκε στην εργασία των Flyax και Xoristzatziki έως το 2018.
	Από το 2019 και μετά, προστέθηκαν λειτουργίες.
			1. Αφανείς σύνδεσμοι στους κλιτικούς τύπους
			2. Ονομαστική παράμετρος κατ= (για δημιουργία Κατηγοριών ποικιλιών) 
			και υποκατ= (δημιουργία συνοδευτικών γενικών κατηγοριών)
			και τύπος0= χωρίς αποστρόφους
	
Η ΔΙΑΤΑΞΗ - CONTENTS
	Προκαταρκτικά - Preliminaries: χαρακτήρες, χρώματα, links, errors
	Διαμόρφωση θεμάτων - Generate stems
	Πλήρης Πίνακας - Full table
	κλίση1 - declension1: main declension
	Χτίσιμο των τύπων - Generate forms
	κλίση2 με πρόσφυμα - declension2: declension with infix
	Επιμέρους πρότυπα - Individual templates

ΕΚΚΡΕΜΟΤΗΤΕΣ
* Τα μοντέλα τα έκανα αλφαβητικά. Μάλλον πρέπει να γίνουν κατά 1) γένος και 2) κατάληξη.Sarri.greek 2019.09.16.
* 'τσοπάνης' πληθ. τσοπάνηδες και τσοπαναραίοι (βλ. 'μανάβης')
* 'ζάχαρη' να γίνει 'ρίγανη', και το νέο 'ζάχαρη' +γε ζαχάρεως, γπ= ζαχάρεων
* 'βιασύνη' έλεγχος στη γπ
* 'ήλεκτρον' στα νέα ελλ. δεν έχει κλίση
* Να δημιουργηθεί ελεύθερη κλίση (custom) με κελλί=τάδε όνομα. θ-οε, χ-οε κλπ.
		όπως: [[|||||||||||||||||||||||||||||||||||||||||ζίλια]] στον πληθυντικό με πλήρη εμφάνιση κλίσης (δεν αφαιρεί την κατάληξη -ια)

]=]--

Ld['κατηγορίες για σφάλματα'] = '[[Κατηγορία:Συντήρηση:Σελίδες με σφάλματα στο Module κλίση/el/ουσιαστικό]]'

Ld['χρώμαυπόβαθρου'] = 'd9ebff'
Ld['χρώμαπεριγράμματος'] = '#AAAACC'
Ld['χρώματίτλου'] = '#A1BDEA'
Ld['χρώμακατάληξης'] = 'DeepPink'
Ld['χρώμαθέματος'] = '#002000'

Ld['άτονα'] = { ['Α'] = 'Ά', ['α'] = 'ά', ['ε'] = 'έ', ['Ε'] = 'Έ',
        ['Η'] = 'Ή', ['η'] = 'ή', ['ι'] = 'Ί', ['ι'] = 'ί', ['ϊ'] = 'ΐ',
        ['Ο'] = 'Ό', ['ο'] = 'ό', ['Υ'] = 'Ύ', ['υ'] = 'ύ', ['ϋ'] = 'ΰ',
        ['Ω'] = 'Ώ', ['ω'] = 'ώ' }
Ld['τονισμένα'] = {
    ['Ά'] = 'Α',
    ['ά'] = 'α',
    ['Έ'] = 'Ε',
    ['έ'] = 'ε',
    ['Ή'] = 'Η',
    ['ή'] = 'η',
    ['Ί'] = 'Ι',
    ['ί'] = 'ι',
    ['ΐ'] = 'ϊ',
    ['Ό'] = 'Ο',
    ['ό'] = 'ο',
    ['Ύ'] = 'Υ',
    ['ύ'] = 'υ',
    ['ΰ'] = 'ϋ',
    ['Ώ'] = 'Ω',
    ['ώ'] = 'ω'
}

Ld['διπλά τονισμένα'] ={
    ['άι'] = 'αϊ',
    ['έι'] = 'εϊ',
    ['όι'] = 'οϊ',
    ['άυ'] = 'αϋ',
    ['έυ'] = 'εϋ',
    ['όυ'] = 'οϋ'
}
    -- ['ύι'] = 'υϊ', δεν υπάρχει σε ουσιαστικά, μόνο στο επίθετο δρύινος. Αντίθετα, θα βάλει διαλυτικά
    -- στο βούισμα, βουίσματα


--μάλλον δεν θα χρειαστεί
Lf['main'] = function(args)
    return (type(export[arg]) == table)
end

-- Χρώματα - Colours
Lf['κατάληξη'] = function (kataliksi)
    return '<span style="color:' .. Ld['χρώμακατάληξης'] ..'; font-weight:normal;">' .. kataliksi .. '</span>'
end

Lf['θέμα'] = function (stem)
    return '<span style="color:' .. Ld['χρώμαθέματος'] ..'; font-weight:normal;">' .. stem .. '</span>'
end

Lf['πρόσφυμα'] = function (infix)
    return '<span style="color:' .. Ld['χρώμαθέματος'] ..'; font-weight:normal;">' .. infix .. '</span>'
end

-- Links as by Erutuon
Lf['create_link'] = function (page, text)
	if text then
		return '[[|||||||||||||||||||||||||||||||||||||||||' .. page .. '|' .. text .. ']]'
	else
		return '[[|||||||||||||||||||||||||||||||||||||||||' .. page .. ']]'
	end
end
-- for κλίση1 it controls stem and ending
Lf['linkcontrol'] = function (stem, kataliksi)
	return Lf['create_link'](stem .. kataliksi, Lf['θέμα'](stem) ..  Lf['κατάληξη'](kataliksi))
end

---for κλίση2 με πρόσφυμα it controls stem, infix and ending
Lf['linkcontrol3'] = function (stem, infix, kataliksi)
	return Lf['create_link'](stem .. infix .. kataliksi, Lf['θέμα'](stem) ..  Lf['πρόσφυμα'](infix) .. Lf['κατάληξη'](kataliksi))
end

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

--Δεν χρησιμοποιείται. Ίσως να μην υπάρχει εδώ τέτοια...
Lf['σφάλμα'] = function(errstring)
    output = ''
    errstring = errstring or ''
    if errstring ~= '' then
        output = '<font class="error">' .. errstring .. '</font>'
    end
    return output .. Ld['κατηγορίες για σφάλματα']
end

-- ΤΟΝΟΙ, ΔΙΑΜΟΡΦΩΣΗ ΘΕΜΑΤΩΝ
Lf['έχει τόνο'] = function(anygreekstring)
    --για κάθε χαρακτήρα
    for codepoint in mw.ustring.gcodepoint( anygreekstring ) do
        if Ld['τονισμένα'][mw.ustring.char(codepoint)] ~= nil then
            return true
        end
    end
    return false
end

Lf['αφαίρεση τόνου'] = function(tstem)
    --για κάθε χαρακτήρα
    wordproduced = ''
    --για κάθε συνδυασμό γραμμάτων που μπορεί να χρειαστούν διαλυτικά
    for diplotonismeno, neatimh in pairs(Ld['διπλά τονισμένα']) do
        arxi, telos = mw.ustring.find(tstem, diplotonismeno)
        if arxi ~= nil then
            wordproduced = mw.ustring.gsub(tstem, diplotonismeno, neatimh, 1) --μια φορά αντικατάσταση
            --βρέθηκε ο τόνος και αφαιρέθηκε
            return wordproduced
        end
    end
    for codepoint in mw.ustring.gcodepoint( tstem ) do
        --αντικατάστησέ τον με βάση τον πίνακα
        mychar = mw.ustring.char(codepoint)
        convertedchar = Ld['τονισμένα'][mychar]
        --αν βρήκε κάτι για αντικατάσταση
        --είναι δηλαδή τονισμένο γράμμα
        if convertedchar ~= nil then
            --πρόσθεσέ το στη δημιουργούμενη κλείδα
            wordproduced = wordproduced .. convertedchar
        else
            --αλλιώς άσε το ίδιο
            wordproduced = wordproduced .. mychar
        end
    end
    return wordproduced
end

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

Lf['νέος τόνος'] = function(stem)
    --if stem == nil then return stem end
    stempoint = mw.ustring.len(stem)
    wordproduced = ""
    while stempoint > 0 do
       mychar = mw.ustring.sub(stem, stempoint, stempoint)
       newchar = Ld['άτονα'][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

Lf['πλήρηςπίνακας'] = 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 not (args['παρατήρηση'] == nil or mw.ustring.len(args['παρατήρηση']) < 1) then
        --mw.log('para')
        paratirisi = '|-' .. "\n" .. [=[| colspan="3" 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="#A1BDEA" colspan="1" align="center"| '''''[[|||||||||||||||||||||||||||||||||||||||||ενικός]]''''']=] .. "\n"
        onomenstr =  [=[| align="left" | ]=] .. args['οε'] ..  "\n"
        genenstr =  [=[| align="left" | ]=] .. args['γε'] ..  "\n"
        aitenstr =  [=[| align="left" | ]=] .. args['αε'] ..  "\n"
        klenstr =  [=[| align="left" | ]=] .. args['κε'] ..  "\n"
    end
    if hasplural then
        ptitlestr = [=[! bgcolor="#A1BDEA" colspan="1" align="center"| '''''[[|||||||||||||||||||||||||||||||||||||||||πληθυντικός]]''''']=] .. "\n"
        onomplstr =  [=[| align="left" | ]=] .. args['οπ'] ..  "\n"
        genplstr =  [=[| align="left" | ]=] .. args['γπ'] ..  "\n"
        aitplstr =  [=[| align="left" | ]=] .. args['απ'] ..  "\n"
        klplstr =  [=[| align="left" | ]=] .. args['κπ'] ..  "\n"
    end

    output = [=[{| 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="#A1BDEA" | πτῶσις]=] .. "\n" .. stitlestr .. ptitlestr .. [=[|-
| bgcolor="#BED9ED" | '''''[[|||||||||||||||||||||||||||||||||||||||||ονομαστικῆ]]''''']=] .. "\n" .. onomenstr .. onomplstr .. [=[|-
| bgcolor="#BED9ED" | '''''[[|||||||||||||||||||||||||||||||||||||||||γενικῆ]]''''']=] .. "\n" .. genenstr .. genplstr .. [=[|-
| bgcolor="#BED9ED" | '''''[[|||||||||||||||||||||||||||||||||||||||||αιτιατικῆ]]''''']=] .. "\n" .. aitenstr .. aitplstr .. [=[|-
| bgcolor="#BED9ED" | '''''[[|||||||||||||||||||||||||||||||||||||||||κλητικῆ]]''''']=] .. "\n" .. klenstr .. klplstr .. paratirisi .. [=[|}]=]

    if (args['ονοματοχώρος'] or 1) == 0 then
        if (args['ιδιαίτερη κλίση'] or false) then
            output = output .. '[[Κατηγορία:Λήμματα με ιδιαίτερη κλίση]]' --να γίνει κρυφή κατηγορία;
            else
    		-- param κατ= για δημιουργία κατηγοριών που συμπληρώνει ο συντάκτης - editor creates Categories ad libitum
    		-- Υπερισχύει του 'τύπος' - It overrides 'τύπος' (παράδειγμα: [[|||||||||||||||||||||||||||||||||||||||||μπαγάσας]])
    		if args['κατ'] ~= '' and args ['κατ'] ~= nil then
    			output = output .. '[[Κατηγορία:' .. args['κατηγορία κλίσης'] .. " που κλίνονται όπως το '" .. args['κατ'] .. "']]"
   			-- ο τύπος0 ΧΩΡΙΣ αποστρόφους (χρειάζεται όταν η φράση συνεχίζεται. παράδειγμα: οι Κατηγορίες στο [[|||||||||||||||||||||||||||||||||||||||||Αντρέας]], [[|||||||||||||||||||||||||||||||||||||||||μπόγιας]]
   			elseif args['τύπος0'] ~= '' and args['τύπος0'] ~= nil then
   				output = output .. '[[Κατηγορία:' .. args['κατηγορία κλίσης'] .. " που κλίνονται όπως το " .. args['τύπος0'] .. "]]"
   				else
            --η γλώσσα στην κατηγορία θα είναι απαραίτητη αν υπάρχουν ίδιοι "τύποι" σε διαφορετικές γλώσσες.
            	output = output .. '[[Κατηγορία:' .. args['κατηγορία κλίσης'] .. " που κλίνονται όπως το '" .. args['τύπος'] .. "']]"
              
            end -- close 'κατ'
    	end
		-- param υποκατ (subcategory) για δημιουργία συνοδευτικών γενικών κατηγοριών (όπως:... χωρίς πληθυντικό)
		-- ΔΕΝ υπερισχύει. Προστίθεται στις υπάρχουσες Κατηγορίες. - it does NOT override 'τύπος'
		if args['υποκατ'] ~= '' and args ['υποκατ'] ~= nil then
			output = output .. '[[Κατηγορία:' .. args['κατηγορία κλίσης'] .. ' ' .. args['υποκατ'] .. ']]'
		end
    end

    
    return output

end

Lf['κλίση1'] = function(args)
    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(args['λήμμα'],1,-stemnumber-1)
    stem["2"] = Lf['αφαίρεση τόνου'](stem["1"])
    if stem["2"] == nil then return stem["1"] end
    stem["3"] = Lf['νέος τόνος'](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 Lf['έχει τόνο'](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

-- ---------- Χτίσιμο των τύπων - Generate forms ----------------- --
	---- ονομαστική ενικού
    args['οε'] = Lf['linkcontrol'](stem[args['οεθ']], args['οε'])
    
    ---- γενική ενικού
    if (args['γε'] == "-" or args['γε'] == "" or args['γε'] == nil) then
        args['γε'] = ""
    else
        args['γε'] = Lf['linkcontrol'](stem[args['γεθ']], args['γε'])
    end
    if args['γε2'] ~=nil and args['γε2'] ~= "" and args['γε2'] ~= "-" then
        args['γε2'] = "<br />& " .. Lf['linkcontrol'](stem[args['γε2θ']], args['γε2']) -- όπως στο [[|||||||||||||||||||||||||||||||||||||||||λύση]]
    else 
        args['γε2'] = ''
    end
    args['γε'] = args['γε'] .. args['γε2']   
    
	---- αιτιατική ενικού
    args['αε'] = Lf['linkcontrol'](stem[args['αεθ']], args['αε'])

    ---- κλητική ενικού
    if args['κε0'] ~= nil then
        args['κε'] = '(' .. Lf['linkcontrol'](stem[args['κε0θ']], args['κε0']) .. ')' -- όπως στο [[|||||||||||||||||||||||||||||||||||||||||έρημος]]
    else
    args['κε'] = Lf['linkcontrol'](stem[args['κεθ']], args['κε'])
    end
    if args['κε2'] ~=nil and args['κε2'] ~= "" and args['κε2'] ~= "-" then
        args['κε2'] = "<br />" .. Lf['linkcontrol'](stem[args['κε2θ']], args['κε2']) .. '*' -- με σημείωση *Σπάνια, όπως στο [[|||||||||||||||||||||||||||||||||||||||||γέρος]]
    else
        args['κε2'] = ""
    end
    args['κε'] = args['κε'] .. args['κε2']

    ---- ΟΝΟΜΑΣΤΙΚΗ ΠΛΗΘΥΝΤΙΚΟΥ
    args['οπ'] = Lf['linkcontrol'](stem[args['οπθ']], args['οπ'])
    if args['οπ2'] ~=nil and args['οπ2'] ~= "" and args['οπ2'] ~= "-" then
        args['οπ2'] = "<br />& " .. Lf['linkcontrol'](stem[args['οπ2θ']], args['οπ2']) -- όπως στο [[|||||||||||||||||||||||||||||||||||||||||πραματευτής]]
    else
        args['οπ2'] = ''
    end
    args['οπ'] = args['οπ'] .. args['οπ2']
    args['κπ'] = args['οπ']

    ---- ΓΕΝΙΚΗ ΠΛΗΘΥΝΤΙΚΟΥ
    if (args['γπ'] == "-" or args['γπ'] == "" or args['γπ'] == nil) then
        args['γπ'] = ""
    else
        args['γπ'] = Lf['linkcontrol'](stem[args['γπθ']], args['γπ'])
    end
    if args['γπ0'] ~= nil then
        args['γπ'] = '(' .. Lf['linkcontrol'](stem[args['γπ0θ']], args['γπ0']) .. ')' -- όπως στο [[|||||||||||||||||||||||||||||||||||||||||σκόνη]]
    end
    if args['γπ2'] ~=nil and args['γπ2'] ~= "" and args['γπ2'] ~= "-" then
        args['γπ2'] = Lf['linkcontrol'](stem[args['γπ2θ']], args['γπ2'])  -- όπως στο [[|||||||||||||||||||||||||||||||||||||||||καρδινάλιος]]
        if args['γπ'] ~= "" then
            args['γπ2'] = "<br />& " .. args['γπ2']
        end
    else
        args['γπ2'] = ""
    end
    args['γπ'] = args['γπ'] .. args['γπ2']

    ---- ΑΙΤΙΑΤΙΚΗ ΠΛΗΘΥΝΤΙΚΟΥ
    args['απ'] = Lf['linkcontrol'](stem[args['απθ']], args['απ'])
    if args['απ2'] ~=nil and args['απ2'] ~= "" and args['απ2'] ~= "-" then
        args['απ2'] = "<br />& " .. Lf['linkcontrol'](stem[args['απ2θ']], args['απ2']) -- όπως στο [[|||||||||||||||||||||||||||||||||||||||||καρδινάλιος]]
    else
        args['απ2'] = ''
    end
    args['απ'] = args['απ'] .. args['απ2']
    
    ---- ΚΛΗΤΙΚΗ ΠΛΗΘΥΝΤΙΚΟΥ
    -- όπως η αιτιατική πληθυντικού

    return Lf['πλήρηςπίνακας'](args)
end

--κλίση ουδετέρων ουσιαστικών που παίρνουν επιπλέον σύμφωνο στο «θέμα», τσάι, προϊόν, μέλλον
Lf['κλίση2'] = function(args)
    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(args['λήμμα'],1,-stemnumber-1)
    stem["2"] = Lf['αφαίρεση τόνου'](stem["1"])
    stem["3"] = Lf['νέος τόνος'](stem["2"])

    args['οε'] = Lf['linkcontrol'](stem[args['οεθ']], args['οε'])
    args['γε'] = Lf['linkcontrol3'](stem[args['γεθ']], args['πρόσφ'], args['γε'])
    args['αε'] = args['οε']
    args['κε'] = args['οε']
    args['οπ'] = Lf['linkcontrol3'](stem[args['οπθ']], args['πρόσφ'], args['οπ'])
    args['γπ'] = Lf['linkcontrol3'](stem[args['γπθ']], args['πρόσφ'], args['γπ'])
    args['απ'] = args['οπ']
    args['κπ'] = args['οπ']

    return Lf['πλήρηςπίνακας'](args)
end

--------------------------------------------------------------------------
--                       ΕΠΙΜΕΡΟΥΣ ΠΡΟΤΥΠΑ                             --
--------------------------------------------------------------------------
-- Εδώ αρχίζουν οι καταλήξεις των επιμέρους προτύπων

-- διάμετρος: μια ειδική περίπτωση
export['διάμετρος'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'διάμετρος']]
    local stem = {}
    stem["1"] = mw.ustring.sub(args['λήμμα'],1,-3)
    stem["2"] = Lf['αφαίρεση τόνου'](stem["1"])
    if stem["2"] == nil then return stem["1"] end
    stem["3"] = Lf['νέος τόνος'](stem["2"])

	args['οε'] = Lf['linkcontrol'](stem["1"], 'ος')
	args['γε'] = Lf['linkcontrol'](stem["3"], 'οῦ')
	args['αε'] = Lf['linkcontrol'](stem["1"], 'ο')
	args['κε'] = Lf['linkcontrol'](stem["1"], 'ε') .. " (" .. Lf['linkcontrol'](stem["1"], 'ο') .. ")"
	args['οπ'] = Lf['linkcontrol'](stem["1"], 'οῖ') .. " (" .. Lf['linkcontrol'](stem["1"], 'ες') .. ")"
	args['γπ'] = Lf['linkcontrol'](stem["3"], 'ων')
	args['απ'] = Lf['linkcontrol'](stem["3"], 'οῦς') .. " (" .. Lf['linkcontrol'](stem["1"], 'ες') .. ")"
	args['κπ'] = Lf['linkcontrol'](stem["1"], 'οῖ')

    return Lf['πλήρηςπίνακας'](args)
end

-- =================== α...ω ======================= --

export['άγγελος'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'άγγελος']]
    args['οε'] = "ος"
    args['γε'] = "οῦ"
    args['αε'] = "ο"
    args['κε'] = "ε"
    args['οπ'] = "οῖ"
    args['γπ'] = "ῶν"
    args['απ'] = "οῦς"
    args['γεθ'] = "3"
    args['γπθ'] = "3"
    args['απθ'] = "3"
    return Lf['κλίση1'](args)
end

-- βλ. σημειώσεις για καθαρεύουσα. ΔΟΚΙΜΑΣΤΙΚΟ. Λείπει η δοτική
export['ἀγυιά'] = function(args)		-- Template:[[|||||||||||||||||||||||||||||||||||||||||Wt/grc/grc-κλίσ-'κ-ἀγυιά']]
    args['οε'] = "ᾶ"
    args['γε'] = "ᾶς"
    args['αε'] = "άν"
    args['κε'] = "ά"
    args['οπ'] = "αί"
    args['γπ'] = "ῶν"
    args['απ'] = "άς"
    return Lf['κλίση1'](args)
end

export['αγώνας'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'αγώνας']]
    args['οε'] = "ας"
    args['γε'] = "α"
    args['αε'] = "α"
    args['κε'] = "α"
    args['οπ'] = "ες"
    if args['γπ'] == nil then args['γπ'] = "ων" end
    if args['γπ'] == '-' then args['τύπος0'] = "'αγώνας' χωρίς γενική πληθυντικού" end  -- όπως [[|||||||||||||||||||||||||||||||||||||||||μπόγιας]]
    if args['γπ'] == '-' then args['υποκατ'] = "χωρίς γενική πληθυντικού" end  -- και στη γενική Κατηγορία:Ουσιαστικά χωρίς γενική πληθ
    if args['α'] == 'εν' then args['τύπος0'] = "'αγώνας' χωρίς πληθυντικό" end  -- όπως [[|||||||||||||||||||||||||||||||||||||||||Ανδρέας]]
    if args['α'] == 'εν' then args['υποκατ'] = "χωρίς πληθυντικό" end -- και στη γενική Κατηγορία:Ουσιαστικά χωρίς πληθυντικό
    args['απ'] = "ες"
    return Lf['κλίση1'](args)
    -- επίσης, βλ. κατ=μπαγάσας στο [[|||||||||||||||||||||||||||||||||||||||||μπαγάσας]]
end

export['αιλουροειδές'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'αιλουροειδές']]
    args['οε'] = "ές"
    args['γε'] = "οῦς"
    args['αε'] = "ές"
    args['οπ'] = "ῆ"
    args['γπ'] = "ῶν"
    return Lf['κλίση1'](args)
end

export['αλεπού'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'αλεπού']]
    args['οε'] = "οῦ"
    args['γε'] = "οῦς"
    args['αε'] = "οῦ"
    args['οπ'] = "ούδες"
    args['γπ'] = "ούδων"
    return Lf['κλίση1'](args)
end

export['αφέντης'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'αφέντης']]
    args['οε'] = "ῆς"
    args['γε'] = "ῆ"
    args['αε'] = "ῆ"
    args['οπ'] = "αι"
    args['γπ'] = "ῶν"
    args['οπ2'] = "άδαι"
    args['γπ2'] = "άδων"
    args['απ2'] = "άδαι"
    return Lf['κλίση1'](args)
end

export['βιασύνη'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'βιασύνη']]
    args['οε'] = "ῆ"
    args['γε'] = "ῆς"
    args['αε'] = "ῆ"
    args['οπ'] = "αι"
    args['γπ'] = "ῶν"
    args['γπ0'] = "ων"
    return Lf['κλίση1'](args)
end

export['βουνό'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'βουνό']]
    args['οε'] = "όν"
    args['γε'] = "οῦ"
    args['αε'] = "όν"
    args['οπ'] = "ᾶ"
    args['γπ'] = "ῶν"
    return Lf['κλίση1'](args)
end

export['γέρος'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'γέρος']]
    args['οε'] = "ος"
    args['γε'] = "οῦ"
    args['αε'] = "ο"
    args['οπ'] = "οῖ"
    args['γπ'] = "ων"
    args['απ'] = "οῦς"
    return Lf['κλίση1'](args)
end

export['γιαγιά'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'γιαγιά']]
    args['οε'] = "ᾶ"
    args['γε'] = "ᾶς"
    args['αε'] = "ά"
    args['οπ'] = "άδαι"
    args['γπ'] = "άδων"
    return Lf['κλίση1'](args)
end

export['γυαλάκιας'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'γυαλάκιας']]
    args['οε'] = "ιας"
    args['γε'] = "ια"
    args['αε'] = "ια"
    args['οπ'] = "ηδαι"
    if args['γπ'] == nil then args['γπ'] = "ηδων" end
    return Lf['κλίση1'](args)
end

export['δέσιμο'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'δέσιμο']]
    args['οε'] = "ο"
    args['γε'] = "ατος"
    args['αε'] = "ο"
    args['οπ'] = "ατα"
    args['γπ'] = "άτων"
    args['γεθ'] = "3"
    args['οπθ'] = "3"
    args['απθ'] = "3"
    return Lf['κλίση1'](args)
end

export['διδάκτωρ'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'διδάκτωρ']]
    args['οε'] = "ωρ"
    args['γε'] = "ορος"
    args['αε'] = "ορα"
    args['κε'] = "ορ"
    args['οπ'] = "ορες"
    args['γπ'] = "όρων"
    return Lf['κλίση1'](args)
end

export['δρόμος'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'δρόμος']]
    args['οε'] = "ος"
    args['γε'] = "οῦ"
    args['αε'] = "ο"
    args['κε'] = "ε"
    args['οπ'] = "οῖ"
    args['γπ'] = "ων"
    args['απ'] = "οῦς"
    return Lf['κλίση1'](args)
end

export['έδαφος'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'έδαφος']]
    args['οε'] = "ος"
    args['γε'] = "οῦς"
    args['αε'] = "ος"
    args['οπ'] = "ῆ"
    if args['γπ'] == nil then args['γπ'] = "ών" end
    args['γεθ'] = "3"
    args['οπθ'] = "3"
    args['απθ'] = "3"
    return Lf['κλίση1'](args)
end

export['ελπίδα'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'ελπίδα']]
    args['οε'] = "α"
    args['γε'] = "ας"
    args['αε'] = "α"
    args['οπ'] = "αι"
    if args['γπ'] == nil then args['γπ'] = "ων" end
    return Lf['κλίση1'](args)
end

export['έρημος'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'έρημος']]
    args['οε'] = "ος"
    args['γε'] = "οῦ"
    args['αε'] = "ο"
    args['κε'] = "ε"
    args['κε2'] = "ο"
    args['οπ'] = "οῖ"
    args['γπ'] = "ων"
    args['απ'] = "οῦς"
    args['γεθ'] = "3"
    args['γπθ'] = "3"
    args['απθ'] = "3"
    return Lf['κλίση1'](args)
end

export['ερωμένη'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'ερωμένη']]
    args['οε'] = "ῆ"
    args['γε'] = "ῆς"
    args['αε'] = "ῆ"
    args['οπ'] = "αι"
    args['γπ'] = "ων"
    return Lf['κλίση1'](args)
end

export['ζάχαρη'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'ζάχαρη']] ΧΡΕΙΑΖΕΤΑΙ ΕΛΕΓΧΟ
    args['οε'] = "ῆ"
    args['γε'] = "ῆς"
    args['αε'] = "ῆ"
    args['οπ'] = "αι"
    args['γπ'] = nil
    return Lf['κλίση1'](args)
end

export['ηχώ'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'ηχώ']]
    args['οε'] = "ῶ"
    args['γε'] = "ῶς"
    args['γε2'] = "οῦς"
    args['αε'] = "ῶ"
    args['οπ'] = "οῖ"
    args['απ'] = "οῦς"
    args['α'] = "εν"
    return Lf['κλίση1'](args)
end

export['θάλασσα'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'θάλασσα']]
    args['οε'] = "α"
    args['γε'] = "ας"
    args['αε'] = "α"
    args['οπ'] = "αι"
    args['γπ'] = "ῶν"
    return Lf['κλίση1'](args)
end


-- επώνυμα -ίδης (κατά το 'μανάβης') με παρατήρηση λόγιας γενικής ενικού
export['ίδης'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'ίδης']]
	local stem = {}
    stem["1"] = mw.ustring.sub(args['λήμμα'],1,-3)	-- 1 = πρώτο γράμμα. -3 = σταματάμε στο 3ο γράμμα από το τέλος (Ιωαννίδ)
    args['οε'] = Lf['linkcontrol'](stem["1"], 'ῆς')
    args['γε'] = Lf['linkcontrol'](stem["1"], 'ῆ') .. "<sup>*</sup>"
    args['αε'] = Lf['linkcontrol'](stem["1"], 'ῆ')
    args['κε'] = Lf['linkcontrol'](stem["1"], 'ῆ')
    args['οπ'] = Lf['linkcontrol'](stem["1"], 'ηδαι')
    args['γπ'] = Lf['linkcontrol'](stem["1"], 'ηδων')
	args['απ'] = Lf['linkcontrol'](stem["1"], 'ηδαι')
    args['κπ'] = Lf['linkcontrol'](stem["1"], 'ηδαι')
	args['παρατήρηση'] = "&nbsp;<sup>*</sup> Και λόγια γενική ενικού " .. Lf['linkcontrol'](stem["1"], 'ου')
	args['κατ'] = 'Αγγελίδης'
    return Lf['πλήρηςπίνακας'](args)
end

export['ιππέας'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'ιππέας']]
    args['οε'] = "έας"
    args['γε'] = "έα"
    args['αε'] = "έα"
    args['οπ'] = "εῖς"
    args['γπ'] = "έων"
    if args['2gen'] == "1" then args['γε2'] = "έως" end
    return Lf['κλίση1'](args)
end

export['ισχύς'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'ισχύς']]
    args['οε'] = "ς"
    args['γε'] = "ος"
    args['αε'] = ""
    args['κε'] = ""
    args['οπ'] = "αι"
    args['γπ'] = "ων"
    args['απ'] = "ς"
    return Lf['κλίση1'](args)
end

export['καρδιά'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'καρδιά']]
    args['οε'] = "ᾶ"
    args['γε'] = "ᾶς"
    args['αε'] = "ά"
    args['οπ'] = "αι"
    if args['γπ'] == nil then args['γπ'] = "ών" end
    return Lf['κλίση1'](args)
end

export['καρδινάλιος'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'καρδινάλιος']]
    args['οε'] = "ος"
    args['γε'] = "οῦ"
    args['γε2'] = "οῦ"
    args['αε'] = "ο"
    args['κε'] = "ε"
    args['οπ'] = "οῖ"
    args['γπ'] = "ων"
    args['απ'] = "οῦς"
    args['γπ2'] = "ων"
    args['απ2'] = "οῦς"
    args['γεθ'] = "3"
    args['γπθ'] = "3"
    args['απθ'] = "3"
    return Lf['κλίση1'](args)
end

export['καφές'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'καφές']]
    args['οε'] = "ές"
    args['γε'] = "έν"
    args['αε'] = "έν"
    args['οπ'] = "έδες"
    args['γπ'] = "έδων"
    return Lf['κλίση1'](args)
end

export['κόντες'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'κόντες']]
    args['οε'] = "ες"
    args['γε'] = "ε"
    args['αε'] = "ε"
    args['οπ'] = "ηδαι"
    args['γπ'] = "ηδων"
    return Lf['κλίση1'](args)
end

export['κρέας'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'κρέας']]
    args['οε'] = "ας"
    args['γε'] = "ατος"
    args['αε'] = "ας"
    args['οπ'] = "ατα"
    args['γπ'] = "άτων"
    return Lf['κλίση1'](args)
end

export['λαχειοπώλης'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'λαχειοπώλης']]
    args['οε'] = "ῆς"
    args['γε'] = "ῆ"
    args['αε'] = "ῆ"
    args['οπ'] = "αι"
    if args['γπ'] == nil then args['γπ'] = "ών" end
    args['οπ2'] = "ηδαι"
    args['γπ2'] = "ηδων"
    return Lf['κλίση1'](args)
end

export['λύση'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'λύση']]
    args['οε'] = "ῆ"
    args['γε'] = "ῆς"
    args['γε2'] = "εως"
    args['αε'] = "ῆ"
    args['οπ'] = "εῖς"
    args['γπ'] = "εων"
    args['γε2θ'] = "3"
    args['οπθ'] = "3"
    args['γπθ'] = "3"
    return Lf['κλίση1'](args)
end

export['μανάβης'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'μανάβης']]
    args['οε'] = "ῆς"
    args['γε'] = "ῆ"
    args['αε'] = "ῆ"
    args['οπ'] = "ηδαι"
    args['γπ'] = "ηδων"
    args['οπθ'] = "3"
    args['γπθ'] = "3"
    if args['2πλ'] == "1" then
    	args['κατ'] = 'νοικοκύρης'  -- όπως [[|||||||||||||||||||||||||||||||||||||||||νοικοκύρης]] με διπλούς πληθυντικούς
        args['οπ2'] = "αίοι"
        args['γπ2'] = "αίων"
        args['απ2'] = "αίους"
    end
    if args['α'] == 'εν' then args['τύπος0'] = "'μανάβης' χωρίς πληθυντικό" end  -- όπως ?
    if args['α'] == 'εν' then args['υποκατ'] = "χωρίς πληθυντικό" end -- και στη γενική Κατηγορία:Ουσιαστικά χωρίς πληθυντικό  
    if args['α'] == 'πλ' then args['τύπος0'] = "'μανάβης' χωρίς ενικό" end  -- όπως [[|||||||||||||||||||||||||||||||||||||||||Αέρηδες]]
    if args['α'] == 'πλ' then args['υποκατ'] = "χωρίς ενικό" end -- και στη γενική Κατηγορία:Ουσιαστικά χωρίς ενικό    
--TODO τσοπάνης -ηδες - αραίοι
--if args['προσφ'] ~= nil then
    return Lf['κλίση1'](args)
end

export['μέλλον'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'μέλλον']]
    args['οε'] = ""
    args['γε'] = "ος"
    args['οπ'] = "α"
    args['γπ'] = "ων"
    args['οεθ'] = "1"
    args['γεθ'] = "1"
    args['οπθ'] = "1"
    args['γπθ'] = "3"
    args['πρόσφ'] ="τ"
    return Lf['κλίση2'](args)
end

export['μίλι'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'μίλι']]
    args['οε'] = "ι"
    args['γε'] = "ίου"
    args['αε'] = "ι"
    args['οπ'] = "ια"
    args['γπ'] = "ίων"
    return Lf['κλίση1'](args)
end

export['μπαλωματής'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'μπαλωματής']]
    args['οε'] = "ής"
    args['γε'] = "ή"
    args['αε'] = "ή"
    args['οπ'] = "ήδες"
    args['γπ'] = "ήδων"
    return Lf['κλίση1'](args)
end

export['ναύτης'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'ναύτης']]
    args['οε'] = "ῆς"
    args['γε'] = "ῆ"
    args['αε'] = "ῆ"
    args['οπ'] = "αι"
    if args['γπ'] == nil then args['γπ'] = "ῶν" end
    return Lf['κλίση1'](args)
end

export['νίκη'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'νίκη']]
    args['οε'] = "ῆ"
    args['γε'] = "ῆς"
    args['αε'] = "ῆ"
    args['οπ'] = "αι"
    args['γπ'] = "ῶν"
    return Lf['κλίση1'](args)
end

export['νικητής'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'νικητής']]
    args['οε'] = "ῆς"
    args['γε'] = "ῆ"
    args['αε'] = "ῆ"
    args['οπ'] = "αι"
    args['γπ'] = "ῶν"
    return Lf['κλίση1'](args)
end

export['νότα'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'νότα']]
    args['οε'] = "α"
    args['γε'] = "ας"
    args['αε'] = "α"
    args['οπ'] = "αι"
    args['γπ0'] = "ῶν"
    return Lf['κλίση1'](args)
end

export['οδός'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'οδός']]
    args['οε'] = "ός"
    args['γε'] = "οῦ"
    args['αε'] = "όν"
    args['κε'] = "έν"
    args['κε2'] = "όν"
    args['οπ'] = "οῖ"
    args['γπ'] = "ῶν"
    args['απ'] = "οῦς"
    return Lf['κλίση1'](args)
end

export['ον'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'ον']]
    args['οε'] = ""
    args['γε'] = "ος"
    args['οπ'] = "α"
    args['γπ'] = "ων"
    args['οεθ'] = "1"
    args['γεθ'] = "3"
    args['οπθ'] = "3"
    args['γπθ'] = "3"
    args['πρόσφ'] ="τ"
    return Lf['κλίση2'](args)
end

export['όνομα'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'όνομα']]
    args['οε'] = "α"
    args['γε'] = "ατος"
    args['αε'] = "α"
    args['οπ'] = "ατα"
    args['γπ'] = "άτων"
    args['γεθ'] = "3"
    args['οπθ'] = "3"
    return Lf['κλίση1'](args)
end

-- επώνυμα -όπουλος ([[|||||||||||||||||||||||||||||||||||||||||Παπαδόπουλος]]): μια ειδική περίπτωση
export['όπουλος'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'όπουλος']]
    local stem = {}
    stem["1"] = mw.ustring.sub(args['λήμμα'],1,-3)	-- 1 = πρώτο γράμμα. -3 = σταματάμε στο 3ο γράμμα από το τέλος (Παπαδόπουλ)
    stem["2"] = Lf['αφαίρεση τόνου'](stem["1"]) 	-- άτονο θέμα (Παπαδοπουλ)
    if stem["2"] == nil then return stem["1"] end
    stem["3"] = Lf['νέος τόνος'](stem["2"])			-- δημιουργία θέματος με τόνο στην τελευταία συλλαβή (Παπαδοπούλ)

	args['οε'] = Lf['linkcontrol'](stem["1"], 'ος')
	args['γε'] = Lf['linkcontrol'](stem["1"], 'οῦ') .. "<br />& " .. Lf['linkcontrol'](stem["3"], 'οῦ')
	args['αε'] = Lf['linkcontrol'](stem["1"], 'ο')
	args['κε'] = Lf['linkcontrol'](stem["1"], 'ε')
	args['οπ'] = Lf['linkcontrol'](stem["1"], 'οῖ') .. " & " .. Lf['linkcontrol'](stem["2"], 'αίοι') .. "<sup>1</sup>"
	args['γπ'] = Lf['linkcontrol'](stem["1"], 'ων') .. "<sup>2</sup> & " .. Lf['linkcontrol'](stem["2"], 'αίων')
	args['απ'] = Lf['linkcontrol'](stem["1"], 'οῦς') .. "<sup>3</sup> & " .. Lf['linkcontrol'](stem["2"], 'αίους')
	args['κπ'] = Lf['linkcontrol'](stem["1"], 'οῖ') .. " & " .. Lf['linkcontrol'](stem["2"], 'αίοι')
	args['παρατήρηση'] = "&nbsp;1. οι δεύτεροι τύποι, προφορικοί, οικείοι<br>&nbsp;2. παρωχημένη γενική πληθυντικού: " .. Lf['linkcontrol'](stem["3"], 'ων')
	.. "<br>&nbsp;3. παρωχημένη αιτιατική πληθυντικού: " .. Lf['linkcontrol'](stem["3"], 'οῦς')
	args['κατ'] = 'Παπαδόπουλος'

    return Lf['πλήρηςπίνακας'](args)
end


export['ουρανός'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'ουρανός']]
    args['οε'] = "ός"
    args['γε'] = "οῦ"
    args['αε'] = "όν"
    if args['κε'] == nil then args['κε'] = "έν" end
    args['οπ'] = "οῖ"
    args['γπ'] = "ῶν"
    args['απ'] = "οῦς"
    return Lf['κλίση1'](args)
end

export['παγκοσμιοποίηση'] = function(args)	-- [[Template:Wt/grc/grc-κλίσ-'παγκοσμιοποίηση']] νεολογισμοί, χωρίς -ποιήσεως
    local stem = {}
    stem["1"] = mw.ustring.sub(args['λήμμα'],1,-2)
    stem["2"] = Lf['αφαίρεση τόνου'](stem["1"])
    if stem["2"] == nil then return stem["1"] end
    stem["3"] = Lf['νέος τόνος'](stem["2"])
    args['οε'] = "ῆ"
    args['γε'] = "ῆς"
    args['αε'] = "ῆ"
    args['οπθ'] = "3"  -- θέμα τονισμένο στην τελευταία συλλαβή του
    args['οπ'] = "εῖς"
	args['γπθ'] = "3"
    args['γπ'] = "εων"
    if args['παρατήρηση'] ~= nil then args['παρατήρηση'] = args['παρατήρηση'] -- ελεύθερο κείμενο παρατήρησης όπως στο [[|||||||||||||||||||||||||||||||||||||||||υποτάξη]] 
    	else args['παρατήρηση'] = "Η γενική ενικού " .. Lf['linkcontrol'](stem["3"], 'εως') .. " δεν συνηθίζεται." -- preset κείμενο όπως στο [[|||||||||||||||||||||||||||||||||||||||||παγκοσμιοποίηση]]
    end
    return Lf['κλίση1'](args)
end

export['παιδί'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'παιδί']]
    args['οε'] = "ί"
    args['γε'] = "ιοῦ"
    args['αε'] = "ί"
    args['οπ'] = "ιά"
    args['γπ'] = "ιῶν"
    return Lf['κλίση1'](args)
end

export['παιδάκι'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'παιδάκι']]
    args['οε'] = "ι"
    args['αε'] = "ι"
    args['οπ'] = "ια"
    return Lf['κλίση1'](args)
end

export['παππούς'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'παππούς']]
    args['οε'] = "οῦς"
    args['γε'] = "οῦ"
    args['αε'] = "οῦ"
    args['οπ'] = "ούδαι"
    args['γπ'] = "ούδων"
    return Lf['κλίση1'](args)
end

export['παρόν'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'παρόν']]
    args['οε'] = ""
    args['γε'] = "ος"
    args['οπ'] = "α"
    args['γπ'] = "ων"
    args['οεθ'] = "1"
    args['γεθ'] = "1"
    args['οπθ'] = "1"
    args['γπθ'] = "1"
    args['πρόσφ'] ="τ"
    return Lf['κλίση2'](args)
end

export['πείνα'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'πείνα']]
    args['οε'] = "α"
    args['γε'] = "ας"
    args['αε'] = "α"
    args['οπ'] = "αι"
    return Lf['κλίση1'](args)
end

export['περίπλους'] = function(args) -- [[Template:Wt/grc/grc-κλίσ-'περίπλους']]
    args['οε'] = "οῦς"
    args['γε'] = "οῦ"
    args['αε'] = "οῦ"
    args['κε'] = "οῦ"
    args['οπ'] = "οι"
    args['γπ'] = "ων"
    args['απ'] = "οι"
    args['κπ'] = "οι"
    return Lf['κλίση1'](args)
end

export['πεύκο'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'πεύκο']]
    args['οε'] = "ο"
    args['γε'] = "οῦ"
    args['αε'] = "ο"
    args['οπ'] = "α"
    if args['γπ'] == nil then args['γπ'] = "ων" end
    return Lf['κλίση1'](args)
end

export['πραματευτής'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'πραματευτής']]
    args['οε'] = "ῆς"
    args['γε'] = "ῆ"
    args['αε'] = "ῆ"
    args['οπ'] = "αι"
    args['γπ'] = "ῶν"
    args['οπ2'] = "άδαι"
    args['γπ2'] = "άδων"
    return Lf['κλίση1'](args)
end

export['πρόσωπο'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'πρόσωπο']]
    args['οε'] = "ο"
    args['γε'] = "οῦ"
    args['αε'] = "ο"
    args['οπ'] = "α"
    args['γπ'] = "ων"
    args['γεθ'] = "3"
    args['γπθ'] = "3"
    return Lf['κλίση1'](args)
end

export['πρόβατο'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'πρόβατο']]
    args['οε'] = "ο"
    args['γε'] = "οῦ"
    args['γε2'] = "οῦ"
    args['αε'] = "ο"
    args['οπ'] = "α"
    args['γπ'] = "ων"
    args['γπ2'] = "ων"
    args['γεθ'] = "3"
    args['γπθ'] = "3"
    return Lf['κλίση1'](args)
end

export['ρήγας'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'ρήγας']]
    args['οε'] = "ας"
    args['γε'] = "α"
    args['αε'] = "α"
    args['οπ'] = "άδαι"
    args['γπ'] = "άδων"
    return Lf['κλίση1'](args)
end

export['Ρηνιώ'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'Ρηνιώ']]
    args['οε'] = "ῶ"
    args['γε'] = "ῶς"
    args['αε'] = "ῶ"
    args['οπ'] = "XX"
    args['α'] = "εν"
    return Lf['κλίση1'](args)
end

export['σάλπιγγα'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'σάλπιγγα']]
    args['οε'] = "α"
    args['γε'] = "ας"
    args['αε'] = "α"
    args['οπ'] = "αι"
    args['γπ'] = "ων"
    args['γπθ'] = "3"
    if args['2gen'] == "1" then args['γπ2'] = "ων"
    end
    return Lf['κλίση1'](args)
end

export['σκόνη'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'σκόνη']]
    args['οε'] = "ῆ"
    args['γε'] = "ῆς"
    args['αε'] = "ῆ"
    args['οπ'] = "αι"
    args['γπ'] = "ῶν"
    args['γπ0'] = "ῶν"
    return Lf['κλίση1'](args)
end

export['σφουγγαράς'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'σφουγγαράς']]
    args['οε'] = "ᾶς"
    args['γε'] = "ᾶ"
    args['αε'] = "ά"
    args['οπ'] = "άδαι"
    args['γπ'] = "άδων"
    return Lf['κλίση1'](args)
end

export['ταμίας'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'ταμίας']]
    args['οε'] = "ας"
    args['γε'] = "α"
    args['αε'] = "α"
    args['οπ'] = "αι"
    args['γπ'] = "ῶν"
    return Lf['κλίση1'](args)
end

export['ταχύπους'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'ταχύπους']]
    args['οε'] = "οῦς"
    args['γε'] = "οδος"
    args['αε'] = "οδα"
    args['κε'] = "οῦς"
    args['οπ'] = "οδαι"
    args['γπ'] = "όδων"
    args['απ'] = "οδαι"
    args['κπ'] = "οδαι"
    return Lf['κλίση1'](args)
end

export['τραγούδι'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'τραγούδι']]
    args['οε'] = "ι"
    args['γε'] = "ιοῦ"
    args['αε'] = "ι"
    args['οπ'] = "ια"
    args['γπ'] = "ιῶν"
    return Lf['κλίση1'](args)
end

-- με πρόσθετο σύμφωνο γ ή τ
export['τσάι'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'τσάι']]
    args['οε'] = "ι"
    args['γε'] = "ιοῦ"
    args['οπ'] = "ια"
    args['γπ'] = "ιῶν"
    args['οεθ'] = "1"
    args['γεθ'] = "2"
    args['οπθ'] = "1"
    args['γπθ'] = "2"
    args['πρόσφ'] ="γ"
    return Lf['κλίση2'](args)
end

export['Φρόσω'] = function(args)		-- [[Template:Wt/grc/grc-κλίσ-'Φρόσω']]
    args['οε'] = "ω"
    args['γε'] = "ως"
    args['αε'] = "ω"
    args['οπ'] = "ΧΧ"
    args['α'] = "εν"
    return Lf['κλίση1'](args)
end

export['φύλακας'] = function(args) -- [[Template:Wt/grc/grc-κλίσ-'φύλακας']]
    args['οε'] = "ας"
    args['γε'] = "α"
    args['αε'] = "α"
    args['οπ'] = "αι"
    args['γπ'] = "ων"
    args['γπθ'] = "3"
    return Lf['κλίση1'](args)
end

export['ψυχή'] = function(args)	-- [[Template:Wt/grc/grc-κλίσ-'ψυχή']]
    args['οε'] = "ῆ"
    args['γε'] = "ῆς"
    args['αε'] = "ῆ"
    args['οπ'] = "αι"
    if args['γπ'] == nil then args['γπ'] = "ῶν" end
    return Lf['κλίση1'](args)
end

-- ================ δοκιμαστικά
export['τεστ'] = function(args)
    args['ιδιαίτερη κλίση'] = true
    return Lf['κλίση1'](args)
end

export['ουσ'] = function(args)
    args['ιδιαίτερη κλίση'] = true
    return Lf['κλίση1'](args)
end

return export