Moduuli:sanarivi/ja

Wikisanakirjasta

Japanin sanoille voi käyttää seuraavia sanariviparametreja:

  • hira: Sanan hiraganakirjoitusasu (kun artikkelin kirjoitusasu on jotakin muuta)
  • kata: Sanan katakanakirjoitusasu (kun artikkelin kirjoitusasu on jotakin muuta ja katakanakirjoitusasulle on syytä tehdä oma artikkeli)
  • hrkt: Sanan kirjoitusasu hiraganalla ja katakanalla. Tätä käytetään kun artikkelin sana sisältää kanjeja ja katakanaa. Kanjit kirjoitetaan silloin auki hiraganalla. TODO: parametrin uudelleennimeäminen kana:ksi.
  • lat: Sana romajilla.
  • rom: Turha synonyymi parametrille lat.
  • taiv: Taivutustyyppi adjektiiveille (na tai i) ja verbeille.

local p = {}

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

function p.muotoileSanarivi(PAGENAME, hira, kata, hrkt, rom, taiv)
	local muotoilu = paramtext:new()
    local lang = "ja"
    local kirj = "Jpan"
    local rom_viittaus

    -- Sivu johon romaji-artikkeli linkittää
    if PAGENAME ~= hira and PAGENAME ~= kata then
        rom_viittaus = hira or kata
    else
        rom_viittaus = PAGENAME
    end

    -- Lisäparametrit kielilinkeille.
    lp_hira = { 
        ["elem"]         = "b",
        ["kuvaus"]       = "rm/ja-hiragana",
        ["kuvaus-param"] = { [8] = rom } }
    lp_kata = { 
        ["elem"]         = "b",
        ["kuvaus"]       = "rm/ja-katakana",
        ["kuvaus-param"] = { [8] = rom } }        
    lp_hrkt = { 
        ["elem"]         = "b",
        ["kuvaus"]       = "rm/ja-hiragana",
        ["kuvaus-param"] = { [8] = rom } }        
    lp_rom  = { 
        ["elem"]         = "b",
        ["class"]        = "linkki sanarivi-lat",
        ["kuvaus"]       = "tr/ja-transkriptio",
        ["kuvaus-param"] = { [4] = rom_viittaus } }                                                                               

    muotoilu:prosessoi(ryhma("",
                             srlib.hakusana(PAGENAME, lang, kirj), " ",
                             ryhma("(",
                                   ryhma("''", var( taiv ), "-taivutus''"), 1, "; ",                            
                                   ryhma("''hiragana'' ", srlib.kielilinkki("ja-Hira", hira, nil, lp_hira), ""), ", ",
                                   ryhma("''katakana'' ", srlib.kielilinkki("ja-Kana", kata, nil, lp_kata), ""), ", ",
                                   ryhma("''hiragana ja katakana'' ", srlib.kielilinkki("ja-Hrkt", hrkt, nil, lp_hrkt), ""), ", ",
                                   ryhma("''rōmaji'' ",   srlib.kielilinkki("ja-Latn", rom,  nil, lp_rom), ""), ")"), ""))
                                   
    return tostring(muotoilu), luokat    
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 kata- tai hira- parametrin tai ei kumpaakaan;
--     rom-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

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

    -- Sanarivillä näkyvä sana.
    local PAGENAME = apu.ensimmainen_ei_tyhja{ frame.args[2], mw.title.getCurrentTitle().text }
    local rom = frame.args.rom or frame.args.lat
    local hira = frame.args.hira
    local kata = frame.args.kata
    local hrkt = frame.args.hrkt
    local taiv = frame.args.taiv

	-- Jos artikkelissa ei ole romaji-merkintää, laitetaan huomiota kapaaviin.
    if not rom then
        luokat.asetaAakkostajalla("ja", "Japanin sana-artikkelit, joista puuttuu romaji-merkintä")
    end
    



    -- Artikkelit, joiden nimessä on pelkkää hiraganaa, laitetaan hiraganaluokkaan.
    if mw.ustring.find(PAGENAME, "^[぀-ゟ]+$") then
        luokat.asetaAakkostajalla("ja", "Japanin lemmat — hiragana")
        
    -- Jos artikkelista puuttuu kirjoitusasu hiraganalla, laitetaan huomiota kaipaaviin.
    elseif not hira then
        luokat.asetaAakkostajalla("ja", "Japanin sana-artikkelit, joista puuttuu hiragana-merkintä")
    end
    
    -- Artikkelit, joiden nimessä on pelkkää katakanaa, laitetaan katakanaluokkaan.
    if mw.ustring.find(PAGENAME, "^[゠-ヿ]+$") then
        luokat.asetaAakkostajalla("ja", "Japanin lemmat — katakana")
    end

	-- Pääluokkiin luokitus. Poistetaan pelkästään tarkkeet. Ei aakkosteta muuten.
    luokat.asetaAakkostajalla("ja", luokat.kielenLuokka("ja", "sanat"))   
    luokat.asetaAakkostajalla("ja", luokat.kielenLuokka("ja", luokat.luokkaMonikko(sanalk)))

    return p.muotoileSanarivi(PAGENAME, hira, kata, hrkt, rom, taiv), luokat
end



return p