Module:Table-el-1
Περιγραφή
επεξεργασίαΠροσωρινό 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 | παρατήρηση= μια παρατήρηση}}
Προβλήματα
επεξεργασία- Όταν η κατάληξη της ονομαστικής πληθυντικού έχει περισσότερα γράμματα από την κατάληξη ονομαστικής ενικού (πχ ελπίδ-α / ελπίδ-ες, μανάβ-ης / μανάβ-ηδες, πρέπει να καλούμε τη συνάρτηση 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