Moduuli:Kielilinkki

Wikisanakirjasta
Tässä ohjeessa kuvataan toiminnallisuutta jonka kehitys on vielä kesken. Sivu on tarkoitettu lähinnä kehityksen apuvälineeksi, ei yleiseen käyttöön.

Moduulin avulla voi merkitä tekstiä kielelle määritellyllä tyylillä ja tehdä linkin kielen omaan osioon.

Kielten ja kirjoitusjärjestelmien tyylit määritellään sivulla Järjestelmäviesti:Gadget-Tekstityylit.

Käyttö[muokkaa]

Moduulia käytetään sisältösivuilla seuraavien mallineiden kautta.

  • l: kielen linkkityylillä merkitty linkki kielen omaan osioon,
  • t: kielen tyylillä merkitty teksti (esim. esimerkkilause),
  • tb: kielen lihavointityylillä merkitty teksti (esim. sanarivillä näkyvä teksti taivutusmuotoartikkeleissa),
  • termi: kielen sana kuin siihen viitataan, esim. etymologiaosiossa; kursivointi latinalaisilla, kreikkalaisilla ja kyrillisillä; muilla normaali
  • käännös: käännöslaatikossa näytettävä sana silloin, kun sanasta voi luoda sivun

Lua-moduuleissa kirjasto otetaan käyttöön seuraavasti:

local kielilinkki = require("Moduuli:kielilinkki")

Funktiot[muokkaa]

linkki[muokkaa]

kielilinkki.linkki(kielikoodi, kohdesivu, teksti, lisäparametrit)

Tekee kielen tyylillä muotoillun linkin kielen osioon.

Esimerkkejä:

kielilinkki.linkki("es", "pato")            -- Tulos: <span class="Latn" lang="es">[[pato]]</span>
kielilinkki.linkki("fi", "ankka", "ankan")  -- Tulos: <span class="Latn" lang="fi">[[ankka|ankan]]</span>
kielilinkki.linkki("ar", "بَطَّة", "بطة")      -- Tulos: <span class="Arab" lang="ar">[[بطة|بَطَّة]]</span>

Parametrit voi antaa myös nimettyinä:

kielilinkki.linkki{ kieli = "fi", kohde = "ankka", teksti = "ankan" }  -- Tulos sama kuin yllä.

Nimettyjä parametreja on lisäksi seuraavat:

  • elem: html-elementti johon linkki tulee. Koska wikissä ei voi luoda suoraan a-elementtiä tulee linkki toisen elementin sisään. (Oletus span.)
  • class: html-elementille annettavat class-attribuutit (oletus linkki); jos useita, erotetaan välilyönnillä
  • kuvaus: linkin kohdetta kuvaava teksti joka on samalla myös artikkelipohjan nimi. Malline:artikkelipohja. Tätä voi käyttää sivujen automaattiseen luontiin.
  • kuvaus-param: taulukko, jossa on kuvaukseen littettävät parametrit
kielilinkki.linkki{ kieli = "fi", kohde = "ankka", teksti = "ankan", elem = "b" } -- Tulos: <b class="Latn" lang="fi">[[ankka|ankan]]</b>

Jos kielelle on määritelty automaattinen linkin muuntaja moduulissa Automaattilinkki, voi ensimmäisen parametrin jättää pois:

kielilinkki.linkki{ kieli = "sr", kohde = "ȍko", autolinkki = true }  -- sama kuin kielilinkki.linkki("sr", "oko", "ȍko")
kielilinkki.linkki{ kieli = "ar", kohde = "بَطَّة", autolinkki = true }  -- sama kuin kielilinkki.linkki("ar", "بَطَّة", "بطة").

teksti[muokkaa]

kielilinkki.teksti(kielikoodi, teksti, lisäparametrit)

Tekee kielen tyylillä muotoillun tekstin.

Esimerkkejä:

kielilinkki.teksti("bn", "পাতিহাঁস") -- Tulos: <span class="Beng" lang="bn">পাতিহাঁস</span>
  • elem: html-elementti johon linkki tulee. Koska wikissä ei voi luoda suoraan a-elementtiä tulee linkki toisen elementin sisään. (Oletus span.)
  • class: html-elementille annettavat class-attribuutit (oletus linkki); jos useita, erotetaan välilyönnillä

