Прејди на содржината

Модул:el-c-conj

Од Викиречник

el-cases-conj

el-cases-conj е шаблон за прикажување на деклинацијата на грчките придавки. Шаблонот ја повикува Lua-модулот el-c-conj, кој врз основа на придавката и дополнителниот параметар ја генерира деклинацијата во еднина и множина, за машки, женски и среден род.

Основна употреба

На страницата на придавката се користи како :

{{el-cases-conj|{{PAGENAME}}|svr}

каде:

{{PAGENAME}} автоматски го внесува името на тековната страница, односно придавката што треба да се деклинира. вториот параметар svr ја одредува варијантата на женскиот род кај шемите каде што е потребно.

Параметарот svr може да биде:

празно / η / α / αη

Во зависност од тоа на која буква завршува придавката во номинатив женски род еднина, се избира соодветната вредност α или η. Ако се остави овој параметар празен се подразбира дека придавката во номинатив женски род еднина завршува на η. Параметарот αη се користи ако сакаме да ги имаме и двете форми во исто време.

Што генерира шаблонот

Шаблонот прикажува табела со следната структура како во примерот за придавката δίκαιος

{{el-cases-conj|δίκαιος|αη}}

Еднина Множина
Машки род Женски род Среден Род Машки род Женски род Среден Род
Номинатив δίκαιος δίκαια / δίκαιη δίκαιο δίκαιοι δίκαιες δίκαια
Генитив δίκαιου δίκαιας / δίκαιης δίκαιου δίκαιων δίκαιων δίκαιων
Акузатив δίκαιο δίκαια / δίκαιη δίκαιο δίκαιους δίκαιες δίκαια
Вокатив δίκαιε δίκαια / δίκαιη δίκαιο δίκαιοι δίκαιες δίκαια


За секој падеж модулот el-c-conj се повикува со посебна функција:

|-

|Номинатив ||[[]]||η||ο||οι||ες||α

|-

|Генитив ||ου||ης||ου||ων||ων||ων

|-

|Акузатив ||ο||η||ο||ους||ες||α

|-

|Вокатив ||ε||η||ο||οι||ες||α

Функциите ги земаат придавката и параметарот svr, ја одредуваат соодветната деклинациска шема и ги создаваат формите за сите три рода и двата броја.

Параметарот svr svr = α

Вредноста α се користи кога женскиот род се образува со -α.

На пример, кај шемите каде што машката форма завршува на -ός, скриптата го образува женскиот род со:

основа + ά

а генитивот еднина со:

основа + άς

Кај шемата на -ος, женскиот род е:

основа + α

а генитивот:

основа + ας

Ова е директно зададено во логиката на модулот.

svr = η

Вредноста η се користи кога женскиот род се образува со -η.

Кај придавките на -ος, тоа значи:

машки: основа + ος женски: основа + η среден: основа + ο

а во генитив женскиот род завршува на -ης.

Кај стандардната шема, доколку svr не е α, скриптата исто така ја избира варијантата со η.

svr = αη

Вредноста αη се користи кога придавката има две можни форми на женскиот род.

Кај придавките на -ος, скриптата тогаш прикажува:

женски род: основа + α / основа + η

и во генитив:

основа + ας / основа + ης

На пример, логиката во модулот експлицитно создава две форми разделени со /.

Празен параметар

Ако вториот параметар не е наведен, тој се третира како празен:

{{el-cases-conj|{{PAGENAME}}}}'''

Во шемите каде што се очекува избор помеѓу α и η, празната вредност води кон стандардната варијанта со η.

Препознавање на придавките

Модулот не бара рачно да се зададе деклинациската шема. Тој ја анализира завршетната форма на придавката и врз основа на неа ја избира соодветната шема.

Поддржани се, меѓу другото, следните завршетоци:

-ικός -ύς -ός -ος -ων -ών -ως -ής -ης -άρης

Доколку придавката не одговара на некоја од специјалните шеми, се користи основната стандардна шема.

Придавки на -ικός

За придавките на -ικός скриптата ги создава формите со:

-ικός -ική -ικό

а во множина:

-ικοί -ικές -ικά

Постои и посебна форма за вокатив машки род -ικέ.

Придавки на -ύς

За придавките на -ύς се користи посебна деклинациска функција.

Примерот вграден во скриптата е:

μακρύς → μακριά → μακρύ

Соодветно се генерираат и множинските форми.

Придавки и партиципи на -ων / -ών

За -ων и -ών постои посебна логика.

На пример, скриптата го наведува:

παρών → παρόν → παρούσα

и:

επείγων → επείγον → επείγουσα

При овие форми модулот води сметка и за позицијата на акцентот, особено во генитив множина.

Придавки на -ής / -ης

Овие придавки се поделени на два основни типа во зависност од тоа дали основата има акцент.

Скриптата ги наведува примерите:

ακριβής → ακριβές → ακριβείς → ακριβή

и:

ουσιώδης → ουσιώδες → ουσιώδεις → ουσιώδη

Проверката дали основата има акцент се врши автоматски.

Придавки на -άρης

За -άρης постои посебна шема, со форми како:

-άρης -άρα -άρικο

и множински форми:

-άρηδες -άρες -άρικα



Придавки на -ως

Придавките на -ως во моменталната имплементација ја задржуваат истата форма во сите родови, падежи и броеви.

Повик директно кон Lua-модулот

Иако вообичаениот начин на користење е преку:

{{el-cases-conj|{{PAGENAME}}|svr}}

можно е функциите на модулот да се повикаат и директно преку #invoke.

На пример:

{{#invoke:el-c-conj|Nominativ_case|{{{1}}}|{{{2|}}}}}

Постојат четири јавни функции:

Nominativ_case Genitiv_case Acusativ_case Vocativ_case

Секоја функција ја чита првата и втората вредност од аргументите, ги отстранува непотребните празни места и ја повикува главната логика за деклинација.

Тестирање

За проверка на работата на деклинацискиот модул постојат и тест-модули.

Тестовите може да се повикаат од било која Викиречник страница со:

{{#invoke:TestAdjectives|run_tests}}

All 76 test cases passed successfully!

или:

{{#invoke:el-c-conj-tests|run_tests}}


Овие повици се наменети за развој и проверка на правилноста на деклинацијата.

При промена на логиката на el-c-conj, препорачливо е да се извршат тестовите за да се провери дали промената не влијаела врз веќе поддржаните типови на придавки.

Пример на страница

На страницата на конкретна придавка може да се постави:

{{el-cases-conj|{{PAGENAME}}|η}}

или, ако придавката има женска форма на -α:

{{el-cases-conj|{{PAGENAME}}|α}}

Ако се дозволени и двете варијанти:

{{el-cases-conj|{{PAGENAME}}|αη}}

Ако не е потребен избор:

{{el-cases-conj|{{PAGENAME}}}} Забелешка за развој

Деклинациските правила се имплементирани во Lua-модулот el-c-conj. Главната функција прво ја одредува основата и завршетокот на зборот, а потоа избира соодветна деклинациска шема.

При додавање нова деклинациска шема, потребно е:

да се додаде препознавање на соодветниот завршеток; да се дефинираат формите за сите четири падежи; за секој падеж да се зададат машки, женски и среден род во еднина и множина; да се додадат соодветни тестови; да се извршат тестовите преку еден од тест-модулите.

На овој начин деклинацискиот систем може постепено да се проширува без да се менува начинот на кој се повикува шаблонот на страниците на придавките.


local export = {}

------------------------------------------------------------
-- Помошни функции
------------------------------------------------------------

-- Отстранување на акцент од грчки збор
local function remove_accent(str)
    return mw.ustring.gsub(str, "[άέήίόύώ]", {
        ["ά"] = "α",
        ["έ"] = "ε",
        ["ή"] = "η",
        ["ί"] = "ι",
        ["ό"] = "ο",
        ["ύ"] = "υ",
        ["ώ"] = "ω"
    })
end


-- Проверка дали зборот/основата има акцент
local function has_accent(str)
    return mw.ustring.find(str, "[άέήίόύώ]") ~= nil
end


-- Одредување на коренот и наставката
local function get_base_and_ending(str)
    local lstr = mw.ustring.len(str)

    -- Наставки од 4 букви
    if lstr >= 4 then
        local ending4 = mw.ustring.sub(str, lstr - 3, lstr)

        if ending4 == "άρης" or ending4 == "ικός" then
            return mw.ustring.sub(str, 1, lstr - 4), ending4
        end
    end

    -- Наставки од 3 букви
    if lstr >= 3 then
        local ending3 = mw.ustring.sub(str, lstr - 2, lstr)

        if ending3 == "αντος" or ending3 == "οντας" then
            return mw.ustring.sub(str, 1, lstr - 3), ending3
        end
    end

    -- Наставки од 2 букви
    if lstr >= 2 then
        local ending2 = mw.ustring.sub(str, lstr - 1, lstr)

        if ending2 == "ής"
            or ending2 == "ης"
            or ending2 == "ός"
            or ending2 == "ος"
            or ending2 == "ων"
            or ending2 == "ών"
            or ending2 == "ύς"
            or ending2 == "ως" then

            return mw.ustring.sub(str, 1, lstr - 2), ending2
        end
    end

    -- Последна буква
    if lstr > 0 then
        return mw.ustring.sub(str, 1, lstr - 1),
               mw.ustring.sub(str, lstr, lstr)
    end

    return str, ""
end


------------------------------------------------------------
-- Придавки / партиципи на -ων / -ών
------------------------------------------------------------

local function get_on_declensions(str, target_case)

    local lstr = mw.ustring.len(str)

    -- Корен без -ων / -ών
    local base_part = mw.ustring.sub(str, 1, lstr - 2)

    -- Дали основната форма завршува на -ών
    local is_oxytone = (mw.ustring.find(str, "ών$") ~= nil)

    --------------------------------------------------------
    -- -ών
    --
    -- пример:
    -- παρών
    -- παρόν
    -- παρούσα
    -- παρόντες
    -- παρούσες
    -- παρόντων
    -- παρουσών
    --------------------------------------------------------

    if is_oxytone then

        local f = {}

        if target_case == "Nom" then

            f.s_m = str
            f.s_f = base_part .. "ούσα"
            f.s_n = base_part .. "όν"

            f.pl_m = base_part .. "όντες"
            f.pl_f = base_part .. "ούσες"
            f.pl_n = base_part .. "όντα"

        elseif target_case == "Gen" then

            f.s_m = base_part .. "όντος"
            f.s_f = base_part .. "ούσας"
            f.s_n = base_part .. "όντος"

            f.pl_m = base_part .. "όντων"
            f.pl_f = base_part .. "ουσών"
            f.pl_n = base_part .. "όντων"

        elseif target_case == "Acu" then

            f.s_m = base_part .. "όντα"
            f.s_f = base_part .. "ούσα"
            f.s_n = base_part .. "όν"

            f.pl_m = base_part .. "όντες"
            f.pl_f = base_part .. "ούσες"
            f.pl_n = base_part .. "όντα"

        elseif target_case == "Voc" then

            f.s_m = str
            f.s_f = base_part .. "ούσα"
            f.s_n = base_part .. "όν"

            f.pl_m = base_part .. "όντες"
            f.pl_f = base_part .. "ούσες"
            f.pl_n = base_part .. "όντα"
        end

        return f
    end


    --------------------------------------------------------
    -- -ων
    --
    -- пример:
    -- επείγων
    -- επείγον
    -- επείγουσα
    -- επείγοντες
    -- επείγουσες
    -- επειγόντων
    -- επειγουσών
    --------------------------------------------------------

    local f = {}

    if target_case == "Nom" then

        f.s_m = str
        f.s_f = base_part .. "ουσα"
        f.s_n = base_part .. "ον"

        f.pl_m = base_part .. "οντες"
        f.pl_f = base_part .. "ουσες"
        f.pl_n = base_part .. "οντα"

    elseif target_case == "Gen" then

        f.s_m = base_part .. "οντος"
        f.s_f = base_part .. "ουσας"
        f.s_n = base_part .. "οντος"

        -- Во генитив множина акцентот е на наставката.
        local base_no_accent = remove_accent(base_part)

        f.pl_m = base_no_accent .. "όντων"
        f.pl_f = base_no_accent .. "ουσών"
        f.pl_n = base_no_accent .. "όντων"

    elseif target_case == "Acu" then

        f.s_m = base_part .. "οντα"
        f.s_f = base_part .. "ουσα"
        f.s_n = base_part .. "ον"

        f.pl_m = base_part .. "οντες"
        f.pl_f = base_part .. "ουσες"
        f.pl_n = base_part .. "οντα"

    elseif target_case == "Voc" then

        f.s_m = str
        f.s_f = base_part .. "ουσα"
        f.s_n = base_part .. "ον"

        f.pl_m = base_part .. "οντες"
        f.pl_f = base_part .. "ουσες"
        f.pl_n = base_part .. "οντα"
    end

    return f
end


------------------------------------------------------------
-- Придавки на -ύς
--
-- пример:
-- μακρύς → μακριά → μακρύ
------------------------------------------------------------

local function get_ys_declensions(base, target_case)

    local decls = {

        Nom = {
            s_m = base .. "ύς",
            s_f = base .. "ιά",
            s_n = base .. "ύ",

            pl_m = base .. "ιοί",
            pl_f = base .. "ιές",
            pl_n = base .. "ιά"
        },

        Gen = {
            s_m = base .. "ιού",
            s_f = base .. "ιάς",
            s_n = base .. "ιού",

            pl_m = base .. "ιών",
            pl_f = base .. "ιών",
            pl_n = base .. "ιών"
        },

        Acu = {
            s_m = base .. "ύ",
            s_f = base .. "ιά",
            s_n = base .. "ύ",

            pl_m = base .. "ιούς",
            pl_f = base .. "ιές",
            pl_n = base .. "ιά"
        },

        Voc = {
            s_m = base .. "ύ",
            s_f = base .. "ιά",
            s_n = base .. "ύ",

            pl_m = base .. "ιοί",
            pl_f = base .. "ιές",
            pl_n = base .. "ιά"
        }
    }

    return decls[target_case]
end


------------------------------------------------------------
-- Главна функција
------------------------------------------------------------

local function get_forms(str, svr, target_case)

    local base, ending = get_base_and_ending(str)
    local f = nil


    --------------------------------------------------------
    -- -ικός
    --------------------------------------------------------

    if ending == "ικός" then

        if target_case == "Nom" then

            f = {
                s_m = base .. "ικός",
                s_f = base .. "ική",
                s_n = base .. "ικό",

                pl_m = base .. "ικοί",
                pl_f = base .. "ικές",
                pl_n = base .. "ικά"
            }

        elseif target_case == "Gen" then

            f = {
                s_m = base .. "ικού",
                s_f = base .. "ικής",
                s_n = base .. "ικού",

                pl_m = base .. "ικών",
                pl_f = base .. "ικών",
                pl_n = base .. "ικών"
            }

        elseif target_case == "Acu" then

            f = {
                s_m = base .. "ικό",
                s_f = base .. "ική",
                s_n = base .. "ικό",

                pl_m = base .. "ικούς",
                pl_f = base .. "ικές",
                pl_n = base .. "ικά"
            }

        elseif target_case == "Voc" then

            f = {
                s_m = base .. "ικέ",
                s_f = base .. "ική",
                s_n = base .. "ικό",

                pl_m = base .. "ικοί",
                pl_f = base .. "ικές",
                pl_n = base .. "ικά"
            }
        end


    --------------------------------------------------------
    -- -ύς
    --------------------------------------------------------

    elseif ending == "ύς" then

        f = get_ys_declensions(base, target_case)


    --------------------------------------------------------
    -- -ός
    --------------------------------------------------------

    elseif ending == "ός" then

        local fem_s =
            (svr == "α")
            and (base .. "ά")
            or (base .. "ή")

        local fem_g_s =
            (svr == "α")
            and (base .. "άς")
            or (base .. "ής")


        if target_case == "Nom" then

            f = {
                s_m = base .. "ός",
                s_f = fem_s,
                s_n = base .. "ό",

                pl_m = base .. "οί",
                pl_f = base .. "ές",
                pl_n = base .. "ά"
            }

        elseif target_case == "Gen" then

            f = {
                s_m = base .. "ού",
                s_f = fem_g_s,
                s_n = base .. "ού",

                pl_m = base .. "ών",
                pl_f = base .. "ών",
                pl_n = base .. "ών"
            }

        elseif target_case == "Acu" then

            f = {
                s_m = base .. "ό",
                s_f = fem_s,
                s_n = base .. "ό",

                pl_m = base .. "ούς",
                pl_f = base .. "ές",
                pl_n = base .. "ά"
            }

        elseif target_case == "Voc" then

            f = {
                s_m = base .. "έ",
                s_f = fem_s,
                s_n = base .. "ό",

                pl_m = base .. "οί",
                pl_f = base .. "ές",
                pl_n = base .. "ά"
            }
        end


    --------------------------------------------------------
    -- -ος
    --------------------------------------------------------

    elseif ending == "ος" then

        local fem_s, fem_g_s

        if svr == "αη" then

            fem_s =
                base .. "α / " .. base .. "η"

            fem_g_s =
                base .. "ας / " .. base .. "ης"

        elseif svr == "α" then

            fem_s = base .. "α"
            fem_g_s = base .. "ας"

        else

            fem_s = base .. "η"
            fem_g_s = base .. "ης"
        end


        if target_case == "Nom" then

            f = {
                s_m = base .. "ος",
                s_f = fem_s,
                s_n = base .. "ο",

                pl_m = base .. "οι",
                pl_f = base .. "ες",
                pl_n = base .. "α"
            }

        elseif target_case == "Gen" then

            f = {
                s_m = base .. "ου",
                s_f = fem_g_s,
                s_n = base .. "ου",

                pl_m = base .. "ων",
                pl_f = base .. "ων",
                pl_n = base .. "ων"
            }

        elseif target_case == "Acu" then

            f = {
                s_m = base .. "ο",
                s_f = fem_s,
                s_n = base .. "ο",

                pl_m = base .. "ους",
                pl_f = base .. "ες",
                pl_n = base .. "α"
            }

        elseif target_case == "Voc" then

            f = {
                s_m = base .. "ε",
                s_f = fem_s,
                s_n = base .. "ο",

                pl_m = base .. "οι",
                pl_f = base .. "ες",
                pl_n = base .. "α"
            }
        end


    --------------------------------------------------------
    -- -ων / -ών
    --------------------------------------------------------

    elseif ending == "ων" or ending == "ών" then

        f = get_on_declensions(str, target_case)


    --------------------------------------------------------
    -- -ως
    --------------------------------------------------------

    elseif ending == "ως" then

        if target_case == "Nom" then

            f = {
                s_m = str,
                s_f = str,
                s_n = str,

                pl_m = str,
                pl_f = str,
                pl_n = str
            }

        elseif target_case == "Gen" then

            f = {
                s_m = str,
                s_f = str,
                s_n = str,

                pl_m = str,
                pl_f = str,
                pl_n = str
            }

        elseif target_case == "Acu" then

            f = {
                s_m = str,
                s_f = str,
                s_n = str,

                pl_m = str,
                pl_f = str,
                pl_n = str
            }

        elseif target_case == "Voc" then

            f = {
                s_m = str,
                s_f = str,
                s_n = str,

                pl_m = str,
                pl_f = str,
                pl_n = str
            }
        end


    --------------------------------------------------------
    -- -ής / -ης
    --
    -- Δύο βασικοί τύποι:
    --
    -- ακριβής → ακριβές → ακριβείς → ακριβή
    --
    -- ουσιώδης → ουσιώδες → ουσιώδεις → ουσιώδη
    --------------------------------------------------------

    elseif ending == "ής" or ending == "ης" then

        local stem_accented = has_accent(base)

        local nom_m_f
        local nom_n

        local nom_pl_m_f
        local nom_pl_n

        local gen_s
        local gen_pl

        local acu_m_f
        local acu_n

        local voc_m_f
        local voc_n


        if stem_accented then

            ------------------------------------------------
            -- ουσιώδης
            ------------------------------------------------

            nom_m_f = base .. "ης"
            nom_n = base .. "ες"

            nom_pl_m_f = base .. "εις"
            nom_pl_n = base .. "η"

            gen_s = base .. "ους"

            -- IMPORTANT:
            -- Preserve the accent of the stem.
            -- Expected by the test:
            -- ουσιώδης → ουσιώδων
            gen_pl = base .. "ων"

            acu_m_f = base .. "η"
            acu_n = base .. "ες"

            voc_m_f = base .. "η"
            voc_n = base .. "ες"

        else

            ------------------------------------------------
            -- ακριβής
            ------------------------------------------------

            nom_m_f = base .. "ής"
            nom_n = base .. "ές"

            nom_pl_m_f = base .. "είς"
            nom_pl_n = base .. "ή"

            gen_s = base .. "ούς"
            gen_pl = base .. "ών"

            acu_m_f = base .. "ή"
            acu_n = base .. "ές"

            voc_m_f = base .. "ή"
            voc_n = base .. "ές"

        end


        if target_case == "Nom" then

            f = {
                s_m = nom_m_f,
                s_f = nom_m_f,
                s_n = nom_n,

                pl_m = nom_pl_m_f,
                pl_f = nom_pl_m_f,
                pl_n = nom_pl_n
            }

        elseif target_case == "Gen" then

            f = {
                s_m = gen_s,
                s_f = gen_s,
                s_n = gen_s,

                pl_m = gen_pl,
                pl_f = gen_pl,
                pl_n = gen_pl
            }

        elseif target_case == "Acu" then

            f = {
                s_m = acu_m_f,
                s_f = acu_m_f,
                s_n = acu_n,

                pl_m = nom_pl_m_f,
                pl_f = nom_pl_m_f,
                pl_n = nom_pl_n
            }

        elseif target_case == "Voc" then

            f = {
                s_m = voc_m_f,
                s_f = voc_m_f,
                s_n = voc_n,

                pl_m = nom_pl_m_f,
                pl_f = nom_pl_m_f,
                pl_n = nom_pl_n
            }
        end


    --------------------------------------------------------
    -- -άρης
    --------------------------------------------------------

    elseif ending == "άρης" then

        if target_case == "Nom" then

            f = {
                s_m = base .. "άρης",
                s_f = base .. "άρα",
                s_n = base .. "άρικο",

                pl_m = base .. "άρηδες",
                pl_f = base .. "άρες",
                pl_n = base .. "άρικα"
            }

        elseif target_case == "Gen" then

            f = {
                s_m = base .. "άρη",
                s_f = base .. "άρας",
                s_n = base .. "άρικου",

                pl_m = base .. "άρηδων",
                pl_f = base .. "άρων",
                pl_n = base .. "άρικων"
            }

        elseif target_case == "Acu" then

            f = {
                s_m = base .. "άρη",
                s_f = base .. "άρα",
                s_n = base .. "άρικο",

                pl_m = base .. "άρηδες",
                pl_f = base .. "άρες",
                pl_n = base .. "άρικα"
            }

        elseif target_case == "Voc" then

            f = {
                s_m = base .. "άρη",
                s_f = base .. "άρα",
                s_n = base .. "άρικο",

                pl_m = base .. "άρηδες",
                pl_f = base .. "άρες",
                pl_n = base .. "άρικα"
            }
        end


    --------------------------------------------------------
    -- Основна стандардна шема
    --------------------------------------------------------

    else

        local fem_s =
            (svr == "α")
            and (base .. "α")
            or (base .. "η")

        local fem_g_s =
            (svr == "α")
            and (base .. "ας")
            or (base .. "ης")


        if target_case == "Nom" then

            f = {
                s_m = str,
                s_f = fem_s,
                s_n = base .. "ο",

                pl_m = base .. "οι",
                pl_f = base .. "ες",
                pl_n = base .. "α"
            }

        elseif target_case == "Gen" then

            f = {
                s_m = base .. "ου",
                s_f = fem_g_s,
                s_n = base .. "ου",

                pl_m = base .. "ων",
                pl_f = base .. "ων",
                pl_n = base .. "ων"
            }

        elseif target_case == "Acu" then

            f = {
                s_m = base .. "ο",
                s_f = fem_s,
                s_n = base .. "ο",

                pl_m = base .. "ους",
                pl_f = base .. "ες",
                pl_n = base .. "α"
            }

        elseif target_case == "Voc" then

            f = {
                s_m = base .. "ε",
                s_f = fem_s,
                s_n = base .. "ο",

                pl_m = base .. "οι",
                pl_f = base .. "ες",
                pl_n = base .. "α"
            }
        end
    end


    --------------------------------------------------------
    -- Безбедносен fallback
    --------------------------------------------------------

    if not f then

        f = {
            s_m = "",
            s_f = "",
            s_n = "",

            pl_m = "",
            pl_f = "",
            pl_n = ""
        }

    end


    --------------------------------------------------------
    -- Излез за Wiktionary
    --------------------------------------------------------

    return string.format(
        "|-\n |'''%s''' ||[[%s]]||[[%s]]||[[%s]]||[[%s]]||[[%s]]||[[%s]]",

        target_case == "Nom" and "Номинатив"
            or target_case == "Gen" and "Генитив"
            or target_case == "Acu" and "Акузатив"
            or "Вокатив",

        f.s_m,
        f.s_f,
        f.s_n,

        f.pl_m,
        f.pl_f,
        f.pl_n
    )
end


------------------------------------------------------------
-- Експортирани функции за Викиречник
------------------------------------------------------------

function export.Nominativ_case(frame)

    local args = frame:getParent().args

    return get_forms(
        mw.text.trim(args[1] or ""),
        mw.text.trim(args[2] or ""),
        "Nom"
    )
end


function export.Genitiv_case(frame)

    local args = frame:getParent().args

    return get_forms(
        mw.text.trim(args[1] or ""),
        mw.text.trim(args[2] or ""),
        "Gen"
    )
end


function export.Acusativ_case(frame)

    local args = frame:getParent().args

    return get_forms(
        mw.text.trim(args[1] or ""),
        mw.text.trim(args[2] or ""),
        "Acu"
    )
end


function export.Vocativ_case(frame)

    local args = frame:getParent().args

    return get_forms(
        mw.text.trim(args[1] or ""),
        mw.text.trim(args[2] or ""),
        "Voc"
    )
end


return export