Moduuli:yhteys
Moduulin yhteys käyttöohje [näytä tämä käyttöohje omalla sivullaan] [muokkaa tätä käyttöohjetta] [päivitä] [testit] [hiekkalaatikko]
Käytetään yhteys-mallineesta käsin.
Parametrit:
- ei-luokittelua: estää sivun luokittumisen (kaikkiin luokkiin)
Yhteys→luokka-määritykset tehdään sivulle Moduuli:yhteys/taulukot. Sivujen aakkostukseen käytetään yhteys-mallineen aak-parametria tai kielelle määriteltyä aakkostajaa, jos sellainen on.
Testit
muokkaa- KOODI:
{{yhteys|Tanskan|matematiikka}}
TULOS:(''Tanskan, matematiikka'')
- KOODI:
{{yhteys|matematiikka|k=Tanskan}}
TULOS:(''matematiikka'')[[Luokka:Tanskan kielen matematiikan sanasto|YHTEYS]]
- KOODI:
{{yhteys|matematiikka|k=da}}
TULOS:(''matematiikka'')[[Luokka:Tanskan kielen matematiikan sanasto|YHTEYS]]
- KOODI:
{{yhteys|matematiikka|aak=ananas|k=da}}
TULOS:(''matematiikka'')[[Luokka:Tanskan kielen matematiikan sanasto|YHTEYS]]
local tiedot = mw.loadData('Moduuli:yhteys/taulukot')
local kielet = require("Moduuli:kielikoodit")
local luokat = require("Moduuli:luokittelu")
local m = {}
--- Palauttaa sanaan liittyvät tiedot taulukosta.
--
-- @param avain: taulukon avainsana
-- @return 1: avainsanan teksti, esim. avainta "kuva" vastaa teksti "kuvaannollinen"
-- @return 2: mahdollinen liittyvä luokka tai luokkaaihio
-- @return 3: mahdollinen liittyvä kieli, esim. avainta "sveitsinsaksaa" vastaa "de"
local function hae_tiedot(avain)
if tiedot[avain] then
-- jos luokka on nil käytetään "pääsanan" luokkaa
if not tiedot[avain][2] then
avain = tiedot[avain][1]
if avain and tiedot[avain] then
return tiedot[avain][1], tiedot[avain][2], tiedot[avain][3]
end
end
return tiedot[avain][1], tiedot[avain][2], tiedot[avain][3]
end
return avain, nil, nil
end
--- Lisää luokan nimiaihion perusteella.
-- Jos nimiaihiossa on {Gen}-teksti ja parametri `kg` on annettu, korvataan
-- {Gen}-teksti sillä, esim.
-- "{Gen} kielen arkikieliset ilmaukset", "Saksan" -> "Saksan kielen arkikieliset ilmaukset"
-- Jos {Gen}-teksti on, mutta kielen nimeä ei ole annettu, ohitetaan luokka.
-- Muut luokat lisätään aina.
--
-- @param luokka_tmpl: luokan nimen aihio tai luokan nimi
-- @param kk: kielikoodi
-- @param kg: kielen nimen genetiivimuoto isolla alkukirjaimella
-- @param aak: aakkostus. Jos ei annettu käytetään kielen aakkostajaa, jos sellainen on.
local function lisaa_luokka(luokka_tmpl, kk, kg, aak)
local luokka, ok = string.gsub(luokka_tmpl, "{Gen}", kg or "")
if ok and kg then -- {Gen}-tekstillinen luokan nimi
if kk then
luokat.asetaAakkostajalla(kk, luokka, aak)
else
luokat.aseta(luokka, aak)
end
elseif not ok then -- {Gen}-tekstitön luokan nimi
if kk then
luokat.asetaAakkostajalla(kk, luokka_tmpl, aak)
else
luokat.aseta(luokka_tmpl, aak)
end
end
end
--- Palauttaa annettuja käyttöyhteyksiä/tyylejä vastaavan merkkijonon ja luokat. Esim.
-- ''(fysiikka, tähtitiede)''[[Luokka:Suomen kielen fysiikan sanasto|kana]]
-- [Luokka:Suomen kielen tähtitieteen sanasto|kana]]
--
-- @param args: luettelo käyttöyhteyksistä/tyyleistä
-- @param k: kielikoodi tai kielen nimen genetiivi isolla (mallineen k-parametri), valinnainen
-- @param aak: luokkiin lisättävä sana (aakkostusmuodossa), valinnainen
-- @param ktxt: kontekstimallineen nimi (jos muu kuin yhteys-malline), valinnainen
function m.hae_teksti(args, k, aak, ktxt, ei_luokittelua, ei_sulkeita)
local sanat = {} -- lueteltavat sanat
-- Luokkien nimet tai nimien aihiot. Kootaan listaksi ja lisätään kaikki luokat
-- kerralla, koska joihinkin luokkiin sisältyy kielikoodi (esim. "suomenruotsi" -> "sv").
-- Näissä tapauksissa erillistä kieliparametria ei tarvitse antaa.
local luokkanimet = {}
-- Muutetaan kieli-parametri kielikoodiksi, jos se ei ole jo.
local kk = (k and kielet.tunnus_genetiiville(k)) or k
local function kasittele_sana(sana)
local teksti, luokka, kieli = hae_tiedot(sana)
if kieli and not kk then
kk = kieli
end
table.insert(sanat, teksti)
if luokka then
table.insert(luokkanimet, luokka)
end
end
if ktxt then
kasittele_sana(ktxt)
end
for i,v in ipairs(args) do
if v ~= "{{{1}}}" and v ~= "" then
kasittele_sana(v)
end
end
if not ei_luokittelua then
local kg = kielet.genetiivi_tunnukselle(kk, true) or k
for i, luokka in ipairs(luokkanimet) do
lisaa_luokka(luokka, kk, kg, aak)
end
end
if ei_sulkeita then
return "''" .. table.concat(sanat, ", ") .. "''", luokat
else
return "(''" .. table.concat(sanat, ", ") .. "'')", luokat
end
end
function m.yhteys(frame)
-- Otetaan parametrit ylämallineen parametreista.
-- aak:parametri välitetään erikseen, koska ylämalline välittää sillä {{PAGENAME}}n
local ktxt = nil
local pframe = frame:getParent()
if frame.args['nimi_myös'] then
-- kontekstimallineen nimi
ktxt = mw.ustring.gsub(pframe:getTitle(), "^Malline:", "")
end
return m.hae_teksti(pframe.args, pframe.args.k, frame.args.aak, ktxt, frame.args["ei-luokittelua"], pframe.args["sulje"] == "-")
end
return m