Moduuli:sanarivi/cmn/hiekkalaatikko
< Moduuli:sanarivi | cmn
Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:sanarivi/cmn/hiekkalaatikko/ohje
--- 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 = "''sanan yksinkertaistettu ja perinteinen kirjoitusasu''"
elseif asu == "yks" then
asuteksti = "''sanan yksinkertaistettu kirjoitusasu''"
per = toinen
kirj = "Hans"
elseif asu == "per" then
asuteksti = "''sanan perinteinen kirjoitusasu''"
yks = toinen
kirj = "Hant"
end
return paramtext.muotoile(
ryhma("",
srlib.hakusana(title, "cmn", kirj),
" ",
ryhma("(''pinyin'' ", srlib.linkkiluettelo("cmn-Latn", lat, nil, nil, lisap), ")"),
" ",
ryhma("(",
asuteksti,
"; ",
tai(
ryhma("''sana yksinkertaistetussa kirjoitusasussa'' ", srlib.kielilinkki("cmn", yks), ""),
ryhma("''sana 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