Wiktionary
omwiktionary
https://om.wiktionary.org/wiki/Fuula_Dura
MediaWiki 1.47.0-wmf.8
case-sensitive
Media
Special
Talk
User
User talk
Wiktionary
Wiktionary talk
File
File talk
MediaWiki
MediaWiki talk
Template
Template talk
Help
Help talk
Category
Category talk
TimedText
TimedText talk
Module
Module talk
Event
Event talk
Module:om-noun
828
26650
81945
81944
2026-06-28T18:42:53Z
EyobAbebe7
3540
81945
Scribunto
text/plain
local export = {}
-- ===================================================
-- UTILITIES
-- ===================================================
local function is_vowel(c)
if not c or c == "" then return false end
return mw.ustring.match(mw.ustring.lower(c), "^[aeiou]$") ~= nil
end
local function is_consonant(c)
if not c or c == "" then return false end
return mw.ustring.match(mw.ustring.lower(c), "^[a-z]$") ~= nil and not is_vowel(c)
end
local function ends_with_double_vowel(w)
local last2 = mw.ustring.sub(w, -2)
return last2 == "aa" or last2 == "ee" or last2 == "ii" or last2 == "oo" or last2 == "uu"
end
-- ===================================================
-- CORE CASES
-- ===================================================
local function make_absolutive_singular(word)
return mw.ustring.lower(word)
end
local function make_accusative(word)
return mw.ustring.lower(word)
end
local function make_genitive(word)
local w = mw.ustring.lower(word)
local last_char = mw.ustring.sub(w, -1)
if ends_with_double_vowel(w) then return w end
if is_vowel(last_char) then return w .. last_char end
return w
end
local function make_genitive_focus(word)
local w = mw.ustring.lower(word)
return make_genitive(w) .. "tu"
end
local function nominative_da_rule(w)
if mw.ustring.match(w, "da$") then
local base = mw.ustring.sub(w, 1, -3)
if is_vowel(mw.ustring.sub(base, -1)) then return base .. "nni" end
end
return w
end
local function nominative_vra_vla_fa(w)
if mw.ustring.match(w, "ra$") then
local base = mw.ustring.sub(w, 1, -3)
if is_vowel(mw.ustring.sub(base, -1)) then return base .. "rri" end
elseif mw.ustring.match(w, "la$") then
local base = mw.ustring.sub(w, 1, -3)
if is_vowel(mw.ustring.sub(base, -1)) then return base .. "lli" end
elseif mw.ustring.match(w, "fa$") then
local base = mw.ustring.sub(w, 1, -3)
if is_vowel(mw.ustring.sub(base, -1)) then return base .. "fti" end
end
return w
end
local function nominative_vcv(w)
if mw.ustring.len(w) < 3 then return w end
local v1 = mw.ustring.sub(w, -3, -3)
local c = mw.ustring.sub(w, -2, -2)
local v2 = mw.ustring.sub(w, -1, -1)
if is_vowel(v1) and is_consonant(c) and is_vowel(v2) then
return mw.ustring.sub(w, 1, -2) .. "ni"
end
return w
end
local function nominative_ccv(w)
if mw.ustring.len(w) < 3 then return w end
local c1 = mw.ustring.sub(w, -3, -3)
local c2 = mw.ustring.sub(w, -2, -2)
local v = mw.ustring.sub(w, -1, -1)
if is_consonant(c1) and is_consonant(c2) and is_vowel(v) then
return mw.ustring.sub(w, 1, -2) .. "i"
end
return w
end
local function nominative_vv(w)
if ends_with_double_vowel(w) then return w .. "n" end
return w
end
local function make_nominative_singular(word)
local w = mw.ustring.lower(word)
if is_consonant(mw.ustring.sub(w, -1)) then return w end
if mw.ustring.match(w, "yyo$") then return w end
w = nominative_da_rule(w)
w = nominative_vra_vla_fa(w)
w = nominative_vcv(w)
w = nominative_ccv(w)
w = nominative_vv(w)
return w
end
local function make_nominative_focus(word)
local w = mw.ustring.lower(word)
return w .. "tu"
end
local function make_instrumental(word)
local w = mw.ustring.lower(word)
local last = mw.ustring.sub(w, -1)
if ends_with_double_vowel(w) then return w .. "dhaan" end
if is_vowel(last) then return w .. last .. "n" end
return w
end
local function make_instrumental_extended(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if mw.ustring.match(w, "tiin$") then return w end
if ends_with_double_vowel(w) then return w .. "tiin" end
if is_vowel(last) then return w .. last .. "tiin" end
return w .. "iin"
end
local function make_dative(word)
local w = mw.ustring.lower(word)
local last = mw.ustring.sub(w, -1)
if ends_with_double_vowel(w) then return w .. "f" end
if is_vowel(last) then return w .. last .. "f" end
return w .. "iif"
end
local function make_dative_extended(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if ends_with_double_vowel(w) then return w .. "tiif" end
if is_vowel(last) then return w .. last .. "tiif" end
return w .. "itiif"
end
local function make_allative(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if is_vowel(last) then return w .. "tti" end
return w .. "itti"
end
local function make_genitive_allative(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if ends_with_double_vowel(w) then return w .. "tti" end
if is_vowel(last) then return w .. last .. "tti" end
return w .. "iitti"
end
local function make_vocative(word)
local w = mw.ustring.lower(word)
return "yaa " .. make_genitive(w)
end
-- ===================================================
-- RELATIONAL CASES
-- ===================================================
local function make_superessive(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if is_consonant(last) then return w .. "irra" end
return w .. "rra"
end
local function make_superessive_locative(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if is_consonant(last) then return w .. "irratti" end
return w .. "rratti"
end
local function make_ablative_superessive(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if is_consonant(last) then return w .. "irraa" end
return w .. "rraa"
end
local function make_inessive(word) return mw.ustring.lower(word) .. " keessa" end
local function make_inessive_locative(word) return mw.ustring.lower(word) .. " keessatti" end
local function make_elative(word) return mw.ustring.lower(word) .. " keessaa" end
local function make_subessive(word) return mw.ustring.lower(word) .. " jala" end
local function make_subessive_loc(word) return mw.ustring.lower(word) .. " jalatti" end
local function make_sublative(word) return mw.ustring.lower(word) .. " jalaa" end
local function make_adessive(word) return mw.ustring.lower(word) .. " bira" end
local function make_adessive_loc(word) return mw.ustring.lower(word) .. " biratti" end
local function make_ablative_adess(word) return mw.ustring.lower(word) .. " biraa" end
-- ===================================================
-- GENITIVE-LOCATIVE (RELATIONAL) CASES
-- ===================================================
local function make_superessive_1(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if ends_with_double_vowel(w) then return w .. "rra" end
if is_vowel(last) then return w .. last .. "rra" end
return w .. "irra"
end
local function make_superessive_locative_1(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if ends_with_double_vowel(w) then return w .. "rratti" end
if is_vowel(last) then return w .. last .. "rratti" end
return w .. "irratti"
end
local function make_ablative_superessive_1(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if ends_with_double_vowel(w) then return w .. "rraa" end
if is_vowel(last) then return w .. last .. "rraa" end
return w .. "irraa"
end
local function make_inessive_1(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if ends_with_double_vowel(w) then return w .. " keessa" end
if is_vowel(last) then return w .. last .. " keessa" end
return w .. " keessa"
end
local function make_inessive_locative_1(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if ends_with_double_vowel(w) then return w .. " keessatti" end
if is_vowel(last) then return w .. last .. " keessatti" end
return w .. " keessatti"
end
local function make_elative_1(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if ends_with_double_vowel(w) then return w .. " keessaa" end
if is_vowel(last) then return w .. last .. " keessaa" end
return w .. " keessaa"
end
local function make_subessive_1(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if ends_with_double_vowel(w) then return w .. " jala" end
if is_vowel(last) then return w .. last .. " jala" end
return w .. " jala"
end
local function make_ablative_adess_1(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if ends_with_double_vowel(w) then return w .. " biraa" end
if is_vowel(last) then return w .. last .. " biraa" end
return w .. " biraa"
end
local function make_subessive_loc_1(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if ends_with_double_vowel(w) then return w .. " jalatti" end
if is_vowel(last) then return w .. last .. " jalatti" end
return w .. " jalatti"
end
local function make_sublative_1(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if ends_with_double_vowel(w) then return w .. " jalaa" end
if is_vowel(last) then return w .. last .. " jalaa" end
return w .. " jalaa"
end
local function make_adessive_1(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if ends_with_double_vowel(w) then return w .. " bira" end
if is_vowel(last) then return w .. last .. " bira" end
return w .. " bira"
end
local function make_adessive_loc_1(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if ends_with_double_vowel(w) then return w .. " biratti" end
if is_vowel(last) then return w .. last .. " biratti" end
return w .. " biratti"
end
-- ===================================================
-- DEFINITE, INDEFINITE & PRONOUNS
-- ===================================================
local function make_indefinite(word) return mw.ustring.lower(word) end
local function make_definite(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if ends_with_double_vowel(w) then return mw.ustring.sub(w, 1, -3) .. "icha" end
if is_vowel(last) then return mw.ustring.sub(w, 1, -2) .. "icha" end
return w .. "icha"
end
local function make_definite_gen(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if ends_with_double_vowel(w) then return mw.ustring.sub(w, 1, -3) .. "ichaa" end
if is_vowel(last) then return mw.ustring.sub(w, 1, -2) .. "ichaa" end
return w .. "ichaa"
end
local function make_definite_fem(word)
local w = mw.ustring.lower(word)
if mw.ustring.len(w) == 0 then return w end
local last = mw.ustring.sub(w, -1)
if ends_with_double_vowel(w) then return mw.ustring.sub(w, 1, -3) .. "ittii" end
if is_vowel(last) then return mw.ustring.sub(w, 1, -2) .. "ittii" end
return w .. "ittii"
end
local function make_proximal(word) return make_nominative_singular(word) .. " kun" end
local function make_proximal_fem(word) return make_nominative_singular(word) .. " tun" end
local function make_proximal_1(word) return mw.ustring.lower(word) .. " kanatu" end
local function make_proximal_fem_1(word) return mw.ustring.lower(word) .. " tanatu" end
local function make_proximal_obj(word) return mw.ustring.lower(word) .. " kana" end
local function make_proximal_obj_fem(word) return mw.ustring.lower(word) .. " tana" end
local function make_distal(word) return make_nominative_singular(word) .. " sun" end
local function make_distal_1(word) return mw.ustring.lower(word) .. " sanatu" end
local function make_distal_obj(word) return mw.ustring.lower(word) .. " sana/san" end
local function make_distal_gen(word) return mw.ustring.lower(word) .. " sanaa" end
local function make_unknown(word) return make_nominative_singular(word) .. " tokko" end
local function make_unknown_foc(word) return mw.ustring.lower(word) .. " tokkotu" end
local function make_unknown_obj(word) return mw.ustring.lower(word) .. " tokko" end
local function make_unknown_gen(word) return mw.ustring.lower(word) .. " tokkoo" end
-- ===================================================
-- EXPORT FUNCTION (HTML TABLE ENGINE)
-- ===================================================
function export.generate(frame)
local args = frame.args
if not args[1] and not args.word then
args = frame:getParent().args
end
local word = args[1] or args.word
if not word or word == "" then
local pagename = mw.title.getCurrentTitle().text
if mw.title.getCurrentTitle().namespace == 10 or mw.title.getCurrentTitle().namespace == 828 then
word = "farda"
else
word = pagename
end
end
word = mw.text.trim(word)
if word == "" then return "" end
local html = mw.html.create('table')
:attr('class', 'wikitable')
:attr('style', 'border-collapse: collapse; text-align: left; width: 100%; max-width: 600px;')
local function add_header(title)
html:tag('tr')
:tag('th')
:attr('colspan', '2')
:attr('style', 'background-color: #d1e7dd; color: #0f5132; text-align: center; font-size: 1.1em;')
:wikitext(title)
:done()
:done()
end
local function add_row(label, value)
html:tag('tr')
:tag('th'):attr('style', 'width: 50%; background-color: #f8f9fa;'):wikitext(label):done()
:tag('td'):wikitext(value):done()
:done()
end
-- =================== SECTION 1: CORE CASES ===================
add_header('🟩 Afaan Oromoo Core Case - [[' .. word .. ']]')
add_row('Absolutive singular', '[[' .. make_absolutive_singular(word) .. ']]')
add_row('Nominative singular', '[[' .. make_nominative_singular(word) .. ']]')
add_row('Nominative + Focus', '[[' .. make_nominative_focus(word) .. ']]')
add_row('Accusative singular', '[[' .. make_accusative(word) .. ']]')
add_row('Genitive singular', '[[' .. make_genitive(word) .. ']]')
add_row('Genitive + Focus', '[[' .. make_genitive_focus(word) .. ']]')
add_row('Instrumental (simple)', '[[' .. make_instrumental(word) .. ']]')
add_row('Instrumental (extended)', '[[' .. make_instrumental_extended(word) .. ']]')
add_row('Dative singular', '[[' .. make_dative(word) .. ']]')
add_row('Dative (extended)', '[[' .. make_dative_extended(word) .. ']]')
add_row('Allative', '[[' .. make_allative(word) .. ']]')
add_row('Genitive-Allative', '[[' .. make_genitive_allative(word) .. ']]')
add_row('Vocative', make_vocative(word))
-- =================== SECTION 2: RELATIONAL CASES ===================
add_header('🟩 Relational / Locative Cases')
add_row('Superessive', '[[' .. make_superessive(word) .. ']]')
add_row('Superessive-Locative', '[[' .. make_superessive_locative(word) .. ']]')
add_row('Superessive-Ablative', '[[' .. make_ablative_superessive(word) .. ']]')
add_row('Inessive', '[[' .. make_inessive(word) .. ']]')
add_row('Inessive-Locative', '[[' .. make_inessive_locative(word) .. ']]')
add_row('Elative', '[[' .. make_elative(word) .. ']]')
add_row('Subessive', '[[' .. make_subessive(word) .. ']]')
add_row('Subessive-Locative', '[[' .. make_subessive_loc(word) .. ']]')
add_row('Sublative-Ablative', '[[' .. make_sublative(word) .. ']]')
add_row('Adessive', '[[' .. make_adessive(word) .. ']]')
add_row('Adessive-Locative', '[[' .. make_adessive_loc(word) .. ']]')
add_row('Adessive-Ablative', '[[' .. make_ablative_adess(word) .. ']]')
-- =================== SECTION 3: GENITIVE RELATIONAL ===================
add_header('🟩 Genitive-Based Relational Locative Cases')
add_row('Superessive', '[[' .. make_superessive_1(word) .. ']]')
add_row('Superessive-Locative', '[[' .. make_superessive_locative_1(word) .. ']]')
add_row('Superessive-Ablative', '[[' .. make_ablative_superessive_1(word) .. ']]')
add_row('Inessive', '[[' .. make_inessive_1(word) .. ']]')
add_row('Inessive-Locative', '[[' .. make_inessive_locative_1(word) .. ']]')
add_row('Elative', '[[' .. make_elative_1(word) .. ']]')
add_row('Subessive', '[[' .. make_subessive_1(word) .. ']]')
add_row('Subessive-Locative', '[[' .. make_subessive_loc_1(word) .. ']]')
add_row('Sublative-Ablative', '[[' .. make_sublative_1(word) .. ']]')
add_row('Adessive', '[[' .. make_adessive_1(word) .. ']]')
add_row('Adessive-Locative', '[[' .. make_adessive_loc_1(word) .. ']]')
add_row('Adessive-Ablative', '[[' .. make_ablative_adess_1(word) .. ']]')
-- =================== SECTION 4: DEFINITE & PRONOUNS ===================
add_header('🟩 Definite and Indefinite Form + Gender')
add_row('Indefinite', '[[' .. make_indefinite(word) .. ']]')
add_row('Definite male singular', '[[' .. make_definite(word) .. ']]')
add_row('Genitive definite male singular', '[[' .. make_definite_gen(word) .. ']]')
add_row('Definite female singular/Genitive', '[[' .. make_definite_fem(word) .. ']]')
add_row('Proximal (nominative) (this) male', '[[' .. make_proximal(word) .. ']]')
add_row('Proximal (nominative) (this) female', '[[' .. make_proximal_fem(word) .. ']]')
add_row('Proximal (nominative+focus) male', '[[' .. make_proximal_1(word) .. ']]')
add_row('Proximal (nominative+focus) female', '[[' .. make_proximal_fem_1(word) .. ']]')
add_row('Proximal (Accusative) male', '[[' .. make_proximal_obj(word) .. ']]')
add_row('Proximal (Accusative) female', '[[' .. make_proximal_obj_fem(word) .. ']]')
add_row('Distal (nominative) both genders', '[[' .. make_distal(word) .. ']]')
add_row('Distal (nominative+focus)', '[[' .. make_distal_1(word) .. ']]')
add_row('Distal (Accusative)', '[[' .. make_distal_obj(word) .. ']]')
add_row('Distal (Genitive)', '[[' .. make_distal_gen(word) .. ']]')
add_row('Unknown (nominative)', '[[' .. make_unknown(word) .. ']]')
add_row('Unknown (nominative+focus)', '[[' .. make_unknown_foc(word) .. ']]')
add_row('Unknown (Accusative)', '[[' .. make_unknown_obj(word) .. ']]')
add_row('Unknown (Genitive)', '[[' .. make_unknown_gen(word) .. ']]')
return tostring(html)
end
return export
8okyihzkxg1y45vye3cqsqy5yb34sne
Module:Om-conjug
828
62063
81946
2026-06-28T20:14:59Z
EyobAbebe7
3540
Created page with "local export = {} -- =================================================== -- 1. UTILITY FUNCTIONS -- =================================================== local function get_verb_root(verb) local w = mw.ustring.lower(mw.text.trim(verb)) if mw.ustring.match(w, "uu$") then return mw.ustring.sub(w, 1, -3) end return w end -- =================================================== -- 2. AFFIRMATIVE SIMPLE PAST (Yeroo Darbee Eeyyamaa) -- ===================..."
81946
Scribunto
text/plain
local export = {}
-- ===================================================
-- 1. UTILITY FUNCTIONS
-- ===================================================
local function get_verb_root(verb)
local w = mw.ustring.lower(mw.text.trim(verb))
if mw.ustring.match(w, "uu$") then
return mw.ustring.sub(w, 1, -3)
end
return w
end
-- ===================================================
-- 2. AFFIRMATIVE SIMPLE PAST (Yeroo Darbee Eeyyamaa)
-- ===================================================
local function conjugate_past(verb)
local root = get_verb_root(verb)
local ani, ati, inni, isheen, nuti, isin, isaan
if mw.ustring.match(root, "ooch$") then
return { Ani=root.."e", Ati=root.."ite", Inni=root.."e", Isheen=root.."ite", Nuti=root.."ine", Isin=root.."itan", Isaan=root.."an" }
elseif mw.ustring.match(root, "och$") then
local base = mw.ustring.sub(root, 1, -3)
return { Ani=base.."dhe", Ati=base.."ote", Inni=base.."dhe", Isheen=base.."ote", Nuti=base.."one", Isin=base.."otan", Isaan=base.."dhan" }
elseif mw.ustring.match(root, "ach$") then
local base = mw.ustring.sub(root, 1, -3)
return { Ani=base.."dhe", Ati=base.."tte", Inni=base.."te", Isheen=base.."tte", Nuti=base.."nne", Isin=base.."ttan", Isaan=base.."tan" }
elseif mw.ustring.match(root, "edh$") then
local base = mw.ustring.sub(root, 1, -3)
return { Ani=base.."dhe", Ati=base.."ete", Inni=base.."dhe", Isheen=base.."ete", Nuti=base.."ene", Isin=base.."etan", Isaan=base.."dhan" }
elseif mw.ustring.match(root, "sh$") then
return { Ani=root.."e", Ati=root.."te", Inni=root.."e", Isheen=root.."te", Nuti=root.."ne", Isin=root.."tan", Isaan=root.."an" }
end
if mw.ustring.match(root, "[bcdfghjklmnpqrstvwxz][bcdfghjklmnpqrstvwxz]$") then
nuti = root .. "ine"; ati = root .. "ite"; isheen = root .. "ite"; isin = root .. "itan"
elseif mw.ustring.match(root, "aaw$") then
local base = mw.ustring.sub(root, 1, -4)
nuti = base .. "oofne"; ati = base .. "oofte"; isheen = base .. "oofte"; isin = base .. "ooftan"
elseif mw.ustring.match(root, "l$") then
nuti = root .. "le"; ati = root .. "te"; isheen = root .. "te"; isin = root .. "tan"
elseif mw.ustring.match(root, "d$") then
local base = mw.ustring.sub(root, 1, -2)
nuti = base .. "nne"; ati = root .. "de"; isheen = root .. "de"; isin = root .. "dan"
elseif mw.ustring.match(root, "r$") then
nuti = root .. "re"; ati = root .. "te"; isheen = root .. "te"; isin = root .. "tan"
else
nuti = root .. "ne"; ati = root .. "te"; isheen = root .. "te"; isin = root .. "tan"
end
return { Ani=root.."e", Ati=ati, Inni=root.."e", Isheen=isheen, Nuti=nuti, Isin=isin, Isaan=root.."an" }
end
-- ===================================================
-- 3. NEGATIVE PAST / PERFECT (Yeroo Darbee/Raawwatamaa Diigamaa)
-- ===================================================
local function conjugate_negative_past_perfect(verb)
local root = get_verb_root(verb)
local neg_form
if mw.ustring.match(root, "ooch$") or mw.ustring.match(root, "[bcdfghjklmnpqrstvwxz][bcdfghjklmnpqrstvwxz]$") then
neg_form = root .. "ine"
elseif mw.ustring.match(root, "aaw$") or mw.ustring.match(root, "aay$") or mw.ustring.match(root, "aah$") or mw.ustring.match(root, "naa'$") or mw.ustring.match(root, "aa'$") then
neg_form = mw.ustring.sub(root, 1, -4) .. "oofne"
elseif mw.ustring.match(root, "aw$") then
neg_form = mw.ustring.sub(root, 1, -3) .. "oofne"
elseif mw.ustring.match(root, "ooh$") then
neg_form = mw.ustring.sub(root, 1, -4) .. "oone"
elseif mw.ustring.match(root, "uu'$") then
neg_form = mw.ustring.sub(root, 1, -3) .. "une"
elseif mw.ustring.match(root, "u'$") then
neg_form = mw.ustring.sub(root, 1, -2) .. "une"
elseif mw.ustring.match(root, "aari'$") then
neg_form = mw.ustring.sub(root, 1, -2) .. "ne"
elseif mw.ustring.match(root, "i'$") then
neg_form = mw.ustring.sub(root, 1, -2) .. "ine"
elseif mw.ustring.match(root, "na'$") then
neg_form = mw.ustring.sub(root, 1, -4) .. "nofne"
elseif mw.ustring.match(root, "kaa'$") or mw.ustring.match(root, "taa'$") then
neg_form = mw.ustring.sub(root, 1, -4) .. "eenye"
elseif mw.ustring.match(root, "aata'$") then
neg_form = mw.ustring.sub(root, 1, -3) .. "ofne"
elseif mw.ustring.match(root, "yaa'$") then
neg_form = mw.ustring.sub(root, 1, -3) .. "ane"
elseif mw.ustring.match(root, "a'$") or mw.ustring.match(root, "h$") then
neg_form = mw.ustring.sub(root, 1, -2) .. "ane"
elseif mw.ustring.match(root, "udh$") then
neg_form = mw.ustring.sub(root, 1, -4) .. "une"
elseif mw.ustring.match(root, "l$") then
neg_form = root .. "le"
elseif mw.ustring.match(root, "d$") then
neg_form = mw.ustring.sub(root, 1, -2) .. "nne"
elseif mw.ustring.match(root, "r$") then
neg_form = root .. "re"
else
neg_form = root .. "ne"
end
local res = "hin " .. neg_form
return { Ani=res, Ati=res, Inni=res, Isheen=res, Nuti=res, Isin=res, Isaan=res }
end
-- ===================================================
-- 4. PRESENT CONTINUOUS (Yeroo Ammaa Itti Fufaa)
-- ===================================================
local function conjugate_present_continuous(verb)
local root = get_verb_root(verb)
return {
Ani = root .. "aan jira", Ati = root .. "aa jirta", Inni = root .. "aa jira",
Isheen = root .. "aa jirti", Nuti = root .. "aa jirra", Isin = root .. "aa jirtu", Isaan = root .. "aa jiru"
}
end
local function conjugate_negative_present_continuous(verb)
local root = get_verb_root(verb)
return {
Ani = root .. "aa hin jiru", Ati = root .. "aa hin jirtu", Inni = root .. "aa hin jiru",
Isheen = root .. "aa hin jirtu", Nuti = root .. "aa hin jirru", Isin = root .. "aa hin jirtan", Isaan = root .. "aa hin jiran"
}
end
-- ===================================================
-- 5. SIMPLE FUTURE (Yeroo Fuulduraa)
-- ===================================================
local function conjugate_future(verb)
local root = get_verb_root(verb)
return {
Ani = "nan " .. root .. "a", Ati = "ni " .. root .. "ta", Inni = "ni " .. root .. "a",
Isheen = "ni " .. root .. "ti", Nuti = "ni " .. root .. "na", Isin = "ni " .. root .. "tu", Isaan = "ni " .. root .. "u"
}
end
local function conjugate_negative_future(verb)
local root = get_verb_root(verb)
return {
Ani = "hin " .. root .. "u", Ati = "hin " .. root .. "tu", Inni = "hin " .. root .. "u",
Isheen = "hin " .. root .. "tu", Nuti = "hin " .. root .. "nu", Isin = "hin " .. root .. "tan", Isaan = "hin " .. root .. "an"
}
end
-- ===================================================
-- 6. PRESENT PERFECT (Yeroo Raawwatamaa Ammaa)
-- ===================================================
local function conjugate_perfect(verb)
local root = get_verb_root(verb)
local ani, ati, inni, isheen, nuti, isin, isaan
if mw.ustring.match(root, "ooch$") or mw.ustring.match(root, "eech$") or mw.ustring.match(root, "uch$") or
mw.ustring.match(root, "adh$") or mw.ustring.match(root, "eedh$") or mw.ustring.match(root, "sh$") or
mw.ustring.match(root, "ny$") or mw.ustring.match(root, "yy$") then
local base = root
return { Ani=base.."eera", Ati=base.."iteetta", Inni=base.."eera", Isheen=base.."iteetti", Nuti=base.."ineera", Isin=base.."itaniittu", Isaan=base.."aniiru" }
elseif mw.ustring.match(root, "och$") or mw.ustring.match(root, "odh$") then
local base = mw.ustring.sub(root, 1, -3)
return { Ani=base.."dheera", Ati=base.."oteetta", Inni=base.."dheera", Isheen=base.."oteetti", Nuti=base.."oneerra", Isin=base.."otaniittu", Isaan=base.."dhaniiru" }
end
-- Default haala adda addaaf:
return { Ani = root.."eera", Ati = root.."teetta", Inni = root.."eera", Isheen = root.."teetti", Nuti = root.."neerra", Isin = root.."taniittu", Isaan = root.."aniiru" }
end
-- ===================================================
-- 7. COMMAND FORM (Bifa Ajajaa)
-- ===================================================
local function conjugate_command(verb)
local root = get_verb_root(verb)
return { Ati_aff = root .. "i", Isin_aff = root .. "aa", Ati_neg = "hin " .. root .. "in", Isin_neg = "hin " .. root .. "inaa" }
end
-- ===================================================
-- 8. INTENTIONAL FUTURE ASPECT (Kutaa Karoora Fuulduraa)
-- ===================================================
local function conjugate_aspect(verb)
local root = get_verb_root(verb)
local aff = root .. "uufi"
return { Ani=aff, Ati=aff, Inni=aff, Isheen=aff, Nuti=aff, Isin=aff, Isaan=aff }
end
local function conjugate_negative_aspect(verb)
local root = get_verb_root(verb)
local nf = root .. "uuf miti"
return { Ani=nf, Ati=nf, Inni=nf, Isheen=nf, Nuti=nf, Isin=nf, Isaan=nf }
end
-- ===================================================
-- HTML WIKITABLE GENERATOR
-- ===================================================
function export.generate(frame)
local args = frame.args
if not args[1] and not args.word then args = frame:getParent().args end
local word = args[1] or args.word
if not word or word == "" then word = mw.title.getCurrentTitle().text end
local past_aff = conjugate_past(word)
local neg_past_perf = conjugate_negative_past_perfect(word)
local pres_cont = conjugate_present_continuous(word)
local pres_cont_neg = conjugate_negative_present_continuous(word)
local future_aff = conjugate_future(word)
local future_neg = conjugate_negative_future(word)
local perfect = conjugate_perfect(word)
local aspect_aff = conjugate_aspect(word)
local aspect_neg = conjugate_negative_aspect(word)
local cmd = conjugate_command(word)
local container = mw.html.create('div'):attr('style', 'display: flex; flex-direction: column; gap: 20px;')
local order = { "Ani", "Ati", "Inni", "Isheen", "Nuti", "Isin", "Isaan" }
-- TABLE 1: Simple Past
local table1 = mw.html.create('table'):attr('class', 'wikitable'):attr('style', 'border-collapse: collapse; text-align: left; width: 100%; max-width: 800px;')
table1:tag('tr'):tag('th'):attr('colspan', '3'):attr('style', 'background-color: #d1e7dd; color: #0f5132; text-align: center; font-size: 1.1em;'):wikitext('🟩 Simple Past Tense - [[' .. word .. ']]'):done():done()
for _, pron in ipairs(order) do
table1:tag('tr'):tag('th'):attr('style', 'background-color: #f8f9fa; width: 20%;'):wikitext(pron):done()
:tag('td'):wikitext('[[' .. past_aff[pron] .. ']]'):done()
:tag('td'):wikitext('[[' .. neg_past_perf[pron] .. ']]'):done():done()
end
container:node(table1)
-- TABLE 2: Simple Future / Present
local table2 = mw.html.create('table'):attr('class', 'wikitable'):attr('style', 'border-collapse: collapse; text-align: left; width: 100%; max-width: 800px;')
table2:tag('tr'):tag('th'):attr('colspan', '3'):attr('style', 'background-color: #cff4fc; color: #055160; text-align: center; font-size: 1.1em;'):wikitext('🟦 Simple Future / Present Tense - [[' .. word .. ']]'):done():done()
for _, pron in ipairs(order) do
table2:tag('tr'):tag('th'):attr('style', 'background-color: #f8f9fa; width: 20%;'):wikitext(pron):done()
:tag('td'):wikitext('[[' .. future_aff[pron] .. ']]'):done()
:tag('td'):wikitext('[[' .. future_neg[pron] .. ']]'):done():done()
end
container:node(table2)
-- TABLE 3: Present Perfect
local table3 = mw.html.create('table'):attr('class', 'wikitable'):attr('style', 'border-collapse: collapse; text-align: left; width: 100%; max-width: 800px;')
table3:tag('tr'):tag('th'):attr('colspan', '3'):attr('style', 'background-color: #e2e3e5; color: #41464b; text-align: center; font-size: 1.1em;'):wikitext('⬜ Present Perfect Tense - [[' .. word .. ']]'):done():done()
for _, pron in ipairs(order) do
table3:tag('tr'):tag('th'):attr('style', 'background-color: #f8f9fa; width: 20%;'):wikitext(pron):done()
:tag('td'):wikitext('[[' .. perfect[pron] .. ']]'):done()
:tag('td'):wikitext('[[' .. neg_past_perf[pron] .. ']]'):done():done()
end
container:node(table3)
-- TABLE 4: Present Continuous
local table4 = mw.html.create('table'):attr('class', 'wikitable'):attr('style', 'border-collapse: collapse; text-align: left; width: 100%; max-width: 800px;')
table4:tag('tr'):tag('th'):attr('colspan', '3'):attr('style', 'background-color: #cfe2ff; color: #084298; text-align: center; font-size: 1.1em;'):wikitext('🟪 Present Continuous Tense - [[' .. word .. ']]'):done():done()
for _, pron in ipairs(order) do
table4:tag('tr'):tag('th'):attr('style', 'background-color: #f8f9fa; width: 20%;'):wikitext(pron):done()
:tag('td'):wikitext('[[' .. pres_cont[pron] .. ']]'):done()
:tag('td'):wikitext('[[' .. pres_cont_neg[pron] .. ']]'):done():done()
end
container:node(table4)
-- TABLE 5: Intentional Future Aspect
local table5 = mw.html.create('table'):attr('class', 'wikitable'):attr('style', 'border-collapse: collapse; text-align: left; width: 100%; max-width: 800px;')
table5:tag('tr'):tag('th'):attr('colspan', '3'):attr('style', 'background-color: #f8d7da; color: #842029; text-align: center; font-size: 1.1em;'):wikitext('🟥 Intentional Future Aspect - [[' .. word .. ']]'):done():done()
for _, pron in ipairs(order) do
table5:tag('tr'):tag('th'):attr('style', 'background-color: #f8f9fa; width: 20%;'):wikitext(pron):done()
:tag('td'):wikitext('[[' .. aspect_aff[pron] .. ']]'):done()
:tag('td'):wikitext('[[' .. aspect_neg[pron] .. ']]'):done():done()
end
container:node(table5)
-- TABLE 6: Imperative
local table6 = mw.html.create('table'):attr('class', 'wikitable'):attr('style', 'border-collapse: collapse; text-align: left; width: 100%; max-width: 800px;')
table6:tag('tr'):tag('th'):attr('colspan', '3'):attr('style', 'background-color: #fff3cd; color: #664d03; text-align: center; font-size: 1.1em;'):wikitext('🟨 Imperative (Command Form) - [[' .. word .. ']]'):done():done()
table6:tag('tr'):tag('th'):attr('style', 'background-color: #f8f9fa; width: 20%;'):wikitext('Ati'):done():tag('td'):wikitext('[[' .. cmd.Ati_aff .. ']]'):done():tag('td'):wikitext('[[' .. cmd.Ati_neg .. ']]'):done():done()
table6:tag('tr'):tag('th'):attr('style', 'background-color: #f8f9fa; width: 20%;'):wikitext('Isin'):done():tag('td'):wikitext('[[' .. cmd.Isin_aff .. ']]'):done():tag('td'):wikitext('[[' .. cmd.Isin_neg .. ']]'):done():done()
container:node(table6)
return tostring(container)
end
return export
o2qw0yqnq4thynfgtjcn1ctumpfgcdz
Template:Om-conjug
10
62064
81947
2026-06-28T20:20:42Z
EyobAbebe7
3540
Created page with "<includeonly>{{#invoke:Om-conjug|generate}}</includeonly><noinclude> {{Documentation|content= == Fayyadama (Usage) == Template kun gochimoota Afaan Oromoo (Oromo verbs) haala yeroo garaa garaatiin (Tenses) diiguuf (conjugate) gargaara. === Haala itti fayyadamnu === Fuula gochimaa tokko irratti (fakkeenyaaf fuula "deemuu" jedhu irratti), koodii armaan gadii qofa barreessaa: <code><nowiki>{{Om-conjug}}</nowiki></code> Yookiin, fuula biraa irra teessanii gochima barbaadd..."
81947
wikitext
text/x-wiki
<includeonly>{{#invoke:Om-conjug|generate}}</includeonly><noinclude>
{{Documentation|content=
== Fayyadama (Usage) ==
Template kun gochimoota Afaan Oromoo (Oromo verbs) haala yeroo garaa garaatiin (Tenses) diiguuf (conjugate) gargaara.
=== Haala itti fayyadamnu ===
Fuula gochimaa tokko irratti (fakkeenyaaf fuula "deemuu" jedhu irratti), koodii armaan gadii qofa barreessaa:
<code><nowiki>{{Om-conjug}}</nowiki></code>
Yookiin, fuula biraa irra teessanii gochima barbaaddan tokkoof gabatee uumuu yoo barbaaddan, maqaa gochimichaa itti dabaluun akkasitti barreessaa:
<code><nowiki>{{Om-conjug|deemuu}}</nowiki></code>
<code><nowiki>{{Om-conjug|word=nyaachuu}}</nowiki></code>
}}
</noinclude>
slei2e5639vy9x4pnf3r876wdkwv7i3
Template:Documentation
10
62065
81948
2026-06-28T20:25:17Z
EyobAbebe7
3540
Created page with "{{Documentation subpage}} == Kaayyoo (Purpose) == Template kun gochimoota Afaan Oromoo (Oromo verbs) haala yeroo garaa garaatiin (Tenses) diiguuf (conjugate) gargaara. Koodii [[Module:Om-conjug]] fayyadamuun ofumaan hundee gochimaa (verb root) adda baasee gabatee bifa eeyyamaa (affirmative) fi diigamaa (negative) miidhagaa ta'e uuma. == Akkaataa Itti Fayyadamnu (Usage) == Haala lamaan fayyadamuu ni dandeessu: === 1. Fuula Gochimaa Irratti (Default) === Yoo fuulli isin..."
81948
wikitext
text/x-wiki
{{Documentation subpage}}
== Kaayyoo (Purpose) ==
Template kun gochimoota Afaan Oromoo (Oromo verbs) haala yeroo garaa garaatiin (Tenses) diiguuf (conjugate) gargaara. Koodii [[Module:Om-conjug]] fayyadamuun ofumaan hundee gochimaa (verb root) adda baasee gabatee bifa eeyyamaa (affirmative) fi diigamaa (negative) miidhagaa ta'e uuma.
== Akkaataa Itti Fayyadamnu (Usage) ==
Haala lamaan fayyadamuu ni dandeessu:
=== 1. Fuula Gochimaa Irratti (Default) ===
Yoo fuulli isin irra jirtan maqaa gochimaa ta'e (fakkeenyaaf fuula '''deemuu''' jedhu irratti hojjechaa yoo jiraattan), koodii kana qofa barreessaa. Template'n kun ofumaan maqaa fuulachaa dubbisuun diiga:
<code><nowiki>{{Om-conjug}}</nowiki></code>
=== 2. Gochima Biraa Waamuuf (With Parameter) ===
Fuula biraa irra teessanii gochima barbaaddan tokkoof gabatee uumuu yoo barbaaddan, maqaa gochimichaa itti dabaluun fayyadamaa:
<code><nowiki>{{Om-conjug|nyaachuu}}</nowiki></code>
yookiin bifa kanaan:
<code><nowiki>{{Om-conjug|word=dhuguu}}</nowiki></code>
== Yeroowwan (Tenses) Inni Deeggaru ==
Gabateewwan module kanaan uumaman yeroowwan gurguddoo armaan gadii sirriitti hammatu:
* '''🟩 Simple Past Tense''' (Yeroo Darbee Salphaa - Eeyyamaa fi Diigamaa)
* '''🟦 Simple Future / Present Tense''' (Yeroo Fuulduraa fi Ammaa)
* '''⬜ Present Perfect Tense''' (Yeroo Raawwatamaa Ammaa)
* '''🟪 Present Continuous Tense''' (Yeroo Ammaa Itti Fufaa)
* '''🟥 Intentional Future Aspect''' (Kutaa Karoora Fuulduraa)
* '''🟨 Imperative''' (Bifa Ajajaa - Ati fi Isin)
== Fakkeenya (Example) ==
Koodiin armaan gadii:
<code><nowiki>{{Om-conjug|baruu}}</nowiki></code>
Gabatee gochima "baruu" diigame bifa suuraatiin (table) bumbaa maqaa (Ani, Ati, Inni, Isheen, Nuti, Isin, Isaan) hundaaf ni fida.
== Hubachiisa (Notes) ==
* Gochimootni inni fudhatu xumura bu'uuraa '''-uu''' dhaan kan xumuraman (Fakkeenyaaf: ''deemuu, hojjechuu, fiiguu'') yoo ta'an bu'aa sirrii fida. Module'n inni duubaan hojjetu ofumaan "-uu" kana irraa kukkutee seera afaanichaatiin hojjeta.
<includeonly>{{sandbox other||
[[Category:Afaan Oromoo verb templates]]
[[Category:Conjugation templates]]
}}</includeonly>
8ucj66nst3sww6fg32yelou5q0g04tc