Siirry sisältöön

Moduuli:la-subs-taiv

Wikisanakirjasta

Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:la-subs-taiv/ohje

local apu = require('Moduuli:Mallinetyokalut')
local kielilinkki = require('Moduuli:Kielilinkki')
local ttapu = require('Moduuli:Taivutustaulukkotyökalut')
local autolinkki = require('Moduuli:Automaattilinkki')

local m = {}


--- 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
    elseif autolinkki.muuta("la", 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 = "la", 
            kohde = sana, 
            kuvaus = "tm/la/n/" .. taivutusmuodot,
            ["kuvaus-param"] = { [9] = "s" }, 
            autolinkki = true
        }
    end
    
    return kielilinkki.linkki{ 
        kieli = "la", 
        kohde = sana, 
        kuvaus = "tm/2/n/" .. taivutusmuodot,
        ["kuvaus-param"] = { [9] = "s" }, 
        autolinkki = true
    }
end


--- Tuottaa taivutustaulukon solun sisällön.
-- 
-- @param muoto:           Taivutusmuotoparametrin nimi, esim "3.inf.adess".
function m.solu(muoto, frame, lihavoi)
    local sanat = m.taivutusmuodot[muoto]
    
    if not sanat or #sanat == 0 then
        return ""
    end

    -- Viiva arvona estää muodon näyttämisen.
    if sanat == "-" or sanat[1] == "-" then
        return "–"
    end

    local linkit_1s = apu.map(
        function (sana)
            return m.tee_linkki(sana, lihavoi)
        end,
        sanat
    )

    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"] = { "-" }
        m.taivutusmuodot["y.abl"] = { "-" }
    end
    
    if m.args.mon == "-" then
        m.taivutusmuodot["mon.nom"] = { "-" }
        m.taivutusmuodot["mon.akk"] = { "-" }
        m.taivutusmuodot["mon.dat"] = { "-" }
        m.taivutusmuodot["mon.gen"] = { "-" }
        m.taivutusmuodot["mon.abl"] = { "-" }
    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
    -- ["y.gen1"] = "x" ja ["y.gen2"] = "y", yhdistetään ne taulukoksi ["y.gen"] = { "x", "y" }.
    m.taivutusmuodot = apu.numeroidut_parametrit(m.args, {
                                                     "y.nom",
                                                     "y.akk",
                                                     "y.dat",
                                                     "y.gen",
                                                     "y.abl",
                                                     "mon.nom",
                                                     "mon.akk",
                                                     "mon.dat",
                                                     "mon.gen",
                                                     "mon.abl",
    })


    -- 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 = "la-subs/taulukko",
        args = {
            ["y.nom"]   =  m.solu("y.nom", frame, m.args.yks ~= "-"),
            ["y.akk"]   =  m.solu("y.akk", frame),
            ["y.dat"]   =  m.solu("y.dat", frame),
            ["y.gen"]   =  m.solu("y.gen", frame),
            ["y.abl"]   =  m.solu("y.abl", frame),            
            ["mon.nom"] =  m.solu("mon.nom", frame, m.args.yks == "-"),
            ["mon.akk"] =  m.solu("mon.akk", frame),
            ["mon.dat"] =  m.solu("mon.dat", frame),
            ["mon.gen"] =  m.solu("mon.gen", frame),
            ["mon.abl"] =  m.solu("mon.abl", frame),            
            ["tarkenne"] = m.args.tarkenne,
        }
    }
end


return m