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

Apumoduuli luokkien lisäämiseksi toisissa moduuleissa.

Funktiot muokkaa

asetaAakkostajalla2 muokkaa

aseta{kieli =, luokka = [, sivu = ][, nimiavaruus = ]}

Asettaa luokan nimeltä luokka kielen kieli aakkostusavaimella. Jos parametri sivu on annettu, käytetään sitä aakkostusavaimen luomiseen. Jos parametri nimiavaruus on annettu, asettaa luokan vain, jos artikkeli on tässä nimiavaruudessa.

Parametrit:

  1. kieli: kielen kielikoodi (tai muu aakkostajan tunnus)
  2. luokka: luokan nimi, ilman Luokka:-etuliitettä
  3. sivu: (valinnainen) aakkostettava sivun nimi
  4. nimiavaruus: (valinnainen) nimiavaruus, jossa sivu luokitellan; 0 = artikkelinimiavaruus
-- Kun ollaan sivulla Schwarzfußkatze.
luokittelu.asetaAakkostajalla2{
    kieli = "de", 
    luokka = "Saksan kielen kissaeläimet",
}

mw.log(tostring(luokittelu)) -- Tulostaa "[[Luokka:Saksan kielen kissaeläimet|SCHWARZFUSSKATZE]]"
luokittelu.asetaAakkostajalla{
    kieli = "de", 
    luokka = "Saksan kielen kissaeläimet", 
    sivu = "Schwarzfußkatze"
}
mw.log(tostring(luokittelu)) -- Tulostaa "[[Luokka:Saksan kielen kissaeläimet|SCHWARZFUSSKATZE]]"


-- Kun ollaan sivulla Schwarzfußkatze.
luokittelu.asetaAakkostajalla2{
    kieli = "de", 
    luokka = "Saksan kielen kissaeläimet",
    nimiavaruus = 0
}

mw.log(tostring(luokittelu)) -- Tulostaa "[[Luokka:Saksan kielen kissaeläimet|SCHWARZFUSSKATZE]]"
-- Kun ollaan sivulla Malline:substantiivi/testit.
luokittelu.asetaAakkostajalla2{
    kieli = "de", 
    luokka = "Saksan kielen kissaeläimet",
    nimiavaruus = 0
}

mw.log(tostring(luokittelu)) -- Tulostaa "", koska ollaan Malline-nimiavaruudessa ei artikkelinimiavaruudessa

asetaAakkostajalla muokkaa

aseta(kieli, luokka[, title])

Käytä mielummin funktiota asetaAakkostajalla2.

Asettaa luokan nimeltä luokka kielen kieli aakkostusavaimella. Jos parametri title on annettu, käytetään sitä aakkostusavaimen luomiseen.

Parametrit:

  1. kieli: kielen kielikoodi (tai muu aakkostajan tunnus)
  2. luokka: luokan nimi, ilman Luokka:-etuliitettä
  3. title: (valinnainen) aakkostettava sivun nimi
-- Kun ollaan sivulla Schwarzfußkatze.
luokittelu.asetaAakkostajalla("de", "Saksan kielen kissaeläimet")
mw.log(tostring(luokittelu)) -- Tulostaa "[[Luokka:Saksan kielen kissaeläimet|SCHWARZFUSSKATZE]]"
luokittelu.asetaAakkostajalla("de", "Saksan kielen kissaeläimet", "Schwarzfußkatze")
mw.log(tostring(luokittelu)) -- Tulostaa "[[Luokka:Saksan kielen kissaeläimet|SCHWARZFUSSKATZE]]"

aseta muokkaa

aseta(luokka, aak[, nimiavaruus])

Asettaa luokan nimeltä luokka aakkostusavaimella aak. Jos parametri nimiavaruus on annettu, asettaa luokan vain, jos artikkeli on tässä nimiavaruudessa.

Parametrit:

  1. luokka: luokan nimi, ilman Luokka:-etuliitettä
  2. aak: luokalle annettava aakkostusavain.
    Huomaa, että aakkostusavain pitää antaa isoilla kirjaimilla, että aakkostus toimii kaikissa kielissä (esim. turkissa) oikein. Muissa kielissä myös pienet kirjaimet käyvät.
  3. nimiavaruus: (valinnainen) nimiavaruus, jossa artikkeli luokitellaan. Voi antaa numerolla tai nimellä. 0 = artikkelinimiavaruus
luokittelu.aseta("A", "X")
mw.log(tostring(luokittelu)) -- Tulostaa "[[Luokka:A|X]]"
luokittelu.aseta("A", "X")
luokittelu.aseta("A", "Y")
mw.log(tostring(luokittelu)) -- Tulostaa "[[Luokka:A|X]][[Luokka:A|Y]]"
luokittelu.aseta("A", "X")
luokittelu.aseta("A", "Y", "Moduuli")
mw.log(tostring(luokittelu)) -- Tulostaa "[[Luokka:A|X]][[Luokka:A|Y]]", jos ollan Moduuli-nimiavaruudessa, muuten "[[Luokka:A|X]]".

--- Apumoduuli luokkien lisäämiseksi toisissa moduuleissa.
local p = {
   luokat = {},
   aakkostajat = {},
   nimiavaruus = nil
}

local kielikoodit = require("Moduuli:kielikoodit")
local artikkeliaakkostaja = require("Moduuli:artikkeliaakkostaja")

