o tawa ijo lipu

Module:Sitelen

tan lipu lipu Wikipesija

Lua error in Module:sona_kipisi at line 671: attempt to concatenate local 'sourceTemplate' (a nil value).

local p = {}

-- ============================
--  DICTIONARIES
-- ============================
local nimi_pu = {
    a="A", akesi="Akesi", ala="Ala", alasa="Alasa", ale="Ale", anpa="Anpa",
    ante="Ante", anu="Anu", awen="Awen",
    e="E", en="En", esun="Esun",
    ijo="Ijo", ike="Ike", ilo="Ilo", insa="Insa",
    jaki="Jaki", jan="Jan", jelo="Jelo", jo="Jo",
    kala="Kala", kalama="Kalama", kama="Kama", kasi="Kasi", ken="Ken",
    kepeken="Kepeken", kili="Kili", kiwen="Kiwen", ko="Ko", kon="Kon",
    kule="Kule", kulupu="Kulupu", kute="Kute",
    la="La", lape="Lape", laso="Laso", lawa="Lawa", len="Len", lete="Lete",
    li="Li", lili="Lili", linja="Linja", lipu="Lipu", loje="Loje",
    lon="Lon", luka="Luka", lukin="Lukin", lupa="Lupa",
    ma="Ma", mama="Mama", mani="Mani", meli="Meli", mi="Mi", mije="Mije",
    moku="Moku", moli="Moli", monsi="Monsi", mu="Mu", mun="Mun",
    musi="Musi", mute="Mute",
    nanpa="Nanpa", nasa="Nasa", nasin="Nasin", nena="Nena",
    ni="Ni", nimi="Nimi", noka="Noka",
    o="O", olin="Olin", ona="Ona", open="Open",
    pakala="Pakala", pali="Pali", palisa="Palisa",
    pan="Pan", pana="Pana", pi="Pi", pilin="Pilin", pimeja="Pimeja",
    pini="Pini", pipi="Pipi", poka="Poka", poki="Poki",
    pona="Pona", pu="Pu",
    sama="Sama", seli="Seli", selo="Selo", seme="Seme", sewi="Sewi",
    sijelo="Sijelo", sike="Sike", sin="Sin", sina="Sina",
    sinpin="Sinpin", sitelen="Sitelen", sona="Sona",
    soweli="Soweli", suli="Suli", suno="Suno", supa="Supa", suwi="Suwi",
    tan="Tan", taso="Taso", tawa="Tawa", telo="Telo",
    tenpo="Tenpo", toki="Toki", tomo="Tomo", tu="Tu",
    unpa="Unpa", uta="Uta", utala="Utala",
    walo="Walo", wan="Wan", waso="Waso", wawa="Wawa",
    weka="Weka", wile="Wile",
}

local nimi_ku = {
    namako="Namako", kin="Kin", oko="Oko", kipisi="Kipisi", leko="Leko",
    monsuta="Monsuta", tonsi="Tonsi", jasima="Jasima",
    kijetesantakalu="Kijetesantakalu", soko="Soko", meso="Meso",
    epiku="Epiku", kokosila="Kokosila", lanpan="Lanpan", ["n"]="N",
    misikeke="Misikeke", ku="Ku",
}

local nimi_weka = {
    apeja="Apeja", iki="Iki", jalan="Jalan", kan="Kan", kapa="Kapa",
    kapesi="Kapesi", majuna="Majuna", pake="Pake",
    pasila="Pasila", pata="Pata", peta="Peta", po="Po",
    powe="Powe", san="San", tuli="Tuli", su="Su", unu="Unu"
}

-- ============================
-- BOOLEAN HELPERS
-- ============================
local function isFalse(v)
    if not v then return false end
    v = mw.ustring.lower(v)
    return (v == "false" or v == "0" or v == "no" or v == "off")
end

local function isTrue(v)
    if not v then return false end
    v = mw.ustring.lower(v)
    return (v == "true" or v == "1" or v == "yes" or v == "on")
end

-- ============================
-- FILENAME SELECTOR
-- ============================
local function filename_for(word, usePona)
    if word:match("^%u+$") then
        local cap = word:sub(1,1) .. word:sub(2):lower()
        return "File:" .. cap .. " - sitelen sitelen sound symbol.svg"
    end

    local lower = mw.ustring.lower(word)

    if not usePona then
        local cap = lower:sub(1,1):upper() .. lower:sub(2)
        return "File:" .. cap .. " - sitelen sitelen word symbol.svg"
    end

    if nimi_pu[lower] then
        return "File:" .. nimi_pu[lower] .. " - sitelen pona in Sonja Lang's handwriting.svg"
    elseif nimi_ku[lower] then
        return "File:" .. nimi_ku[lower] .. " - linja pona.svg"
    elseif nimi_weka[lower] then
        return "File:" .. nimi_weka[lower] .. " - linja pona.svg"
    else
        return "File:" .. word .. " (unknown).svg"
    end
end

-- ============================
-- MAIN
-- ============================
function p.main(frame)
    local invokeArgs = frame.args
    local parent = frame:getParent()
    local tplArgs = parent and parent.args or {}

    local ponaParam   = invokeArgs.pona   or tplArgs.pona
    local inlineParam = invokeArgs.inline or tplArgs.inline

    local usePona = not isFalse(ponaParam)
    local inline  = isTrue(inlineParam)

    -- gather actual words only
    local words = {}
    local i = 1
    while invokeArgs[i] ~= nil do
        local v = invokeArgs[i]
        if v ~= nil and v ~= "" and not v:match("^%S+=%S+$") then
            table.insert(words, v)
        end
        i = i + 1
    end

    local files = {}
    for _, w in ipairs(words) do
        table.insert(files, filename_for(w, usePona))
    end

    -- INLINE MODE
    if inline then
        local out = {}
        for _, fn in ipairs(files) do
            table.insert(out,
                string.format('[[%s|25x25px|class=skin-invert-image]]', fn)
            )
        end
        return table.concat(out, " ")
    end

    -- GALLERY MODE
    local gallery = {}
    for _, fn in ipairs(files) do
        table.insert(gallery, fn .. '|class=skin-invert-image')
    end

    return '<gallery widths="30" heights="30">\n'
        .. table.concat(gallery, "\n")
        .. '\n</gallery>'
end

return p