Moduuli:ParametrisoituTeksti/ohje

Wikisanakirjasta

Tämä on ohjesivu moduulille Moduuli:ParametrisoituTeksti

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

Kirjaston avulla voi tehdä helposti tekstejä, joissa ehdollisia kohtia. Kirjaston avulla voi varmistaa, että lopputulos on järkevä rippumatta siitä mikä yhdistelmä parametreja on annettu.

Moduulin funktiot[muokkaa]

muotoile[muokkaa]

muotoile(rakenne)

Pääfunktio, joka prosessoi annetun elementtirakenteen ja palauttaa sen tuottaman tekstin. Tämä on lyhyt tapa tehdä peräkkäin uusi_muotoilija, prosessoi ja tostring(muotoilija)

uusi_muotoilija[muokkaa]

uusi_muotoilija()

Luo uuden muotoiluolion. Tätä ei tarvitse kutsua suoraan, jos käytetään muotoile-funktiota.

Rakenne-elementit[muokkaa]

Tekstin rakenne kuvataan alla luetelluilla elementeillä. Kun elementti evaluoidaan, se voi tuottaa pätkän tekstiä tai tyhjän arvon, mikä vaikuttaa sen sisältävien elementtien tuottamaan tulokseen.

Jotta koodista saa selkeämmän rakenne-elementit kannattaa tuoda moduulin nimiavaruuteen:

local pt = require("Moduuli:ParametrisoituTeksti")
local ryhma, muuttuja, luettelo, tai = pt.ryhma, pt.muuttuja, pt.luettelo, pt.tai

muuttuja[muokkaa]

muuttuja(m)

Yksinkertaisin elementti, jolla merkitään ehdolliset kohdat eli ne kohdat, joilla joko on arvo tai ei ole arvoa.

Parametrit:

  1. Lua-muuttuja, joka sisältää merkkijonon tai arvon nil. Tyhjä merkkijono ja nil luetaan tyhjiksi.
local m1 = "eka"
local m2 = ""
local m3 = nil

ryhma("(", muuttuja(m1), ")") -- Tulos: "(eka)"
ryhma("(", muuttuja(m2), ")") -- Tulos: ""
ryhma("(", muuttuja(m3), ")") -- Tulos: ""

ryhma[muokkaa]

ryhma(prefiksi, elementti1, [erotin1, elementti2, [erotin2, elementti3...]], suffiksi)

Tärkein elementti, jolla merkitään ehdollista tekstiä.

Parametrit:

  • Vaihtuva määrä parametreja.
    • Ensimmäinen parametri on aina prefiksi ja viimeinen suffiksi. Prefiksi ja suffiksi tulostetaan, jos yksikin elementti on ei-tyhjä.
    • Elementit: tässä luetelluilla rakenne-elementeillä merkittyjä alirakenteita.
    • Erottimet: Merkkijonoja, jotka lisätään tulostukseen, jos niiden molemmilla puolilla olevilla muuttujilla on arvo. Erotinta voi edeltää numeroarvo, joka kertoo erottimen presedenssin toisiin erottiimiin nähden (oletusarvo on 0).

Esimerkkejä:

local m1 = "na"
local t1 = nil

ryhma("''", muuttuja(m1), "''-taivutus")  -- tulos: "''na''-taivutus"
ryhma("''", muuttuja(t1), "''-taivutus")  -- tulos: ""
local m1 = "eka"
local m2 = "toka"
local m3 = "kolkki"
local t1 = nil

ryhma("(", muuttuja(m1), ", ", muuttuja(m2), "; ", muuttuja(m3), ")")  -- tulos: "(eka, toka; kolkki)"
ryhma("(", muuttuja(m1), ", ", muuttuja(m2), "; ", muuttuja(t1), ")")  -- tulos: "(eka, toka)"
ryhma("(", muuttuja(t1), ", ", muuttuja(m2), "; ", muuttuja(m3), ")")  -- tulos: "(toka; kolkki)"
ryhma("(", muuttuja(t1), ", ", muuttuja(m2), "; ", muuttuja(t1), ")")  -- tulos: "(toka)"
ryhma("(", muuttuja(t1), ", ", muuttuja(t1), "; ", muuttuja(t1), ")")  -- tulos: ""

-- Tässä tulokseen tulee puolipiste (;), koska sen sille on annettu suurempi presedenssi (1) kuin pilkulle (0).
ryhma("(", muuttuja(m1), ", ", muuttuja(t1), 1, "; ", muuttuja(m3), ")")  -- tulos: "(eka; kolkki)"

luettelo[muokkaa]

luettelo(taulukko, erotin, viimeisen_erotin)

