ΠεριγραφήΕπεξεργασία

Προσωρινό Module για την κλίση ελληνικών ουσιαστικών

Μπορεί να καλείται από Πρότυπο κλίσης αφού περαστούν οι παράμετροι

(Η σελίδα προέρχεται από τη σελίδα οδηγιών: Module:Table-el-1/doc)

ΠαράμετροιΕπεξεργασία

Αριθμητικές παράμετροιΕπεξεργασία

(Δεν έχει αυτή τη στιγμή)

Ονομαστικές παράμετροιΕπεξεργασία

ΥποχρεωτικέςΕπεξεργασία

  • 'οε' : ονομαστική του ενικού
  • 'γε' : γενική του ενικού
  • 'αε' : αιτιατική του ενικού
  • 'κε' : κλητική του ενικού (ή 'κε0' όταν η πτώση πρέπει να μπει σε παρένθεση)
  • 'οπ' : ονομαστική του πληθυντικού
  • 'γπ' : γενική του πληθυντικού (ή 'γπ0' όταν η πτώση πρέπει να μπει σε παρένθεση)
  • 'απ' : αιτιατική του πληθυντικού
  • 'κπ' : κλητική του πληθυντικού (ή 'κπ0' όταν η πτώση πρέπει να μπει σε παρένθεση)

ΠροαιρετικέςΕπεξεργασία

  • 'θέμα1' : το θέμα του λήμματος
    αν η παράμετρος "θέμα1" υπάρχει τότε οι προηγούμενες υποχρεωτικές παράμετροι πρέπει να περιέχουν μόνο τις καταλήξεις των πτώσεων
  • 'εν' : σημαίνει να δείξουμε μόνο ενικό
  • 'πλ' : σημαίνει να δείξουμε μόνο πληθυντικό
  • 'παρατήρηση' : αν έχει κάποια παρατήρηση ή σημείωση

Παραδείγματα χρήσηςΕπεξεργασία

  • ενικός και πληθυντικός με παρατήρηση

{{#invoke: Table-el-1 | klisi2with1stem | οε = 1args.onomen | γε = 1args.genen | αε = 1args.aiten | κε = 1args.klen | οπ = 1args.onompl | γπ = 1args.genpl | απ = 1args.aitpl | κπ = 1args.klpl | παρατήρηση= μια παρατήρηση}}

ΠροβλήματαΕπεξεργασία

  1. Όταν η κατάληξη της ονομαστικής πληθυντικού έχει περισσότερα γράμματα από την κατάληξη ονομαστικής ενικού (πχ ελπίδ-α / ελπίδ-ες, μανάβ-ης / μανάβ-ηδες, πρέπει να καλούμε τη συνάρτηση klisi2 και όχι την klisi1.

-- Τελικός (δηλαδή ο τελευταίος που δέχεται όλες τις παραμέτρους)
-- πίνακας κλίσης ουσιαστικών στα ελληνικά
-- TODO μεταφορά σε καταλληλότερο όνομα
 
_module = {}
 
bgcolor = 'd9ebff'
titlebgcolor = '#A1BDEA'
bordercolor = '#AAAACC'
kataliksicolor = 'DeepPink' 
--αρχή μεταβλητής justanenter
justanenter = [=[

]=]
--τέλος μεταβλητής justanenter

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

--TODO παραμετροποίηση χρωμάτων για ευκολότερη μελλοντική τροποποίηση
fulltable2 = function (args)
    local remarkstr = justanenter
    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['πλ'] ~= nil then hassingular = false end
    local hasplural = true -- (args['πλ'] ~= nil)
    if args['εν'] ~= nil then hasplural = false end
    if not (args['παρατήρηση'] == nil or mw.ustring.len(args['παρατήρηση']) < 1) then        
        --mw.log('para')
        paratirisi = '|-' .. justanenter .. [=[| colspan="4" align="left" style="background:#d9ebff; font-size: 90%; font-style: italic;" | ]=] 
        paratirisi = paratirisi .. args['παρατήρηση'] .. justanenter
    end 
--    if paratirisi == nil then paratirisi =
    if hassingular then
        stitlestr =  [=[! bgcolor="#A1BDEA" colspan="1" align="center"| '''''[[ενικός]]''''']=] .. justanenter
        onomenstr =  [=[| align="left" | ]=] .. args['οε'] ..  justanenter
        genenstr =  [=[| align="left" | ]=] .. args['γε'] ..  justanenter
        aitenstr =  [=[| align="left" | ]=] .. args['αε'] ..  justanenter
        klenstr =  [=[| align="left" | ]=] .. args['κε'] ..  justanenter
    end
    if hasplural then
        ptitlestr = [=[! bgcolor="#A1BDEA" colspan="1" align="center"| '''''[[πληθυντικός]]''''']=] .. justanenter
        onomplstr =  [=[| align="left" | ]=] .. args['οπ'] ..  justanenter
        genplstr =  [=[| align="left" | ]=] .. args['γπ'] ..  justanenter
        aitplstr =  [=[| align="left" | ]=] .. args['απ'] ..  justanenter
        klplstr =  [=[| align="left" | ]=] .. args['κπ'] ..  justanenter
    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="#A1BDEA" | πτώση]=] .. justanenter .. stitlestr .. ptitlestr .. [=[|-
| bgcolor="#BED9ED" | '''''[[ονομαστική]]''''']=] .. justanenter .. onomenstr .. onomplstr .. [=[|-
| bgcolor="#BED9ED" | '''''[[γενική]]''''']=] .. justanenter .. genenstr .. genplstr .. [=[|-
| bgcolor="#BED9ED" | '''''[[αιτιατική]]''''']=] .. justanenter .. aitenstr .. aitplstr .. [=[|-
| bgcolor="#BED9ED" | '''''[[κλητική]]''''']=] .. justanenter .. klenstr .. klplstr .. paratirisi .. [=[|}]=] 
end

