Documentation for this module may be created at Module:table-el-adj1/τεκμηρίωση

--[=[ πίνακες κλίσης επιθέτων στα ελληνικά - greek adjectives declension
	by Flyax, 2013
	2019.11.25. links με linkcontrol των χρωματισμών θέματος-κατάληξης
ΠΡΟΒΛΗΜΑΤΑ:
	Γιατί δεν λειτουργεί το p['ελαστικός'] [[Πρότυπο:el-κλίσ-'ελαστικός']]
		βγάζει λάθος στο _xk
	Γιατί τα functions έχουν διαφορετικό τρόπο ονομασίας?
	Γιατί το [[Module:la-nouns-decl]] είναι γραμμένο διαφορετικά?
Εκκρεμότητες:
	* μετονομασία και μεταφορά στο Module:κλίση/el/επίθετο? ή el-adj-decl
	* κλιτικά μοντέλα custom (κάθε πτώση, με δυνατότητα: 2ο τύπο, τύπο σε παρένθεση και παύλα)
	* κλιτικό μοντέλο όπου υπάρχει διπλή κλητική κεΑ (κεΑ0) όπως συνεχή(ς)
]=]--

_p = {}

--χρώματα
sidebgcolor = '#BED9ED'
titlebgcolor = '#A1BDEA'
bordercolor = '#AAAACC'
kataliksicolor = 'DeepPink'
stemcolor = '#002000'

-- χρωματισμός κατάληξης
function _xk(kataliksi)
    return '<span style="color:' .. kataliksicolor ..'; font-weight:normal;">' .. kataliksi .. '</span>'
end
-- χρωματισμός θέματος
function _xs(stem)
    return '<span style="color:' .. stemcolor ..'; font-weight:normal;">' .. stem .. '</span>'
end

-- δημιουργία συνδέσμων - create links
function _create_link(page, text)
	if text then
		return '[[' .. page .. '|' .. text .. ']]'
	else
		return '[[' .. page .. ']]'
	end
end

-- ελέγχει χρώμα συνδέσμου θέμα+κατάληξη - controls link-colour stem+ending
function _linkcontrol(stem, kataliksi)
	return _create_link(stem .. kataliksi, _xs(stem) .. _xk(kataliksi))
end

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

fulltable2 = function (args)
    local remarkstr = '\n'
    local paratirisi = ''
    if exeikati (args['παρατήρηση']) then        
        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 =
    
    return [=[{| style="float:right;border:1px solid ]=] ..bordercolor .. [=[;margin-left:0.5em;margin-bottom:0.5em;text-align:center;" rules="all" cellpadding="3" cellspacing="0"
! bgcolor=]=] .. titlebgcolor .. [=[| '''''[[πτώση]]'''''
! bgcolor=]=] .. titlebgcolor .. [=[ colspan="3" | '''''[[ενικός]]'''''
|-
| bgcolor=]=] .. sidebgcolor .. [=[ | '''''[[ονομαστική]]'''''
| align="left" |]=] .. args['οεΑ'] .. '\n' .. [=[
| align="left" |]=] .. args['οεΘ'] .. '\n' .. [=[
| align="left" |]=] .. args['οεΟ'] .. '\n' .. [=[
|-
| bgcolor=]=] .. sidebgcolor .. [=[ | '''''[[γενική]]'''''
| align="left" |]=] .. args['γεΑ'] .. '\n' .. [=[
| align="left" |]=] .. args['γεΘ'] .. '\n' .. [=[
| align="left" |]=] .. args['γεΟ'] .. '\n' .. [=[
|-
| bgcolor=]=] .. sidebgcolor .. [=[ | '''''[[αιτιατική]]'''''
| align="left" |]=] .. args['αεΑ'] .. '\n' .. [=[
| align="left" |]=] .. args['αεΘ'] .. '\n' .. [=[
| align="left" |]=] .. args['οεΟ'] .. '\n' .. [=[
|-
| bgcolor=]=] .. sidebgcolor .. [=[ | '''''[[κλητική]]'''''
| align="left" |]=] .. args['κεΑ'] .. '\n' .. [=[
| align="left" |]=] .. args['κεΘ'] .. '\n' .. [=[
| align="left" |]=] .. args['κεΟ'] .. '\n' .. [=[
|-
! bgcolor=]=] .. titlebgcolor .. [=[ | '''''[[πτώση]]'''''
! bgcolor=]=] .. titlebgcolor .. [=[ colspan="3" | '''''[[πληθυντικός]]'''''
|-
| bgcolor=]=] .. sidebgcolor .. [=[ | '''''[[ονομαστική]]'''''
| align="left" |]=] .. args['οπΑ'] .. '\n' .. [=[
| align="left" |]=] .. args['οπΘ'] .. '\n' .. [=[
| align="left" |]=] .. args['οπΟ'] .. '\n' .. [=[
|-
| bgcolor=]=] .. sidebgcolor .. [=[ | '''''[[γενική]]'''''
| align="left" |]=] .. args['γπΑ'] .. '\n' .. [=[
| align="left" |]=] .. args['γπΘ'] .. '\n' .. [=[
| align="left" |]=] .. args['γπΟ'] .. '\n' .. [=[
|-
| bgcolor=]=] .. sidebgcolor .. [=[ | '''''[[αιτιατική]]'''''
| align="left" |]=] .. args['απΑ'] .. '\n' .. [=[
| align="left" |]=] .. args['απΘ'] .. '\n' .. [=[
| align="left" |]=] .. args['οπΟ'] .. '\n' .. [=[
|-
| bgcolor=]=] .. sidebgcolor .. [=[ | '''''[[κλητική]]'''''
| align="left" |]=] .. args['κπΑ'] .. '\n' .. [=[
| align="left" |]=] .. args['κπΘ'] .. '\n' .. [=[
| align="left" |]=] .. args['κπΟ'] .. '\n' .. paratirisi .. [=[
|}]=]
end

