Викиречник
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