-- @param
--  'εν' : έχει μόνο ενικό
--  'πλ' : έχει μόνο πληθυντικό
--  'θέμα1' : το θέμα 
--  'οε' : ονομαστική του ενικού (ή μόνο η κατάληξη)
--  'γε' : γενική του ενικού (ή μόνο η κατάληξη)
--  'αε' : αιτιατική του ενικού (ή μόνο η κατάληξη)
--  'κε' : κλητική του ενικού (ή μόνο η κατάληξη)
--  'κε0' :  Αντικαθιστά το 'κε' όταν η πτώση είναι δύσχρηστη και πρέπει να μπει σε παρένθεση
--  'οπ' : ονομαστική του πληθυντικού (ή μόνο η κατάληξη)
--  'γπ' : γενική του πληθυντικού (ή μόνο η κατάληξη)
--  'γπ0' : Αντικαθιστά το 'γπ' όταν η πτώση είναι δύσχρηστη και πρέπει να μπει σε παρένθεση
--  'απ' : αιτιατική του πληθυντικού (ή μόνο η κατάληξη)
--  'κπ' : κλητική του πληθυντικού (ή μόνο η κατάληξη)
--  'κπ0' :  Αντικαθιστά το 'κπ' όταν η πτώση είναι δύσχρηστη και πρέπει να μπει σε παρένθεση
-- αν υπάρχει παράμετρος "θέμα1" τότε
-- οι παράμετροι περιέχουν μόνο τις καταλήξεις
-- οπότε προσθέτουμε και το θέμα1
function _module.klisi2with1stem(frame)
    local args = frame.args 
    if  not ((args['θέμα1'] ~= nil) or  (args['θέμα1'] ~='')) then
        args['οε'] = args['useasstem'] .. _xk( args['οε'])
        args['αε'] = args['useasstem'] .. _xk( args['αε'])
        args['οπ'] = args['useasstem'] .. _xk( args['οπ'])
        args['απ'] = args['useasstem'] .. _xk( args['απ'])
        if (args['γε'] == "-" or args['γε'] == nil) then
		    args['γε'] = ""
	    else
		    args['γε'] = args['useasstem'] .. _xk( args['γε'])
	    end
        if (args['γπ'] == "-" or args['γπ'] == nil) then
		    args['γπ'] = ""
	    else
        	args['γπ'] = args['useasstem'] .. _xk( args['γπ'])
	    end
	    if args['γπ0'] ~= nil then
		   args['γπ'] = '(' .. args['useasstem'] .. _xk( args['γπ0']) .. ')'
	    end
	    if args['κε0'] ~= nil then
        	args['κε'] = '(' .. args['useasstem'] .. _xk( args['κε0']) .. ')'
	    else
		    args['κε'] = args['useasstem'] .. _xk( args['κε'])
	    end
	    if args['κπ0'] ~= nil then
        	args['κπ'] = '(' .. args['useasstem'] .. _xk( args['κπ0']) .. ')'
	    else
		    args['κπ'] = args['useasstem'] .. _xk( args['κπ'])
	    end
    end
    if ((args['α'] ~= nil)  or  (args['α'] ~='')) then
        if args['α'] == 'εν' then
            args['εν'] = 1
        elseif  args['α'] == 'πλ' then
            args['πλ'] = 1
        end
    end
