Siirry sisältöön

Moduuli:yhteys

Wikisanakirjasta

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
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy