Moduuli:sanarivi/cmn

Wikisanakirjasta

Tätä moduulia kutsutaan yleissanarivimallineiden (adjektiivi, substantiivi yms.) kautta.

Mandariinikiinan sanarivimallineet[muokkaa]

{{sanaluokkamalline|cmn|lat=pinyin|yks=yksinkertaistettu|per=perinteinen|asu=kirjoitusasu}}

Kohtaan "sanaluokkamalline" kirjoitetaan kyseessä olevan sanan sanaluokka, esim. substantiivi, adjektiivi tai verbi.

Kohta "cmn" ei muutu, sillä se on mandariinikiinan kielikoodi.

Parametri lat (tässä tekstin "pinyin" tilalle) tulee mandariinikiinan latinisointi pinyinillä.

Parametrien yks/per avulla voi ilmoittaa sanan vaihtoehtoisen kirjoitusasun joko yksinkertaistetuilla (koodi "yks=xx") tai perinteisillä merkeillä (koodi "per=xx"). Jos kirjoitusasu on sama molemmilla, tämä osa jätetään kokonaan pois ja annetaan parametri asu=yks+per. Tällöin näkyviin tulee teksti "perinteinen ja yksinkertaistettu kirjoitusasu".

Jos et ole varma, eroavatko perinteinen ja yksinkertaistettu kirjoitusasu toisistaan, voit jättää koodiin jätä yks-, per- ja asu-parametrit pois, jolloin sana lisätään luokkaan Mandariinikiinan sanat, joiden kirjoitusasua ei ole merkitty

Parametrilla asu voi antaa sanan kirjoitusasun vaihtoehdot ovat:

  • yks+per: yksinkertaistettu ja perinteinen
  • yks: yksinkertaistettu
  • per: perinteinen

Jos parametri yks tai per on annettu, ei tätä tarvitse antaa. Kun parametri yks on annettu, näytetään asuksi perinteinen ja vastaavasti kun parametri per on annettu, näytetään asuksi yksinkertaistettu.

Kun tätä mallinetta käytetään, wiki lisää artikkeliin automaattisesti

  • alkuun itse sanan (sivun nimestä)
  • mallineen ilmaisemat luokat, esim. "Mandariinikiinan sanat yksinkertaistetussa kirjoitusasussa", "Mandariinikiinan kielen substantiivit" jne.

Esimerkit[muokkaa]

  • Sivu 摩托車
  • KOODI: {{substantiivi|cmn|lat=mótuōchē|asu=per|yks=摩托车}}
    TULOS: sanarivi/cmn (pinyin mótuōchē) (perinteinen kirjoitusasu; yksinkertaistetussa kirjoitusasussa 摩托车)
  • KOODI: {{substantiivi|cmn|lat=mótuōchē|yks=摩托车}}
    TULOS: sanarivi/cmn (pinyin mótuōchē) (perinteinen kirjoitusasu; yksinkertaistetussa kirjoitusasussa 摩托车)
  • Sivu 电梯
  • KOODI: {{substantiivi|cmn||lat=diàntī|asu=yks|per=電梯}}
    TULOS: (pinyin diàntī) (yksinkertaistettu kirjoitusasu; perinteisessä kirjoitusasussa 電梯)
  • KOODI: {{substantiivi|cmn||lat=diàntī|per=電梯}}
    TULOS: (pinyin diàntī) (yksinkertaistettu kirjoitusasu; perinteisessä kirjoitusasussa 電梯)
  • Sivu
  • KOODI: {{adjektiivi|cmn|lat=xiǎo}}
    TULOS: sanarivi/cmn (pinyin xiǎo)

--- Mandariinikiinan sanarivimallineet.
local p = {}

local kielilinkki = require("Moduuli:Kielilinkki")
local luokat    = require("Moduuli:luokittelu")
local apu       = require("Moduuli:Mallinetyokalut")
local srlib     = require("Moduuli:LibSanarivi")
local paramtext = require("Moduuli:ParametrisoituTeksti")
local ryhma, var, luettelo, tai = paramtext.ryhma, paramtext.muuttuja, paramtext.luettelo, paramtext.tai