-- TODO is preprocess necessary?
    return frame:preprocess(fulltable2(args))    
end

-- παράμετρος 'θέμα'
--είτε αριθμητική (1,2,3 κλπ), οπότε αφαιρεί τόσους χαρακτήρες από τον τίτλο του λήμματος
--είτε το θέμα που θα χρησιμοποιηθεί
--
--για τις περιπτώσεις που χρειάζεται και δεύτερο θέμα
--θα χρησιμοποιηθεί άλλη συνάρτηση οπότε εδώ μας είναι αδιάφορο
--παράμετρος 'α'
--είτε δεν υπάρχει
--είτε ισούται με:
----εν :όταν δείχνουμε μόνο ενικό
----πλ :όταν δείχνουμε μόνο πληθυντικό
function _module.klisi1(frame)
    local args = frame.args
    PAGENAME = mw.title.getCurrentTitle().text
    local lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    local stemisnumber = false
    --αν έχει παράμετρο θέμα
    if ((args['θέμα'] == nil) or  (args['θέμα'] =='')) then
        --δεν έχει στείλει παράμετρο θέμα
        --σφάλμα;
        --ή δείξε χωρίς παράμετρο;
        --πάντως το 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
    --αν βρήκαμε θέμα...
    --αλλιώς στέλνει μόνο τα οε,γε κλπ
    if (args['useasstem'] ~= nil and args['useasstem'] ~= '') then
        args['οε'] = args['useasstem'] .. _xk( args['οε'])
        args['αε'] = args['useasstem'] .. _xk( args['αε'])
        args['οπ'] = args['useasstem'] .. _xk( args['οπ'])
        args['απ'] = args['useasstem'] .. _xk( args['απ'])
        if (args['γε'] == "-" or args['γε'] == nil) then
		args['γε'] = ""
	else
		args['γε'] = args['useasstem'] .. _xk( args['γε'])
	end
        if (args['γπ'] == "-" or args['γπ'] == nil) then
		args['γπ'] = ""
	else
        	args['γπ'] = args['useasstem'] .. _xk( args['γπ'])
	end
	if args['γπ0'] ~= nil then
		args['γπ'] = '(' .. args['useasstem'] .. _xk( args['γπ0']) .. ')'
	end
	if args['κε0'] ~= nil then
        	args['κε'] = '(' .. args['useasstem'] .. _xk( args['κε0']) .. ')'
	else
		args['κε'] = args['useasstem'] .. _xk( args['κε'])
	end
	if args['κεπ0'] ~= nil then
        	args['κπ'] = '(' .. args['useasstem'] .. _xk( args['κπ0']) .. ')'
	else
		args['κπ'] = args['useasstem'] .. _xk( args['κπ'])
	end
    end
    if ((args['α'] ~= nil)  or  (args['α'] ~='')) then
        if args['α'] == 'εν' then
            args['εν'] = 1
        elseif  args['α'] == 'πλ' then
            args['πλ'] = 1
        end
    end
