Moduuli:de-subs-taiv

Taustamoduuli de-subs-mallineelle, joka taulukoi taivutusmuodot.

Parametrit

muokkaa

Taivutusmuodot

muokkaa

Kaikkia 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
  • 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

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