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