-- TODO is preprocess necessary?
    return frame:preprocess(fulltable2(args))    
end

function _module.klisi2(frame)
    local args = frame.args
    local parent=frame.getParent(frame)
    --αν δεν έχει στείλει παράμετρο α
    if not ((args['α'] ~= nil)  or  (args['α'] ~='')) then
        --αν υπάρχει παράμετρος α στο λήμμα
        if  ((parent.args['α'] ~= nil)  or  (parent.args['α'] ~='')) then
            args['α'] = parent.args['α']
        end        
    end    
    PAGENAME = mw.title.getCurrentTitle().text
    --αφαίρεση κενών στην αρχή και στο τέλος
    local lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    local stemisnumber = false
    local stemnumber = 0
    --αν έχει παράμετρο θέμα
    if ((args['θέμα'] == nil) or  (args['θέμα'] =='')) then
        --δεν έχει στείλει παράμετρο θέμα
        --σφάλμα;
        --ή δείξε χωρίς παράμετρο;
        --πάντως το args['useasstem'] είναι nil εδώ
    else
        --βρες αν είναι αριθμός
        stemnumber = tonumber(args['θέμα'])
        --είναι αριθμητική αν δεν είναι nil
        --(απιθανό) πρόβλημα αν το θέμα ξεκινάει από αριθμό
        if stemnumber ~= nil then
            --βρες το θέμα αφαιρώντας τόσους χαρακτήρες όσους λέει η παράμετρος
            args['useasstem'] = mw.ustring.sub(lemma,1,-stemnumber-1)
            stemisnumber = true
       else
            --αλλιώς χρησιμοποίησε σαν θέμα την παράμετρο 'θέμα'
            args['useasstem'] = args['θέμα']
        end
    end
    if (args['useasstem'] ~= nil and args['useasstem'] ~= '') then                    
         --αν βρήκαμε θέμα...
        --αλλιώς στέλνει μόνο τα οε,γε κλπ
        if ((args['α'] ~= nil)  or  (args['α'] ~='')) then
            if args['α'] == 'εν' then
                args['εν'] = 1
            --αν είναι μόνο στον πληθυντικό
            elseif  args['α'] == 'πλ' then
                args['πλ'] = 1
                local diafora = mw.ustring.len(args['οπ']) - mw.ustring.len(args['οε'])
                --αν υπάρχει διαφορά αριθμού χαρακτήρων κατάληξης
                --μεταξυ ονομαστικής ενικού και ονομαστικής πληθυντικού
                --(μεγαλύτερη του μηδενός, εδώ θα υπάρξει πρόβλημα
                --αν η διαφορά είναι αρνητική)
                if diafora > 0 then
                    args['useasstem'] = mw.ustring.sub(args['useasstem'],1,-diafora-1)
                end
                if diafora < 0 then
                    --αρνητική διαφορά.
                    --αν έχουμε αριθμητικό θέμα (αλλιώς μας έχει στείλει το θέμα)
                    --αυτό θα αναφέρεται στην κατάληξη του ενικού
                    --(λόγω αυτοματισμού του προτύπου)
                    --οπότε βρίσκουμε το θέμα αφαιρώντας από τον τίτλο του λήμματος
                    --τη "διαφορά" καταλήξεων 
                    if stemisnumber then
                        local neadiafora = stemnumber + diafora --(είναι αρνητικός αριθμός)
                        args['useasstem'] = mw.ustring.sub(lemma,1,-neadiafora-1)  
                    end                    
                end
            end
        end
        args['οε'] = args['useasstem'] .. _xk( args['οε'])
        args['αε'] = args['useasstem'] .. _xk( args['αε'])
        args['οπ'] = args['useasstem'] .. _xk( args['οπ'])
        args['απ'] = args['useasstem'] .. _xk( args['απ'])
        if (args['γε'] == "-" or args['γε'] == nil) then
		args['γε'] = ""
	else
		args['γε'] = args['useasstem'] .. _xk( args['γε'])
	end
        if (args['γπ'] == "-" or args['γπ'] == nil) then
		args['γπ'] = ""
	else
        	args['γπ'] = args['useasstem'] .. _xk( args['γπ'])
	end
	if args['γπ0'] ~= nil then
		args['γπ'] = '(' .. args['useasstem'] .. _xk( args['γπ0']) .. ')'
	end
	if args['κε0'] ~= nil then
        	args['κε'] = '(' .. args['useasstem'] .. _xk( args['κε0']) .. ')'
	else
		args['κε'] = args['useasstem'] .. _xk( args['κε'])
	end
	if args['κεπ0'] ~= nil then
        	args['κπ'] = '(' .. args['useasstem'] .. _xk( args['κπ0']) .. ')'
	else
		args['κπ'] = args['useasstem'] .. _xk( args['κπ'])
	end
    end