-- @param
--  'θέμα1' : το θέμα 
--  'οεΑ' : ονομαστική του ενικού του αρσενικού (ή μόνο η κατάληξη)
--  'γεΘ' : γενική του ενικού του θηλυκού(ή μόνο η κατάληξη)
--  'οεΟ' : ονομαστική, αιτιατική κ' κλητική του ενικού του ουδετέρου (ή μόνο η κατάληξη)
--  κλπ........
--  'γεΘ2' : δεύτερη γενική του ενικού του θηλυκού(ή μόνο η κατάληξη)
--  'γπΘ0' : όμοιο με το γπΘ αλλά θα τεθεί σε παρένθεση
-- αν υπάρχει παράμετρος "θέμα1" τότε
-- οι παράμετροι περιέχουν μόνο τις καταλήξεις
-- οπότε προσθέτουμε και το θέμα1

function _p.klisi2with1stem(frame)
    local args = frame.args 
    if  not ((args['θέμα1'] ~= nil) or  (args['θέμα1'] ~='')) then
        args['οεΑ'] = _linkcontrol(args['θέμα1'], args['οεΑ'])
        args['γεΑ'] = _linkcontrol(args['θέμα1'], args['γεΑ'])
        args['αεΑ'] = _linkcontrol(args['θέμα1'], args['αεΑ'])
        args['κεΑ'] = _linkcontrol(args['θέμα1'], args['κεΑ'])
        args['οπΑ'] = _linkcontrol(args['θέμα1'], args['οπΑ'])
        args['γπΑ'] = _linkcontrol(args['θέμα1'], args['γπΑ'])
        args['απΑ'] = _linkcontrol(args['θέμα1'], args['απΑ'])
        args['κπΑ'] = _linkcontrol(args['θέμα1'], args['κπΑ'])
        args['οεΘ'] = _linkcontrol(args['θέμα1'], args['οεΘ'])
        args['γεΘ'] = _linkcontrol(args['θέμα1'], args['γεΘ'])
        args['αεΘ'] = _linkcontrol(args['θέμα1'], args['αεΘ'])
        args['κεΘ'] = _linkcontrol(args['θέμα1'], args['κεΘ'])
        args['οπΘ'] = _linkcontrol(args['θέμα1'], args['οπΘ'])
        args['γπΘ'] = _linkcontrol(args['θέμα1'], args['γπΘ'])
        args['απΘ'] = _linkcontrol(args['θέμα1'], args['απΘ'])
        args['κπΘ'] = _linkcontrol(args['θέμα1'], args['κπΘ'])
        args['οεΟ'] = _linkcontrol(args['θέμα1'], args['οεΟ'])
        args['γεΟ'] = _linkcontrol(args['θέμα1'], args['γεΟ'])
        args['οπΟ'] = _linkcontrol(args['θέμα1'], args['οπΟ'])
        args['γπΟ'] = _linkcontrol(args['θέμα1'], args['γπΟ'])
    end