--- Moduuli linkkien tekemiseksi tietyn kielen osioon ja linkkitekstin tyylin merkkaukseen.
local p = {}

local kielikoodit = require("Moduuli:kielikoodit")
local kjdata      = require("Moduuli:Kirjoitusjärjestelmät")
local autolink    = require("Moduuli:Automaattilinkki")
local apu         = require("Moduuli:Mallinetyokalut")


function p.linkki_tmp(parametrit)
	local lgsc = parametrit.kieli
	local link = parametrit.kohde
	local text = parametrit.teksti
	
    assert ( lgsc,  "Pakollinen kieliparametri puuttuu!" )
    assert ( link,  "Pakollinen linkkiparametri puuttuu!" )

	if parametrit["autolinkki"] then
		if not text then
			text = link
		end	
		link = autolink.muuta(lgsc, link)
	end


    local lang, _ = kjdata.avaaKielikoodi(lgsc)
    if not lang then
        lang = lgsc
    end
    
    -- Otsikko johon linkataan.
    local otsikko = kielikoodit.kieliotsikko(lang)
    if lang == "kans" then
        otsikko = "Kansainvälinen"
    end

    parametrit["class"] = parametrit["class"] or "linkki"
    
   
    
    if         text and     otsikko then
    	parametrit.teksti = "[[" .. link .. "#" .. otsikko .. "|" .. text .. "]]"
        
    elseif not text and     otsikko then
    	parametrit.teksti = "[[" .. link .. "#" .. otsikko .. "|" .. link .. "]]"
        
    elseif     text and not otsikko then
    	parametrit.teksti = "[[" .. link .. "|" .. text .. "]]"
        
    else -- if not text and not otsikko then
    	parametrit.teksti = "[[" .. link .. "]]"
    end
    
    return p.teksti_tmp(parametrit)
end


function p.linkki(eka, link, text, lisaparametrit)
	if type(eka) == "table" then
		assert ( link == nil and text == nil and lisaparametrit == nil )
		lisaparametrit = eka
	else
		lisaparametrit = lisaparametrit or {}
		lisaparametrit["kieli"]  = eka
		lisaparametrit["kohde"]  = link
		lisaparametrit["teksti"] = text
	end
	
	return p.linkki_tmp(lisaparametrit)
end

--- Tekee kielen tyylillä (fonttikoolla) varustetun linkin kieliotsikkoon.
--  @param lang:   kielikoodi (+ mahdollinen kirjoitusjärjestelmä), esim. "en" tai "sr-Cyrl"
--  @param link:   linkin kohde (ja linkkiteksti, jos text-parametria ei anneta).
--  @param text:   valinnainen linkin teksti
--  @param lisaparametrit: parametrit, joilla voi vaikuttaa tekstin tulostukseen:
--           ["elem"]  = html-elementti, johon teksti tulee (oletus "span")
--           ["class"] = html:n class-attribuutti elementille (oletus "linkki")
--  @return:       linkki tekstinä
function p.linkki_vanha(lgsc, link, text, lisaparametrit)
	lisaparametrit = lisaparametrit or {}
	lisaparametrit["kieli"]  = lgsc
	lisaparametrit["kohde"]  = link
	lisaparametrit["teksti"] = text
	
	return p.linkki_tmp(lisaparametrit)
end



function p.linkki_tai_nil(eka, link, text, lisaparametrit)
	if type(eka) == "table" then
		assert ( link == nil and text == nil and lisaparametrit == nil )
		lisaparametrit = eka
	else
		lisaparametrit = lisaparametrit or {}
		lisaparametrit["kieli"]  = eka
		lisaparametrit["kohde"]  = link
		lisaparametrit["teksti"] = text
	end
	
    if lisaparametrit["kohde"] == nil or lisaparametrit["kohde"] == "" then
        return nil
    end
    
	return p.linkki_tmp(lisaparametrit)
