Module:sla-conj
Appearance
- This module lacks a documentation subpage. Please create it.
- Useful links: subpage list • links • transclusions • testcases • sandbox
local export = {}
local util = require("Module:utilities")
local mSC = require("Module:sla-common")
local lang = require("Module:languages").getByCode("sla-pro")
local umatch = mw.ustring.match
local usub = mw.ustring.sub
local ugsub = mw.ustring.gsub
function export.show(frame)
local cats = {}
local params = {
[1] = {}, -- aspect
[2] = {}, -- root1-suff1
[3] = {}, -- root2-suff2
inf = {}, -- infinitive
cat = {}, -- category
s = {}, -- s-aorist
ap = {}, -- accent paradigm
t2 = {}, -- present PP
t3 = {}, -- past AP
t4 = {}, -- l
t5 = {}, -- past PP
noun= {}, -- verbal noun
a = {}, -- aorist
n = {}, -- togglable imperfect (~nil/nil)
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local langname = lang:getCanonicalName()
a_name = "[[w:Aorist#Slavic_languages|Aorist]]"
u_name = "Present"
n_name = "Imperfect"
i_name = "Imperative"
display0 = 1; -- togglable table display (Vnoun+inf+sup+Lpart)
if args["n"]==nil then
args["n"] = 1
elseif args["n"]=="0" then
args["n"] = nil
end
for k in pairs(args) do
if k~=1 and k~=2 and k~=3 and args[k] then
table.insert(cats, "sla-conj with extra parameters/"..k)
end
end
local notes = ""
local root1, suff1 = umatch(args[2], "(.*)-(.*)")
local root2, suff2 = root1, suff1
if args[3] then
root2, suff2 = umatch(args[3], "(.*)-(.*)")
if root2=="" then
root2 = root1
end
end
local stem0 = ( args["inf"] or mw.title.getCurrentTitle().subpageText or error("Parameter 'inf=' is missing") )
-- // infinitive, supine // --
local y1 = "*" .. stem0
local t6 = usub(y1, 1,-3) .. ( umatch(y1,"ť.$") and "ťь" or "tъ" ) -- ti/ťi > tъ/ťь
-- get root-suffix from stem0
stem0 = usub(stem0, 1,-3) -- drop ti
if suff2=="1" and umatch(stem0, "nǫ$") then -- |-|-1: gъbnǫti/gъbe/gъbnetь
root2,suff2 = umatch(stem0, "(.*)(n)ǫ")
if root1=="" then
root1 = root2
end
end
if umatch(suff1, "[0-2]$") then
if suff1=="2" then -- ovA/jA
if umatch(stem0,"[oe]va$") then
root1,suff1 = umatch(stem0, "(.*)([oe]va)$")
root2,suff2 = root1,"u"
elseif umatch(stem0,"va$") then
root1,suff1 = umatch(stem0, "(.*)(va)$")
elseif umatch(stem0,"[aěiьeoъyuǫę]ja$") then
root1,suff1 = umatch(stem0, "(.*)(ja)")
else
root1,suff1 = umatch(stem0, "(.*)(.)$")
root2,suff2 = root1,suff1
end
elseif suff1=="1" then -- A/Ě/I/
if umatch(stem0, "nǫ$") then
root1,suff1 = umatch(stem0, "(.*)(nǫ)$")
root2,suff2 = root1,"n"
else
root1,suff1 = umatch(stem0, "(.*)(.)$")
end
elseif suff1=="0" then -- O/X
root1,suff1 = stem0,""
end
if root2=="" then
root2 = ugsub(root1, "ę$", "ьn")
end
if suff2=="1" or suff2=="0" then -- if suff1==suff2
suff2 = suff1
end
end
if suff2~="i" and suff2~="a" and suff2~="u" then -- avoid pojiti, prijati
root2 = ugsub(root2, "([aěiьeoъyuǫę])j$", "%1") -- drop j (poj- > po-), 'j' will be added in 'stem2'
end
-- root2: change grade; (unhandled single cases: řuti zъvati pěti ?gъnati)
local cat0 = "" -- category
if root2=="h" then
cat0 = langname.." ablauting verbs"
root2 = root1
if suff1=="a" and umatch(root2, "[ьi]j") then
root2 = ugsub(root2, "[ьi]j$", "ě") -- smьjati\zijati-?
elseif umatch(root2, "[ьъ].?.?$") or umatch(root2, "ov") then
root2 = ugsub(root2, "ov$", "u") -- snovati-snuti
root2 = ugsub(root2, "ьv$", "u") -- žьvati-?řuti
root2 = ugsub(root2, "ь([lr].?)$", "e%1") -- ..., pьlzati-[čersti]
root2 = ugsub(root2, "ь(.)$", "i%1") -- zьdati-[kvisti]
else
root2 = ugsub(root2, "u$", "ov") -- ...
root2 = ugsub(root2, "u(.)$", "ъ%1") -- ?-suPti
root2 = ugsub(root2, "i$", "ь") -- kriti-?
root2 = ugsub(root2, "e([lr])$", "ь%1") -- dьrati-derti
root2 = ugsub(root2, "ę$", "ьm") -- ęti\pęti
end
if root2==root1 then error("could not change root grade, write root2") end
end
if root1 ~= root2 then
table.insert(cats, "sla-conj with extra parameters/2root")
end
-- stem ending in: vowel (not nil), consonant (nil)
local stem1V = umatch(root1..suff1,"[aěiьeoъyuǫę]$")
local stem2V = umatch(root2..suff2,"[aěiьeoъyuǫę]$")
root1,root2 = "*"..root1, "*"..root2
local pcat = args["cat"]
local cat
local tcat = {
["oo"] = "V", -- obu-|=
["ao"] = "a/V", -- trov-a|tru-
["jao"] = "ja/V", -- ta-ja|ta-
["vao"] = "va/V", -- da-va|da-
["nǫn"] = "n", -- dьrz-nǫ|-n
["on"] = "V/n", -- sta-|-n
["xn"] = "C/n", -- mъk-|-n
["xj"] = "C/j", -- por-|-j
["ox"] = "V/C", -- pę-|pьn-, tru-|trov-
["xx"] = "C", -- der-|dьr-, pad-|=
["ax"] = "a/C", -- dьr-a|der-
["aj"] = "a/j", -- syp-a|-j
["ii"] = "i", -- trav-i|=
["ěi"] = "ě/i", -- vьrt-ě|-i
["ai"] = "a/i", -- slyx-ě|-i, sъp-a|-i
["aa"] = "a", -- obuv-a|=, pad-a|=
["ěě"] = "ě", -- gov-ě|=
["ěx"] = "ě/C", -- (věd-ě|-)
ovau = "ova/u", -- cěl-ova|-u
evau = "ova/u" -- boj-eva|-u
}
cat = (suff1~="" and suff1 or stem1V and "o" or "x") .. (suff2~="" and suff2 or stem2V and "o" or "x")
cat = (tcat[cat] or "unknown")
if cat=="a" and args[2]=="-2" then
cat = "ja"
elseif suff1=="a" and suff2=="a" and umatch(root1, "[žčš]$") then
cat = "ě"
elseif suff1=="a" and suff2=="i" and umatch(root1,"[jžčš]$") then
cat = "ě/i"
end
if pcat and pcat~="irreg" and pcat~="athem" then
cat = pcat
pcat = nil
end
local info_cat = ""
if cat=="i" then
info_cat = "Suffix: [[Reconstruction:Proto-Slavic/-iti|*-iti]]<br>― iterative (*nositi⇐*nesti)<br>― causative (*pojiti⇐*piti)<br>― ..."
elseif cat=="ě/i" or cat=="ě" then
info_cat = "Suffix: [[Reconstruction:Proto-Slavic/-ěti|*-ěti]]"
elseif cat=="ja" then
info_cat = "Suffix: [[Reconstruction:Proto-Slavic/-iti|*-iti]] + [[Reconstruction:Proto-Slavic/-ati|*-ati]]<br>― iterative (e.g. *xaďati⇐*xoditi)<br>― imperfective (e.g. *otъvěťati⇐*otъvětiti)"
elseif umatch(cat,"^a") then -- a, a/V, a/C, a/j, a/i
info_cat = "Suffix: [[Reconstruction:Proto-Slavic/-ati|*-ati]]"
end
------------------------------------------------------------------------------
--- CONJUGATION (present-imperative, t1 t2 t3 t4 t5 y2, aorist, imperfect) --- t6 y1 see above
------------------------------------------------------------------------------
local root1e = mSC.first_palatalization(root1)
local root2e = mSC.first_palatalization(root2)
local root1j = mSC.iotate(root1)
local root2j = mSC.iotate(root2)
-- // present, imperative, participle //
local stem2 = root2..suff2 -- X, N (default)
if suff2=="j" then -- J
stem2 = root2j
elseif stem2V and suff2~="i" then -- O/A/Ě/U
stem2 = stem2 .. "j"
end
local u1, u2, u3 -- (pekǫ-ziďǫ-broďǫ), (pečetъ-ziďetъ-broditъ), (pekǫtъ-ziďǫtъ-brodętъ)
local i1, i2 -- (tьri-borji), (tьrěta-borjite); i1=i1, i2=i1+i2
local t1, t2 -- (present active), (present passive)
if suff2=="i" then
u1 = root2j
u2 = root2e.."i"
u3 = root2e.."ę"
i1 = root2e..""
i2 = "i"
t1 = root2e.."ę"
t2 = root2e.."i"
else
u1 = stem2..""
u2 = mSC.first_palatalization(stem2).."e"
u3 = stem2.."ǫ"
i1 = mSC.second_palatalization(stem2)..""
if suff2~="j" and stem2V==nil then
i2 = "ě"
t1 = stem2.."y"
t2 = stem2.."o"
else
i2 = "i"
t1 = stem2.."ę"
t2 = stem2.."e"
end
if umatch(stem2, "[e][zs]?[gkx]$") then -- ..., reduce vowel before palatal consonant
i1 = ugsub(i1, "(.*)e", "%1ь")
end
end
t2 = (args["t2"] or t2.."mъ")
-- // participle, verbal noun //
-- l-participle
local t4 = ( args["t4"] or umatch(root1,"[lr]$") and suff1=="" and root2..suff1.."lъ" or root1..suff1.."lъ")
-- past passive participle, verbal noun
local t5
if args["t5"] then
t5 = args["t5"]
elseif suff1=="nǫ" then -- N
t5 = root1.."novenъ"
elseif suff1=="i" then -- I
t5 = root1j .. "enъ"
elseif stem1V then -- O/A/Ě/ovA
t5 = root1 .. (suff1=="" and "tъ" or suff1.."nъ")
elseif umatch(root1, "[lr]$") then
t5 = root2.."tъ"
notes = notes .. "<li>" .. "(*)"..root2..suff2.."enъ" .. " is doublet of past passive participle" .. "</li>"
else
t5 = mSC.first_palatalization(root1) .. "enъ"
end
local y2 = (args["noun"] or t5~="—" and umatch(t5,"(.*).$").."ьje" or "—")
-- past active participle
local t3
if args["t3"] then
t3 = args["t3"]
elseif suff1=="i" then
t3 = root1j.."ь"
notes = notes .. "<li>" .. "(*)".. root1..suff1.."vъ" .. " is a later doublet of the past active participle" .. "</li>"
elseif suff1=="" and umatch(root1, "[rlǫę]$") then
t3 = ugsub(root2, "([oe][rl])$", "%1v") .. "ъ" -- no Xv>>X_ (if not [oe][rl])
else -- ..., X/J
t3 = root1..suff1 .. (stem1V and "v" or "") .. "ъ"
end
-- // aorist //
local aorist_name = "s-aorist" -- (default)
local a0 = (args["a"] or root1) .. suff1 -- ..., O/...
local a1, a2, a3, a4 -- ved(ox)ъ, vede, ved(e/os)te, vedǫ/vedošę
if suff1=="nǫ" or umatch(a0,"[raěiьeoъyu]$") then -- N, X=r, O/ovA/A/Ě/I
a1 = a0.."x"
a2 = a0
a3 = a0.."s"
a4 = a0.."š".."ę"
elseif umatch(a0,"[lǫę]$") then -- X=l, O(ǫę)
a1 = a0.."s"
a2 = a0
a3 = a0.."s"
a4 = a0.."s".."ę"
elseif args["s"] then -- X (s-aorist)
local s = ( umatch(a0,"[^gk]$") and "s" or nil )
a2 = mSC.first_palatalization(a0).."e" -- from _-aorist
a0 = usub(a0, 1,-2) -- drop last consonant
a0 = ugsub(a0, "[e]$", "ě")
a0 = ugsub(a0, "[o]$", "a")
a0 = ugsub(a0, "[ь]$", "i")
a0 = ugsub(a0, "([jďťžčš])[ě]$", "%1a")
a1 = a0 .. (s or "x")
a3 = a0 .. "s"
a4 = a0 .. (s or "š") .. "ę"
else -- X (_-aorist, ox-aorist)
a1 = a0.."(ox)"
a2 = mSC.first_palatalization(a0).."e"
a3 = a0.."(e/os)"
a4 = a0.."ǫ" .. ", " ..a0.."o".."š".."ę"
if umatch(a0,"[gkx]$") then
notes = notes .. "<li>" .. "Aorist [[w:Slavic_first_palatalization|".. ugsub(a0.."este", "([zs]?[gkx])", "<u>%1</u>") .." ⇒ ".. ugsub(a2.."ste", "[žčš]?[d]?[žčš]", "<u>%1</u>") .."]], ..." .. "</li>"
end
aorist_name = "_/ox-aorist"
end
if args["s"]=="t" or args["s"]=="st" then -- St-aorist: V, C[ęr] C(ěsti)
a2 = a2 .. "("..args["s"].."ъ)"
aorist_name = args["s"] .. "-aorist"
end
-- // imperfect //
local n1 = root2e .. (root2==root2e and "ě" or "a") -- ...
if suff2=="n" then -- N
n1 = root2..suff2 .. "ě"
elseif suff1=="i" or (suff2=="j" and stem1V==nil) then -- I (root1/root2?), J (root1/root2?)
n1 = root2j .. "a"
elseif suff1~="" or stem2V then -- ...
n1 = (suff1~="" and root1 or root2) .. suff1.."j".."a"
n1 = ugsub(n1, "([aě])ja", "%1")
end
-- // irregular //
local u21
if pcat=="irreg" then
if root1=="*b" and suff1=="ě" then
root2 = "*es"
pcat = "athem"
elseif suff2=="i" and suff1=="ě" and umatch(root1, "x[oъ]t$") then
u21 = ugsub(u2, "(x[oъ])ti$", "%1ť") .. "(eš)i"
u2 = ugsub(u2, "(x[oъ])ti$", "%1ťe")
i1 = ugsub(i1, "(x[oъ])t$", "%1ť")
pcat = "[[:Category:" .. langname.." irregular verbs|irregular]]"
table.insert(cats, langname.." irregular verbs")
--? 3rd dual imper (xoťite)
elseif umatch(root2, "[jn][ьi]d$") then
t4 = ugsub(t4, "[jn][ьi]dlъ$", "šьdlъ")
y2 = ugsub(y2, "[jn][ьi]denьje$", "šьstьje")
t5 = ugsub(t5, "[jn][ьi]denъ$", "šьstъ")
t3 = ugsub(t3, "[jn][ьi]dъ$", "šьdъ")
pcat = "[[:Category:" .. langname.." suppletive verbs|suppletive]]"
table.insert(cats, langname.." suppletive verbs")
end
end
-- endings of: imperative, present, aorist, imperfect
local i = { "—", i1.. "i", i1.. "i", i1..i2.."vě", i1..i2.."ta", "—", i1..i2.."mъ", i1..i2.."te", "—"}
local u = {u1.. "ǫ", u2.. "ši", u2.. "tь", u2.. "vě", u2.. "ta", u2.. "te", u2.. "mъ", u2.. "te", u3.. "tь"}
local a = {a1.. "ъ", a2.. "", a2.. "", a1.. "ově", a3.. "ta", a3.. "te", a1.. "omъ", a3.. "te", a4.. ""}
local n = {n1.."axъ", n1.."aše", n1.."aše", n1.. "axově", n1.. "ašeta", n1.."ašete", n1.. "axomъ", n1.. "ašete", n1.."axǫ"}
if pcat=="athem" then -- jьm-ě, es/věd/dad/ěd
if umatch(root2, "[ьi]m$") then
u1 = root2.."a"
u3 = root2.."ǫ"
u = {u1.."mь", u1.."ši", u1.."tь", u1.."vě", u1.."ta", u1.."te", u1.."mъ", u1.."te", u3.."tь"}
t1 = ugsub(t1, "ěję$", "y")
t2,t5 = "—","—" -- hide passive participles
pcat = "[[:Category:" .. langname.." athematic verbs|athematic]]"
table.insert(cats, langname.." athematic verbs")
else
local u4, i3
u1 = ugsub(root2, "[dt]$", "") -- [d](mv) > (mv): daD.ěD.věD (-mь/-vě/-mъ)
u4 = ugsub(root2, ".$", "") -- [d](s) > (s): eS/daD.ěD.věD (-si)
u2 = ugsub(root2, "[dt]$", "s") -- [d](t) > [s](t): daD.ěD.věD (-tь/-ta/-te)
u3 = root2.."ę"
i3 = root2j
i2 = "i"
u = {u1.."mь", u4.."si", u2.."tь", u1.."vě", u2.."ta", u2.."te", u1.."mъ", u2.."te", u3.."tь"}
if root2 ~= "*es" then
i = {"—", i3.."ь", i3.."ь", i1..i2.."vě", i1..i2.."ta", "—", i1..i2.."mъ", i1..i2.."te", "—"}
end
if umatch(root1, "da$") then
t2 = "—" -- hide, some sources present it without reference
pcat = "[[:Category:" .. langname.." athematic verbs|athematic]]" .. " " .. "[[:Category:" .. langname.." reduplicated verbs|reduplicated]]"
table.insert(cats, langname.." athematic verbs")
table.insert(cats, langname.." reduplicated verbs")
end
if suff1=="" and umatch(root1, "d$") then -- ěd
a[2] = ugsub(a[2], "(.*)de", "%1") -- aorist is without -e (*ě instead of *ěde)
a[3] = a[2]
pcat = "[[:Category:" .. langname.." athematic verbs|athematic]]"
table.insert(cats, langname.." athematic verbs")
end
if suff1=="ě" and umatch(root1, "d$") then -- věd
u[1] = ugsub(u[1], "mь$", "") .. "(mь/dě)"
pcat = "[[:Category:" .. langname.." athematic verbs|athematic]]"
table.insert(cats, langname.." athematic verbs")
end
if root2=="*es" then -- *něs: u[9]="*nesǫtь", t1="*nesy"
display0 = nil;
t3,t1 = "—","*sy"
u[9] = ugsub(u[9], "esę", "sę")
u[9] = ugsub(u[9], "ę", "ǫ") .. "/" .. u[9]
i[1] = "*bimь"
i[6] = "*bite"
i[9] = "*bǫ"
pcat = "[[:Category:" .. langname.." athematic verbs|athematic]]".. " " .."[[:Category:" .. langname.." suppletive verbs|suppletive]]"
table.insert(cats, langname.." suppletive verbs")
table.insert(cats, langname.." athematic verbs")
i_name = "Conditional"
end
end
end
if u21 then
u[2] = u21
end
------------------------------------------------------------------------------
--- end of CONJUGATION ---
------------------------------------------------------------------------------
if args[1]==nil then args[1] = "" end
local aspect, trans = umatch(args[1], "(.*)-(.*)")
if aspect==nil then -- if there is no #2 parameter
aspect = umatch(args[1], "(.*)")
end
if aspect==nil or aspect=="" then
aspect = "?"
elseif aspect=="0" or aspect=="impf" then
aspect = '<abbr title="imperfective aspect">impf.</abbr>'
elseif aspect=="2" or aspect=="bi" then
aspect = '<abbr title="imperfective/perfective aspect">impf./pf.</abbr>'
elseif aspect=="1" or aspect=="pf" then
aspect = '<abbr title="perfective aspect">perf.</abbr>'
notes = notes .. "<li>" .. "In perfective verbs, present expresses future" .. "</li>"
t2,t1 = "—","—" -- hide present participles
if args["n"]~=nil then
args["n"] = nil -- hide imperfect
end
end
if args["n"]==nil then
n = {"—","—","—", "—","—","—", "—","—","—"} -- hide imperfect
end
if trans==nil then
-- nothing
elseif trans=="0" or trans=="intr" then
trans = '<abbr title="intransitive">intr.</abbr>'
t2,t5 = "—","—" -- hide passive participles
elseif trans=="2" or trans=="ditr" then
trans = '<abbr title="ditransitive">bitr.</abbr>'
elseif trans=="1" or trans=="tr" then
trans = '<abbr title="transitive">tr.</abbr>'
end
local ap,q = "", ""
if args["ap"]==nil then
ap = "?"
else
ap = umatch(args["ap"], "^.")
q = umatch(args["ap"], ".(.)")
if q==nil then
q = ""
elseif q=="~" then
q = " (possibly)"
else
q = "?"
end
end
local desc = "[[Template:sla-conj|Conjugation]] of ''"..(display0 and y1..', ' or '') ..a[3]..", "..u[3].."'' ("
desc = desc .. aspect .. (trans and ", "..trans or "")
desc = desc .. ", ".. (pcat and pcat.." " or "") .. "[[:Category:" .. langname.." verbs ending in -"..cat.."-|-"..cat.."-]]"
desc = desc .. ", " .. aorist_name
desc = desc .. ", accent paradigm " .. ap..q
desc = desc .. ")"
table.insert(cats, langname.." verbs ending in -"..cat.."-")
if ap~="?" then
table.insert(cats, langname.." verbs with accent paradigm "..ap)
end
if cat0~="" then
table.insert(cats, cat0)
end
cat = util.format_categories(cats, lang)
-- table info
local bg1 = "background: rgba(0, 128, 255, 0.16);"
local bg2 = "background: rgba(0, 128, 255, 0.08);"
if notes~="" then
notes = "<ul>Notes: " .. notes .. "</ul>"
end
if display0==nil then
display0 = "display: none;"
end
return [=[
<div class="NavFrame" style="min-width:fit-content;max-width:800px;">
<div class="NavHead" style="]=]..bg1..[=[" >]=].. desc ..[=[</div>
<div class="NavContent">
{| class="inflection-table" style="text-align: left; border-color: white;]=]..display0..[=["
|-
! style="]=]..bg1..[=[ width: 110px;" | Verbal noun
! style="]=]..bg1..[=[ width: 110px;" | Infinitive
! style="]=]..bg1..[=[ width: 110px;" | Supine
! style="]=]..bg1..[=[ width: 110px;" | L-participle
|-
| ]=]..y2..[=[
| ]=]..y1..[=[
| ]=]..t6..[=[
| ]=]..t4..[=[
|}
{| class="inflection-table" style="text-align: left; border-color: white;"
|-
! style="]=]..bg1..[=[" |
! colspan="2" style="]=]..bg1..[=[; text-align: center;" | Participles
|-
! style="]=]..bg2..[=[; width: 110px;" | Tense
! style="]=]..bg2..[=[; width: 110px;" | Past
! style="]=]..bg2..[=[; width: 110px;" | Present
|-
! style="]=]..bg2..[=[" | Passive
| ]=]..t5..[=[
| ]=]..t2..[=[
|-
! style="]=]..bg2..[=[" | Active
| ]=]..t3..[=[
| ]=]..t1..[=[
|}
{| class="inflection-table" style="text-align: left; border-color: white;"
|- style="text-align: center; ]=]..bg1..[=["
!
! colspan="3" | ]=]..a_name..[=[
! colspan="3" | ]=]..u_name..[=[
|- style="text-align: center; ]=]..bg2..[=["
! style="text-align: left; width: 110px;" | Person
! style="width: 110px;" | 1st
! style="width: 110px;" | 2nd
! style="width: 110px;" | 3rd
! style="width: 110px;" | 1st
! style="width: 110px;" | 2nd
! style="width: 110px;" | 3rd
|-
! style="]=]..bg2..[=[" | Singular
| ]=]..a[1]..[=[ || ]=]..a[2]..[=[ || ]=]..a[3]..[=[
| ]=]..u[1]..[=[ || ]=]..u[2]..[=[ || ]=]..u[3]..[=[
|-
! style="]=]..bg2..[=[" | Dual
| ]=]..a[4]..[=[ || ]=]..a[5]..[=[ || ]=]..a[6]..[=[
| ]=]..u[4]..[=[ || ]=]..u[5]..[=[ || ]=]..u[6]..[=[
|-
! style="]=]..bg2..[=[" | Plural
| ]=]..a[7]..[=[ || ]=]..a[8]..[=[ || ]=]..a[9]..[=[
| ]=]..u[7]..[=[ || ]=]..u[8]..[=[ || ]=]..u[9]..[=[
|- style="text-align: center; ]=]..bg1..[=["
!
! colspan="3" | ]=]..n_name..[=[
! colspan="3" | ]=]..i_name..[=[
|- style="text-align: center; ]=]..bg2..[=["
! style="text-align: left; width: 110px;" | Person
! 1st !! 2nd !! 3rd
! 1st !! 2nd !! 3rd
|-
! style="]=]..bg2..[=[" | Singular
| ]=]..n[1]..[=[ || ]=]..n[2]..[=[ || ]=]..n[3]..[=[
| ]=]..i[1]..[=[ || ]=]..i[2]..[=[ || ]=]..i[3]..[=[
|-
! style="]=]..bg2..[=[" | Dual
| ]=]..n[4]..[=[ || ]=]..n[5]..[=[ || ]=]..n[6]..[=[
| ]=]..i[4]..[=[ || ]=]..i[5]..[=[ || ]=]..i[6]..[=[
|-
! style="]=]..bg2..[=[" | Plural
| ]=]..n[7]..[=[ || ]=]..n[8]..[=[ || ]=]..n[9]..[=[
| ]=]..i[7]..[=[ || ]=]..i[8]..[=[ || ]=]..i[9]..[=[
|}
<div style="float: left; text-align: left;">]=]..notes..[=[</div>
</div>
</div>]=]..cat
end
return export