Moduuli:de-subs-taiv
Moduulin de-subs-taiv käyttöohje [näytä tämä käyttöohje omalla sivullaan] [muokkaa tätä käyttöohjetta] [päivitä] [testit] [hiekkalaatikko]
Taustamoduuli de-subs-mallineelle, joka taulukoi taivutusmuodot.
Parametrit
muokkaaTaivutusmuodot
muokkaaKaikkia taivutusmuotoparametreja voi antaa useita lisäämällä nimen perään numeron. Sukuparametrit eivät ole pakollisia, vaan annetaan vain silloin kun suku halutaan näyttää.
- y.nom: yksikön nominatiivi
- y.nom/suku: yksikön nominatiivin suku
- y.akk: yksikön akkusatiivi
- y.akk/suku: yksikön akkusatiivin suku
- y.dat: yksikön datiivi
- y.dat/suku: yksikön datiivin suku
- y.gen: yksikön genetiivi
- y.gen/suku: yksikön genetiivin suku
- mon.nom: monikon nominatiivi
- mon.nom/suku: monikon nominatiivin suku
- mon.akk: monikon akkusatiivi
- mon.akk/suku: monikon akkusatiivin suku
- mon.dat: monikon datiivi
- mon.dat/suku: monikon datiivin suku
- mon.gen: monikon genetiivi
- mon.gen/suku: monikon genetiivin suku
Muotojen suodatus
muokkaa- yks=-: piilottaa yksikkömuodot
- mon=-: piilottaa monikkomuodot
Muut
muokkaa- tunnus: Tämän arvo liitetään näkymättömänä tulostaulukkoon. Sitä voi käyttää tietyn moduulikutsun ja tuloksen yhdistämiseen.
Liittyvät sivut
muokkaa- de-subs
- de-subs/taulukko: Taulukko, jossa tulos näytetään.
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 sana: linkitettävä sana
function m.tee_linkki(sana, lihavoi)
local sanan_ryhma = m.ryhmat[sana]
-- Jos linkki on nykyiselle sivulle.
if not sanan_ryhma then
return sana
end
if sana == mw.title.getCurrentTitle().text then
if lihavoi then
return "'''" .. sana .. "'''"
else
return sana
end
end
-- Luodaan kuvaus-parametri yhdistämällä kaikkien samannäköisten muotojen nimet (aakkosjärjestyksessä).
local taivutusmuodot = table.concat(sanan_ryhma, " ")
-- Jos ryhmässä on useita taivutusmuotoja, käytetään saksan omia artikkelipohjia. Muuten
-- käytetään yleistä.
if #sanan_ryhma > 1 then
return kielilinkki.linkki{
kieli = "de",
kohde = sana,
kuvaus = "tm/de/n/" .. taivutusmuodot,
["kuvaus-param"] = { [9] = "s" }
}
end
return kielilinkki.linkki{
kieli = "de",
kohde = sana,
kuvaus = "tm/--/n/" .. taivutusmuodot,
["kuvaus-param"] = { [9] = "s" }
}
end
--- Tuottaa taivutustaulukon solun sisällön.
--
-- @param muoto: Taivutusmuotoparametrin nimi, esim "3.inf.adess".
function m.solu(muoto, lihavoi)
local frame = mw.getCurrentFrame()
local sanat = m.taivutusmuodot[muoto]
-- Viiva arvona estää muodon näyttämisen.
if sanat and (sanat == "-" or sanat[1] == "-") then
return "–"
end
if not sanat or #sanat == 0 then
return ""
end
local artikkelit_sanat_suvut = apu.zip(m.artikkelit[muoto], sanat, m.suvut[muoto])
local linkit_1s = apu.map(
function (args)
local artikkeli = args[1]
local sana = args[2]
local suku = args[3]
if artikkeli and suku then
return artikkeli .. " " .. m.tee_linkki(sana, lihavoi) .. " " .. frame:expandTemplate{ title = "suku-teksti", args = { suku } }
elseif artikkeli then
return artikkeli .. " " .. m.tee_linkki(sana, lihavoi)
elseif suku then
return m.tee_linkki(sana, lihavoi) .. " " .. frame:expandTemplate{ title = "suku-teksti", args = { suku } }
else
return m.tee_linkki(sana, lihavoi)
end
end,
artikkelit_sanat_suvut
)
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.yks == "-" then
m.taivutusmuodot["y.nom"] = { "-" }
m.taivutusmuodot["y.akk"] = { "-" }
m.taivutusmuodot["y.dat"] = { "-" }
m.taivutusmuodot["y.gen"] = { "-" }
end
if m.args.mon == "-" then
m.taivutusmuodot["mon.nom"] = { "-" }
m.taivutusmuodot["mon.akk"] = { "-" }
m.taivutusmuodot["mon.dat"] = { "-" }
m.taivutusmuodot["mon.gen"] = { "-" }
end
end
function m.erota_artikkelit()
local artikkelit = {}
local taivutusmuodot = {}
local suvut = {}
for k, t in pairs(m.artikkelit_ja_taivutusmuodot) do
artikkelit[k] = {}
taivutusmuodot[k] = {}
suvut[k] = {}
for i, v in ipairs(t) do
art, sana = string.match(v, "(%w+) (.+)")
if art == "der" or art == "das" or art == "die" or art == "den" or art == "dem" or art == "des" then
artikkelit[k][i] = art
taivutusmuodot[k][i] = sana
else
taivutusmuodot[k][i] = v
end
if i == 1 then
suvut[k][i] = m.args[k .. i .. "/suku"] or m.args[k .. "/suku"]
else
suvut[k][i] = m.args[k .. i .. "/suku"]
end
end
end
return artikkelit, taivutusmuodot, suvut
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
-- ["y.gen1"] = "x" ja ["y.gen2"] = "y", yhdistetään ne taulukoksi ["y.gen"] = { "x", "y" }.
m.artikkelit_ja_taivutusmuodot = apu.numeroidut_parametrit(m.args, {
"y.nom",
"y.akk",
"y.dat",
"y.gen",
"mon.nom",
"mon.akk",
"mon.dat",
"mon.gen",
})
m.artikkelit, m.taivutusmuodot, m.suvut = m.erota_artikkelit()
-- Suodatetaan yks- ja mon-parametrien mukaisesti pois muodot, joita ei näytetä.
m.suodata_taivutusmuodot()
-- Luodaan ryhmät samannäköisten taivutusmuotojen mukaan.
m.ryhmat = ttapu.ryhmittele_arvoittain(m.taivutusmuodot)
return frame:expandTemplate{
title = "de-subs/taulukko",
args = {
["y.nom"] = m.solu("y.nom", m.args.yks ~= "-"),
["y.akk"] = m.solu("y.akk"),
["y.dat"] = m.solu("y.dat"),
["y.gen"] = m.solu("y.gen"),
["mon.nom"] = m.solu("mon.nom", m.args.yks == "-"),
["mon.akk"] = m.solu("mon.akk"),
["mon.dat"] = m.solu("mon.dat"),
["mon.gen"] = m.solu("mon.gen"),
["tunnus"] = m.args.tunnus
}
}
end
return m