local lang = require("Module:languages").getByCode("gmw-pro")
local export = {}
local function degeminate(stem)
stem = mw.ustring.gsub(stem, "uw$", "w")
stem = mw.ustring.gsub(stem, "([bdfghklmnpstþ])%1$", "%1")
return stem
end
-- Inflection functions
function export.st(frame)
local params = {
[1] = {default = mw.title.getCurrentTitle().nsText == "Template" and "geban" or mw.title.getCurrentTitle().subpageText},
["class"] = {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {
forms = {},
info = nil,
categories = {},
past_p = true,
past_ptcp = true,
}
local pres_stem, suffix = mw.ustring.match(args[1], "^(.-)(an)$")
if suffix ~= "an" then
error("Strong verbs must end in -an")
end
local rest, nucleus, coda = mw.ustring.match(pres_stem, "^(.-)([aeiouāēīōū]+)([bdfghjklmnprʀstþw]*)$")
local coda_voiced = coda
coda_voiced = mw.ustring.gsub((mw.ustring.gsub(coda_voiced, "^f$", "b")), "([jlmnrw])f$", "%1b")
coda_voiced = mw.ustring.gsub((mw.ustring.gsub(coda_voiced, "^h$", "g")), "([jlmnrw])h$", "%1g")
coda_voiced = mw.ustring.gsub((mw.ustring.gsub(coda_voiced, "^hw$", "gw")), "([jlmnrw])hw$", "%1gw")
coda_voiced = mw.ustring.gsub((mw.ustring.gsub(coda_voiced, "^s$", "ʀ")), "([jlmnrw])s$", "%1ʀ")
coda_voiced = mw.ustring.gsub((mw.ustring.gsub(coda_voiced, "^þ$", "d")), "([jlmnrw])þ$", "%1d")
if not args["class"] then
if nucleus == "ī" then
args["class"] = "1"
elseif nucleus == "eu" or nucleus == "ū" then
args["class"] = "2"
elseif nucleus == "i" or nucleus == "e" and mw.ustring.find(coda, "^[bdfghjklmnprʀstþw][bdfghjklmnprʀstþw]") and not mw.ustring.find(coda, "^[ghk]w$") then
args["class"] = "3"
elseif nucleus == "e" and mw.ustring.find(coda, "^[lmnr]$") then
args["class"] = "4"
elseif nucleus == "e" and (mw.ustring.find(coda, "^[bdfghkpstþ]$") or mw.ustring.find(coda, "^[ghk]w$")) then
args["class"] = "5"
elseif nucleus == "a" and mw.ustring.find(coda, "^[bdfghkpʀstþ]?[bdfghjklmnprʀstþw]$") then
args["class"] = "6"
elseif nucleus == "ai" then
args["class"] = "7a"
elseif nucleus == "au" then
args["class"] = "7b"
elseif nucleus == "a" and mw.ustring.find(coda, "^[lmnr][bdfghjklmnprʀstþw]") then
args["class"] = "7c"
elseif nucleus == "ā" then
args["class"] = "7d"
elseif nucleus == "ō" then
args["class"] = "7e"
else
error("Could not determine strong verb class")
end
end
data.info = "強變化" .. args["class"] .. "類"
table.insert(data.categories, lang:getCanonicalName() .. args["class"] .. "類強變化動詞")
local pres_stem_i
local past_s_stem
local past_p_stem
local past_ptcp_stem
if args["class"] == "1" then
past_s_stem = rest .. "ai" .. coda
past_p_stem = rest .. "i" .. coda_voiced
data.forms["past|ptcp"] = {rest .. "i" .. coda_voiced .. "an"}
elseif args["class"] == "2" then
pres_stem_i = rest .. mw.ustring.gsub(nucleus, "e", "i") .. coda
past_s_stem = rest .. "au" .. coda
past_p_stem = rest .. "u" .. coda_voiced
data.forms["past|ptcp"] = {rest .. "o" .. coda_voiced .. "an"}
elseif args["class"] == "3" then
pres_stem_i = rest .. mw.ustring.gsub(nucleus, "e", "i") .. coda
past_s_stem = rest .. "a" .. coda
past_p_stem = rest .. "u" .. coda_voiced
data.forms["past|ptcp"] = {rest .. (nucleus == "i" and "u" or "o") .. coda_voiced .. "an"}
elseif args["class"] == "4" then
pres_stem_i = rest .. mw.ustring.gsub(nucleus, "e", "i") .. coda
past_s_stem = rest .. "a" .. coda
past_p_stem = rest .. "ā" .. coda_voiced
if mw.ustring.find(coda, "[mn]$") then
data.forms["past|ptcp"] = {rest .. "u" .. coda_voiced .. "an", rest .. "o" .. coda_voiced .. "an"}
else
data.forms["past|ptcp"] = {rest .. "o" .. coda_voiced .. "an"}
end
elseif args["class"] == "5" then
pres_stem_i = rest .. mw.ustring.gsub(nucleus, "e", "i") .. coda
past_s_stem = rest .. "a" .. coda
past_p_stem = rest .. "ā" .. coda_voiced
data.forms["past|ptcp"] = {rest .. nucleus .. coda_voiced .. "an"}
elseif args["class"] == "6" then
past_s_stem = rest .. "ō" .. coda
past_p_stem = rest .. "ō" .. coda_voiced
data.forms["past|ptcp"] = {rest .. nucleus .. coda_voiced .. "an"}
elseif args["class"] == "7a" then
past_s_stem = rest .. "ē" .. coda
past_p_stem = rest .. "ē" .. coda_voiced
data.forms["past|ptcp"] = {rest .. nucleus .. coda_voiced .. "an"}
elseif args["class"] == "7b" then
past_s_stem = rest .. "eō" .. coda
past_p_stem = rest .. "eō" .. coda_voiced
data.forms["past|ptcp"] = {rest .. nucleus .. coda_voiced .. "an"}
elseif args["class"] == "7c" then
past_s_stem = rest .. "ea" .. coda
past_p_stem = rest .. "ea" .. coda_voiced
data.forms["past|ptcp"] = {rest .. nucleus .. coda_voiced .. "an"}
elseif args["class"] == "7d" then
past_s_stem = rest .. "ē" .. coda
past_p_stem = rest .. "ē" .. coda_voiced
data.forms["past|ptcp"] = {rest .. nucleus .. coda_voiced .. "an"}
elseif args["class"] == "7e" then
past_s_stem = rest .. "eō" .. coda
past_p_stem = rest .. "eō" .. coda_voiced
data.forms["past|ptcp"] = {rest .. nucleus .. coda_voiced .. "an"}
end
pres_stem_i = pres_stem_i or pres_stem
local pres_stem_u = mw.ustring.gsub(pres_stem, "([ghk])w$", "%1")
local past_p_stem_u = mw.ustring.gsub(past_p_stem, "([ghk])w$", "%1")
past_p_stem_u = mw.ustring.gsub(past_p_stem_u, "([ghk])w([ou])", "%1%2")
past_p_stem = mw.ustring.gsub(past_p_stem, "([ghk])w([ou])", "%1%2")
past_p_stem = mw.ustring.gsub(past_p_stem, "([ou]n?[kg])w", "%1")
past_p_stem = mw.ustring.gsub(past_p_stem, "([^n])gw", "%1w")
for i, stem in ipairs(data.forms["past|ptcp"]) do
stem = mw.ustring.gsub(stem, "([ghk])w([ou])", "%1%2")
stem = mw.ustring.gsub(stem, "([ou]n?[kg])w", "%1")
stem = mw.ustring.gsub(stem, "([^n])gw", "%1w")
data.forms["past|ptcp"][i] = stem
end
data.forms["inf"] = {pres_stem .. "an"}
data.forms["gen|inf"] = {pres_stem .. "annjas"}
data.forms["dat|inf"] = {pres_stem .. "annjē"}
data.forms["ins|inf"] = {pres_stem .. "annju"}
data.forms["pres|ptcp"] = {pres_stem .. "andī"}
data.forms["1|s|pres|indc"] = {pres_stem_u .. "u"}
data.forms["2|s|pres|indc"] = {pres_stem_i .. "iʀi"}
data.forms["3|s|pres|indc"] = {pres_stem_i .. "idi"}
data.forms["1|p|pres|indc"] = {pres_stem_u .. "um"}
data.forms["2|p|pres|indc"] = {pres_stem_i .. "id"}
data.forms["3|p|pres|indc"] = {pres_stem .. "and"}
data.forms["1|s|pres|subj"] = {pres_stem .. "ē"}
data.forms["2|s|pres|subj"] = {pres_stem .. "ēs"}
data.forms["3|s|pres|subj"] = {pres_stem .. "ē"}
data.forms["1|p|pres|subj"] = {pres_stem .. "ēm"}
data.forms["2|p|pres|subj"] = {pres_stem .. "ēþ"}
data.forms["3|p|pres|subj"] = {pres_stem .. "ēn"}
data.forms["s|impr"] = {pres_stem}
data.forms["p|impr"] = {pres_stem_i .. "id"}
data.forms["1|s|past|indc"] = {past_s_stem}
data.forms["2|s|past|indc"] = {past_p_stem .. "ī"}
data.forms["3|s|past|indc"] = {past_s_stem}
data.forms["1|p|past|indc"] = {past_p_stem_u .. "um"}
data.forms["2|p|past|indc"] = {past_p_stem_u .. "ud"}
data.forms["3|p|past|indc"] = {past_p_stem_u .. "un"}
data.forms["1|s|past|subj"] = {past_p_stem .. "ī"}
data.forms["2|s|past|subj"] = {past_p_stem .. "ī"}
data.forms["3|s|past|subj"] = {past_p_stem .. "ī"}
data.forms["1|p|past|subj"] = {past_p_stem .. "īm"}
data.forms["2|p|past|subj"] = {past_p_stem .. "īd"}
data.forms["3|p|past|subj"] = {past_p_stem .. "īn"}
return make_table(data)
end
function export.wk1(frame)
local params = {
[1] = {default = mw.title.getCurrentTitle().nsText == "Template" and "{{{1}}}jan" or mw.title.getCurrentTitle().subpageText},
["jpres"] = {type = "boolean"}
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {
forms = {},
info = "1類弱變化",
categories = {lang:getCanonicalName() .. "1類弱變化動詞"},
}
if args["jpres"] then
data.info = data.info .. "j-現在時"
table.insert(data.categories, lang:getCanonicalName() .. "1類弱變化j-現在時動詞")
end
local stem, suffix = mw.ustring.match(args[1], "^(.-)(i?jan)$")
local stem_i
local stem_past
if suffix == "jan" then
stem_i = degeminate(stem)
if mw.ustring.find(stem, "[dt]$") then
stem_past = stem
elseif mw.ustring.find(stem, "l$") then
stem_past = stem_i .. "d"
end
stem = stem .. "j"
elseif suffix == "ijan" then
stem_i = stem
stem = stem .. "ij"
else
error("Class 1 weak verbs must end in -jan")
end
if args["jpres"] then
stem_past = stem_i
stem_past = mw.ustring.gsub(stem_past, "[gk]$", "h") .. "t"
stem_past = mw.ustring.toNFC(mw.ustring.gsub(stem_past, "([aiu])nh([^aeiouāēīōū]+)$", "%1" .. mw.ustring.char(0x0304) .. mw.ustring.char(0x0328) .. "h%2"))
stem_past = mw.ustring.gsub(stem_past, "u([^aeiouāēīōū]+)$", "o%1")
end
stem_past = stem_past or stem_i .. "id"
data.forms["inf"] = {stem .. "an"}
data.forms["gen|inf"] = {stem .. "annjas"}
data.forms["dat|inf"] = {stem .. "annjē"}
data.forms["ins|inf"] = {stem .. "annju"}
data.forms["pres|ptcp"] = {stem .. "andī"}
data.forms["1|s|pres|indc"] = {stem .. "u"}
data.forms["2|s|pres|indc"] = {stem_i .. "isi"}
data.forms["3|s|pres|indc"] = {stem_i .. "iþi"}
data.forms["1|p|pres|indc"] = {stem .. "um"}
data.forms["2|p|pres|indc"] = {stem_i .. "iþ"}
data.forms["3|p|pres|indc"] = {stem .. "anþ"}
data.forms["1|s|pres|subj"] = {stem .. "ē"}
data.forms["2|s|pres|subj"] = {stem .. "ēs"}
data.forms["3|s|pres|subj"] = {stem .. "ē"}
data.forms["1|p|pres|subj"] = {stem .. "ēm"}
data.forms["2|p|pres|subj"] = {stem .. "ēþ"}
data.forms["3|p|pres|subj"] = {stem .. "ēn"}
data.forms["s|impr"] = {stem_i .. "i"}
data.forms["p|impr"] = {stem_i .. "iþ"}
data.forms["1|s|past|indc"] = {stem_past .. "ā"}
data.forms["2|s|past|indc"] = {stem_past .. "ēs", stem_past .. "ōs"}
data.forms["3|s|past|indc"] = {stem_past .. "ē", stem_past .. "ā"}
data.forms["1|p|past|indc"] = {stem_past .. "um"}
data.forms["2|p|past|indc"] = {stem_past .. "ud"}
data.forms["3|p|past|indc"] = {stem_past .. "un"}
data.forms["1|s|past|subj"] = {stem_past .. "ī"}
data.forms["2|s|past|subj"] = {stem_past .. "ī"}
data.forms["3|s|past|subj"] = {stem_past .. "ī"}
data.forms["1|p|past|subj"] = {stem_past .. "īm"}
data.forms["2|p|past|subj"] = {stem_past .. "īd"}
data.forms["3|p|past|subj"] = {stem_past .. "īn"}
data.forms["past|ptcp"] = {stem_past}
return make_table(data)
end
function export.wk2(frame)
local params = {
[1] = {default = mw.title.getCurrentTitle().nsText == "Template" and "{{{1}}}ōn" or mw.title.getCurrentTitle().subpageText},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {
forms = {},
info = "2類弱變化",
categories = {lang:getCanonicalName() .. "2類弱變化動詞"},
}
local stem, suffix = mw.ustring.match(args[1], "^(.-)(ōn)$")
if suffix ~= "ōn" then
error("Class 2 weak verbs must end in -ōn")
end
data.forms["inf"] = {stem .. "ōn"}
data.forms["gen|inf"] = {stem .. "ōnijas"}
data.forms["dat|inf"] = {stem .. "ōnijē"}
data.forms["ins|inf"] = {stem .. "ōniju"}
data.forms["pres|ptcp"] = {stem .. "ōndī"}
data.forms["1|s|pres|indc"] = {stem .. "ō"}
data.forms["2|s|pres|indc"] = {stem .. "ōs"}
data.forms["3|s|pres|indc"] = {stem .. "ōþ"}
data.forms["1|p|pres|indc"] = {stem .. "ōm"}
data.forms["2|p|pres|indc"] = {stem .. "ōþ"}
data.forms["3|p|pres|indc"] = {stem .. "ōnþ"}
data.forms["1|s|pres|subj"] = {stem .. "ō"}
data.forms["2|s|pres|subj"] = {stem .. "ōs"}
data.forms["3|s|pres|subj"] = {stem .. "ō"}
data.forms["1|p|pres|subj"] = {stem .. "ōm"}
data.forms["2|p|pres|subj"] = {stem .. "ōþ"}
data.forms["3|p|pres|subj"] = {stem .. "ōn"}
data.forms["s|impr"] = {stem .. "ō"}
data.forms["p|impr"] = {stem .. "ōþ"}
data.forms["1|s|past|indc"] = {stem .. "ōdā"}
data.forms["2|s|past|indc"] = {stem .. "ōdēs", stem .. "ōdōs"}
data.forms["3|s|past|indc"] = {stem .. "ōdē", stem .. "ōdā"}
data.forms["1|p|past|indc"] = {stem .. "ōdum"}
data.forms["2|p|past|indc"] = {stem .. "ōdud"}
data.forms["3|p|past|indc"] = {stem .. "ōdun"}
data.forms["1|s|past|subj"] = {stem .. "ōdī"}
data.forms["2|s|past|subj"] = {stem .. "ōdī"}
data.forms["3|s|past|subj"] = {stem .. "ōdī"}
data.forms["1|p|past|subj"] = {stem .. "ōdīm"}
data.forms["2|p|past|subj"] = {stem .. "ōdīd"}
data.forms["3|p|past|subj"] = {stem .. "ōdīn"}
data.forms["past|ptcp"] = {stem .. "ōd"}
return make_table(data)
end
function export.wk3(frame)
local params = {
[1] = {default = mw.title.getCurrentTitle().nsText == "Template" and "{{{1}}}ēn" or mw.title.getCurrentTitle().subpageText},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {
forms = {},
info = "3類弱變化",
categories = {lang:getCanonicalName() .. "3類弱變化動詞"},
}
local stem, suffix = mw.ustring.match(args[1], "^(.-)(ēn)$")
if not stem then
stem, suffix = mw.ustring.match(args[1], "^(.-)(jan)$")
end
if suffix == "jan" then
data.info = data.info .. "j-現在時"
table.insert(data.categories, lang:getCanonicalName() .. "3類弱變化j-現在時動詞")
local stem_i = degeminate(stem)
stem = stem .. "j"
data.forms["inf"] = {stem .. "an"}
data.forms["gen|inf"] = {stem .. "annjas"}
data.forms["dat|inf"] = {stem .. "annjē"}
data.forms["ins|inf"] = {stem .. "annju"}
data.forms["pres|ptcp"] = {stem .. "andī"}
data.forms["1|s|pres|indc"] = {stem .. "u"}
data.forms["2|s|pres|indc"] = {stem_i .. "ēs"}
data.forms["3|s|pres|indc"] = {stem_i .. "ēþ"}
data.forms["1|p|pres|indc"] = {stem .. "um"}
data.forms["2|p|pres|indc"] = {stem_i .. "ēþ"}
data.forms["3|p|pres|indc"] = {stem .. "anþ"}
data.forms["1|s|pres|subj"] = {stem .. "ē"}
data.forms["2|s|pres|subj"] = {stem .. "ēs"}
data.forms["3|s|pres|subj"] = {stem .. "ē"}
data.forms["1|p|pres|subj"] = {stem .. "ēm"}
data.forms["2|p|pres|subj"] = {stem .. "ēþ"}
data.forms["3|p|pres|subj"] = {stem .. "ēn"}
data.forms["s|impr"] = {stem_i .. "ē"}
data.forms["p|impr"] = {stem_i .. "ēþ"}
data.forms["1|s|past|indc"] = {stem_i .. "dā"}
data.forms["2|s|past|indc"] = {stem_i .. "dēs", stem_i .. "dōs"}
data.forms["3|s|past|indc"] = {stem_i .. "dē", stem_i .. "dā"}
data.forms["1|p|past|indc"] = {stem_i .. "dum"}
data.forms["2|p|past|indc"] = {stem_i .. "dud"}
data.forms["3|p|past|indc"] = {stem_i .. "dun"}
data.forms["1|s|past|subj"] = {stem_i .. "dī"}
data.forms["2|s|past|subj"] = {stem_i .. "dī"}
data.forms["3|s|past|subj"] = {stem_i .. "dī"}
data.forms["1|p|past|subj"] = {stem_i .. "dīm"}
data.forms["2|p|past|subj"] = {stem_i .. "dīd"}
data.forms["3|p|past|subj"] = {stem_i .. "dīn"}
data.forms["past|ptcp"] = {stem_i .. "d"}
elseif suffix == "ēn" then
data.forms["inf"] = {stem .. "ēn"}
data.forms["gen|inf"] = {stem .. "ēnijas"}
data.forms["dat|inf"] = {stem .. "ēnijē"}
data.forms["ins|inf"] = {stem .. "ēniju"}
data.forms["pres|ptcp"] = {stem .. "ēndī"}
data.forms["1|s|pres|indc"] = {stem .. "ē"}
data.forms["2|s|pres|indc"] = {stem .. "ēs"}
data.forms["3|s|pres|indc"] = {stem .. "ēþ"}
data.forms["1|p|pres|indc"] = {stem .. "ēm"}
data.forms["2|p|pres|indc"] = {stem .. "ēþ"}
data.forms["3|p|pres|indc"] = {stem .. "ēnþ"}
data.forms["1|s|pres|subj"] = {stem .. "ē"}
data.forms["2|s|pres|subj"] = {stem .. "ēs"}
data.forms["3|s|pres|subj"] = {stem .. "ē"}
data.forms["1|p|pres|subj"] = {stem .. "ēm"}
data.forms["2|p|pres|subj"] = {stem .. "ēþ"}
data.forms["3|p|pres|subj"] = {stem .. "ēn"}
data.forms["s|impr"] = {stem .. "ē"}
data.forms["p|impr"] = {stem .. "ēþ"}
data.forms["1|s|past|indc"] = {stem .. "?dā"}
data.forms["2|s|past|indc"] = {stem .. "?dēs", stem .. "?dēs"}
data.forms["3|s|past|indc"] = {stem .. "?dē", stem .. "?dā"}
data.forms["1|p|past|indc"] = {stem .. "?dum"}
data.forms["2|p|past|indc"] = {stem .. "?dud"}
data.forms["3|p|past|indc"] = {stem .. "?dun"}
data.forms["1|s|past|subj"] = {stem .. "?dī"}
data.forms["2|s|past|subj"] = {stem .. "?dī"}
data.forms["3|s|past|subj"] = {stem .. "?dī"}
data.forms["1|p|past|subj"] = {stem .. "?dīm"}
data.forms["2|p|past|subj"] = {stem .. "?dīd"}
data.forms["3|p|past|subj"] = {stem .. "?dīn"}
data.forms["past|ptcp"] = {stem .. "?d"}
else
error("Class 3 weak verbs must end in -ēn or -jan")
end
return make_table(data)
end
-- Make the table
function make_table(data)
local function repl(param)
if param == "info" then
return mw.getContentLanguage():ucfirst(data.info or "")
end
local forms = data.forms[param]
if not forms then
return "—"
end
local ret = {}
for key, subform in ipairs(forms) do
table.insert(ret, require("Module:links").full_link({lang = lang, alt = "*" .. subform}))
end
return table.concat(ret, ", ")
end
local wikicode = {}
table.insert(wikicode, [=[
{| class="inflection-table vsSwitcher" data-toggle-category="inflection" style="border: solid 1px #CCCCCC;"
|- style="background: #CCCCCC; text-align: left;"
! class="vsToggleElement" colspan="3" | {{{info}}}
|- class="vsShow"
! style="min-width: 9em; background: #EEEEEE" | 不定式
| style="min-width: 15em;" colspan="2" | {{{inf}}}
|- class="vsShow"
! style="background: #EEEEEE" | 第一人稱單數過去式
| colspan="2" | {{{1|s|past|indc}}}]=])
if data.past_p then
table.insert(wikicode, [=[
|- class="vsShow"
! style="background: #EEEEEE" | 第三人稱複數過去式
| colspan="2" | {{{3|p|past|indc}}}]=])
end
if data.past_ptcp then
table.insert(wikicode, [=[
|- class="vsShow"
! style="background: #EEEEEE" | 過去分詞
| colspan="2" | {{{past|ptcp}}}]=])
end
table.insert(wikicode, [=[
|- class="vsHide"
! style="background: #EEEEEE" | 不定式
| colspan="2" | {{{inf}}}
|- class="vsHide"
! style="background: #EEEEEE" | 不定屬格
| colspan="2" | {{{gen|inf}}}
|- class="vsHide"
! style="background: #EEEEEE" | 不定與格
| colspan="2" | {{{dat|inf}}}
|- class="vsHide"
! style="background: #EEEEEE" | 不定工具格
| colspan="2" | {{{ins|inf}}}
|- class="vsHide"
! style="min-width: 9em; background: #DDDDDD;" | 直陳式
! style="min-width: 15em; background: #DDDDDD;" | 現在時
! style="min-width: 15em; background: #DDDDDD;" | 過去式
|- class="vsHide"
! style="background: #EEEEEE" | 第一人稱單數
| {{{1|s|pres|indc}}}
| {{{1|s|past|indc}}}
|- class="vsHide"
! style="background: #EEEEEE" | 第二人稱單數
| {{{2|s|pres|indc}}}
| {{{2|s|past|indc}}}
|- class="vsHide"
! style="background: #EEEEEE" | 第三人稱單數
| {{{3|s|pres|indc}}}
| {{{3|s|past|indc}}}
|- class="vsHide"
! style="background: #EEEEEE" | 第一人稱複數
| {{{1|p|pres|indc}}}
| {{{1|p|past|indc}}}
|- class="vsHide"
! style="background: #EEEEEE" | 第二人稱複數
| {{{2|p|pres|indc}}}
| {{{2|p|past|indc}}}
|- class="vsHide"
! style="background: #EEEEEE" | 第三人稱複數
| {{{3|p|pres|indc}}}
| {{{3|p|past|indc}}}
|- class="vsHide"
! style="background: #DDDDDD;" | 虛擬式
! style="background: #DDDDDD;" | 現在時
! style="background: #DDDDDD;" | 過去式
|- class="vsHide"
! style="background: #EEEEEE" | 第一人稱單數
| {{{1|s|pres|subj}}}
| {{{1|s|past|subj}}}
|- class="vsHide"
! style="background: #EEEEEE" | 第二人稱單數
| {{{2|s|pres|subj}}}
| {{{2|s|past|subj}}}
|- class="vsHide"
! style="background: #EEEEEE" | 第三人稱單數
| {{{3|s|pres|subj}}}
| {{{3|s|past|subj}}}
|- class="vsHide"
! style="background: #EEEEEE" | 第一人稱複數
| {{{1|p|pres|subj}}}
| {{{1|p|past|subj}}}
|- class="vsHide"
! style="background: #EEEEEE" | 第二人稱複數
| {{{2|p|pres|subj}}}
| {{{2|p|past|subj}}}
|- class="vsHide"
! style="background: #EEEEEE" | 第三人稱複數
| {{{3|p|pres|subj}}}
| {{{3|p|past|subj}}}
|- class="vsHide"
! style="background: #DDDDDD;" | 命令式
! style="background: #DDDDDD;" | 現在時
| rowspan="3" |
|- class="vsHide"
! style="background: #EEEEEE" | 單數
| {{{s|impr}}}
|- class="vsHide"
! style="background: #EEEEEE" | 複數
| {{{p|impr}}}
|- class="vsHide"
! style="background: #DDDDDD;" |
! style="background: #DDDDDD;" | 現在時
! style="background: #DDDDDD;" | 過去式
|- class="vsHide"
! style="background: #EEEEEE" | 分詞
| {{{pres|ptcp}}}
| {{{past|ptcp}}}
|}]=])
return mw.ustring.gsub(table.concat(wikicode, "\n"), "{{{([#!]?[a-z0-9|]+)}}}", repl) .. require("Module:utilities").format_categories(data.categories, lang)
end
return export