Module:User:Xoristzatziki/test1
Appearance
- This module sandbox lacks a documentation subpage. You may create it.
- Useful links: root page • root page’s subpages • links • transclusions • testcases • user page • user talk page • userspace
This is a private module sandbox of Xoristzatziki, for their own experimentation. Items in this module may be added and removed at Xoristzatziki's discretion; do not rely on this module's stability.
-- create decl table for greek nouns
-- Option to select if only singular or only plural exists
_module ={}
bgcolor = 'd9ebff'
titlebgcolor = '#A1BDEA'
bordercolor = '#AAAACC'
kataliksicolor = 'DeepPink'
-- χρωματισμός κατάληξης
function _xk(kataliksi)
return '<font style="color:' .. kataliksicolor ..';">' .. kataliksi .. '</font>'
end
atona = { ['Α'] = 'Ά', ['α'] = 'ά', ['ε'] = 'έ', ['Ε'] = 'Έ',
['Η'] = 'Ή', ['η'] = 'ή', ['ι'] = 'Ί', ['ι'] = 'ί', ['ϊ'] = 'ΐ',
['Ο'] = 'Ό', ['ο'] = 'ό', ['Υ'] = 'Ύ', ['υ'] = 'ύ', ['ϋ'] = 'ΰ',
['Ω'] = 'Ώ', ['ω'] = 'ώ' }
tonismena = {
['Ά'] = 'Α',
['ά'] = 'α',
['Έ'] = 'Ε',
['έ'] = 'ε',
['Ή'] = 'Η',
['ή'] = 'η',
['Ί'] = 'Ι',
['ί'] = 'ι',
['ΐ'] = 'ϊ',
['Ό'] = 'Ο',
['ό'] = 'ο',
['Ύ'] = 'Υ',
['ύ'] = 'υ',
['ΰ'] = 'ϋ',
['Ώ'] = 'Ω',
['ώ'] = 'ω',
}
tonismena2 ={
['άι'] = 'αϊ',
['έι'] = 'εϊ',
['όι'] = 'οϊ',
['άυ'] = 'αϋ',
['έυ'] = 'εϋ',
['όυ'] = 'οϋ'
}
-- ['ύι'] = 'υϊ', δεν υπάρχει σε ουσιαστικά, μόνο στο επίθετο δρύινος. Αντίθετα, θα βάλει διαλυτικά
-- στο βούισμα, βουίσματα
function _module.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 _module.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 _module.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
--TODO παραμετροποίηση χρωμάτων για ευκολότερη μελλοντική τροποποίηση
fulltable = function (args,frame)
--local output =''
local stitlestr = ''
local ptitlestr = ''
local onomenstr = ''
local onomplstr = ''
local genenstr = ''
local genplstr = ''
local aitenstr = ''
local aitplstr = ''
local klenstr = ''
local klplstr = ''
local notes = ''
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['notes'] == nil or mw.ustring.len(args['notes']) < 1) then
notes = '|-\n| colspan="' .. args.cols .. '" align="left" style="background:#d9ebff; font-size: 90%; font-style: italic;" | '
notes = notes .. args.notes .. '\n'
end
if args.hassingular then
stitlestr = '! style="background:#cce4fc" | singular <small>(' .. frame:expandTemplate{ title = 'Grek', args = { '[[ενικός]]', lang = 'el' } } .. ')</small>' .. '\n'
onomenstr = '|' .. frame:expandTemplate{ title = 'Grek', args = { args[1], lang = 'el' } } .. '\n'
genenstr = '|' .. frame:expandTemplate{ title = 'Grek', args = { args[3], lang = 'el' } } .. '\n'
aitenstr = '|' .. frame:expandTemplate{ title = 'Grek', args = { args[5], lang = 'el' } } .. '\n'
klenstr = '|' .. frame:expandTemplate{ title = 'Grek', args = { args[7], lang = 'el' } } .. '\n'
end
if args.hasplural then
ptitlestr = '! style="background:#cce4fc" | plural <small>(' .. frame:expandTemplate{title = 'Grek', args = { '[[πληθυντικός]]', lang = 'el' } } .. ')</small>' .. '\n'
onomplstr = '|' .. frame:expandTemplate{ title = 'Grek', args = { args[2], lang = 'el' } } .. '\n'
genplstr = '|' .. frame:expandTemplate{ title = 'Grek', args = { args[4], lang = 'el' } } .. '\n'
aitplstr = '|' .. frame:expandTemplate{ title = 'Grek', args = { args[6], lang = 'el' } } .. '\n'
klplstr = '|' .. frame:expandTemplate{ title = 'Grek', args = { args[8], lang = 'el' } } .. '\n'
end
local output = '<div class="NavContent">\n'
output = output .. '{| style="background:#fdfdfd; text-align:center; width:' .. args.width2 .. '; border-collapse:separate; border-spacing:1px" class="inflection-table"' .. '\n'
output = output .. '|-' .. '\n'
output = output .. '! style="width:' .. args.width3 .. ';background:#cce4fc" |' .. '\n' .. stitlestr .. ptitlestr .. '|-\n'
output = output .. '! style="background:#e0f0ff" | nominative <small>(' .. frame:expandTemplate{ title = 'Grek', args = { '[[ονομαστική]]', lang = 'el' } } .. ')</small>' .. '\n' .. onomenstr .. onomplstr .. '|-\n'
output = output .. '! style="background:#e0f0ff" | genitive <small>(' .. frame:expandTemplate{ title = 'Grek', args = { '[[γενική]]', lang = 'el' } } .. ')</small>' .. '\n' .. genenstr .. genplstr .. '|-\n'
output = output .. '! style="background:#e0f0ff" | accusative <small>(' .. frame:expandTemplate{ title = 'Grek', args = { '[[αιτιατική]]', lang = 'el' } } .. ')</small>' .. '\n' .. aitenstr .. aitplstr .. '|-\n'
output = output .. '! style="background:#e0f0ff" | vocative <small>(' .. frame:expandTemplate{ title = 'Grek', args = { '[[κλητική]]', lang = 'el' } } .. ')</small>' .. '\n' .. klenstr .. klplstr .. notes .. '\n' .. '|}</div>'
return output
end
function _module.declnoun1(frame)
local args = frame.args
local lemmaargs = frame:getParent().args
--overrides parameters from Template and parent templates
args['width1'] = '50em'
args['width2'] = '100%'
args['width3'] = '33%'
args['cols'] = 4
args['hassingular'] = true
args['hasplural'] = true
PAGENAME = mw.title.getCurrentTitle().text
--if user wants only plural
if lemmaargs['number'] ~= nil and lemmaargs['number'] == 'singonly' then
args.hasplural = false
end
if lemmaargs['number'] ~= nil and lemmaargs['number'] == 'plonly' then
args.hassingular = false
end
if args.hassingular ~= args.hasplural then
args.width1 = '40em'
args.width2 = '40em'
args.width3 = '50%'
args.cols = 3
end
if lemmaargs['stem1'] ~= nil and mw.ustring.len(lemmaargs['stem1']) > 0 then
args[1] = lemmaargs['stem1'] .. args[1]
args[2] = lemmaargs['stem1'] .. args[2]
args[3] = lemmaargs['stem1'] .. args[3]
args[4] = lemmaargs['stem1'] .. args[4]
args[5] = lemmaargs['stem1'] .. args[5]
args[6] = lemmaargs['stem1'] .. args[6]
args[7] = lemmaargs['stem1'] .. args[7]
args[8] = lemmaargs['stem1'] .. args[8]
end
--inherit notes from notes in lemma's template invocation
--override template notes
--TODO concatenate notes from lemma and template
if ((lemmaargs['notes'] ~= nil) or (lemmaargs['notes'] ~='')) then args['notes'] = lemmaargs['notes'] end
-- else parameters are full words
local output =''
output = '<div class="NavFrame" style="width:' .. args.width1 .. [=[">
<div class="NavHead" style="background:#cce4fc; text-align:left" >declension of ]=] .. frame:expandTemplate{ title = 'Grek', args = { PAGENAME, lang = 'el' } } .. '</div>'
output = output .. fulltable(args,frame)
output = output .. '</div>'
return frame:preprocess(output )
end
------------------
klisi1 = function(args,frame)
local lemma = ""
args['width1'] = '50em'
args['width2'] = '100%'
args['width3'] = '33%'
args['cols'] = 4
args.hassingular = true --(args['εν'] ~= nil)
if args['α'] == "πλ" then args.hassingular = false end
args.hasplural = true -- (args['πλ'] ~= nil)
if args['α'] == "εν" then args.hasplural = false end
if args['lemma'] ~= nil and args['lemma'] ~= "" then
lemma = args['lemma']
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"] = _module.removeaccent(stem["1"])
stem["3"] = _module.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 _module.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']
args[1] = args['οε']
args[2] = args['οπ']
args[3] = args['γε']
args[4] = args['γπ']
args[5] = args['αε']
args[6] = args['απ']
args[7] = args['κε']
args[8] = args['κπ']
--inherit notes from notes in lemma's template invocation
--override template notes
--TODO concatenate notes from lemma and template
--if ((args['notes'] ~= nil) or (args['notes'] ~='')) then args['notes'] = lemmaargs['notes'] end
-- else parameters are full words
if args.hassingular ~= args.hasplural then
args.width1 = '40em'
args.width2 = '40em'
args.width3 = '50%'
args.cols = 3
end
local output =''
output = '<div class="NavFrame" style="width:' .. args.width1 .. [=[">
<div class="NavHead" style="background:#cce4fc; text-align:left" >declension of ]=] .. frame:expandTemplate{ title = 'Grek', args = { PAGENAME, lang = 'el' } } .. '</div>'
output = output .. fulltable(args,frame)
output = output .. '</div>'
return frame:preprocess(output )
end
_module.templates = function (frame)
local templateargs = frame.args
local args = frame:getParent().args
local localargs = {}
localargs['α'] = templateargs[number]
if templateargs[1] == 'el-nF-α-αδες-1' then
localargs['α'] = nil
return _module.giagia(frame,localargs)
--test
elseif templateargs[1] == 'el-nF-α-αδες-2' then
localargs['α'] = 'εν'
return _module.giagia(frame,localargs)
--test
elseif templateargs[1] == 'el-nF-α-αδες-3' then
localargs['α'] = 'πλ'
return _module.giagia(frame,localargs)
else
--TODO return error
end
end
_module.giagia = function(frame,localargs)
local args = frame:getParent().args
args['α'] = localargs['α']
args['οε'] = "ά"
args['γε'] = "άς"
args['αε'] = "ά"
args['οπ'] = "άδες"
args['γπ'] = "άδων"
return frame:preprocess(klisi1(args,frame))
end
return _module