Module:hrx-verb
Appearance
- The following documentation is located at Module:hrx-verb/documentation. [edit] Categories were auto-generated by Module:module categorization. [edit]
- Useful links: subpage list • links • transclusions • testcases • sandbox
local m_utilities = require("Module:utilities")
local m_links = require("Module:links")
local lang = require("Module:languages").getByCode("hrx")
local export = {}
local function detect_stem(stem)
if mw.ustring.find(stem, "v$") or mw.ustring.find(stem, "w$") then
return '1Ab'
elseif mw.ustring.find(stem, "d$") or mw.ustring.find(stem, "t$") then
return '1At'
elseif mw.ustring.find(stem, "eer$") or mw.ustring.find(stem, "ier$") then
return '1C'
elseif mw.ustring.find(stem, "l$") or mw.ustring.find(stem, 'r$') or mw.ustring.find(stem, 'n$') then
return '1B'
else
return '1A'
end
end
local function mutate_stem(stem)
if mw.ustring.find(stem, "d$") then
return (mw.ustring.gsub(stem, "d$", ""))
elseif mw.ustring.find(stem, "v$") then
return (mw.ustring.gsub(stem, "v$", "b"))
elseif mw.ustring.find(stem, "w$") then
return (mw.ustring.gsub(stem, "w$", "bb"))
elseif mw.ustring.find(stem, "l$") or mw.ustring.find(stem, "r$") or mw.ustring.find(stem, "n$") then
if mw.ustring.find(stem, "[bcdfghjkmnpqrstvwz]l$") then
return (mw.ustring.gsub(stem, "l$", "el"))
elseif mw.ustring.find(stem, "[bcdfghjklmnpqstvwz]r$") then
return (mw.ustring.gsub(stem, "r$", "er"))
elseif mw.ustring.find(stem, "[bcdfghjklmpqrstvwz]n$") then
return (mw.ustring.gsub(stem, "n$", "en"))
end
return stem
else
return stem
end
end
local function past_participle(stem)
if detect_stem(stem) == '1C' then
return stem .. 'd'
elseif detect_stem(stem) == '1B' or detect_stem(stem) == '1Ab' then
return 'ge' .. mutate_stem(stem) .. 'd'
elseif detect_stem(stem) == '1At' then
return 'ge' .. stem
else
return 'ge' .. stem .. 'd'
end
end
local function postprocess(args, data)
if args["prefix"] then
table.insert(data.categories, lang:getCanonicalName() .. " separable verbs")
data.info = data.info .. ", separable"
-- Add the separable part to all the verb forms
for key, _ in pairs(data.forms) do
if key:find("_indc$") or key:find("_cond$") or key:find("_impr$") or key:find("_sub$") then
-- For main-clause finite forms, add the separable part after the form, separated by a space
for i, subform in ipairs(data.forms[key]) do
data.forms[key][i] = data.forms[key][i] .. " " .. args["prefix"] .. (args["pref-n"] and "n" or "")
end
elseif key == "inf" then
for i, subform in ipairs(data.forms[key]) do
data.forms[key][i] = args["prefix"] .. (args["pref-inf-n"] and "n" or "") .. data.forms[key][i]
end
elseif key ~= "aux" then
-- For all other forms, add the separable part before the form, with no space
for i, subform in ipairs(data.forms[key]) do
data.forms[key][i] = args["prefix"] .. subform
end
end
end
end
-- Check if the lemma form matches the page name
if data.forms["inf"] and (lang:makeEntryName(data.forms["inf"][1])) ~= mw.title.getCurrentTitle().text then
table.insert(data.categories, lang:getCanonicalName() .. " entries with inflection not matching pagename")
end
if args["only3s"] or args["only3sp"] then
for key, _ in pairs(data.forms) do
if key:find("^1") or key:find("^2") or (args["only3s"] and key:find("^3pl")) then
data.forms[key] = nil
end
end
end
end
local function inf(args)
if args["inf-n"] == true then
return 'n'
else
return 'e'
end
end
local function at_conj(args, stem)
if mw.ustring.find(stem, "t$") then
return mutate_stem(args["alt"] or stem)
else
return mutate_stem(args["alt"] or stem) .. "d"
end
end
local function at_imp(args, stem)
if mw.ustring.find(stem, "d$") then
return stem
else
return mutate_stem(args["alt"] or stem)
end
end
-- Inflection functions
function export.regular(frame)
local params = {
[1] = {required = true, default = "{{{1}}}"},
[2] = {required = true, default = "{{{2}}}"},
["alt"] = {},
["ptcp"] = {},
["prefix"] = {},
["inf-n"] = {type = "boolean"},
["only3s"] = {type = "boolean"},
["only3sp"] = {type = "boolean"},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local stem = args[1]
local stem_final = mutate_stem(args["alt"] or stem)
local data = {forms = {}, info = "regular", categories = {}}
data.forms["inf"] = {stem .. inf(args)}
data.forms["ptcp"] = {args["ptcp"] or past_participle(stem)}
data.forms["aux"] = {args[2]}
data.forms["1sg_pres_indc"] = {stem .. inf(args)}
data.forms["2sg_pres_indc"] = {stem_final .. "st"}
data.forms["3sg_pres_indc"] = {at_conj(args, stem)}
data.forms["1pl_pres_indc"] = {stem .. inf(args)}
data.forms["2pl_pres_indc"] = {at_conj(args, stem)}
data.forms["3pl_pres_indc"] = {stem .. inf(args)}
data.forms["2sg_impr"] = {at_imp(args, stem)}
data.forms["2pl_impr"] = {at_conj(args, stem)}
postprocess(args, data)
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
function export.irregular(frame)
local params = {
[1] = {required = true, default = "{{{1}}}"},
[2] = {required = true, default = "{{{2}}}"},
["alt"] = {required = true},
["ptcp"] = {required = true},
["prefix"] = {},
["inf-n"] = {type = "boolean"},
["only3s"] = {type = "boolean"},
["only3sp"] = {type = "boolean"},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local stem = args[1]
local stem_final = mutate_stem(args["alt"] or stem)
local data = {forms = {}, info = "irregular", categories = {lang:getCanonicalName() .. " irregular verbs"}}
data.forms["inf"] = {stem .. inf(args)}
data.forms["ptcp"] = {args['ptcp'] or past_participle(stem)}
data.forms["aux"] = {args[2]}
data.forms["1sg_pres_indc"] = {stem .. inf(args)}
data.forms["2sg_pres_indc"] = {stem_final .. 'st'}
data.forms["3sg_pres_indc"] = {stem_final .. 'd'}
data.forms["1pl_pres_indc"] = {stem .. inf(args)}
data.forms["2pl_pres_indc"] = {stem_final .. 'd'}
data.forms["3pl_pres_indc"] = {stem .. inf(args)}
data.forms["2sg_impr"] = {stem_final .. 'd'}
data.forms["2pl_impr"] = {stem_final .. 'd'}
postprocess(args, data)
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
function export.irregular_full(frame)
local params = {
[1] = {required = true, default = "{{{1}}}"},
[2] = {required = true, default = "{{{2}}}"},
[3] = {default = "{{{3}}}"},
[4] = {default = "{{{4}}}"},
["past"] = {},
["cond"] = {},
["ptcp"] = {required, true},
["prefix"] = {},
["inf-n"] = {type = "boolean"},
["only3s"] = {type = "boolean"},
["only3sp"] = {type = "boolean"},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local stem = args[1]
local stem_final = mutate_stem(stem)
local stem_past = args["past"] or args[3]
local stem_past_dev = mutate_stem(stem_past)
local stem_cond = args["cond"] or args[4]
local stem_cond_dev = mutate_stem(stem_cond)
local data = {forms = {}, info = "irregular with past tense and conditional mood", categories = {lang:getCanonicalName() .. " verbs with past tense", lang:getCanonicalName() .. " verbs with conditional mood", lang:getCanonicalName() .. " irregular verbs"}}
data.past = true
data.forms["inf"] = {stem .. inf(args)}
data.forms["ptcp"] = {args["ptcp"] or past_participle(stem)}
data.forms["aux"] = {args[2]}
data.forms["1sg_pres_indc"] = {stem .. inf(args)}
data.forms["2sg_pres_indc"] = {stem_final .. 'st'}
data.forms["3sg_pres_indc"] = {stem_final .. 'd'}
data.forms["1pl_pres_indc"] = {stem .. inf(args)}
data.forms["2pl_pres_indc"] = {stem_final .. 'd'}
data.forms["3pl_pres_indc"] = {stem .. inf(args)}
data.forms["2sg_impr"] = {stem_final}
data.forms["2pl_impr"] = {stem_final .. 'd'}
data.forms["1sg_past_indc"] = {stem_past_dev .. 'd'}
data.forms["2sg_past_indc"] = {stem_past_dev .. 'st'}
data.forms["3sg_past_indc"] = {stem_past_dev .. 'd'}
data.forms["1pl_past_indc"] = {stem_past .. 'de'}
data.forms["2pl_past_indc"] = {stem_past_dev .. 'd'}
data.forms["3pl_past_indc"] = {stem_past .. 'de'}
data.forms["1sg_cond"] = {stem_cond_dev .. 'd'}
data.forms["2sg_cond"] = {stem_cond_dev .. 'st'}
data.forms["3sg_cond"] = {stem_cond_dev .. 'd'}
data.forms["1pl_cond"] = {stem_cond .. 'de'}
data.forms["2pl_cond"] = {stem_cond_dev .. 'd'}
data.forms["3pl_cond"] = {stem_cond .. 'de'}
postprocess(args, data)
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
function export.irregular_sin(frame)
local params = {
["prefix"] = {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {forms = {}, info = "irregular with past tense, conditional and subjunctive mood", categories = {lang:getCanonicalName() .. " verbs with past tense", lang:getCanonicalName() .. " verbs with conditional mood", lang:getCanonicalName() .. " verbs with subjunctive mood", lang:getCanonicalName() .. " irregular verbs", lang:getCanonicalName() .. " auxiliary verbs"}}
data.past_sin = true
data.forms["inf"] = {'sin'}
data.forms["ptcp"] = {'gewees', 'geweest', 'geween'}
data.forms["aux"] = {'sin'}
data.forms["1sg_pres_indc"] = {'sin'}
data.forms["2sg_pres_indc"] = {'bist'}
data.forms["3sg_pres_indc"] = {'is'}
data.forms["1pl_pres_indc"] = {'sin'}
data.forms["2pl_pres_indc"] = {'seid'}
data.forms["3pl_pres_indc"] = {'sin'}
data.forms["2sg_impr"] = {"sei"}
data.forms["2pl_impr"] = {"seid"}
data.forms["1sg_past_indc"] = {'waar'}
data.forms["2sg_past_indc"] = {'waarst'}
data.forms["3sg_past_indc"] = {'waar'}
data.forms["1pl_past_indc"] = {'waare'}
data.forms["2pl_past_indc"] = {'waard'}
data.forms["3pl_past_indc"] = {'waare'}
data.forms["1sg_cond"] = {'wäär'}
data.forms["2sg_cond"] = {'wäärst'}
data.forms["3sg_cond"] = {'wäär'}
data.forms["1pl_cond"] = {'wääre'}
data.forms["2pl_cond"] = {'wäärd'}
data.forms["3pl_cond"] = {'wääre'}
data.forms["1sg_sub"] = {'sei'}
data.forms["2sg_sub"] = {'seist'}
data.forms["3sg_sub"] = {'sei'}
data.forms["1pl_sub"] = {'seie'}
data.forms["2pl_sub"] = {'seid'}
data.forms["3pl_sub"] = {'seie'}
postprocess(args, data)
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
function export.irregular_hon(frame)
local params = {
["prefix"] = {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {forms = {}, info = "irregular with past tense and conditional mood", categories = {lang:getCanonicalName() .. " verbs with past tense", lang:getCanonicalName() .. " verbs with conditional mood", lang:getCanonicalName() .. " irregular verbs", lang:getCanonicalName() .. " auxiliary verbs"}}
data.past_hon = true
data.forms["inf"] = {'hon'}
data.forms["ptcp"] = {'gehad'}
data.forms["aux"] = {'hon'}
data.forms["1sg_pres_indc"] = {'hon'}
data.forms["2sg_pres_indc"] = {'host'}
data.forms["3sg_pres_indc"] = {'hod'}
data.forms["1pl_pres_indc"] = {'hon'}
data.forms["2pl_pres_indc"] = {'hod'}
data.forms["3pl_pres_indc"] = {'hon'}
data.forms["1sg_past_indc"] = {'had'}
data.forms["2sg_past_indc"] = {'hast'}
data.forms["3sg_past_indc"] = {'had'}
data.forms["1pl_past_indc"] = {'hade'}
data.forms["2pl_past_indc"] = {'had'}
data.forms["3pl_past_indc"] = {'hade'}
data.forms["1sg_cond"] = {'häd'}
data.forms["2sg_cond"] = {'häst'}
data.forms["3sg_cond"] = {'häd'}
data.forms["1pl_cond"] = {'häde'}
data.forms["2pl_cond"] = {'häd'}
data.forms["3pl_cond"] = {'häd'}
postprocess(args, data)
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
function export.irregular_solle(frame)
local params = {
["prefix"] = {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {forms = {}, info = "irregular with past tense and conditional mood", categories = {lang:getCanonicalName() .. " verbs with past tense", lang:getCanonicalName() .. " verbs with conditional mood", lang:getCanonicalName() .. " irregular verbs", lang:getCanonicalName() .. " auxiliary verbs"}}
data.past_solle = true
data.forms["inf"] = {'solle'}
data.forms["ptcp"] = {'gesolld'}
data.forms["aux"] = {'solle'}
data.forms["1sg_pres_indc"] = {'soll'}
data.forms["2sg_pres_indc"] = {'sollst'}
data.forms["3sg_pres_indc"] = {'soll'}
data.forms["1pl_pres_indc"] = {'solle'}
data.forms["2pl_pres_indc"] = {'solld'}
data.forms["3pl_pres_indc"] = {'solle'}
data.forms["1sg_past_indc"] = {'solld'}
data.forms["2sg_past_indc"] = {'solldst'}
data.forms["3sg_past_indc"] = {'solld'}
data.forms["1pl_past_indc"] = {'sollde'}
data.forms["2pl_past_indc"] = {'solld'}
data.forms["3pl_past_indc"] = {'sollde'}
data.forms["1sg_sub"] = {'selld'}
data.forms["2sg_sub"] = {'selldst'}
data.forms["3sg_sub"] = {'selld'}
data.forms["1pl_sub"] = {'sellde'}
data.forms["2pl_sub"] = {'selld'}
data.forms["3pl_sub"] = {'selle'}
postprocess(args, data)
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
function export.irregular_misse(frame)
local params = {
["prefix"] = {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {forms = {}, info = "irregular with past tense and conditional mood", categories = {lang:getCanonicalName() .. " verbs with past tense", lang:getCanonicalName() .. " verbs with conditional mood", lang:getCanonicalName() .. " irregular verbs", lang:getCanonicalName() .. " auxiliary verbs"}}
data.past_hon = true
data.forms["inf"] = {'misse'}
data.forms["ptcp"] = {'gemusst', 'misse'}
data.forms["aux"] = {'misse'}
data.forms["1sg_pres_indc"] = {'muss'}
data.forms["2sg_pres_indc"] = {'musst'}
data.forms["3sg_pres_indc"] = {'muss'}
data.forms["1pl_pres_indc"] = {'misse'}
data.forms["2pl_pres_indc"] = {'missd'}
data.forms["3pl_pres_indc"] = {'misse'}
data.forms["1sg_past_indc"] = {'musst'}
data.forms["2sg_past_indc"] = {'musst'}
data.forms["3sg_past_indc"] = {'musst'}
data.forms["1pl_past_indc"] = {'musste'}
data.forms["2pl_past_indc"] = {'musst'}
data.forms["3pl_past_indc"] = {'musste'}
data.forms["1sg_cond"] = {'misst'}
data.forms["2sg_cond"] = {'misst'}
data.forms["3sg_cond"] = {'misst'}
data.forms["1pl_cond"] = {'misste'}
data.forms["2pl_cond"] = {'misst'}
data.forms["3pl_cond"] = {'misste'}
postprocess(args, data)
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
function export.irregular_dun(frame)
local params = {
["prefix"] = {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {forms = {}, info = "irregular with conditional mood", categories = {lang:getCanonicalName() .. " verbs with conditional mood", lang:getCanonicalName() .. " irregular verbs", lang:getCanonicalName() .. " auxiliary verbs"}}
data.past_dun = true
data.forms["inf"] = {'dun'}
data.forms["ptcp"] = {'gedun'}
data.forms["aux"] = {'hon'}
data.forms["1sg_pres_indc"] = {'dun'}
data.forms["2sg_pres_indc"] = {'dust'}
data.forms["3sg_pres_indc"] = {'dud'}
data.forms["1pl_pres_indc"] = {'dun'}
data.forms["2pl_pres_indc"] = {'dud'}
data.forms["3pl_pres_indc"] = {'dun'}
data.forms["2sg_impr"] = {"du"}
data.forms["2pl_impr"] = {"dud"}
data.forms["1sg_cond"] = {'däd'}
data.forms["2sg_cond"] = {'däst'}
data.forms["3sg_cond"] = {'däd'}
data.forms["1pl_cond"] = {'däde'}
data.forms["2pl_cond"] = {'däd'}
data.forms["3pl_cond"] = {'däde'}
postprocess(args, data)
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
function export.irregular_wolle(frame)
local params = {
["prefix"] = {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {forms = {}, info = "irregular with past tense and conditional mood", categories = {lang:getCanonicalName() .. " verbs with past tense", lang:getCanonicalName() .. " verbs with conditional mood", lang:getCanonicalName() .. " irregular verbs", lang:getCanonicalName() .. " auxiliary verbs"}}
data.past_hon = true
data.forms["inf"] = {'wolle'}
data.forms["ptcp"] = {'gewolld'}
data.forms["aux"] = {'wolle'}
data.forms["1sg_pres_indc"] = {'will'}
data.forms["2sg_pres_indc"] = {'willst'}
data.forms["3sg_pres_indc"] = {'will'}
data.forms["1pl_pres_indc"] = {'wolle'}
data.forms["2pl_pres_indc"] = {'wolld'}
data.forms["3pl_pres_indc"] = {'wolle'}
data.forms["1sg_past_indc"] = {'wolld'}
data.forms["2sg_past_indc"] = {'wollst'}
data.forms["3sg_past_indc"] = {'wolld'}
data.forms["1pl_past_indc"] = {'wollde'}
data.forms["2pl_past_indc"] = {'wolld'}
data.forms["3pl_past_indc"] = {'wollde'}
data.forms["1sg_cond"] = {'wolld'}
data.forms["2sg_cond"] = {'wollst'}
data.forms["3sg_cond"] = {'wolld'}
data.forms["1pl_cond"] = {'wollde'}
data.forms["2pl_cond"] = {'wolld'}
data.forms["3pl_cond"] = {'wollde'}
postprocess(args, data)
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
function export.irregular_mechde(frame)
local params = {
["prefix"] = {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {forms = {}, info = "irregular", categories = {lang:getCanonicalName() .. " irregular verbs", lang:getCanonicalName() .. " auxiliary verbs"}}
data.past_mechde = true
data.forms["1sg_cond"] = {'mechde'}
data.forms["2sg_cond"] = {'mechst', 'mechdest'}
data.forms["3sg_cond"] = {'mechd'}
data.forms["1pl_cond"] = {'mechde'}
data.forms["2pl_cond"] = {'mechd'}
data.forms["3pl_cond"] = {'mechde'}
postprocess(args, data)
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
function export.irregular_wisse(frame)
local params = {
["prefix"] = {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {forms = {}, info = "irregular with past tense and conditional mood", categories = {lang:getCanonicalName() .. " verbs with past tense", lang:getCanonicalName() .. " verbs with conditional mood", lang:getCanonicalName() .. " irregular verbs"}}
data.past_hon = true
data.forms["inf"] = {'wisse'}
data.forms["ptcp"] = {'gewusst'}
data.forms["aux"] = {'wisse'}
data.forms["1sg_pres_indc"] = {'wees'}
data.forms["2sg_pres_indc"] = {'weest'}
data.forms["3sg_pres_indc"] = {'wees'}
data.forms["1pl_pres_indc"] = {'wisse'}
data.forms["2pl_pres_indc"] = {'wissd'}
data.forms["3pl_pres_indc"] = {'wisse'}
data.forms["1sg_past_indc"] = {'wusst'}
data.forms["2sg_past_indc"] = {'wusst'}
data.forms["3sg_past_indc"] = {'wusst'}
data.forms["1pl_past_indc"] = {'wusste'}
data.forms["2pl_past_indc"] = {'wusst'}
data.forms["3pl_past_indc"] = {'wusste'}
data.forms["1sg_cond"] = {'wisst'}
data.forms["2sg_cond"] = {'wisst'}
data.forms["3sg_cond"] = {'wisst'}
data.forms["1pl_cond"] = {'wisste'}
data.forms["2pl_cond"] = {'wisst'}
data.forms["3pl_cond"] = {'wisste'}
postprocess(args, data)
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
local names = {
["inf"] = "infinitive",
["ptcp"] = "participle",
["aux"] = "auxiliary",
["pres_indc"] = "present<br/>indicative",
["past_indc"] = "past<br/>indicative",
["cond"] = "conditional",
["impr"] = "imperative",
["sub"] = "subjunctive",
["1sg"] = "ich",
["2sg"] = "du",
["3sg"] = "er/sie/es",
["1pl"] = "meer",
["2pl"] = "deer",
["3pl"] = "sie",
}
-- 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 _, form in ipairs(forms) do
table.insert(ret, m_links.full_link({lang = lang, term = form}))
end
return table.concat(ret, ", ")
end
local rows = {"1sg", "2sg", "3sg", "1pl", "2pl", "3pl"}
local columns = {"pres_indc", "impr"}
if data.past then
columns = {"pres_indc", "past_indc", "cond", "impr"}
end
if data.past_sin then
columns = {"pres_indc", "past_indc", "cond", "sub", "impr"}
end
if data.past_hon then
columns = {"pres_indc", "past_indc", "cond"}
end
if data.past_mechde then
columns = {"cond"}
end
if data.past_dun then
columns = {"pres_indc", "cond", "impr"}
end
if data.past_solle then
columns = {"pres_indc", "past_indc", "sub"}
end
local wikicode = {}
table.insert(wikicode, "{| class=\"inflection-table vsSwitcher\" data-toggle-category=\"inflection\" style=\"background: #F9F9F9; border: 1px solid #aaa;\"")
table.insert(wikicode, "|- style=\"background: #ccc; text-align: left;\"")
table.insert(wikicode, "! class=\"vsToggleElement\" style=\"min-width: 33em;\" colspan=\"" .. tostring(#columns + 1) .. "\" | {{{info}}}")
table.insert(wikicode, "|- class=\"vsHide\"")
table.insert(wikicode, "! style=\"background: #e2e4c0; min-width: 9em;\" | infinitive")
table.insert(wikicode, "| colspan=\"" .. tostring(#columns) .. "\" | {{{inf}}}")
table.insert(wikicode, "|- class=\"vsHide\"")
table.insert(wikicode, "! style=\"background: #e2e4c0;\" | participle")
table.insert(wikicode, "| colspan=\"" .. tostring(#columns) .. "\" | {{{ptcp}}}")
table.insert(wikicode, "|- class=\"vsHide\"")
table.insert(wikicode, "! style=\"background: #e2e4c0;\" | auxiliary")
table.insert(wikicode, "| colspan=\"" .. tostring(#columns) .. "\" | {{{aux}}}")
table.insert(wikicode, "|- class=\"vsHide\" style=\"background: #e2e4c0;\"")
table.insert(wikicode, "!")
for _, col in ipairs(columns) do
table.insert(wikicode, "! " .. names[col])
end
for _, row in ipairs(rows) do
table.insert(wikicode, "|- class=\"vsHide\"")
table.insert(wikicode, "! style=\"background:#DEDEDE\" | " .. names[row])
for _, col in ipairs(columns) do
table.insert(wikicode, "| style=\"min-width: 12em;\" | {{{" .. row .. "_" .. col .. "}}}")
end
end
table.insert(wikicode, "|- class=\"vsHide\"")
table.insert(wikicode, "| colspan=\"" .. tostring(#columns + 1) .. "\"| The use of the present participle is uncommon, but can be made with the suffix -end.")
table.insert(wikicode, "|}")
wikicode = table.concat(wikicode, "\n")
return mw.ustring.gsub(wikicode, "{{{([a-z0-9_]+)}}}", repl)
end
return export