-- TODO is preprocess necessary?
    return frame:preprocess(fulltable2(args))    
end

-- παράμετρος 'θέμα'
--είτε αριθμητική (1,2,3 κλπ), οπότε αφαιρεί τόσους χαρακτήρες από τον τίτλο του λήμματος
--είτε το θέμα που θα χρησιμοποιηθεί
--
--για τις περιπτώσεις που χρειάζεται και δεύτερο θέμα
--θα χρησιμοποιηθεί άλλη συνάρτηση οπότε εδώ μας είναι αδιάφορο

function _p.klisi1(frame)
    local args = frame.args
    local lemmaargs = frame:getParent().args
    PAGENAME = mw.title.getCurrentTitle().text
    local lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    args['παρατήρηση'] = lemmaargs['παρατήρηση']

    if args['λήμμα'] ~= nil and args['λήμμα'] ~= "" then
        lemma = args['λήμμα']
    else
        PAGENAME = mw.title.getCurrentTitle().text
        --αφαίρεση κενών στην αρχή και στο τέλος
        lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    end
    --αν έχει παράμετρο θέμα
    
    if not exeikati(args['θέμα']) then
        --δεν έχει στείλει παράμετρο θέμα
        --στα ελληνικά επίθετα, στο αρσενικό όλα έχουν σαν κατάληξη 2 γράμματα
        args['useasstem'] = mw.ustring.sub(lemma,1,-3)
        --πάντως το args['useasstem'] είναι nil εδώ
    else
        --βρες αν είναι αριθμός
        local stemnumber = tonumber(args['θέμα'])
        --είναι αριθμητική αν δεν είναι nil
        --(απίθανο) πρόβλημα αν το θέμα ξεκινάει από αριθμό
        if stemnumber ~= nil then
            --βρες το θέμα αφαιρώντας τόσους χαρακτήρες όσους λέει η παράμετρος
            --και ακόμα μία
            args['useasstem'] = mw.ustring.sub(lemma,1,-stemnumber-1) 
        else
            --αλλιώς χρησιμοποίησε σαν θέμα την παράμετρο 'θέμα'
            args['useasstem'] = args['θέμα']
        end
    end
    --αν βρήκαμε θέμα...
    --αλλιώς στέλνει μόνο τα οε,γε κλπ
    args['καισεΑ'] = (lemmaargs[1] == 'καισεΑ')
    args['καισεΙΑ'] = (lemmaargs[1] == 'καισεΙΑ')
    args['καισε-ια'] = (lemmaargs[1] == 'καισε-ια')
    if exeikati(args['useasstem']) then
        args['οεΑ'] = _linkcontrol(args['useasstem'], args['οεΑ'])
        args['γεΑ'] = _linkcontrol(args['useasstem'], args['γεΑ'])
        if args['γεΑ2'] ~= nil then
        	args['γεΑ'] = args['γεΑ'] .. "<br />" .. _linkcontrol(args['useasstem'], args['γεΑ2'])
    	end
        args['αεΑ'] = _linkcontrol(args['useasstem'], args['αεΑ'])
