Moduulin yhteys käyttöohje
Käytetään yhteys-mallineesta käsin.
Parametrit:
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.
{{yhteys|Tanskan|matematiikka}}
(''Tanskan, matematiikka'')
{{yhteys|matematiikka|k=Tanskan}}
(''matematiikka'')]
{{yhteys|matematiikka|k=da}}
(''matematiikka'')]
{{yhteys|matematiikka|aak=ananas|k=da}}
(''matematiikka'')]
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 then
-- jos luokka on nil käytetään "pääsanan" luokkaa
if not tiedot then
avain = tiedot
if avain and tiedot then
return tiedot, tiedot, tiedot
end
end
return tiedot, tiedot, tiedot
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)'']
-- ]
--
-- @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 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, pframe.args == "-")
end
return m