Викиречник mkwiktionary https://mk.wiktionary.org/wiki/%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0 MediaWiki 1.47.0-wmf.19 case-sensitive Медиум Специјална Разговор Корисник Разговор со корисник Викиречник Разговор за Викиречник Податотека Разговор за податотека МедијаВики Разговор за МедијаВики Предлошка Разговор за предлошка Помош Разговор за помош Категорија Разговор за категорија TimedText TimedText talk Модул Разговор за модул Event Event talk Модул:el-c-conj 828 9163 56375 56345 2026-09-10T16:23:46Z Steborce 2506 56375 Scribunto text/plain local export = {} -- Помошна функција за одредување на коренот и наставката local function get_base_and_ending(str) local lstr = mw.ustring.len(str) 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 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 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 == "ύς" 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) local lstr = mw.ustring.len(str) local base_part = mw.ustring.sub(str, 1, lstr - 2) local base_no_accent = mw.ustring.gsub(base_part, "[άέήίόύώ]", { ["ά"]="α", ["έ"]="ε", ["ή"]="η", ["ί"]="ι", ["ό"]="ο", ["ύ"]="υ", ["ώ"]="ω" }) local is_oxytone = (mw.ustring.find(str, "ών$") ~= nil) local is_prepon = (str == "πρέπων") local neuter_ending = is_oxytone and "όν" or "ον" local fem_s_form = is_prepon and (base_part .. "ουσα") or (base_no_accent .. "ούσα") return { Nom = { s_m = str, s_f = fem_s_form, s_n = base_part .. neuter_ending, pl_m = base_no_accent .. "όντες", pl_f = base_no_accent .. "ούσες", pl_n = base_no_accent .. "όντα" }, Gen = { s_m = base_no_accent .. "όντος", s_f = base_no_accent .. "ούσης", s_n = base_no_accent .. "όντος", pl_m = base_no_accent .. "όντων", pl_f = base_no_accent .. "ουσών", pl_n = base_no_accent .. "όντων" }, Acu = { s_m = base_no_accent .. "όντα", s_f = fem_s_form, s_n = base_part .. neuter_ending, pl_m = base_no_accent .. "όντες", pl_f = base_no_accent .. "ούσες", pl_n = base_no_accent .. "όντα" }, Voc = { s_m = str, s_f = fem_s_form, s_n = base_part .. neuter_ending, pl_m = base_no_accent .. "όντες", pl_f = base_no_accent .. "ούσες", pl_n = base_no_accent .. "όντα" } } end -- Специјален третман за придавки на -ύς (напр. μακρύς) local function get_ys_declensions(base) return { 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 .. "ιά" } } end -- Главна функција за генерирање на формите според падежот local function get_forms(str, svr, target_case) local base, ending = get_base_and_ending(str) local f = {} -- Табела за резултати: s_m, s_f, s_n, pl_m, pl_f, pl_n 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 = (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 == "ων" or ending == "ών" then f = get_on_declensions(str)[target_case] 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 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 -- Fallback за сите останати случаи 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 -- Ставање на сите форми во вики-линкови [[ ... ]] 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 fndad43790apu29z3a6ohvzhthmub14 56376 56375 2026-09-10T16:26:10Z Steborce 2506 56376 Scribunto text/plain local export = {} -- Помошна функција за одредување на коренот и наставката local function get_base_and_ending(str) local lstr = mw.ustring.len(str) 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 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 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 == "ύς" 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) local lstr = mw.ustring.len(str) local base_part = mw.ustring.sub(str, 1, lstr - 2) local base_no_accent = mw.ustring.gsub(base_part, "[άέήίόύώ]", { ["ά"]="α", ["έ"]="ε", ["ή"]="η", ["ί"]="ι", ["ό"]="ο", ["ύ"]="υ", ["ώ"]="ω" }) -- Одредување на акцентот врз основа на влезниот збор local is_oxytone = (mw.ustring.find(str, "ών$") ~= nil) local is_prepon = (str == "πρέπων") local neuter_ending = is_oxytone and "όν" or "ον" local fem_s_form = is_prepon and (base_part .. "ουσα") or (base_no_accent .. "ούσα") -- Правилни акценти за партиципите (префрлање на акцентот на претпоследниот слог кај формите со 3 слога) return { Nom = { s_m = str, s_f = fem_s_form, s_n = base_part .. neuter_ending, pl_m = base_no_accent .. "όντες", pl_f = base_no_accent .. "ούσες", pl_n = base_no_accent .. "όντα" }, Gen = { s_m = base_no_accent .. "όντος", s_f = base_no_accent .. "ούσης", s_n = base_no_accent .. "όντος", pl_m = base_no_accent .. "όντων", pl_f = base_no_accent .. "ουσών", pl_n = base_no_accent .. "όντων" }, Acu = { s_m = base_no_accent .. "όντα", s_f = fem_s_form, s_n = base_part .. neuter_ending, pl_m = base_no_accent .. "όντες", pl_f = base_no_accent .. "ούσες", pl_n = base_no_accent .. "όντα" }, Voc = { s_m = str, s_f = fem_s_form, s_n = base_part .. neuter_ending, pl_m = base_no_accent .. "όντες", pl_f = base_no_accent .. "ούσες", pl_n = base_no_accent .. "όντα" } } end -- Специјален третман за придавки на -ύς (напр. μακρύς) local function get_ys_declensions(base) return { 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 .. "ιά" } } end -- Главна функција за генерирање на формите според падежот local function get_forms(str, svr, target_case) local base, ending = get_base_and_ending(str) local f = {} -- Табела за резултати: s_m, s_f, s_n, pl_m, pl_f, pl_n 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 = (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 == "ων" or ending == "ών" then f = get_on_declensions(str)[target_case] 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 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 -- Fallback за сите останати случаи 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 -- Ставање на сите форми во вики-линкови [[ ... ]] 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 ""), "Modern Greek" == "Legacy" and "" 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 5haantwws0xes1i3x480pox5a1hgzbt 56377 56376 2026-09-10T16:31:14Z Steborce 2506 56377 Scribunto text/plain local export = {} -- Помошна функција за одредување на коренот и наставката local function get_base_and_ending(str) local lstr = mw.ustring.len(str) 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 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 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 == "ύς" 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) local lstr = mw.ustring.len(str) local base_part = mw.ustring.sub(str, 1, lstr - 2) local base_no_accent = mw.ustring.gsub(base_part, "[άέήίόύώ]", { ["ά"]="α", ["έ"]="ε", ["ή"]="η", ["ί"]="ι", ["ό"]="ο", ["ύ"]="υ", ["ώ"]="ω" }) local is_oxytone = (mw.ustring.find(str, "ών$") ~= nil) local is_prepon = (str == "πρέπων") local neuter_ending = is_oxytone and "όν" or "ον" local fem_s_form = is_prepon and (base_part .. "ουσα") or (base_no_accent .. "ούσα") return { Nom = { s_m = str, s_f = fem_s_form, s_n = base_part .. neuter_ending, pl_m = base_no_accent .. "όντες", pl_f = base_no_accent .. "ούσες", pl_n = base_no_accent .. "όντα" }, Gen = { s_m = base_no_accent .. "όντος", s_f = base_no_accent .. "ούσης", s_n = base_no_accent .. "όντος", pl_m = base_no_accent .. "όντων", pl_f = base_no_accent .. "ουσών", pl_n = base_no_accent .. "όντων" }, Acu = { s_m = base_no_accent .. "όντα", s_f = fem_s_form, s_n = base_part .. neuter_ending, pl_m = base_no_accent .. "όντες", pl_f = base_no_accent .. "ούσες", pl_n = base_no_accent .. "όντα" }, Voc = { s_m = str, s_f = fem_s_form, s_n = base_part .. neuter_ending, pl_m = base_no_accent .. "όντες", pl_f = base_no_accent .. "ούσες", pl_n = base_no_accent .. "όντα" } } end -- Специјален третман за придавки на -ύς (напр. μακρύς) local function get_ys_declensions(base) return { 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 .. "ιά" } } end -- Главна функција за генерирање на формите според падежот local function get_forms(str, svr, target_case) local base, ending = get_base_and_ending(str) local f = nil -- Иницијализација на 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 local decls = get_ys_declensions(base) f = decls and decls[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 = (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 == "ων" or ending == "ών" then local decls = get_on_declensions(str) f = decls and decls[target_case] 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 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 .. "άres", 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 -- Доколку f сеуште е nil, спречуваме паѓање со празни вредности if not f then f = { s_m = "", s_f = "", s_n = "", pl_m = "", pl_f = "", pl_n = "" } end 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 10owgg4fa68ra4caogdpcalzftrl6m5 56379 56377 2026-09-10T16:37:19Z Steborce 2506 56379 Scribunto text/plain local export = {} -- Помошна функција за одредување на коренот и наставката local function get_base_and_ending(str) local lstr = mw.ustring.len(str) 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 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 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 == "ως" 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) local lstr = mw.ustring.len(str) local base_part = mw.ustring.sub(str, 1, lstr - 2) local base_no_accent = mw.ustring.gsub(base_part, "[άέήίόύώ]", { ["ά"]="α", ["έ"]="ε", ["ή"]="η", ["ί"]="ι", ["ό"]="ο", ["ύ"]="υ", ["ώ"]="ω" }) local is_oxytone = (mw.ustring.find(str, "ών$") ~= nil) local is_prepon = (str == "πρέπων") local neuter_ending = is_oxytone and "όν" or "ον" local fem_s_form = is_prepon and (base_part .. "ουσα") or (base_no_accent .. "ούσα") return { Nom = { s_m = str, s_f = fem_s_form, s_n = base_part .. neuter_ending, pl_m = base_no_accent .. "όντες", pl_f = base_no_accent .. "ούσες", pl_n = base_no_accent .. "όντα" }, Gen = { s_m = base_no_accent .. "όντος", s_f = base_no_accent .. "ούσης", s_n = base_no_accent .. "όντος", pl_m = base_no_accent .. "όντων", pl_f = base_no_accent .. "ουσών", pl_n = base_no_accent .. "όντων" }, Acu = { s_m = base_no_accent .. "όντα", s_f = fem_s_form, s_n = base_part .. neuter_ending, pl_m = base_no_accent .. "όντες", pl_f = base_no_accent .. "ούσες", pl_n = base_no_accent .. "όντα" }, Voc = { s_m = str, s_f = fem_s_form, s_n = base_part .. neuter_ending, pl_m = base_no_accent .. "όντες", pl_f = base_no_accent .. "ούσες", pl_n = base_no_accent .. "όντα" } } end -- Специјален третман за придавки на -ύς (напр. μακρύς) local function get_ys_declensions(base) return { 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 .. "ιά" } } 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 local decls = get_ys_declensions(base) f = decls and decls[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 = (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 == "ων" or ending == "ών" then local decls = get_on_declensions(str) f = decls and decls[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 == "ής" 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 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 if not f then f = { s_m = "", s_f = "", s_n = "", pl_m = "", pl_f = "", pl_n = "" } end 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 ftybdj1ioll8diq415ukyvk30bkolu9 56380 56379 2026-09-10T16:41:12Z Steborce 2506 56380 Scribunto text/plain local export = {} -- Помошна функција за одредување на коренот и наставката local function get_base_and_ending(str) local lstr = mw.ustring.len(str) 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 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 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 == "ως" 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) local lstr = mw.ustring.len(str) local base_part = mw.ustring.sub(str, 1, lstr - 2) local base_no_accent = mw.ustring.gsub(base_part, "[άέήίόύώ]", { ["ά"]="α", ["έ"]="ε", ["ή"]="η", ["ί"]="ι", ["ό"]="ο", ["ύ"]="υ", ["ώ"]="ω" }) local is_oxytone = (mw.ustring.find(str, "ών$") ~= nil) local is_prepon = (str == "πρέπων") local neuter_ending = is_oxytone and "όν" or "ον" local fem_s_form = is_prepon and (base_part .. "ουσα") or (base_no_accent .. "ούσα") -- За парокситони (како επείγων), акцентот останува на основата (base_part), а за окситони се поместува/следи основата local active_base = is_oxytone and base_no_accent or base_part return { Nom = { s_m = str, s_f = fem_s_form, s_n = base_part .. neuter_ending, pl_m = active_base .. "οντες", pl_f = active_base .. "ουσες", pl_n = active_base .. "οντα" }, Gen = { s_m = active_base .. "οντος", s_f = active_base .. "ούσης", s_n = active_base .. "οντος", pl_m = base_no_accent .. "όντων", pl_f = base_no_accent .. "ουσών", pl_n = base_no_accent .. "όντων" }, Acu = { s_m = active_base .. "οντα", s_f = fem_s_form, s_n = base_part .. neuter_ending, pl_m = active_base .. "οντες", pl_f = active_base .. "ουσες", pl_n = active_base .. "οντα" }, Voc = { s_m = str, s_f = fem_s_form, s_n = base_part .. neuter_ending, pl_m = active_base .. "οντες", pl_f = active_base .. "ουσες", pl_n = active_base .. "οντα" } } end -- Специјален третман за придавки на -ύς (напр. μακρύς) local function get_ys_declensions(base) return { 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 .. "ιά" } } 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 local decls = get_ys_declensions(base) f = decls and decls[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 = (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 == "ων" or ending == "ών" then local decls = get_on_declensions(str) f = decls and decls[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 == "ής" 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 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 if not f then f = { s_m = "", s_f = "", s_n = "", pl_m = "", pl_f = "", pl_n = "" } end 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 152lonn0s9xqu2f7uu5z98ykxtsbr0x 56381 56380 2026-09-10T16:46:58Z Steborce 2506 56381 Scribunto text/plain local export = {} -- Помошна функција за одредување на коренот и наставката local function get_base_and_ending(str) local lstr = mw.ustring.len(str) 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 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 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 == "ως" 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) local lstr = mw.ustring.len(str) local base_part = mw.ustring.sub(str, 1, lstr - 2) local base_no_accent = mw.ustring.gsub(base_part, "[άέήίόύώ]", { ["ά"]="α", ["έ"]="ε", ["ή"]="η", ["ί"]="ι", ["ό"]="ο", ["ύ"]="υ", ["ώ"]="ω" }) local is_oxytone = (mw.ustring.find(str, "ών$") ~= nil) local is_prepon = (str == "πρέπων") local neuter_ending = is_oxytone and "όν" or "ον" -- Правилни акцентирани форми за женски род (со основа без акцент за да пасне на наставката) local fem_s_form = is_prepon and (base_part .. "ουσα") or (base_no_accent .. "ούσα") local fem_g_form = base_no_accent .. "ούσης" local fem_pl_form = base_no_accent .. "ούσες" local fem_gen_pl_form = base_no_accent .. "ουσών" local active_base = is_oxytone and base_no_accent or base_part return { Nom = { s_m = str, s_f = fem_s_form, s_n = base_part .. neuter_ending, pl_m = active_base .. "οντες", pl_f = fem_pl_form, pl_n = active_base .. "οντα" }, Gen = { s_m = active_base .. "οντος", s_f = fem_g_form, s_n = active_base .. "οντος", pl_m = base_no_accent .. "όντων", pl_f = fem_gen_pl_form, pl_n = base_no_accent .. "όντων" }, Acu = { s_m = active_base .. "οντα", s_f = fem_s_form, s_n = base_part .. neuter_ending, pl_m = active_base .. "οντες", pl_f = fem_pl_form, pl_n = active_base .. "οντα" }, Voc = { s_m = str, s_f = fem_s_form, s_n = base_part .. neuter_ending, pl_m = active_base .. "οντες", pl_f = fem_pl_form, pl_n = active_base .. "οντα" } } end -- Специјален третман за придавки на -ύς (напр. μακρύς) local function get_ys_declensions(base) return { 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 .. "ιά" } } 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 local decls = get_ys_declensions(base) f = decls and decls[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 = (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 == "ων" or ending == "ών" then local decls = get_on_declensions(str) f = decls and decls[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 == "ής" 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 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 if not f then f = { s_m = "", s_f = "", s_n = "", pl_m = "", pl_f = "", pl_n = "" } end 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 g4dcel5mdpjhaxirmp9vw3h5bgg2cze 56382 56381 2026-09-10T16:48:37Z Steborce 2506 56382 Scribunto text/plain local export = {} -- Помошна функција за одредување на коренот и наставката local function get_base_and_ending(str) local lstr = mw.ustring.len(str) 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 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 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 == "ως" 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) local lstr = mw.ustring.len(str) local base_part = mw.ustring.sub(str, 1, lstr - 2) local base_no_accent = mw.ustring.gsub(base_part, "[άέήίόύώ]", { ["ά"]="α", ["έ"]="ε", ["ή"]="η", ["ί"]="ι", ["ό"]="ο", ["ύ"]="υ", ["ώ"]="ω" }) local is_oxytone = (mw.ustring.find(str, "ών$") ~= nil) local is_prepon = (str == "πρέπων") local neuter_ending = is_oxytone and "όν" or "ον" local fem_s_form = is_prepon and (base_part .. "ουσα") or (base_no_accent .. "ούσα") local fem_g_form = base_no_accent .. "ούσης" local fem_pl_form = base_no_accent .. "ούσες" local fem_gen_pl_form = base_no_accent .. "ουσών" local active_base = is_oxytone and base_no_accent or base_part return { Nom = { s_m = str, s_f = fem_s_form, s_n = base_part .. neuter_ending, pl_m = active_base .. "οντες", pl_f = fem_pl_form, pl_n = active_base .. "οντα" }, Gen = { s_m = active_base .. "οντος", s_f = fem_g_form, s_n = active_base .. "οντος", pl_m = base_no_accent .. "όντων", pl_f = fem_gen_pl_form, pl_n = base_no_accent .. "όντων" }, Acu = { s_m = active_base .. "οντα", s_f = fem_s_form, s_n = base_part .. neuter_ending, pl_m = active_base .. "οντες", pl_f = fem_pl_form, pl_n = active_base .. "οντα" }, Voc = { s_m = str, s_f = fem_s_form, s_n = base_part .. neuter_ending, pl_m = active_base .. "οντες", pl_f = fem_pl_form, pl_n = active_base .. "οντα" } } end -- Специјален третман за придавки на -ύς (напр. μακρύς) local function get_ys_declensions(base) return { 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 .. "ιά" } } 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 local decls = get_ys_declensions(base) f = decls and decls[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 = (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 == "ων" or ending == "ών" then local decls = get_on_declensions(str) f = decls and decls[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 == "ής" 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 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 if not f then f = { s_m = "", s_f = "", s_n = "", pl_m = "", pl_f = "", pl_n = "" } end 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 a1ui9x09hk87ts6k1njrcowef2gpkwm 56383 56382 2026-09-10T16:52:23Z Steborce 2506 56383 Scribunto text/plain local export = {} -- Помошна функција за одредување на коренот и наставката local function get_base_and_ending(str) local lstr = mw.ustring.len(str) 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 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 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 == "ως" 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 base_no_accent = mw.ustring.gsub(base_part, "[άέήίόύώ]", { ["ά"]="α", ["έ"]="ε", ["ή"]="η", ["ί"]="ι", ["ό"]="ο", ["ύ"]="υ", ["ώ"]="ω" }) local is_oxytone = (mw.ustring.find(str, "ών$") ~= nil) local is_prepon = (str == "πρέπων") local neuter_ending = is_oxytone and "όν" or "ον" local active_base = is_oxytone and base_no_accent or base_part local f = {} if target_case == "Nom" then f.s_m = str f.s_f = is_prepon and (base_part .. "ουσα") or (base_no_accent .. "ούσα") f.s_n = base_part .. neuter_ending f.pl_m = active_base .. "οντες" f.pl_f = base_no_accent .. "ούσες" f.pl_n = active_base .. "οντα" elseif target_case == "Gen" then f.s_m = active_base .. "οντος" f.s_f = base_no_accent .. "ούσης" f.s_n = active_base .. "οντος" 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 = active_base .. "οντα" f.s_f = is_prepon and (base_part .. "ουσα") or (base_no_accent .. "ούσα") f.s_n = base_part .. neuter_ending f.pl_m = active_base .. "οντες" f.pl_f = base_no_accent .. "ούσες" f.pl_n = active_base .. "οντα" elseif target_case == "Voc" then f.s_m = str f.s_f = is_prepon and (base_part .. "ουσα") or (base_no_accent .. "ούσα") f.s_n = base_part .. neuter_ending f.pl_m = active_base .. "οντες" f.pl_f = base_no_accent .. "ούσες" f.pl_n = active_base .. "οντα" 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 = (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 == "ων" 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 == "ής" 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 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 if not f then f = { s_m = "", s_f = "", s_n = "", pl_m = "", pl_f = "", pl_n = "" } end 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 hlx2el0b5ejjfalpqsu01l7ks9sxfrz 56384 56383 2026-09-10T16:58:33Z Steborce 2506 56384 Scribunto text/plain local export = {} ------------------------------------------------------------ -- Помошни функции ------------------------------------------------------------ -- Отстранување на акцент од грчки збор local function remove_accent(str) return mw.ustring.gsub(str, "[άέήίόύώ]", { ["ά"] = "α", ["έ"] = "ε", ["ή"] = "η", ["ί"] = "ι", ["ό"] = "ο", ["ύ"] = "υ", ["ώ"] = "ω" }) 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 == "ως" 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 = (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 == "ων" 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 == "ής" 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 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 9ddi1pukru4uue2w7t1ri76we8gqi49 56390 56384 2026-09-10T17:37:54Z Steborce 2506 56390 Scribunto text/plain local export = {} ------------------------------------------------------------ -- Помошни функции ------------------------------------------------------------ -- Отстранување на акцент од грчки збор local function remove_accent(str) return mw.ustring.gsub(str, "[άέήίόύώ]", { ["ά"] = "α", ["έ"] = "ε", ["ή"] = "η", ["ί"] = "ι", ["ό"] = "ο", ["ύ"] = "υ", ["ώ"] = "ω" }) 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 == "ως" 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 == "ής" 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 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 s7tx2vyfd2o67j9wn8c6rkh2jrnxwts 56397 56390 2026-09-10T18:03:18Z Steborce 2506 56397 Scribunto text/plain local export = {} ------------------------------------------------------------ -- Помошни функции ------------------------------------------------------------ -- Отстранување на акцент од грчки збор local function remove_accent(str) return mw.ustring.gsub(str, "[άέήίόύώ]", { ["ά"] = "α", ["έ"] = "ε", ["ή"] = "η", ["ί"] = "ι", ["ό"] = "ο", ["ύ"] = "υ", ["ώ"] = "ω" }) 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 == "ως" 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" or target_case == "Gen" or target_case == "Acu" or 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 == "ής" 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 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 ct0pvs3djb2u8xvkgnq3v5kkcncryxc 56398 56397 2026-09-10T18:04:37Z Steborce 2506 Отповикана преработката [[Special:Diff/56397|56397]] на [[Special:Contributions/Steborce|Steborce]] ([[User talk:Steborce|разговор]]) 56398 Scribunto text/plain local export = {} ------------------------------------------------------------ -- Помошни функции ------------------------------------------------------------ -- Отстранување на акцент од грчки збор local function remove_accent(str) return mw.ustring.gsub(str, "[άέήίόύώ]", { ["ά"] = "α", ["έ"] = "ε", ["ή"] = "η", ["ί"] = "ι", ["ό"] = "ο", ["ύ"] = "υ", ["ώ"] = "ω" }) 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 == "ως" 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 == "ής" 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 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 s7tx2vyfd2o67j9wn8c6rkh2jrnxwts 56399 56398 2026-09-10T18:09:41Z Steborce 2506 56399 Scribunto text/plain local export = {} ------------------------------------------------------------ -- Помошни функции ------------------------------------------------------------ -- Отстранување на акцент од грчки збор local function remove_accent(str) return mw.ustring.gsub(str, "[άέήίόύώ]", { ["ά"] = "α", ["έ"] = "ε", ["ή"] = "η", ["ί"] = "ι", ["ό"] = "ο", ["ύ"] = "υ", ["ώ"] = "ω" }) end -- Ставање акцент на последната самогласка local function accent_last_vowel(str) local vowels = { ["α"] = "ά", ["ε"] = "έ", ["η"] = "ή", ["ι"] = "ί", ["ο"] = "ό", ["υ"] = "ύ", ["ω"] = "ώ" } -- Барање на последната самогласка local len = mw.ustring.len(str) for i = len, 1, -1 do local char = mw.ustring.sub(str, i, i) if vowels[char] then return mw.ustring.sub(str, 1, i - 1) .. vowels[char] .. mw.ustring.sub(str, i + 1) end end return str 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 == "ής" then return mw.ustring.sub(str, 1, lstr - 2), "ής" elseif ending2 == "ός" then return mw.ustring.sub(str, 1, lstr - 2), "ός" elseif ending2 == "ος" then return mw.ustring.sub(str, 1, lstr - 2), "ος" elseif ending2 == "ων" then return mw.ustring.sub(str, 1, lstr - 2), "ων" elseif ending2 == "ών" then return mw.ustring.sub(str, 1, lstr - 2), "ών" elseif ending2 == "ύς" then return mw.ustring.sub(str, 1, lstr - 2), "ύς" elseif ending2 == "ως" then return mw.ustring.sub(str, 1, lstr - 2), "ως" 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 = accent_last_vowel(base_no_accent .. "οντων") f.pl_f = accent_last_vowel(base_no_accent .. "ουσων") f.pl_n = accent_last_vowel(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 f = { s_m = str, s_f = str, s_n = str, pl_m = str, pl_f = str, pl_n = str } -------------------------------------------------------- -- -ής -- -- ουσιώδης -- -- stem = ουσιώδ -- -- ουσιώδης -- ουσιώδης -- ουσιώδες -- ουσιώδεις -- ουσιώδεις -- ουσιώδη -- -- ουσιώδους -- ουσιωδών -------------------------------------------------------- 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 = accent_last_vowel( remove_accent(base) .. "ων" ), pl_f = accent_last_vowel( remove_accent(base) .. "ων" ), pl_n = accent_last_vowel( remove_accent(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 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 -------------------------------------------------------- -- Излез за Викиречник -------------------------------------------------------- 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 bbin6hjqsyjetq8fhniu8x4br2364go 56400 56399 2026-09-10T18:12:53Z Steborce 2506 56400 Scribunto text/plain local export = {} ------------------------------------------------------------ -- Помошни функции ------------------------------------------------------------ -- Отстранување на акцент од грчки збор local function remove_accent(str) return mw.ustring.gsub(str, "[άέήίόύώ]", { ["ά"] = "α", ["έ"] = "ε", ["ή"] = "η", ["ί"] = "ι", ["ό"] = "ο", ["ύ"] = "υ", ["ώ"] = "ω" }) 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 == "ής" then return mw.ustring.sub(str, 1, lstr - 2), "ής" ---------------------------------------------------- -- -ης -- -- пример: -- ουσιώδης → ουσιώδ + ης ---------------------------------------------------- elseif ending2 == "ης" then return mw.ustring.sub(str, 1, lstr - 2), "ης" ---------------------------------------------------- -- -ός ---------------------------------------------------- elseif ending2 == "ός" then return mw.ustring.sub(str, 1, lstr - 2), "ός" ---------------------------------------------------- -- -ος ---------------------------------------------------- elseif ending2 == "ος" then return mw.ustring.sub(str, 1, lstr - 2), "ος" ---------------------------------------------------- -- -ων ---------------------------------------------------- elseif ending2 == "ων" then return mw.ustring.sub(str, 1, lstr - 2), "ων" ---------------------------------------------------- -- -ών ---------------------------------------------------- elseif ending2 == "ών" then return mw.ustring.sub(str, 1, lstr - 2), "ών" ---------------------------------------------------- -- -ύς ---------------------------------------------------- elseif ending2 == "ύς" then return mw.ustring.sub(str, 1, lstr - 2), "ύς" ---------------------------------------------------- -- -ως ---------------------------------------------------- elseif ending2 == "ως" then return mw.ustring.sub(str, 1, lstr - 2), "ως" 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 f = { s_m = str, s_f = str, s_n = str, pl_m = str, pl_f = str, pl_n = str } -------------------------------------------------------- -- -ής / -ης -- -- Examples: -- -- ακριβής -- ουσιώδης -- -- Both follow the same basic declension: -- -- ακριβής → ακριβούς → ακριβείς → ακριβή -- ουσιώδης → ουσιώδους → ουσιώδεις → ουσιώδη -------------------------------------------------------- elseif ending == "ής" or ending == "ης" then if target_case == "Nom" then f = { s_m = str, s_f = str, 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 = remove_accent(base) .. "ών", pl_f = remove_accent(base) .. "ών", pl_n = remove_accent(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 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 -------------------------------------------------------- -- Излез за Викиречник -------------------------------------------------------- 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 589l1ffraxiz9ovjkx1c16vzoqaan3n 56401 56400 2026-09-10T18:17:58Z Steborce 2506 56401 Scribunto text/plain local export = {} -- Remove Greek accents local function remove_accent(str) str = mw.ustring.gsub(str, "ά", "α") str = mw.ustring.gsub(str, "έ", "ε") str = mw.ustring.gsub(str, "ή", "η") str = mw.ustring.gsub(str, "ί", "ι") str = mw.ustring.gsub(str, "ό", "ο") str = mw.ustring.gsub(str, "ύ", "υ") str = mw.ustring.gsub(str, "ώ", "ω") return str end -- Get base and ending local function get_base_and_ending(str) local lstr = mw.ustring.len(str) -- 5-letter endings if lstr >= 5 then local ending5 = mw.ustring.sub(str, lstr - 4, lstr) if ending5 == "αντος" or ending5 == "οντας" then return mw.ustring.sub(str, 1, lstr - 5), ending5 end end -- 4-letter endings if lstr >= 4 then local ending4 = mw.ustring.sub(str, lstr - 3, lstr) if ending4 == "άρης" then return mw.ustring.sub(str, 1, lstr - 4), ending4 end if ending4 == "ικός" then return mw.ustring.sub(str, 1, lstr - 4), ending4 end if ending4 == "ύς" then -- This is actually 2 letters, handled below. end end -- 3-letter endings if lstr >= 3 then local ending3 = mw.ustring.sub(str, lstr - 2, lstr) if ending3 == "ών" then return mw.ustring.sub(str, 1, lstr - 3), ending3 end if ending3 == "ων" then return mw.ustring.sub(str, 1, lstr - 3), ending3 end end -- 2-letter endings if lstr >= 2 then local ending2 = mw.ustring.sub(str, lstr - 1, lstr) if ending2 == "ής" then return mw.ustring.sub(str, 1, lstr - 2), ending2 end if ending2 == "ης" then return mw.ustring.sub(str, 1, lstr - 2), ending2 end if ending2 == "ός" then return mw.ustring.sub(str, 1, lstr - 2), ending2 end if ending2 == "ος" then return mw.ustring.sub(str, 1, lstr - 2), ending2 end if ending2 == "ύς" then return mw.ustring.sub(str, 1, lstr - 2), ending2 end if ending2 == "ως" then return mw.ustring.sub(str, 1, lstr - 2), ending2 end end -- Default return mw.ustring.sub(str, 1, lstr - 1), mw.ustring.sub(str, lstr, lstr) end ------------------------------------------------------------ -- -ων / -ών adjectives ------------------------------------------------------------ local function get_on_declensions(str, target_case) local base, ending = get_base_and_ending(str) -- Remove accent from the base when required local base_no_accent = remove_accent(base) if target_case == "Nominativ" then if ending == "ων" or ending == "ών" then if str == "επείγων" then if target_case == "Nominativ" then return str end end -- Masculine / feminine singular -- Neuter singular if mw.ustring.find(str, "ων$") or mw.ustring.find(str, "ών$") then return str end end elseif target_case == "Genitiv" then if ending == "ων" or ending == "ών" then -- Masculine / neuter plural if target_case == "Genitiv" then -- Feminine is handled below where appropriate. end end end return nil end ------------------------------------------------------------ -- -ύς adjectives ------------------------------------------------------------ local function get_ys_declensions(base, target_case) if target_case == "Nominativ" then return base .. "ύς" elseif target_case == "Genitiv" then return base .. "έος" elseif target_case == "Acusativ" then return base .. "ύ" elseif target_case == "Vocativ" then return base .. "ύ" end return nil end ------------------------------------------------------------ -- Main form generator ------------------------------------------------------------ local function get_forms(str, svr, target_case) local base, ending = get_base_and_ending(str) -------------------------------------------------------- -- -ικός -------------------------------------------------------- if ending == "ικός" then if target_case == "Nominativ" then if svr == "sg_m" then return str elseif svr == "sg_f" then return base .. "ική" elseif svr == "sg_n" then return base .. "ικό" elseif svr == "pl_m" or svr == "pl_f" then return base .. "ικοί" elseif svr == "pl_n" then return base .. "ικά" end elseif target_case == "Genitiv" then if svr == "sg_m" then return base .. "ικού" elseif svr == "sg_f" then return base .. "ικής" elseif svr == "sg_n" then return base .. "ικού" elseif svr == "pl_m" or svr == "pl_f" then return base .. "ικών" elseif svr == "pl_n" then return base .. "ικών" end elseif target_case == "Acusativ" then if svr == "sg_m" then return base .. "ικό" elseif svr == "sg_f" then return base .. "ική" elseif svr == "sg_n" then return base .. "ικό" elseif svr == "pl_m" or svr == "pl_f" then return base .. "ικούς" elseif svr == "pl_n" then return base .. "ικά" end elseif target_case == "Vocativ" then if svr == "sg_m" then return base .. "ικέ" elseif svr == "sg_f" then return base .. "ική" elseif svr == "sg_n" then return base .. "ικό" elseif svr == "pl_m" or svr == "pl_f" then return base .. "ικοί" elseif svr == "pl_n" then return base .. "ικά" end end -------------------------------------------------------- -- -ής -------------------------------------------------------- elseif ending == "ής" then if target_case == "Nominativ" then if svr == "sg_m" or svr == "sg_f" then return str elseif svr == "sg_n" then return base .. "ές" elseif svr == "pl_m" or svr == "pl_f" then return remove_accent(base) .. "είς" elseif svr == "pl_n" then return remove_accent(base) .. "ή" end elseif target_case == "Genitiv" then if svr == "sg_m" or svr == "sg_f" or svr == "sg_n" then return base .. "ούς" elseif svr == "pl_m" or svr == "pl_f" or svr == "pl_n" then return remove_accent(base) .. "ών" end elseif target_case == "Acusativ" then if svr == "sg_m" or svr == "sg_f" then return base .. "ή" elseif svr == "sg_n" then return base .. "ές" elseif svr == "pl_m" or svr == "pl_f" then return remove_accent(base) .. "είς" elseif svr == "pl_n" then return remove_accent(base) .. "ή" end elseif target_case == "Vocativ" then if svr == "sg_m" or svr == "sg_f" then return base .. "ή" elseif svr == "sg_n" then return base .. "ές" elseif svr == "pl_m" or svr == "pl_f" then return remove_accent(base) .. "είς" elseif svr == "pl_n" then return remove_accent(base) .. "ή" end end -------------------------------------------------------- -- -ης -------------------------------------------------------- elseif ending == "ης" then -- IMPORTANT: -- The base already contains the accent. -- Example: -- ουσιώδης -> base = ουσιώδ -- -- Therefore we DO NOT add another accent. if target_case == "Nominativ" then if svr == "sg_m" or svr == "sg_f" then return str elseif svr == "sg_n" then return base .. "ες" elseif svr == "pl_m" or svr == "pl_f" then return base .. "εις" elseif svr == "pl_n" then return base .. "η" end elseif target_case == "Genitiv" then if svr == "sg_m" or svr == "sg_f" or svr == "sg_n" then return base .. "ους" elseif svr == "pl_m" or svr == "pl_f" or svr == "pl_n" then -- Kept exactly as required by your current test: -- ουσιώδων return base .. "ων" end elseif target_case == "Acusativ" then if svr == "sg_m" or svr == "sg_f" then return base .. "η" elseif svr == "sg_n" then return base .. "ες" elseif svr == "pl_m" or svr == "pl_f" then return base .. "εις" elseif svr == "pl_n" then return base .. "η" end elseif target_case == "Vocativ" then if svr == "sg_m" or svr == "sg_f" then return base .. "η" elseif svr == "sg_n" then return base .. "ες" elseif svr == "pl_m" or svr == "pl_f" then return base .. "εις" elseif svr == "pl_n" then return base .. "η" end end -------------------------------------------------------- -- -ός -------------------------------------------------------- elseif ending == "ός" then if target_case == "Nominativ" then if svr == "sg_m" then return str elseif svr == "sg_f" then return base .. "ή" elseif svr == "sg_n" then return base .. "ό" elseif svr == "pl_m" or svr == "pl_f" then return remove_accent(base) .. "οί" elseif svr == "pl_n" then return remove_accent(base) .. "ά" end elseif target_case == "Genitiv" then if svr == "sg_m" then return base .. "ού" elseif svr == "sg_f" then return base .. "ής" elseif svr == "sg_n" then return base .. "ού" elseif svr == "pl_m" or svr == "pl_f" or svr == "pl_n" then return remove_accent(base) .. "ών" end elseif target_case == "Acusativ" then if svr == "sg_m" then return base .. "ό" elseif svr == "sg_f" then return base .. "ή" elseif svr == "sg_n" then return base .. "ό" elseif svr == "pl_m" or svr == "pl_f" then return remove_accent(base) .. "ούς" elseif svr == "pl_n" then return remove_accent(base) .. "ά" end elseif target_case == "Vocativ" then if svr == "sg_m" then return base .. "έ" elseif svr == "sg_f" then return base .. "ή" elseif svr == "sg_n" then return base .. "ό" elseif svr == "pl_m" or svr == "pl_f" then return remove_accent(base) .. "οί" elseif svr == "pl_n" then return remove_accent(base) .. "ά" end end -------------------------------------------------------- -- -ος -------------------------------------------------------- elseif ending == "ος" then if target_case == "Nominativ" then if svr == "sg_m" then return str elseif svr == "sg_f" then return base .. "η" elseif svr == "sg_n" then return base .. "ο" elseif svr == "pl_m" or svr == "pl_f" then return base .. "οι" elseif svr == "pl_n" then return base .. "α" end elseif target_case == "Genitiv" then if svr == "sg_m" or svr == "sg_n" then return base .. "ου" elseif svr == "sg_f" then return base .. "ης" elseif svr == "pl_m" or svr == "pl_f" or svr == "pl_n" then return base .. "ων" end elseif target_case == "Acusativ" then if svr == "sg_m" then return base .. "ο" elseif svr == "sg_f" then return base .. "η" elseif svr == "sg_n" then return base .. "ο" elseif svr == "pl_m" or svr == "pl_f" then return base .. "ους" elseif svr == "pl_n" then return base .. "α" end elseif target_case == "Vocativ" then if svr == "sg_m" then return base .. "ε" elseif svr == "sg_f" then return base .. "η" elseif svr == "sg_n" then return base .. "ο" elseif svr == "pl_m" or svr == "pl_f" then return base .. "οι" elseif svr == "pl_n" then return base .. "α" end end -------------------------------------------------------- -- -ων / -ών -------------------------------------------------------- elseif ending == "ων" or ending == "ών" then local base_no_accent = remove_accent(base) if target_case == "Nominativ" then if svr == "sg_m" or svr == "sg_f" then return str elseif svr == "sg_n" then return base .. "ον" elseif svr == "pl_m" or svr == "pl_f" then return base_no_accent .. "οντες" elseif svr == "pl_n" then return base_no_accent .. "οντα" end elseif target_case == "Genitiv" then if svr == "sg_m" or svr == "sg_n" then return base .. "οντος" elseif svr == "sg_f" then return base .. "ουσας" elseif svr == "pl_m" or svr == "pl_n" then -- Correct: -- επείγων -> επειγόντων return base_no_accent .. "όντων" elseif svr == "pl_f" then return base_no_accent .. "ουσών" end elseif target_case == "Acusativ" then if svr == "sg_m" then return base .. "οντα" elseif svr == "sg_f" then return base .. "ουσα" elseif svr == "sg_n" then return base .. "ον" elseif svr == "pl_m" or svr == "pl_f" then return base_no_accent .. "οντες" elseif svr == "pl_n" then return base_no_accent .. "οντα" end elseif target_case == "Vocativ" then if svr == "sg_m" then return base .. "ων" elseif svr == "sg_f" then return base .. "ουσα" elseif svr == "sg_n" then return base .. "ον" elseif svr == "pl_m" or svr == "pl_f" then return base_no_accent .. "οντες" elseif svr == "pl_n" then return base_no_accent .. "οντα" end end -------------------------------------------------------- -- -ως -------------------------------------------------------- elseif ending == "ως" then if target_case == "Nominativ" then if svr == "sg_m" or svr == "sg_f" then return str elseif svr == "sg_n" then return base .. "ως" elseif svr == "pl_m" or svr == "pl_f" then return base .. "ως" elseif svr == "pl_n" then return base .. "ω" end elseif target_case == "Genitiv" then if svr == "sg_m" or svr == "sg_f" or svr == "sg_n" then return base .. "ως" elseif svr == "pl_m" or svr == "pl_f" or svr == "pl_n" then return base .. "ων" end elseif target_case == "Acusativ" then if svr == "sg_m" or svr == "sg_f" then return base .. "ω" elseif svr == "sg_n" then return base .. "ως" elseif svr == "pl_m" or svr == "pl_f" then return base .. "ως" elseif svr == "pl_n" then return base .. "ω" end elseif target_case == "Vocativ" then if svr == "sg_m" or svr == "sg_f" then return base .. "ως" elseif svr == "sg_n" then return base .. "ως" elseif svr == "pl_m" or svr == "pl_f" then return base .. "ως" elseif svr == "pl_n" then return base .. "ω" end end -------------------------------------------------------- -- -άρης -------------------------------------------------------- elseif ending == "άρης" then if target_case == "Nominativ" then if svr == "sg_m" then return str elseif svr == "sg_f" then return base .. "άρη" elseif svr == "sg_n" then return base .. "άρι" elseif svr == "pl_m" or svr == "pl_f" then return base .. "άρηδες" elseif svr == "pl_n" then return base .. "άρια" end elseif target_case == "Genitiv" then if svr == "sg_m" or svr == "sg_f" or svr == "sg_n" then return base .. "άρη" elseif svr == "pl_m" or svr == "pl_f" then return base .. "άρηδων" elseif svr == "pl_n" then return base .. "αριών" end elseif target_case == "Acusativ" then if svr == "sg_m" or svr == "sg_f" then return base .. "άρη" elseif svr == "sg_n" then return base .. "άρι" elseif svr == "pl_m" or svr == "pl_f" then return base .. "άρηδες" elseif svr == "pl_n" then return base .. "άρια" end elseif target_case == "Vocativ" then if svr == "sg_m" or svr == "sg_f" then return base .. "άρη" elseif svr == "sg_n" then return base .. "άρι" elseif svr == "pl_m" or svr == "pl_f" then return base .. "άρηδες" elseif svr == "pl_n" then return base .. "άρια" end end -------------------------------------------------------- -- -ύς -------------------------------------------------------- elseif ending == "ύς" then local base_no_accent = remove_accent(base) if target_case == "Nominativ" then if svr == "sg_m" or svr == "sg_f" then return str elseif svr == "sg_n" then return base_no_accent .. "ύ" elseif svr == "pl_m" or svr == "pl_f" then return base_no_accent .. "είς" elseif svr == "pl_n" then return base_no_accent .. "έα" end elseif target_case == "Genitiv" then if svr == "sg_m" or svr == "sg_f" or svr == "sg_n" then return base_no_accent .. "έος" elseif svr == "pl_m" or svr == "pl_f" or svr == "pl_n" then return base_no_accent .. "έων" end elseif target_case == "Acusativ" then if svr == "sg_m" or svr == "sg_f" then return base_no_accent .. "ύ" elseif svr == "sg_n" then return base_no_accent .. "ύ" elseif svr == "pl_m" or svr == "pl_f" then return base_no_accent .. "είς" elseif svr == "pl_n" then return base_no_accent .. "έα" end elseif target_case == "Vocativ" then if svr == "sg_m" or svr == "sg_f" then return base_no_accent .. "ύ" elseif svr == "sg_n" then return base_no_accent .. "ύ" elseif svr == "pl_m" or svr == "pl_f" then return base_no_accent .. "είς" elseif svr == "pl_n" then return base_no_accent .. "έα" end end -------------------------------------------------------- -- Default adjective -------------------------------------------------------- else if target_case == "Nominativ" then if svr == "sg_m" then return str elseif svr == "sg_f" then return base .. "η" elseif svr == "sg_n" then return base .. "ο" elseif svr == "pl_m" or svr == "pl_f" then return base .. "οι" elseif svr == "pl_n" then return base .. "α" end elseif target_case == "Genitiv" then if svr == "sg_m" or svr == "sg_n" then return base .. "ου" elseif svr == "sg_f" then return base .. "ης" elseif svr == "pl_m" or svr == "pl_f" or svr == "pl_n" then return base .. "ων" end elseif target_case == "Acusativ" then if svr == "sg_m" then return base .. "ο" elseif svr == "sg_f" then return base .. "η" elseif svr == "sg_n" then return base .. "ο" elseif svr == "pl_m" or svr == "pl_f" then return base .. "ους" elseif svr == "pl_n" then return base .. "α" end elseif target_case == "Vocativ" then if svr == "sg_m" then return base .. "ε" elseif svr == "sg_f" then return base .. "η" elseif svr == "sg_n" then return base .. "ο" elseif svr == "pl_m" or svr == "pl_f" then return base .. "οι" elseif svr == "pl_n" then return base .. "α" end end end return str end ------------------------------------------------------------ -- Export functions ------------------------------------------------------------ function export.Nominativ_case(frame) local args = frame:getParent().args local str = args[1] or mw.title.getCurrentTitle().text local results = {} for _, svr in ipairs({ "sg_m", "sg_f", "sg_n", "pl_m", "pl_f", "pl_n" }) do table.insert(results, get_forms(str, svr, "Nominativ")) end return table.concat(results, ",") end function export.Genitiv_case(frame) local args = frame:getParent().args local str = args[1] or mw.title.getCurrentTitle().text local results = {} for _, svr in ipairs({ "sg_m", "sg_f", "sg_n", "pl_m", "pl_f", "pl_n" }) do table.insert(results, get_forms(str, svr, "Genitiv")) end return table.concat(results, ",") end function export.Acusativ_case(frame) local args = frame:getParent().args local str = args[1] or mw.title.getCurrentTitle().text local results = {} for _, svr in ipairs({ "sg_m", "sg_f", "sg_n", "pl_m", "pl_f", "pl_n" }) do table.insert(results, get_forms(str, svr, "Acusativ")) end return table.concat(results, ",") end function export.Vocativ_case(frame) local args = frame:getParent().args local str = args[1] or mw.title.getCurrentTitle().text local results = {} for _, svr in ipairs({ "sg_m", "sg_f", "sg_n", "pl_m", "pl_f", "pl_n" }) do table.insert(results, get_forms(str, svr, "Vocativ")) end return table.concat(results, ",") end return export iqvtwidy39kq4o6wnsdq6idlobv1phm 56402 56401 2026-09-10T18:19:23Z Steborce 2506 Отповикана преработката [[Special:Diff/56401|56401]] на [[Special:Contributions/Steborce|Steborce]] ([[User talk:Steborce|разговор]]) 56402 Scribunto text/plain local export = {} ------------------------------------------------------------ -- Помошни функции ------------------------------------------------------------ -- Отстранување на акцент од грчки збор local function remove_accent(str) return mw.ustring.gsub(str, "[άέήίόύώ]", { ["ά"] = "α", ["έ"] = "ε", ["ή"] = "η", ["ί"] = "ι", ["ό"] = "ο", ["ύ"] = "υ", ["ώ"] = "ω" }) 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 == "ής" then return mw.ustring.sub(str, 1, lstr - 2), "ής" ---------------------------------------------------- -- -ης -- -- пример: -- ουσιώδης → ουσιώδ + ης ---------------------------------------------------- elseif ending2 == "ης" then return mw.ustring.sub(str, 1, lstr - 2), "ης" ---------------------------------------------------- -- -ός ---------------------------------------------------- elseif ending2 == "ός" then return mw.ustring.sub(str, 1, lstr - 2), "ός" ---------------------------------------------------- -- -ος ---------------------------------------------------- elseif ending2 == "ος" then return mw.ustring.sub(str, 1, lstr - 2), "ος" ---------------------------------------------------- -- -ων ---------------------------------------------------- elseif ending2 == "ων" then return mw.ustring.sub(str, 1, lstr - 2), "ων" ---------------------------------------------------- -- -ών ---------------------------------------------------- elseif ending2 == "ών" then return mw.ustring.sub(str, 1, lstr - 2), "ών" ---------------------------------------------------- -- -ύς ---------------------------------------------------- elseif ending2 == "ύς" then return mw.ustring.sub(str, 1, lstr - 2), "ύς" ---------------------------------------------------- -- -ως ---------------------------------------------------- elseif ending2 == "ως" then return mw.ustring.sub(str, 1, lstr - 2), "ως" 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 f = { s_m = str, s_f = str, s_n = str, pl_m = str, pl_f = str, pl_n = str } -------------------------------------------------------- -- -ής / -ης -- -- Examples: -- -- ακριβής -- ουσιώδης -- -- Both follow the same basic declension: -- -- ακριβής → ακριβούς → ακριβείς → ακριβή -- ουσιώδης → ουσιώδους → ουσιώδεις → ουσιώδη -------------------------------------------------------- elseif ending == "ής" or ending == "ης" then if target_case == "Nom" then f = { s_m = str, s_f = str, 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 = remove_accent(base) .. "ών", pl_f = remove_accent(base) .. "ών", pl_n = remove_accent(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 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 -------------------------------------------------------- -- Излез за Викиречник -------------------------------------------------------- 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 589l1ffraxiz9ovjkx1c16vzoqaan3n 56403 56402 2026-09-10T18:30:15Z Steborce 2506 56403 Scribunto text/plain local export = {} ------------------------------------------------------------ -- Помошни функции ------------------------------------------------------------ -- Отстранување на акцент од грчки збор local function remove_accent(str) return mw.ustring.gsub(str, "[άέήίόύώ]", { ["ά"] = "α", ["έ"] = "ε", ["ή"] = "η", ["ί"] = "ι", ["ό"] = "ο", ["ύ"] = "υ", ["ώ"] = "ω" }) 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 == "ως" 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 = (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 == "ων" 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 == "ής" 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 -- Singular retains the stem accent: -- ουσιώδους -- -- Plural genitive moves the accent to -ών: -- ουσιωδών local base_no_accent = remove_accent(base) f = { s_m = base .. "ούς", s_f = base .. "ούς", s_n = base .. "ούς", pl_m = base_no_accent .. "ών", pl_f = base_no_accent .. "ών", pl_n = base_no_accent .. "ών" } 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 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 qnegfpu4b5kzxboxze03n62ctj6jjvs 56404 56403 2026-09-10T18:33:44Z Steborce 2506 56404 Scribunto text/plain 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 == "ως" 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 = (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 == "ων" 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 == "ής" 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 .. "ους" -- Во генитив множина акцентот се префрла -- на наставката. gen_pl = remove_accent(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 tebphzs2acs1q8x1jxwavlk22wiz69k 56405 56404 2026-09-10T18:36:52Z Steborce 2506 56405 Scribunto text/plain 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 = (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 == "ων" 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 .. "ους" gen_pl = remove_accent(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 lrxktfpyhlldeqd9c619cgl7jzplav2 56406 56405 2026-09-10T18:39:32Z Steborce 2506 56406 Scribunto text/plain 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 = (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 == "ων" 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 cirtex507hok0rym2o8y7ae18bydxhr 56423 56406 2026-09-11T09:51:05Z Steborce 2506 56423 Scribunto text/plain 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 8si5ddi6tsvv8pck1lv2ei592726mqk επείγων 0 10050 56372 53081 2026-09-10T15:42:39Z Steborce 2506 56372 wikitext text/x-wiki {{-el-}} '''επείγων''' '''''придавка''''' ===Етимологија=== Од старогрчкиот збор [[ἐπείγων]] (epeígōn), сегашен партицип од глаголот [[ἐπείγω]] („брзам“, „побрзувам“). Наследен во современиот грчки. ===Изговор=== * МФА-гр: /eˈpi.ɣon/ * Поделба на слогови: ε‧πεί‧γων ===Придавка=== '''επείγων''' • машки род (женски род '''επείγουσα''', среден род '''επείγον''') # [[итно]], [[неодложно]], [[ургентно]] — што бара итна акција или внимание; што не може да се одложи. #: '''Επείγον μήνυμα.''' #: ''Итна порака.'' #: '''Επείγουσα ανάγκη.''' #: ''Итна потреба.'' #: '''Επείγον περιστατικό.''' #: ''Итен случај.'' --- ===Менување на придавката=== {{el-cases-conj| {{PAGENAME}}| }} {{#invoke:el-c-conj-tests|run_tests}} {{#invoke:TestAdjectives|run_tests}} ===Синоними=== * [[κατεπείγων]] '''прид.''' — [[итно]] (посилно од "επείγων") * [[αναγκαίος]] '''прид.''' — [[неопходен]] ===Антоними=== * [[ασήμαντος]] '''прид.''' — [[безначаен]], [[неважен]] * [[ευκαιριακός]] '''прид.''' — [[повремен]], [[обичен]] ===Сродни поими=== * [[επείγω]] '''гл.''' — да биде забрзано итно, да се бара итна постапка * [[επείγουσες διατάξεις]] '''им.''' — [[итни мерки]] [[Категорија:Грчки]] [[Категорија:Грчки придавки]] i9mx11hgiatp84hkxjyglzc218nmedu 56387 56372 2026-09-10T17:21:15Z Steborce 2506 56387 wikitext text/x-wiki {{-el-}} '''επείγων''' '''''придавка''''' ===Етимологија=== Од старогрчкиот збор [[ἐπείγων]] (epeígōn), сегашен партицип од глаголот [[ἐπείγω]] („брзам“, „побрзувам“). Наследен во современиот грчки. ===Изговор=== * МФА-гр: /eˈpi.ɣon/ * Поделба на слогови: ε‧πεί‧γων ===Придавка=== '''επείγων''' • машки род (женски род '''επείγουσα''', среден род '''επείγον''') # [[итно]], [[неодложно]], [[ургентно]] — што бара итна акција или внимание; што не може да се одложи. #: '''Επείγον μήνυμα.''' #: ''Итна порака.'' #: '''Επείγουσα ανάγκη.''' #: ''Итна потреба.'' #: '''Επείγον περιστατικό.''' #: ''Итен случај.'' --- ===Менување на придавката=== {{el-cases-conj| {{PAGENAME}}| }} ===Синоними=== * [[κατεπείγων]] '''прид.''' — [[итно]] (посилно од "επείγων") * [[αναγκαίος]] '''прид.''' — [[неопходен]] ===Антоними=== * [[ασήμαντος]] '''прид.''' — [[безначаен]], [[неважен]] * [[ευκαιριακός]] '''прид.''' — [[повремен]], [[обичен]] ===Сродни поими=== * [[επείγω]] '''гл.''' — да биде забрзано итно, да се бара итна постапка * [[επείγουσες διατάξεις]] '''им.''' — [[итни мерки]] [[Категорија:Грчки]] [[Категорија:Грчки придавки]] 0xfe8df0py9q5bhggnbje1zonalv6v0 δίκαιος 0 10072 56388 53503 2026-09-10T17:25:19Z Steborce 2506 56388 wikitext text/x-wiki {{-el-}} ===Етимологија=== Од старогрчкиот збор '''δίκαιος''' („праведен“), поврзан со '''δίκη''' („правда“, „суд“), од каде потекнува значењето „оној што дејствува според правдата“. Поврзано и со '''δικαίως''' („правично“, „со право“). ===Изговор=== * МФА-гр: /ˈði.ce.os/ * Поделба на слогови: δί‧και‧ος ===Придавка=== '''δίκαιος''' • машки род (женски род '''δίκαιη''', среден род '''δίκαιο''') # [[праведен]] — лице што постапува според законот или моралот, така што сите имаат еднакви права и обврски #: '''Ένας δίκαιος δικαστής δεν επηρεάζεται από τα συναισθήματά του.''' #: ''Праведен судија не се води од своите емоции.'' # [[фер]], [[оправдан]], [[заслужен]] — нешто што е во согласност со правдата или вредноста на некого #: '''Θέλουμε έναν δίκαιο νόμο για όλους.''' #: ''Сакаме правичен закон за сите.'' ===Деклинација на придавката=== {{el-cases-conj| {{PAGENAME}} }} ===Синоними=== * [[τίμιος]] — чесен * [[δίκιος]] — разговорна форма на δίκαιος * [[έντιμος]] — достоинствен (во одредени контексти) ===Антоними=== * [[άδικος]] — неправеден, нефер ===Сродни поими=== * [[δικαιοσύνη]] — правда * [[δικαιώνω]] — оправдувам * [[δίκιο]] — право (како „имам право“) * [[δικαιολόγηση]] — оправдување * [[άδικο]] — неправда ===Изведени термини=== * [[δίκαια]] — праведно, фер (прилог) * [[δικαίως]] — со право, правично (книжевно) * '''δικαίως ή αδίκως''' — израз: без разлика дали е оправдано или не [[Категорија:Грчки]] [[Категорија:Грчки придавки]] kvin05x816pfst7bzr83l1kxogqmv24 56389 56388 2026-09-10T17:30:01Z Steborce 2506 56389 wikitext text/x-wiki {{-el-}} ===Етимологија=== Од старогрчкиот збор '''δίκαιος''' („праведен“), поврзан со '''δίκη''' („правда“, „суд“), од каде потекнува значењето „оној што дејствува според правдата“. Поврзано и со '''δικαίως''' („правично“, „со право“). ===Изговор=== * МФА-гр: /ˈði.ce.os/ * Поделба на слогови: δί‧και‧ος ===Придавка=== '''δίκαιος''' • машки род (женски род '''δίκαιη''', среден род '''δίκαιο''') # [[праведен]] — лице што постапува според законот или моралот, така што сите имаат еднакви права и обврски #: '''Ένας δίκαιος δικαστής δεν επηρεάζεται από τα συναισθήματά του.''' #: ''Праведен судија не се води од своите емоции.'' # [[фер]], [[оправдан]], [[заслужен]] — нешто што е во согласност со правдата или вредноста на некого #: '''Θέλουμε έναν δίκαιο νόμο για όλους.''' #: ''Сакаме правичен закон за сите.'' ===Деклинација на придавката=== {{el-cases-conj| {{PAGENAME}}| α }} ===Синоними=== * [[τίμιος]] — чесен * [[δίκιος]] — разговорна форма на δίκαιος * [[έντιμος]] — достоинствен (во одредени контексти) ===Антоними=== * [[άδικος]] — неправеден, нефер ===Сродни поими=== * [[δικαιοσύνη]] — правда * [[δικαιώνω]] — оправдувам * [[δίκιο]] — право (како „имам право“) * [[δικαιολόγηση]] — оправдување * [[άδικο]] — неправда ===Изведени термини=== * [[δίκαια]] — праведно, фер (прилог) * [[δικαίως]] — со право, правично (книжевно) * '''δικαίως ή αδίκως''' — израз: без разлика дали е оправдано или не [[Категорија:Грчки]] [[Категорија:Грчки придавки]] ban672rqbqpl9xpcig2t0xz260rt7oy 56391 56389 2026-09-10T17:38:15Z Steborce 2506 56391 wikitext text/x-wiki {{-el-}} ===Етимологија=== Од старогрчкиот збор '''δίκαιος''' („праведен“), поврзан со '''δίκη''' („правда“, „суд“), од каде потекнува значењето „оној што дејствува според правдата“. Поврзано и со '''δικαίως''' („правично“, „со право“). ===Изговор=== * МФА-гр: /ˈði.ce.os/ * Поделба на слогови: δί‧και‧ος ===Придавка=== '''δίκαιος''' • машки род (женски род '''δίκαιη''', среден род '''δίκαιο''') # [[праведен]] — лице што постапува според законот или моралот, така што сите имаат еднакви права и обврски #: '''Ένας δίκαιος δικαστής δεν επηρεάζεται από τα συναισθήματά του.''' #: ''Праведен судија не се води од своите емоции.'' # [[фер]], [[оправдан]], [[заслужен]] — нешто што е во согласност со правдата или вредноста на некого #: '''Θέλουμε έναν δίκαιο νόμο για όλους.''' #: ''Сакаме правичен закон за сите.'' ===Деклинација на придавката=== {{el-cases-conj| {{PAGENAME}}| αη }} ===Синоними=== * [[τίμιος]] — чесен * [[δίκιος]] — разговорна форма на δίκαιος * [[έντιμος]] — достоинствен (во одредени контексти) ===Антоними=== * [[άδικος]] — неправеден, нефер ===Сродни поими=== * [[δικαιοσύνη]] — правда * [[δικαιώνω]] — оправдувам * [[δίκιο]] — право (како „имам право“) * [[δικαιολόγηση]] — оправдување * [[άδικο]] — неправда ===Изведени термини=== * [[δίκαια]] — праведно, фер (прилог) * [[δικαίως]] — со право, правично (книжевно) * '''δικαίως ή αδίκως''' — израз: без разлика дали е оправдано или не [[Категорија:Грчки]] [[Категорија:Грчки придавки]] g3u8jbsnsnbu79u5v6oua1lqimsgv43 έγγραφος 0 10080 56366 56347 2026-09-10T15:08:03Z Steborce 2506 56366 wikitext text/x-wiki {{-el-}} ===Етимологија=== Од старогрчкиот збор '''ἔγγραφος''' („запишан, запишано“), составен од '''ἐν''' („во“) + '''γράφω''' („пишувам“). Значењето се однесува на нешто што е запишано во документ или во писмена форма. ===Изговор=== * МФА-гр: /ˈeŋ.ɣra.fos/ * Поделба на слогови: έγ‧γρα‧φος ===Придавка=== '''έγγραφος''' • машки род (женски род '''έγγραφη''', среден род '''έγγραφο''') # [[писмен]], [[во писмена форма]] — што постои или се изразува преку документ, текст или официјално писмо #: '''Απαιτείται έγγραφη συγκατάθεση του γονέα.''' #: ''Се бара писмена согласност од родителот.'' # што е [[документиран]], [[регистриран]] #: '''Έγγραφα στοιχεία δείχνουν την αλήθεια.''' #: ''Документирани податоци ја покажуваат вистината.'' ===Mенување на придавката по падежи=== {{el-cases-conj| {{PAGENAME}} }} {{#invoke:el-c-conj-tests|run_tests}} ===Синоними=== * [[γραπτός]] — [[писмен]] * [[τεκμηριωμένος]] — [[документиран]] * [[επίσημος]] — [[официјален]] (во одредени контексти) ===Антоними=== * [[προφορικός]] — [[усмен]] ===Сродни поими=== * [[έγγραφο]] — [[документ]] (како именка) * [[έγγραφη συγκατάθεση]] — [[писмена согласност]] * [[καταγράφω]] — [[запишувам]] * [[γραφή]] — [[пишување]], [[запис]] [[Категорија:Грчки|ΕΓΓΡΑΦΟΣ]] [[Категорија:Грчки придавки|ΕΓΓΡΑΦΟΣ]] l9qbgmj8ux1u71q7ezv1qz4r0fwdo9g 56368 56366 2026-09-10T15:19:28Z Steborce 2506 56368 wikitext text/x-wiki {{-el-}} ===Етимологија=== Од старогрчкиот збор '''ἔγγραφος''' („запишан, запишано“), составен од '''ἐν''' („во“) + '''γράφω''' („пишувам“). Значењето се однесува на нешто што е запишано во документ или во писмена форма. ===Изговор=== * МФА-гр: /ˈeŋ.ɣra.fos/ * Поделба на слогови: έγ‧γρα‧φος ===Придавка=== '''έγγραφος''' • машки род (женски род '''έγγραφη''', среден род '''έγγραφο''') # [[писмен]], [[во писмена форма]] — што постои или се изразува преку документ, текст или официјално писмо #: '''Απαιτείται έγγραφη συγκατάθεση του γονέα.''' #: ''Се бара писмена согласност од родителот.'' # што е [[документиран]], [[регистриран]] #: '''Έγγραφα στοιχεία δείχνουν την αλήθεια.''' #: ''Документирани податоци ја покажуваат вистината.'' ===Mенување на придавката по падежи=== {{el-cases-conj| {{PAGENAME}} }} {{#invoke:TestAdjectives|run_tests}} ===Синоними=== * [[γραπτός]] — [[писмен]] * [[τεκμηριωμένος]] — [[документиран]] * [[επίσημος]] — [[официјален]] (во одредени контексти) ===Антоними=== * [[προφορικός]] — [[усмен]] ===Сродни поими=== * [[έγγραφο]] — [[документ]] (како именка) * [[έγγραφη συγκατάθεση]] — [[писмена согласност]] * [[καταγράφω]] — [[запишувам]] * [[γραφή]] — [[пишување]], [[запис]] [[Категорија:Грчки|ΕΓΓΡΑΦΟΣ]] [[Категорија:Грчки придавки|ΕΓΓΡΑΦΟΣ]] h7o840istlheyeu3hv7yf675vcftlgv 56371 56368 2026-09-10T15:39:36Z Steborce 2506 56371 wikitext text/x-wiki {{-el-}} ===Етимологија=== Од старогрчкиот збор '''ἔγγραφος''' („запишан, запишано“), составен од '''ἐν''' („во“) + '''γράφω''' („пишувам“). Значењето се однесува на нешто што е запишано во документ или во писмена форма. ===Изговор=== * МФА-гр: /ˈeŋ.ɣra.fos/ * Поделба на слогови: έγ‧γρα‧φος ===Придавка=== '''έγγραφος''' • машки род (женски род '''έγγραφη''', среден род '''έγγραφο''') # [[писмен]], [[во писмена форма]] — што постои или се изразува преку документ, текст или официјално писмо #: '''Απαιτείται έγγραφη συγκατάθεση του γονέα.''' #: ''Се бара писмена согласност од родителот.'' # што е [[документиран]], [[регистриран]] #: '''Έγγραφα στοιχεία δείχνουν την αλήθεια.''' #: ''Документирани податоци ја покажуваат вистината.'' ===Mенување на придавката по падежи=== {{el-cases-conj| {{PAGENAME}} }} {{#invoke:TestAdjectives|run_tests}} {{#invoke:el-c-conj-tests|run_tests}} ===Синоними=== * [[γραπτός]] — [[писмен]] * [[τεκμηριωμένος]] — [[документиран]] * [[επίσημος]] — [[официјален]] (во одредени контексти) ===Антоними=== * [[προφορικός]] — [[усмен]] ===Сродни поими=== * [[έγγραφο]] — [[документ]] (како именка) * [[έγγραφη συγκατάθεση]] — [[писмена согласност]] * [[καταγράφω]] — [[запишувам]] * [[γραφή]] — [[пишување]], [[запис]] [[Категорија:Грчки|ΕΓΓΡΑΦΟΣ]] [[Категорија:Грчки придавки|ΕΓΓΡΑΦΟΣ]] nrlkx95uwxhjo2f5zclugejtapb9pts 56373 56371 2026-09-10T15:55:32Z Steborce 2506 56373 wikitext text/x-wiki {{-el-}} ===Етимологија=== Од старогрчкиот збор '''ἔγγραφος''' („запишан, запишано“), составен од '''ἐν''' („во“) + '''γράφω''' („пишувам“). Значењето се однесува на нешто што е запишано во документ или во писмена форма. ===Изговор=== * МФА-гр: /ˈeŋ.ɣra.fos/ * Поделба на слогови: έγ‧γρα‧φος ===Придавка=== '''έγγραφος''' • машки род (женски род '''έγγραφη''', среден род '''έγγραφο''') # [[писмен]], [[во писмена форма]] — што постои или се изразува преку документ, текст или официјално писмо #: '''Απαιτείται έγγραφη συγκατάθεση του γονέα.''' #: ''Се бара писмена согласност од родителот.'' # што е [[документиран]], [[регистриран]] #: '''Έγγραφα στοιχεία δείχνουν την αλήθεια.''' #: ''Документирани податоци ја покажуваат вистината.'' ===Mенување на придавката по падежи=== {{el-cases-conj| {{PAGENAME}} }} ===Синоними=== * [[γραπτός]] — [[писмен]] * [[τεκμηριωμένος]] — [[документиран]] * [[επίσημος]] — [[официјален]] (во одредени контексти) ===Антоними=== * [[προφορικός]] — [[усмен]] ===Сродни поими=== * [[έγγραφο]] — [[документ]] (како именка) * [[έγγραφη συγκατάθεση]] — [[писмена согласност]] * [[καταγράφω]] — [[запишувам]] * [[γραφή]] — [[пишување]], [[запис]] [[Категорија:Грчки|ΕΓΓΡΑΦΟΣ]] [[Категорија:Грчки придавки|ΕΓΓΡΑΦΟΣ]] 44azeny4zm447ghr3xfw87lx3f0f0qx αγαπάω 0 10165 56407 54854 2026-09-10T20:33:37Z Steborce 2506 56407 wikitext text/x-wiki {{-el-}} ===Етимологија=== Од старогрчкиот [[ἀγαπάω]] (agapáō), од [[ἀγάπη]] („љубов“) + наставка -άω. ===Изговор=== * МФА-гр: /a.ɣaˈpa.o/ * Поделба на слогови: α‧γα‧πά‧ω ===Глагол=== '''αγαπάω''' — несвршен глагол (минато време '''αγάπησα''', пасивна форма '''αγαπιέμαι''') Значења: # [[сака]], [[љуби]], [[обожава]] #: '''Σ’ αγαπάω πολύ.''' #: *Те сакам многу.* #: '''Αγαπάει τα ζώα και τη φύση.''' #: *Ги сака животните и природата.* === Табела со форми на глаголот === {| class="wikitable mw-collapsible mw-collapsed" !colspan=6 style="text-align: left;"| <span style="margin-right: 1em;">αγαπάω и αγαπιέμαι</span> |- ! Време !! !! Активна форма (грчки) !! Активна форма (македонски) !! Пасивна форма (грчки) !! Пасивна форма (македонски) |- | Ενεστώτας Οριστικής || Сегашно време || [[αγαπάω]] / [[αγαπώ]] || јас сакам || [[αγαπιέμαι]] || ме сакаат |- | Παρατατικός Οριστικής || Имперфект || αγαπούσα || сакав || αγαπιόμουν / αγαπιόμουνα || ме сакаа |- | Μέλλοντας Συνεχής || Продолжен идно време || θα αγαπάω / θα αγαπώ || ќе сакам || θα αγαπιέμαι || ќе ме сакаат |- | Αόριστος Οριστικής || Aорист || αγάπησα || засакав || αγαπήθηκα || бев засакан |- | Μέλλοντας Στιγμιαίος || Идно време (аорист) || θα αγαπήσω || ќе засакам || θα αγαπηθώ || ќе бидам засакан |- | Παρακείμενος || Перфект || έχω αγαπήσει || имам засакано || έχω αγαπηθεί || сум бил засакан |- | Υπερσυντέλικος || Плусквамперфект || είχα αγαπήσει || имав засакано || είχα αγαπηθεί || бев бил засакан |- | Μέλλοντας Συντελεσμένος || Перфектен идно || θα έχω αγαπήσει || ќе имам засакано || θα έχω αγαπηθεί || ќе имам бил засакан |- | Προστακτική Ενεστώτα || Императив сегашно време || αγάπα || сакај! || αγαπιέσου || биди сакан! |- | Προστακτική Αορίστου || Императив (аорист) || αγάπησε || засакај! || αγαπήσου || биди засака(н)! |- | Μετοχή Ενεστώτα || Презентска придавка || αγαπώντας || сакајќи || — || — |- | Μετοχή Αορίστου || Перфектна придавка || αγαπήσει || засакан || αγαπηθείς || засакан |} ===Синоними=== * [[αγαπώ]] '''''гл.''''' — [[сакам]] * [[λατρεύω]] '''''гл.''''' — [[обожавам]] ===Антоними=== * [[μισώ]] '''''гл.''''' — [[мразам]] * [[αντιπαθώ]] '''''гл.''''' — [[не поднесувам]] ===Сродни поими=== * [[αγάπη]] '''''им.''''' — љубов * [[αγαπημένος]] '''''прид.''''' — сакан * [[αγαπησιάρης]] '''''прид.''''' — љубовен, полн со љубов * [[αγαπητός]] '''''прид.''''' — драг, почитуван [[Категорија:Грчки|ΑΓΑΠΑΩ]] [[Категорија:Грчки глаголи|ΑΓΑΠΑΩ]] azwm8n5w7amct038wbh7hqbygpqgl6t 56408 56407 2026-09-10T20:34:19Z Steborce 2506 56408 wikitext text/x-wiki {{-el-}} ===Етимологија=== Од старогрчкиот [[ἀγαπάω]] (agapáō), од [[ἀγάπη]] („љубов“) + наставка -άω. ===Изговор=== * МФА-гр: /a.ɣaˈpa.o/ * Поделба на слогови: α‧γα‧πά‧ω ===Глагол=== '''αγαπάω''' — несвршен глагол (минато време '''αγάπησα''', пасивна форма '''αγαπιέμαι''') Значења: # [[сака]], [[љуби]], [[обожава]] #: '''Σ’ αγαπάω πολύ.''' #: *Те сакам многу.* #: '''Αγαπάει τα ζώα και τη φύση.''' #: *Ги сака животните и природата.* === Табела со форми на глаголот === {| class="wikitable mw-collapsible mw-collapsed" !colspan=6 style="text-align: left;"| <span style="margin-right: 1em;">αγαπάω и αγαπιέμαι</span> |- ! Време !! !! Активна форма (грчки) !! Активна форма (македонски) !! Пасивна форма (грчки) !! Пасивна форма (македонски) |- | Ενεστώτας Οριστικής || Сегашно време || [[αγαπάω]] / [[αγαπώ]] || јас сакам || [[αγαπιέμαι]] || ме сакаат |- | Παρατατικός Οριστικής || Имперфект || αγαπούσα || сакав || αγαπιόμουν / αγαπιόμουνα || ме сакаа |- | Μέλλοντας Συνεχής || Продолжен идно време || θα αγαπάω / θα αγαπώ || ќе сакам || θα αγαπιέμαι || ќе ме сакаат |- | Αόριστος Οριστικής || Aорист || αγάπησα || засакав || αγαπήθηκα || бев засакан |- | Μέλλοντας Στιγμιαίος || Идно време (аорист) || θα αγαπήσω || ќе засакам || θα αγαπηθώ || ќе бидам засакан |- | Παρακείμενος || Перфект || έχω αγαπήσει || имам засакано || έχω αγαπηθεί || сум бил засакан |- | Υπερσυντέλικος || Плусквамперфект || είχα αγαπήσει || имав засакано || είχα αγαπηθεί || бев бил засакан |- | Μέλλοντας Συντελεσμένος || Перфектен идно || θα έχω αγαπήσει || ќе имам засакано || θα έχω αγαπηθεί || ќе имам бил засакан |- | Προστακτική Ενεστώτα || Императив сегашно време || αγάπα || сакај! || αγαπιέσου || биди сакан! |- | Προστακτική Αορίστου || Императив (аорист) || αγάπησε || засакај! || αγαπήσου || биди засакан! |- | Μετοχή Ενεστώτα || Презентска придавка || αγαπώντας || сакајќи || — || — |- | Μετοχή Αορίστου || Перфектна придавка || αγαπήσει || засакан || αγαπηθείς || засакан |} ===Синоними=== * [[αγαπώ]] '''''гл.''''' — [[сакам]] * [[λατρεύω]] '''''гл.''''' — [[обожавам]] ===Антоними=== * [[μισώ]] '''''гл.''''' — [[мразам]] * [[αντιπαθώ]] '''''гл.''''' — [[не поднесувам]] ===Сродни поими=== * [[αγάπη]] '''''им.''''' — љубов * [[αγαπημένος]] '''''прид.''''' — сакан * [[αγαπησιάρης]] '''''прид.''''' — љубовен, полн со љубов * [[αγαπητός]] '''''прид.''''' — драг, почитуван [[Категорија:Грчки|ΑΓΑΠΑΩ]] [[Категорија:Грчки глаголи|ΑΓΑΠΑΩ]] ely1q6i1lx1j7rem7h6g8xytt0r6gkv παρά 0 10237 56413 56284 2026-09-11T05:16:17Z Steborce 2506 56413 wikitext text/x-wiki {{-el-}} ===Етимологија=== Од старогрчки παρά (pará), со значење „покрај, покрај нешто, од страна на“, со различни значења во зависност од контекстот. ===Изговор=== * МФА-гр: /paˈɾa/ * Поделба по слогови: πα‧ρά ===Предлог=== '''παρά''' • предлог # [[од]] — укажува на потекло или извор (со генитив) #: '''Το άκουσα παρά του καθηγητή.''' #: ''Го слушнав од професорот.'' # [[покрај]] — во физичка близина (со акузатив) #: '''Το παιδί κάθεται παρά το παράθυρο.''' #: ''Детето седи покрај прозорот.'' # [[и покрај]] — наспроти сè #: '''Παρά τις δυσκολίες, τα κατάφερε.''' #: ''И покрај тешкотиите, успеа.'' # [[до]] — при означување време (минути до следниот час) #: '''Είναι δέκα παρά πέντε.''' #: ''Пет до десет.'' # [[освен]] — по негација, изразува ограничување #: '''Δεν θέλω παρά να ηρεμήσω.''' #: ''Не сакам ништо друго освен да се смирам.'' ===Прилог=== '''παρά''' • прилог # [[повеќе отколку]] — во споредбен израз #: '''Μου αρέσει το θέατρο παρά ο κινηματογράφος.''' #: ''Ми се допаѓа театарот повеќе отколку киното.'' ===Сврзник=== '''παρά''' • сврзник # [[наместо да]] — со глагол во свршен или несвршен вид #: '''Παρά να μιλάς, καλύτερα να βοηθήσεις.''' #: ''Наместо да зборуваш, подобро помогни.'' # [[туку]], [[ништо друго освен]] — по негација, за ограничување или истакнување #: '''Αυτό δεν είναι παρά μία απλή υπόθεση.''' #: ''Ова не е ништо повеќе од обична претποставка.'' / ''Ова е само една обична претпоставка.'' # [[туку]] — во спротивни конструкции по негација #: '''Δεν είναι βλάκας, παρά έξυπνος.''' #: ''Не е глупав, туку паметен.'' ===Синоними=== * [[αντί]] '''предл.''' — наместо * [[εκτός]] '''предл.''' — освен ===Сродни поими=== * [[παραδίδω]] '''гл.''' — предавам * [[παραλαμβάνω]] '''гл.''' — примам * [[παρανόηση]] '''им.''' — недоразбирање * [[παρατηρώ]] '''гл.''' — набљудувам * [[παράδειγμα]] '''им.''' — пример ===Изрази=== * [[δεν είναι παρά]] — не е ништо повеќе од... / не е ништо друго освен... / е само... [[Категорија:Грчки]] [[Категорија:Грчки предлози]] [[Категорија:Грчки прилози]] [[Категорија:Грчки сврзници]] 8jd94j9bbr501jyl76c6q3c2x074uv4 πας 0 10241 56420 54076 2026-09-11T09:03:57Z Steborce 2506 56420 wikitext text/x-wiki {{-el-}} ===Етимологија=== Од старогрчки πᾶς (pâs), со значење „сè, секој“. Денес се користи само во формални или книжевни изрази и сложени форми. ===Изговор=== * МФА-гр: /ˈpas/ * Поделба по слогови: πας ===Заменка === '''πας''' машки род (женски род '''πάσα''', среден род '''παν''') '''Забелешки''' * Оваа заменка функционира како придавка, односно се менува како придавка по род лице и падежи * Веќе не е во широка употреба, освен во поговорки и посебни терминологии, како на пример во црковната. # [[секоj]] — архаична форма, употребена во фрази #: '''Κατά πάσα πιθανότητα, θα βρέξει.''' #: ''Со голема веројатност, ќе врне.'' # [[цeл]] — целосен, комплетен #: '''Εν πάση περιπτώσει, πρέπει να μιλήσουμε.''' #: ''Во секој случај, треба да разговараме.'' ===Деклинација по падежи=== {| class="wikitable" ! !! colspan=3 |Еднина !! colspan=3 |Множина |- ! !! Машки род !! Женски род !! Среден род !! Машки род !! Женски род !! Среден род |- ! Номинатив | πας || πάσα || παν || πάντες || πάσαι || πάντα |- ! Генитив | παντός || πάσης || παντός || πάντων || πασών || πάντων |- ! Акузатив | πάντα || πάσαν || παν || πάντας || πάσας || πάντα |- ! Вокатив | πας || πάσα || παν || πάντες || πάσαι || πάντα |} ===Изрази=== * κατά πάσα πιθανότητα — со голема веројатност * πάσης φύσεως — од секаков вид * ανά πάσα στιγμή — во секој момент * εν πάση περιπτώσει — во секој случај * δια παντός — засекогаш * τοις πάσι — на сите ===Синоними=== * [[κάθε]] '''прид.''' — секој * [[όλος]] '''прид.''' — цел ===Сродни поими=== * [[πάντες]] — сите * [[παντός]] — на сè * [[παντού]] — насекаде * [[πανελλήνιος]] — панхеленски * [[πανεπιστήμιο]] — универзитет ===Глагол=== [[πας]] # [[одиш]] — второ лице еднина, сегашно време од глаголот [[πάω]] #: '''Πας''' στο σχολείο κάθε μέρα; #: '''''Одиш''' ли во училиште секој ден?'' # второ лице еднина, зависна форма од глаголот [[πάω]] # второ лице еднина, зависна форма од глаголот [[πηγαίνω]]] #: Πρέπει '''να πας''' στο γυμναστήριο πιο συχνά. #: ''Мораш ''''да одиш'''' во теретана почесто.'' ===Префикс=== Формите на [[πας]] особено номинативот од среден род еднина [[παν]], но и од машки род еднина [[πας]] од генитивот [[πάντων]], но и од дативот [[πάσι]] , се користат како префикси во многу зборови, давајќи го значењето на [[севкупно]], [[целина]] или означуват суперлативен степен.“ === Сложени зборови === * [[παντογνώστης]] – сезнајко * [[πανταχού]] – секаде (во сите места) * [[παντελώς]] – целосно, потполно * [[παντοκράτορας]] – семоќен (семоќник) * [[πανγεννήτωρ]] – родител на сите, создавач * [[παγκράτιο]] – панкратион (древен боречки спорт) * [[Παγκράτι]] – Паграти (кварт во Атина) * [[πάγκρεας]] – панкреас * [[πανουργία]] – лукавство, итрина * [[πασίγνωστος]] – многу познат, прочуен * [[πασιφανής]] – очигледен, јасно видлив * [[πανδαισία]] – гозба, изобилство * [[πανδημία]] – пандемија * [[πανώλης]] – чума * [[πανευρωπαϊκός]] – паневропски * [[πανάκεια]] – лек за сè, панацеја * [[Πανέλληνες]] – сите Грци (букв. сите Хелени) * [[πάμπτωχος]] – крајно сиромашен * [[πανάθλιος]] – многу беден, жален * [[παμπάλαιος]] – многу стар, древен * [[παμπόνηρος]] – многу лукав * [[πανάσχημος]] – крајно грд * [[πανέτοιμος]] – целосно подготвен * [[παντέρημος]] – сосем пуст, целосно осамен * [[Παναγία]] – Богородица * [[πανίερος]] – многу свет, пресвет * [[Πανάγιος]] – Пресвет гроб (Светиот гроб) [[Категорија:Грчки]] [[Категорија:Грчки глаголи]] [[Категорија:Грчки придавки]] [[Категорија:Грчки заменки]] [[Категорија:Грчки префикси]] ru5c1r06skvarak41dk1dvrgplasvwu 56421 56420 2026-09-11T09:04:58Z Steborce 2506 56421 wikitext text/x-wiki {{-el-}} ===Етимологија=== Од старогрчки πᾶς (pâs), со значење „сè, секој“. Денес се користи само во формални или книжевни изрази и сложени форми. ===Изговор=== * МФА-гр: /ˈpas/ * Поделба по слогови: πας ==Заменка == '''πας''' машки род (женски род '''πάσα''', среден род '''παν''') '''Забелешки''' * Оваа заменка функционира како придавка, односно се менува како придавка по род лице и падежи * Веќе не е во широка употреба, освен во поговорки и посебни терминологии, како на пример во црковната. # [[секоj]] — архаична форма, употребена во фрази #: '''Κατά πάσα πιθανότητα, θα βρέξει.''' #: ''Со голема веројатност, ќе врне.'' # [[цeл]] — целосен, комплетен #: '''Εν πάση περιπτώσει, πρέπει να μιλήσουμε.''' #: ''Во секој случај, треба да разговараме.'' ===Деклинација по падежи=== {| class="wikitable" ! !! colspan=3 |Еднина !! colspan=3 |Множина |- ! !! Машки род !! Женски род !! Среден род !! Машки род !! Женски род !! Среден род |- ! Номинатив | πας || πάσα || παν || πάντες || πάσαι || πάντα |- ! Генитив | παντός || πάσης || παντός || πάντων || πασών || πάντων |- ! Акузатив | πάντα || πάσαν || παν || πάντας || πάσας || πάντα |- ! Вокатив | πας || πάσα || παν || πάντες || πάσαι || πάντα |} ===Изрази=== * κατά πάσα πιθανότητα — со голема веројатност * πάσης φύσεως — од секаков вид * ανά πάσα στιγμή — во секој момент * εν πάση περιπτώσει — во секој случај * δια παντός — засекогаш * τοις πάσι — на сите ===Синоними=== * [[κάθε]] '''прид.''' — секој * [[όλος]] '''прид.''' — цел ===Сродни поими=== * [[πάντες]] — сите * [[παντός]] — на сè * [[παντού]] — насекаде * [[πανελλήνιος]] — панхеленски * [[πανεπιστήμιο]] — универзитет ==Глагол== [[πας]] # [[одиш]] — второ лице еднина, сегашно време од глаголот [[πάω]] #: '''Πας''' στο σχολείο κάθε μέρα; #: '''''Одиш''' ли во училиште секој ден?'' # второ лице еднина, зависна форма од глаголот [[πάω]] # второ лице еднина, зависна форма од глаголот [[πηγαίνω]]] #: Πρέπει '''να πας''' στο γυμναστήριο πιο συχνά. #: ''Мораш ''''да одиш'''' во теретана почесто.'' ===Префикс=== Формите на [[πας]] особено номинативот од среден род еднина [[παν]], но и од машки род еднина [[πας]] од генитивот [[πάντων]], но и од дативот [[πάσι]] , се користат како префикси во многу зборови, давајќи го значењето на [[севкупно]], [[целина]] или означуват суперлативен степен.“ === Сложени зборови === * [[παντογνώστης]] – сезнајко * [[πανταχού]] – секаде (во сите места) * [[παντελώς]] – целосно, потполно * [[παντοκράτορας]] – семоќен (семоќник) * [[πανγεννήτωρ]] – родител на сите, создавач * [[παγκράτιο]] – панкратион (древен боречки спорт) * [[Παγκράτι]] – Паграти (кварт во Атина) * [[πάγκρεας]] – панкреас * [[πανουργία]] – лукавство, итрина * [[πασίγνωστος]] – многу познат, прочуен * [[πασιφανής]] – очигледен, јасно видлив * [[πανδαισία]] – гозба, изобилство * [[πανδημία]] – пандемија * [[πανώλης]] – чума * [[πανευρωπαϊκός]] – паневропски * [[πανάκεια]] – лек за сè, панацеја * [[Πανέλληνες]] – сите Грци (букв. сите Хелени) * [[πάμπτωχος]] – крајно сиромашен * [[πανάθλιος]] – многу беден, жален * [[παμπάλαιος]] – многу стар, древен * [[παμπόνηρος]] – многу лукав * [[πανάσχημος]] – крајно грд * [[πανέτοιμος]] – целосно подготвен * [[παντέρημος]] – сосем пуст, целосно осамен * [[Παναγία]] – Богородица * [[πανίερος]] – многу свет, пресвет * [[Πανάγιος]] – Пресвет гроб (Светиот гроб) [[Категорија:Грчки]] [[Категорија:Грчки глаголи]] [[Категорија:Грчки придавки]] [[Категорија:Грчки заменки]] [[Категорија:Грчки префикси]] ewqfbdx8sbm39i8irrqsz2yckr5ciic 56422 56421 2026-09-11T09:05:57Z Steborce 2506 56422 wikitext text/x-wiki {{-el-}} ===Етимологија=== Од старогрчки πᾶς (pâs), со значење „сè, секој“. Денес се користи само во формални или книжевни изрази и сложени форми. ===Изговор=== * МФА-гр: /ˈpas/ * Поделба по слогови: πας ===Заменка === '''πας''' машки род (женски род '''πάσα''', среден род '''παν''') '''Забелешки''' * Оваа заменка функционира како придавка, односно се менува како придавка по род лице и падежи * Веќе не е во широка употреба, освен во поговорки и посебни терминологии, како на пример во црковната. # [[секоj]] — архаична форма, употребена во фрази #: '''Κατά πάσα πιθανότητα, θα βρέξει.''' #: ''Со голема веројатност, ќе врне.'' # [[цeл]] — целосен, комплетен #: '''Εν πάση περιπτώσει, πρέπει να μιλήσουμε.''' #: ''Во секој случај, треба да разговараме.'' ===Деклинација по падежи=== {| class="wikitable" ! !! colspan=3 |Еднина !! colspan=3 |Множина |- ! !! Машки род !! Женски род !! Среден род !! Машки род !! Женски род !! Среден род |- ! Номинатив | πας || πάσα || παν || πάντες || πάσαι || πάντα |- ! Генитив | παντός || πάσης || παντός || πάντων || πασών || πάντων |- ! Акузатив | πάντα || πάσαν || παν || πάντας || πάσας || πάντα |- ! Вокатив | πας || πάσα || παν || πάντες || πάσαι || πάντα |} ===Изрази=== * κατά πάσα πιθανότητα — со голема веројатност * πάσης φύσεως — од секаков вид * ανά πάσα στιγμή — во секој момент * εν πάση περιπτώσει — во секој случај * δια παντός — засекогаш * τοις πάσι — на сите ===Синоними=== * [[κάθε]] '''прид.''' — секој * [[όλος]] '''прид.''' — цел ===Сродни поими=== * [[πάντες]] — сите * [[παντός]] — на сè * [[παντού]] — насекаде * [[πανελλήνιος]] — панхеленски * [[πανεπιστήμιο]] — универзитет ===Глагол=== [[πας]] # [[одиш]] — второ лице еднина, сегашно време од глаголот [[πάω]] #: '''Πας''' στο σχολείο κάθε μέρα; #: '''''Одиш''' ли во училиште секој ден?'' # второ лице еднина, зависна форма од глаголот [[πάω]] # второ лице еднина, зависна форма од глаголот [[πηγαίνω]]] #: Πρέπει '''να πας''' στο γυμναστήριο πιο συχνά. #: ''Мораш ''''да одиш'''' во теретана почесто.'' ===Префикс=== Формите на [[πας]] особено номинативот од среден род еднина [[παν]], но и од машки род еднина [[πας]] од генитивот [[πάντων]], но и од дативот [[πάσι]] , се користат како префикси во многу зборови, давајќи го значењето на [[севкупно]], [[целина]] или означуват суперлативен степен.“ === Сложени зборови === * [[παντογνώστης]] – сезнајко * [[πανταχού]] – секаде (во сите места) * [[παντελώς]] – целосно, потполно * [[παντοκράτορας]] – семоќен (семоќник) * [[πανγεννήτωρ]] – родител на сите, создавач * [[παγκράτιο]] – панкратион (древен боречки спорт) * [[Παγκράτι]] – Паграти (кварт во Атина) * [[πάγκρεας]] – панкреас * [[πανουργία]] – лукавство, итрина * [[πασίγνωστος]] – многу познат, прочуен * [[πασιφανής]] – очигледен, јасно видлив * [[πανδαισία]] – гозба, изобилство * [[πανδημία]] – пандемија * [[πανώλης]] – чума * [[πανευρωπαϊκός]] – паневропски * [[πανάκεια]] – лек за сè, панацеја * [[Πανέλληνες]] – сите Грци (букв. сите Хелени) * [[πάμπτωχος]] – крајно сиромашен * [[πανάθλιος]] – многу беден, жален * [[παμπάλαιος]] – многу стар, древен * [[παμπόνηρος]] – многу лукав * [[πανάσχημος]] – крајно грд * [[πανέτοιμος]] – целосно подготвен * [[παντέρημος]] – сосем пуст, целосно осамен * [[Παναγία]] – Богородица * [[πανίερος]] – многу свет, пресвет * [[Πανάγιος]] – Пресвет гроб (Светиот гроб) [[Категорија:Грчки]] [[Категорија:Грчки глаголи]] [[Категорија:Грчки придавки]] [[Категорија:Грчки заменки]] [[Категорија:Грчки префикси]] ru5c1r06skvarak41dk1dvrgplasvwu κατοικίδιος 0 10436 56393 54478 2026-09-10T17:47:04Z Steborce 2506 56393 wikitext text/x-wiki {{-el-}} ===Етимологија=== Од хеленистичкиот грчки збор '''κατοικίδιος''', со значење „лекување што може да се изврши дома“. Денешното значење е преземено подоцна. ===Изговор=== * МФΑ-гр: /ka.tiˈci.ðjos/ * Поделба по слогови: κα‧τοι‧κί‧δι‧ος ===Придавка=== '''κατοικίδιος''' • придавка во машки род (женски род: [[κατοικίδια]], среден род: [[κατοικίδιο]]) # питомо, припитомено или домашно (за животни)- кое живее во близина на луѓето, дома. #:'''Ο σκύλος είναι κατοικίδιο ζώο.''' #:''Кучето е домашно животно.'' ===Менување на придавката по падежи=== {{el-cases-conj|{{PAGENAME}}|α}} ===Поврзани поими=== * [[κατοικώ]] '''(гл.)''' — живеам * [[κατοικία]] '''(им.)''' — живеалиште * [[κατοικίδιο]] '''(им.)''' — домашно животно, миленик [[Категорија:Грчки|ΚΑΤΟΙΚΙΔΙΟΣ]] [[Категорија:Грчки придавки|ΚΑΤΟΙΚΙΔΙΟΣ]] j51prv8fmdhtq6vstxtdw4ze60zitz8 παρελθών 0 10484 56416 54581 2026-09-11T08:51:58Z Steborce 2506 56416 wikitext text/x-wiki {{-el-}} ===Етимологија=== Од старогрчкиот збор '''παρελθών''' (parelthṓn), кој е аорист партицип од глаголот `παρέρχομαι` (parérkhomai) „поминувам покрај“. Буквално значи „оној што поминал“. ===Изговор=== * МФΑ-гр: /pa.ɾelˈθon/ * Поделба по слогови: πα‧ρελ‧θών ===Придавка=== '''παρελθών''' придавка од машки род (женски род '''παρελθούσα''', среден род '''παρελθόν''') #[[минат]], [[поминат]], [[поранешен]]. #:'''Ο παρελθών χρόνος.''' #:''Минатата година.'' #[[поранешен]]. #:'''Ο παρελθών πρόεδρος.''' #:''Поранешниот претседател.'' ===Деклинација на придавката=== {{el-cases-conj|{{PAGENAME}}}} {{#invoke:el-c-conj-tests|run_tests}} {{#invoke:TestAdjectives|run_tests}} ===Синоними=== * [[πρώην]] '''(прил.)''' — поранешен * [[παλιός]] '''(прид.)''' — стар, минат ===Антоними=== * [[παρών]] '''(прид.)''' — присутен, сегашен * [[μέλλων]] '''(прид.)''' — иден ===Сродни поими=== * [[παρέρχομαι]] '''(гл.)''' — поминувам, проаѓам * [[παρελθόν]] '''(им.)''' — минато * [[παρέλευση]] '''(им.)''' — истек, минување на времето [[Категорија:Грчки|ΠΑΡΕΛΘΩΝ]] [[Категорија:Грчки придавки|ΠΑΡΕΛΘΩΝ]] r6lnxwloverqkittbe9lyr35j23z1rg 56419 56416 2026-09-11T08:58:34Z Steborce 2506 56419 wikitext text/x-wiki {{-el-}} ===Етимологија=== Од старогрчкиот збор '''παρελθών''' (parelthṓn), кој е аорист партицип од глаголот `παρέρχομαι` (parérkhomai) „поминувам покрај“. Буквално значи „оној што поминал“. ===Изговор=== * МФΑ-гр: /pa.ɾelˈθon/ * Поделба по слогови: πα‧ρελ‧θών ===Придавка=== '''παρελθών''' придавка од машки род (женски род '''παρελθούσα''', среден род '''παρελθόν''') #[[минат]], [[поминат]], [[поранешен]]. #:'''Ο παρελθών χρόνος.''' #:''Минатата година.'' #[[поранешен]]. #:'''Ο παρελθών πρόεδρος.''' #:''Поранешниот претседател.'' ===Деклинација на придавката=== {{el-cases-conj|{{PAGENAME}}}} ===Синоними=== * [[πρώην]] '''(прил.)''' — поранешен * [[παλιός]] '''(прид.)''' — стар, минат ===Антоними=== * [[παρών]] '''(прид.)''' — присутен, сегашен * [[μέλλων]] '''(прид.)''' — иден ===Сродни поими=== * [[παρέρχομαι]] '''(гл.)''' — поминувам, проаѓам * [[παρελθόν]] '''(им.)''' — минато * [[παρέλευση]] '''(им.)''' — истек, минување на времето [[Категорија:Грчки|ΠΑΡΕΛΘΩΝ]] [[Категорија:Грчки придавки|ΠΑΡΕΛΘΩΝ]] qj4gz1kb1luggv6cyqsn6xjki0cc6wd νότιος 0 10562 56394 54768 2026-09-10T17:54:31Z Steborce 2506 56394 wikitext text/x-wiki {{-el-}} ===Етимологија=== Дијахроничен заем од старогрчкиот збор `νότιος`, од `νότ(ος)` + `-ιος`. ===Изговор=== * [[МФА]]-gr: /ˈno.ti.os/ * Поделба по слогови: νό‧τι‧ος ===Придавка=== '''νόтиος''' придавка од машки род (женски род '''νότια''', среден род '''νότιο''') # [[кој се наоѓа во]] [[југ]]. #: '''νότιος πόλος''' #: ''јужен пол'' # [[кој се наоѓа во]] [[јужниот]] [[дел]] на некое место. #: '''Νότιος Αμερική''' #: ''Јужна Америка'' # [[кој гледа кон]] [[југ]]. #: '''Η νότια πλευρά του σπιτιού.''' #: ''Јужната страна на куќата.'' # [[кој доаѓа од]] [[југ]]. #: '''νότιος άνεμος''' #: ''јужен ветер'' # (за јазици) [[кој се зборува во]] [[јужниот]] [[дел]] на [[регион]]. #: '''νότιες σλαβικές γλώσσες''' #: ''јужнословенски јазици'' ===Деклинација на придавката=== {{el-cases-conj| νότιος|α }} ===Алтернативни форми=== * [[νοτινός]] * [[νότινος]] ===Антоними=== * [[βόρειος]] '''(прид.)''' — северен ===Изведени поими=== * [[Νότια Αμερική]] - Јужна Америка * [[Νότια Аφρική]]- Јужна Африка * [[Νότια Κορέα]]- Јужна Кореа * [[Νότιο Σουδάν]]- Јужнен Судан * [[Νότιος Πόλος]]- Јужен Пол ===Сродни поими=== * [[νοτιά]] '''(им.)''' — југ (поетски) * [[νοτιάς]] '''(им.)''' — јужен ветер * [[νοτίζω]] '''(гл.)''' — навлажнувам * [[νοτιο-]] '''(префикс)''' — јужно- * [[νοτιοανατολικός]] '''(прид.)''' — југоисточен * [[νοτιοαφρικανικός]] '''(прид.)''' — јужноафрикански * [[ноτιοδυτικός]] '''(прид.)''' — југозападен ===Сродни поими=== * [[νότος]] '''(им.)''' — југ [[Категорија:Грчки|ΝΟΤΙΟΣ]] [[Категорија:Грчки придавки|ΝΟΤΙΟΣ]] 7pkzfudcqlvxgefy6ei3sg6r9pld2us υποβρύχιος 0 10632 56434 54927 2026-09-11T10:53:45Z Steborce 2506 56434 wikitext text/x-wiki Навистина, извинете. Разбирам дека не сакате именката и придавката да бидат на иста страница. Јас требаше да ги следам вашите упатства, наместо да ги следам стандардните правила на Викиречник. Ќе ги направам двете страници одделно, како што баравте. Страница за υποβρύχιος {{-el-}} ===Етимологија=== Сложен збор од [[υπό]] (ypó, „под“) и `βρύχιος`, што значи „што има длабок глас“. ===Изговор=== * [[МФΑ]]-gr: /ipoˈvri.xios/ * Поделба по слогови: υ‧πο‧βρύ‧χι‧ος ===Придавка=== '''υποβρύχιος''' придавка од машки род ( женски род: [[υποβρύχια]], среден род: [[υποβρύχιο]]) # [[подводен]]. #: '''υποβρύχια κάμερα''' #:''подводна камера'' ===Деклинација на придавката=== {{el-cases-conj| {{PAGENAME}}| α }} ===Сродни поими=== * [[υπό]] '''(предлог)''' — под, подолу * [[υποβρύχιο]] ''' именка''' - подморница [[Категорија:Грчки|ΥΠΟΒΡΥΧΙΟΣ]] [[Категорија:Грчки придавки|ΥΠΟΒΡΥΧΙΟΣ]] 8qwku5clvrwf2frkdaw0y3dpt966fk1 εισιτήριος 0 10725 56392 55158 2026-09-10T17:40:40Z Steborce 2506 56392 wikitext text/x-wiki {{-el-}} ===Етимологија=== Од старогрчкиот збор εἰσιτήριος (што се однесува на влезот). ===Изговор=== * [[МФΑ]]-gr: /i.siˈti.ri.os/ * Поделба по слогови: ει‧σι‧τή‧ρι‧ος ===Придавка=== '''εισιτήριος''' • придавка од машки род (женски род [[εισιτήρια]], среден род [[εισιτήριο]]) #[[приемен]], [[влезен]] - Поврзано со процедурите за упис во универзитет или друга образовна институција. #:'''Η εισαγωγή θα γίνεται χωρίς εισιτήριες εξετάσεις.''' #:''Уписот ќе се врши без приемни испити.'' ===Деклинација на придавката=== {{el-cases-conj| {{PAGENAME}}| α }} ====Синоними==== * [[εισαγωγικός]] '''(прид.)''' — воведен, за упис ====Антоними==== * [[εξιτήριος]] '''(прид.)''' — излезен, за отпуст ===Изведени поими=== * [[εισιτήριο]] '''(им.)''' — билет, влезница (именка) * [[εισιτηριοδιαφυγή]] '''(им.)''' — шверцување (именка) * [[εισιτηριοαποφυγή]] '''(им.)''' — шверцување (именка) ===Сложени поими=== * [[εισιτήριος λόγος]] — влезен говор, воведен говор [[Категорија:Грчки|ΕΙΣΙΤΗΡΙΟΣ]] [[Категорија:Грчки придавки|ΕΙΣΙΤΗΡΙΟΣ]] qmmm59zrhpaavj9wt7hd6ih74hp71w1 ουσιώδης 0 10742 56396 55188 2026-09-10T17:57:51Z Steborce 2506 56396 wikitext text/x-wiki {{-el-}} ===Етимологија=== Од старогрчкиот збор [[οὐσιώδης]] („суштински, битен“), изведен од [[οὐσία]] (ousía, „суштина“). ===Изговор=== * [[МФΑ]]-gr: /u.siˈo.ðis/ * Поделба по слогови: ου‧σι‧ώ‧δης ===Придавка=== '''ουσιώδης''' • придавка од машки и женски род (среден род [[ουσιώδες]]) #[[суштински]], [[битен]] - Кој се однесува на самата суштина или на најважните елементи на некоја идеја. #:'''Υπάρχουν ουσιώδεις διαφορές μεταξύ τους.''' #:''Постојат суштински разлики меѓу нив.'' #[[основен]], [[фундаментален]],[[суштински]] - Кој е многу важен, фундаментален. #:'''Η λογική είναι το ουσιωδέστερο γνώρισμα του ανθρώπου.''' #:''Логиката е најсуштинската карактеристика на човекот.'' #[[неопходен]], [[витален]] - Кој е апсолутно неопходен, без кој не може да се живее или функционира. #:'''Tο οξυγόνο είναι ουσιώδες για τη ζωή.''' #:''Кислородот е неопходен за животот.'' ===Деклинација на придавката=== {{el-cases-conj| {{PAGENAME}} }} {{#invoke:el-c-conj-tests|run_tests}} ===Синоними=== * [[βασικός]] '''(прид.)''' — основен, базичен * [[σημαντικός]] '''(прид.)''' — значаен, важен * [[καίριος]] '''(прид.)''' — клучен, пресуден ===Антоними=== * [[επουσιώδης]] '''(прид.)''' — несуштински, небитен (директен антоним) * [[ασήμαντος]] '''(прид.)''' — неважен, безначаен * [[δευτερεύων]] '''(прид.)''' — спореден, секундарен ===Изведени поими=== * [[ουσία]] '''(им.)''' — суштина, материја (коренски збор) [[Категорија:Грчки|ΟΥΣΙΩΔΗΣ]] [[Категорија:Грчки придавки|ΟΥΣΙΩΔΗΣ]] qq734v7unfcm7z1kv2skn8k85z5908k στέρεος 0 11074 56424 56226 2026-09-11T09:53:16Z Steborce 2506 56424 wikitext text/x-wiki {{-el-}} === Етимологија === [[στερεός]] < (дијахронично) старогрчки [[στερεός]]. Видете и: [[στέρεος]] & [[στέριος]]. Сродни зборови: [[στέρφος]], [[στριφνός]] > [[στρυφνός]]. === Изговор === * [[МФА]]: /ste.ɾeˈos/ * Поделба по слогови: στε‐ρε‐ός * Тоничен пароним: [[στέρεος]] === Придавка === '''στερεός''' придавка од машки род ( женски род [[στέρεη]] / [[στέρεα]] , среден род [[στέρεο]]) # [[цврст]] — состојба на материјата која се карактеризира со стабилен волумен и облик, за разлика од течната и гасовитата. #: '''Το σίδερο είναι ένα στερεό σώμα.''' #: ''Железото е цврсто тело.'' # [[тродимензионален]] — геометриски облик што има три димензии (должина, ширина и висина). #: '''Ο κύβος είναι ένα στερεό σχήμα.''' #: ''Коцката е геометриско тело со три димензии.'' # [[стабилен]] — кој е цврст, издржлив и непоколеблив (за предмети, ставови или односи). #: '''Έχει στερεή φιλία με τον Γιώργο.''' #: ''Има стабилно пријателство со Јоргос.'' === Деклинација === {{el-cases-conj|{{PAGENAME}}|αη}} === Повеќесложни термини === * [[Στερεά Ελλάδα]] — Стереа Елада (Централна Грција) * [[στερεά τροφή]] — цврста храна === Синоними === * [[σταθερός]] '''прид.''' — стабилен * [[ανθεκτικός]] '''прид.''' — отпорен * [[ακλόνητος]] '''прид.''' — непоколеблив === Антоними === * [[σαθρός]] '''прид.''' — ронлив, несигурен * [[ασθενής]] '''прид.''' — слаб === Сродни поими === * [[στηρίζω]] '''гл.''' — поддржува * [[στείρος]] '''прид.''' — јалов * [[στερεύω]] '''гл.''' — пресушува === Изведени поими === * [[στερεο-]] '''преф.''' — стерео- * [[αποστερεωμένος]] '''прид.''' — лишен, одземен * [[αποστερεώνω]] '''гл.''' — лишува, одзема * [[αποστερεώνομαι]] '''гл.''' — се лишува * [[αποστερέωση]] '''им.''' ж — лишување * [[αστερέωτα]] '''прил.''' — нестабилно * [[αστερέωτος]] '''прид.''' — нестабилен * [[ξαναστερεώνω]] '''гл.''' — повторно зацврстува * [[στερεά]] '''прил.''' — цврсто * [[στερεό]] '''им.''' ср — цврсто тело * [[στέρεο]] '''им.''' ср — стерео (аудио уред) * [[στέρεος]] '''прид.''' — цврст, стабилен * [[στέριος]] '''прид.''' — цврст * [[στεριά]] '''им.''' ж — копно * [[στεριώνω]] '''гл.''' — вкоренува, зацврстува * [[στερεότητα]] '''им.''' ж — цврстина * [[στερεώνω]] '''гл.''' — зацврстува * [[στερεώνομαι]] '''гл.''' — се зацврстува * [[στερέωμα]] '''им.''' ср — свод, темел * [[στερεωμένος]] '''прид.''' — зацврстен * [[στερέωση]] '''им.''' ж — зацврстување * [[στερεωτής]] '''им.''' м — зацврстувач * [[στερεωτικά]] '''прил.''' — зацврстувачки * [[στερεωτικό]] '''им.''' ср — средство за зацврстување * [[στερεωτικός]] '''прид.''' — зацврстувачки * [[στερεώτρια]] '''им.''' ж — зацврстувачка [[Категорија:Грчки јазик|ΣΤΕΡΕΟΣ]] [[Категорија:Грчки придавки|ΣΤΕΡΕΟΣ]] 4tdl4y4smzxqpdfntm9pgklrnirc21j 56425 56424 2026-09-11T09:55:54Z Steborce 2506 56425 wikitext text/x-wiki {{-el-}} === Етимологија === [[στερεός]] < (дијахронично) старогрчки [[στερεός]]. Видете и: [[στέρεος]] & [[στέριος]]. Сродни зборови: [[στέρφος]], [[στριφνός]] > [[στρυφνός]]. === Изговор === * [[МФА]]: /ste.ɾeˈos/ * Поделба по слогови: στε‐ρε‐ός * Тоничен пароним: [[στέρεος]] === Придавка === '''στερεός''' придавка од машки род ( женски род [[στέρεη]] / [[στέρεα]] , среден род [[στέρεο]]) # [[цврст]] — состојба на материјата која се карактеризира со стабилен волумен и облик, за разлика од течната и гасовитата. #: '''Το σίδερο είναι ένα στερεό σώμα.''' #: ''Железото е цврсто тело.'' # [[тродимензионален]] — геометриски облик што има три димензии (должина, ширина и висина). #: '''Ο κύβος είναι ένα στερεό σχήμα.''' #: ''Коцката е геометриско тело со три димензии.'' # [[стабилен]] — кој е цврст, издржлив и непоколеблив (за предмети, ставови или односи). #: '''Έχει στερεή φιλία με τον Γιώργο.''' #: ''Има стабилно пријателство со Јоргос.'' === Деклинација === {{el-cases-conj|{{PAGENAME}}|αη}} {{#invoke:el-c-conj-tests|run_tests}} {{#invoke:TestAdjectives|run_tests}} === Повеќесложни термини === * [[Στερεά Ελλάδα]] — Стереа Елада (Централна Грција) * [[στερεά τροφή]] — цврста храна === Синоними === * [[σταθερός]] '''прид.''' — стабилен * [[ανθεκτικός]] '''прид.''' — отпорен * [[ακλόνητος]] '''прид.''' — непоколеблив === Антоними === * [[σαθρός]] '''прид.''' — ронлив, несигурен * [[ασθενής]] '''прид.''' — слаб === Сродни поими === * [[στηρίζω]] '''гл.''' — поддржува * [[στείρος]] '''прид.''' — јалов * [[στερεύω]] '''гл.''' — пресушува === Изведени поими === * [[στερεο-]] '''преф.''' — стерео- * [[αποστερεωμένος]] '''прид.''' — лишен, одземен * [[αποστερεώνω]] '''гл.''' — лишува, одзема * [[αποστερεώνομαι]] '''гл.''' — се лишува * [[αποστερέωση]] '''им.''' ж — лишување * [[αστερέωτα]] '''прил.''' — нестабилно * [[αστερέωτος]] '''прид.''' — нестабилен * [[ξαναστερεώνω]] '''гл.''' — повторно зацврстува * [[στερεά]] '''прил.''' — цврсто * [[στερεό]] '''им.''' ср — цврсто тело * [[στέρεο]] '''им.''' ср — стерео (аудио уред) * [[στέρεος]] '''прид.''' — цврст, стабилен * [[στέριος]] '''прид.''' — цврст * [[στεριά]] '''им.''' ж — копно * [[στεριώνω]] '''гл.''' — вкоренува, зацврстува * [[στερεότητα]] '''им.''' ж — цврстина * [[στερεώνω]] '''гл.''' — зацврстува * [[στερεώνομαι]] '''гл.''' — се зацврстува * [[στερέωμα]] '''им.''' ср — свод, темел * [[στερεωμένος]] '''прид.''' — зацврстен * [[στερέωση]] '''им.''' ж — зацврстување * [[στερεωτής]] '''им.''' м — зацврстувач * [[στερεωτικά]] '''прил.''' — зацврстувачки * [[στερεωτικό]] '''им.''' ср — средство за зацврстување * [[στερεωτικός]] '''прид.''' — зацврстувачки * [[στερεώτρια]] '''им.''' ж — зацврстувачка [[Категорија:Грчки јазик|ΣΤΕΡΕΟΣ]] [[Категорија:Грчки придавки|ΣΤΕΡΕΟΣ]] obojec71oj0apysqmnshisumiekx3cr 56428 56425 2026-09-11T10:00:58Z Steborce 2506 56428 wikitext text/x-wiki {{-el-}} === Етимологија === [[στερεός]] < (дијахронично) старогрчки [[στερεός]]. Видете и: [[στέρεος]] & [[στέριος]]. Сродни зборови: [[στέρφος]], [[στριφνός]] > [[στρυφνός]]. === Изговор === * [[МФА]]: /ste.ɾeˈos/ * Поделба по слогови: στε‐ρε‐ός * Тоничен пароним: [[στέρεος]] === Придавка === '''στερεός''' придавка од машки род ( женски род [[στέρεη]] / [[στέρεα]] , среден род [[στέρεο]]) # [[цврст]] — состојба на материјата која се карактеризира со стабилен волумен и облик, за разлика од течната и гасовитата. #: '''Το σίδερο είναι ένα στερεό σώμα.''' #: ''Железото е цврсто тело.'' # [[тродимензионален]] — геометриски облик што има три димензии (должина, ширина и висина). #: '''Ο κύβος είναι ένα στερεό σχήμα.''' #: ''Коцката е геометриско тело со три димензии.'' # [[стабилен]] — кој е цврст, издржлив и непоколеблив (за предмети, ставови или односи). #: '''Έχει στερεή φιλία με τον Γιώργο.''' #: ''Има стабилно пријателство со Јоргос.'' === Деклинација === {{el-cases-conj|{{PAGENAME}}|α}} {{#invoke:el-c-conj-tests|run_tests}} {{#invoke:TestAdjectives|run_tests}} === Повеќесложни термини === * [[Στερεά Ελλάδα]] — Стереа Елада (Централна Грција) * [[στερεά τροφή]] — цврста храна === Синоними === * [[σταθερός]] '''прид.''' — стабилен * [[ανθεκτικός]] '''прид.''' — отпорен * [[ακλόνητος]] '''прид.''' — непоколеблив === Антоними === * [[σαθρός]] '''прид.''' — ронлив, несигурен * [[ασθενής]] '''прид.''' — слаб === Сродни поими === * [[στηρίζω]] '''гл.''' — поддржува * [[στείρος]] '''прид.''' — јалов * [[στερεύω]] '''гл.''' — пресушува === Изведени поими === * [[στερεο-]] '''преф.''' — стерео- * [[αποστερεωμένος]] '''прид.''' — лишен, одземен * [[αποστερεώνω]] '''гл.''' — лишува, одзема * [[αποστερεώνομαι]] '''гл.''' — се лишува * [[αποστερέωση]] '''им.''' ж — лишување * [[αστερέωτα]] '''прил.''' — нестабилно * [[αστερέωτος]] '''прид.''' — нестабилен * [[ξαναστερεώνω]] '''гл.''' — повторно зацврстува * [[στερεά]] '''прил.''' — цврсто * [[στερεό]] '''им.''' ср — цврсто тело * [[στέρεο]] '''им.''' ср — стерео (аудио уред) * [[στέρεος]] '''прид.''' — цврст, стабилен * [[στέριος]] '''прид.''' — цврст * [[στεριά]] '''им.''' ж — копно * [[στεριώνω]] '''гл.''' — вкоренува, зацврстува * [[στερεότητα]] '''им.''' ж — цврстина * [[στερεώνω]] '''гл.''' — зацврстува * [[στερεώνομαι]] '''гл.''' — се зацврстува * [[στερέωμα]] '''им.''' ср — свод, темел * [[στερεωμένος]] '''прид.''' — зацврстен * [[στερέωση]] '''им.''' ж — зацврстување * [[στερεωτής]] '''им.''' м — зацврстувач * [[στερεωτικά]] '''прил.''' — зацврстувачки * [[στερεωτικό]] '''им.''' ср — средство за зацврстување * [[στερεωτικός]] '''прид.''' — зацврстувачки * [[στερεώτρια]] '''им.''' ж — зацврстувачка [[Категорија:Грчки јазик|ΣΤΕΡΕΟΣ]] [[Категорија:Грчки придавки|ΣΤΕΡΕΟΣ]] s7f321kjkn8ay1wzz4yn2xk96poi94k 56429 56428 2026-09-11T10:02:21Z Steborce 2506 56429 wikitext text/x-wiki {{-el-}} === Етимологија === [[στερεός]] < (дијахронично) старогрчки [[στερεός]]. Видете и: [[στέρεος]] & [[στέριος]]. Сродни зборови: [[στέρφος]], [[στριφνός]] > [[στρυφνός]]. === Изговор === * [[МФА]]: /ste.ɾeˈos/ * Поделба по слогови: στε‐ρε‐ός * Тоничен пароним: [[στέρεος]] === Придавка === '''στερεός''' придавка од машки род ( женски род [[στέρεη]] / [[στέρεα]] , среден род [[στέρεο]]) # [[цврст]] — состојба на материјата која се карактеризира со стабилен волумен и облик, за разлика од течната и гасовитата. #: '''Το σίδερο είναι ένα στερεό σώμα.''' #: ''Железото е цврсто тело.'' # [[тродимензионален]] — геометриски облик што има три димензии (должина, ширина и висина). #: '''Ο κύβος είναι ένα στερεό σχήμα.''' #: ''Коцката е геометриско тело со три димензии.'' # [[стабилен]] — кој е цврст, издржлив и непоколеблив (за предмети, ставови или односи). #: '''Έχει στερεή φιλία με τον Γιώργο.''' #: ''Има стабилно пријателство со Јоргос.'' === Деклинација === {{el-cases-conj|{{PAGENAME}}}} {{#invoke:el-c-conj-tests|run_tests}} {{#invoke:TestAdjectives|run_tests}} === Повеќесложни термини === * [[Στερεά Ελλάδα]] — Стереа Елада (Централна Грција) * [[στερεά τροφή]] — цврста храна === Синоними === * [[σταθερός]] '''прид.''' — стабилен * [[ανθεκτικός]] '''прид.''' — отпорен * [[ακλόνητος]] '''прид.''' — непоколеблив === Антоними === * [[σαθρός]] '''прид.''' — ронлив, несигурен * [[ασθενής]] '''прид.''' — слаб === Сродни поими === * [[στηρίζω]] '''гл.''' — поддржува * [[στείρος]] '''прид.''' — јалов * [[στερεύω]] '''гл.''' — пресушува === Изведени поими === * [[στερεο-]] '''преф.''' — стерео- * [[αποστερεωμένος]] '''прид.''' — лишен, одземен * [[αποστερεώνω]] '''гл.''' — лишува, одзема * [[αποστερεώνομαι]] '''гл.''' — се лишува * [[αποστερέωση]] '''им.''' ж — лишување * [[αστερέωτα]] '''прил.''' — нестабилно * [[αστερέωτος]] '''прид.''' — нестабилен * [[ξαναστερεώνω]] '''гл.''' — повторно зацврстува * [[στερεά]] '''прил.''' — цврсто * [[στερεό]] '''им.''' ср — цврсто тело * [[στέρεο]] '''им.''' ср — стерео (аудио уред) * [[στέρεος]] '''прид.''' — цврст, стабилен * [[στέριος]] '''прид.''' — цврст * [[στεριά]] '''им.''' ж — копно * [[στεριώνω]] '''гл.''' — вкоренува, зацврстува * [[στερεότητα]] '''им.''' ж — цврстина * [[στερεώνω]] '''гл.''' — зацврстува * [[στερεώνομαι]] '''гл.''' — се зацврстува * [[στερέωμα]] '''им.''' ср — свод, темел * [[στερεωμένος]] '''прид.''' — зацврстен * [[στερέωση]] '''им.''' ж — зацврстување * [[στερεωτής]] '''им.''' м — зацврстувач * [[στερεωτικά]] '''прил.''' — зацврстувачки * [[στερεωτικό]] '''им.''' ср — средство за зацврстување * [[στερεωτικός]] '''прид.''' — зацврстувачки * [[στερεώτρια]] '''им.''' ж — зацврстувачка [[Категорија:Грчки јазик|ΣΤΕΡΕΟΣ]] [[Категорија:Грчки придавки|ΣΤΕΡΕΟΣ]] bqfhz3vf6erufs3hp1otbhxzxikpzxi 56430 56429 2026-09-11T10:04:35Z Steborce 2506 56430 wikitext text/x-wiki {{-el-}} === Етимологија === [[στερεός]] < (дијахронично) старогрчки [[στερεός]]. Видете и: [[στέρεος]] & [[στέριος]]. Сродни зборови: [[στέρφος]], [[στριφνός]] > [[στρυφνός]]. === Изговор === * [[МФА]]: /ste.ɾeˈos/ * Поделба по слогови: στε‐ρε‐ός * Тоничен пароним: [[στέρεος]] === Придавка === '''στερεός''' придавка од машки род ( женски род [[στέρεη]] / [[στέρεα]] , среден род [[στέρεο]]) # [[цврст]] — состојба на материјата која се карактеризира со стабилен волумен и облик, за разлика од течната и гасовитата. #: '''Το σίδερο είναι ένα στερεό σώμα.''' #: ''Железото е цврсто тело.'' # [[тродимензионален]] — геометриски облик што има три димензии (должина, ширина и висина). #: '''Ο κύβος είναι ένα στερεό σχήμα.''' #: ''Коцката е геометриско тело со три димензии.'' # [[стабилен]] — кој е цврст, издржлив и непоколеблив (за предмети, ставови или односи). #: '''Έχει στερεή φιλία με τον Γιώργο.''' #: ''Има стабилно пријателство со Јоргос.'' === Деклинација === {{el-cases-conj|{{PAGENAME}}|αη}} {{#invoke:el-c-conj-tests|run_tests}} {{#invoke:TestAdjectives|run_tests}} === Повеќесложни термини === * [[Στερεά Ελλάδα]] — Стереа Елада (Централна Грција) * [[στερεά τροφή]] — цврста храна === Синоними === * [[σταθερός]] '''прид.''' — стабилен * [[ανθεκτικός]] '''прид.''' — отпорен * [[ακλόνητος]] '''прид.''' — непоколеблив === Антоними === * [[σαθρός]] '''прид.''' — ронлив, несигурен * [[ασθενής]] '''прид.''' — слаб === Сродни поими === * [[στηρίζω]] '''гл.''' — поддржува * [[στείρος]] '''прид.''' — јалов * [[στερεύω]] '''гл.''' — пресушува === Изведени поими === * [[στερεο-]] '''преф.''' — стерео- * [[αποστερεωμένος]] '''прид.''' — лишен, одземен * [[αποστερεώνω]] '''гл.''' — лишува, одзема * [[αποστερεώνομαι]] '''гл.''' — се лишува * [[αποστερέωση]] '''им.''' ж — лишување * [[αστερέωτα]] '''прил.''' — нестабилно * [[αστερέωτος]] '''прид.''' — нестабилен * [[ξαναστερεώνω]] '''гл.''' — повторно зацврстува * [[στερεά]] '''прил.''' — цврсто * [[στερεό]] '''им.''' ср — цврсто тело * [[στέρεο]] '''им.''' ср — стерео (аудио уред) * [[στέρεος]] '''прид.''' — цврст, стабилен * [[στέριος]] '''прид.''' — цврст * [[στεριά]] '''им.''' ж — копно * [[στεριώνω]] '''гл.''' — вкоренува, зацврстува * [[στερεότητα]] '''им.''' ж — цврстина * [[στερεώνω]] '''гл.''' — зацврстува * [[στερεώνομαι]] '''гл.''' — се зацврстува * [[στερέωμα]] '''им.''' ср — свод, темел * [[στερεωμένος]] '''прид.''' — зацврстен * [[στερέωση]] '''им.''' ж — зацврстување * [[στερεωτής]] '''им.''' м — зацврстувач * [[στερεωτικά]] '''прил.''' — зацврстувачки * [[στερεωτικό]] '''им.''' ср — средство за зацврстување * [[στερεωτικός]] '''прид.''' — зацврстувачки * [[στερεώτρια]] '''им.''' ж — зацврстувачка [[Категорија:Грчки јазик|ΣΤΕΡΕΟΣ]] [[Категорија:Грчки придавки|ΣΤΕΡΕΟΣ]] obojec71oj0apysqmnshisumiekx3cr 56431 56430 2026-09-11T10:05:06Z Steborce 2506 56431 wikitext text/x-wiki {{-el-}} === Етимологија === [[στερεός]] < (дијахронично) старогрчки [[στερεός]]. Видете и: [[στέρεος]] & [[στέριος]]. Сродни зборови: [[στέρφος]], [[στριφνός]] > [[στρυφνός]]. === Изговор === * [[МФА]]: /ste.ɾeˈos/ * Поделба по слогови: στε‐ρε‐ός * Тоничен пароним: [[στέρεος]] === Придавка === '''στερεός''' придавка од машки род ( женски род [[στέρεη]] / [[στέρεα]] , среден род [[στέρεο]]) # [[цврст]] — состојба на материјата која се карактеризира со стабилен волумен и облик, за разлика од течната и гасовитата. #: '''Το σίδερο είναι ένα στερεό σώμα.''' #: ''Железото е цврсто тело.'' # [[тродимензионален]] — геометриски облик што има три димензии (должина, ширина и висина). #: '''Ο κύβος είναι ένα στερεό σχήμα.''' #: ''Коцката е геометриско тело со три димензии.'' # [[стабилен]] — кој е цврст, издржлив и непоколеблив (за предмети, ставови или односи). #: '''Έχει στερεή φιλία με τον Γιώργο.''' #: ''Има стабилно пријателство со Јоргос.'' === Деклинација === {{el-cases-conj|{{PAGENAME}}|αη}} === Повеќесложни термини === * [[Στερεά Ελλάδα]] — Стереа Елада (Централна Грција) * [[στερεά τροφή]] — цврста храна === Синоними === * [[σταθερός]] '''прид.''' — стабилен * [[ανθεκτικός]] '''прид.''' — отпорен * [[ακλόνητος]] '''прид.''' — непоколеблив === Антоними === * [[σαθρός]] '''прид.''' — ронлив, несигурен * [[ασθενής]] '''прид.''' — слаб === Сродни поими === * [[στηρίζω]] '''гл.''' — поддржува * [[στείρος]] '''прид.''' — јалов * [[στερεύω]] '''гл.''' — пресушува === Изведени поими === * [[στερεο-]] '''преф.''' — стерео- * [[αποστερεωμένος]] '''прид.''' — лишен, одземен * [[αποστερεώνω]] '''гл.''' — лишува, одзема * [[αποστερεώνομαι]] '''гл.''' — се лишува * [[αποστερέωση]] '''им.''' ж — лишување * [[αστερέωτα]] '''прил.''' — нестабилно * [[αστερέωτος]] '''прид.''' — нестабилен * [[ξαναστερεώνω]] '''гл.''' — повторно зацврстува * [[στερεά]] '''прил.''' — цврсто * [[στερεό]] '''им.''' ср — цврсто тело * [[στέρεο]] '''им.''' ср — стерео (аудио уред) * [[στέρεος]] '''прид.''' — цврст, стабилен * [[στέριος]] '''прид.''' — цврст * [[στεριά]] '''им.''' ж — копно * [[στεριώνω]] '''гл.''' — вкоренува, зацврстува * [[στερεότητα]] '''им.''' ж — цврстина * [[στερεώνω]] '''гл.''' — зацврстува * [[στερεώνομαι]] '''гл.''' — се зацврстува * [[στερέωμα]] '''им.''' ср — свод, темел * [[στερεωμένος]] '''прид.''' — зацврстен * [[στερέωση]] '''им.''' ж — зацврстување * [[στερεωτής]] '''им.''' м — зацврстувач * [[στερεωτικά]] '''прил.''' — зацврстувачки * [[στερεωτικό]] '''им.''' ср — средство за зацврстување * [[στερεωτικός]] '''прид.''' — зацврстувачки * [[στερεώτρια]] '''им.''' ж — зацврстувачка [[Категорија:Грчки јазик|ΣΤΕΡΕΟΣ]] [[Категорија:Грчки придавки|ΣΤΕΡΕΟΣ]] 4tdl4y4smzxqpdfntm9pgklrnirc21j Модул:el-c-conj-tests 828 11120 56356 56355 2026-09-10T14:25:27Z Steborce 2506 56356 Scribunto text/plain local p = {} local c = require('Module:el-c-conj') -- Helper function to parse module output string into a table of forms local function parse_module_output(output_str) local forms = {} -- Extract everything inside double brackets [[...]] across the entire output string for word in string.gmatch(output_str, "%[%[(.-)%]%]") do -- If it's a piped link like [[έγγραφο|έγγραφη]], grab the right side, else the whole word local actual_word = word:match("|(.+)$") or word table.insert(forms, actual_word) end return forms end -- 1. Function to run automated string-matching tests function p.run_tests(frame) local results = {} table.insert(results, "Running Automated Tests for Refactored Module") local test_cases = { { word = "έγγραφος", expected = { Nom = {"έγγραφος", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"}, Gen = {"εγγράφου", "έγγραφης", "εγγράφου", "εγγράφων", "εγγράφων", "εγγράφων"}, Acu = {"έγγραφο", "έγγραφη", "έγγραφο", "έγγραφους", "έγγραφες", "έγγραφα"}, Voc = {"έγγραφε", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"} } } } for _, test in ipairs(test_cases) do table.insert(results, "Testing adjective: " .. test.word) -- Mock frame required by your refactored module local mock_frame = { args = { [1] = test.word }, getParent = function(self) return { args = {} } end } local function run_case(case_name, func, expected_list) if not func then table.insert(results, " [ERROR] " .. case_name .. " function is nil") return end local success, output = pcall(func, mock_frame) if not success then table.insert(results, " [ERROR] " .. case_name .. " threw error: " .. tostring(output)) return end local forms = parse_module_output(output) for i, exp in ipairs(expected_list) do local got = forms[i] or "nil" if got == exp then table.insert(results, " [PASS] " .. case_name .. " form #" .. i .. ": got '" .. got .. "'") else table.insert(results, " [FAIL] " .. case_name .. " form #" .. i .. ": got '" .. got .. "', expected '" .. exp .. "'") end end end run_case("Nom", c.Nominativ_case, test.expected.Nom) run_case("Gen", c.Genitiv_case, test.expected.Gen) run_case("Acu", c.Acutativ_case, test.expected.Acu) run_case("Voc", c.Vocativ_case, test.expected.Voc) end return table.concat(results, "<br>") end -- 2. Function to visually display the raw strings in a Wikitable function p.show_table(frame) local word = frame.args[1] or "έγγραφος" local mock_frame = { args = { [1] = word }, getParent = function(self) return { args = {} } end } local function safe_call(func) if not func then return "|- \n | '''Error''' || Function missing || || || || ||" end local success, output = pcall(func, mock_frame) if success then return output else local err_msg = tostring(output):gsub("\n", " ") return "|- \n | '''Error''' || " .. err_msg .. " || || || || ||" end end -- Builds the actual MediaWiki table syntax local table_markup = '{| class="wikitable"\n' .. '! Падеж !! Машки род !! Женски род !! Среден род !! Машки род (Мн.) !! Женски род (Мн.) !! Среден род (Мн.)\n' .. safe_call(c.Nominativ_case) .. '\n' .. safe_call(c.Genitiv_case) .. '\n' .. safe_call(c.Acutativ_case) .. '\n' .. safe_call(c.Vocativ_case) .. '\n' .. '|}' return table_markup end return p 52dgppv4k1liyk9wxeyveomqo5gpoxl 56357 56356 2026-09-10T14:35:13Z Steborce 2506 56357 Scribunto text/plain local p = {} local el_c = require("Module:el-c-conj") -- Помошна функција за симулирање на MediaWiki frame local function make_frame(word, svr) return { getParent = function() return { args = { [1] = word, [2] = svr or "" } } end } end -- Помошна функција за извлекување на зборовите од вики-линковите [[ ... ]] local function parse_wikitext_row(wikitext) local forms = {} if not wikitext then return forms end for form in wikitext:gmatch("%[%[([^%]]+)%]%]") do table.insert(forms, form) end return forms end function p.run_tests(frame) -- ============================================================= -- ТУКА ТУРАЈ ГИ СИТЕ ТВОИ ТЕСТ-ПРИМЕРИ И ОЧЕКУВАНИ ИЗЛЕЗИ -- ============================================================= local test_cases = { { word = "έγγραφος", svr = "", expected = { Nom = {"έγγραφος", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"}, Gen = {"εγγράφου", "έγγραφης", "εγγράφου", "εγγράφων", "εγγράφων", "εγγράφων"}, Acu = {"έγγραφο", "έγγραφη", "έγγραφο", "έγγραφους", "έγγραφες", "έγγραφα"}, Voc = {"έγγραφε", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"} } }, { word = "φιλικός", svr = "", expected = { Nom = {"φιλικός", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"}, Gen = {"φιλικού", "φιλικής", "φιλικού", "φιλικών", "φιλικών", "φιλικών"}, Acu = {"φιλικό", "φιλική", "φιλικό", "φιλικούς", "φιλικές", "φιλικά"}, Voc = {"φιλικέ", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"} } }, { word = "μακρύς", svr = "", expected = { Nom = {"μακρύς", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"}, Gen = {"μακριού", "μακριάς", "μακριού", "μακριών", "μακριών", "μακριών"}, Acu = {"μακρύ", "μακριά", "μακρύ", "μακριούς", "μακριές", "μακριά"}, Voc = {"μακρύ", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"} } }, { word = "ζηλιάρης", svr = "", expected = { Nom = {"ζηλιάρης", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάрика"}, Gen = {"ζηλιάρη", "ζηλιάρας", "ζηλιάρικου", "ζηλιάρηδων", "ζηλιάρων", "ζηλιάρικων"}, Acu = {"ζηλιάρη", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάрика"}, Voc = {"ζηλιάρη", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάрика"} } } } local cases_to_run = { { code = "Nom", label = "Номинатив", func = el_c.Nominativ_case }, { code = "Gen", label = "Генитив", func = el_c.Genitiv_case }, { code = "Acu", label = "Акузатив", func = el_c.Acusativ_case }, { code = "Voc", label = "Вокатив", func = el_c.Vocativ_case } } local position_names = { "Еднина (М)", "Еднина (Ж)", "Еднина (С)", "Множина (М)", "Множина (Ж)", "Множина (С)" } local html = {'{| class="wikitable" style="font-size: 90%; text-align: center; border-collapse: collapse;"'} table.insert(html, '! Збор !! Падеж !! Форма !! Очекувано (Expected) !! Добиено (Actual) !! Статус') local total_passed = 0 local total_failed = 0 for _, test in ipairs(test_cases) do local test_frame = make_frame(test.word, test.svr) for _, c in ipairs(cases_to_run) do local raw_wikitext = c.func(test_frame) local actual_forms = parse_wikitext_row(raw_wikitext) local expected_forms = test.expected[c.code] or {} for i = 1, 6 do local exp = expected_forms[i] or "N/A" local act = actual_forms[i] or "N/A" local is_pass = (exp == act) if is_pass then total_passed = total_passed + 1 else total_failed = total_failed + 1 end local status_html = is_pass and 'style="background-color: #d4edda; color: #155724; font-weight: bold;" | PASS' or 'style="background-color: #f8d7da; color: #721c24; font-weight: bold;" | FAIL' table.insert(html, string.format( '|-\n| \'\'\'%s\'\'\' || %s || %s || %s || %s || %s', test.word, c.label, position_names[i], exp, act, status_html )) end end end table.insert(html, '|}') local summary_style = (total_failed == 0) and 'padding: 8px; background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; margin-bottom: 10px;' or 'padding: 8px; background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; margin-bottom: 10px;' local summary = string.format( '<div style="%s">\'\'\'Резултат од тестирањето:\'\'\' %d поминати (PASS), %d грешки (FAIL).</div>\n\n', summary_style, total_passed, total_failed ) return summary .. table.concat(html, "\n") end return p bd2bt9a056luuo1r0prk6lrldcbgm2w 56358 56357 2026-09-10T14:37:49Z Steborce 2506 56358 Scribunto text/plain local p = {} local el_c = require("Module:el-c-conj") -- Helper to mock the MediaWiki frame object passed to export functions local function make_frame(word, svr) return { getParent = function() return { args = { [1] = word, [2] = svr or "" } } end } end -- Helper to extract links [[word]] from the generated Wikitext output row local function parse_wikitext_row(wikitext) local forms = {} if not wikitext then return forms end for form in wikitext:gmatch("%[%[([^%]]+)%]%]") do table.insert(forms, form) end return forms end function p.run_tests(frame) -- All expected forms use strict Modern Greek script local test_cases = { { word = "έγγραφος", svr = "", expected = { Nom = {"έγγραφος", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"}, Gen = {"εγγράφου", "έγγραφης", "εγγράφου", "εγγράφων", "εγγράφων", "εγγράφων"}, Acu = {"έγγραφο", "έγγραφη", "έγγραφο", "έγγραφους", "έγγραφες", "έγγραφα"}, Voc = {"έγγραφε", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"} } }, { word = "φιλικός", svr = "", expected = { Nom = {"φιλικός", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"}, Gen = {"φιλικού", "φιλικής", "φιλικού", "φιλικών", "φιλικών", "φιλικών"}, Acu = {"φιλικό", "φιλική", "φιλικό", "φιλικούς", "φιλικές", "φιλικά"}, Voc = {"φιλικέ", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"} } }, { word = "μακρύς", svr = "", expected = { Nom = {"μακρύς", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"}, Gen = {"μακριού", "μακριάς", "μακριού", "μακριών", "μακριών", "μακριών"}, Acu = {"μακρύ", "μακριά", "μακρύ", "μακριούς", "μακριές", "μακριά"}, Voc = {"μακρύ", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"} } }, { word = "ζηλιάρης", svr = "", expected = { Nom = {"ζηλιάρης", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάрика"}, Gen = {"ζηλιάρη", "ζηλιάρας", "ζηλιάρικου", "ζηλιάρηδων", "ζηλιάρων", "ζηλιάρικων"}, Acu = {"ζηλιάρη", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάрика"}, Voc = {"ζηλιάρη", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάрика"} } } } local cases_to_run = { { code = "Nom", label = "Nominative", func = el_c.Nominativ_case }, { code = "Gen", label = "Genitive", func = el_c.Genitiv_case }, { code = "Acu", label = "Accusative", func = el_c.Acusativ_case }, { code = "Voc", label = "Vocative", func = el_c.Vocativ_case } } local position_names = { "Sg M", "Sg F", "Sg N", "Pl M", "Pl F", "Pl N" } local html = {'{| class="wikitable" style="font-size: 90%; text-align: center; border-collapse: collapse;"'} table.insert(html, '! Word !! Case !! Form !! Expected !! Actual !! Status') local total_passed = 0 local total_failed = 0 for _, test in ipairs(test_cases) do local test_frame = make_frame(test.word, test.svr) for _, c in ipairs(cases_to_run) do local raw_wikitext = c.func(test_frame) local actual_forms = parse_wikitext_row(raw_wikitext) local expected_forms = test.expected[c.code] or {} for i = 1, 6 do local exp = expected_forms[i] or "N/A" local act = actual_forms[i] or "N/A" local is_pass = (exp == act) if is_pass then total_passed = total_passed + 1 else total_failed = total_failed + 1 end local status_html = is_pass and 'style="background-color: #d4edda; color: #155724; font-weight: bold;" | PASS' or 'style="background-color: #f8d7da; color: #721c24; font-weight: bold;" | FAIL' table.insert(html, string.format( '|-\n| \'\'\'%s\'\'\' || %s || %s || %s || %s || %s', test.word, c.label, position_names[i], exp, act, status_html )) end end end table.insert(html, '|}') local summary_style = (total_failed == 0) and 'padding: 8px; background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; margin-bottom: 10px;' or 'padding: 8px; background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; margin-bottom: 10px;' local summary = string.format( '<div style="%s">\'\'\'Test Results:\'\'\' %d passed (PASS), %d failed (FAIL).</div>\n\n', summary_style, total_passed, total_failed ) return summary .. table.concat(html, "\n") end return p 1tqgglfwg6trum2s7xt2hd77dls9xuh 56359 56358 2026-09-10T14:44:33Z Steborce 2506 56359 Scribunto text/plain local p = {} local el_c = require("Module:el-c-conj") -- Помошна функција за симулирање на MediaWiki frame local function make_frame(word, svr) return { getParent = function() return { args = { [1] = word, [2] = svr or "" } } end } end -- Помошна функција за извлекување на зборовите од вики-линковите [[ ... ]] local function parse_wikitext_row(wikitext) local forms = {} if not wikitext then return forms end for form in wikitext:gmatch("%[%[([^%]]+)%]%]") do table.insert(forms, form) end return forms end function p.run_tests(frame) local test_cases = { { word = "έγγραφος", svr = "", expected = { Nom = {"έγγραφος", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"}, Gen = {"εγγράφου", "έγγραφης", "εγγράφου", "εγγράφων", "εγγράφων", "εγγράφων"}, Acu = {"έγγραφο", "έγγραφη", "έγγραφο", "έγγραφους", "έγγραφες", "έγγραφα"}, Voc = {"έγγραφε", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"} } }, { word = "φιλικός", svr = "", expected = { Nom = {"φιλικός", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"}, Gen = {"φιλικού", "φιλικής", "φιλικού", "φιλικών", "φιλικών", "φιλικών"}, Acu = {"φιλικό", "φιλική", "φιλικό", "φιλικούς", "φιλικές", "φιλικά"}, Voc = {"φιλικέ", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"} } }, { word = "μακρύς", svr = "", expected = { Nom = {"μακρύς", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"}, Gen = {"μακριού", "μακριάς", "μακριού", "μακριών", "μακριών", "μακριών"}, Acu = {"μακρύ", "μακριά", "μακρύ", "μακριούς", "μακριές", "μακριά"}, Voc = {"μακρύ", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"} } }, { word = "ζηλιάρης", svr = "", expected = { Nom = {"ζηλιάρης", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάрика"}, Gen = {"ζηλιάρη", "ζηλιάρας", "ζηλιάρικου", "ζηλιάρηδων", "ζηλιάρων", "ζηλιάρικων"}, Acu = {"ζηλιάρη", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάрика"}, Voc = {"ζηλιάρη", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάрика"} } } } local cases_to_run = { { code = "Nom", label = "Nominative", func = el_c.Nominativ_case }, { code = "Gen", label = "Genitive", func = el_c.Genitiv_case }, { code = "Acu", label = "Accusative", func = el_c.Acusativ_case }, { code = "Voc", label = "Vocative", func = el_c.Vocativ_case } } local position_names = { "Sg M", "Sg F", "Sg N", "Pl M", "Pl F", "Pl N" } local html = {'{| class="wikitable" style="font-size: 90%; text-align: center; border-collapse: collapse;"'} table.insert(html, '! Word !! Case !! Form !! Expected !! Actual !! Status') local total_passed = 0 local total_failed = 0 for _, test in ipairs(test_cases) do local test_frame = make_frame(test.word, test.svr) for _, c in ipairs(cases_to_run) do local raw_wikitext = c.func(test_frame) local actual_forms = parse_wikitext_row(raw_wikitext) local expected_forms = test.expected[c.code] or {} for i = 1, 6 do local exp = expected_forms[i] or "N/A" local act = actual_forms[i] or "N/A" local is_pass = (exp == act) if is_pass then total_passed = total_passed + 1 else total_failed = total_failed + 1 end local status_html = is_pass and 'style="background-color: #d4edda; color: #155724; font-weight: bold;" | PASS' or 'style="background-color: #f8d7da; color: #721c24; font-weight: bold;" | FAIL' table.insert(html, string.format( '|-\n| \'\'\'%s\'\'\' || %s || %s || %s || %s || %s', test.word, c.label, position_names[i], exp, act, status_html )) end end end table.insert(html, '|}') local summary_style = (total_failed == 0) and 'padding: 8px; background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; margin-bottom: 10px;' or 'padding: 8px; background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; margin-bottom: 10px;' local summary = string.format( '<div style="%s">\'\'\'Test Results:\'\'\' %d passed (PASS), %d failed (FAIL).</div>\n\n', summary_style, total_passed, total_failed ) return summary .. table.concat(html, "\n") end return p jko8lwull2stwdprllrmue3g5ae3bh5 56360 56359 2026-09-10T14:48:20Z Steborce 2506 56360 Scribunto text/plain local p = {} local el_c = require("Module:el-c-conj") -- Помошна функција за симулирање на MediaWiki frame local function make_frame(word, svr) return { getParent = function() return { args = { [1] = word, [2] = svr or "" } } end } end -- Помошна функција за извлекување на зборовите од вики-линковите [[ ... ]] local function parse_wikitext_row(wikitext) local forms = {} if not wikitext then return forms end for form in wikitext:gmatch("%[%[([^%]]+)%]%]") do table.insert(forms, form) end return forms end function p.run_tests(frame) local test_cases = { { word = "έγγραφος", svr = "", expected = { Nom = {"έγγραφος", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"}, Gen = {"εγγράφου", "έγγραφης", "εγγράφου", "εγγράφων", "εγγράφων", "εγγράφων"}, Acu = {"έγγραφο", "έγγραφη", "έγγραφο", "έγγραφους", "έγγραφες", "έγγραφα"}, Voc = {"έγγραφε", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"} } }, { word = "φιλικός", svr = "", expected = { Nom = {"φιλικός", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"}, Gen = {"φιλικού", "φιλικής", "φιλικού", "φιλικών", "φιλικών", "φιλικών"}, Acu = {"φιλικό", "φιλική", "φιλικό", "φιλικούς", "φιλικές", "φιλικά"}, Voc = {"φιλικέ", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"} } }, { word = "μακρύς", svr = "", expected = { Nom = {"μακρύς", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"}, Gen = {"μακριού", "μακριάς", "μακριού", "μακριών", "μακριών", "μακριών"}, Acu = {"μακρύ", "μακριά", "μακρύ", "μακριούς", "μακριές", "μακριά"}, Voc = {"μακρύ", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"} } }, { word = "ζηλιάρης", svr = "", expected = { Nom = {"ζηλιάρης", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάρικα"}, Gen = {"ζηλιάρη", "ζηλιάρας", "ζηλιάρικου", "ζηλιάρηδων", "ζηλιάρων", "ζηλιάρικων"}, Acu = {"ζηλιάρη", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάρικα"}, Voc = {"ζηλιάρη", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάρικα"} } } } local cases_to_run = { { code = "Nom", label = "Nominative", func = el_c.Nominativ_case }, { code = "Gen", label = "Genitive", func = el_c.Genitiv_case }, { code = "Acu", label = "Accusative", func = el_c.Acusativ_case }, { code = "Voc", label = "Vocative", func = el_c.Vocativ_case } } local position_names = { "Sg M", "Sg F", "Sg N", "Pl M", "Pl F", "Pl N" } local html = {'{| class="wikitable" style="font-size: 90%; text-align: center; border-collapse: collapse;"'} table.insert(html, '! Word !! Case !! Form !! Expected !! Actual !! Status') local total_passed = 0 local total_failed = 0 for _, test in ipairs(test_cases) do local test_frame = make_frame(test.word, test.svr) for _, c in ipairs(cases_to_run) do local raw_wikitext = c.func(test_frame) local actual_forms = parse_wikitext_row(raw_wikitext) local expected_forms = test.expected[c.code] or {} for i = 1, 6 do local exp = expected_forms[i] or "N/A" local act = actual_forms[i] or "N/A" local is_pass = (exp == act) if is_pass then total_passed = total_passed + 1 else total_failed = total_failed + 1 end local status_html = is_pass and 'style="background-color: #d4edda; color: #155724; font-weight: bold;" | PASS' or 'style="background-color: #f8d7da; color: #721c24; font-weight: bold;" | FAIL' table.insert(html, string.format( '|-\n| \'\'\'%s\'\'\' || %s || %s || %s || %s || %s', test.word, c.label, position_names[i], exp, act, status_html )) end end end table.insert(html, '|}') local summary_style = (total_failed == 0) and 'padding: 8px; background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; margin-bottom: 10px;' or 'padding: 8px; background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; margin-bottom: 10px;' local summary = string.format( '<div style="%s">\'\'\'Test Results:\'\'\' %d passed (PASS), %d failed (FAIL).</div>\n\n', summary_style, total_passed, total_failed ) return summary .. table.concat(html, "\n") end return p 731heb168au93p5umxvp9xg58prr2hu 56361 56360 2026-09-10T14:51:27Z Steborce 2506 56361 Scribunto text/plain local p = {} local el_c = require("Module:el-c-conj") local function make_frame(word, svr) return { getParent = function() return { args = { [1] = word, [2] = svr or "" } } end } end local function parse_wikitext_row(wikitext) local forms = {} if not wikitext then return forms end for form in wikitext:gmatch("%[%[([^%]]+)%]%]") do table.insert(forms, form) end return forms end function p.run_tests(frame) local test_cases = { { word = "έγγραφος", svr = "", expected = { Nom = {"έγγραφος", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"}, Gen = {"έγγραφου", "έγγραφης", "έγγραφου", "έγγραφων", "έγγραφων", "έγγραφων"}, Acu = {"έγγραφο", "έγγραφη", "έγγραφο", "έγγραφους", "έγγραφες", "έγγραφα"}, Voc = {"έγγραφε", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"} } }, { word = "φιλικός", svr = "", expected = { Nom = {"φιλικός", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"}, Gen = {"φιλικού", "φιλικής", "φιλικού", "φιλικών", "φιλικών", "φιλικών"}, Acu = {"φιλικό", "φιλική", "φιλικό", "φιλικούς", "φιλικές", "φιλικά"}, Voc = {"φιλικέ", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"} } }, { word = "μακρύς", svr = "", expected = { Nom = {"μακρύς", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"}, Gen = {"μακριού", "μακριάς", "μακριού", "μακριών", "μακριών", "μακριών"}, Acu = {"μακρύ", "μακριά", "μακρύ", "μακριούς", "μακριές", "μακριά"}, Voc = {"μακρύ", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"} } }, { word = "ζηλιάρης", svr = "", expected = { Nom = {"ζηλιάρης", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάρικα"}, Gen = {"ζηλιάρη", "ζηλιάρας", "ζηλιάρικου", "ζηλιάρηδων", "ζηλιάρων", "ζηλιάρικων"}, Acu = {"ζηλιάρη", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάρικα"}, Voc = {"ζηλιάρη", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάρικα"} } } } local cases_to_run = { { code = "Nom", label = "Nominative", func = el_c.Nominativ_case }, { code = "Gen", label = "Genitive", func = el_c.Genitiv_case }, { code = "Acu", label = "Accusative", func = el_c.Acusativ_case }, { code = "Voc", label = "Vocative", func = el_c.Vocativ_case } } local position_names = { "Sg M", "Sg F", "Sg N", "Pl M", "Pl F", "Pl N" } local html = {'{| class="wikitable" style="font-size: 90%; text-align: center; border-collapse: collapse;"'} table.insert(html, '! Word !! Case !! Form !! Expected !! Actual !! Status') local total_passed = 0 local total_failed = 0 for _, test in ipairs(test_cases) do local test_frame = make_frame(test.word, test.svr) for _, c in ipairs(cases_to_run) do local raw_wikitext = c.func(test_frame) local actual_forms = parse_wikitext_row(raw_wikitext) local expected_forms = test.expected[c.code] or {} for i = 1, 6 do local exp = expected_forms[i] or "N/A" local act = actual_forms[i] or "N/A" local is_pass = (exp == act) if is_pass then total_passed = total_passed + 1 else total_failed = total_failed + 1 end local status_html = is_pass and 'style="background-color: #d4edda; color: #155724; font-weight: bold;" | PASS' or 'style="background-color: #f8d7da; color: #721c24; font-weight: bold;" | FAIL' table.insert(html, string.format( '|-\n| \'\'\'%s\'\'\' || %s || %s || %s || %s || %s', test.word, c.label, position_names[i], exp, act, status_html )) end end end table.insert(html, '|}') local summary_style = (total_failed == 0) and 'padding: 8px; background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; margin-bottom: 10px;' or 'padding: 8px; background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; margin-bottom: 10px;' local summary = string.format( '<div style="%s">\'\'\'Test Results:\'\'\' %d passed (PASS), %d failed (FAIL).</div>\n\n', summary_style, total_passed, total_failed ) return summary .. table.concat(html, "\n") end return p ebgzb1q7wn2pu50dso0sc7ri4baul4t 56362 56361 2026-09-10T14:56:52Z Steborce 2506 56362 Scribunto text/plain local p = {} local el_c = require("Module:el-c-conj") -- Помошна функција за симулирање на MediaWiki frame local function make_frame(word, svr) return { getParent = function() return { args = { [1] = word, [2] = svr or "" } } end } end -- Помошна функција за извлекување на зборовите од вики-линковите [[ ... ]] local function parse_wikitext_row(wikitext) local forms = {} if not wikitext then return forms end for form in wikitext:gmatch("%[%[([^%]]+)%]%]") do table.insert(forms, form) end return forms end function p.run_tests(frame) local test_cases = { { word = "έγγραφος", svr = "", expected = { Nom = {"έγγραφος", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"}, Gen = {"έγγραφου", "έγγραφης", "έγγραφου", "έγγραφων", "έγγραφων", "έγγραφων"}, Acu = {"έγγραφο", "έγγραφη", "έγγραφο", "έγγραφους", "έγγραφες", "έγγραφα"}, Voc = {"έγγραφε", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"} } }, { word = "φιλικός", svr = "", expected = { Nom = {"φιλικός", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"}, Gen = {"φιλικού", "φιλικής", "φιλικού", "φιλικών", "φιλικών", "φιλικών"}, Acu = {"φιλικό", "φιλική", "φιλικό", "φιλικούς", "φιλικές", "φιλικά"}, Voc = {"φιλικέ", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"} } }, { word = "μακρύς", svr = "", expected = { Nom = {"μακρύς", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"}, Gen = {"μακριού", "μακριάς", "μακριού", "μακριών", "μακριών", "μακριών"}, Acu = {"μακρύ", "μακριά", "μακρύ", "μακριούς", "μακριές", "μακριά"}, Voc = {"μακρύ", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"} } }, { word = "ζηλιάρης", svr = "", expected = { Nom = {"ζηλιάρης", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάρικα"}, Gen = {"ζηλιάρη", "ζηλιάρας", "ζηλιάρικου", "ζηλιάρηδων", "ζηλιάρων", "ζηλιάρικων"}, Acu = {"ζηλιάρη", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάρικα"}, Voc = {"ζηλιάρη", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάρικα"} } } } local cases_to_run = { { code = "Nom", label = "Nominative", func = el_c.Nominativ_case }, { code = "Gen", label = "Genitive", func = el_c.Genitiv_case }, { code = "Acu", label = "Accusative", func = el_c.Acusativ_case }, { code = "Voc", label = "Vocative", func = el_c.Vocativ_case } } local position_names = { "Sg M", "Sg F", "Sg N", "Pl M", "Pl F", "Pl N" } local html = {'{| class="wikitable" style="font-size: 90%; text-align: center; border-collapse: collapse;"'} table.insert(html, '! Word !! Case !! Form !! Expected !! Actual !! Status') local total_passed = 0 local total_failed = 0 for _, test in ipairs(test_cases) do local test_frame = make_frame(test.word, test.svr) for _, c in ipairs(cases_to_run) do local raw_wikitext = c.func(test_frame) local actual_forms = parse_wikitext_row(raw_wikitext) local expected_forms = test.expected[c.code] or {} for i = 1, 6 do local exp = expected_forms[i] or "N/A" local act = actual_forms[i] or "N/A" local is_pass = (exp == act) if is_pass then total_passed = total_passed + 1 else total_failed = total_failed + 1 end local status_html = is_pass and 'style="background-color: #d4edda; color: #155724; font-weight: bold;" | PASS' or 'style="background-color: #f8d7da; color: #721c24; font-weight: bold;" | FAIL' table.insert(html, string.format( '|-\n| \'\'\'%s\'\'\' || %s || %s || %s || %s || %s', test.word, c.label, position_names[i], exp, act, status_html )) end end end table.insert(html, '|}') local summary_style = (total_failed == 0) and 'padding: 8px; background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; margin-bottom: 10px;' or 'padding: 8px; background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; margin-bottom: 10px;' local summary = string.format( '<div style="%s">\'\'\'Test Results:\'\'\' %d passed (PASS), %d failed (FAIL).</div>\n\n', summary_style, total_passed, total_failed ) return summary .. table.concat(html, "\n") end return p hvethhf9cncu9cw4xlh7yrarojdnpxm 56363 56362 2026-09-10T15:02:42Z Steborce 2506 56363 Scribunto text/plain local p = {} local el_c = require("Module:el-c-conj") -- Помошна функција за симулирање на MediaWiki frame local function make_frame(word, svr) return { getParent = function() return { args = { [1] = word, [2] = svr or "" } } end } end -- Помошна функција за извлекување на зборовите од вики-линковите [[ ... ]] local function parse_wikitext_row(wikitext) local forms = {} if not wikitext then return forms end for form in wikitext:gmatch("%[%[([^%]]+)%]%]") do table.insert(forms, form) end return forms end function p.run_tests(frame) local test_cases = { { word = "έγγραφος", svr = "", expected = { Nom = {"έγγραφος", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"}, Gen = {"έγγραφου", "έγγραφης", "έγγραφου", "έγγραφων", "έγγραφων", "έγγραφων"}, Acu = {"έγγραφο", "έγγραφη", "έγγραφο", "έγγραφους", "έγγραφες", "έγγραφα"}, Voc = {"έγγραφε", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"} } }, { word = "άθλιος", svr = "α", expected = { Nom = {"άθλιος", "άθλια", "άθλιο", "άθλιοι", "άθλιες", "άθλια"}, Gen = {"άθλιου", "άθλιας", "άθλιου", "άθλιων", "άθλιων", "άθλιων"}, Acu = {"άθλιο", "άθλια", "άθλιο", "άθλιους", "άθλιες", "άθλια"}, Voc = {"άθλιε", "άθλια", "άθλιο", "άθλιοι", "άθλιες", "άθλια"} } }, { word = "φιλικός", svr = "", expected = { Nom = {"φιλικός", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"}, Gen = {"φιλικού", "φιλικής", "φιλικού", "φιλικών", "φιλικών", "φιλικών"}, Acu = {"φιλικό", "φιλική", "φιλικό", "φιλικούς", "φιλικές", "φιλικά"}, Voc = {"φιλικέ", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"} } }, { word = "μακρύς", svr = "", expected = { Nom = {"μακρύς", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"}, Gen = {"μακριού", "μακριάς", "μακριού", "μακριών", "μακριών", "μακριών"}, Acu = {"μακρύ", "μακριά", "μακρύ", "μακριούς", "μακριές", "μακριά"}, Voc = {"μακρύ", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"} } }, { word = "ζηλιάρης", svr = "", expected = { Nom = {"ζηλιάρης", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάρικα"}, Gen = {"ζηλιάρη", "ζηλιάρας", "ζηλιάρικου", "ζηλιάρηδων", "ζηλιάρων", "ζηλιάρικων"}, Acu = {"ζηλιάρη", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάρικα"}, Voc = {"ζηλιάρη", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάρικα"} } } } local cases_to_run = { { code = "Nom", label = "Nominative", func = el_c.Nominativ_case }, { code = "Gen", label = "Genitive", func = el_c.Genitiv_case }, { code = "Acu", label = "Accusative", func = el_c.Acusativ_case }, { code = "Voc", label = "Vocative", func = el_c.Vocativ_case } } local position_names = { "Sg M", "Sg F", "Sg N", "Pl M", "Pl F", "Pl N" } local html = {'{| class="wikitable" style="font-size: 90%; text-align: center; border-collapse: collapse;"'} table.insert(html, '! Word !! Case !! Form !! Expected !! Actual !! Status') local total_passed = 0 local total_failed = 0 for _, test in ipairs(test_cases) do local test_frame = make_frame(test.word, test.svr) for _, c in ipairs(cases_to_run) do local raw_wikitext = c.func(test_frame) local actual_forms = parse_wikitext_row(raw_wikitext) local expected_forms = test.expected[c.code] or {} for i = 1, 6 do local exp = expected_forms[i] or "N/A" local act = actual_forms[i] or "N/A" local is_pass = (exp == act) if is_pass then total_passed = total_passed + 1 else total_failed = total_failed + 1 end local status_html = is_pass and 'style="background-color: #d4edda; color: #155724; font-weight: bold;" | PASS' or 'style="background-color: #f8d7da; color: #721c24; font-weight: bold;" | FAIL' table.insert(html, string.format( '|-\n| \'\'\'%s\'\'\' || %s || %s || %s || %s || %s', test.word, c.label, position_names[i], exp, act, status_html )) end end end table.insert(html, '|}') local summary_style = (total_failed == 0) and 'padding: 8px; background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; margin-bottom: 10px;' or 'padding: 8px; background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; margin-bottom: 10px;' local summary = string.format( '<div style="%s">\'\'\'Test Results:\'\'\' %d passed (PASS), %d failed (FAIL).</div>\n\n', summary_style, total_passed, total_failed ) return summary .. table.concat(html, "\n") end return p 27ashxu3axmpvuqfjhc2phm7bkdamxi 56364 56363 2026-09-10T15:04:31Z Steborce 2506 56364 Scribunto text/plain local p = {} local el_c = require("Module:el-c-conj") -- Помошна функција за симулирање на MediaWiki frame local function make_frame(word, svr) return { getParent = function() return { args = { [1] = word, [2] = svr or "" } } end } end -- Помошна функција за извлекување на зборовите од вики-линковите [[ ... ]] local function parse_wikitext_row(wikitext) local forms = {} if not wikitext then return forms end for form in wikitext:gmatch("%[%[([^%]]+)%]%]") do table.insert(forms, form) end return forms end function p.run_tests(frame) local test_cases = { { word = "έγγραφος", svr = "", expected = { Nom = {"έγγραφος", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"}, Gen = {"έγγραφου", "έγγραφης", "έγγραφου", "έγγραφων", "έγγραφων", "έγγραφων"}, Acu = {"έγγραφο", "έγγραφη", "έγγραφο", "έγγραφους", "έγγραφες", "έγγραφα"}, Voc = {"έγγραφε", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"} } }, { word = "άθλιος", svr = "α", expected = { Nom = {"άθλιος", "άθλια", "άθλιο", "άθλιοι", "άθλιες", "άθλια"}, Gen = {"άθλιου", "άθλιας", "άθλιου", "άθλιων", "άθλιων", "άθλιων"}, Acu = {"άθλιο", "άθλια", "άθλιο", "άθλιους", "άθλιες", "άθλια"}, Voc = {"άθλιε", "άθλια", "άθλιο", "άθλιοι", "άθλιες", "άθλια"} } }, { word = "ακριβής", svr = "", expected = { Nom = {"ακριβής", "ακριβής", "ακριβές", "ακριβείς", "ακριβείς", "ακριβή"}, Gen = {"ακριβούς", "ακριβούς", "ακριβούς", "ακριβών", "ακριβών", "ακριβών"}, Acu = {"ακριβή", "ακριβή", "ακριβές", "ακριβείς", "ακριβείς", "ακριβή"}, Voc = {"ακριβή", "ακριβή", "ακριβές", "ακριβείς", "ακριβείς", "ακριβή"} } }, { word = "φιλικός", svr = "", expected = { Nom = {"φιλικός", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"}, Gen = {"φιλικού", "φιλικής", "φιλικού", "φιλικών", "φιλικών", "φιλικών"}, Acu = {"φιλικό", "φιλική", "φιλικό", "φιλικούς", "φιλικές", "φιλικά"}, Voc = {"φιλικέ", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"} } }, { word = "μακρύς", svr = "", expected = { Nom = {"μακρύς", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"}, Gen = {"μακριού", "μακριάς", "μακριού", "μακριών", "μακριών", "μακριών"}, Acu = {"μακρύ", "μακριά", "μακρύ", "μακριούς", "μακριές", "μακριά"}, Voc = {"μακρύ", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"} } }, { word = "ζηλιάρης", svr = "", expected = { Nom = {"ζηλιάρης", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάρικα"}, Gen = {"ζηλιάρη", "ζηλιάρας", "ζηλιάρικου", "ζηλιάρηδων", "ζηλιάρων", "ζηλιάρικων"}, Acu = {"ζηλιάρη", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάρικα"}, Voc = {"ζηλιάρη", "ζηλιάρα", "ζηλιάρικο", "ζηλιάρηδες", "ζηλιάρες", "ζηλιάρικα"} } } } local cases_to_run = { { code = "Nom", label = "Nominative", func = el_c.Nominativ_case }, { code = "Gen", label = "Genitive", func = el_c.Genitiv_case }, { code = "Acu", label = "Accusative", func = el_c.Acusativ_case }, { code = "Voc", label = "Vocative", func = el_c.Vocativ_case } } local position_names = { "Sg M", "Sg F", "Sg N", "Pl M", "Pl F", "Pl N" } local html = {'{| class="wikitable" style="font-size: 90%; text-align: center; border-collapse: collapse;"'} table.insert(html, '! Word !! Case !! Form !! Expected !! Actual !! Status') local total_passed = 0 local total_failed = 0 for _, test in ipairs(test_cases) do local test_frame = make_frame(test.word, test.svr) for _, c in ipairs(cases_to_run) do local raw_wikitext = c.func(test_frame) local actual_forms = parse_wikitext_row(raw_wikitext) local expected_forms = test.expected[c.code] or {} for i = 1, 6 do local exp = expected_forms[i] or "N/A" local act = actual_forms[i] or "N/A" local is_pass = (exp == act) if is_pass then total_passed = total_passed + 1 else total_failed = total_failed + 1 end local status_html = is_pass and 'style="background-color: #d4edda; color: #155724; font-weight: bold;" | PASS' or 'style="background-color: #f8d7da; color: #721c24; font-weight: bold;" | FAIL' table.insert(html, string.format( '|-\n| \'\'\'%s\'\'\' || %s || %s || %s || %s || %s', test.word, c.label, position_names[i], exp, act, status_html )) end end end table.insert(html, '|}') local summary_style = (total_failed == 0) and 'padding: 8px; background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; margin-bottom: 10px;' or 'padding: 8px; background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; margin-bottom: 10px;' local summary = string.format( '<div style="%s">\'\'\'Test Results:\'\'\' %d passed (PASS), %d failed (FAIL).</div>\n\n', summary_style, total_passed, total_failed ) return summary .. table.concat(html, "\n") end return p r0j8el6toj9pdyoyx2gl7h5lgleb06u 56365 56364 2026-09-10T15:06:35Z Steborce 2506 56365 Scribunto text/plain local p = {} local el_c = require("Module:el-c-conj") -- Помошна функција за симулирање на MediaWiki frame local function make_frame(word, svr) return { getParent = function() return { args = { [1] = word, [2] = svr or "" } } end } end -- Помошна функција за извлекување на зборовите од вики-линковите [[ ... ]] local function parse_wikitext_row(wikitext) local forms = {} if not wikitext then return forms end for form in wikitext:gmatch("%[%[([^%]]+)%]%]") do table.insert(forms, form) end return forms end function p.run_tests(frame) local test_cases = { { word = "έγγραφος", svr = "", expected = { Nom = {"έγγραφος", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"}, Gen = {"έγγραφου", "έγγραφης", "έγγραφου", "έγγραφων", "έγγραφων", "έγγραφων"}, Acu = {"έγγραφο", "έγγραφη", "έγγραφο", "έγγραφους", "έγγραφες", "έγγραφα"}, Voc = {"έγγραφε", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"} } }, { word = "άθλιος", svr = "α", expected = { Nom = {"άθλιος", "άθλια", "άθλιο", "άθλιοι", "άθλιες", "άθλια"}, Gen = {"άθλιου", "άθλιας", "άθλιου", "άθλιων", "άθλιων", "άθλιων"}, Acu = {"άθλιο", "άθλια", "άθλιο", "άθλιους", "άθλιες", "άθλια"}, Voc = {"άθλιε", "άθλια", "άθλιο", "άθλιοι", "άθλιες", "άθλια"} } }, { word = "ακριβής", svr = "", expected = { Nom = {"ακριβής", "ακριβής", "ακριβές", "ακριβείς", "ακριβείς", "ακριβή"}, Gen = {"ακριβούς", "ακριβούς", "ακριβούς", "ακριβών", "ακριβών", "ακριβών"}, Acu = {"ακριβή", "ακριβή", "ακριβές", "ακριβείς", "ακριβείς", "ακριβή"}, Voc = {"ακριβή", "ακριβή", "ακριβές", "ακριβείς", "ακριβείς", "ακριβή"} } }, { word = "φιλικός", svr = "", expected = { Nom = {"φιλικός", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"}, Gen = {"φιλικού", "φιλικής", "φιλικού", "φιλικών", "φιλικών", "φιλικών"}, Acu = {"φιλικό", "φιλική", "φιλικό", "φιλικούς", "φιλικές", "φιλικά"}, Voc = {"φιλικέ", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"} } }, { word = "μακρύς", svr = "", expected = { Nom = {"μακρύς", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"}, Gen = {"μακριού", "μακριάς", "μακριού", "μακριών", "μακριών", "μακριών"}, Acu = {"μακρύ", "μακριά", "μακρύ", "μακριούς", "μακριές", "μακριά"}, Voc = {"μακρύ", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"} } } } local cases_to_run = { { code = "Nom", label = "Nominative", func = el_c.Nominativ_case }, { code = "Gen", label = "Genitive", func = el_c.Genitiv_case }, { code = "Acu", label = "Accusative", func = el_c.Acusativ_case }, { code = "Voc", label = "Vocative", func = el_c.Vocativ_case } } local position_names = { "Sg M", "Sg F", "Sg N", "Pl M", "Pl F", "Pl N" } local html = {'{| class="wikitable" style="font-size: 90%; text-align: center; border-collapse: collapse;"'} table.insert(html, '! Word !! Case !! Form !! Expected !! Actual !! Status') local total_passed = 0 local total_failed = 0 for _, test in ipairs(test_cases) do local test_frame = make_frame(test.word, test.svr) for _, c in ipairs(cases_to_run) do local raw_wikitext = c.func(test_frame) local actual_forms = parse_wikitext_row(raw_wikitext) local expected_forms = test.expected[c.code] or {} for i = 1, 6 do local exp = expected_forms[i] or "N/A" local act = actual_forms[i] or "N/A" local is_pass = (exp == act) if is_pass then total_passed = total_passed + 1 else total_failed = total_failed + 1 end local status_html = is_pass and 'style="background-color: #d4edda; color: #155724; font-weight: bold;" | PASS' or 'style="background-color: #f8d7da; color: #721c24; font-weight: bold;" | FAIL' table.insert(html, string.format( '|-\n| \'\'\'%s\'\'\' || %s || %s || %s || %s || %s', test.word, c.label, position_names[i], exp, act, status_html )) end end end table.insert(html, '|}') local summary_style = (total_failed == 0) and 'padding: 8px; background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; margin-bottom: 10px;' or 'padding: 8px; background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; margin-bottom: 10px;' local summary = string.format( '<div style="%s">\'\'\'Test Results:\'\'\' %d passed (PASS), %d failed (FAIL).</div>\n\n', summary_style, total_passed, total_failed ) return summary .. table.concat(html, "\n") end return p 9dgr5jhiiyil1rgpciwfnofyrmli71l 56374 56365 2026-09-10T16:07:04Z Steborce 2506 56374 Scribunto text/plain local p = {} local el_c = require("Module:el-c-conj") -- Помошна функција за симулирање на MediaWiki frame local function make_frame(word, svr) return { getParent = function() return { args = { [1] = word, [2] = svr or "" } } end } end -- Помошна функција за извлекување на зборовите од вики-линковите [[ ... ]] local function parse_wikitext_row(wikitext) local forms = {} if not wikitext then return forms end for form in wikitext:gmatch("%[%[([^%]]+)%]%]") do table.insert(forms, form) end return forms end function p.run_tests(frame) local test_cases = { { word = "έγγραφος", svr = "", expected = { Nom = {"έγγραφος", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"}, Gen = {"έγγραφου", "έγγραφης", "έγγραφου", "έγγραφων", "έγγραφων", "έγγραφων"}, Acu = {"έγγραφο", "έγγραφη", "έγγραφο", "έγγραφους", "έγγραφες", "έγγραφα"}, Voc = {"έγγραφε", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"} } }, { word = "επείγων", svr = "", expected = { Nom = {"επείγων / επείγοντας", "επείγουσα", "επείγον", "επείγοντες", "επείγουσες", "επείγοντα"}, Gen = {"επείγοντος / επείγοντα", "επείγουσας", "επείγοντος", "επειγόντων", "επειγουσών", "επειγόντων"}, Acu = {"επείγοντα", "επείγουσα", "επείγον", "επείγοντες", "επείγουσες", "επείγοντα"}, Voc = {"επείγων / επείγοντα", "επείγουσα", "επείγον", "επείγοντες", "επείγουσες", "επείγοντα"} } }, { word = "άθλιος", svr = "α", expected = { Nom = {"άθλιος", "άθλια", "άθλιο", "άθλιοι", "άθλιες", "άθλια"}, Gen = {"άθλιου", "άθλιας", "άθλιου", "άθλιων", "άθλιων", "άθλιων"}, Acu = {"άθλιο", "άθλια", "άθλιο", "άθλιους", "άθλιες", "άθλια"}, Voc = {"άθλιε", "άθλια", "άθλιο", "άθλιοι", "άθλιες", "άθλια"} } }, { word = "ακριβής", svr = "", expected = { Nom = {"ακριβής", "ακριβής", "ακριβές", "ακριβείς", "ακριβείς", "ακριβή"}, Gen = {"ακριβούς", "ακριβούς", "ακριβούς", "ακριβών", "ακριβών", "ακριβών"}, Acu = {"ακριβή", "ακριβή", "ακριβές", "ακριβείς", "ακριβείς", "ακριβή"}, Voc = {"ακριβή", "ακριβή", "ακριβές", "ακριβείς", "ακριβείς", "ακριβή"} } }, { word = "φιλικός", svr = "", expected = { Nom = {"φιλικός", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"}, Gen = {"φιλικού", "φιλικής", "φιλικού", "φιλικών", "φιλικών", "φιλικών"}, Acu = {"φιλικό", "φιλική", "φιλικό", "φιλικούς", "φιλικές", "φιλικά"}, Voc = {"φιλικέ", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"} } }, { word = "μακρύς", svr = "", expected = { Nom = {"μακρύς", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"}, Gen = {"μακριού", "μακριάς", "μακριού", "μακριών", "μακριών", "μακριών"}, Acu = {"μακρύ", "μακριά", "μακρύ", "μακριούς", "μακριές", "μακριά"}, Voc = {"μακρύ", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"} } } } local cases_to_run = { { code = "Nom", label = "Nominative", func = el_c.Nominativ_case }, { code = "Gen", label = "Genitive", func = el_c.Genitiv_case }, { code = "Acu", label = "Accusative", func = el_c.Acusativ_case }, { code = "Voc", label = "Vocative", func = el_c.Vocativ_case } } local position_names = { "Sg M", "Sg F", "Sg N", "Pl M", "Pl F", "Pl N" } local html = {'{| class="wikitable" style="font-size: 90%; text-align: center; border-collapse: collapse;"'} table.insert(html, '! Word !! Case !! Form !! Expected !! Actual !! Status') local total_passed = 0 local total_failed = 0 for _, test in ipairs(test_cases) do local test_frame = make_frame(test.word, test.svr) for _, c in ipairs(cases_to_run) do local raw_wikitext = c.func(test_frame) local actual_forms = parse_wikitext_row(raw_wikitext) local expected_forms = test.expected[c.code] or {} for i = 1, 6 do local exp = expected_forms[i] or "N/A" local act = actual_forms[i] or "N/A" local is_pass = (exp == act) if is_pass then total_passed = total_passed + 1 else total_failed = total_failed + 1 end local status_html = is_pass and 'style="background-color: #d4edda; color: #155724; font-weight: bold;" | PASS' or 'style="background-color: #f8d7da; color: #721c24; font-weight: bold;" | FAIL' table.insert(html, string.format( '|-\n| \'\'\'%s\'\'\' || %s || %s || %s || %s || %s', test.word, c.label, position_names[i], exp, act, status_html )) end end end table.insert(html, '|}') local summary_style = (total_failed == 0) and 'padding: 8px; background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; margin-bottom: 10px;' or 'padding: 8px; background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; margin-bottom: 10px;' local summary = string.format( '<div style="%s">\'\'\'Test Results:\'\'\' %d passed (PASS), %d failed (FAIL).</div>\n\n', summary_style, total_passed, total_failed ) return summary .. table.concat(html, "\n") end return p 56y8dbv2yombsj4j9azmcnmywmkh478 56378 56374 2026-09-10T16:34:10Z Steborce 2506 56378 Scribunto text/plain local p = {} local el_c = require("Module:el-c-conj") -- Помошна функција за симулирање на MediaWiki frame local function make_frame(word, svr) return { getParent = function() return { args = { [1] = word, [2] = svr or "" } } end } end -- Помошна функција за извлекување на зборовите од вики-линковите [[ ... ]] local function parse_wikitext_row(wikitext) local forms = {} if not wikitext then return forms end for form in wikitext:gmatch("%[%[([^%]]+)%]%]") do table.insert(forms, form) end return forms end function p.run_tests(frame) local test_cases = { { word = "έγγραφος", svr = "", expected = { Nom = {"έγγραφος", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"}, Gen = {"έγγραφου", "έγγραφης", "έγγραφου", "έγγραφων", "έγγραφων", "έγγραφων"}, Acu = {"έγγραφο", "έγγραφη", "έγγραφο", "έγγραφους", "έγγραφες", "έγγραφα"}, Voc = {"έγγραφε", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"} } }, { word = "επείγων", svr = "", expected = { Nom = {"επείγων", "επείγουσα", "επείγον", "επείγοντες", "επείγουσες", "επείγοντα"}, Gen = {"επείγοντος", "επείγουσας", "επείγοντος", "επειγόντων", "επειγουσών", "επειγόντων"}, Acu = {"επείγοντα", "επείγουσα", "επείγον", "επείγοντες", "επείγουσες", "επείγοντα"}, Voc = {"επείγων", "επείγουσα", "επείγον", "επείγοντες", "επείγουσες", "επείγοντα"} } }, { word = "άθλιος", svr = "α", expected = { Nom = {"άθλιος", "άθλια", "άθλιο", "άθλιοι", "άθλιες", "άθλια"}, Gen = {"άθλιου", "άθλιας", "άθλιου", "άθλιων", "άθλιων", "άθλιων"}, Acu = {"άθλιο", "άθλια", "άθλιο", "άθλιους", "άθλιες", "άθλια"}, Voc = {"άθλιε", "άθλια", "άθλιο", "άθλιοι", "άθλιες", "άθλια"} } }, { word = "ακριβής", svr = "", expected = { Nom = {"ακριβής", "ακριβής", "ακριβές", "ακριβείς", "ακριβείς", "ακριβή"}, Gen = {"ακριβούς", "ακριβούς", "ακριβούς", "ακριβών", "ακριβών", "ακριβών"}, Acu = {"ακριβή", "ακριβή", "ακριβές", "ακριβείς", "ακριβείς", "ακριβή"}, Voc = {"ακριβή", "ακριβή", "ακριβές", "ακριβείς", "ακριβείς", "ακριβή"} } }, { word = "φιλικός", svr = "", expected = { Nom = {"φιλικός", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"}, Gen = {"φιλικού", "φιλικής", "φιλικού", "φιλικών", "φιλικών", "φιλικών"}, Acu = {"φιλικό", "φιλική", "φιλικό", "φιλικούς", "φιλικές", "φιλικά"}, Voc = {"φιλικέ", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"} } }, { word = "μακρύς", svr = "", expected = { Nom = {"μακρύς", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"}, Gen = {"μακριού", "μακριάς", "μακριού", "μακριών", "μακριών", "μακριών"}, Acu = {"μακρύ", "μακριά", "μακρύ", "μακριούς", "μακριές", "μακριά"}, Voc = {"μακρύ", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"} } } } local cases_to_run = { { code = "Nom", label = "Nominative", func = el_c.Nominativ_case }, { code = "Gen", label = "Genitive", func = el_c.Genitiv_case }, { code = "Acu", label = "Accusative", func = el_c.Acusativ_case }, { code = "Voc", label = "Vocative", func = el_c.Vocativ_case } } local position_names = { "Sg M", "Sg F", "Sg N", "Pl M", "Pl F", "Pl N" } local html = {'{| class="wikitable" style="font-size: 90%; text-align: center; border-collapse: collapse;"'} table.insert(html, '! Word !! Case !! Form !! Expected !! Actual !! Status') local total_passed = 0 local total_failed = 0 for _, test in ipairs(test_cases) do local test_frame = make_frame(test.word, test.svr) for _, c in ipairs(cases_to_run) do local raw_wikitext = c.func(test_frame) local actual_forms = parse_wikitext_row(raw_wikitext) local expected_forms = test.expected[c.code] or {} for i = 1, 6 do local exp = expected_forms[i] or "N/A" local act = actual_forms[i] or "N/A" local is_pass = (exp == act) if is_pass then total_passed = total_passed + 1 else total_failed = total_failed + 1 end local status_html = is_pass and 'style="background-color: #d4edda; color: #155724; font-weight: bold;" | PASS' or 'style="background-color: #f8d7da; color: #721c24; font-weight: bold;" | FAIL' table.insert(html, string.format( '|-\n| \'\'\'%s\'\'\' || %s || %s || %s || %s || %s', test.word, c.label, position_names[i], exp, act, status_html )) end end end table.insert(html, '|}') local summary_style = (total_failed == 0) and 'padding: 8px; background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; margin-bottom: 10px;' or 'padding: 8px; background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; margin-bottom: 10px;' local summary = string.format( '<div style="%s">\'\'\'Test Results:\'\'\' %d passed (PASS), %d failed (FAIL).</div>\n\n', summary_style, total_passed, total_failed ) return summary .. table.concat(html, "\n") end return p qua2rgmog0gy5vlh618tjtefwme4u7g 56395 56378 2026-09-10T17:57:27Z Steborce 2506 56395 Scribunto text/plain local p = {} local el_c = require("Module:el-c-conj") -- Помошна функција за симулирање на MediaWiki frame local function make_frame(word, svr) return { getParent = function() return { args = { [1] = word, [2] = svr or "" } } end } end -- Помошна функција за извлекување на зборовите од вики-линковите [[ ... ]] local function parse_wikitext_row(wikitext) local forms = {} if not wikitext then return forms end for form in wikitext:gmatch("%[%[([^%]]+)%]%]") do table.insert(forms, form) end return forms end function p.run_tests(frame) local test_cases = { { word = "έγγραφος", svr = "", expected = { Nom = {"έγγραφος", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"}, Gen = {"έγγραφου", "έγγραφης", "έγγραφου", "έγγραφων", "έγγραφων", "έγγραφων"}, Acu = {"έγγραφο", "έγγραφη", "έγγραφο", "έγγραφους", "έγγραφες", "έγγραφα"}, Voc = {"έγγραφε", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"} } }, { word = "επείγων", svr = "", expected = { Nom = {"επείγων", "επείγουσα", "επείγον", "επείγοντες", "επείγουσες", "επείγοντα"}, Gen = {"επείγοντος", "επείγουσας", "επείγοντος", "επειγόντων", "επειγουσών", "επειγόντων"}, Acu = {"επείγοντα", "επείγουσα", "επείγον", "επείγοντες", "επείγουσες", "επείγοντα"}, Voc = {"επείγων", "επείγουσα", "επείγον", "επείγοντες", "επείγουσες", "επείγοντα"} } }, { word = "ουσιώδης", svr = "", expected = { Nom = {"ουσιώδης", "ουσιώδης", "ουσιώδες", "ουσιώδεις", "ουσιώδεις", "ουσιώδη"}, Gen = {"ουσιώδους", "ουσιώδους", "ουσιώδους", "ουσιώδων", "ουσιώδων", "ουσιώδων"}, Acu = {"ουσιώδη", "ουσιώδη", "ουσιώδες", "ουσιώδεις", "ουσιώδεις", "ουσιώδη"}, Voc = {"ουσιώδη", "ουσιώδη", "ουσιώδες", "ουσιώδεις", "ουσιώδεις", "ουσιώδη"} } }, { word = "άθλιος", svr = "α", expected = { Nom = {"άθλιος", "άθλια", "άθλιο", "άθλιοι", "άθλιες", "άθλια"}, Gen = {"άθλιου", "άθλιας", "άθλιου", "άθλιων", "άθλιων", "άθλιων"}, Acu = {"άθλιο", "άθλια", "άθλιο", "άθλιους", "άθλιες", "άθλια"}, Voc = {"άθλιε", "άθλια", "άθλιο", "άθλιοι", "άθλιες", "άθλια"} } }, { word = "ακριβής", svr = "", expected = { Nom = {"ακριβής", "ακριβής", "ακριβές", "ακριβείς", "ακριβείς", "ακριβή"}, Gen = {"ακριβούς", "ακριβούς", "ακριβούς", "ακριβών", "ακριβών", "ακριβών"}, Acu = {"ακριβή", "ακριβή", "ακριβές", "ακριβείς", "ακριβείς", "ακριβή"}, Voc = {"ακριβή", "ακριβή", "ακριβές", "ακριβείς", "ακριβείς", "ακριβή"} } }, { word = "φιλικός", svr = "", expected = { Nom = {"φιλικός", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"}, Gen = {"φιλικού", "φιλικής", "φιλικού", "φιλικών", "φιλικών", "φιλικών"}, Acu = {"φιλικό", "φιλική", "φιλικό", "φιλικούς", "φιλικές", "φιλικά"}, Voc = {"φιλικέ", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"} } }, { word = "μακρύς", svr = "", expected = { Nom = {"μακρύς", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"}, Gen = {"μακριού", "μακριάς", "μακριού", "μακριών", "μακριών", "μακριών"}, Acu = {"μακρύ", "μακριά", "μακρύ", "μακριούς", "μακριές", "μακριά"}, Voc = {"μακρύ", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"} } } } local cases_to_run = { { code = "Nom", label = "Nominative", func = el_c.Nominativ_case }, { code = "Gen", label = "Genitive", func = el_c.Genitiv_case }, { code = "Acu", label = "Accusative", func = el_c.Acusativ_case }, { code = "Voc", label = "Vocative", func = el_c.Vocativ_case } } local position_names = { "Sg M", "Sg F", "Sg N", "Pl M", "Pl F", "Pl N" } local html = {'{| class="wikitable" style="font-size: 90%; text-align: center; border-collapse: collapse;"'} table.insert(html, '! Word !! Case !! Form !! Expected !! Actual !! Status') local total_passed = 0 local total_failed = 0 for _, test in ipairs(test_cases) do local test_frame = make_frame(test.word, test.svr) for _, c in ipairs(cases_to_run) do local raw_wikitext = c.func(test_frame) local actual_forms = parse_wikitext_row(raw_wikitext) local expected_forms = test.expected[c.code] or {} for i = 1, 6 do local exp = expected_forms[i] or "N/A" local act = actual_forms[i] or "N/A" local is_pass = (exp == act) if is_pass then total_passed = total_passed + 1 else total_failed = total_failed + 1 end local status_html = is_pass and 'style="background-color: #d4edda; color: #155724; font-weight: bold;" | PASS' or 'style="background-color: #f8d7da; color: #721c24; font-weight: bold;" | FAIL' table.insert(html, string.format( '|-\n| \'\'\'%s\'\'\' || %s || %s || %s || %s || %s', test.word, c.label, position_names[i], exp, act, status_html )) end end end table.insert(html, '|}') local summary_style = (total_failed == 0) and 'padding: 8px; background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; margin-bottom: 10px;' or 'padding: 8px; background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; margin-bottom: 10px;' local summary = string.format( '<div style="%s">\'\'\'Test Results:\'\'\' %d passed (PASS), %d failed (FAIL).</div>\n\n', summary_style, total_passed, total_failed ) return summary .. table.concat(html, "\n") end return p cjx21bh6a4jxvzcbjw0clb2kcfjlzov 56417 56395 2026-09-11T08:53:09Z Steborce 2506 56417 Scribunto text/plain local p = {} local el_c = require("Module:el-c-conj") -- Помошна функција за симулирање на MediaWiki frame local function make_frame(word, svr) return { getParent = function() return { args = { [1] = word, [2] = svr or "" } } end } end -- Помошна функција за извлекување на зборовите од вики-линковите [[ ... ]] local function parse_wikitext_row(wikitext) local forms = {} if not wikitext then return forms end for form in wikitext:gmatch("%[%[([^%]]+)%]%]") do table.insert(forms, form) end return forms end function p.run_tests(frame) local test_cases = { { word = "έγγραφος", svr = "", expected = { Nom = {"έγγραφος", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"}, Gen = {"έγγραφου", "έγγραφης", "έγγραφου", "έγγραφων", "έγγραφων", "έγγραφων"}, Acu = {"έγγραφο", "έγγραφη", "έγγραφο", "έγγραφους", "έγγραφες", "έγγραφα"}, Voc = {"έγγραφε", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"} } }, { word = "παρελθών", svr = "", expected = { Nom = {"παρελθών", "παρελθούσα", "παρελθόν", "παρελθόντες", "παρελθούσες", "παρελθόντα"}, Gen = {"παρελθόντος", "παρελθούσας", "παρελθόντος", "παρελθόντων", "παρελθουσών", "παρελθόντων"}, Acu = {"παρελθόντα", "παρελθούσα", "παρελθόν", "παρελθόντες", "παρελθούσες", "παρελθόντα"}, Voc = {"παρελθών", "παρελθούσα", "παρελθόν", "παρελθόντες", "παρελθούσες", "παρελθόντα"} } }, { word = "επείγων", svr = "", expected = { Nom = {"επείγων", "επείγουσα", "επείγον", "επείγοντες", "επείγουσες", "επείγοντα"}, Gen = {"επείγοντος", "επείγουσας", "επείγοντος", "επειγόντων", "επειγουσών", "επειγόντων"}, Acu = {"επείγοντα", "επείγουσα", "επείγον", "επείγοντες", "επείγουσες", "επείγοντα"}, Voc = {"επείγων", "επείγουσα", "επείγον", "επείγοντες", "επείγουσες", "επείγοντα"} } }, { word = "ουσιώδης", svr = "", expected = { Nom = {"ουσιώδης", "ουσιώδης", "ουσιώδες", "ουσιώδεις", "ουσιώδεις", "ουσιώδη"}, Gen = {"ουσιώδους", "ουσιώδους", "ουσιώδους", "ουσιώδων", "ουσιώδων", "ουσιώδων"}, Acu = {"ουσιώδη", "ουσιώδη", "ουσιώδες", "ουσιώδεις", "ουσιώδεις", "ουσιώδη"}, Voc = {"ουσιώδη", "ουσιώδη", "ουσιώδες", "ουσιώδεις", "ουσιώδεις", "ουσιώδη"} } }, { word = "άθλιος", svr = "α", expected = { Nom = {"άθλιος", "άθλια", "άθλιο", "άθλιοι", "άθλιες", "άθλια"}, Gen = {"άθλιου", "άθλιας", "άθλιου", "άθλιων", "άθλιων", "άθλιων"}, Acu = {"άθλιο", "άθλια", "άθλιο", "άθλιους", "άθλιες", "άθλια"}, Voc = {"άθλιε", "άθλια", "άθλιο", "άθλιοι", "άθλιες", "άθλια"} } }, { word = "ακριβής", svr = "", expected = { Nom = {"ακριβής", "ακριβής", "ακριβές", "ακριβείς", "ακριβείς", "ακριβή"}, Gen = {"ακριβούς", "ακριβούς", "ακριβούς", "ακριβών", "ακριβών", "ακριβών"}, Acu = {"ακριβή", "ακριβή", "ακριβές", "ακριβείς", "ακριβείς", "ακριβή"}, Voc = {"ακριβή", "ακριβή", "ακριβές", "ακριβείς", "ακριβείς", "ακριβή"} } }, { word = "φιλικός", svr = "", expected = { Nom = {"φιλικός", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"}, Gen = {"φιλικού", "φιλικής", "φιλικού", "φιλικών", "φιλικών", "φιλικών"}, Acu = {"φιλικό", "φιλική", "φιλικό", "φιλικούς", "φιλικές", "φιλικά"}, Voc = {"φιλικέ", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"} } }, { word = "μακρύς", svr = "", expected = { Nom = {"μακρύς", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"}, Gen = {"μακριού", "μακριάς", "μακριού", "μακριών", "μακριών", "μακριών"}, Acu = {"μακρύ", "μακριά", "μακρύ", "μακριούς", "μακριές", "μακριά"}, Voc = {"μακρύ", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"} } } } local cases_to_run = { { code = "Nom", label = "Nominative", func = el_c.Nominativ_case }, { code = "Gen", label = "Genitive", func = el_c.Genitiv_case }, { code = "Acu", label = "Accusative", func = el_c.Acusativ_case }, { code = "Voc", label = "Vocative", func = el_c.Vocativ_case } } local position_names = { "Sg M", "Sg F", "Sg N", "Pl M", "Pl F", "Pl N" } local html = {'{| class="wikitable" style="font-size: 90%; text-align: center; border-collapse: collapse;"'} table.insert(html, '! Word !! Case !! Form !! Expected !! Actual !! Status') local total_passed = 0 local total_failed = 0 for _, test in ipairs(test_cases) do local test_frame = make_frame(test.word, test.svr) for _, c in ipairs(cases_to_run) do local raw_wikitext = c.func(test_frame) local actual_forms = parse_wikitext_row(raw_wikitext) local expected_forms = test.expected[c.code] or {} for i = 1, 6 do local exp = expected_forms[i] or "N/A" local act = actual_forms[i] or "N/A" local is_pass = (exp == act) if is_pass then total_passed = total_passed + 1 else total_failed = total_failed + 1 end local status_html = is_pass and 'style="background-color: #d4edda; color: #155724; font-weight: bold;" | PASS' or 'style="background-color: #f8d7da; color: #721c24; font-weight: bold;" | FAIL' table.insert(html, string.format( '|-\n| \'\'\'%s\'\'\' || %s || %s || %s || %s || %s', test.word, c.label, position_names[i], exp, act, status_html )) end end end table.insert(html, '|}') local summary_style = (total_failed == 0) and 'padding: 8px; background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; margin-bottom: 10px;' or 'padding: 8px; background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; margin-bottom: 10px;' local summary = string.format( '<div style="%s">\'\'\'Test Results:\'\'\' %d passed (PASS), %d failed (FAIL).</div>\n\n', summary_style, total_passed, total_failed ) return summary .. table.concat(html, "\n") end return p adp1hqpu071zl2z8myoqrq26npfhqib 56427 56417 2026-09-11T10:00:07Z Steborce 2506 56427 Scribunto text/plain local p = {} local el_c = require("Module:el-c-conj") -- Помошна функција за симулирање на MediaWiki frame local function make_frame(word, svr) return { getParent = function() return { args = { [1] = word, [2] = svr or "" } } end } end -- Помошна функција за извлекување на зборовите од вики-линковите [[ ... ]] local function parse_wikitext_row(wikitext) local forms = {} if not wikitext then return forms end for form in wikitext:gmatch("%[%[([^%]]+)%]%]") do table.insert(forms, form) end return forms end function p.run_tests(frame) local test_cases = { { word = "έγγραφος", svr = "", expected = { Nom = {"έγγραφος", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"}, Gen = {"έγγραφου", "έγγραφης", "έγγραφου", "έγγραφων", "έγγραφων", "έγγραφων"}, Acu = {"έγγραφο", "έγγραφη", "έγγραφο", "έγγραφους", "έγγραφες", "έγγραφα"}, Voc = {"έγγραφε", "έγγραφη", "έγγραφο", "έγγραφοι", "έγγραφες", "έγγραφα"} } }, { word = "παρελθών", svr = "", expected = { Nom = {"παρελθών", "παρελθούσα", "παρελθόν", "παρελθόντες", "παρελθούσες", "παρελθόντα"}, Gen = {"παρελθόντος", "παρελθούσας", "παρελθόντος", "παρελθόντων", "παρελθουσών", "παρελθόντων"}, Acu = {"παρελθόντα", "παρελθούσα", "παρελθόν", "παρελθόντες", "παρελθούσες", "παρελθόντα"}, Voc = {"παρελθών", "παρελθούσα", "παρελθόν", "παρελθόντες", "παρελθούσες", "παρελθόντα"} } }, { word = "στέρεος", svr = "αη", expected = { Nom = {"στέρεος", "στέρεα / στέρεη", "στέρεο", "στέρεοι", "στέρεες", "στέρεα"}, Gen = {"στέρεου", "στέρεας / στέρεης", "στέρεου", "στέρεων", "στέρεων", "στέρεων"}, Acu = {"στέρεο", "στέρεα / στέρεη", "στέρεο", "στέρεους", "στέρεες", "στέρεα"}, Voc = {"στέρεε", "στέρεα / στέρεη", "στέρεο", "στέρεοι", "στέρεες", "στέρεα"} } }, { word = "επείγων", svr = "", expected = { Nom = {"επείγων", "επείγουσα", "επείγον", "επείγοντες", "επείγουσες", "επείγοντα"}, Gen = {"επείγοντος", "επείγουσας", "επείγοντος", "επειγόντων", "επειγουσών", "επειγόντων"}, Acu = {"επείγοντα", "επείγουσα", "επείγον", "επείγοντες", "επείγουσες", "επείγοντα"}, Voc = {"επείγων", "επείγουσα", "επείγον", "επείγοντες", "επείγουσες", "επείγοντα"} } }, { word = "ουσιώδης", svr = "", expected = { Nom = {"ουσιώδης", "ουσιώδης", "ουσιώδες", "ουσιώδεις", "ουσιώδεις", "ουσιώδη"}, Gen = {"ουσιώδους", "ουσιώδους", "ουσιώδους", "ουσιώδων", "ουσιώδων", "ουσιώδων"}, Acu = {"ουσιώδη", "ουσιώδη", "ουσιώδες", "ουσιώδεις", "ουσιώδεις", "ουσιώδη"}, Voc = {"ουσιώδη", "ουσιώδη", "ουσιώδες", "ουσιώδεις", "ουσιώδεις", "ουσιώδη"} } }, { word = "άθλιος", svr = "α", expected = { Nom = {"άθλιος", "άθλια", "άθλιο", "άθλιοι", "άθλιες", "άθλια"}, Gen = {"άθλιου", "άθλιας", "άθλιου", "άθλιων", "άθλιων", "άθλιων"}, Acu = {"άθλιο", "άθλια", "άθλιο", "άθλιους", "άθλιες", "άθλια"}, Voc = {"άθλιε", "άθλια", "άθλιο", "άθλιοι", "άθλιες", "άθλια"} } }, { word = "ακριβής", svr = "", expected = { Nom = {"ακριβής", "ακριβής", "ακριβές", "ακριβείς", "ακριβείς", "ακριβή"}, Gen = {"ακριβούς", "ακριβούς", "ακριβούς", "ακριβών", "ακριβών", "ακριβών"}, Acu = {"ακριβή", "ακριβή", "ακριβές", "ακριβείς", "ακριβείς", "ακριβή"}, Voc = {"ακριβή", "ακριβή", "ακριβές", "ακριβείς", "ακριβείς", "ακριβή"} } }, { word = "φιλικός", svr = "", expected = { Nom = {"φιλικός", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"}, Gen = {"φιλικού", "φιλικής", "φιλικού", "φιλικών", "φιλικών", "φιλικών"}, Acu = {"φιλικό", "φιλική", "φιλικό", "φιλικούς", "φιλικές", "φιλικά"}, Voc = {"φιλικέ", "φιλική", "φιλικό", "φιλικοί", "φιλικές", "φιλικά"} } }, { word = "μακρύς", svr = "", expected = { Nom = {"μακρύς", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"}, Gen = {"μακριού", "μακριάς", "μακριού", "μακριών", "μακριών", "μακριών"}, Acu = {"μακρύ", "μακριά", "μακρύ", "μακριούς", "μακριές", "μακριά"}, Voc = {"μακρύ", "μακριά", "μακρύ", "μακριοί", "μακριές", "μακριά"} } } } local cases_to_run = { { code = "Nom", label = "Nominative", func = el_c.Nominativ_case }, { code = "Gen", label = "Genitive", func = el_c.Genitiv_case }, { code = "Acu", label = "Accusative", func = el_c.Acusativ_case }, { code = "Voc", label = "Vocative", func = el_c.Vocativ_case } } local position_names = { "Sg M", "Sg F", "Sg N", "Pl M", "Pl F", "Pl N" } local html = {'{| class="wikitable" style="font-size: 90%; text-align: center; border-collapse: collapse;"'} table.insert(html, '! Word !! Case !! Form !! Expected !! Actual !! Status') local total_passed = 0 local total_failed = 0 for _, test in ipairs(test_cases) do local test_frame = make_frame(test.word, test.svr) for _, c in ipairs(cases_to_run) do local raw_wikitext = c.func(test_frame) local actual_forms = parse_wikitext_row(raw_wikitext) local expected_forms = test.expected[c.code] or {} for i = 1, 6 do local exp = expected_forms[i] or "N/A" local act = actual_forms[i] or "N/A" local is_pass = (exp == act) if is_pass then total_passed = total_passed + 1 else total_failed = total_failed + 1 end local status_html = is_pass and 'style="background-color: #d4edda; color: #155724; font-weight: bold;" | PASS' or 'style="background-color: #f8d7da; color: #721c24; font-weight: bold;" | FAIL' table.insert(html, string.format( '|-\n| \'\'\'%s\'\'\' || %s || %s || %s || %s || %s', test.word, c.label, position_names[i], exp, act, status_html )) end end end table.insert(html, '|}') local summary_style = (total_failed == 0) and 'padding: 8px; background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; margin-bottom: 10px;' or 'padding: 8px; background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; margin-bottom: 10px;' local summary = string.format( '<div style="%s">\'\'\'Test Results:\'\'\' %d passed (PASS), %d failed (FAIL).</div>\n\n', summary_style, total_passed, total_failed ) return summary .. table.concat(html, "\n") end return p ddbwrsaq32k0elavu42a9ewd2vkblxj Модул:TestAdjectives 828 11122 56367 2026-09-10T15:18:10Z Steborce 2506 Создадена страница со: local p = {} -- Requirements local main_module = require('Module:el-c-conj') -- Helper function to parse the wikitext table row output local function parse_module_output(output_str) -- Strip the initial table row prefix (e.g., "|-\n |'''Номинатив''' ||") local cleaned_str = output_str:gsub("^%|%-%-?%s*%|'''[^']-'''%s*%|%|", "") cleaned_str = mw.text.trim(cleaned_str) -- Split forms separated by '||' local parts = mw.t... 56367 Scribunto text/plain local p = {} -- Requirements local main_module = require('Module:el-c-conj') -- Helper function to parse the wikitext table row output local function parse_module_output(output_str) -- Strip the initial table row prefix (e.g., "|-\n |'''Номинатив''' ||") local cleaned_str = output_str:gsub("^%|%-%-?%s*%|'''[^']-'''%s*%|%|", "") cleaned_str = mw.text.trim(cleaned_str) -- Split forms separated by '||' local parts = mw.text.split(cleaned_str, "||") local forms = {} for i, part in ipairs(parts) do local trimmed_part = mw.text.trim(part) -- Extract target word inside [[...]] local form = trimmed_part:match("^%[%[(.*)%]%]$") if form then forms[i] = form else forms[i] = trimmed_part end end return forms end -- Mock frame object to simulate MediaWiki template calls local mock_frame = { getParent = function() return { args = { [1] = nil, [2] = nil } } end } -- Dataset definitions local test_data = { { input_word = "έγγραφος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "έγγραφος", sg_f = "έγγραφη", sg_n = "έγγραφο", pl_m = "έγγραφοι", pl_f = "έγγραφες", pl_n = "έγγραφα" }, Genitiv = { sg_m = "εγγράφου", sg_f = "έγγραφης", sg_n = "εγγράφου", pl_m = "εγγράφων", pl_f = "εγγράφων", pl_n = "εγγράφων" }, Acusativ = { sg_m = "έγγραφο", sg_f = "έγγραφη", sg_n = "έγγραφο", pl_m = "έγγραφους", pl_f = "έγγραφες", pl_n = "έγγραφα" }, Vocativ = { sg_m = "έγγραφε", sg_f = "έγγραφη", sg_n = "έγγραφο", pl_m = "έγγραφοι", pl_f = "έγγραφες", pl_n = "έγγραφα" }, } }, { input_word = "ίδιος", fem_type = "α", expected_forms = { Nominativ = { sg_m = "ίδιος", sg_f = "ίδια", sg_n = "ίδιο", pl_m = "ίδιοι", pl_f = "ίδιες", pl_n = "ίδια" }, Genitiv = { sg_m = "ίδιου", sg_f = "ίδιας", sg_n = "ίδιου", pl_m = "ίδιων", pl_f = "ίδιων", pl_n = "ίδιων" }, Acusativ = { sg_m = "ίδιο", sg_f = "ίδια", sg_n = "ίδιο", pl_m = "ίδιους", pl_f = "ίδιες", pl_n = "ίδια" }, Vocativ = { sg_m = "ίδιε", sg_f = "ίδια", sg_n = "ίδιο", pl_m = "ίδιοι", pl_f = "ίδιες", pl_n = "ίδια" }, } }, { input_word = "ανεξάρτητος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ανεξάρτητος", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο", pl_m = "ανεξάρτητοι", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα" }, Genitiv = { sg_m = "ανεξάρτητου", sg_f = "ανεξάρτητης", sg_n = "ανεξάρτητου", pl_m = "ανεξάρτητων", pl_f = "ανεξάρτητων", pl_n = "ανεξάρτητων" }, Acusativ = { sg_m = "ανεξάρτητο", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο", pl_m = "ανεξάρτητους", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα" }, Vocativ = { sg_m = "ανεξάρτητε", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο", pl_m = "ανεξάρτητοι", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα" }, } }, { input_word = "αποδοτικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "αποδοτικός", sg_f = "αποδοτική", sg_n = "αποδοτικό", pl_m = "αποδοτικοί", pl_f = "αποδοτικές", pl_n = "αποδοτικά" }, Genitiv = { sg_m = "αποδοτικού", sg_f = "αποδοτικής", sg_n = "αποδοτικού", pl_m = "αποδοτικών", pl_f = "αποδοτικών", pl_n = "αποδοτικών" }, Acusativ = { sg_m = "αποδοτικό", sg_f = "αποδοτική", sg_n = "αποδοτικό", pl_m = "αποδοτικούς", pl_f = "αποδοτικές", pl_n = "αποδοτικά" }, Vocativ = { sg_m = "αποδοτικέ", sg_f = "αποδοτική", sg_n = "αποδοτικό", pl_m = "αποδοτικοί", pl_f = "αποδοτικές", pl_n = "αποδοτικά" }, } }, { input_word = "αστικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "αστικός", sg_f = "αστική", sg_n = "αστικό", pl_m = "αστικοί", pl_f = "αστικές", pl_n = "αστικά" }, Genitiv = { sg_m = "αστικού", sg_f = "αστικής", sg_n = "αστικού", pl_m = "αστικών", pl_f = "αστικών", pl_n = "αστικών" }, Acusativ = { sg_m = "αστικό", sg_f = "αστική", sg_n = "αστικό", pl_m = "αστικούς", pl_f = "αστικές", pl_n = "αστικά" }, Vocativ = { sg_m = "αστικέ", sg_f = "αστική", sg_n = "αστικό", pl_m = "αστικοί", pl_f = "αστικές", pl_n = "αστικά" }, } }, { input_word = "βαρετός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "βαρετός", sg_f = "βαρετή", sg_n = "βαρετό", pl_m = "βαρετοί", pl_f = "βαρετές", pl_n = "βαρετά" }, Genitiv = { sg_m = "βαρετού", sg_f = "βαρετής", sg_n = "βαρετού", pl_m = "βαρετών", pl_f = "βαρετών", pl_n = "βαρετών" }, Acusativ = { sg_m = "βαρετό", sg_f = "βαρετή", sg_n = "βαρετό", pl_m = "βαρετούς", pl_f = "βαρετές", pl_n = "βαρετά" }, Vocativ = { sg_m = "βαρετέ", sg_f = "βαρετή", sg_n = "βαρετό", pl_m = "βαρετοί", pl_f = "βαρετές", pl_n = "βαρετά" }, } }, { input_word = "δημοφιλής", fem_type = "η", expected_forms = { Nominativ = { sg_m = "δημοφιλής", sg_f = "δημοφιλής", sg_n = "δημοφιλές", pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή" }, Genitiv = { sg_m = "δημοφιλούς", sg_f = "δημοφιλούς", sg_n = "δημοφιλούς", pl_m = "δημοφιλών", pl_f = "δημοφιλών", pl_n = "δημοφιλών" }, Acusativ = { sg_m = "δημοφιλή", sg_f = "δημοφιλή", sg_n = "δημοφιλές", pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή" }, Vocativ = { sg_m = "δημοφιλή", sg_f = "δημοφιλή", sg_n = "δημοφιλές", pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή" }, } }, { input_word = "επείγων", fem_type = "", expected_forms = { Nominativ = { sg_m = "επείγων", sg_f = "επείγουσα", sg_n = "επείγον", pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα" }, Genitiv = { sg_m = "επείγοντος", sg_f = "επείγουσας", sg_n = "επείγοντος", pl_m = "επείγοντων", pl_f = "επείγουσων", pl_n = "επείγοντων" }, Acusativ = { sg_m = "επείγοντα", sg_f = "επείγουσα", sg_n = "επείγον", pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα" }, Vocativ = { sg_m = "επείγων", sg_f = "επείγουσα", sg_n = "επείγον", pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα" }, } }, { input_word = "ντροπαλός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ντροπαλός", sg_f = "ντροπαλή", sg_n = "ντροπαλό", pl_m = "ντροπαλοί", pl_f = "ντροπαλές", pl_n = "ντροπαλά" }, Genitiv = { sg_m = "ντροπαλού", sg_f = "ντροπαλής", sg_n = "ντροπαλού", pl_m = "ντροπαλών", pl_f = "ντροπαλών", pl_n = "ντροπαλών" }, Acusativ = { sg_m = "ντροπαλό", sg_f = "ντροπαλή", sg_n = "ντροπαλό", pl_m = "ντροπαλούς", pl_f = "ντροπαλές", pl_n = "ντροπαλά" }, Vocativ = { sg_m = "ντροπαλέ", sg_f = "ντροπαλή", sg_n = "ντροπαλό", pl_m = "ντροπαλοί", pl_f = "ντροπαλές", pl_n = "ντροπαλά" }, } }, { input_word = "ολόκληρος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ολόκληρος", sg_f = "ολόκληρη", sg_n = "ολόκληρο", pl_m = "ολόκληροι", pl_f = "ολόκληρες", pl_n = "ολόκληρα" }, Genitiv = { sg_m = "ολόκληρου", sg_f = "ολόκληρης", sg_n = "ολόκληρου", pl_m = "ολόκληρων", pl_f = "ολόκληρων", pl_n = "ολόκληρων" }, Acusativ = { sg_m = "ολόκληρο", sg_f = "ολόκληρη", sg_n = "ολόκληρο", pl_m = "ολόκληρους", pl_f = "ολόκληρες", pl_n = "ολόκληρα" }, Vocativ = { sg_m = "ολόκληρε", sg_f = "ολόκληρη", sg_n = "ολόκληρο", pl_m = "ολόκληροι", pl_f = "ολόκληρες", pl_n = "ολόκληρα" }, } }, { input_word = "πονηρός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "πονηρός", sg_f = "πονηρή", sg_n = "πονηρό", pl_m = "πονηροί", pl_f = "πονηρές", pl_n = "πονηρά" }, Genitiv = { sg_m = "πονηρού", sg_f = "πονηρής", sg_n = "πονηρού", pl_m = "πονηρών", pl_f = "πονηρών", pl_n = "πονηρών" }, Acusativ = { sg_m = "πονηρό", sg_f = "πονηρή", sg_n = "πονηρό", pl_m = "πονηρούς", pl_f = "πονηρές", pl_n = "πονηρά" }, Vocativ = { sg_m = "πονηρέ", sg_f = "πονηρή", sg_n = "πονηρό", pl_m = "πονηροί", pl_f = "πονηρές", pl_n = "πονηρά" }, } }, { input_word = "πρόσφατος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "πρόσφατος", sg_f = "πρόσφατη", sg_n = "πρόσφατο", pl_m = "πρόσφατοι", pl_f = "πρόσφατες", pl_n = "πρόσφατα" }, Genitiv = { sg_m = "πρόσφατου", sg_f = "πρόσφατης", sg_n = "πρόσφατου", pl_m = "πρόσφατων", pl_f = "πρόσφατων", pl_n = "πρόσφατων" }, Acusativ = { sg_m = "πρόσφατο", sg_f = "πρόσφατη", sg_n = "πρόσφατο", pl_m = "πρόσφατους", pl_f = "πρόσφατες", pl_n = "πρόσφατα" }, Vocativ = { sg_m = "πρόσφατε", sg_f = "πρόσφατη", sg_n = "πρόσφατο", pl_m = "πρόσφατοι", pl_f = "πρόσφατες", pl_n = "πρόσφατα" }, } }, { input_word = "ταχυδρομικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ταχυδρομικός", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό", pl_m = "ταχυδρομικοί", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά" }, Genitiv = { sg_m = "ταχυδρομικού", sg_f = "ταχυδρομικής", sg_n = "ταχυδρομικού", pl_m = "ταχυδρομικών", pl_f = "ταχυδρομικών", pl_n = "ταχυδρομικών" }, Acusativ = { sg_m = "ταχυδρομικό", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό", pl_m = "ταχυδρομικούς", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά" }, Vocativ = { sg_m = "ταχυδρομικέ", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό", pl_m = "ταχυδρομικοί", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά" }, } }, { input_word = "τοπικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "τοπικός", sg_f = "τοπική", sg_n = "τοπικό", pl_m = "τοπικοί", pl_f = "τοπικές", pl_n = "τοπικά" }, Genitiv = { sg_m = "τοπικού", sg_f = "τοπικής", sg_n = "τοπικού", pl_m = "τοπικών", pl_f = "τοπικών", pl_n = "τοπικών" }, Acusativ = { sg_m = "τοπικό", sg_f = "τοπική", sg_n = "τοπικό", pl_m = "τοπικούς", pl_f = "τοπικές", pl_n = "τοπικά" }, Vocativ = { sg_m = "τοπικέ", sg_f = "τοπική", sg_n = "τοπικό", pl_m = "τοπικοί", pl_f = "τοπικές", pl_n = "τοπικά" }, } }, { input_word = "υδραυλικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "υδραυλικός", sg_f = "υδραυλική", sg_n = "υδραυλικό", pl_m = "υδραυλικοί", pl_f = "υδραυλικές", pl_n = "υδραυλικά" }, Genitiv = { sg_m = "υδραυλικού", sg_f = "υδραυλικής", sg_n = "υδραυλικού", pl_m = "υδραυλικών", pl_f = "υδραυλικών", pl_n = "υδραυλικών" }, Acusativ = { sg_m = "υδραυλικό", sg_f = "υδραυλική", sg_n = "υδραυλικό", pl_m = "υδραυλικούς", pl_f = "υδραυλικές", pl_n = "υδραυλικά" }, Vocativ = { sg_m = "υδραυλικέ", sg_f = "υδραυλική", sg_n = "υδραυλικό", pl_m = "υδραυλικοί", pl_f = "υδραυλικές", pl_n = "υδραυλικά" }, } }, { input_word = "υπεύθυνος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "υπεύθυνος", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο", pl_m = "υπεύθυνοι", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα" }, Genitiv = { sg_m = "υπεύθυνου", sg_f = "υπεύθυνης", sg_n = "υπεύθυνου", pl_m = "υπεύθυνων", pl_f = "υπεύθυνων", pl_n = "υπεύθυνων" }, Acusativ = { sg_m = "υπεύθυνο", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο", pl_m = "υπεύθυνους", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα" }, Vocativ = { sg_m = "υπεύθυνε", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο", pl_m = "υπεύθυνοι", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα" }, } }, { input_word = "χαλαρός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "χαλαρός", sg_f = "χαλαρή", sg_n = "χαλαρό", pl_m = "χαλαροί", pl_f = "χαλαρές", pl_n = "χαλαρά" }, Genitiv = { sg_m = "χαλαρού", sg_f = "χαλαρής", sg_n = "χαλαρού", pl_m = "χαλαρού", pl_m = "χαλαροί", pl_f = "χαλαρές", pl_n = "χαλαρά" }, Acusativ = { sg_m = "χαλαρό", sg_f = "χαλαρή", sg_n = "χαλαρό", pl_m = "χαλαρούς", pl_f = "χαλαρές", pl_n = "χαλαρά" }, Vocativ = { sg_m = "χαλαρέ", sg_f = "χαλαρή", sg_n = "χαλαρό", pl_m = "χαλαροί", pl_f = "χαλαρές", pl_n = "χαλαρά" }, } }, { input_word = "σώφρων", fem_type = "", expected_forms = { Nominativ = { sg_m = "σώφρων", sg_f = "σώφρων", sg_n = "σώφρον", pl_m = "σώφρονες", pl_f = "σώφρονες", pl_n = "σώφρονα" }, Genitiv = { sg_m = "σώφρονος", sg_f = "σώφρονος", sg_n = "σώφρονος", pl_m = "σωφρόνων", pl_f = "σωφρόνων", pl_n = "σωφρόνων" }, Acusativ = { sg_m = "σώφρονα", sg_f = "σώφρονα", sg_n = "σώφρον", pl_m = "σώφρονες", pl_f = "σώφρονες", pl_n = "σώφρονα" }, Vocativ = { sg_m = "σώφρον", sg_f = "σώφρον", sg_n = "σώφρον", pl_m = "σώφρονες", pl_f = "σώφρονες", pl_n = "σώφρονα" }, } }, } -- Main test execution function function p.run_tests(frame) local errors = {} local test_count = 0 local case_functions = { Nominativ = "Nominativ_case", Genitiv = "Genitiv_case", Acusativ = "Acusativ_case", Vocativ = "Vocativ_case", } local form_keys = {"sg_m", "sg_f", "sg_n", "pl_m", "pl_f", "pl_n"} for _, test_case in ipairs(test_data) do local adjective = test_case.input_word local fem_type = test_case.fem_type local expected_cases = test_case.expected_forms -- Populate mock arguments local args = mock_frame.getParent().args args[1] = adjective args[2] = fem_type ~= "" and fem_type or nil for case_name, func_name in pairs(case_functions) do if main_module[func_name] then test_count = test_count + 1 local raw_output = main_module[func_name](mock_frame) local actual_forms = parse_module_output(raw_output) local expected_forms = expected_cases[case_name] for idx, key in ipairs(form_keys) do local expected = expected_forms[key] local actual = actual_forms[idx] if actual ~= expected then table.insert(errors, string.format( "Fail [%s - %s - %s]: Expected '%s', got '%s'", adjective, case_name, key, expected or "nil", actual or "nil" )) end end else table.insert(errors, string.format("Missing function '%s' in Module:el-c-conj", func_name)) end end end -- Format summary report if #errors == 0 then return string.format(" All %d test cases passed successfully!", test_count) else return string.format(" Found %d errors out of %d test cases:\n* %s", #errors, test_count, table.concat(errors, "\n* ")) end end return p 0sfyrllzj2xp6hghos3iuv9iorf03z5 56369 56367 2026-09-10T15:25:13Z Steborce 2506 56369 Scribunto text/plain local p = {} -- Requirements local main_module = require('Module:el-c-conj') -- Helper function to parse the wikitext table row output local function parse_module_output(output_str) -- Strip the initial table row prefix (e.g., "|-\n |'''Номинатив''' ||") local cleaned_str = output_str:gsub("^%|%-%-?%s*%|'''[^']-'''%s*%|%|", "") cleaned_str = mw.text.trim(cleaned_str) -- Split forms separated by '||' local parts = mw.text.split(cleaned_str, "||") local forms = {} for i, part in ipairs(parts) do local trimmed_part = mw.text.trim(part) -- Extract target word inside [[...]] local form = trimmed_part:match("^%[%[(.*)%]%]$") if form then forms[i] = form else forms[i] = trimmed_part end end return forms end -- Helper to create a mock frame object per test case local function create_mock_frame(arg1, arg2) return { getParent = function() return { args = { [1] = arg1, [2] = arg2 } } end } end -- Dataset definitions local test_data = { { input_word = "έγγραφος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "έγγραφος", sg_f = "έγγραφη", sg_n = "έγγραφο", pl_m = "έγγραφοι", pl_f = "έγγραφες", pl_n = "έγγραφα" }, Genitiv = { sg_m = "εγγράφου", sg_f = "έγγραφης", sg_n = "εγγράφου", pl_m = "εγγράφων", pl_f = "εγγράφων", pl_n = "εγγράφων" }, Acusativ = { sg_m = "έγγραφο", sg_f = "έγγραφη", sg_n = "έγγραφο", pl_m = "έγγραφους", pl_f = "έγγραφες", pl_n = "έγγραφα" }, Vocativ = { sg_m = "έγγραφε", sg_f = "έγγραφη", sg_n = "έγγραφο", pl_m = "έγγραφοι", pl_f = "έγγραφες", pl_n = "έγγραφα" }, } }, { input_word = "ίδιος", fem_type = "α", expected_forms = { Nominativ = { sg_m = "ίδιος", sg_f = "ίδια", sg_n = "ίδιο", pl_m = "ίδιοι", pl_f = "ίδιες", pl_n = "ίδια" }, Genitiv = { sg_m = "ίδιου", sg_f = "ίδιας", sg_n = "ίδιου", pl_m = "ίδιων", pl_f = "ίδιων", pl_n = "ίδιων" }, Acusativ = { sg_m = "ίδιο", sg_f = "ίδια", sg_n = "ίδιο", pl_m = "ίδιους", pl_f = "ίδιες", pl_n = "ίδια" }, Vocativ = { sg_m = "ίδιε", sg_f = "ίδια", sg_n = "ίδιο", pl_m = "ίδιοι", pl_f = "ίδιες", pl_n = "ίδια" }, } }, { input_word = "ανεξάρτητος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ανεξάρτητος", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο", pl_m = "ανεξάρτητοι", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα" }, Genitiv = { sg_m = "ανεξάρτητου", sg_f = "ανεξάρτητης", sg_n = "ανεξάρτητου", pl_m = "ανεξάρτητων", pl_f = "ανεξάρτητων", pl_n = "ανεξάρτητων" }, Acusativ = { sg_m = "ανεξάρτητο", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο", pl_m = "ανεξάρτητους", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα" }, Vocativ = { sg_m = "ανεξάρτητε", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο", pl_m = "ανεξάρτητοι", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα" }, } }, { input_word = "αποδοτικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "αποδοτικός", sg_f = "αποδοτική", sg_n = "αποδοτικό", pl_m = "αποδοτικοί", pl_f = "αποδοτικές", pl_n = "αποδοτικά" }, Genitiv = { sg_m = "αποδοτικού", sg_f = "αποδοτικής", sg_n = "αποδοτικού", pl_m = "αποδοτικών", pl_f = "αποδοτικών", pl_n = "αποδοτικών" }, Acusativ = { sg_m = "αποδοτικό", sg_f = "αποδοτική", sg_n = "αποδοτικό", pl_m = "αποδοτικούς", pl_f = "αποδοτικές", pl_n = "αποδοτικά" }, Vocativ = { sg_m = "αποδοτικέ", sg_f = "αποδοτική", sg_n = "αποδοτικό", pl_m = "αποδοτικοί", pl_f = "αποδοτικές", pl_n = "αποδοτικά" }, } }, { input_word = "αστικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "αστικός", sg_f = "αστική", sg_n = "αστικό", pl_m = "αστικοί", pl_f = "αστικές", pl_n = "αστικά" }, Genitiv = { sg_m = "αστικού", sg_f = "αστικής", sg_n = "αστικού", pl_m = "αστικών", pl_f = "αστικών", pl_n = "αστικών" }, Acusativ = { sg_m = "αστικό", sg_f = "αστική", sg_n = "αστικό", pl_m = "αστικούς", pl_f = "αστικές", pl_n = "αστικά" }, Vocativ = { sg_m = "αστικέ", sg_f = "αστική", sg_n = "αστικό", pl_m = "αστικοί", pl_f = "αστικές", pl_n = "αστικά" }, } }, { input_word = "βαρετός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "βαρετός", sg_f = "βαρετή", sg_n = "βαρετό", pl_m = "βαρετοί", pl_f = "βαρετές", pl_n = "βαρετά" }, Genitiv = { sg_m = "βαρετού", sg_f = "βαρετής", sg_n = "βαρετού", pl_m = "βαρετών", pl_f = "βαρετών", pl_n = "βαρετών" }, Acusativ = { sg_m = "βαρετό", sg_f = "βαρετή", sg_n = "βαρετό", pl_m = "βαρετούς", pl_f = "βαρετές", pl_n = "βαρετά" }, Vocativ = { sg_m = "βαρετέ", sg_f = "βαρετή", sg_n = "βαρετό", pl_m = "βαρετοί", pl_f = "βαρετές", pl_n = "βαρετά" }, } }, { input_word = "δημοφιλής", fem_type = "η", expected_forms = { Nominativ = { sg_m = "δημοφιλής", sg_f = "δημοφιλής", sg_n = "δημοφιλές", pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή" }, Genitiv = { sg_m = "δημοφιλούς", sg_f = "δημοφιλούς", sg_n = "δημοφιλούς", pl_m = "δημοφιλών", pl_f = "δημοφιλών", pl_n = "δημοφιλών" }, Acusativ = { sg_m = "δημοφιλή", sg_f = "δημοφιλή", sg_n = "δημοφιλές", pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή" }, Vocativ = { sg_m = "δημοφιλή", sg_f = "δημοφιλή", sg_n = "δημοφιλές", pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή" }, } }, { input_word = "επείγων", fem_type = "", expected_forms = { Nominativ = { sg_m = "επείγων", sg_f = "επείγουσα", sg_n = "επείγον", pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα" }, Genitiv = { sg_m = "επείγοντος", sg_f = "επείγουσας", sg_n = "επείγοντος", pl_m = "επείγοντων", pl_f = "επείγουσων", pl_n = "επείγοντων" }, Acusativ = { sg_m = "επείγοντα", sg_f = "επείγουσα", sg_n = "επείγον", pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα" }, Vocativ = { sg_m = "επείγων", sg_f = "επείγουσα", sg_n = "επείγον", pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα" }, } }, { input_word = "ντροπαλός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ντροπαλός", sg_f = "ντροπαλή", sg_n = "ντροπαλό", pl_m = "ντροπαλοί", pl_f = "ντροπαλές", pl_n = "ντροπαλά" }, Genitiv = { sg_m = "ντροπαλού", sg_f = "ντροπαλής", sg_n = "ντροπαλού", pl_m = "ντροπαλών", pl_f = "ντροπαλών", pl_n = "ντροπαλών" }, Acusativ = { sg_m = "ντροπαλό", sg_f = "ντροπαλή", sg_n = "ντροπαλό", pl_m = "ντροπαλούς", pl_f = "ντροπαλές", pl_n = "ντροπαλά" }, Vocativ = { sg_m = "ντροπαλέ", sg_f = "ντροπαλή", sg_n = "ντροπαλό", pl_m = "ντροπαλοί", pl_f = "ντροπαλές", pl_n = "ντροπαλά" }, } }, { input_word = "ολόκληρος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ολόκληρος", sg_f = "ολόκληρη", sg_n = "ολόκληρο", pl_m = "ολόκληροι", pl_f = "ολόκληρες", pl_n = "ολόκληρα" }, Genitiv = { sg_m = "ολόκληρου", sg_f = "ολόκληρης", sg_n = "ολόκληρου", pl_m = "ολόκληρων", pl_f = "ολόκληρων", pl_n = "ολόκληρων" }, Acusativ = { sg_m = "ολόκληρο", sg_f = "ολόκληρη", sg_n = "ολόκληρο", pl_m = "ολόκληρους", pl_f = "ολόκληρες", pl_n = "ολόκληρα" }, Vocativ = { sg_m = "ολόκληρε", sg_f = "ολόκληρη", sg_n = "ολόκληρο", pl_m = "ολόκληροι", pl_f = "ολόκληρες", pl_n = "ολόκληρα" }, } }, { input_word = "πονηρός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "πονηρός", sg_f = "πονηρή", sg_n = "πονηρό", pl_m = "πονηροί", pl_f = "πονηρές", pl_n = "πονηρά" }, Genitiv = { sg_m = "πονηρού", sg_f = "πονηρής", sg_n = "πονηρού", pl_m = "πονηρών", pl_f = "πονηρών", pl_n = "πονηρών" }, Acusativ = { sg_m = "πονηρό", sg_f = "πονηρή", sg_n = "πονηρό", pl_m = "πονηρούς", pl_f = "πονηρές", pl_n = "πονηρά" }, Vocativ = { sg_m = "πονηρέ", sg_f = "πονηρή", sg_n = "πονηρό", pl_m = "πονηροί", pl_f = "πονηρές", pl_n = "πονηρά" }, } }, { input_word = "πρόσφατος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "πρόσφατος", sg_f = "πρόσφατη", sg_n = "πρόσφατο", pl_m = "πρόσφατοι", pl_f = "πρόσφατες", pl_n = "πρόσφατα" }, Genitiv = { sg_m = "πρόσφατου", sg_f = "πρόσφατης", sg_n = "πρόσφατου", pl_m = "πρόσφατων", pl_f = "πρόσφατων", pl_n = "πρόσφατων" }, Acusativ = { sg_m = "πρόσφατο", sg_f = "πρόσφατη", sg_n = "πρόσφατο", pl_m = "πρόσφατους", pl_f = "πρόσφατες", pl_n = "πρόσφατα" }, Vocativ = { sg_m = "πρόσφατε", sg_f = "πρόσφατη", sg_n = "πρόσφατο", pl_m = "πρόσφατοι", pl_f = "πρόσφατες", pl_n = "πρόσφατα" }, } }, { input_word = "ταχυδρομικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ταχυδρομικός", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό", pl_m = "ταχυδρομικοί", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά" }, Genitiv = { sg_m = "ταχυδρομικού", sg_f = "ταχυδρομικής", sg_n = "ταχυδρομικού", pl_m = "ταχυδρομικών", pl_f = "ταχυδρομικών", pl_n = "ταχυδρομικών" }, Acusativ = { sg_m = "ταχυδρομικό", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό", pl_m = "ταχυδρομικούς", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά" }, Vocativ = { sg_m = "ταχυδρομικέ", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό", pl_m = "ταχυδρομικοί", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά" }, } }, { input_word = "τοπικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "τοπικός", sg_f = "τοπική", sg_n = "τοπικό", pl_m = "τοπικοί", pl_f = "τοπικές", pl_n = "τοπικά" }, Genitiv = { sg_m = "τοπικού", sg_f = "τοπικής", sg_n = "τοπικού", pl_m = "τοπικών", pl_f = "τοπικών", pl_n = "τοπικών" }, Acusativ = { sg_m = "τοπικό", sg_f = "τοπική", sg_n = "τοπικό", pl_m = "τοπικούς", pl_f = "τοπικές", pl_n = "τοπικά" }, Vocativ = { sg_m = "τοπικέ", sg_f = "τοπική", sg_n = "τοπικό", pl_m = "τοπικοί", pl_f = "τοπικές", pl_n = "τοπικά" }, } }, { input_word = "υδραυλικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "υδραυλικός", sg_f = "υδραυλική", sg_n = "υδραυλικό", pl_m = "υδραυλικοί", pl_f = "υδραυλικές", pl_n = "υδραυλικά" }, Genitiv = { sg_m = "υδραυλικού", sg_f = "υδραυλικής", sg_n = "υδραυλικού", pl_m = "υδραυλικών", pl_f = "υδραυλικών", pl_n = "υδραυλικών" }, Acusativ = { sg_m = "υδραυλικό", sg_f = "υδραυλική", sg_n = "υδραυλικό", pl_m = "υδραυλικούς", pl_f = "υδραυλικές", pl_n = "υδραυλικά" }, Vocativ = { sg_m = "υδραυλικέ", sg_f = "υδραυλική", sg_n = "υδραυλικό", pl_m = "υδραυλικοί", pl_f = "υδραυλικές", pl_n = "υδραυλικά" }, } }, { input_word = "υπεύθυνος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "υπεύθυνος", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο", pl_m = "υπεύθυνοι", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα" }, Genitiv = { sg_m = "υπεύθυνου", sg_f = "υπεύθυνης", sg_n = "υπεύθυνου", pl_m = "υπεύθυνων", pl_f = "υπεύθυνων", pl_n = "υπεύθυνων" }, Acusativ = { sg_m = "υπεύθυνο", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο", pl_m = "υπεύθυνους", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα" }, Vocativ = { sg_m = "υπεύθυνε", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο", pl_m = "υπεύθυνοι", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα" }, } }, { input_word = "χαλαρός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "χαλαρός", sg_f = "χαλαρή", sg_n = "χαλαρό", pl_m = "χαλαροί", pl_f = "χαλαρές", pl_n = "χαλαρά" }, Genitiv = { sg_m = "χαλαρού", sg_f = "χαλαρής", sg_n = "χαλαρού", pl_m = "χαλαρών", pl_f = "χαλαρών", pl_n = "χαλαρών" }, Acusativ = { sg_m = "χαλαρό", sg_f = "χαλαρή", sg_n = "χαλαρό", pl_m = "χαλαρούς", pl_f = "χαλαρές", pl_n = "χαλαρά" }, Vocativ = { sg_m = "χαλαρέ", sg_f = "χαλαρή", sg_n = "χαλαρό", pl_m = "χαλαροί", pl_f = "χαλαρές", pl_n = "χαλαρά" }, } }, { input_word = "σώφρων", fem_type = "", expected_forms = { Nominativ = { sg_m = "σώφρων", sg_f = "σώφρων", sg_n = "σώφρον", pl_m = "σώφρονες", pl_f = "σώφρονες", pl_n = "σώφρονα" }, Genitiv = { sg_m = "σώφρονος", sg_f = "σώφρονος", sg_n = "σώφρονος", pl_m = "σωφρόνων", pl_f = "σωφρόνων", pl_n = "σωφρόνων" }, Acusativ = { sg_m = "σώφρονα", sg_f = "σώφρονα", sg_n = "σώφρον", pl_m = "σώφρονες", pl_f = "σώφρονες", pl_n = "σώφρονα" }, Vocativ = { sg_m = "σώφρον", sg_f = "σώφρον", sg_n = "σώφρον", pl_m = "σώφρονες", pl_f = "σώφρονες", pl_n = "σώφρονα" }, } }, } -- Main test execution function function p.run_tests(frame) local errors = {} local test_count = 0 local case_functions = { Nominativ = "Nominativ_case", Genitiv = "Genitiv_case", Acusativ = "Acusativ_case", Vocativ = "Vocativ_case", } local form_keys = {"sg_m", "sg_f", "sg_n", "pl_m", "pl_f", "pl_n"} for _, test_case in ipairs(test_data) do local adjective = test_case.input_word local fem_type = test_case.fem_type ~= "" and test_case.fem_type or nil local expected_cases = test_case.expected_forms local frame_obj = create_mock_frame(adjective, fem_type) for case_name, func_name in pairs(case_functions) do if main_module[func_name] then test_count = test_count + 1 local raw_output = main_module[func_name](frame_obj) local actual_forms = parse_module_output(raw_output) local expected_forms = expected_cases[case_name] for idx, key in ipairs(form_keys) do local expected = expected_forms[key] local actual = actual_forms[idx] if actual ~= expected then table.insert(errors, string.format( "Fail [%s - %s - %s]: Expected '%s', got '%s'", adjective, case_name, key, expected or "nil", actual or "nil" )) end end else table.insert(errors, string.format("Missing function '%s' in Module:el-c-conj", func_name)) end end end -- Format summary report if #errors == 0 then return string.format(" All %d test cases passed successfully!", test_count) else return string.format(" Found %d errors out of %d test cases:\n* %s", #errors, test_count, table.concat(errors, "\n* ")) end end return p mk498we7cjygzlmrhvjbbui5l19i99o 56370 56369 2026-09-10T15:38:49Z Steborce 2506 56370 Scribunto text/plain local p = {} -- Requirements local main_module = require('Module:el-c-conj') -- Helper function to parse the wikitext table row output local function parse_module_output(output_str) -- Strip the initial table row prefix (e.g., "|-\n |'''Номинатив''' ||") local cleaned_str = output_str:gsub("^%|%-%-?%s*%|'''[^']-'''%s*%|%|", "") cleaned_str = mw.text.trim(cleaned_str) -- Split forms separated by '||' local parts = mw.text.split(cleaned_str, "||") local forms = {} for i, part in ipairs(parts) do local trimmed_part = mw.text.trim(part) -- Extract target word inside [[...]] local form = trimmed_part:match("^%[%[(.*)%]%]$") if form then forms[i] = form else forms[i] = trimmed_part end end return forms end -- Helper to create a mock frame object per test case local function create_mock_frame(arg1, arg2) return { getParent = function() return { args = { [1] = arg1, [2] = arg2 } } end } end -- Dataset definitions local test_data = { { input_word = "έγγραφος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "έγγραφος", sg_f = "έγγραφη", sg_n = "έγγραφο", pl_m = "έγγραφοι", pl_f = "έγγραφες", pl_n = "έγγραφα" }, Genitiv = { sg_m = "έγγραφου", sg_f = "έγγραφης", sg_n = "έγγραφου", pl_m = "έγγραφων", pl_f = "έγγραφων", pl_n = "έγγραφων" }, Acusativ = { sg_m = "έγγραφο", sg_f = "έγγραφη", sg_n = "έγγραφο", pl_m = "έγγραφους", pl_f = "έγγραφες", pl_n = "έγγραφα" }, Vocativ = { sg_m = "έγγραφε", sg_f = "έγγραφη", sg_n = "έγγραφο", pl_m = "έγγραφοι", pl_f = "έγγραφες", pl_n = "έγγραφα" }, } }, { input_word = "ίδιος", fem_type = "α", expected_forms = { Nominativ = { sg_m = "ίδιος", sg_f = "ίδια", sg_n = "ίδιο", pl_m = "ίδιοι", pl_f = "ίδιες", pl_n = "ίδια" }, Genitiv = { sg_m = "ίδιου", sg_f = "ίδιας", sg_n = "ίδιου", pl_m = "ίδιων", pl_f = "ίδιων", pl_n = "ίδιων" }, Acusativ = { sg_m = "ίδιο", sg_f = "ίδια", sg_n = "ίδιο", pl_m = "ίδιους", pl_f = "ίδιες", pl_n = "ίδια" }, Vocativ = { sg_m = "ίδιε", sg_f = "ίδια", sg_n = "ίδιο", pl_m = "ίδιοι", pl_f = "ίδιες", pl_n = "ίδια" }, } }, { input_word = "ανεξάρτητος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ανεξάρτητος", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο", pl_m = "ανεξάρτητοι", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα" }, Genitiv = { sg_m = "ανεξάρτητου", sg_f = "ανεξάρτητης", sg_n = "ανεξάρτητου", pl_m = "ανεξάρτητων", pl_f = "ανεξάρτητων", pl_n = "ανεξάρτητων" }, Acusativ = { sg_m = "ανεξάρτητο", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο", pl_m = "ανεξάρτητους", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα" }, Vocativ = { sg_m = "ανεξάρτητε", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο", pl_m = "ανεξάρτητοι", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα" }, } }, { input_word = "αποδοτικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "αποδοτικός", sg_f = "αποδοτική", sg_n = "αποδοτικό", pl_m = "αποδοτικοί", pl_f = "αποδοτικές", pl_n = "αποδοτικά" }, Genitiv = { sg_m = "αποδοτικού", sg_f = "αποδοτικής", sg_n = "αποδοτικού", pl_m = "αποδοτικών", pl_f = "αποδοτικών", pl_n = "αποδοτικών" }, Acusativ = { sg_m = "αποδοτικό", sg_f = "αποδοτική", sg_n = "αποδοτικό", pl_m = "αποδοτικούς", pl_f = "αποδοτικές", pl_n = "αποδοτικά" }, Vocativ = { sg_m = "αποδοτικέ", sg_f = "αποδοτική", sg_n = "αποδοτικό", pl_m = "αποδοτικοί", pl_f = "αποδοτικές", pl_n = "αποδοτικά" }, } }, { input_word = "αστικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "αστικός", sg_f = "αστική", sg_n = "αστικό", pl_m = "αστικοί", pl_f = "αστικές", pl_n = "αστικά" }, Genitiv = { sg_m = "αστικού", sg_f = "αστικής", sg_n = "αστικού", pl_m = "αστικών", pl_f = "αστικών", pl_n = "αστικών" }, Acusativ = { sg_m = "αστικό", sg_f = "αστική", sg_n = "αστικό", pl_m = "αστικούς", pl_f = "αστικές", pl_n = "αστικά" }, Vocativ = { sg_m = "αστικέ", sg_f = "αστική", sg_n = "αστικό", pl_m = "αστικοί", pl_f = "αστικές", pl_n = "αστικά" }, } }, { input_word = "βαρετός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "βαρετός", sg_f = "βαρετή", sg_n = "βαρετό", pl_m = "βαρετοί", pl_f = "βαρετές", pl_n = "βαρετά" }, Genitiv = { sg_m = "βαρετού", sg_f = "βαρετής", sg_n = "βαρετού", pl_m = "βαρετών", pl_f = "βαρετών", pl_n = "βαρετών" }, Acusativ = { sg_m = "βαρετό", sg_f = "βαρετή", sg_n = "βαρετό", pl_m = "βαρετούς", pl_f = "βαρετές", pl_n = "βαρετά" }, Vocativ = { sg_m = "βαρετέ", sg_f = "βαρετή", sg_n = "βαρετό", pl_m = "βαρετοί", pl_f = "βαρετές", pl_n = "βαρετά" }, } }, { input_word = "δημοφιλής", fem_type = "η", expected_forms = { Nominativ = { sg_m = "δημοφιλής", sg_f = "δημοφιλής", sg_n = "δημοφιλές", pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή" }, Genitiv = { sg_m = "δημοφιλούς", sg_f = "δημοφιλούς", sg_n = "δημοφιλούς", pl_m = "δημοφιλών", pl_f = "δημοφιλών", pl_n = "δημοφιλών" }, Acusativ = { sg_m = "δημοφιλή", sg_f = "δημοφιλή", sg_n = "δημοφιλές", pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή" }, Vocativ = { sg_m = "δημοφιλή", sg_f = "δημοφιλή", sg_n = "δημοφιλές", pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή" }, } }, { input_word = "επείγων", fem_type = "", expected_forms = { Nominativ = { sg_m = "επείγων", sg_f = "επείγουσα", sg_n = "επείγον", pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα" }, Genitiv = { sg_m = "επείγοντος", sg_f = "επείγουσας", sg_n = "επείγοντος", pl_m = "επείγοντων", pl_f = "επείγουσων", pl_n = "επείγοντων" }, Acusativ = { sg_m = "επείγοντα", sg_f = "επείγουσα", sg_n = "επείγον", pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα" }, Vocativ = { sg_m = "επείγων", sg_f = "επείγουσα", sg_n = "επείγον", pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα" }, } }, { input_word = "ντροπαλός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ντροπαλός", sg_f = "ντροπαλή", sg_n = "ντροπαλό", pl_m = "ντροπαλοί", pl_f = "ντροπαλές", pl_n = "ντροπαλά" }, Genitiv = { sg_m = "ντροπαλού", sg_f = "ντροπαλής", sg_n = "ντροπαλού", pl_m = "ντροπαλών", pl_f = "ντροπαλών", pl_n = "ντροπαλών" }, Acusativ = { sg_m = "ντροπαλό", sg_f = "ντροπαλή", sg_n = "ντροπαλό", pl_m = "ντροπαλούς", pl_f = "ντροπαλές", pl_n = "ντροπαλά" }, Vocativ = { sg_m = "ντροπαλέ", sg_f = "ντροπαλή", sg_n = "ντροπαλό", pl_m = "ντροπαλοί", pl_f = "ντροπαλές", pl_n = "ντροπαλά" }, } }, { input_word = "ολόκληρος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ολόκληρος", sg_f = "ολόκληρη", sg_n = "ολόκληρο", pl_m = "ολόκληροι", pl_f = "ολόκληρες", pl_n = "ολόκληρα" }, Genitiv = { sg_m = "ολόκληρου", sg_f = "ολόκληρης", sg_n = "ολόκληρου", pl_m = "ολόκληρων", pl_f = "ολόκληρων", pl_n = "ολόκληρων" }, Acusativ = { sg_m = "ολόκληρο", sg_f = "ολόκληρη", sg_n = "ολόκληρο", pl_m = "ολόκληρους", pl_f = "ολόκληρες", pl_n = "ολόκληρα" }, Vocativ = { sg_m = "ολόκληρε", sg_f = "ολόκληρη", sg_n = "ολόκληρο", pl_m = "ολόκληροι", pl_f = "ολόκληρες", pl_n = "ολόκληρα" }, } }, { input_word = "πονηρός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "πονηρός", sg_f = "πονηρή", sg_n = "πονηρό", pl_m = "πονηροί", pl_f = "πονηρές", pl_n = "πονηρά" }, Genitiv = { sg_m = "πονηρού", sg_f = "πονηρής", sg_n = "πονηρού", pl_m = "πονηρών", pl_f = "πονηρών", pl_n = "πονηρών" }, Acusativ = { sg_m = "πονηρό", sg_f = "πονηρή", sg_n = "πονηρό", pl_m = "πονηρούς", pl_f = "πονηρές", pl_n = "πονηρά" }, Vocativ = { sg_m = "πονηρέ", sg_f = "πονηρή", sg_n = "πονηρό", pl_m = "πονηροί", pl_f = "πονηρές", pl_n = "πονηρά" }, } }, { input_word = "πρόσφατος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "πρόσφατος", sg_f = "πρόσφατη", sg_n = "πρόσφατο", pl_m = "πρόσφατοι", pl_f = "πρόσφατες", pl_n = "πρόσφατα" }, Genitiv = { sg_m = "πρόσφατου", sg_f = "πρόσφατης", sg_n = "πρόσφατου", pl_m = "πρόσφατων", pl_f = "πρόσφατων", pl_n = "πρόσφατων" }, Acusativ = { sg_m = "πρόσφατο", sg_f = "πρόσφατη", sg_n = "πρόσφατο", pl_m = "πρόσφατους", pl_f = "πρόσφατες", pl_n = "πρόσφατα" }, Vocativ = { sg_m = "πρόσφατε", sg_f = "πρόσφατη", sg_n = "πρόσφατο", pl_m = "πρόσφατοι", pl_f = "πρόσφατες", pl_n = "πρόσφατα" }, } }, { input_word = "ταχυδρομικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ταχυδρομικός", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό", pl_m = "ταχυδρομικοί", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά" }, Genitiv = { sg_m = "ταχυδρομικού", sg_f = "ταχυδρομικής", sg_n = "ταχυδρομικού", pl_m = "ταχυδρομικών", pl_f = "ταχυδρομικών", pl_n = "ταχυδρομικών" }, Acusativ = { sg_m = "ταχυδρομικό", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό", pl_m = "ταχυδρομικούς", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά" }, Vocativ = { sg_m = "ταχυδρομικέ", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό", pl_m = "ταχυδρομικοί", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά" }, } }, { input_word = "τοπικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "τοπικός", sg_f = "τοπική", sg_n = "τοπικό", pl_m = "τοπικοί", pl_f = "τοπικές", pl_n = "τοπικά" }, Genitiv = { sg_m = "τοπικού", sg_f = "τοπικής", sg_n = "τοπικού", pl_m = "τοπικών", pl_f = "τοπικών", pl_n = "τοπικών" }, Acusativ = { sg_m = "τοπικό", sg_f = "τοπική", sg_n = "τοπικό", pl_m = "τοπικούς", pl_f = "τοπικές", pl_n = "τοπικά" }, Vocativ = { sg_m = "τοπικέ", sg_f = "τοπική", sg_n = "τοπικό", pl_m = "τοπικοί", pl_f = "τοπικές", pl_n = "τοπικά" }, } }, { input_word = "υδραυλικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "υδραυλικός", sg_f = "υδραυλική", sg_n = "υδραυλικό", pl_m = "υδραυλικοί", pl_f = "υδραυλικές", pl_n = "υδραυλικά" }, Genitiv = { sg_m = "υδραυλικού", sg_f = "υδραυλικής", sg_n = "υδραυλικού", pl_m = "υδραυλικών", pl_f = "υδραυλικών", pl_n = "υδραυλικών" }, Acusativ = { sg_m = "υδραυλικό", sg_f = "υδραυλική", sg_n = "υδραυλικό", pl_m = "υδραυλικούς", pl_f = "υδραυλικές", pl_n = "υδραυλικά" }, Vocativ = { sg_m = "υδραυλικέ", sg_f = "υδραυλική", sg_n = "υδραυλικό", pl_m = "υδραυλικοί", pl_f = "υδραυλικές", pl_n = "υδραυλικά" }, } }, { input_word = "υπεύθυνος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "υπεύθυνος", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο", pl_m = "υπεύθυνοι", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα" }, Genitiv = { sg_m = "υπεύθυνου", sg_f = "υπεύθυνης", sg_n = "υπεύθυνου", pl_m = "υπεύθυνων", pl_f = "υπεύθυνων", pl_n = "υπεύθυνων" }, Acusativ = { sg_m = "υπεύθυνο", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο", pl_m = "υπεύθυνους", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα" }, Vocativ = { sg_m = "υπεύθυνε", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο", pl_m = "υπεύθυνοι", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα" }, } }, { input_word = "χαλαρός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "χαλαρός", sg_f = "χαλαρή", sg_n = "χαλαρό", pl_m = "χαλαροί", pl_f = "χαλαρές", pl_n = "χαλαρά" }, Genitiv = { sg_m = "χαλαρού", sg_f = "χαλαρής", sg_n = "χαλαρού", pl_m = "χαλαρών", pl_f = "χαλαρών", pl_n = "χαλαρών" }, Acusativ = { sg_m = "χαλαρό", sg_f = "χαλαρή", sg_n = "χαλαρό", pl_m = "χαλαρούς", pl_f = "χαλαρές", pl_n = "χαλαρά" }, Vocativ = { sg_m = "χαλαρέ", sg_f = "χαλαρή", sg_n = "χαλαρό", pl_m = "χαλαροί", pl_f = "χαλαρές", pl_n = "χαλαρά" }, } }, { input_word = "σώφρων", fem_type = "", expected_forms = { Nominativ = { sg_m = "σώφρων", sg_f = "σώφρων", sg_n = "σώφρον", pl_m = "σώφρονες", pl_f = "σώφρονες", pl_n = "σώφρονα" }, Genitiv = { sg_m = "σώφρονος", sg_f = "σώφρονος", sg_n = "σώφρονος", pl_m = "σωφρόνων", pl_f = "σωφρόνων", pl_n = "σωφρόνων" }, Acusativ = { sg_m = "σώφρονα", sg_f = "σώφρονα", sg_n = "σώφρον", pl_m = "σώφρονες", pl_f = "σώφρονες", pl_n = "σώφρονα" }, Vocativ = { sg_m = "σώφρον", sg_f = "σώφρον", sg_n = "σώφρον", pl_m = "σώφρονες", pl_f = "σώφρονες", pl_n = "σώφρονα" }, } }, } -- Main test execution function function p.run_tests(frame) local errors = {} local test_count = 0 local case_functions = { Nominativ = "Nominativ_case", Genitiv = "Genitiv_case", Acusativ = "Acusativ_case", Vocativ = "Vocativ_case", } local form_keys = {"sg_m", "sg_f", "sg_n", "pl_m", "pl_f", "pl_n"} for _, test_case in ipairs(test_data) do local adjective = test_case.input_word local fem_type = test_case.fem_type ~= "" and test_case.fem_type or nil local expected_cases = test_case.expected_forms local frame_obj = create_mock_frame(adjective, fem_type) for case_name, func_name in pairs(case_functions) do if main_module[func_name] then test_count = test_count + 1 local raw_output = main_module[func_name](frame_obj) local actual_forms = parse_module_output(raw_output) local expected_forms = expected_cases[case_name] for idx, key in ipairs(form_keys) do local expected = expected_forms[key] local actual = actual_forms[idx] if actual ~= expected then table.insert(errors, string.format( "Fail [%s - %s - %s]: Expected '%s', got '%s'", adjective, case_name, key, expected or "nil", actual or "nil" )) end end else table.insert(errors, string.format("Missing function '%s' in Module:el-c-conj", func_name)) end end end -- Format summary report if #errors == 0 then return string.format(" All %d test cases passed successfully!", test_count) else return string.format(" Found %d errors out of %d test cases:\n* %s", #errors, test_count, table.concat(errors, "\n* ")) end end return p ohtim767yfmd4d8lps8x01c973x4go0 56385 56370 2026-09-10T17:05:22Z Steborce 2506 56385 Scribunto text/plain local p = {} -- Requirements local main_module = require('Module:el-c-conj') -- Helper function to parse the wikitext table row output local function parse_module_output(output_str) -- Strip the initial table row prefix (e.g., "|-\n |'''Номинатив''' ||") local cleaned_str = output_str:gsub("^%|%-%-?%s*%|'''[^']-'''%s*%|%|", "") cleaned_str = mw.text.trim(cleaned_str) -- Split forms separated by '||' local parts = mw.text.split(cleaned_str, "||") local forms = {} for i, part in ipairs(parts) do local trimmed_part = mw.text.trim(part) -- Extract target word inside [[...]] local form = trimmed_part:match("^%[%[(.*)%]%]$") if form then forms[i] = form else forms[i] = trimmed_part end end return forms end -- Helper to create a mock frame object per test case local function create_mock_frame(arg1, arg2) return { getParent = function() return { args = { [1] = arg1, [2] = arg2 } } end } end -- Dataset definitions local test_data = { { input_word = "έγγραφος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "έγγραφος", sg_f = "έγγραφη", sg_n = "έγγραφο", pl_m = "έγγραφοι", pl_f = "έγγραφες", pl_n = "έγγραφα" }, Genitiv = { sg_m = "έγγραφου", sg_f = "έγγραφης", sg_n = "έγγραφου", pl_m = "έγγραφων", pl_f = "έγγραφων", pl_n = "έγγραφων" }, Acusativ = { sg_m = "έγγραφο", sg_f = "έγγραφη", sg_n = "έγγραφο", pl_m = "έγγραφους", pl_f = "έγγραφες", pl_n = "έγγραφα" }, Vocativ = { sg_m = "έγγραφε", sg_f = "έγγραφη", sg_n = "έγγραφο", pl_m = "έγγραφοι", pl_f = "έγγραφες", pl_n = "έγγραφα" }, } }, { input_word = "ίδιος", fem_type = "α", expected_forms = { Nominativ = { sg_m = "ίδιος", sg_f = "ίδια", sg_n = "ίδιο", pl_m = "ίδιοι", pl_f = "ίδιες", pl_n = "ίδια" }, Genitiv = { sg_m = "ίδιου", sg_f = "ίδιας", sg_n = "ίδιου", pl_m = "ίδιων", pl_f = "ίδιων", pl_n = "ίδιων" }, Acusativ = { sg_m = "ίδιο", sg_f = "ίδια", sg_n = "ίδιο", pl_m = "ίδιους", pl_f = "ίδιες", pl_n = "ίδια" }, Vocativ = { sg_m = "ίδιε", sg_f = "ίδια", sg_n = "ίδιο", pl_m = "ίδιοι", pl_f = "ίδιες", pl_n = "ίδια" }, } }, { input_word = "ανεξάρτητος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ανεξάρτητος", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο", pl_m = "ανεξάρτητοι", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα" }, Genitiv = { sg_m = "ανεξάρτητου", sg_f = "ανεξάρτητης", sg_n = "ανεξάρτητου", pl_m = "ανεξάρτητων", pl_f = "ανεξάρτητων", pl_n = "ανεξάρτητων" }, Acusativ = { sg_m = "ανεξάρτητο", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο", pl_m = "ανεξάρτητους", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα" }, Vocativ = { sg_m = "ανεξάρτητε", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο", pl_m = "ανεξάρτητοι", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα" }, } }, { input_word = "αποδοτικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "αποδοτικός", sg_f = "αποδοτική", sg_n = "αποδοτικό", pl_m = "αποδοτικοί", pl_f = "αποδοτικές", pl_n = "αποδοτικά" }, Genitiv = { sg_m = "αποδοτικού", sg_f = "αποδοτικής", sg_n = "αποδοτικού", pl_m = "αποδοτικών", pl_f = "αποδοτικών", pl_n = "αποδοτικών" }, Acusativ = { sg_m = "αποδοτικό", sg_f = "αποδοτική", sg_n = "αποδοτικό", pl_m = "αποδοτικούς", pl_f = "αποδοτικές", pl_n = "αποδοτικά" }, Vocativ = { sg_m = "αποδοτικέ", sg_f = "αποδοτική", sg_n = "αποδοτικό", pl_m = "αποδοτικοί", pl_f = "αποδοτικές", pl_n = "αποδοτικά" }, } }, { input_word = "αστικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "αστικός", sg_f = "αστική", sg_n = "αστικό", pl_m = "αστικοί", pl_f = "αστικές", pl_n = "αστικά" }, Genitiv = { sg_m = "αστικού", sg_f = "αστικής", sg_n = "αστικού", pl_m = "αστικών", pl_f = "αστικών", pl_n = "αστικών" }, Acusativ = { sg_m = "αστικό", sg_f = "αστική", sg_n = "αστικό", pl_m = "αστικούς", pl_f = "αστικές", pl_n = "αστικά" }, Vocativ = { sg_m = "αστικέ", sg_f = "αστική", sg_n = "αστικό", pl_m = "αστικοί", pl_f = "αστικές", pl_n = "αστικά" }, } }, { input_word = "βαρετός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "βαρετός", sg_f = "βαρετή", sg_n = "βαρετό", pl_m = "βαρετοί", pl_f = "βαρετές", pl_n = "βαρετά" }, Genitiv = { sg_m = "βαρετού", sg_f = "βαρετής", sg_n = "βαρετού", pl_m = "βαρετών", pl_f = "βαρετών", pl_n = "βαρετών" }, Acusativ = { sg_m = "βαρετό", sg_f = "βαρετή", sg_n = "βαρετό", pl_m = "βαρετούς", pl_f = "βαρετές", pl_n = "βαρετά" }, Vocativ = { sg_m = "βαρετέ", sg_f = "βαρετή", sg_n = "βαρετό", pl_m = "βαρετοί", pl_f = "βαρετές", pl_n = "βαρετά" }, } }, { input_word = "δημοφιλής", fem_type = "η", expected_forms = { Nominativ = { sg_m = "δημοφιλής", sg_f = "δημοφιλής", sg_n = "δημοφιλές", pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή" }, Genitiv = { sg_m = "δημοφιλούς", sg_f = "δημοφιλούς", sg_n = "δημοφιλούς", pl_m = "δημοφιλών", pl_f = "δημοφιλών", pl_n = "δημοφιλών" }, Acusativ = { sg_m = "δημοφιλή", sg_f = "δημοφιλή", sg_n = "δημοφιλές", pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή" }, Vocativ = { sg_m = "δημοφιλή", sg_f = "δημοφιλή", sg_n = "δημοφιλές", pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή" }, } }, { input_word = "ντροπαλός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ντροπαλός", sg_f = "ντροπαλή", sg_n = "ντροπαλό", pl_m = "ντροπαλοί", pl_f = "ντροπαλές", pl_n = "ντροπαλά" }, Genitiv = { sg_m = "ντροπαλού", sg_f = "ντροπαλής", sg_n = "ντροπαλού", pl_m = "ντροπαλών", pl_f = "ντροπαλών", pl_n = "ντροπαλών" }, Acusativ = { sg_m = "ντροπαλό", sg_f = "ντροπαλή", sg_n = "ντροπαλό", pl_m = "ντροπαλούς", pl_f = "ντροπαλές", pl_n = "ντροπαλά" }, Vocativ = { sg_m = "ντροπαλέ", sg_f = "ντροπαλή", sg_n = "ντροπαλό", pl_m = "ντροπαλοί", pl_f = "ντροπαλές", pl_n = "ντροπαλά" }, } }, { input_word = "ολόκληρος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ολόκληρος", sg_f = "ολόκληρη", sg_n = "ολόκληρο", pl_m = "ολόκληροι", pl_f = "ολόκληρες", pl_n = "ολόκληρα" }, Genitiv = { sg_m = "ολόκληρου", sg_f = "ολόκληρης", sg_n = "ολόκληρου", pl_m = "ολόκληρων", pl_f = "ολόκληρων", pl_n = "ολόκληρων" }, Acusativ = { sg_m = "ολόκληρο", sg_f = "ολόκληρη", sg_n = "ολόκληρο", pl_m = "ολόκληρους", pl_f = "ολόκληρες", pl_n = "ολόκληρα" }, Vocativ = { sg_m = "ολόκληρε", sg_f = "ολόκληρη", sg_n = "ολόκληρο", pl_m = "ολόκληροι", pl_f = "ολόκληρες", pl_n = "ολόκληρα" }, } }, { input_word = "πονηρός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "πονηρός", sg_f = "πονηρή", sg_n = "πονηρό", pl_m = "πονηροί", pl_f = "πονηρές", pl_n = "πονηρά" }, Genitiv = { sg_m = "πονηρού", sg_f = "πονηρής", sg_n = "πονηρού", pl_m = "πονηρών", pl_f = "πονηρών", pl_n = "πονηρών" }, Acusativ = { sg_m = "πονηρό", sg_f = "πονηρή", sg_n = "πονηρό", pl_m = "πονηρούς", pl_f = "πονηρές", pl_n = "πονηρά" }, Vocativ = { sg_m = "πονηρέ", sg_f = "πονηρή", sg_n = "πονηρό", pl_m = "πονηροί", pl_f = "πονηρές", pl_n = "πονηρά" }, } }, { input_word = "πρόσφατος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "πρόσφατος", sg_f = "πρόσφατη", sg_n = "πρόσφατο", pl_m = "πρόσφατοι", pl_f = "πρόσφατες", pl_n = "πρόσφατα" }, Genitiv = { sg_m = "πρόσφατου", sg_f = "πρόσφατης", sg_n = "πρόσφατου", pl_m = "πρόσφατων", pl_f = "πρόσφατων", pl_n = "πρόσφατων" }, Acusativ = { sg_m = "πρόσφατο", sg_f = "πρόσφατη", sg_n = "πρόσφατο", pl_m = "πρόσφατους", pl_f = "πρόσφατες", pl_n = "πρόσφατα" }, Vocativ = { sg_m = "πρόσφατε", sg_f = "πρόσφατη", sg_n = "πρόσφατο", pl_m = "πρόσφατοι", pl_f = "πρόσφατες", pl_n = "πρόσφατα" }, } }, { input_word = "ταχυδρομικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ταχυδρομικός", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό", pl_m = "ταχυδρομικοί", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά" }, Genitiv = { sg_m = "ταχυδρομικού", sg_f = "ταχυδρομικής", sg_n = "ταχυδρομικού", pl_m = "ταχυδρομικών", pl_f = "ταχυδρομικών", pl_n = "ταχυδρομικών" }, Acusativ = { sg_m = "ταχυδρομικό", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό", pl_m = "ταχυδρομικούς", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά" }, Vocativ = { sg_m = "ταχυδρομικέ", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό", pl_m = "ταχυδρομικοί", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά" }, } }, { input_word = "τοπικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "τοπικός", sg_f = "τοπική", sg_n = "τοπικό", pl_m = "τοπικοί", pl_f = "τοπικές", pl_n = "τοπικά" }, Genitiv = { sg_m = "τοπικού", sg_f = "τοπικής", sg_n = "τοπικού", pl_m = "τοπικών", pl_f = "τοπικών", pl_n = "τοπικών" }, Acusativ = { sg_m = "τοπικό", sg_f = "τοπική", sg_n = "τοπικό", pl_m = "τοπικούς", pl_f = "τοπικές", pl_n = "τοπικά" }, Vocativ = { sg_m = "τοπικέ", sg_f = "τοπική", sg_n = "τοπικό", pl_m = "τοπικοί", pl_f = "τοπικές", pl_n = "τοπικά" }, } }, { input_word = "υδραυλικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "υδραυλικός", sg_f = "υδραυλική", sg_n = "υδραυλικό", pl_m = "υδραυλικοί", pl_f = "υδραυλικές", pl_n = "υδραυλικά" }, Genitiv = { sg_m = "υδραυλικού", sg_f = "υδραυλικής", sg_n = "υδραυλικού", pl_m = "υδραυλικών", pl_f = "υδραυλικών", pl_n = "υδραυλικών" }, Acusativ = { sg_m = "υδραυλικό", sg_f = "υδραυλική", sg_n = "υδραυλικό", pl_m = "υδραυλικούς", pl_f = "υδραυλικές", pl_n = "υδραυλικά" }, Vocativ = { sg_m = "υδραυλικέ", sg_f = "υδραυλική", sg_n = "υδραυλικό", pl_m = "υδραυλικοί", pl_f = "υδραυλικές", pl_n = "υδραυλικά" }, } }, { input_word = "υπεύθυνος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "υπεύθυνος", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο", pl_m = "υπεύθυνοι", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα" }, Genitiv = { sg_m = "υπεύθυνου", sg_f = "υπεύθυνης", sg_n = "υπεύθυνου", pl_m = "υπεύθυνων", pl_f = "υπεύθυνων", pl_n = "υπεύθυνων" }, Acusativ = { sg_m = "υπεύθυνο", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο", pl_m = "υπεύθυνους", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα" }, Vocativ = { sg_m = "υπεύθυνε", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο", pl_m = "υπεύθυνοι", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα" }, } }, { input_word = "επείγων", fem_type = "", expected_forms = { Nominativ = { sg_m = "επείγων", sg_f = "επείγουσα", sg_n = "επείγον", pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα" }, Genitiv = { sg_m = "επείγοντος", sg_f = "επείγουσας", sg_n = "επείγοντος", pl_m = "επειγόντων", pl_f = "επειγουσών", pl_n = "επειγόντων" }, Acusativ = { sg_m = "επείγοντα", sg_f = "επείγουσα", sg_n = "επείγον", pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα" }, Vocativ = { sg_m = "επείγων", sg_f = "επείγουσα", sg_n = "επείγον", pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα" }, } }, { input_word = "χαλαρός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "χαλαρός", sg_f = "χαλαρή", sg_n = "χαλαρό", pl_m = "χαλαροί", pl_f = "χαλαρές", pl_n = "χαλαρά" }, Genitiv = { sg_m = "χαλαρού", sg_f = "χαλαρής", sg_n = "χαλαρού", pl_m = "χαλαρών", pl_f = "χαλαρών", pl_n = "χαλαρών" }, Acusativ = { sg_m = "χαλαρό", sg_f = "χαλαρή", sg_n = "χαλαρό", pl_m = "χαλαρούς", pl_f = "χαλαρές", pl_n = "χαλαρά" }, Vocativ = { sg_m = "χαλαρέ", sg_f = "χαλαρή", sg_n = "χαλαρό", pl_m = "χαλαροί", pl_f = "χαλαρές", pl_n = "χαλαρά" }, } }, { input_word = "σώφρων", fem_type = "", expected_forms = { Nominativ = { sg_m = "σώφρων", sg_f = "σώφρων", sg_n = "σώφρον", pl_m = "σώφρονες", pl_f = "σώφρονες", pl_n = "σώφρονα" }, Genitiv = { sg_m = "σώφρονος", sg_f = "σώφρονος", sg_n = "σώφρονος", pl_m = "σωφρόνων", pl_f = "σωφρόνων", pl_n = "σωφρόνων" }, Acusativ = { sg_m = "σώφρονα", sg_f = "σώφρονα", sg_n = "σώφρον", pl_m = "σώφρονες", pl_f = "σώφρονες", pl_n = "σώφρονα" }, Vocativ = { sg_m = "σώφρον", sg_f = "σώφρον", sg_n = "σώφρον", pl_m = "σώφρονες", pl_f = "σώφρονες", pl_n = "σώφρονα" }, } }, } -- Main test execution function function p.run_tests(frame) local errors = {} local test_count = 0 local case_functions = { Nominativ = "Nominativ_case", Genitiv = "Genitiv_case", Acusativ = "Acusativ_case", Vocativ = "Vocativ_case", } local form_keys = {"sg_m", "sg_f", "sg_n", "pl_m", "pl_f", "pl_n"} for _, test_case in ipairs(test_data) do local adjective = test_case.input_word local fem_type = test_case.fem_type ~= "" and test_case.fem_type or nil local expected_cases = test_case.expected_forms local frame_obj = create_mock_frame(adjective, fem_type) for case_name, func_name in pairs(case_functions) do if main_module[func_name] then test_count = test_count + 1 local raw_output = main_module[func_name](frame_obj) local actual_forms = parse_module_output(raw_output) local expected_forms = expected_cases[case_name] for idx, key in ipairs(form_keys) do local expected = expected_forms[key] local actual = actual_forms[idx] if actual ~= expected then table.insert(errors, string.format( "Fail [%s - %s - %s]: Expected '%s', got '%s'", adjective, case_name, key, expected or "nil", actual or "nil" )) end end else table.insert(errors, string.format("Missing function '%s' in Module:el-c-conj", func_name)) end end end -- Format summary report if #errors == 0 then return string.format(" All %d test cases passed successfully!", test_count) else return string.format(" Found %d errors out of %d test cases:\n* %s", #errors, test_count, table.concat(errors, "\n* ")) end end return p aurb4lpaghzvg3pdox9yrsmzz0eub8f 56386 56385 2026-09-10T17:20:50Z Steborce 2506 56386 Scribunto text/plain local p = {} -- Requirements local main_module = require('Module:el-c-conj') -- Helper function to parse the wikitext table row output local function parse_module_output(output_str) -- Strip the initial table row prefix (e.g., "|-\n |'''Номинатив''' ||") local cleaned_str = output_str:gsub("^%|%-%-?%s*%|'''[^']-'''%s*%|%|", "") cleaned_str = mw.text.trim(cleaned_str) -- Split forms separated by '||' local parts = mw.text.split(cleaned_str, "||") local forms = {} for i, part in ipairs(parts) do local trimmed_part = mw.text.trim(part) -- Extract target word inside [[...]] local form = trimmed_part:match("^%[%[(.*)%]%]$") if form then forms[i] = form else forms[i] = trimmed_part end end return forms end -- Helper to create a mock frame object per test case local function create_mock_frame(arg1, arg2) return { getParent = function() return { args = { [1] = arg1, [2] = arg2 } } end } end -- Dataset definitions local test_data = { { input_word = "έγγραφος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "έγγραφος", sg_f = "έγγραφη", sg_n = "έγγραφο", pl_m = "έγγραφοι", pl_f = "έγγραφες", pl_n = "έγγραφα" }, Genitiv = { sg_m = "έγγραφου", sg_f = "έγγραφης", sg_n = "έγγραφου", pl_m = "έγγραφων", pl_f = "έγγραφων", pl_n = "έγγραφων" }, Acusativ = { sg_m = "έγγραφο", sg_f = "έγγραφη", sg_n = "έγγραφο", pl_m = "έγγραφους", pl_f = "έγγραφες", pl_n = "έγγραφα" }, Vocativ = { sg_m = "έγγραφε", sg_f = "έγγραφη", sg_n = "έγγραφο", pl_m = "έγγραφοι", pl_f = "έγγραφες", pl_n = "έγγραφα" }, } }, { input_word = "ίδιος", fem_type = "α", expected_forms = { Nominativ = { sg_m = "ίδιος", sg_f = "ίδια", sg_n = "ίδιο", pl_m = "ίδιοι", pl_f = "ίδιες", pl_n = "ίδια" }, Genitiv = { sg_m = "ίδιου", sg_f = "ίδιας", sg_n = "ίδιου", pl_m = "ίδιων", pl_f = "ίδιων", pl_n = "ίδιων" }, Acusativ = { sg_m = "ίδιο", sg_f = "ίδια", sg_n = "ίδιο", pl_m = "ίδιους", pl_f = "ίδιες", pl_n = "ίδια" }, Vocativ = { sg_m = "ίδιε", sg_f = "ίδια", sg_n = "ίδιο", pl_m = "ίδιοι", pl_f = "ίδιες", pl_n = "ίδια" }, } }, { input_word = "ανεξάρτητος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ανεξάρτητος", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο", pl_m = "ανεξάρτητοι", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα" }, Genitiv = { sg_m = "ανεξάρτητου", sg_f = "ανεξάρτητης", sg_n = "ανεξάρτητου", pl_m = "ανεξάρτητων", pl_f = "ανεξάρτητων", pl_n = "ανεξάρτητων" }, Acusativ = { sg_m = "ανεξάρτητο", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο", pl_m = "ανεξάρτητους", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα" }, Vocativ = { sg_m = "ανεξάρτητε", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο", pl_m = "ανεξάρτητοι", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα" }, } }, { input_word = "αποδοτικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "αποδοτικός", sg_f = "αποδοτική", sg_n = "αποδοτικό", pl_m = "αποδοτικοί", pl_f = "αποδοτικές", pl_n = "αποδοτικά" }, Genitiv = { sg_m = "αποδοτικού", sg_f = "αποδοτικής", sg_n = "αποδοτικού", pl_m = "αποδοτικών", pl_f = "αποδοτικών", pl_n = "αποδοτικών" }, Acusativ = { sg_m = "αποδοτικό", sg_f = "αποδοτική", sg_n = "αποδοτικό", pl_m = "αποδοτικούς", pl_f = "αποδοτικές", pl_n = "αποδοτικά" }, Vocativ = { sg_m = "αποδοτικέ", sg_f = "αποδοτική", sg_n = "αποδοτικό", pl_m = "αποδοτικοί", pl_f = "αποδοτικές", pl_n = "αποδοτικά" }, } }, { input_word = "αστικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "αστικός", sg_f = "αστική", sg_n = "αστικό", pl_m = "αστικοί", pl_f = "αστικές", pl_n = "αστικά" }, Genitiv = { sg_m = "αστικού", sg_f = "αστικής", sg_n = "αστικού", pl_m = "αστικών", pl_f = "αστικών", pl_n = "αστικών" }, Acusativ = { sg_m = "αστικό", sg_f = "αστική", sg_n = "αστικό", pl_m = "αστικούς", pl_f = "αστικές", pl_n = "αστικά" }, Vocativ = { sg_m = "αστικέ", sg_f = "αστική", sg_n = "αστικό", pl_m = "αστικοί", pl_f = "αστικές", pl_n = "αστικά" }, } }, { input_word = "βαρετός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "βαρετός", sg_f = "βαρετή", sg_n = "βαρετό", pl_m = "βαρετοί", pl_f = "βαρετές", pl_n = "βαρετά" }, Genitiv = { sg_m = "βαρετού", sg_f = "βαρετής", sg_n = "βαρετού", pl_m = "βαρετών", pl_f = "βαρετών", pl_n = "βαρετών" }, Acusativ = { sg_m = "βαρετό", sg_f = "βαρετή", sg_n = "βαρετό", pl_m = "βαρετούς", pl_f = "βαρετές", pl_n = "βαρετά" }, Vocativ = { sg_m = "βαρετέ", sg_f = "βαρετή", sg_n = "βαρετό", pl_m = "βαρετοί", pl_f = "βαρετές", pl_n = "βαρετά" }, } }, { input_word = "δημοφιλής", fem_type = "η", expected_forms = { Nominativ = { sg_m = "δημοφιλής", sg_f = "δημοφιλής", sg_n = "δημοφιλές", pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή" }, Genitiv = { sg_m = "δημοφιλούς", sg_f = "δημοφιλούς", sg_n = "δημοφιλούς", pl_m = "δημοφιλών", pl_f = "δημοφιλών", pl_n = "δημοφιλών" }, Acusativ = { sg_m = "δημοφιλή", sg_f = "δημοφιλή", sg_n = "δημοφιλές", pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή" }, Vocativ = { sg_m = "δημοφιλή", sg_f = "δημοφιλή", sg_n = "δημοφιλές", pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή" }, } }, { input_word = "ντροπαλός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ντροπαλός", sg_f = "ντροπαλή", sg_n = "ντροπαλό", pl_m = "ντροπαλοί", pl_f = "ντροπαλές", pl_n = "ντροπαλά" }, Genitiv = { sg_m = "ντροπαλού", sg_f = "ντροπαλής", sg_n = "ντροπαλού", pl_m = "ντροπαλών", pl_f = "ντροπαλών", pl_n = "ντροπαλών" }, Acusativ = { sg_m = "ντροπαλό", sg_f = "ντροπαλή", sg_n = "ντροπαλό", pl_m = "ντροπαλούς", pl_f = "ντροπαλές", pl_n = "ντροπαλά" }, Vocativ = { sg_m = "ντροπαλέ", sg_f = "ντροπαλή", sg_n = "ντροπαλό", pl_m = "ντροπαλοί", pl_f = "ντροπαλές", pl_n = "ντροπαλά" }, } }, { input_word = "ολόκληρος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ολόκληρος", sg_f = "ολόκληρη", sg_n = "ολόκληρο", pl_m = "ολόκληροι", pl_f = "ολόκληρες", pl_n = "ολόκληρα" }, Genitiv = { sg_m = "ολόκληρου", sg_f = "ολόκληρης", sg_n = "ολόκληρου", pl_m = "ολόκληρων", pl_f = "ολόκληρων", pl_n = "ολόκληρων" }, Acusativ = { sg_m = "ολόκληρο", sg_f = "ολόκληρη", sg_n = "ολόκληρο", pl_m = "ολόκληρους", pl_f = "ολόκληρες", pl_n = "ολόκληρα" }, Vocativ = { sg_m = "ολόκληρε", sg_f = "ολόκληρη", sg_n = "ολόκληρο", pl_m = "ολόκληροι", pl_f = "ολόκληρες", pl_n = "ολόκληρα" }, } }, { input_word = "πονηρός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "πονηρός", sg_f = "πονηρή", sg_n = "πονηρό", pl_m = "πονηροί", pl_f = "πονηρές", pl_n = "πονηρά" }, Genitiv = { sg_m = "πονηρού", sg_f = "πονηρής", sg_n = "πονηρού", pl_m = "πονηρών", pl_f = "πονηρών", pl_n = "πονηρών" }, Acusativ = { sg_m = "πονηρό", sg_f = "πονηρή", sg_n = "πονηρό", pl_m = "πονηρούς", pl_f = "πονηρές", pl_n = "πονηρά" }, Vocativ = { sg_m = "πονηρέ", sg_f = "πονηρή", sg_n = "πονηρό", pl_m = "πονηροί", pl_f = "πονηρές", pl_n = "πονηρά" }, } }, { input_word = "πρόσφατος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "πρόσφατος", sg_f = "πρόσφατη", sg_n = "πρόσφατο", pl_m = "πρόσφατοι", pl_f = "πρόσφατες", pl_n = "πρόσφατα" }, Genitiv = { sg_m = "πρόσφατου", sg_f = "πρόσφατης", sg_n = "πρόσφατου", pl_m = "πρόσφατων", pl_f = "πρόσφατων", pl_n = "πρόσφατων" }, Acusativ = { sg_m = "πρόσφατο", sg_f = "πρόσφατη", sg_n = "πρόσφατο", pl_m = "πρόσφατους", pl_f = "πρόσφατες", pl_n = "πρόσφατα" }, Vocativ = { sg_m = "πρόσφατε", sg_f = "πρόσφατη", sg_n = "πρόσφατο", pl_m = "πρόσφατοι", pl_f = "πρόσφατες", pl_n = "πρόσφατα" }, } }, { input_word = "ταχυδρομικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ταχυδρομικός", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό", pl_m = "ταχυδρομικοί", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά" }, Genitiv = { sg_m = "ταχυδρομικού", sg_f = "ταχυδρομικής", sg_n = "ταχυδρομικού", pl_m = "ταχυδρομικών", pl_f = "ταχυδρομικών", pl_n = "ταχυδρομικών" }, Acusativ = { sg_m = "ταχυδρομικό", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό", pl_m = "ταχυδρομικούς", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά" }, Vocativ = { sg_m = "ταχυδρομικέ", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό", pl_m = "ταχυδρομικοί", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά" }, } }, { input_word = "τοπικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "τοπικός", sg_f = "τοπική", sg_n = "τοπικό", pl_m = "τοπικοί", pl_f = "τοπικές", pl_n = "τοπικά" }, Genitiv = { sg_m = "τοπικού", sg_f = "τοπικής", sg_n = "τοπικού", pl_m = "τοπικών", pl_f = "τοπικών", pl_n = "τοπικών" }, Acusativ = { sg_m = "τοπικό", sg_f = "τοπική", sg_n = "τοπικό", pl_m = "τοπικούς", pl_f = "τοπικές", pl_n = "τοπικά" }, Vocativ = { sg_m = "τοπικέ", sg_f = "τοπική", sg_n = "τοπικό", pl_m = "τοπικοί", pl_f = "τοπικές", pl_n = "τοπικά" }, } }, { input_word = "υδραυλικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "υδραυλικός", sg_f = "υδραυλική", sg_n = "υδραυλικό", pl_m = "υδραυλικοί", pl_f = "υδραυλικές", pl_n = "υδραυλικά" }, Genitiv = { sg_m = "υδραυλικού", sg_f = "υδραυλικής", sg_n = "υδραυλικού", pl_m = "υδραυλικών", pl_f = "υδραυλικών", pl_n = "υδραυλικών" }, Acusativ = { sg_m = "υδραυλικό", sg_f = "υδραυλική", sg_n = "υδραυλικό", pl_m = "υδραυλικούς", pl_f = "υδραυλικές", pl_n = "υδραυλικά" }, Vocativ = { sg_m = "υδραυλικέ", sg_f = "υδραυλική", sg_n = "υδραυλικό", pl_m = "υδραυλικοί", pl_f = "υδραυλικές", pl_n = "υδραυλικά" }, } }, { input_word = "υπεύθυνος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "υπεύθυνος", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο", pl_m = "υπεύθυνοι", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα" }, Genitiv = { sg_m = "υπεύθυνου", sg_f = "υπεύθυνης", sg_n = "υπεύθυνου", pl_m = "υπεύθυνων", pl_f = "υπεύθυνων", pl_n = "υπεύθυνων" }, Acusativ = { sg_m = "υπεύθυνο", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο", pl_m = "υπεύθυνους", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα" }, Vocativ = { sg_m = "υπεύθυνε", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο", pl_m = "υπεύθυνοι", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα" }, } }, { input_word = "επείγων", fem_type = "", expected_forms = { Nominativ = { sg_m = "επείγων", sg_f = "επείγουσα", sg_n = "επείγον", pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα" }, Genitiv = { sg_m = "επείγοντος", sg_f = "επείγουσας", sg_n = "επείγοντος", pl_m = "επειγόντων", pl_f = "επειγουσών", pl_n = "επειγόντων" }, Acusativ = { sg_m = "επείγοντα", sg_f = "επείγουσα", sg_n = "επείγον", pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα" }, Vocativ = { sg_m = "επείγων", sg_f = "επείγουσα", sg_n = "επείγον", pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα" }, } }, { input_word = "χαλαρός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "χαλαρός", sg_f = "χαλαρή", sg_n = "χαλαρό", pl_m = "χαλαροί", pl_f = "χαλαρές", pl_n = "χαλαρά" }, Genitiv = { sg_m = "χαλαρού", sg_f = "χαλαρής", sg_n = "χαλαρού", pl_m = "χαλαρών", pl_f = "χαλαρών", pl_n = "χαλαρών" }, Acusativ = { sg_m = "χαλαρό", sg_f = "χαλαρή", sg_n = "χαλαρό", pl_m = "χαλαρούς", pl_f = "χαλαρές", pl_n = "χαλαρά" }, Vocativ = { sg_m = "χαλαρέ", sg_f = "χαλαρή", sg_n = "χαλαρό", pl_m = "χαλαροί", pl_f = "χαλαρές", pl_n = "χαλαρά" }, } }, } -- Main test execution function function p.run_tests(frame) local errors = {} local test_count = 0 local case_functions = { Nominativ = "Nominativ_case", Genitiv = "Genitiv_case", Acusativ = "Acusativ_case", Vocativ = "Vocativ_case", } local form_keys = {"sg_m", "sg_f", "sg_n", "pl_m", "pl_f", "pl_n"} for _, test_case in ipairs(test_data) do local adjective = test_case.input_word local fem_type = test_case.fem_type ~= "" and test_case.fem_type or nil local expected_cases = test_case.expected_forms local frame_obj = create_mock_frame(adjective, fem_type) for case_name, func_name in pairs(case_functions) do if main_module[func_name] then test_count = test_count + 1 local raw_output = main_module[func_name](frame_obj) local actual_forms = parse_module_output(raw_output) local expected_forms = expected_cases[case_name] for idx, key in ipairs(form_keys) do local expected = expected_forms[key] local actual = actual_forms[idx] if actual ~= expected then table.insert(errors, string.format( "Fail [%s - %s - %s]: Expected '%s', got '%s'", adjective, case_name, key, expected or "nil", actual or "nil" )) end end else table.insert(errors, string.format("Missing function '%s' in Module:el-c-conj", func_name)) end end end -- Format summary report if #errors == 0 then return string.format(" All %d test cases passed successfully!", test_count) else return string.format(" Found %d errors out of %d test cases:\n* %s", #errors, test_count, table.concat(errors, "\n* ")) end end return p dpv5f7s1m4cuiesme9dif9d47759jxr 56418 56386 2026-09-11T08:55:08Z Steborce 2506 56418 Scribunto text/plain local p = {} -- Requirements local main_module = require('Module:el-c-conj') -- Helper function to parse the wikitext table row output local function parse_module_output(output_str) -- Strip the initial table row prefix (e.g., "|-\n |'''Номинатив''' ||") local cleaned_str = output_str:gsub("^%|%-%-?%s*%|'''[^']-'''%s*%|%|", "") cleaned_str = mw.text.trim(cleaned_str) -- Split forms separated by '||' local parts = mw.text.split(cleaned_str, "||") local forms = {} for i, part in ipairs(parts) do local trimmed_part = mw.text.trim(part) -- Extract target word inside [[...]] local form = trimmed_part:match("^%[%[(.*)%]%]$") if form then forms[i] = form else forms[i] = trimmed_part end end return forms end -- Helper to create a mock frame object per test case local function create_mock_frame(arg1, arg2) return { getParent = function() return { args = { [1] = arg1, [2] = arg2 } } end } end -- Dataset definitions local test_data = { { input_word = "έγγραφος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "έγγραφος", sg_f = "έγγραφη", sg_n = "έγγραφο", pl_m = "έγγραφοι", pl_f = "έγγραφες", pl_n = "έγγραφα" }, Genitiv = { sg_m = "έγγραφου", sg_f = "έγγραφης", sg_n = "έγγραφου", pl_m = "έγγραφων", pl_f = "έγγραφων", pl_n = "έγγραφων" }, Acusativ = { sg_m = "έγγραφο", sg_f = "έγγραφη", sg_n = "έγγραφο", pl_m = "έγγραφους", pl_f = "έγγραφες", pl_n = "έγγραφα" }, Vocativ = { sg_m = "έγγραφε", sg_f = "έγγραφη", sg_n = "έγγραφο", pl_m = "έγγραφοι", pl_f = "έγγραφες", pl_n = "έγγραφα" }, } }, { input_word = "παρελθών", fem_type = "ούσα", expected_forms = { Nominativ = { sg_m = "παρελθών", sg_f = "παρελθούσα", sg_n = "παρελθόν", pl_m = "παρελθόντες", pl_f = "παρελθούσες", pl_n = "παρελθόντα" }, Genitiv = { sg_m = "παρελθόντος", sg_f = "παρελθούσας", sg_n = "παρελθόντος", pl_m = "παρελθόντων", pl_f = "παρελθουσών", pl_n = "παρελθόντων" }, Acusativ = { sg_m = "παρελθόντα", sg_f = "παρελθούσα", sg_n = "παρελθόν", pl_m = "παρελθόντες", pl_f = "παρελθούσες", pl_n = "παρελθόντα" }, Vocativ = { sg_m = "παρελθών", sg_f = "παρελθούσα", sg_n = "παρελθόν", pl_m = "παρελθόντες", pl_f = "παρελθούσες", pl_n = "παρελθόντα" }, } }, { input_word = "ίδιος", fem_type = "α", expected_forms = { Nominativ = { sg_m = "ίδιος", sg_f = "ίδια", sg_n = "ίδιο", pl_m = "ίδιοι", pl_f = "ίδιες", pl_n = "ίδια" }, Genitiv = { sg_m = "ίδιου", sg_f = "ίδιας", sg_n = "ίδιου", pl_m = "ίδιων", pl_f = "ίδιων", pl_n = "ίδιων" }, Acusativ = { sg_m = "ίδιο", sg_f = "ίδια", sg_n = "ίδιο", pl_m = "ίδιους", pl_f = "ίδιες", pl_n = "ίδια" }, Vocativ = { sg_m = "ίδιε", sg_f = "ίδια", sg_n = "ίδιο", pl_m = "ίδιοι", pl_f = "ίδιες", pl_n = "ίδια" }, } }, { input_word = "ανεξάρτητος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ανεξάρτητος", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο", pl_m = "ανεξάρτητοι", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα" }, Genitiv = { sg_m = "ανεξάρτητου", sg_f = "ανεξάρτητης", sg_n = "ανεξάρτητου", pl_m = "ανεξάρτητων", pl_f = "ανεξάρτητων", pl_n = "ανεξάρτητων" }, Acusativ = { sg_m = "ανεξάρτητο", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο", pl_m = "ανεξάρτητους", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα" }, Vocativ = { sg_m = "ανεξάρτητε", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο", pl_m = "ανεξάρτητοι", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα" }, } }, { input_word = "αποδοτικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "αποδοτικός", sg_f = "αποδοτική", sg_n = "αποδοτικό", pl_m = "αποδοτικοί", pl_f = "αποδοτικές", pl_n = "αποδοτικά" }, Genitiv = { sg_m = "αποδοτικού", sg_f = "αποδοτικής", sg_n = "αποδοτικού", pl_m = "αποδοτικών", pl_f = "αποδοτικών", pl_n = "αποδοτικών" }, Acusativ = { sg_m = "αποδοτικό", sg_f = "αποδοτική", sg_n = "αποδοτικό", pl_m = "αποδοτικούς", pl_f = "αποδοτικές", pl_n = "αποδοτικά" }, Vocativ = { sg_m = "αποδοτικέ", sg_f = "αποδοτική", sg_n = "αποδοτικό", pl_m = "αποδοτικοί", pl_f = "αποδοτικές", pl_n = "αποδοτικά" }, } }, { input_word = "αστικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "αστικός", sg_f = "αστική", sg_n = "αστικό", pl_m = "αστικοί", pl_f = "αστικές", pl_n = "αστικά" }, Genitiv = { sg_m = "αστικού", sg_f = "αστικής", sg_n = "αστικού", pl_m = "αστικών", pl_f = "αστικών", pl_n = "αστικών" }, Acusativ = { sg_m = "αστικό", sg_f = "αστική", sg_n = "αστικό", pl_m = "αστικούς", pl_f = "αστικές", pl_n = "αστικά" }, Vocativ = { sg_m = "αστικέ", sg_f = "αστική", sg_n = "αστικό", pl_m = "αστικοί", pl_f = "αστικές", pl_n = "αστικά" }, } }, { input_word = "βαρετός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "βαρετός", sg_f = "βαρετή", sg_n = "βαρετό", pl_m = "βαρετοί", pl_f = "βαρετές", pl_n = "βαρετά" }, Genitiv = { sg_m = "βαρετού", sg_f = "βαρετής", sg_n = "βαρετού", pl_m = "βαρετών", pl_f = "βαρετών", pl_n = "βαρετών" }, Acusativ = { sg_m = "βαρετό", sg_f = "βαρετή", sg_n = "βαρετό", pl_m = "βαρετούς", pl_f = "βαρετές", pl_n = "βαρετά" }, Vocativ = { sg_m = "βαρετέ", sg_f = "βαρετή", sg_n = "βαρετό", pl_m = "βαρετοί", pl_f = "βαρετές", pl_n = "βαρετά" }, } }, { input_word = "δημοφιλής", fem_type = "η", expected_forms = { Nominativ = { sg_m = "δημοφιλής", sg_f = "δημοφιλής", sg_n = "δημοφιλές", pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή" }, Genitiv = { sg_m = "δημοφιλούς", sg_f = "δημοφιλούς", sg_n = "δημοφιλούς", pl_m = "δημοφιλών", pl_f = "δημοφιλών", pl_n = "δημοφιλών" }, Acusativ = { sg_m = "δημοφιλή", sg_f = "δημοφιλή", sg_n = "δημοφιλές", pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή" }, Vocativ = { sg_m = "δημοφιλή", sg_f = "δημοφιλή", sg_n = "δημοφιλές", pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή" }, } }, { input_word = "ντροπαλός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ντροπαλός", sg_f = "ντροπαλή", sg_n = "ντροπαλό", pl_m = "ντροπαλοί", pl_f = "ντροπαλές", pl_n = "ντροπαλά" }, Genitiv = { sg_m = "ντροπαλού", sg_f = "ντροπαλής", sg_n = "ντροπαλού", pl_m = "ντροπαλών", pl_f = "ντροπαλών", pl_n = "ντροπαλών" }, Acusativ = { sg_m = "ντροπαλό", sg_f = "ντροπαλή", sg_n = "ντροπαλό", pl_m = "ντροπαλούς", pl_f = "ντροπαλές", pl_n = "ντροπαλά" }, Vocativ = { sg_m = "ντροπαλέ", sg_f = "ντροπαλή", sg_n = "ντροπαλό", pl_m = "ντροπαλοί", pl_f = "ντροπαλές", pl_n = "ντροπαλά" }, } }, { input_word = "ολόκληρος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ολόκληρος", sg_f = "ολόκληρη", sg_n = "ολόκληρο", pl_m = "ολόκληροι", pl_f = "ολόκληρες", pl_n = "ολόκληρα" }, Genitiv = { sg_m = "ολόκληρου", sg_f = "ολόκληρης", sg_n = "ολόκληρου", pl_m = "ολόκληρων", pl_f = "ολόκληρων", pl_n = "ολόκληρων" }, Acusativ = { sg_m = "ολόκληρο", sg_f = "ολόκληρη", sg_n = "ολόκληρο", pl_m = "ολόκληρους", pl_f = "ολόκληρες", pl_n = "ολόκληρα" }, Vocativ = { sg_m = "ολόκληρε", sg_f = "ολόκληρη", sg_n = "ολόκληρο", pl_m = "ολόκληροι", pl_f = "ολόκληρες", pl_n = "ολόκληρα" }, } }, { input_word = "πονηρός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "πονηρός", sg_f = "πονηρή", sg_n = "πονηρό", pl_m = "πονηροί", pl_f = "πονηρές", pl_n = "πονηρά" }, Genitiv = { sg_m = "πονηρού", sg_f = "πονηρής", sg_n = "πονηρού", pl_m = "πονηρών", pl_f = "πονηρών", pl_n = "πονηρών" }, Acusativ = { sg_m = "πονηρό", sg_f = "πονηρή", sg_n = "πονηρό", pl_m = "πονηρούς", pl_f = "πονηρές", pl_n = "πονηρά" }, Vocativ = { sg_m = "πονηρέ", sg_f = "πονηρή", sg_n = "πονηρό", pl_m = "πονηροί", pl_f = "πονηρές", pl_n = "πονηρά" }, } }, { input_word = "πρόσφατος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "πρόσφατος", sg_f = "πρόσφατη", sg_n = "πρόσφατο", pl_m = "πρόσφατοι", pl_f = "πρόσφατες", pl_n = "πρόσφατα" }, Genitiv = { sg_m = "πρόσφατου", sg_f = "πρόσφατης", sg_n = "πρόσφατου", pl_m = "πρόσφατων", pl_f = "πρόσφατων", pl_n = "πρόσφατων" }, Acusativ = { sg_m = "πρόσφατο", sg_f = "πρόσφατη", sg_n = "πρόσφατο", pl_m = "πρόσφατους", pl_f = "πρόσφατες", pl_n = "πρόσφατα" }, Vocativ = { sg_m = "πρόσφατε", sg_f = "πρόσφατη", sg_n = "πρόσφατο", pl_m = "πρόσφατοι", pl_f = "πρόσφατες", pl_n = "πρόσφατα" }, } }, { input_word = "ταχυδρομικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ταχυδρομικός", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό", pl_m = "ταχυδρομικοί", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά" }, Genitiv = { sg_m = "ταχυδρομικού", sg_f = "ταχυδρομικής", sg_n = "ταχυδρομικού", pl_m = "ταχυδρομικών", pl_f = "ταχυδρομικών", pl_n = "ταχυδρομικών" }, Acusativ = { sg_m = "ταχυδρομικό", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό", pl_m = "ταχυδρομικούς", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά" }, Vocativ = { sg_m = "ταχυδρομικέ", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό", pl_m = "ταχυδρομικοί", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά" }, } }, { input_word = "τοπικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "τοπικός", sg_f = "τοπική", sg_n = "τοπικό", pl_m = "τοπικοί", pl_f = "τοπικές", pl_n = "τοπικά" }, Genitiv = { sg_m = "τοπικού", sg_f = "τοπικής", sg_n = "τοπικού", pl_m = "τοπικών", pl_f = "τοπικών", pl_n = "τοπικών" }, Acusativ = { sg_m = "τοπικό", sg_f = "τοπική", sg_n = "τοπικό", pl_m = "τοπικούς", pl_f = "τοπικές", pl_n = "τοπικά" }, Vocativ = { sg_m = "τοπικέ", sg_f = "τοπική", sg_n = "τοπικό", pl_m = "τοπικοί", pl_f = "τοπικές", pl_n = "τοπικά" }, } }, { input_word = "υδραυλικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "υδραυλικός", sg_f = "υδραυλική", sg_n = "υδραυλικό", pl_m = "υδραυλικοί", pl_f = "υδραυλικές", pl_n = "υδραυλικά" }, Genitiv = { sg_m = "υδραυλικού", sg_f = "υδραυλικής", sg_n = "υδραυλικού", pl_m = "υδραυλικών", pl_f = "υδραυλικών", pl_n = "υδραυλικών" }, Acusativ = { sg_m = "υδραυλικό", sg_f = "υδραυλική", sg_n = "υδραυλικό", pl_m = "υδραυλικούς", pl_f = "υδραυλικές", pl_n = "υδραυλικά" }, Vocativ = { sg_m = "υδραυλικέ", sg_f = "υδραυλική", sg_n = "υδραυλικό", pl_m = "υδραυλικοί", pl_f = "υδραυλικές", pl_n = "υδραυλικά" }, } }, { input_word = "υπεύθυνος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "υπεύθυνος", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο", pl_m = "υπεύθυνοι", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα" }, Genitiv = { sg_m = "υπεύθυνου", sg_f = "υπεύθυνης", sg_n = "υπεύθυνου", pl_m = "υπεύθυνων", pl_f = "υπεύθυνων", pl_n = "υπεύθυνων" }, Acusativ = { sg_m = "υπεύθυνο", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο", pl_m = "υπεύθυνους", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα" }, Vocativ = { sg_m = "υπεύθυνε", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο", pl_m = "υπεύθυνοι", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα" }, } }, { input_word = "επείγων", fem_type = "", expected_forms = { Nominativ = { sg_m = "επείγων", sg_f = "επείγουσα", sg_n = "επείγον", pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα" }, Genitiv = { sg_m = "επείγοντος", sg_f = "επείγουσας", sg_n = "επείγοντος", pl_m = "επειγόντων", pl_f = "επειγουσών", pl_n = "επειγόντων" }, Acusativ = { sg_m = "επείγοντα", sg_f = "επείγουσα", sg_n = "επείγον", pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα" }, Vocativ = { sg_m = "επείγων", sg_f = "επείγουσα", sg_n = "επείγον", pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα" }, } }, { input_word = "χαλαρός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "χαλαρός", sg_f = "χαλαρή", sg_n = "χαλαρό", pl_m = "χαλαροί", pl_f = "χαλαρές", pl_n = "χαλαρά" }, Genitiv = { sg_m = "χαλαρού", sg_f = "χαλαρής", sg_n = "χαλαρού", pl_m = "χαλαρών", pl_f = "χαλαρών", pl_n = "χαλαρών" }, Acusativ = { sg_m = "χαλαρό", sg_f = "χαλαρή", sg_n = "χαλαρό", pl_m = "χαλαρούς", pl_f = "χαλαρές", pl_n = "χαλαρά" }, Vocativ = { sg_m = "χαλαρέ", sg_f = "χαλαρή", sg_n = "χαλαρό", pl_m = "χαλαροί", pl_f = "χαλαρές", pl_n = "χαλαρά" }, } }, } -- Main test execution function function p.run_tests(frame) local errors = {} local test_count = 0 local case_functions = { Nominativ = "Nominativ_case", Genitiv = "Genitiv_case", Acusativ = "Acusativ_case", Vocativ = "Vocativ_case", } local form_keys = {"sg_m", "sg_f", "sg_n", "pl_m", "pl_f", "pl_n"} for _, test_case in ipairs(test_data) do local adjective = test_case.input_word local fem_type = test_case.fem_type ~= "" and test_case.fem_type or nil local expected_cases = test_case.expected_forms local frame_obj = create_mock_frame(adjective, fem_type) for case_name, func_name in pairs(case_functions) do if main_module[func_name] then test_count = test_count + 1 local raw_output = main_module[func_name](frame_obj) local actual_forms = parse_module_output(raw_output) local expected_forms = expected_cases[case_name] for idx, key in ipairs(form_keys) do local expected = expected_forms[key] local actual = actual_forms[idx] if actual ~= expected then table.insert(errors, string.format( "Fail [%s - %s - %s]: Expected '%s', got '%s'", adjective, case_name, key, expected or "nil", actual or "nil" )) end end else table.insert(errors, string.format("Missing function '%s' in Module:el-c-conj", func_name)) end end end -- Format summary report if #errors == 0 then return string.format(" All %d test cases passed successfully!", test_count) else return string.format(" Found %d errors out of %d test cases:\n* %s", #errors, test_count, table.concat(errors, "\n* ")) end end return p cg70gc0xmza7rj4hvwgneptp24vy9j5 56426 56418 2026-09-11T09:59:06Z Steborce 2506 56426 Scribunto text/plain local p = {} -- Requirements local main_module = require('Module:el-c-conj') -- Helper function to parse the wikitext table row output local function parse_module_output(output_str) -- Strip the initial table row prefix (e.g., "|-\n |'''Номинатив''' ||") local cleaned_str = output_str:gsub("^%|%-%-?%s*%|'''[^']-'''%s*%|%|", "") cleaned_str = mw.text.trim(cleaned_str) -- Split forms separated by '||' local parts = mw.text.split(cleaned_str, "||") local forms = {} for i, part in ipairs(parts) do local trimmed_part = mw.text.trim(part) -- Extract target word inside [[...]] local form = trimmed_part:match("^%[%[(.*)%]%]$") if form then forms[i] = form else forms[i] = trimmed_part end end return forms end -- Helper to create a mock frame object per test case local function create_mock_frame(arg1, arg2) return { getParent = function() return { args = { [1] = arg1, [2] = arg2 } } end } end -- Dataset definitions local test_data = { { input_word = "έγγραφος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "έγγραφος", sg_f = "έγγραφη", sg_n = "έγγραφο", pl_m = "έγγραφοι", pl_f = "έγγραφες", pl_n = "έγγραφα" }, Genitiv = { sg_m = "έγγραφου", sg_f = "έγγραφης", sg_n = "έγγραφου", pl_m = "έγγραφων", pl_f = "έγγραφων", pl_n = "έγγραφων" }, Acusativ = { sg_m = "έγγραφο", sg_f = "έγγραφη", sg_n = "έγγραφο", pl_m = "έγγραφους", pl_f = "έγγραφες", pl_n = "έγγραφα" }, Vocativ = { sg_m = "έγγραφε", sg_f = "έγγραφη", sg_n = "έγγραφο", pl_m = "έγγραφοι", pl_f = "έγγραφες", pl_n = "έγγραφα" }, } }, { input_word = "παρελθών", fem_type = "ούσα", expected_forms = { Nominativ = { sg_m = "παρελθών", sg_f = "παρελθούσα", sg_n = "παρελθόν", pl_m = "παρελθόντες", pl_f = "παρελθούσες", pl_n = "παρελθόντα" }, Genitiv = { sg_m = "παρελθόντος", sg_f = "παρελθούσας", sg_n = "παρελθόντος", pl_m = "παρελθόντων", pl_f = "παρελθουσών", pl_n = "παρελθόντων" }, Acusativ = { sg_m = "παρελθόντα", sg_f = "παρελθούσα", sg_n = "παρελθόν", pl_m = "παρελθόντες", pl_f = "παρελθούσες", pl_n = "παρελθόντα" }, Vocativ = { sg_m = "παρελθών", sg_f = "παρελθούσα", sg_n = "παρελθόν", pl_m = "παρελθόντες", pl_f = "παρελθούσες", pl_n = "παρελθόντα" }, } }, { input_word = "στέρεος", fem_type = "αη", expected_forms = { Nominativ = { sg_m = "στέρεος", sg_f = "στέρεα / στέρεη", sg_n = "στέρεο", pl_m = "στέρεοι", pl_f = "στέρεες", pl_n = "στέρεα" }, Genitiv = { sg_m = "στέρεου", sg_f = "στέρεας / στέρεης", sg_n = "στέρεου", pl_m = "στέρεων", pl_f = "στέρεων", pl_n = "στέρεων" }, Acusativ = { sg_m = "στέρεο", sg_f = "στέρεα / στέρεη", sg_n = "στέρεο", pl_m = "στέρεους", pl_f = "στέρεες", pl_n = "στέρεα" }, Vocativ = { sg_m = "στέρεε", sg_f = "στέρεα / στέρεη", sg_n = "στέρεο", pl_m = "στέρεοι", pl_f = "στέρεες", pl_n = "στέρεα" }, } }, { input_word = "ίδιος", fem_type = "α", expected_forms = { Nominativ = { sg_m = "ίδιος", sg_f = "ίδια", sg_n = "ίδιο", pl_m = "ίδιοι", pl_f = "ίδιες", pl_n = "ίδια" }, Genitiv = { sg_m = "ίδιου", sg_f = "ίδιας", sg_n = "ίδιου", pl_m = "ίδιων", pl_f = "ίδιων", pl_n = "ίδιων" }, Acusativ = { sg_m = "ίδιο", sg_f = "ίδια", sg_n = "ίδιο", pl_m = "ίδιους", pl_f = "ίδιες", pl_n = "ίδια" }, Vocativ = { sg_m = "ίδιε", sg_f = "ίδια", sg_n = "ίδιο", pl_m = "ίδιοι", pl_f = "ίδιες", pl_n = "ίδια" }, } }, { input_word = "ανεξάρτητος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ανεξάρτητος", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο", pl_m = "ανεξάρτητοι", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα" }, Genitiv = { sg_m = "ανεξάρτητου", sg_f = "ανεξάρτητης", sg_n = "ανεξάρτητου", pl_m = "ανεξάρτητων", pl_f = "ανεξάρτητων", pl_n = "ανεξάρτητων" }, Acusativ = { sg_m = "ανεξάρτητο", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο", pl_m = "ανεξάρτητους", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα" }, Vocativ = { sg_m = "ανεξάρτητε", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο", pl_m = "ανεξάρτητοι", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα" }, } }, { input_word = "αποδοτικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "αποδοτικός", sg_f = "αποδοτική", sg_n = "αποδοτικό", pl_m = "αποδοτικοί", pl_f = "αποδοτικές", pl_n = "αποδοτικά" }, Genitiv = { sg_m = "αποδοτικού", sg_f = "αποδοτικής", sg_n = "αποδοτικού", pl_m = "αποδοτικών", pl_f = "αποδοτικών", pl_n = "αποδοτικών" }, Acusativ = { sg_m = "αποδοτικό", sg_f = "αποδοτική", sg_n = "αποδοτικό", pl_m = "αποδοτικούς", pl_f = "αποδοτικές", pl_n = "αποδοτικά" }, Vocativ = { sg_m = "αποδοτικέ", sg_f = "αποδοτική", sg_n = "αποδοτικό", pl_m = "αποδοτικοί", pl_f = "αποδοτικές", pl_n = "αποδοτικά" }, } }, { input_word = "αστικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "αστικός", sg_f = "αστική", sg_n = "αστικό", pl_m = "αστικοί", pl_f = "αστικές", pl_n = "αστικά" }, Genitiv = { sg_m = "αστικού", sg_f = "αστικής", sg_n = "αστικού", pl_m = "αστικών", pl_f = "αστικών", pl_n = "αστικών" }, Acusativ = { sg_m = "αστικό", sg_f = "αστική", sg_n = "αστικό", pl_m = "αστικούς", pl_f = "αστικές", pl_n = "αστικά" }, Vocativ = { sg_m = "αστικέ", sg_f = "αστική", sg_n = "αστικό", pl_m = "αστικοί", pl_f = "αστικές", pl_n = "αστικά" }, } }, { input_word = "βαρετός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "βαρετός", sg_f = "βαρετή", sg_n = "βαρετό", pl_m = "βαρετοί", pl_f = "βαρετές", pl_n = "βαρετά" }, Genitiv = { sg_m = "βαρετού", sg_f = "βαρετής", sg_n = "βαρετού", pl_m = "βαρετών", pl_f = "βαρετών", pl_n = "βαρετών" }, Acusativ = { sg_m = "βαρετό", sg_f = "βαρετή", sg_n = "βαρετό", pl_m = "βαρετούς", pl_f = "βαρετές", pl_n = "βαρετά" }, Vocativ = { sg_m = "βαρετέ", sg_f = "βαρετή", sg_n = "βαρετό", pl_m = "βαρετοί", pl_f = "βαρετές", pl_n = "βαρετά" }, } }, { input_word = "δημοφιλής", fem_type = "η", expected_forms = { Nominativ = { sg_m = "δημοφιλής", sg_f = "δημοφιλής", sg_n = "δημοφιλές", pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή" }, Genitiv = { sg_m = "δημοφιλούς", sg_f = "δημοφιλούς", sg_n = "δημοφιλούς", pl_m = "δημοφιλών", pl_f = "δημοφιλών", pl_n = "δημοφιλών" }, Acusativ = { sg_m = "δημοφιλή", sg_f = "δημοφιλή", sg_n = "δημοφιλές", pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή" }, Vocativ = { sg_m = "δημοφιλή", sg_f = "δημοφιλή", sg_n = "δημοφιλές", pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή" }, } }, { input_word = "ντροπαλός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ντροπαλός", sg_f = "ντροπαλή", sg_n = "ντροπαλό", pl_m = "ντροπαλοί", pl_f = "ντροπαλές", pl_n = "ντροπαλά" }, Genitiv = { sg_m = "ντροπαλού", sg_f = "ντροπαλής", sg_n = "ντροπαλού", pl_m = "ντροπαλών", pl_f = "ντροπαλών", pl_n = "ντροπαλών" }, Acusativ = { sg_m = "ντροπαλό", sg_f = "ντροπαλή", sg_n = "ντροπαλό", pl_m = "ντροπαλούς", pl_f = "ντροπαλές", pl_n = "ντροπαλά" }, Vocativ = { sg_m = "ντροπαλέ", sg_f = "ντροπαλή", sg_n = "ντροπαλό", pl_m = "ντροπαλοί", pl_f = "ντροπαλές", pl_n = "ντροπαλά" }, } }, { input_word = "ολόκληρος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ολόκληρος", sg_f = "ολόκληρη", sg_n = "ολόκληρο", pl_m = "ολόκληροι", pl_f = "ολόκληρες", pl_n = "ολόκληρα" }, Genitiv = { sg_m = "ολόκληρου", sg_f = "ολόκληρης", sg_n = "ολόκληρου", pl_m = "ολόκληρων", pl_f = "ολόκληρων", pl_n = "ολόκληρων" }, Acusativ = { sg_m = "ολόκληρο", sg_f = "ολόκληρη", sg_n = "ολόκληρο", pl_m = "ολόκληρους", pl_f = "ολόκληρες", pl_n = "ολόκληρα" }, Vocativ = { sg_m = "ολόκληρε", sg_f = "ολόκληρη", sg_n = "ολόκληρο", pl_m = "ολόκληροι", pl_f = "ολόκληρες", pl_n = "ολόκληρα" }, } }, { input_word = "πονηρός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "πονηρός", sg_f = "πονηρή", sg_n = "πονηρό", pl_m = "πονηροί", pl_f = "πονηρές", pl_n = "πονηρά" }, Genitiv = { sg_m = "πονηρού", sg_f = "πονηρής", sg_n = "πονηρού", pl_m = "πονηρών", pl_f = "πονηρών", pl_n = "πονηρών" }, Acusativ = { sg_m = "πονηρό", sg_f = "πονηρή", sg_n = "πονηρό", pl_m = "πονηρούς", pl_f = "πονηρές", pl_n = "πονηρά" }, Vocativ = { sg_m = "πονηρέ", sg_f = "πονηρή", sg_n = "πονηρό", pl_m = "πονηροί", pl_f = "πονηρές", pl_n = "πονηρά" }, } }, { input_word = "πρόσφατος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "πρόσφατος", sg_f = "πρόσφατη", sg_n = "πρόσφατο", pl_m = "πρόσφατοι", pl_f = "πρόσφατες", pl_n = "πρόσφατα" }, Genitiv = { sg_m = "πρόσφατου", sg_f = "πρόσφατης", sg_n = "πρόσφατου", pl_m = "πρόσφατων", pl_f = "πρόσφατων", pl_n = "πρόσφατων" }, Acusativ = { sg_m = "πρόσφατο", sg_f = "πρόσφατη", sg_n = "πρόσφατο", pl_m = "πρόσφατους", pl_f = "πρόσφατες", pl_n = "πρόσφατα" }, Vocativ = { sg_m = "πρόσφατε", sg_f = "πρόσφατη", sg_n = "πρόσφατο", pl_m = "πρόσφατοι", pl_f = "πρόσφατες", pl_n = "πρόσφατα" }, } }, { input_word = "ταχυδρομικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "ταχυδρομικός", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό", pl_m = "ταχυδρομικοί", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά" }, Genitiv = { sg_m = "ταχυδρομικού", sg_f = "ταχυδρομικής", sg_n = "ταχυδρομικού", pl_m = "ταχυδρομικών", pl_f = "ταχυδρομικών", pl_n = "ταχυδρομικών" }, Acusativ = { sg_m = "ταχυδρομικό", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό", pl_m = "ταχυδρομικούς", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά" }, Vocativ = { sg_m = "ταχυδρομικέ", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό", pl_m = "ταχυδρομικοί", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά" }, } }, { input_word = "τοπικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "τοπικός", sg_f = "τοπική", sg_n = "τοπικό", pl_m = "τοπικοί", pl_f = "τοπικές", pl_n = "τοπικά" }, Genitiv = { sg_m = "τοπικού", sg_f = "τοπικής", sg_n = "τοπικού", pl_m = "τοπικών", pl_f = "τοπικών", pl_n = "τοπικών" }, Acusativ = { sg_m = "τοπικό", sg_f = "τοπική", sg_n = "τοπικό", pl_m = "τοπικούς", pl_f = "τοπικές", pl_n = "τοπικά" }, Vocativ = { sg_m = "τοπικέ", sg_f = "τοπική", sg_n = "τοπικό", pl_m = "τοπικοί", pl_f = "τοπικές", pl_n = "τοπικά" }, } }, { input_word = "υδραυλικός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "υδραυλικός", sg_f = "υδραυλική", sg_n = "υδραυλικό", pl_m = "υδραυλικοί", pl_f = "υδραυλικές", pl_n = "υδραυλικά" }, Genitiv = { sg_m = "υδραυλικού", sg_f = "υδραυλικής", sg_n = "υδραυλικού", pl_m = "υδραυλικών", pl_f = "υδραυλικών", pl_n = "υδραυλικών" }, Acusativ = { sg_m = "υδραυλικό", sg_f = "υδραυλική", sg_n = "υδραυλικό", pl_m = "υδραυλικούς", pl_f = "υδραυλικές", pl_n = "υδραυλικά" }, Vocativ = { sg_m = "υδραυλικέ", sg_f = "υδραυλική", sg_n = "υδραυλικό", pl_m = "υδραυλικοί", pl_f = "υδραυλικές", pl_n = "υδραυλικά" }, } }, { input_word = "υπεύθυνος", fem_type = "η", expected_forms = { Nominativ = { sg_m = "υπεύθυνος", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο", pl_m = "υπεύθυνοι", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα" }, Genitiv = { sg_m = "υπεύθυνου", sg_f = "υπεύθυνης", sg_n = "υπεύθυνου", pl_m = "υπεύθυνων", pl_f = "υπεύθυνων", pl_n = "υπεύθυνων" }, Acusativ = { sg_m = "υπεύθυνο", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο", pl_m = "υπεύθυνους", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα" }, Vocativ = { sg_m = "υπεύθυνε", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο", pl_m = "υπεύθυνοι", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα" }, } }, { input_word = "επείγων", fem_type = "", expected_forms = { Nominativ = { sg_m = "επείγων", sg_f = "επείγουσα", sg_n = "επείγον", pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα" }, Genitiv = { sg_m = "επείγοντος", sg_f = "επείγουσας", sg_n = "επείγοντος", pl_m = "επειγόντων", pl_f = "επειγουσών", pl_n = "επειγόντων" }, Acusativ = { sg_m = "επείγοντα", sg_f = "επείγουσα", sg_n = "επείγον", pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα" }, Vocativ = { sg_m = "επείγων", sg_f = "επείγουσα", sg_n = "επείγον", pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα" }, } }, { input_word = "χαλαρός", fem_type = "η", expected_forms = { Nominativ = { sg_m = "χαλαρός", sg_f = "χαλαρή", sg_n = "χαλαρό", pl_m = "χαλαροί", pl_f = "χαλαρές", pl_n = "χαλαρά" }, Genitiv = { sg_m = "χαλαρού", sg_f = "χαλαρής", sg_n = "χαλαρού", pl_m = "χαλαρών", pl_f = "χαλαρών", pl_n = "χαλαρών" }, Acusativ = { sg_m = "χαλαρό", sg_f = "χαλαρή", sg_n = "χαλαρό", pl_m = "χαλαρούς", pl_f = "χαλαρές", pl_n = "χαλαρά" }, Vocativ = { sg_m = "χαλαρέ", sg_f = "χαλαρή", sg_n = "χαλαρό", pl_m = "χαλαροί", pl_f = "χαλαρές", pl_n = "χαλαρά" }, } }, } -- Main test execution function function p.run_tests(frame) local errors = {} local test_count = 0 local case_functions = { Nominativ = "Nominativ_case", Genitiv = "Genitiv_case", Acusativ = "Acusativ_case", Vocativ = "Vocativ_case", } local form_keys = {"sg_m", "sg_f", "sg_n", "pl_m", "pl_f", "pl_n"} for _, test_case in ipairs(test_data) do local adjective = test_case.input_word local fem_type = test_case.fem_type ~= "" and test_case.fem_type or nil local expected_cases = test_case.expected_forms local frame_obj = create_mock_frame(adjective, fem_type) for case_name, func_name in pairs(case_functions) do if main_module[func_name] then test_count = test_count + 1 local raw_output = main_module[func_name](frame_obj) local actual_forms = parse_module_output(raw_output) local expected_forms = expected_cases[case_name] for idx, key in ipairs(form_keys) do local expected = expected_forms[key] local actual = actual_forms[idx] if actual ~= expected then table.insert(errors, string.format( "Fail [%s - %s - %s]: Expected '%s', got '%s'", adjective, case_name, key, expected or "nil", actual or "nil" )) end end else table.insert(errors, string.format("Missing function '%s' in Module:el-c-conj", func_name)) end end end -- Format summary report if #errors == 0 then return string.format(" All %d test cases passed successfully!", test_count) else return string.format(" Found %d errors out of %d test cases:\n* %s", #errors, test_count, table.concat(errors, "\n* ")) end end return p oawx65xh23rphyrai87fi0daqzzdkhz απόδειξη 0 11123 56409 2026-09-11T05:02:49Z Steborce 2506 Создадена страница со: {{-el-}} === Етимологија === [[απόδειξη]] < дијахроничен позајмен збор од старогрчки [[ἀπόδειξις]] < [[ἀποδεικνύω]] < [[ἀπό]] + [[δείκνυμι]] === Изговор === * [[МФА]]: /aˈpo.ði.ksi/ * Поделба по слогови: α‐πό‐δει‐ξη === Именка === '''απόδειξη''', именка од женски род (множина α... 56409 wikitext text/x-wiki {{-el-}} === Етимологија === [[απόδειξη]] < дијахроничен позајмен збор од старогрчки [[ἀπόδειξις]] < [[ἀποδεικνύω]] < [[ἀπό]] + [[δείκνυμι]] === Изговор === * [[МФА]]: /aˈpo.ði.ksi/ * Поделба по слогови: α‐πό‐δει‐ξη === Именка === '''απόδειξη''', именка од женски род (множина [[αποδείξεις]]) # [[доказ]], [[аргумент]], [[информација]] — (книжевно) сологистички пат, информација или елемент што покажува дека нешто е вистинито. #: '''Το πιστοποιητικό πληροί τους όρους για την απόδειξη του επιπέδου γλωσσομάθειας.''' #: ''Сертификатот ги исполнува условите за доказ на нивото на познавање на јазикот.'' # [[докажување]] — (математика) објаснување што со користење на правилата на логиката и врз основа на одредени аксиоми ја покажува вистината на некоја математичка теорема. #: '''Η απόδειξη ενός μαθηματικού θεωρήματος.''' #: ''Докажувањето на математичка теорема.'' # [[сметка]], [[потврда]] — (економија) хартиче што му се дава на купувачот со информации за нешто што го купил, вклучувајќи ја цената, данокот, датумот и др. #: '''Πήρε την απόδειξη από το κατάστημα.''' #: ''Ја зеде сметката од продавницата.'' === Деклинација === {| class="wikitable" ! Число !! Падеж !! Еднина !! Множина |- ! rowspan="4" | Еднина / Множина | Номинатив || [[απόδειξη]] || [[αποδείξεις]] |- | Генитив || [[απόδειξης]] (стар книжевен облик: [[αποδείξεως]]) || [[αποδείξεων]] |- | Акузатив || [[απόδειξη]] || [[αποδείξεις]] |- | Вокатив || [[απόδειξη]] || [[αποδείξεις]] |} === Повеќезборни термини === * [[απόδειξη λιανικής πώλησης]] — сметка за малопродажба (фискална сметка) * [[ταμειακή απόδειξη]] — каса-сметка === Синоними === * [[τεκμήριο]] '''им.''' ср — доказ, терорија/факт со потврда * [[εχεγγύο]] '''им.''' ср — гаранција, потврда === Антоними === * [[διάψευση]] '''им.''' ж — демант, побивање === Сродни поими === * [[ανταπόδειξη]] '''им.''' ж — контрадоказ, противдоказ * [[αποδεικνύω]] '''гл.''' — докажува, покажува * [[αποδεικτικός]] '''прид.''' — доказен * [[αναπόδεικτος]] '''прид.''' — недокажан [[Категорија:Грчки|ΑΠΟΔΕΙΞΗ]] [[Категорија:Грчки именки|ΑΠΟΔΕΙΞΗ]] 880a5269ihdvjspgsb0tjki03y7gebq 56410 56409 2026-09-11T05:04:36Z Steborce 2506 56410 wikitext text/x-wiki {{-el-}} === Етимологија === [[απόδειξη]] < старогрчки [[ἀπόδειξις]] (покажување, докажување) < [[ἀποδεικνύω]] (докажува, покажува) < [[ἀπό]] (од) + [[δείκνυμι]] (покажува); дијахроничен позајмен збор. === Изговор === * [[МФА]]: /aˈpo.ði.ksi/ * Поделба по слогови: α‐πό‐δει‐ξη === Именка === '''απόδειξη''', именка од женски род (множина [[αποδείξεις]]) # [[доказ]], [[аргумент]], [[информација]] — (книжевно) сологистички пат, информација или елемент што покажува дека нешто е вистинито. #: '''Το πιστοποιητικό πληροί τους όρους για την απόδειξη του επιπέδου γλωσσομάθειας.''' #: ''Сертификатот ги исполнува условите за доказ на нивото на познавање на јазикот.'' # [[докажување]] — (математика) објаснување што со користење на правилата на логиката и врз основа на одредени аксиоми ја покажува вистината на некоја математичка теорема. #: '''Η απόδειξη ενός μαθηματικού θεωρήματος.''' #: ''Докажувањето на математичка теорема.'' # [[сметка]], [[потврда]] — (економија) хартиче што му се дава на купувачот со информации за нешто што го купил, вклучувајќи ја цената, данокот, датумот и др. #: '''Πήρε την απόδειξη από το κατάστημα.''' #: ''Ја зеде сметката од продавницата.'' === Деклинација === {| class="wikitable" ! Число !! Падеж !! Еднина !! Множина |- ! rowspan="4" | Еднина / Множина | Номинатив || [[απόδειξη]] || [[αποδείξεις]] |- | Генитив || [[απόδειξης]] (стар книжевен облик: [[αποδείξεως]]) || [[αποδείξεων]] |- | Акузатив || [[απόδειξη]] || [[αποδείξεις]] |- | Вокатив || [[απόδειξη]] || [[αποδείξεις]] |} === Повеќезборни термини === * [[απόδειξη λιανικής πώλησης]] — сметка за малопродажба (фискална сметка) * [[ταμειακή απόδειξη]] — каса-сметка === Синоними === * [[τεκμήριο]] '''им.''' ср — доказ, терорија/факт со потврда * [[εχεγγύο]] '''им.''' ср — гаранција, потврда === Антоними === * [[διάψευση]] '''им.''' ж — демант, побивање === Сродни поими === * [[ανταπόδειξη]] '''им.''' ж — контрадоказ, противдоказ * [[αποδεικνύω]] '''гл.''' — докажува, покажува * [[αποδεικτικός]] '''прид.''' — доказен * [[αναπόδεικτος]] '''прид.''' — недокажан [[Категорија:Грчки|ΑΠΟΔΕΙΞΗ]] [[Категорија:Грчки именки|ΑΠΟΔΕΙΞΗ]] hqb5zfo7y3vwfjuvhnmk0xnnjqy0ljf 56411 56410 2026-09-11T05:05:05Z Steborce 2506 56411 wikitext text/x-wiki {{-el-}} === Етимологија === [[απόδειξη]] < старогрчки [[ἀπόδειξις]] (покажување, докажување) < [[ἀποδεικνύω]] (докажува, покажува) < [[ἀπό]] (од) + [[δείκνυμι]] (покажува); дијахроничен позајмен збор. === Изговор === * [[МФА]]: /aˈpo.ði.ksi/ * Поделба по слогови: α‐πό‐δει‐ξη === Именка === '''απόδειξη''', именка од женски род (множина [[αποδείξεις]]) # [[доказ]], [[аргумент]], [[информација]] — (книжевно) сологистички пат, информација или елемент што покажува дека нешто е вистинито. #: '''Το πιστοποιητικό πληροί τους όρους για την απόδειξη του επιπέδου γλωσσομάθειας.''' #: ''Сертификатот ги исполнува условите за доказ на нивото на познавање на јазикот.'' # [[докажување]] — (математика) објаснување што со користење на правилата на логиката и врз основа на одредени аксиоми ја покажува вистината на некоја математичка теорема. #: '''Η απόδειξη ενός μαθηματικού θεωρήματος.''' #: ''Докажувањето на математичка теорема.'' # [[сметка]], [[потврда]] — (економија) хартија што му се дава на купувачот со информации за нешто што го купил, вклучувајќи ја цената, данокот, датумот и др. #: '''Πήρε την απόδειξη από το κατάστημα.''' #: ''Ја зеде сметката од продавницата.'' === Деклинација === {| class="wikitable" ! Число !! Падеж !! Еднина !! Множина |- ! rowspan="4" | Еднина / Множина | Номинатив || [[απόδειξη]] || [[αποδείξεις]] |- | Генитив || [[απόδειξης]] (стар книжевен облик: [[αποδείξεως]]) || [[αποδείξεων]] |- | Акузатив || [[απόδειξη]] || [[αποδείξεις]] |- | Вокатив || [[απόδειξη]] || [[αποδείξεις]] |} === Повеќезборни термини === * [[απόδειξη λιανικής πώλησης]] — сметка за малопродажба (фискална сметка) * [[ταμειακή απόδειξη]] — каса-сметка === Синоними === * [[τεκμήριο]] '''им.''' ср — доказ, терорија/факт со потврда * [[εχεγγύο]] '''им.''' ср — гаранција, потврда === Антоними === * [[διάψευση]] '''им.''' ж — демант, побивање === Сродни поими === * [[ανταπόδειξη]] '''им.''' ж — контрадоказ, противдоказ * [[αποδεικνύω]] '''гл.''' — докажува, покажува * [[αποδεικτικός]] '''прид.''' — доказен * [[αναπόδεικτος]] '''прид.''' — недокажан [[Категорија:Грчки|ΑΠΟΔΕΙΞΗ]] [[Категорија:Грчки именки|ΑΠΟΔΕΙΞΗ]] siefq3rth4g36xhsle1mvehwxipg661 56412 56411 2026-09-11T05:10:44Z Steborce 2506 56412 wikitext text/x-wiki {{-el-}} === Етимологија === [[απόδειξη]] < старогрчки [[ἀπόδειξις]] (покажување, докажување) < [[ἀποδεικνύω]] (докажува, покажува) < [[ἀπό]] (од) + [[δείκνυμι]] (покажува); дијахроничен позајмен збор. === Изговор === * [[МФА]]: /aˈpo.ði.ksi/ * Поделба по слогови: α‐πό‐δει‐ξη === Именка === '''απόδειξη''', именка од женски род (множина [[αποδείξεις]]) # [[доказ]], [[аргумент]], [[информација]] — (книжевно) сологистички пат, информација или елемент што покажува дека нешто е вистинито. #: '''Το πιστοποιητικό πληροί τους όρους για την απόδειξη του επιπέδου γλωσσομάθειας.''' #: ''Сертификатот ги исполнува условите за доказ на нивото на познавање на јазикот.'' # [[докажување]] — (математика) објаснување што со користење на правилата на логиката и врз основа на одредени аксиоми ја покажува вистината на некоја математичка теорема. #: '''Η απόδειξη ενός μαθηματικού θεωρήματος.''' #: ''Докажувањето на математичка теорема.'' # [[сметка]], [[потврда]] — (економија) хартија што му се дава на купувачот со информации за нешто што го купил, вклучувајќи ја цената, данокот, датумот и др. #: '''Πήρε την απόδειξη από το κατάστημα.''' #: ''Ја зеде сметката од продавницата.'' === Деклинација на именката === {| class="wikitable" ! Падеж !! Еднина !! Множина |- | Номинатив || [[απόδειξη]] || [[αποδείξεις]] |- | Генитив || [[απόδειξης]] (стар книжевен облик: [[αποδείξεως]]) || [[αποδείξεων]] |- | Акузатив || [[απόδειξη]] || [[αποδείξεις]] |- | Вокатив || [[απόδειξη]] || [[αποδείξεις]] |} === Синоними === * [[τεκμήριο]] '''им.''' ср — доказ, терорија/факт со потврда * [[εχεγγύο]] '''им.''' ср — гаранција, потврда === Антоними === * [[διάψευση]] '''им.''' ж — демант, побивање === Сложени изрази === * [[απόδειξη λιανικής πώλησης]] — сметка за малопродажба (фискална сметка) * [[ταμειακή απόδειξη]] — каса-сметка === Сродни поими === * [[ανταπόδειξη]] '''им.''' ж — контрадоказ, противдоказ * [[αποδεικνύω]] '''гл.''' — докажува, покажува * [[αποδεικτικός]] '''прид.''' — доказен * [[αναπόδεικτος]] '''прид.''' — недокажан [[Категорија:Грчки|ΑΠΟΔΕΙΞΗ]] [[Категорија:Грчки именки|ΑΠΟΔΕΙΞΗ]] ew0nnxfav2wft69kjt0mh5c85ldcn5d ενθουσιασμένος 0 11124 56414 2026-09-11T08:43:58Z Steborce 2506 Создадена страница со: {{-el-}} === Етимологија === [[ενθουσιασμένος]] < минат партицип од глаголот [[ενθουσιάζω]] (воодушевува) < старогрчки [[ἐνθουσιάζω]] (сум во божествен занес) < [[ἔνθεος]] (< [[ἐν]] (во) + [[θεός]] (бог)) — оној што е „обземен од божествено вдохновение“. === Изговор === *... 56414 wikitext text/x-wiki {{-el-}} === Етимологија === [[ενθουσιασμένος]] < минат партицип од глаголот [[ενθουσιάζω]] (воодушевува) < старогрчки [[ἐνθουσιάζω]] (сум во божествен занес) < [[ἔνθεος]] (< [[ἐν]] (во) + [[θεός]] (бог)) — оној што е „обземен од божествено вдохновение“. === Изговор === * [[МФА]]: /en.θu.si.aˈzme.nos/ * Поделба по слогови: εν‐θου‐σι‐α‐σμέ‐νος === Придавка === [[ενθουσιασμένος]] придавка од машки род (женски род [[ενθουσιασμένη]], среден род [[ενθουσιασμένο]]) # [[воодушевен]], [[занесен]], [[пресреќен]] — што чувствува силна радост, восхит или возбуда поради нешто. #: '''Είναι πολύ ενθουσιασμένος με το νέο του αυτοκίνητο.''' #: ''Многу е воодушевен од својот нов автомобил.'' # [[возбуден]], [[загреан]] — што покажува голем интерес и ентузијазам за некоја активност или идеја. #: '''Τα παιδιά ήταν ενθουσιασμένα με την εκδρομή.''' #: ''Децата беа воодушевени од екскурзијата.'' === Деклинација на придавката === {{el-cases-conj|{{PAGENAME}}}} === Синоними === * [[κατάχαρος]] '''прид.''' — пресреќен, прерадосен * [[περιχαρήσ]] '''прид.''' — пресреќен, зрачен од радост === Антоними === * [[αδιάφορος]] '''прид.''' — рамнодушен * [[απογοητευμένος]] '''прид.''' — разочаран === Сродни поими === * [[ενθουσιασμός]] '''им.''' м — воодушевување, ентузијазам * [[ενθουσιάζω]] '''гл.''' — воодушевува * [[ενθουσιάζομαι]] '''гл.''' — се воодушевува * [[ἔνθεος]] '''прид.''' — божествен, инспириран од бог * [[θεός]] '''им.''' м/ж — бог, божица [[Категорија:Грчки|ΕΝΘΟΥΣΙΑΣΜΕΝΟΣ]] [[Категорија:Грчки придавки|ΕΝΘΟΥΣΙΑΣΜΕΝΟΣ]] 56x8y3gfa67dralrwytcv3u77qs253o 56415 56414 2026-09-11T08:44:57Z Steborce 2506 56415 wikitext text/x-wiki {{-el-}} === Етимологија === [[ενθουσιασμένος]] < минат партицип од глаголот [[ενθουσιάζω]] (воодушевува) < старогрчки [[ἐνθουσιάζω]] (сум во божествен занес) < [[ἔνθεος]] (< [[ἐν]] (во) + [[θεός]] (бог)) — оној што е „обземен од божествено вдохновение“. === Изговор === * [[МФА]]: /en.θu.si.aˈzme.nos/ * Поделба по слогови: εν‐θου‐σι‐α‐σμέ‐νος === Придавка === [[ενθουσιασμένος]] придавка од машки род (женски род [[ενθουσιασμένη]], среден род [[ενθουσιασμένο]]) # [[воодушевен]], [[занесен]], [[пресреќен]] — што чувствува силна радост, восхит или возбуда поради нешто. #: '''Είναι πολύ ενθουσιασμένος με το νέο του αυτοκίνητο.''' #: ''Многу е воодушевен од својот нов автомобил.'' # [[возбуден]], [[загреан]] — што покажува голем интерес и ентузијазам за некоја активност или идеја. #: '''Τα παιδιά ήταν ενθουσιασμένα με την εκδρομή.''' #: ''Децата беа воодушевени од екскурзијата.'' === Деклинација на придавката === {{el-cases-conj|{{PAGENAME}}}} === Синоними === * [[κατάχαρος]] '''прид.''' — пресреќен, прерадосен * [[περιχαρήσ]] '''прид.''' — пресреќен, озрачен од радост === Антоними === * [[αδιάφορος]] '''прид.''' — рамнодушен * [[απογοητευμένος]] '''прид.''' — разочаран === Сродни поими === * [[ενθουσιασμός]] '''им.''' м — воодушевување, ентузијазам * [[ενθουσιάζω]] '''гл.''' — воодушевува * [[ενθουσιάζομαι]] '''гл.''' — се воодушевува * [[ἔνθεος]] '''прид.''' — божествен, инспириран од бог * [[θεός]] '''им.''' м/ж — бог, божица [[Категорија:Грчки|ΕΝΘΟΥΣΙΑΣΜΕΝΟΣ]] [[Категорија:Грчки придавки|ΕΝΘΟΥΣΙΑΣΜΕΝΟΣ]] ak491fg8vv0zpxs0mb1ja0brzcd33e4 Модул:el-c-conj/док 828 11125 56432 2026-09-11T10:22:36Z Steborce 2506 Создадена страница со: el-cases-conj el-cases-conj е шаблон за прикажување на деклинацијата на грчките придавки. Шаблонот ја повикува Lua-модулот el-c-conj, кој врз основа на придавката и дополнителниот параметар ја генерира деклинацијата во еднина и множина, за машки, женски и среден ро... 56432 wikitext text/x-wiki el-cases-conj el-cases-conj е шаблон за прикажување на деклинацијата на грчките придавки. Шаблонот ја повикува Lua-модулот el-c-conj, кој врз основа на придавката и дополнителниот параметар ја генерира деклинацијата во еднина и множина, за машки, женски и среден род. Основна употреба На страницата на придавката се користи: {{el-cases-conj|{{PAGENAME}}|svr}} каде: {{PAGENAME}} автоматски го внесува името на тековната страница, односно придавката што треба да се деклинира. вториот параметар (svr) ја одредува варијантата на женскиот род кај шемите каде што е потребно. Параметарот svr може да биде: празно η α αη Во зависност од конкретната придавка, се избира соодветната вредност. Што генерира шаблонот Шаблонот прикажува табела со следната структура: Еднина Множина Машки род Женски род Среден род Машки род Женски род Среден род Номинатив Генитив Акузатив Вокатив За секој падеж модулот el-c-conj се повикува со посебна функција: {{#invoke:el-c-conj|Nominativ_case|{{{1}}}|{{{2|}}}}} {{#invoke:el-c-conj|Genitiv_case|{{{1}}}|{{{2|}}}}} {{#invoke:el-c-conj|Acusativ_case|{{{1}}}|{{{2|}}}}} {{#invoke:el-c-conj|Vocativ_case|{{{1}}}|{{{2|}}}}} Функциите ги земаат придавката и параметарот 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}} или: {{#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. Главната функција прво ја одредува основата и завршетокот на зборот, а потоа избира соодветна деклинациска шема. При додавање нова деклинациска шема, потребно е: да се додаде препознавање на соодветниот завршеток; да се дефинираат формите за сите четири падежи; за секој падеж да се зададат машки, женски и среден род во еднина и множина; да се додадат соодветни тестови; да се извршат тестовите преку еден од тест-модулите. На овој начин деклинацискиот систем може постепено да се проширува без да се менува начинот на кој се повикува шаблонот на страниците на придавките. 90te6bryqyeosz9px54xfcxn5dojhcj 56433 56432 2026-09-11T10:49:41Z Steborce 2506 56433 wikitext text/x-wiki el-cases-conj el-cases-conj е шаблон за прикажување на деклинацијата на грчките придавки. Шаблонот ја повикува Lua-модулот el-c-conj, кој врз основа на придавката и дополнителниот параметар ја генерира деклинацијата во еднина и множина, за машки, женски и среден род. Основна употреба На страницата на придавката се користи како : '''<nowiki>{{el-cases-conj|{{PAGENAME}}|svr}</nowiki>''' каде: '''<nowiki>{{PAGENAME}}</nowiki>''' автоматски го внесува името на тековната страница, односно придавката што треба да се деклинира. вториот параметар '''svr''' ја одредува варијантата на женскиот род кај шемите каде што е потребно. Параметарот svr може да биде: празно / η / α / αη Во зависност од тоа на која буква завршува придавката во номинатив женски род еднина, се избира соодветната вредност α или η. Ако се остави овој параметар празен се подразбира дека придавката во номинатив женски род еднина завршува на η. Параметарот αη се користи ако сакаме да ги имаме и двете форми во исто време. Што генерира шаблонот Шаблонот прикажува табела со следната структура како во примерот за придавката δίκαιος '''<nowiki>{{el-cases-conj|δίκαιος|αη}}</nowiki>''' {{el-cases-conj|δίκαιος|αη}} За секој падеж модулот el-c-conj се повикува со посебна функција: {{#invoke:el-c-conj|Nominativ_case|{{{1}}}|{{{2|}}}}} {{#invoke:el-c-conj|Genitiv_case|{{{1}}}|{{{2|}}}}} {{#invoke:el-c-conj|Acusativ_case|{{{1}}}|{{{2|}}}}} {{#invoke:el-c-conj|Vocativ_case|{{{1}}}|{{{2|}}}}} Функциите ги земаат придавката и параметарот svr, ја одредуваат соодветната деклинациска шема и ги создаваат формите за сите три рода и двата броја. Параметарот svr svr = α Вредноста α се користи кога женскиот род се образува со -α. На пример, кај шемите каде што машката форма завршува на -ός, скриптата го образува женскиот род со: основа + ά а генитивот еднина со: основа + άς Кај шемата на -ος, женскиот род е: основа + α а генитивот: основа + ας Ова е директно зададено во логиката на модулот. svr = η Вредноста η се користи кога женскиот род се образува со -η. Кај придавките на -ος, тоа значи: машки: основа + ος женски: основа + η среден: основа + ο а во генитив женскиот род завршува на -ης. Кај стандардната шема, доколку svr не е α, скриптата исто така ја избира варијантата со η. svr = αη Вредноста αη се користи кога придавката има две можни форми на женскиот род. Кај придавките на -ος, скриптата тогаш прикажува: женски род: основа + α / основа + η и во генитив: основа + ας / основа + ης На пример, логиката во модулот експлицитно создава две форми разделени со /. Празен параметар Ако вториот параметар не е наведен, тој се третира како празен: '''<nowiki>{{el-cases-conj|{{PAGENAME}}}}'''</nowiki>''' Во шемите каде што се очекува избор помеѓу α и η, празната вредност води кон стандардната варијанта со η. Препознавање на придавките Модулот не бара рачно да се зададе деклинациската шема. Тој ја анализира завршетната форма на придавката и врз основа на неа ја избира соодветната шема. Поддржани се, меѓу другото, следните завршетоци: -ικός -ύς -ός -ος -ων -ών -ως -ής -ης -άρης Доколку придавката не одговара на некоја од специјалните шеми, се користи основната стандардна шема. Придавки на -ικός За придавките на -ικός скриптата ги создава формите со: -ικός -ική -ικό а во множина: -ικοί -ικές -ικά Постои и посебна форма за вокатив машки род -ικέ. Придавки на -ύς За придавките на -ύς се користи посебна деклинациска функција. Примерот вграден во скриптата е: μακρύς → μακριά → μακρύ Соодветно се генерираат и множинските форми. Придавки и партиципи на -ων / -ών За -ων и -ών постои посебна логика. На пример, скриптата го наведува: παρών → παρόν → παρούσα и: επείγων → επείγον → επείγουσα При овие форми модулот води сметка и за позицијата на акцентот, особено во генитив множина. Придавки на -ής / -ης Овие придавки се поделени на два основни типа во зависност од тоа дали основата има акцент. Скриптата ги наведува примерите: ακριβής → ακριβές → ακριβείς → ακριβή и: ουσιώδης → ουσιώδες → ουσιώδεις → ουσιώδη Проверката дали основата има акцент се врши автоматски. Придавки на -άρης За -άρης постои посебна шема, со форми како: -άρης -άρα -άρικο и множински форми: -άρηδες -άρες -άρικα Придавки на -ως Придавките на -ως во моменталната имплементација ја задржуваат истата форма во сите родови, падежи и броеви. Повик директно кон Lua-модулот Иако вообичаениот начин на користење е преку: '''<nowiki>{{el-cases-conj|{{PAGENAME}}|svr}}</nowiki>''' можно е функциите на модулот да се повикаат и директно преку #invoke. На пример: '''<nowiki>{{#invoke:el-c-conj|Nominativ_case|{{{1}}}|{{{2|}}}}}</nowiki>''' Постојат четири јавни функции: Nominativ_case Genitiv_case Acusativ_case Vocativ_case Секоја функција ја чита првата и втората вредност од аргументите, ги отстранува непотребните празни места и ја повикува главната логика за деклинација. Тестирање За проверка на работата на деклинацискиот модул постојат и тест-модули. Тестовите може да се повикаат од било која Викиречник страница со: '''<nowiki>{{#invoke:TestAdjectives|run_tests}}</nowiki>''' {{#invoke:TestAdjectives|run_tests}} или: '''<nowiki>{{#invoke:el-c-conj-tests|run_tests}}</nowiki>''' Овие повици се наменети за развој и проверка на правилноста на деклинацијата. При промена на логиката на el-c-conj, препорачливо е да се извршат тестовите за да се провери дали промената не влијаела врз веќе поддржаните типови на придавки. Пример на страница На страницата на конкретна придавка може да се постави: '''<nowiki>{{el-cases-conj|{{PAGENAME}}|η}}</nowiki>''' или, ако придавката има женска форма на -α: '''<nowiki>{{el-cases-conj|{{PAGENAME}}|α}}</nowiki>''' Ако се дозволени и двете варијанти: '''<nowiki>{{el-cases-conj|{{PAGENAME}}|αη}}</nowiki>''' Ако не е потребен избор: '''<nowiki>{{el-cases-conj|{{PAGENAME}}}}</nowiki> Забелешка за развој Деклинациските правила се имплементирани во Lua-модулот el-c-conj. Главната функција прво ја одредува основата и завршетокот на зборот, а потоа избира соодветна деклинациска шема. При додавање нова деклинациска шема, потребно е: да се додаде препознавање на соодветниот завршеток; да се дефинираат формите за сите четири падежи; за секој падеж да се зададат машки, женски и среден род во еднина и множина; да се додадат соодветни тестови; да се извршат тестовите преку еден од тест-модулите. На овој начин деклинацискиот систем може постепено да се проширува без да се менува начинот на кој се повикува шаблонот на страниците на придавките. j7yl6tnvzy8husvabfgw134n4puns2d