Module:tln-conj: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
mNo edit summary |
||
| Line 58: | Line 58: | ||
return title | return title | ||
end | |||
local translit = { | |||
["ᠠ"] = "a", | |||
["ᠡ"] = "e", | |||
["ᠢ"] = "i", | |||
["ᠣ"] = "o", | |||
["ᠤ"] = "u", | |||
["ᠷ"] = "r", | |||
["ᠸ"] = "v", | |||
["ᠵ"] = "z", | |||
["ᠰ"] = "s", | |||
["ᠲ"] = "t", | |||
["ᠨ"] = "n", | |||
["ᠺ"] = "c", | |||
["ᠴ"] = "č" | |||
} | |||
local function romanize(text) | |||
local result = "" | |||
for _, cp in utf8.codes(text) do | |||
local ch = utf8.char(cp) | |||
result = result .. (translit[ch] or ch) | |||
end | |||
return result | |||
end | end | ||
| Line 91: | Line 119: | ||
local text = | local text = | ||
"'''Conjugation of [[" | |||
.. title | |||
.. "]]''' (''" | |||
.. romanize(title) | |||
.. "'')\n\n" | |||
.. '{| class="wikitable"\n' .. | |||
'|+ Present indicative\n' .. | '|+ Present indicative\n' .. | ||
'|-\n' .. | '|-\n' .. | ||
Revision as of 03:46, 20 June 2026
- This module lacks a documentation subpage. Please create it.
- Useful links: subpage list • links • transclusions • testcases • sandbox
local p = {}
local endings = {
are = {
pres_1s = "§1S_ARE§",
pres_2s = "§2S_ARE§",
pres_3s = "§3S_ARE§",
pres_1p = "§1P_ARE§",
pres_2p = "§2P_ARE§",
pres_3p = "§3P_ARE§"
},
ere = {
pres_1s = "ᠣ",
pres_2s = "ᠡᠰ",
pres_3s = "ᠡᠲ",
pres_1p = "ᠡᠨᠤᠰ",
pres_2p = "ᠡᠴᠢᠰ",
pres_3p = "ᠡᠨ"
},
ire = {
pres_1s = "§1S_IRE§",
pres_2s = "§2S_IRE§",
pres_3s = "§3S_IRE§",
pres_1p = "§1P_IRE§",
pres_2p = "§2P_IRE§",
pres_3p = "§3P_IRE§"
}
}
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
local translit = {
["ᠠ"] = "a",
["ᠡ"] = "e",
["ᠢ"] = "i",
["ᠣ"] = "o",
["ᠤ"] = "u",
["ᠷ"] = "r",
["ᠸ"] = "v",
["ᠵ"] = "z",
["ᠰ"] = "s",
["ᠲ"] = "t",
["ᠨ"] = "n",
["ᠺ"] = "c",
["ᠴ"] = "č"
}
local function romanize(text)
local result = ""
for _, cp in utf8.codes(text) do
local ch = utf8.char(cp)
result = result .. (translit[ch] or ch)
end
return result
end
local function make_link(form)
return "[[" .. form .. "]]"
end
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] = stem .. ending
end
end
local text =
"'''Conjugation of [["
.. title
.. "]]''' (''"
.. romanize(title)
.. "'')\n\n"
.. '{| class="wikitable"\n' ..
'|+ Present indicative\n' ..
'|-\n' ..
'! !! Singular !! Plural\n' ..
'|-\n' ..
'! First person\n' ..
'| ' .. make_link(forms.pres_1s) ..
' || ' .. make_link(forms.pres_1p) .. '\n' ..
'|-\n' ..
'! Second person\n' ..
'| ' .. make_link(forms.pres_2s) ..
' || ' .. make_link(forms.pres_2p) .. '\n' ..
'|-\n' ..
'! Third person\n' ..
'| ' .. make_link(forms.pres_3s) ..
' || ' .. make_link(forms.pres_3p) .. '\n' ..
'|}'
return text
end
return p