-- Asettaa luokan annetun aakkostuksen mukaan.
-- @param luokka:  luokan nimi ilman nimiavaruutta
-- @param aak:     aakkostusavain
-- @param nimiavaruus: (valinnainen) merkkijono nimiavaruudesta tai luettelo nimiavaruuksista;
--                       luokka lisätään vain jos sivu on jossakin näistä
function p.aseta(luokka, aak, nimiavaruus)
    assert(luokka, "Luokan nimi puuttuu")

    local tobj = mw.title.getCurrentTitle()

    if not nimiavaruus then
        nimiavaruus = p.nimiavaruus
    end
    
    if nimiavaruus and not tobj:inNamespace(nimiavaruus) then
        return
    end
    
    table.insert(p.luokat, {
                     ["nimi"] = luokka,
                     ["aak"] = aak
    })
end


---
-- Asettaa luokan ja aakkostaa sivun annetun kielen mukaan.
-- @param params.kieli:         aakkostajan tunnus (kielitunnus)
-- @param params.luokka:        luokan nimi ilman nimiavaruutta
-- @param params.sivu:          (valinnainen) aakkostajalle annettava sivun nimi, jos muu kuin PAGENAME
-- @param params.nimiavaruus: (valinnainen) merkkijono nimiavaruudesta tai luettelo nimiavaruuksista;
--                              luokka lisätään vain jos sivu on jossakin näistä
function p.asetaAakkostajalla2(params)
    local kieli  = params.kieli
    local luokka = params.luokka
    local sivu   = params.sivu
    local nimiavaruus = params.nimiavaruus
   
   -- Tallennetaan aakkostajat taulukkoon, koska ne pitää ladata erikseen.
   if p.aakkostajat[kieli] == nil then
      p.aakkostajat[kieli] = artikkeliaakkostaja.lataa_aakkostaja(kieli)
   end

   if not sivu then
      sivu = mw.title.getCurrentTitle().text
   end

   local aak = p.aakkostajat[kieli].kuvaa_merkkijono(sivu)

   p.aseta(luokka, aak, nimiavaruus)

end


---
-- Asettaa luokan ja aakkostaa sivun annetun kielen mukaan.
-- @param tunnus:  aakkostajan tunnus
-- @param luokka:  luokan nimi ilman nimiavaruutta
-- @param title:   (valinnainen) sivun otsikko, jos muu kuin PAGENAME
-- @param nimiavaruus: (valinnainen) luokka lisätään vain jos sivu on tässä nimiavaruudessa
function p.asetaAakkostajalla(tunnus, luokka, title)
    p.asetaAakkostajalla2{
        kieli = tunnus,
        luokka = luokka,
        sivu = title
    }
end



--- Palauttaa asetetut luokat tekstinä.
function p.hae()
    local luokat = {}
   
   for i, item in ipairs(p.luokat) do
      table.insert(luokat, "[[Luokka:")
      table.insert(luokat, item.nimi)
      if item.aak and item.aak ~= "" then
         table.insert(luokat, "|")
         table.insert(luokat, item.aak)
      end
      table.insert(luokat, "]]")
   end
   
   return table.concat(luokat, "")
end

local monikot = {
   ["adjektiivi"]      = "adjektiivit",
   ["adpositio"]       = "adpositiot",
   ["adverbi"]         = "adverbit",
   ["erisnimi"]        = "erisnimet",
   ["fraasi"]          = "fraasit",
   ["infiksi"]         = "infiksit",
   ["interfiksi"]      = "interfiksit",
   ["järjestysluku"]   = "järjestysluvut",
   ["kardinaaliluku"]  = "kardinaaliluvut",
   ["lyhenne"]         = "lyhenteet",
   ["kirjoitusmerkki"] = "sanat",
   ["numeraali"]       = "numeraalit",
   ["partikkeli"]      = "partikkelit",
   ["prefiksi"]        = "prefiksit",
   ["prepositio"]      = "prepositiot",
   ["postpositio"]     = "postpositiot",
   ["pronomini"]       = "pronominit",
   ["sana"]            = "sanat",
   ["substantiivi"]    = "substantiivit",
   ["suffiksi"]        = "suffiksit",
   ["supistuma"]       = "supistumat",
   ["interjektio"]     = "interjektiot",
   ["konjunktio"]      = "konjunktiot",
   ["verbi"]           = "verbit"
}

--- Muuttaa sanarivimallineissa käytetyt avainsanat luokannimissä käytettyihin monikkomuotoihin.
-- @param sanalk: esim. "substantiivi"
function p.luokkaMonikko(sanalk)
   if monikot[sanalk] then
      return monikot[sanalk]
   end

   error("tuntematon sanaluokka: " .. sanalk)
end


--- Palauttaa annetun kielen kielen genetiivissä luokkanimissä käytetyssä muodossa.
-- @param kielikoodi: kielen kielikoodi
function p.luokkaGenetiivi(kielikoodi)
   return kielikoodit.genetiivissa(kielikoodi, true)
end


--- Palauttaa annetun kielen annetun aiheen luokan nimen.
-- @param kielikoodi: kielen koodi, esim. "fr"
-- @param aihe:       aihe esim. "substantiivit"
--
-- Tiettyjen luokkien nimet ovat esim. "Ranskan sanat" muiden esim. "Ranskan
-- kielen substantiivit".
function p.kielenLuokka(kielikoodi, aihe)
   local gen = p.luokkaGenetiivi(kielikoodi)

   -- Tässä luetellaan aiheet, joiden luokkanimiin ei tule "kielen"-sanaa.
   if aihe == "sanat" then
      return gen .. " " .. aihe
   end

   -- Kaikkiin muihin laitetaan "kielen".
   return gen .. " kielen " .. aihe
end

setmetatable(p, {
   -- Funktio, jota kutsutaan, kun taulukko muutetaan merkkijonoksi.
   __tostring = function (p)
      return p.hae()
   end
})

return p