Moduuli:Ety
Ulkoasu
Moduulin Ety käyttöohje [näytä tämä käyttöohje omalla sivullaan] [muokkaa tätä käyttöohjetta] [päivitä] [testit] [hiekkalaatikko]
xxxx
local m = {}
local mt = require('Moduuli:Mallinetyokalut')
local luokittelu = require('Moduuli:luokittelu')
local kielikoodit = require('Moduuli:kielikoodit')
local data = mw.loadData('Moduuli:Ety/taulukot')
local etykielet = data['etykielet']
local sukulaisuus = data['sukulaisuudet']
function m.juontuu(kieli, kanta)
return sukulaisuus[kieli .. ':' .. kanta] or false
end
local function etykielen_genetiivi(tunnus)
local rivi = etykielet[tunnus]
if rivi then
return rivi[2]
end
return nil
end
local function kielen_genetiivi(tunnus)
local gen = kielikoodit.genetiivi_tunnukselle(tunnus, false)
if gen then
return gen
end
return etykielen_genetiivi(tunnus)
end
local function kielen_partitiivi(tunnus)
local part = kielikoodit.partitiivissa(tunnus, false)
if part then
return part
end
local rivi = etykielet[tunnus]
if rivi then
return rivi[3]
end
return nil
end
local function kielen_nimi(tunnus)
local part = kielikoodit.nimi(tunnus, false)
if part then
return part
end
local rivi = etykielet[tunnus]
if rivi then
return rivi[1]
end
return nil
end
local function kielen_elatiivi(tunnus)
local gen = kielen_genetiivi(tunnus)
if not gen then
error("Genetiiviä ei löydy: " .. tunnus)
return nil
end
local part = kielen_partitiivi(tunnus)
if not part then
error("Kielikoodille ei löydy partitiivia: " .. tunnus)
end
local part_parts = mw.text.split( part, " " )
local voksos = mt.map(function(part) return mw.ustring.match( part, "[aä]$" ) end, part_parts)
local gen_parts = mw.text.split( gen, " " )
local gens = mt.map2(
function(gen, vokso)
if vokso == "ä" then
return mw.ustring.gsub( gen, "n$", "stä" )
else
return mw.ustring.gsub( gen, "n$", "sta" )
end
end, gen_parts, voksos)
return table.concat(gens, " ")
end
local function lainateksti(kanta)
return "lainat " .. kielen_elatiivi(kanta)
end
local function juontuuteksti(kanta)
return kielen_elatiivi(kanta) .. " juontuvat sanat"
end
function m.Ety(frame)
local pframe = frame:getParent()
local kieli = pframe.args[1]
local kanta = pframe.args[2]
if m.juontuu(kieli, kanta) then
return juontuuteksti(kanta)
end
return lainateksti(kanta)
end
local function onKieliTaiEtyKieli(ehkaKielikoodi)
if kielen_genetiivi(ehkaKielikoodi) then
return true
end
return false
end
function m.OnKieliTaiEtyKieli(frame)
--local pframe = frame:getParent()
local ehkaKielikoodi = frame.args[1]
if onKieliTaiEtyKieli(ehkaKielikoodi) then
return "juu"
end
return ""
end
-- Ei palauta mitään, jos parametri 2 ei ole kieli tai etykieli.
function m.EhkaLainaTaiJuontuuLuokka(frame)
local pframe = frame:getParent()
local kohde = pframe.args[1]
local lahde = pframe.args[2]
if not onKieliTaiEtyKieli(lahde) then
return ""
end
if m.juontuu(kohde, lahde) then
luokittelu.asetaAakkostajalla(kohde, luokittelu.kielenLuokka(kohde, juontuuteksti(lahde)))
else
luokittelu.asetaAakkostajalla(kohde, luokittelu.kielenLuokka(kohde, lainateksti(lahde)))
end
return luokittelu
end
function m.LainaTaiJuontuuTeksti(frame)
local pframe = frame:getParent()
local kohde = pframe.args[1]
local lahde = pframe.args[2]
local nimi = kielen_nimi(lahde)
local gen = kielikoodit.genetiivi_tunnukselle(lahde, false)
if gen then
return "[[" .. nimi .. "|" .. gen .. "]] sanasta " .. frame:expandTemplate{
title = 'termi+',
args = {
lahde,
pframe.args[3],
pframe.args[5],
lat = pframe.args.lat,
merkitys = pframe.args[4],
}
}
end
return "[[" .. nimi .. "|" .. etykielen_genetiivi(lahde) .. "]] ''" .. pframe.args[3] .. "''"
end
return m