Erottimella erotellun luettelon tekemiseen.

Parametrit:

  1. taulukko lueteltavista elementeistä
  2. erotin, jolla arvot erotellaan
  3. toisiksi viimeisen ja viimeisen arvon välinen erotin, jos eri kuin erotin
local m1 = { "eka", "toka", "kolkki" }

luettelo(m1, ", ", " tai ") -- Tulos: "eka, toka tai kolkki"
local m1 = { "A", "B", nil, "D" }
local m2 = { "1", nil, "3", "4" }

luettelo(ryhma("", m1, " ", ryhma("(", m2, ")"), ""), ", ", " tai ") -- Tulos: "A (1), B, (3) tai D (4)"

Luetteloita voi olla myös sisäkkäin. Tällöin muuttujien pitää olla vastaavan syvyisiä puita.

  • yksittäisessä luettelossa taulukko on muotoa { "1", "2", "3" },
  • kun luettelo on toisen sisällä, taulukko on muotoa { { "1a", "1b" }, { "2a" }, { "3a", "3b" } },
  • jne.

tai[muokkaa]

tai(elementti1, [elementti2, [elementti3...]]])

Lausekkeen tulos on ensimmäisen ei tyhjän rakenne-elementin arvo.

Parametrit:

  • Mielivaltainen määrä muita rakenne-elementtejä.
local m1 = nil
local m2 = "toka"
local m3 = "kolkki"

tai(muuttuja(m1), muuttuja(m2)) -- Tulos: "toka" 
tai(muuttuja(m2), muuttuja(m3)) -- Tulos: "toka"


funktio[muokkaa]

funktio(fun, param1, [param2, [param3...]]])

Tällä elementillä voi tehdä monimutkaisempia ehtoja, joita ei muilla elementeillä voi tehdä.

Parametrit:

  • fun: funktio muotoa f(ctx, [param1, [param2, [param3...]]]), jossa ctx on viittaus muotoilija-olioon.
  • muut parametrit: funktiolle mahdollisesti annettavat parametrit

Funktiossa pääse käsiksi parametrien arvoihin muotoilijaolion metodeilla hae_arvo ja hae_arvo_tai_nil.

Tekstiä lisätään tulostukseen lisäämällä muotoilijaolion out-kenttään.

Funktion pitää palauttaa true, jos tekstiä lisättiin, muuten false.

Huomaa, että se ovatko funktion parametrit elementtejä riippuu funktiosta.

Esim.

local function _sukuteksti(ctx, suku)
   local lyh = ctx:hae_arvo_tai_nil(suku)
   
   local txt = mw.getCurrentFrame():expandTemplate{ ['title'] = 'suku-teksti', ['args'] = { lyh } }
   if txt then
      table.insert(ctx.out, txt)
      return true
   end
   
   return false
end

-----
local m1 = "f"

funktio(_sukuteksti, m1) -- Palauttaa mallinekutsun {{sukuteksti|f}} arvon.

Sanarivimallineissa usein esiintyviä toimintoja on koottuu moduuuliin LibSanarivi.

Huomaa, että alirakenteita voi myös nimetä käyttäen Luan funktioita apuna. Tässä ei kuitenkaan ole kyse funktioelementistä.

function p.tailuettelo(...)
   return luettelo({...}, ", ", " tai ")
end

Muotoilu-olion metodit[muokkaa]

hae_arvo[muokkaa]

hae_arvo(m)

Palauttaa annetun parametrin arvon. Tätä käytetään funktio-elementissä. Arvoa ei pidä lukea suoraan ilman tätä metodia, koska metodi palauttaa oikean arvon myös silloin kun funktio on luettelon sisällä.

hae_arvo_tai_nil[muokkaa]

hae_arvo_tai_nil(m)

Sama kuin hae_arvo, mutta palauttaa nil myös, kun arvo on tyhjä merkkijono. Tämä on yleensä se, mitä halutaan.

prosessoi[muokkaa]

prosessoi(rakenne)

Lisää annetun elementtirakenteen tuottaman tekstin tulostukseen. Palauttaa true, jos tekstiä tulostettiin, muuten false.

Tätä voi kutsua funktio-elementissä, kun sille annetaan parametrina elementtirakenne.

Esimerkki tai-elementin toteutuksesta:

local function _tai(ctx, ...)
   local params = {...}
   local ret
   
   for i = 1, #params do
      ret = ctx:prosessoi(params[i])
      if ret then
          return true
      end
   end
   return false
end

-- Käyttö:
funktio(_tai, luettelo(mon1, mon2, mon3, ", ", " ja "), muuttuja("ei monikkoa")) -- TODO tarkista