Moduuli:sanarivi/ja

Kohteesta Wikisanakirja
Siirry navigaatioon Siirry hakuun
Template-info.png
Under construction icon-yellow.svg Tässä ohjeessa kuvataan toiminnallisuutta jonka kehitys on vielä kesken. Sivu on tarkoitettu lähinnä kehityksen apuvälineeksi, ei yleiseen käyttöön.

Japanin sanoille voi käyttää sanarivimallineiden perusparametrien lisäksi seuraavia:

  • 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.
  • 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


    -- Kaikki artikkelit, joihin on merkitty romaji, laitetaan romajiluokkaan sen mukaan aakkostettuna.
    if rom then
        luokat.asetaAakkostajalla("perus", "Japanin lemmat — rōmaji", rom)
    else
        -- Jos artikkelissa ei ole romaji-merkintää, laitetaan huomiota kapaaviin.
        luokat.asetaAakkostajalla("ja", "Japanin sana-artikkelit, joista puuttuu romaji-merkintä")
    end


    -- Kaikki artikkelit, joihin on merkitty hiragana tai jotka on pelkkää hiraganaa, laitetaan hiraganaluokkaan sen mukaan aakkostettuna.
    if mw.ustring.find(PAGENAME, "^[぀-ゟ]+$") then
        luokat.asetaAakkostajalla("ja", "Japanin lemmat — hiragana")
    elseif hira then
        luokat.asetaAakkostajalla("ja", "Japanin lemmat — hiragana", hira)
    elseif not hira then
        -- Jos artikkeli on muuta kuin hiraganaa ja siitä puuttuu kirjoitusasu hiraganalla,
        -- laitetaan huomiota kaipaaviin.
        luokat.asetaAakkostajalla("ja", "Japanin sana-artikkelit, joista puuttuu hiragana-merkintä")
    end


    -- Kaikki artikkelit, joihin on merkitty katakana tai jotka on pelkkää katakanaa, laitetaan katakanaluokkaan sen mukaan aakkostettuna.
    if mw.ustring.find(PAGENAME, "^[゠-ヿ]+$") then
        luokat.asetaAakkostajalla("ja", "Japanin lemmat — katakana")
    elseif kata then
        luokat.asetaAakkostajalla("ja", "Japanin lemmat — katakana", kata)
    end


    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