-- TODO is preprocess necessary?
    return frame:preprocess(fulltable2(args))    
end

--for debuging
--print(p.klisitest('ουρανός','ουραν'))
--print(p.klisitest('ουρανός','2'))
--print(p.klisitest('ουρανός','otinanai'))
function _module.klisitest (param1, param2)
    --local args = frame.args
    --PAGENAME = mw.title.getCurrentTitle().text
    --local lemma = PAGENAME:match( "^%s*(.-)%s*$" )
    local args = {}
    local lemma = param1:match( "^%s*(.-)%s*$" )
    args['useasstem'] = ''
    args['θέμα'] = param2
    local output =  lemma
    output =  output .. '*' .. args['θέμα'] .. '*'
    args['οε'] = 'ός'
    args['γε'] = 'ού'
    args['αε'] = 'ό'
    args['κε'] = 'ε'
    args['οπ'] = 'οί'
    args['γπ'] = 'ών'
    args['απ'] = 'ούς'
    args['κπ'] = 'οί'    
    --αν έχει παράμετρο θέμα    
    if ((args['θέμα'] == nil) or  (args['θέμα'] =='')) then
        --δεν έχει στείλει παράμετρο θέμα
        --σφάλμα ή δείξε χωρίς παράμετρο;
        output =  output .. '=3='
    else
        --βρες αν είναι αριθμητική και μεγαλύτερη του μηδενός  
        local stemnumber = tonumber(args['θέμα'])
        --stemisnumber = (stemnumber > 0)
        output =  output .. '//' .. tostring(stemisnumber) .. '//'
        --αν είναι αριθμητική
        if stemnumber ~= nil then
            --βρες το θέμα αφαιρώντας τόσους χαρακτήρες όσους λέει η παράμετρος
            args['useasstem'] = mw.ustring.sub(lemma,1,-stemnumber-1) 
            output =  output .. [=[#args['useasstem']#]=] ..args['useasstem'] .. '#'
        else
            --αλλιώς χρησιμοποίησε σαν θέμα την παράμετρο 'θέμα'
            args['useasstem'] = args['θέμα']
            output =  output .. '=2='
        end
    end
    if  (args['useasstem'] ~= nil and args['useasstem'] ~= '')  then
        args['οε'] = args['useasstem'] .. _xk( args['οε'])
        args['γε'] = args['useasstem'] .. _xk( args['γε'])
        args['αε'] = args['useasstem'] .. _xk( args['αε'])
        args['κε'] = args['useasstem'] .. _xk( args['κε'])
        args['οπ'] = args['useasstem'] .. _xk( args['οπ'])
        args['γπ'] = args['useasstem'] .. _xk( args['γπ'])
        args['απ'] = args['useasstem'] .. _xk( args['απ'])
        args['κπ'] = args['useasstem'] .. _xk( args['κπ'])
    end
    if ((args['α'] ~= nil)  or  (args['α'] ~='')) then
        if args['α'] == 'εν' then
            args['εν'] = 1
        elseif  args['α'] == 'πλ' then
            args['πλ'] = 1
        end
    end
    output =  output .. '-' .. fulltable2(args)
-- TODO is preprocess necessary?
    return output
end

return _module