---
-- @param title:  PAGENAME tai muu otsikko, jos annettu
-- @param lat:    taulukko pinyin-muodoista tai nil
-- @param asu:    kirjoitusasu, "yks", "per", "yks+per" tai nil
-- @param yks+per: yksinkertainen tai perinteinen kirjoitusasu riippuen kumpi tulostetaan tai nil
local function muotoileSanarivi(title, lat, asu, toinen)

    assert(title, "Pakollinen parametri puuttuu!")
    
    lisap = apu.map(
        function (_) return {
                ["kuvaus"] = "tr/pinyin-transkriptio" }
        end,
        lat or {}
    )

    local asuteksti = nil
    local yks = nil
    local per = nil
    local kirj = "Hani"
    
    if asu == "yks+per" then
        asuteksti = "''yksinkertaistettu ja perinteinen kirjoitusasu''"
    elseif asu == "yks" then
        asuteksti = "''yksinkertaistettu kirjoitusasu''"
        per = toinen
        kirj = "Hans"
    elseif asu == "per" then
        asuteksti = "''perinteinen kirjoitusasu''"
        yks = toinen
        kirj = "Hant"        
    end

    return paramtext.muotoile(
       ryhma("",
             srlib.hakusana(title, lang, kirj),
             " ",
             ryhma("(''pinyin'' ", srlib.linkkiluettelo("cmn-Latn", lat, nil, nil, lisap), ")"),
             " ",
             ryhma("(",
                   asuteksti,
                   "; ",
                   tai(
                       ryhma("''yksinkertaistetussa kirjoitusasussa'' ", srlib.kielilinkki("cmn", yks), ""),
                       ryhma("''perinteisessä kirjoitusasussa'' ", srlib.kielilinkki("cmn", per), "")
                   ),
                   ")"),
             "")
    ), luokat	
end



--- Apufunktio eri luokkayhdistelmien tekemiseksi.
-- @param sanalk: esim. "substantiivi"
-- @param yks:    true, jos lisätään
-- @param per:    true, jos lisätään
local function lisaaLuokka(sanalk, asu)
   local luokka = luokat.kielenLuokka("cmn", luokat.luokkaMonikko(sanalk))

   if not asu or sanalk ~= "sana" then
       luokat.asetaAakkostajalla2{
           kieli = "cmn",
           luokka = luokka,
--           nimiavaruus = 0 -- estetään luokan näkyminen testi- ja ohje- yms. sivuilla
       }
      
   elseif asu == "per" then
       luokat.asetaAakkostajalla2{
           kieli = "cmn",
           luokka = luokka .. " perinteisessä kirjoitusasussa",
--           nimiavaruus = 0           
       }
		    
   elseif asu == "yks" then
       luokat.asetaAakkostajalla2{
           kieli = "cmn",
           luokka = luokka .. " yksinkertaistetussa kirjoitusasussa",
--           nimiavaruus = 0           
       }
      
   elseif asu == "yks+per" then
      luokat.asetaAakkostajalla2{
           kieli = "cmn",
           luokka = luokka .. " perinteisessä kirjoitusasussa",
--           nimiavaruus = 0           
      }
      luokat.asetaAakkostajalla2{
          kieli = "cmn",
          luokka = luokka .. " yksinkertaistetussa kirjoitusasussa",
--           nimiavaruus = 0          
      }

   end
end

--- Pääohjelma.
-- @param frame: Jos kutsu sisältää parametrin |frame=parent|, käytetään
--     kutsuvan mallineen parametreja moduulin parametrien sijasta
--     Framen täytyy sisältää joko yks- tai per- parametrin tai ei kumpaakaan;
--     lat-parametri on valinnainen; 1. nimetön on valinnainen sanarivillä
--     näytettävä teksti sivun otsikon sijaan. Arg sanaluokka kertoo minkä
--     sanaluokan mallineesta tätä kutsutaan.
function p.Sanarivi(frame)
   local sanalk = frame.args.sanaluokka
      
   if frame.args.frame == 'parent' then
      frame = frame:getParent()
   end

   local args = apu.poista_tyhjat(frame.args)
   local args_num = apu.numeroidut_parametrit(args, {"lat"})

   -- Sanarivillä näkyvä sana.
   local title = frame.args[2] or mw.title.getCurrentTitle().text

   assert(frame.args[1] == "cmn", "Väärä kieli!")

   local yks = args.yks
   local per = args.per
   local asu = args.asu
   local lat = args_num.lat

   if per and yks then 
       error('Virheeliset parametrit: ei voi antaa molempia per ja yks')
   end

   if not yks and not per and asu == "yks+per" then
      lisaaLuokka("sana", "yks+per")      
      lisaaLuokka(sanalk, "yks+per")
      return muotoileSanarivi(title, lat, "yks+per", nil), luokat

   elseif not yks and not per and (not asu or asu == "?") then
      lisaaLuokka("sana", nil)      
      lisaaLuokka(sanalk, nil)
      luokat.asetaAakkostajalla("cmn", "Mandariinikiinan sanat, joiden kirjoitusasua ei ole merkitty")
      return muotoileSanarivi(title, lat, nil, nil), luokat
			      
   elseif yks or asu == "per" then
      lisaaLuokka("sana", "per")      
      lisaaLuokka(sanalk, "per")
      return muotoileSanarivi(title, lat, "per", yks), luokat
      
   elseif per or asu == "yks" then
      lisaaLuokka("sana", "yks")      
      lisaaLuokka(sanalk, "yks")
      return muotoileSanarivi(title, lat, "yks", per), luokat

   else
       error('Virheeliset parametrit')
   end

end


return p