Moduuli:fi-verbi-taiv
Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:fi-verbi-taiv/ohje
local apu = require('Moduuli:Mallinetyokalut')
local kielilinkki = require('Moduuli:Kielilinkki')
local ttapu = require('Moduuli:Taivutustaulukkotyökalut')
local m = {}
local function sisaltaa_arvon(tab, val)
for index, value in ipairs(tab) do
if value == val then
return true
end
end
return false
end
--- Luo kuvaus-attribuutin tekstin sanan taivutusmuotojen nimistä.
-- @param sanan_ryhma: taulukko taivutusmuodoista, joita sanamuoto edustaa
function m.tee_linkki(sana)
local sanan_ryhma = m.ryhmat[sana]
if not sanan_ryhma or sisaltaa_arvon(sanan_ryhma, "1.inf") then
return "'''" .. sana .. "'''"
end
-- Luodaan kuvaus-parametri yhdistämällä kaikkien samannäköisten muotojen nimet (aakkosjärjestyksessä).
local taivutusmuodot = table.concat(sanan_ryhma, " ")
if taivutusmuodot == "akt.pprees"
or taivutusmuodot == "pass.pprees"
or taivutusmuodot == "akt.pperf"
or taivutusmuodot == "pass.pperf"
or taivutusmuodot:sub(1, 6) == "2.inf."
or taivutusmuodot:sub(1, 10) == "3.inf.ins."
or taivutusmuodot == "4.inf"
or taivutusmuodot == "agpart"
or taivutusmuodot == "agpart.neg" then
return kielilinkki.linkki{
kieli = "fi",
kohde = sana,
kuvaus = "tm/fi/v/" .. taivutusmuodot,
['kuvaus-param'] = {
[8] = m.args['1.inf']
}
}
elseif taivutusmuodot == "akt.pperf.mon" then
-- Partisiipin perfektin monikolle (esim. lähteneet) tarvitaan yksikkömuoto (lähtenyt).
return kielilinkki.linkki{
kieli = "fi",
kohde = sana,
kuvaus = "tm/*/v/akt.pperf.mon",
['kuvaus-param'] = {
[8] = m.taivutusmuodot['akt.pperf']
}
}
elseif taivutusmuodot == "1.inf.pitkä"
or taivutusmuodot:sub(1, 5) == "5.inf" then
-- 1. infinitiivin pitkälle muodolle ja 5. infinitiiville (esim. lähteäkseen, kiertämäisillään)
-- tarvitaan vartalo (lähteäkse, kiertämäsillä) ja vokaalisointu (lähteäksens_ä_, kiertämäsilläns_ä_).
return kielilinkki.linkki{
kieli = "fi",
kohde = sana,
kuvaus = "tm/fi/v/" .. taivutusmuodot,
['kuvaus-param'] = {
[8] = mw.ustring.gsub(sana, "[aeä]n$", ""),
[9] = m.args['vokaalisointu']
}
}
elseif taivutusmuodot == "4.inf.part" then
-- 4. infinitiivin partitiiville muodolle (esim. kiertämistä) tarvitaan nominatiivimuoto (kiertäminen).
return kielilinkki.linkki{
kieli = "fi",
kohde = sana,
kuvaus = "tm/*/v/4.inf.part",
['kuvaus-param'] = {
[8] = m.taivutusmuodot['4.inf.nom']
}
}
else
return kielilinkki.linkki{
kieli = "fi",
kohde = sana,
kuvaus = "tm/*/v/" .. taivutusmuodot
}
end
end
--- Tuottaa taivutustaulukon solun sisällön.
--
-- @param piilota: Jos true tulostetaan soluun pelkkä n-viiva (–). Tämä asetetaan p-parametrin mukaan.
-- @param muoto: Taivutusmuotoparametrin nimi, esim "3.inf.adess".
-- @param kuvausprefiksi: generoitaviin kuvaus-kenttiin laitettava prefiksi, (esim. "tm/fi/v/").
-- Kuvaus-teksti generoidaan automaattisesti kaikista samannäköisistä taivutusmuodoista
-- yhdistämällä niiden nimet. Esim. jos { ["imp.y3"] = "ruoki", ["imp.kon"] = "ruoki" },
-- ja prefiksi on "tm/fi/v/" niin kuvaus-kentän arvoksi tulee "tm/fi/v/imp.kon imp.y3"
-- molempien "ruoki"-sanojen linkkeihin.
--
function m.solu(muoto, ei_kuvausta)
local toissijaset = nil
local ensisijaiset_muodot = m.taivutusmuodot[muoto]
-- Viiva arvona estää muodon näyttämisen.
if ensisijaiset_muodot and (ensisijaiset_muodot == "-" or ensisijaiset_muodot[1] == "-") then
return "–"
end
-- Jos ohitusparametri on annettu muodolle, käytetään sitä.
if m.args[muoto .. "!"] then
return m.args[muoto .. "!"]
end
if not ensisijaiset_muodot or #ensisijaiset_muodot == 0 then
return ""
end
if ohitus then
return ohitus
end
-- Sulkuihin tulevat muodot.
local toissijaiset_muodot = m.taivutusmuodot[muoto .. ":vanha"]
-- Tehdään jokaisesta muodosta kielilinkki. Toissijaiset muodot kääritään lisäksi sulkuihin.
-- Sen jälkeen yhdistetään kaikki laittamalla väleihin <br/>-elementit.
if toissijaiset_muodot then
local linkit_2s = apu.map(
function (sana)
if ei_kuvausta then
return '(' .. kielilinkki.linkki{ kieli = "fi" } .. ')'
else
return '(' .. m.tee_linkki(sana) .. ')'
end
end,
toissijaiset_muodot
)
toissijaiset = mw.text.listToText( linkit_2s, '<br/>', '<br/>')
else
toissijaiset = nil
end
local linkit_1s = apu.map(
function (sana)
if ei_kuvausta then
return kielilinkki.linkki{ kieli = "fi" }
else
return m.tee_linkki(sana)
end
end,
ensisijaiset_muodot
)
if toissijaiset then
return mw.text.listToText( linkit_1s, '<br/>', '<br/>') .. "<br/>" .. toissijaiset
else
return mw.text.listToText( linkit_1s, '<br/>', '<br/>')
end
end
function m.suodata_taivutusmuodot()
if m.args.p == nil then
-- pass
elseif m.args.p ~= "" then
m.taivutusmuodot["ind.prees.pass.kon"] = { "-" }
m.taivutusmuodot["1.inf.pitkä"] = { "-" }
m.taivutusmuodot["2.inf.iness.akt"] = { "-" }
m.taivutusmuodot["2.inf.iness.pass"] = { "-" }
m.taivutusmuodot["2.inf.ins"] = { "-" }
m.taivutusmuodot["3.inf.abess"] = { "-" }
m.taivutusmuodot["3.inf.adess"] = { "-" }
m.taivutusmuodot["3.inf.elat"] = { "-" }
m.taivutusmuodot["3.inf.ill"] = { "-" }
m.taivutusmuodot["3.inf.iness"] = { "-" }
m.taivutusmuodot["3.inf.ins.akt"] = { "-" }
m.taivutusmuodot["3.inf.ins.pass"] = { "-" }
m.taivutusmuodot["4.inf.nom"] = { "-" }
m.taivutusmuodot["4.inf.part"] = { "-" }
m.taivutusmuodot["5.inf"] = { "-" }
m.taivutusmuodot["agpart.neg"] = { "-" }
m.taivutusmuodot["agpart"] = { "-" }
m.taivutusmuodot["imp.m1p"] = { "-" }
m.taivutusmuodot["imp.m2p"] = { "-" }
m.taivutusmuodot["imp.pass"] = { "-" }
m.taivutusmuodot["imp.pass.kon"] = { "-" }
m.taivutusmuodot["imp.y2p"] = { "-" }
m.taivutusmuodot["imp.y2p.kon"] = { "-" }
m.taivutusmuodot["ind.i.m1p"] = { "-" }
m.taivutusmuodot["ind.i.m2p"] = { "-" }
m.taivutusmuodot["ind.i.y1p"] = { "-" }
m.taivutusmuodot["ind.i.y2p"] = { "-" }
m.taivutusmuodot["ind.imperf.pass"] = { "-" }
m.taivutusmuodot["ind.p.m1p"] = { "-" }
m.taivutusmuodot["ind.p.m2p"] = { "-" }
m.taivutusmuodot["ind.p.y1p"] = { "-" }
m.taivutusmuodot["ind.p.y2p"] = { "-" }
m.taivutusmuodot["ind.prees.pass"] = { "-" }
m.taivutusmuodot["ind.prees.pass.kon"] = { "-" }
m.taivutusmuodot["kond.m1p"] = { "-" }
m.taivutusmuodot["kond.m2p"] = { "-" }
m.taivutusmuodot["kond.pass"] = { "-" }
m.taivutusmuodot["kond.pass.kon"] = { "-" }
m.taivutusmuodot["kond.y1p"] = { "-" }
m.taivutusmuodot["kond.y2p"] = { "-" }
m.taivutusmuodot["pass.pperf"] = { "-" }
m.taivutusmuodot["pass.pprees"] = { "-" }
m.taivutusmuodot["pot.m1p"] = { "-" }
m.taivutusmuodot["pot.m2p"] = { "-" }
m.taivutusmuodot["pot.pass"] = { "-" }
m.taivutusmuodot["pot.pass.kon"] = { "-" }
m.taivutusmuodot["pot.y1p"] = { "-" }
m.taivutusmuodot["pot.y2p"] = { "-" }
elseif m.args.p == "y3" then
m.taivutusmuodot["akt.pperf.mon"] = { "-" }
m.taivutusmuodot["imp.kon"] = { "-" }
m.taivutusmuodot["imp.m3p"] = { "-" }
m.taivutusmuodot["ind.i.m3p"] = { "-" }
m.taivutusmuodot["ind.kon"] = { "-" }
m.taivutusmuodot["ind.p.m3p"] = { "-" }
m.taivutusmuodot["kond.kon"] = { "-" }
m.taivutusmuodot["kond.m3p"] = { "-" }
m.taivutusmuodot["pot.kon"] = { "-" }
m.taivutusmuodot["pot.m3p"] = { "-" }
end
if m.args.trans == "-" then
m.taivutusmuodot["agpart"] = { "-" }
end
if m.args.pprees == "-" then
m.taivutusmuodot["akt.pprees"] = { "-" }
m.taivutusmuodot["pass.pprees"] = { "-" }
end
if m.args.pass == "-" then
m.taivutusmuodot["2.inf.iness.pass"] = { "-" }
m.taivutusmuodot["3.inf.ins.pass"] = { "-" }
m.taivutusmuodot["imp.pass"] = { "-" }
m.taivutusmuodot["imp.pass.kon"] = { "-" }
m.taivutusmuodot["ind.imperf.pass"] = { "-" }
m.taivutusmuodot["ind.prees.pass"] = { "-" }
m.taivutusmuodot["ind.prees.pass.kon"] = { "-" }
m.taivutusmuodot["kond.pass"] = { "-" }
m.taivutusmuodot["kond.pass.kon"] = { "-" }
m.taivutusmuodot["pass.pperf"] = { "-" }
m.taivutusmuodot["pass.pprees"] = { "-" }
m.taivutusmuodot["pot.pass"] = { "-" }
m.taivutusmuodot["pot.pass.kon"] = { "-" }
end
if m.args.vahva == "-" then
m.taivutusmuodot["imp.y2p"] = { "-" }
m.taivutusmuodot["imp.y2p.kon"] = { "-" }
m.taivutusmuodot["ind.i.m1p"] = { "-" }
m.taivutusmuodot["ind.i.m2p"] = { "-" }
m.taivutusmuodot["ind.i.m3p"] = { "-" }
m.taivutusmuodot["ind.i.y1p"] = { "-" }
m.taivutusmuodot["ind.i.y2p"] = { "-" }
m.taivutusmuodot["ind.i.y3p"] = { "-" }
m.taivutusmuodot["ind.kon"] = { "-" }
m.taivutusmuodot["ind.p.m1p"] = { "-" }
m.taivutusmuodot["ind.p.m2p"] = { "-" }
m.taivutusmuodot["ind.p.m3p"] = { "-" }
m.taivutusmuodot["ind.p.y1p"] = { "-" }
m.taivutusmuodot["ind.p.y2p"] = { "-" }
m.taivutusmuodot["ind.p.y3p"] = { "-" }
m.taivutusmuodot["kond.kon"] = { "-" }
m.taivutusmuodot["kond.m1p"] = { "-" }
m.taivutusmuodot["kond.m2p"] = { "-" }
m.taivutusmuodot["kond.m3p"] = { "-" }
m.taivutusmuodot["kond.y1p"] = { "-" }
m.taivutusmuodot["kond.y2p"] = { "-" }
m.taivutusmuodot["kond.y3p"] = { "-" }
end
end
function m.Taivutustaulukko(frame)
m.args = frame.args
-- Poistetaan mahdolliset tyhjinä annetut parametrit.
m.args = apu.poista_tyhjat(m.args)
-- Taulukoidaan samannimiset parametrit, esim. jos on annettu useita eri muotoja ind.p.y3p-parametrille kaksi muotoa
-- ["ind.p.y3p1"] = "x" ja ["ind.p.y3p2"] = "y", yhdistetään ne taulukoksi ["ind.p.y3p"] = { "x", "y" }.
m.taivutusmuodot = apu.numeroidut_parametrit(m.args, {
"1.inf",
"1.inf.pitkä", "1.inf.pitkä:vanha",
"2.inf.iness.akt", "2.inf.iness.akt:vanha",
"2.inf.iness.pass", "2.inf.iness.pass:vanha",
"2.inf.ins", "2.inf.ins:vanha",
"3.inf.abess", "3.inf.abess:vanha",
"3.inf.adess", "3.inf.adess:vanha",
"3.inf.elat", "3.inf.elat:vanha",
"3.inf.ill", "3.inf.ill:vanha",
"3.inf.iness", "3.inf.iness:vanha",
"3.inf.ins.akt", "3.inf.ins.akt:vanha",
"3.inf.ins.pass", "3.inf.ins.pass:vanha",
"4.inf.nom", "4.inf.nom:vanha",
"4.inf.part", "4.inf.part:vanha",
"5.inf", "5.inf:vanha",
"agpart.neg", "agpart.neg:vanha",
"agpart", "agpart:vanha",
"akt.pperf", "akt.pperf:vanha",
"akt.pprees", "akt.pprees:vanha",
"imp.kon", "imp.kon:vanha",
"imp.m1p", "imp.m1p:vanha",
"imp.m2p", "imp.m2p:vanha",
"imp.m3p", "imp.m3p:vanha",
"imp.pass", "imp.pass:vanha",
"imp.pass.kon", "imp.pass.kon:vanha",
"imp.y2p", "imp.y2p:vanha",
"imp.y2p.kon", "imp.y2p.kon:vanha",
"imp.y3p", "imp.y3p:vanha",
"akt.pperf.mon", "akt.pperf.mon:vanha",
"ind.i.m1p", "ind.i.m1p:vanha",
"ind.i.m2p", "ind.i.m2p:vanha",
"ind.i.m3p", "ind.i.m3p:vanha",
"ind.i.y1p", "ind.i.y1p:vanha",
"ind.i.y2p", "ind.i.y2p:vanha",
"ind.i.y3p", "ind.i.y3p:vanha",
"ind.imperf.pass", "ind.imperf.pass:vanha",
"ind.kon", "ind.kon:vanha",
"ind.p.m1p", "ind.p.m1p:vanha",
"ind.p.m2p", "ind.p.m2p:vanha",
"ind.p.m3p", "ind.p.m3p:vanha",
"ind.p.y1p", "ind.p.y1p:vanha",
"ind.p.y2p", "ind.p.y2p:vanha",
"ind.p.y3p", "ind.p.y3p:vanha",
"ind.prees.pass", "ind.prees.pass:vanha",
"ind.prees.pass.kon", "ind.prees.pass.kon:vanha",
"kond.kon", "kond.kon:vanha",
"kond.m1p", "kond.m1p:vanha",
"kond.m2p", "kond.m2p:vanha",
"kond.m3p", "kond.m3p:vanha",
"kond.pass", "kond.pass:vanha",
"kond.pass.kon", "kond.pass.kon:vanha",
"kond.y1p", "kond.y1p:vanha",
"kond.y2p", "kond.y2p:vanha",
"kond.y3p", "kond.y3p:vanha",
"pass.pperf", "pass.pperf:vanha",
"pass.pprees", "pass.pprees:vanha",
"pot.kon", "pot.kon:vanha",
"pot.m1p", "pot.m1p:vanha",
"pot.m2p", "pot.m2p:vanha",
"pot.m3p", "pot.m3p:vanha",
"pot.pass", "pot.pass:vanha",
"pot.pass.kon", "pot.pass.kon:vanha",
"pot.y1p", "pot.y1p:vanha",
"pot.y2p", "pot.y2p:vanha",
"pot.y3p", "pot.y3p:vanha"
})
-- Suodatetaan p-, pass-, ppart- ja trans-parametrien mukaisesti pois muodot joita ei haluta. P-parametri voi olla "", "y3" tai "3".
m.suodata_taivutusmuodot()
-- Luodaan ryhmät samannäköisten taivutusmuotojen mukaan.
m.ryhmat = ttapu.ryhmittele_arvoittain(m.taivutusmuodot)
return frame:expandTemplate{
title = "fi-verbi-taiv",
args = {
-- Jos huutomerkillinen parametri on annettu, ohittaa se solu-funktiolla luodun.
["1.inf"] = m.solu("1.inf"),
["1.inf.pitkä"] = m.solu("1.inf.pitkä"),
["2.inf.iness.akt"] = m.solu("2.inf.iness.akt"),
["2.inf.iness.pass"] = m.solu("2.inf.iness.pass"),
["2.inf.ins"] = m.solu("2.inf.ins"),
["3.inf.abess"] = m.solu("3.inf.abess"),
["3.inf.adess"] = m.solu("3.inf.adess"),
["3.inf.elat"] = m.solu("3.inf.elat"),
["3.inf.ill"] = m.solu("3.inf.ill"),
["3.inf.iness"] = m.solu("3.inf.iness"),
["3.inf.ins.akt"] = m.solu("3.inf.ins.akt"),
["3.inf.ins.pass"] = m.solu("3.inf.ins.pass"),
["4.inf.nom"] = m.solu("4.inf.nom"),
["4.inf.part"] = m.solu("4.inf.part"),
["5.inf"] = m.solu("5.inf"),
["agpart.neg"] = m.solu("agpart.neg"),
["agpart"] = m.solu("agpart"),
["akt.pperf"] = m.solu("akt.pperf"),
["akt.pprees"] = m.solu("akt.pprees"),
["imp.kon"] = m.solu("imp.kon"),
["imp.m1p"] = m.solu("imp.m1p"),
["imp.m2p"] = m.solu("imp.m2p"),
["imp.m3p"] = m.solu("imp.m3p"),
["imp.pass"] = m.solu("imp.pass"),
["imp.pass.kon"] = m.solu("imp.pass.kon"),
["imp.y2p"] = m.solu("imp.y2p"),
["imp.y2p.kon"] = m.solu("imp.y2p.kon"),
["imp.y3p"] = m.solu("imp.y3p"),
["akt.pperf.mon"] = m.solu("akt.pperf.mon"),
["ind.i.m1p"] = m.solu("ind.i.m1p"),
["ind.i.m2p"] = m.solu("ind.i.m2p"),
["ind.i.m3p"] = m.solu("ind.i.m3p"),
["ind.i.y1p"] = m.solu("ind.i.y1p"),
["ind.i.y2p"] = m.solu("ind.i.y2p"),
["ind.i.y3p"] = m.solu("ind.i.y3p"),
["ind.imperf.pass"] = m.solu("ind.imperf.pass"),
["ind.kon"] = m.solu("ind.kon"),
["ind.p.m1p"] = m.solu("ind.p.m1p"),
["ind.p.m2p"] = m.solu("ind.p.m2p"),
["ind.p.m3p"] = m.solu("ind.p.m3p"),
["ind.p.y1p"] = m.solu("ind.p.y1p"),
["ind.p.y2p"] = m.solu("ind.p.y2p"),
["ind.p.y3p"] = m.solu("ind.p.y3p"),
["ind.prees.pass"] = m.solu("ind.prees.pass"),
["ind.prees.pass.kon"] = m.solu("ind.prees.pass.kon"),
["kond.kon"] = m.solu("kond.kon"),
["kond.m1p"] = m.solu("kond.m1p"),
["kond.m2p"] = m.solu("kond.m2p"),
["kond.m3p"] = m.solu("kond.m3p"),
["kond.pass"] = m.solu("kond.pass"),
["kond.pass.kon"] = m.solu("kond.pass.kon"),
["kond.y1p"] = m.solu("kond.y1p"),
["kond.y2p"] = m.solu("kond.y2p"),
["kond.y3p"] = m.solu("kond.y3p"),
["pass.pperf"] = m.solu("pass.pperf"),
["pass.pprees"] = m.solu("pass.pprees"),
["pot.kon"] = m.solu("pot.kon"),
["pot.m1p"] = m.solu("pot.m1p"),
["pot.m2p"] = m.solu("pot.m2p"),
["pot.m3p"] = m.solu("pot.m3p"),
["pot.pass"] = m.solu("pot.pass"),
["pot.pass.kon"] = m.solu("pot.pass.kon"),
["pot.y1p"] = m.solu("pot.y1p"),
["pot.y2p"] = m.solu("pot.y2p"),
["pot.y3p"] = m.solu("pot.y3p"),
["p"] = m.args["p"],
["huom4"] = m.args["huom4"],
['vart.vok'] = m.args['vart.vok'],
['vart.heik'] = m.args['vart.heik'],
['vart.vah'] = m.args['vart.vah'],
['vart.kons'] = m.args['vart.kons'],
}
}
end
return m