end

-- Muuten sama kuin p.linkki, mutta ei anna virhettä, jos linkkiä ei ole annettu,
-- vaan palauttaa nil. Käyttö on yksinkertaisempaa tietyissä yhteyksissä.
function p.linkki_tai_nil_vanha(lgsc, link, text, lisaparametrit)
    if link == nil or link == "" then
        return nil
    end
    return p.linkki(lgsc, link, text, lisaparametrit)
end

function p.Linkki(frame)
	local pframe
	local cur = frame
	local args = frame.args
	
	-- Yhdistetään parametrit eri tasojen frameista.
	while cur and cur.args.frame == "parent" do
		pframe = cur:getParent()
		args = apu.yhdista(args, pframe.args)
		cur = pframe
	end

    -- Oletuksena on suomi ja nykyinen sivu, kuten l-mallineessa alunperin.
    local lang = args[1] or "fi"
    local link = apu.ensimmainen_ei_tyhja{args[2], mw.title.getCurrentTitle().fullText}
    local text = apu.ensimmainen_ei_tyhja{args[3]}
    
    -- Numeroidut kuvaus-param-parametrit taulukoksi.
    local args_t = apu.numeroidut_parametrit(args, { "kuvaus-param-" })
    
    args["kuvaus-param"] = args_t["kuvaus-param-"]

    return p.linkki(lang, link, text, args)
end





function p.teksti_tmp(parametrit)
	local lgsc = parametrit["kieli"]
	local text = parametrit["teksti"]
	
    assert ( lgsc,  "Pakollinen kieliparametri puuttuu!" )
    assert ( text,  "Pakollinen tekstiparametri puuttuu!" )

    local lang, script = kjdata.avaaKielikoodi(lgsc)
    if not script then
        script  = kjdata.yleinenKirjoitusjarjestelma(lang)
    end
    
    local span = mw.html.create(parametrit["elem"] or "span")
        :addClass(script)
        :wikitext(text)
    
    if lang then
        span:attr('lang', lang)
    end
    
    
    if parametrit["class"] then
        span:addClass(parametrit["class"])
    end
        
    -- Linkin kohteen kuvailutiedot. Kuvaus on samall myös artikkelipohjan nimi.
    if parametrit["kuvaus"] then
        span:attr('data-kuvaus', parametrit["kuvaus"])
        -- Artikkelipohjan parametrit.
        if parametrit["kuvaus-param"] then
            span:attr('data-kuvaus-param', 
            	mw.text.encode(mw.text.jsonEncode(parametrit["kuvaus-param"], mw.text.JSON_PRESERVE_KEYS)))
        end
    end     
    
    return tostring(span)
end



function p.teksti(eka, text, lisaparametrit)
	if type(eka) == "table" then
		assert ( text == nil and lisaparametrit == nil )
		lisaparametrit = eka
	else
		lisaparametrit = lisaparametrit or {}
		lisaparametrit["kieli"]  = eka
		lisaparametrit["teksti"] = text
	end	

	return p.teksti_tmp(lisaparametrit)
end

--- Tekee kielen tyylillä (fonttikoolla) varustetun tekstipätkän.
--  @param lang:  kielikoodi
--  @param text:  tekstipätkä annetulla kielellä
--  @param lisaparametrit: parametrit, joilla voi vaikuttaa tekstin tulostukseen:
--           ["elem"]  = html-elementti, johon teksti tulee (oletus span)
--           ["class"] = html:n class-attribuutti elementille (oletus tyhjä)
--  @return:      span-elementillä ympäröity teksti, jossa on kielen tyyli
function p.teksti_vanha(lgsc, text, lisaparametrit)
	lisaparametrit = lisaparametrit or {}
	lisaparametrit["kieli"]  = eka
	lisaparametrit["teksti"] = text
	
	return p.teksti_tmp(lisaparametrit)
end

function p.Teksti(frame)
    if frame.args.frame == 'parent' then
        frame = frame:getParent()
    end
    
    local lang = frame.args[1]
    local text = frame.args[2]

    return p.teksti(lang, text, frame.args)
end


return p