Module:tln-conj: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
mNo edit summary |
||
| (8 intermediate revisions by the same user not shown) | |||
| Line 7: | Line 7: | ||
local endings = { | local endings = { | ||
are = { | are = { | ||
pres_1s = " | pres_1s = "ᠣ", | ||
pres_2s = " | pres_2s = "ᠠᠰ", | ||
pres_3s = " | pres_3s = "ᠠᠲ", | ||
pres_1p = " | pres_1p = "ᠠᠨᠤᠰ", | ||
pres_2p = " | pres_2p = "ᠠᠵᠢᠰ", | ||
pres_3p = " | pres_3p = "ᠠᠨ", | ||
imperf_1s = " | imperf_1s = "ᠠᠨ", | ||
imperf_2s = " | imperf_2s = "ᠠᠰ", | ||
imperf_3s = " | imperf_3s = "ᠠᠲ", | ||
imperf_1p = " | imperf_1p = "ᠠᠨᠤᠰ", | ||
imperf_2p = " | imperf_2p = "ᠠᠵᠢᠰ", | ||
imperf_3p = " | imperf_3p = "ᠠᠨ", | ||
past_1s = " | past_1s = "ᠠᠢ", | ||
past_2s = " | past_2s = "ᠠᠢᠰᠲᠢ", | ||
past_3s = " | past_3s = "ᠠᠢᠲ", | ||
past_1p = " | past_1p = "ᠠᠢᠨᠤᠰ", | ||
past_2p = " | past_2p = "ᠠᠢᠰᠲᠢᠰ", | ||
past_3p = " | past_3p = "ᠡᠷᠤᠨ", | ||
fut_1s = " | fut_1s = "ᠠᠷᠢᠣ", | ||
fut_2s = " | fut_2s = "ᠠᠷᠡᠰ", | ||
fut_3s = " | fut_3s = "ᠠᠷᠡᠲ", | ||
fut_1p = " | fut_1p = "ᠠᠷᠡᠨᠤᠰ", | ||
fut_2p = " | fut_2p = "ᠠᠷᠡᠵᠢᠰ", | ||
fut_3p = " | fut_3p = "ᠠᠷᠡᠨ" | ||
}, | }, | ||
| Line 42: | Line 42: | ||
pres_3s = "ᠡᠲ", | pres_3s = "ᠡᠲ", | ||
pres_1p = "ᠡᠨᠤᠰ", | pres_1p = "ᠡᠨᠤᠰ", | ||
pres_2p = " | pres_2p = "ᠡᠵᠢᠰ", | ||
pres_3p = "ᠡᠨ", | pres_3p = "ᠡᠨ", | ||
imperf_1s = " | imperf_1s = "ᠠᠨ", | ||
imperf_2s = " | imperf_2s = "ᠠᠰ", | ||
imperf_3s = " | imperf_3s = "ᠠᠲ", | ||
imperf_1p = " | imperf_1p = "ᠠᠨᠤᠰ", | ||
imperf_2p = " | imperf_2p = "ᠠᠵᠢᠰ", | ||
imperf_3p = " | imperf_3p = "ᠠᠨ", | ||
past_1s = "ᠢ", | past_1s = "ᠢ", | ||
| Line 63: | Line 63: | ||
fut_3s = "ᠡᠷᠡᠲ", | fut_3s = "ᠡᠷᠡᠲ", | ||
fut_1p = "ᠡᠷᠡᠨᠤᠰ", | fut_1p = "ᠡᠷᠡᠨᠤᠰ", | ||
fut_2p = " | fut_2p = "ᠡᠷᠡᠵᠢᠰ", | ||
fut_3p = "ᠡᠷᠡᠨ" | fut_3p = "ᠡᠷᠡᠨ" | ||
}, | }, | ||
ire = { | ire = { | ||
pres_1s = " | pres_1s = "ᠣ", | ||
pres_2s = " | pres_2s = "ᠢᠰ", | ||
pres_3s = " | pres_3s = "ᠢᠲ", | ||
pres_1p = " | pres_1p = "ᠢᠨᠤᠰ", | ||
pres_2p = " | pres_2p = "ᠢᠵᠢᠰ", | ||
pres_3p = " | pres_3p = "ᠢᠤᠨ", | ||
imperf_1s = " | imperf_1s = "ᠢᠠᠨ", | ||
imperf_2s = " | imperf_2s = "ᠢᠠᠰ", | ||
imperf_3s = " | imperf_3s = "ᠢᠠᠲ", | ||
imperf_1p = " | imperf_1p = "ᠢᠠᠨᠤᠰ", | ||
imperf_2p = " | imperf_2p = "ᠢᠠᠵᠢᠰ", | ||
imperf_3p = " | imperf_3p = "ᠢᠠᠨ", | ||
past_1s = " | past_1s = "ᠢ", | ||
past_2s = " | past_2s = "ᠢᠰᠲᠢ", | ||
past_3s = " | past_3s = "ᠢᠲ", | ||
past_1p = " | past_1p = "ᠢᠨᠤᠰ", | ||
past_2p = " | past_2p = "ᠢᠰᠲᠢᠰ", | ||
past_3p = " | past_3p = "ᠢᠡᠷᠤᠨ", | ||
fut_1s = " | fut_1s = "ᠢᠷᠢᠣ", | ||
fut_2s = " | fut_2s = "ᠢᠷᠡᠰ", | ||
fut_3s = " | fut_3s = "ᠢᠷᠡᠲ", | ||
fut_1p = " | fut_1p = "ᠢᠷᠡᠨᠤᠰ", | ||
fut_2p = " | fut_2p = "ᠢᠷᠡᠵᠢᠰ", | ||
fut_3p = " | fut_3p = "ᠢᠷᠡᠨ" | ||
} | } | ||
} | } | ||
| Line 140: | Line 140: | ||
["ᠲ"] = "t", | ["ᠲ"] = "t", | ||
["ᠨ"] = "n", | ["ᠨ"] = "n", | ||
["ᠴ"] = "č" | ["ᠴ"] = "č", | ||
["ᠶ"] = "y", | |||
["ᠳ"] = "d" | |||
} | } | ||
| Line 157: | Line 159: | ||
local function make_cell(form) | local function make_cell(form) | ||
return "<div style='text-align:center;'>" | return "<div style='text-align:center;'>" | ||
.. "[[" .. form .. "]]" | .. "[[Contionary:" .. form .. "|" .. form .. "]]" | ||
.. "<br /><span style='color:#777777; font-size:90%;'>" | .. "<br /><span style='color:#777777; font-size:90%;'>" | ||
.. romanize(form) | .. romanize(form) | ||
.. "</span></div>" | .. "</span></div>" | ||
end | |||
local function combine(stem, ending) | |||
if mw.ustring.match(stem, "ᠶ$") and | |||
mw.ustring.match(ending, "^ᠢ") then | |||
ending = mw.ustring.gsub(ending, "^ᠢ", "ᠡ") | |||
end | |||
return stem .. ending | |||
end | end | ||
| Line 185: | Line 198: | ||
forms[slot] = args[slot] | forms[slot] = args[slot] | ||
else | else | ||
forms[slot] = stem | forms[slot] = combine(stem, ending) | ||
end | end | ||
end | end | ||
| Line 191: | Line 204: | ||
local text = | local text = | ||
'{| class="wikitable mw-collapsible mw-collapsed"\n' | '{| class="wikitable mw-collapsible mw-collapsed"\n' | ||
.. '|+ Conjugation of [[' .. title .. ']] (<span style="color:#777777;">' .. romanize(title) .. '</span>)\n' | .. '|+ Conjugation of [[Contionary:' .. title .. '|' .. title .. ']] (<span style="color:#777777;">' .. romanize(title) .. '</span>)\n' | ||
---------------------------------------------------------------- | ---------------------------------------------------------------- | ||
| Line 208: | Line 221: | ||
.. '|-\n' | .. '|-\n' | ||
.. '! rowspan=" | .. '! rowspan="4" | Indicative\n' | ||
.. '! Present\n' | .. '! Present\n' | ||
.. '| ' .. make_cell(forms.pres_1s) | .. '| ' .. make_cell(forms.pres_1s) | ||
Latest revision as of 17:16, 20 June 2026
- This module lacks a documentation subpage. Please create it.
- Useful links: subpage list • links • transclusions • testcases • sandbox
local p = {}
----------------------------------------------------------------
-- ENDINGS
----------------------------------------------------------------
local endings = {
are = {
pres_1s = "ᠣ",
pres_2s = "ᠠᠰ",
pres_3s = "ᠠᠲ",
pres_1p = "ᠠᠨᠤᠰ",
pres_2p = "ᠠᠵᠢᠰ",
pres_3p = "ᠠᠨ",
imperf_1s = "ᠠᠨ",
imperf_2s = "ᠠᠰ",
imperf_3s = "ᠠᠲ",
imperf_1p = "ᠠᠨᠤᠰ",
imperf_2p = "ᠠᠵᠢᠰ",
imperf_3p = "ᠠᠨ",
past_1s = "ᠠᠢ",
past_2s = "ᠠᠢᠰᠲᠢ",
past_3s = "ᠠᠢᠲ",
past_1p = "ᠠᠢᠨᠤᠰ",
past_2p = "ᠠᠢᠰᠲᠢᠰ",
past_3p = "ᠡᠷᠤᠨ",
fut_1s = "ᠠᠷᠢᠣ",
fut_2s = "ᠠᠷᠡᠰ",
fut_3s = "ᠠᠷᠡᠲ",
fut_1p = "ᠠᠷᠡᠨᠤᠰ",
fut_2p = "ᠠᠷᠡᠵᠢᠰ",
fut_3p = "ᠠᠷᠡᠨ"
},
ere = {
pres_1s = "ᠣ",
pres_2s = "ᠡᠰ",
pres_3s = "ᠡᠲ",
pres_1p = "ᠡᠨᠤᠰ",
pres_2p = "ᠡᠵᠢᠰ",
pres_3p = "ᠡᠨ",
imperf_1s = "ᠠᠨ",
imperf_2s = "ᠠᠰ",
imperf_3s = "ᠠᠲ",
imperf_1p = "ᠠᠨᠤᠰ",
imperf_2p = "ᠠᠵᠢᠰ",
imperf_3p = "ᠠᠨ",
past_1s = "ᠢ",
past_2s = "ᠢᠰᠲᠢ",
past_3s = "ᠢᠲ",
past_1p = "ᠢᠨᠤᠰ",
past_2p = "ᠢᠰᠲᠢᠰ",
past_3p = "ᠡᠷᠤᠨ",
fut_1s = "ᠡᠷᠢᠣ",
fut_2s = "ᠡᠷᠡᠰ",
fut_3s = "ᠡᠷᠡᠲ",
fut_1p = "ᠡᠷᠡᠨᠤᠰ",
fut_2p = "ᠡᠷᠡᠵᠢᠰ",
fut_3p = "ᠡᠷᠡᠨ"
},
ire = {
pres_1s = "ᠣ",
pres_2s = "ᠢᠰ",
pres_3s = "ᠢᠲ",
pres_1p = "ᠢᠨᠤᠰ",
pres_2p = "ᠢᠵᠢᠰ",
pres_3p = "ᠢᠤᠨ",
imperf_1s = "ᠢᠠᠨ",
imperf_2s = "ᠢᠠᠰ",
imperf_3s = "ᠢᠠᠲ",
imperf_1p = "ᠢᠠᠨᠤᠰ",
imperf_2p = "ᠢᠠᠵᠢᠰ",
imperf_3p = "ᠢᠠᠨ",
past_1s = "ᠢ",
past_2s = "ᠢᠰᠲᠢ",
past_3s = "ᠢᠲ",
past_1p = "ᠢᠨᠤᠰ",
past_2p = "ᠢᠰᠲᠢᠰ",
past_3p = "ᠢᠡᠷᠤᠨ",
fut_1s = "ᠢᠷᠢᠣ",
fut_2s = "ᠢᠷᠡᠰ",
fut_3s = "ᠢᠷᠡᠲ",
fut_1p = "ᠢᠷᠡᠨᠤᠰ",
fut_2p = "ᠢᠷᠡᠵᠢᠰ",
fut_3p = "ᠢᠷᠡᠨ"
}
}
----------------------------------------------------------------
-- CLASS DETECTION
----------------------------------------------------------------
local function detect_class(title)
if mw.ustring.match(title, "ᠠᠷᠡ$") then
return "are"
elseif mw.ustring.match(title, "ᠡᠷᠡ$") then
return "ere"
elseif mw.ustring.match(title, "ᠢᠷᠡ$") then
return "ire"
end
return nil
end
local function get_stem(title, class)
if class == "are" then
return mw.ustring.gsub(title, "ᠠᠷᠡ$", "")
elseif class == "ere" then
return mw.ustring.gsub(title, "ᠡᠷᠡ$", "")
elseif class == "ire" then
return mw.ustring.gsub(title, "ᠢᠷᠡ$", "")
end
return title
end
----------------------------------------------------------------
-- TRANSLITERATION
----------------------------------------------------------------
local translit = {
["ᠠ"] = "a",
["ᠡ"] = "e",
["ᠢ"] = "i",
["ᠣ"] = "o",
["ᠤ"] = "u",
["ᠷ"] = "r",
["ᠸ"] = "v",
["ᠵ"] = "z",
["ᠰ"] = "s",
["ᠲ"] = "t",
["ᠨ"] = "n",
["ᠴ"] = "č",
["ᠶ"] = "y",
["ᠳ"] = "d"
}
local function romanize(text)
local result = text
for bichig, latin in pairs(translit) do
result = mw.ustring.gsub(result, bichig, latin)
end
return result
end
----------------------------------------------------------------
-- DISPLAY HELPERS
----------------------------------------------------------------
local function make_cell(form)
return "<div style='text-align:center;'>"
.. "[[Contionary:" .. form .. "|" .. form .. "]]"
.. "<br /><span style='color:#777777; font-size:90%;'>"
.. romanize(form)
.. "</span></div>"
end
local function combine(stem, ending)
if mw.ustring.match(stem, "ᠶ$") and
mw.ustring.match(ending, "^ᠢ") then
ending = mw.ustring.gsub(ending, "^ᠢ", "ᠡ")
end
return stem .. ending
end
----------------------------------------------------------------
-- MAIN FUNCTION
----------------------------------------------------------------
function p.show(frame)
local args = frame:getParent().args
local title = mw.title.getCurrentTitle().text
local class = args.class or detect_class(title)
if not class then
return "Error: could not determine conjugation class."
end
local stem = get_stem(title, class)
local forms = {}
for slot, ending in pairs(endings[class]) do
if args[slot] and args[slot] ~= "" then
forms[slot] = args[slot]
else
forms[slot] = combine(stem, ending)
end
end
local text =
'{| class="wikitable mw-collapsible mw-collapsed"\n'
.. '|+ Conjugation of [[Contionary:' .. title .. '|' .. title .. ']] (<span style="color:#777777;">' .. romanize(title) .. '</span>)\n'
----------------------------------------------------------------
-- HEADER
----------------------------------------------------------------
.. '|-\n'
.. '! Mood !! Tense !! colspan="3" | Singular !! colspan="3" | Plural\n'
.. '|-\n'
.. '! !! !! 1st !! 2nd !! 3rd !! 1st !! 2nd !! 3rd\n'
----------------------------------------------------------------
-- PRESENT
----------------------------------------------------------------
.. '|-\n'
.. '! rowspan="4" | Indicative\n'
.. '! Present\n'
.. '| ' .. make_cell(forms.pres_1s)
.. ' || ' .. make_cell(forms.pres_2s)
.. ' || ' .. make_cell(forms.pres_3s)
.. ' || ' .. make_cell(forms.pres_1p)
.. ' || ' .. make_cell(forms.pres_2p)
.. ' || ' .. make_cell(forms.pres_3p)
.. '\n'
----------------------------------------------------------------
-- IMPERFECT
----------------------------------------------------------------
.. '|-\n'
.. '! Imperfect\n'
.. '| ' .. make_cell(forms.imperf_1s)
.. ' || ' .. make_cell(forms.imperf_2s)
.. ' || ' .. make_cell(forms.imperf_3s)
.. ' || ' .. make_cell(forms.imperf_1p)
.. ' || ' .. make_cell(forms.imperf_2p)
.. ' || ' .. make_cell(forms.imperf_3p)
.. '\n'
----------------------------------------------------------------
-- PAST
----------------------------------------------------------------
.. '|-\n'
.. '! Past\n'
.. '| ' .. make_cell(forms.past_1s)
.. ' || ' .. make_cell(forms.past_2s)
.. ' || ' .. make_cell(forms.past_3s)
.. ' || ' .. make_cell(forms.past_1p)
.. ' || ' .. make_cell(forms.past_2p)
.. ' || ' .. make_cell(forms.past_3p)
.. '\n'
----------------------------------------------------------------
-- FUTURE
----------------------------------------------------------------
.. '|-\n'
.. '! Future\n'
.. '| ' .. make_cell(forms.fut_1s)
.. ' || ' .. make_cell(forms.fut_2s)
.. ' || ' .. make_cell(forms.fut_3s)
.. ' || ' .. make_cell(forms.fut_1p)
.. ' || ' .. make_cell(forms.fut_2p)
.. ' || ' .. make_cell(forms.fut_3p)
.. '\n'
.. '|}'
return text
end
return p