-- κλητική ενικού αρσενικού ΤΕΣΤ [[όμοροφς]] (κανονικά), [[πόσος]] (χωρίς κεΑ), [[συνεχής]] (με διπλή κλητική)
    	if (args['κεΑ'] ~= nil and args['κεΑ'] ~= "-") then 
    		if args['κεΑ2'] ~= nil and args['κεΑ2'] ~= '' then
  	   		args['κεΑ'] = _linkcontrol(args['useasstem'], args['κεΑ']) .. "(" .. _create_link((args['useasstem'] .. args['κεΑ2']), _xk(args['κεΑ2'])) .. ")" --όπως κλητ. συνεχή(ής) [[Πρότυπο:el-κλίσ-'συνεχής']]
     		else
    		args['κεΑ'] = _linkcontrol(args['useasstem'], args['κεΑ'])
    		end
    	else
    		args['κεΑ'] = ""
    	end

        args['οπΑ'] = _linkcontrol(args['useasstem'], args['οπΑ'])
    	if args['οπΑ2'] ~= nil then
    		args['οπΑ'] = args['οπΑ'] .. "<br />" .. _linkcontrol(args['useasstem'], args['οπΑ2'])
    	end
        args['γπΑ'] = _linkcontrol(args['useasstem'], args['γπΑ'])
    	if args['γπΑ2'] ~= nil then
    		args['γπΑ'] = args['γπΑ'] .. "<br />" .. _linkcontrol(args['useasstem'], args['γπΑ2'])
    	end
        args['απΑ'] = _linkcontrol(args['useasstem'], args['απΑ'])
    	if args['απΑ2'] ~= nil then
    		args['απΑ'] = args['απΑ'] .. "<br />" .. _linkcontrol(args['useasstem'], args['απΑ2'])
    	end
    	if (args['κπΑ'] ~= nil and args['κπΑ'] ~= "-") then
            	args['κπΑ'] = _linkcontrol(args['useasstem'], args['κπΑ'])
    	else
    		args['κπΑ'] = ""
    	end
    	if args['κπΑ2'] ~= nil then
    		args['κπΑ'] = args['κπΑ'] .. "<br />" .. _linkcontrol(args['useasstem'], args['κπΑ2'])
    	end
-- θηλυκό -----------------------------
		local sec = {}
        local use_sec = false
        if args['καισεΑ'] then
        	sec['οεθ'] = 'α'
        	sec['γεθ'] = 'ας'
        	sec['αεθ'] = 'α'
        	sec['κεθ'] = 'α'
        	use_sec = true
        elseif args['καισε-ια'] then --όπως στο [[αλμυρούτσικος]], και τα -ούτσικος
        	sec['οεθ'] = 'ια'
        	sec['γεθ'] = 'ιας'
        	sec['αεθ'] = 'ια'
        	sec['κεθ'] = 'ια'
        	use_sec = true
        elseif args['καισεΙΑ'] then --όπως στο [[κρητικός]]
        	sec['οεθ'] = 'ιά'
        	sec['γεθ'] = 'ιάς'
        	sec['αεθ'] = 'ιά'
        	sec['κεθ'] = 'ιά'
        	use_sec = true
        end
        args['οεΘ'] = _linkcontrol(args['useasstem'], args['οεΘ'])
        args['γεΘ'] = _linkcontrol(args['useasstem'], args['γεΘ'])
    	if args['γεΘ2'] ~= nil then 
    		args['γεΘ'] = args['γεΘ'] .. '<br />' .. _linkcontrol(args['useasstem'], args['γεΘ2']) -- όπως στο [[απών]]
    	end
		args['αεΘ'] = _linkcontrol(args['useasstem'], args['αεΘ'])
    	if use_sec then -- Προσθήκη δεύτερων τύπων
    		args['οεΘ'] = args['οεΘ'] .. '<br />' .. _linkcontrol(args['useasstem'], sec['οεθ'])
    		args['γεΘ'] = args['γεΘ'] .. '<br />' .. _linkcontrol(args['useasstem'], sec['γεθ'])
    		args['αεΘ'] = args['αεΘ'] .. '<br />' .. _linkcontrol(args['useasstem'], sec['αεθ'])
    	end
    	
    	if (args['κεΘ'] ~= nil and args['κεΘ'] ~= "-") then 
    		args['κεΘ'] = _linkcontrol(args['useasstem'], args['κεΘ'])
    	else
    		args['κεΘ'] = ""
    	end
    	if use_sec then
    		if args['κεΘ'] == "" then
    			args['κεΘ'] = _linkcontrol(args['useasstem'], sec['κεθ'])
    		else
    			args['κεΘ'] = args['κεΘ'] .. '<br />' .. _linkcontrol(args['useasstem'], sec['κεθ'])
    		end
    	end
        args['οπΘ'] = _linkcontrol(args['useasstem'], args['οπΘ'])
        if args['καισεΑ'] then
    		args['οπΘ'] = args['οπΘ'] .. '<br />' .. _linkcontrol(args['useasstem'], 'ες')
    	end
    	if args['γπΘ'] ~= nil and args['γπΘ'] ~= "-" then args['γπΘ'] = _linkcontrol(args['useasstem'], args['γπΘ']) else args['γπΘ'] = '' end
    	if args['γπΘ0'] ~= nil then 
    		args['γπΘ'] = '(' .. _linkcontrol(args['useasstem'], args['γπΘ0']) .. ')'
    	end
    	if args['γπΘ2'] ~= nil then 
    		args['γπΘ'] = args['γπΘ'] .. '<br />' .. _linkcontrol(args['useasstem'], args['γπΘ2']) .. ')'
    	end
    	--γπΘ ίδια και για το "καισεΑ"
        args['απΘ'] = _linkcontrol(args['useasstem'], args['απΘ'])
        if args['καισεΑ'] then
    		args['απΘ'] = args['απΘ'] .. '<br />' .. _linkcontrol(args['useasstem'], 'ες')
    	end
    	if (args['κπΘ'] ~= nil and args['κπΘ'] ~= "-") then
            	args['κπΘ'] = _linkcontrol(args['useasstem'], args['κπΘ'])
    	else
    		args['κπΘ'] = ""
    	end
    	if args['καισεΑ'] then
    		if args['κπΘ'] == "" then
    			args['κπΘ'] = _linkcontrol(args['useasstem'], 'ες')
    		else
    			args['κπΘ'] = args['κπΘ'] .. '<br />' .. _linkcontrol(args['useasstem'], 'ες')
    		end
    	end
-- ουδέτερο -----------------------------
        args['οεΟ'] = _linkcontrol(args['useasstem'], args['οεΟ'])
        args['γεΟ'] = _linkcontrol(args['useasstem'], args['γεΟ'])
    	if (args['γεΟ2'] ~= nil and args['γεΟ2'] ~= "-" ) then 
    		args['γεΟ'] = args['γεΟ'] .. '<br />' .. _linkcontrol(args['useasstem'], args['γεΟ2'])
    	end
    	if args['κεΟ'] ~= "-" then 
    		args['κεΟ'] = args['οεΟ']
    	else
    		args['κεΟ'] = ""
    	end
        args['οπΟ'] = _linkcontrol(args['useasstem'], args['οπΟ'])
    	if (args['οπΟ2'] ~= nil and args['οπΟ2'] ~= "-") then 
    		args['οπΟ'] = args['οπΟ'] .. '<br />' .. _linkcontrol(args['useasstem'], args['οπΟ2'])
    	end
        args['γπΟ'] = _linkcontrol(args['useasstem'], args['γπΟ'])
    	if (args['γπΟ2'] ~= nil and args['γπΟ2'] ~= "-" ) then 
    		args['γπΟ'] = args['γπΟ'] .. '<br />' .. _linkcontrol(args['useasstem'], args['γπΟ2'])
    	end
    	if args['κπΟ'] ~= "-" then 
    		args['κπΟ'] = args['οπΟ']
    	else
    		args['κπΟ'] = ""
    	end
    end
-- TODO is preprocess necessary?
    return frame:preprocess(fulltable2(args))    
end

-- ============================ ΚΛΙΣΕΙΣ
_p['ελαστικός'] = function(args) --δοκιμαστικό
    args['οεΑ'] = "ός"
    args['οεΘ'] = "ή"
    args['οεΟ'] = "ό"
    args['γεΑ'] = "ού"
    args['γεΘ'] = "ής"
    args['γεΟ'] = "ού"
    args['αεΑ'] = "ό"
    args['αεΘ'] = "ή"
    args['αεΟ'] = "ό"
    args['κεΑ'] = "έ"
    args['κεΘ'] = "ή"
    args['κεΟ'] = "ό"

    args['οπΑ'] = "οί"
    args['οπΘ'] = "ές"
    args['οπΟ'] = "ά"
    args['γπΑ'] = "ών"
    args['γπΘ'] = "ών"
    args['γπΟ'] = "ών"
    args['απΑ'] = "ούς"
    args['απΘ'] = "ές"
    args['απΟ'] = "ά"
    args['κπΑ'] = "οί"
    args['κπΘ'] = "ές"
    args['κπΟ'] = "ά"
    return _p.klisi1(args)
end

return _p