Module:sk-verb
Appearance
- This module lacks a documentation subpage. Please create it.
- Useful links: subpage list • links • transclusions • testcases • sandbox
--[=[
This module contains functions for creating inflection tables for Slovak
verbs.
]=]--
local export = {}
-- Within this module, conjugations are the functions that do the actual
-- conjugating by creating the forms of a basic verb.
-- They are defined further down.
local conjugations = {}
local lang = require("Module:languages").getByCode("sk")
local m_links = require("Module:links")
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
local args = frame:getParent().args
NAMESPACE = mw.title.getCurrentTitle().nsText
if NAMESPACE == "" then
PAGENAME = mw.title.getCurrentTitle().text
else
if args["pagename"] then
PAGENAME = args["pagename"]
else
error("Pagename not specified")
end
end
-- Default to impf on the template page so that there is no script error.
local verb_type = args[1] or (NAMESPACE == "Template" and "impf") or error("Verb type has not been specified. Please pass parameter 1")
local conj_type = args[2] or error("Conjugation type has not been specified. Please pass parameter 2")
--reflexive
local refl = false
if mw.ustring.find(verb_type, "s[ai]") then
refl = true
PAGENAME = PAGENAME .. " " .. mw.ustring.match(verb_type, "s[ai]")
elseif mw.ustring.find(PAGENAME, " s[ai]$") then
refl = true
end
--perfective
local perf = false
if not mw.ustring.find(verb_type, "impf") then perf = true end
--impersonal
local impers = false
if mw.ustring.find(verb_type, "impers") then impers = true end
local cats = {
refl = refl,
perf = perf,
impers = impers
}
PERF_FULL = "perfective"
if not perf then PERF_FULL = "imperfective" end
IMPERS = ""
if impers then IMPERS = "impersonal; " end
local forms, title, categories
if conjugations[conj_type] then
forms, title, categories = conjugations[conj_type](args)
else
error("Unknown conjugation type '" .. conj_type .. "'")
end
--alternative forms
forms["impr_2sg2"] = args["impr_2sg2"]
forms["impr_1pl2"] = args["impr_1pl2"]
forms["impr_2pl2"] = args["impr_2pl2"]
forms["pres_actv_part2"] = args["pres_actv_part2"]
forms["past_actv_part2"] = args["past_actv_part2"]
forms["pres_pasv_part2"] = args["pres_pasv_part2"]
forms["transgr2"] = args["transgr2"]
forms["gerund2"] = args["gerund2"]
forms["past_m2"] = args["past_m2"]
forms["past_f2"] = args["past_f2"]
forms["past_n2"] = args["past_n2"]
forms["past_pl2"] = args["past_pl2"]
forms["pres_futr_1sg2"] = args["pres_futr_1sg2"]
forms["pres_futr_2sg2"] = args["pres_futr_2sg2"]
forms["pres_futr_3sg2"] = args["pres_futr_3sg2"]
forms["pres_futr_1pl2"] = args["pres_futr_1pl2"]
forms["pres_futr_2pl2"] = args["pres_futr_2pl2"]
forms["pres_futr_3pl2"] = args["pres_futr_3pl2"]
if args["gerund"] then forms["gerund"] = args["gerund"] end
if args["pres_pasv_part"] then forms["pres_pasv_part"] = args["pres_pasv_part"] end
--parameters passed by the user
local no_impr = args["no_impr"]
local no_pasv_part = args["no_pasv_part"]
local no_gerund = args["no_gerund"]
local pasv_part = args["pasv_part"]
local params = {
no_impr = no_impr,
no_pasv_part = no_pasv_part,
no_gerund = no_gerund,
pasv_part = pasv_part
}
-- Perfective/imperfective
table.insert(categories, "Slovak " .. PERF_FULL .. " verbs")
-- Reflexive
if refl then
make_reflexive(forms)
table.insert(categories, "Slovak reflexive verbs")
end
-- Impersonal
if impers then
table.insert(categories, "Slovak impersonal verbs")
end
local ret = ""
if NAMESPACE == "" then
local sort_key = PAGENAME
for key, cat in ipairs(categories) do
ret = ret .. "[[Category:" .. cat .. "|" .. sort_key .. "]]"
end
end
return make_table(forms, title, cats, params) .. ret
end
--[=[
Conjugation functions
]=]--
-- pattern chyt-á-m, chyt-aj-ú, chyt-a-ť
conjugations["1"] = function()
local forms = {}
local categories = {"Slovak class 1 verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (" .. PERF_FULL .. "; " .. IMPERS .. "class I, pattern ''chytať'')"
local stem = remove_reflexive_particle_and_suffix(PAGENAME, "ať")
local pres_stem1 = stem
if last_syllable_long(stem) or mw.ustring.find(stem, "av$") then
pres_stem1 = stem .. "a"
else
if mw.ustring.find(stem, "[ňľšcčz]$") or mw.ustring.find(stem, "dz$") or mw.ustring.find(stem, "mer$") or mw.ustring.find(stem, "večer$")
or mw.ustring.find(stem, "stav$") then
pres_stem1 = stem .. "ia"
else
pres_stem1 = stem .. "á"
end
end
local pres_stem2 = stem .. "aj"
local inf_stem = stem .. "a"
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, pres_stem1, pres_stem2, "ú")
add_imperative_suffixes(forms, pres_stem2)
set_participles_etc(forms, inf_stem, inf_stem, "n")
add_preterite_suffixes(forms, inf_stem)
return forms, title, categories
end
-- pattern rozum-ie-m, rozum-ej-ú, rozum-ie-ť
conjugations["2"] = function()
local forms = {}
local categories = {"Slovak class 2 verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (" .. PERF_FULL .. "; " .. IMPERS .. "class II, pattern ''rozumieť'')"
local stem = remove_reflexive_particle_and_suffix(PAGENAME, "ieť")
local pres_stem1 = stem .. "ie"
local pres_stem2 = stem .. "ej"
local inf_stem = stem .. "e"
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, pres_stem1, pres_stem2, "ú")
add_imperative_suffixes(forms, pres_stem2)
set_participles_etc(forms, inf_stem, inf_stem, "n")
add_preterite_suffixes(forms, inf_stem)
return forms, title, categories
end
-- pattern nes-ie-m, nes-ú, nies-ť
conjugations["3a"] = function(args)
local forms = {}
local categories = {"Slovak class 3 verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (" .. PERF_FULL .. "; " .. IMPERS .. "class III, pattern ''niesť'')"
local alternations = {
s = {
t = {"ť", "t"},
d = {"ď", "d"},
s = {"s", "s"}
},
c = {
cj = {"č", "k"},
zj = {"ž", "h"}
},
z = {
zj = {"ž", "h"},
z = {"z", "z"}
}
}
local stem = remove_reflexive_particle_and_suffix(PAGENAME, "ť")
local pres_stem2 = args[3] or (NAMESPACE == "Template" and "-") or error("The 3rd person pl. without the suffix has not been specified. Please pass parameter 3")
local stem_last = get_last_char(stem)
local pres_stem_last = get_last_char(pres_stem2)
local pres_stem1_0 = remove_last_char(pres_stem2) .. alternations[stem_last][remove_diacritics(pres_stem_last)][1]
local pres_stem1 = pres_stem1_0 .. "ie"
local inf_stem = remove_last_char(stem) .. alternations[stem_last][remove_diacritics(pres_stem_last)][2]
if mw.ustring.find(stem, "rás$") then inf_stem = remove_last_char(stem) .. "st" end
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, pres_stem1, pres_stem2, "ú")
add_imperative_suffixes(forms, pres_stem1_0)
set_participles_etc(forms, nil, pres_stem1_0, "en")
add_preterite_suffixes(forms, inf_stem)
return forms, title, categories
end
conjugations["3b"] = function()
local forms = {}
local categories = {"Slovak class 3 verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (" .. PERF_FULL .. "; " .. IMPERS .. "class III, pattern ''trieť'')"
local stem = remove_reflexive_particle_and_suffix(PAGENAME, "ieť")
if mw.ustring.find(stem, "[dtnl]$") then
stem = soften_last_consonant(stem)
end
local pres_stem1 = stem .. "ie"
local pres_stem2 = stem
if mw.ustring.find(stem, "mľ$") then
pres_stem1 = remove_suffix(stem, "ľ") .. "eľie"
pres_stem2 = remove_suffix(stem, "ľ") .. "eľ"
end
local inf_stem = stem .. "e"
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, pres_stem1, pres_stem2, "ú")
add_imperative_suffixes(forms, pres_stem2)
set_participles_etc(forms, inf_stem, inf_stem, "n")
add_preterite_suffixes(forms, inf_stem)
return forms, title, categories
end
conjugations["3c"] = function()
local forms = {}
local categories = {"Slovak class 3 verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (" .. PERF_FULL .. "; " .. IMPERS .. "class III, pattern ''hynúť'')"
local stem = remove_reflexive_particle_and_suffix(PAGENAME, "úť")
local pres_stem1 = soften_last_consonant(stem) .. "ie"
local pres_stem2 = stem
local inf_stem = stem .. "u"
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, pres_stem1, pres_stem2, "ú")
add_imperative_suffixes(forms, soften_last_consonant(pres_stem2))
set_participles_etc(forms, inf_stem, inf_stem, "t")
add_preterite_suffixes(forms, inf_stem)
return forms, title, categories
end
conjugations["3d"] = function()
local forms = {}
local categories = {"Slovak class 3 verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (" .. PERF_FULL .. "; " .. IMPERS .. "class III, pattern ''brať'')"
local stem = remove_reflexive_particle_and_suffix(PAGENAME, "ať")
local stem2 = nil
if mw.ustring.find(stem, "or$") then
stem2 = stem
elseif mw.ustring.find(stem, "hn$") then
stem2 = "žen"
else
stem2 = remove_last_char(stem) .. "e" .. get_last_char(stem)
end
local pres_stem1 = soften_last_consonant(stem2) .. "ie"
local pres_stem2 = stem2
local inf_stem = stem .. "a"
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, pres_stem1, pres_stem2, "ú")
add_imperative_suffixes(forms, soften_last_consonant(pres_stem2))
set_participles_etc(forms, inf_stem, inf_stem, "n")
add_preterite_suffixes(forms, inf_stem)
return forms, title, categories
end
conjugations["4a"] = function()
local forms = {}
local categories = {"Slovak class 4 verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (" .. PERF_FULL .. "; " .. IMPERS .. "class IV, pattern ''česať'')"
local alternations = {
t = "c",
d = "dz",
k = "č",
c = "č",
dz = "dž",
s = "š",
z = "ž",
ch = "š",
h = "ž",
sl = "šl"
}
local stem = remove_reflexive_particle_and_suffix(PAGENAME, "ať")
local stem_last = get_last_char(stem)
if stem_last == "z" or stem_last == "h" or stem_last == "l" then
local stem_last_two = mw.ustring.sub(stem, -2, -1)
if stem_last_two == "dz" or stem_last_two == "ch" or stem_last_two == "sl" then
stem_last = stem_last_two
end
end
local stem2 = stem
if alternations[stem_last] then
stem2 = remove_suffix(stem, stem_last) .. alternations[stem_last]
end
local pres_stem1 = soften_last_given_consonant(stem2, "nl") .. "e"
local pres_stem2 = stem2
local inf_stem = stem .. "a"
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, pres_stem1, pres_stem2, "ú")
add_imperative_suffixes(forms, soften_last_given_consonant(pres_stem2, "nl"))
set_participles_etc(forms, inf_stem, inf_stem, "n")
add_preterite_suffixes(forms, inf_stem)
return forms, title, categories
end
conjugations["4b"] = function()
local forms = {}
local categories = {"Slovak class 4 verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (" .. PERF_FULL .. "; " .. IMPERS .. "class IV, pattern ''žať'')"
local stem = remove_reflexive_particle_and_suffix(PAGENAME, "ť")
local vowel_removed = get_last_char(stem)
stem = remove_reflexive_particle_and_suffix(stem, vowel_removed)
local stem2 = stem
local stem_last = get_last_char(stem)
if stem_last == "j" or stem_last == "ň" then
if ends_with_2_consonants(stem) then
stem2 = stem2 .. "í"
end
stem2 = stem2 .. "m"
elseif stem_last == "i" then
stem = remove_last_char(stem)
if mw.ustring.find(stem, "vz$") then
stem2 = "vez"
end
stem2 = stem2 .. "m"
else
stem2 = stem2 .. "n"
end
local pres_stem1 = soften_last_consonant(stem2) .. "e"
local pres_stem2 = stem2
local inf_stem = stem .. vowel_removed
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, pres_stem1, pres_stem2, "ú")
add_imperative_suffixes(forms, soften_last_consonant(pres_stem2))
set_participles_etc(forms, inf_stem, inf_stem, "t")
add_preterite_suffixes(forms, inf_stem)
return forms, title, categories
end
conjugations["4c"] = function()
local forms = {}
local categories = {"Slovak class 4 verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (" .. PERF_FULL .. "; " .. IMPERS .. "class IV, pattern ''chudnúť'')"
local stem = remove_reflexive_particle_and_suffix(PAGENAME, "ť")
stem = remove_reflexive_particle_and_suffix(stem, get_last_char(stem))
local pres_stem1 = soften_last_consonant(stem) .. "e"
local pres_stem2 = stem
local inf_stem = stem .. "u"
local inf_stem2 = remove_suffix(stem, "n")
if mw.ustring.find(stem, "ľn$") or stem == "usn" or stem == "hn" then
inf_stem2 = inf_stem2 .. "nu"
end
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, pres_stem1, pres_stem2, "ú")
add_imperative_suffixes(forms, soften_last_consonant(pres_stem2))
set_participles_etc(forms, inf_stem, inf_stem, "t")
add_preterite_suffixes(forms, inf_stem2)
return forms, title, categories
end
conjugations["4d"] = function(args)
local forms = {}
local categories = {"Slovak class 4 verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (" .. PERF_FULL .. "; " .. IMPERS .. "class IV, pattern ''žuť'')"
local stem = remove_reflexive_particle_and_suffix(PAGENAME, "ť")
local stem2 = stem
if mw.ustring.find(stem, "i[ae]$") then
if args[3] then
stem2 = remove_last_char(args[3])
else
stem2 = mw.ustring.sub(stem, 1, -3) .. "e"
end
else
-- for doublets kovať, žuvať and snovať
if args[3] then
stem2 = args[3]
end
end
local pres_stem1 = stem2 .. "je"
local pres_stem2 = stem2 .. "j"
local inf_stem = stem
if mw.ustring.find(stem, "ie$") then
inf_stem = stem2
end
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, pres_stem1, pres_stem2, "ú")
add_imperative_suffixes(forms, pres_stem2)
set_participles_etc(forms, inf_stem, inf_stem, "t")
add_preterite_suffixes(forms, inf_stem)
return forms, title, categories
end
conjugations["4e"] = function()
local forms = {}
local categories = {"Slovak class 4 verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (" .. PERF_FULL .. "; " .. IMPERS .. "class IV, pattern ''pracovať'')"
local stem = remove_reflexive_particle_and_suffix(PAGENAME, "ovať")
local pres_stem1 = stem .. "uje"
local pres_stem2 = stem .. "uj"
local inf_stem = stem .. "ova"
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, pres_stem1, pres_stem2, "ú")
add_imperative_suffixes(forms, pres_stem2)
set_participles_etc(forms, inf_stem, inf_stem, "n")
add_preterite_suffixes(forms, inf_stem)
return forms, title, categories
end
conjugations["5a"] = function()
local forms = {}
local categories = {"Slovak class 5 verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (" .. PERF_FULL .. "; " .. IMPERS .. "class V, pattern ''robiť'')"
local stem = remove_reflexive_particle_and_suffix(PAGENAME, "iť")
if mw.ustring.find(stem, "[dtnl]$") then
stem = soften_last_consonant(stem)
end
local pres_stem1 = stem .. "í"
if last_syllable_long(stem) then
pres_stem1 = shorten_last_vowel(pres_stem1)
end
local pres_stem2 = stem
local inf_stem = stem .. "i"
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, pres_stem1, pres_stem2, "ia")
add_imperative_suffixes(forms, pres_stem2)
set_participles_etc(forms, inf_stem, pres_stem2, "en")
add_preterite_suffixes(forms, inf_stem)
return forms, title, categories
end
conjugations["5b"] = function()
local forms = {}
local categories = {"Slovak class 5 verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (" .. PERF_FULL .. "; " .. IMPERS .. "class V, pattern ''vidieť'')"
local stem = remove_reflexive_particle_and_suffix(PAGENAME, "ieť")
if mw.ustring.find(stem, "[dtnl]$") then
stem = soften_last_consonant(stem)
end
local pres_stem1 = stem .. "í"
local pres_stem2 = stem
local inf_stem = stem .. "e"
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, pres_stem1, pres_stem2, "ia")
add_imperative_suffixes(forms, pres_stem2)
set_participles_etc(forms, inf_stem, inf_stem, "n")
add_preterite_suffixes(forms, inf_stem)
return forms, title, categories
end
conjugations["5c"] = function()
local forms = {}
local categories = {"Slovak class 5 verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (" .. PERF_FULL .. "; " .. IMPERS .. "class V, pattern ''kričať'')"
local stem = remove_reflexive_particle_and_suffix(PAGENAME, "ať")
local pres_stem1 = stem .. "í"
local pres_stem2 = stem
local inf_stem = stem .. "a"
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, pres_stem1, pres_stem2, "ia")
add_imperative_suffixes(forms, pres_stem2)
set_participles_etc(forms, inf_stem, inf_stem, "n")
add_preterite_suffixes(forms, inf_stem)
return forms, title, categories
end
conjugations["irreg-byť"] = function()
-- irregular, only for verbs derived from byť
local forms = {}
local categories = {"Slovak irregular verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (irregular)"
local prefix = remove_suffix(remove_reflexive_particle_and_suffix(PAGENAME, ""), "byť")
forms["infinitive"] = PAGENAME
forms["pres_futr_1sg"] = prefix .. "som"
forms["pres_futr_2sg"] = prefix .. "si"
forms["pres_futr_3sg"] = prefix .. "je"
forms["pres_futr_1pl"] = prefix .. "sme"
forms["pres_futr_2pl"] = prefix .. "ste"
forms["pres_futr_3pl"] = prefix .. "sú"
add_imperative_suffixes(forms, prefix .. "buď")
set_participles_etc(forms, prefix .. "by", prefix .. "by", "t")
forms["pres_pasv_part"] = ""
add_preterite_suffixes(forms, prefix .. "bo")
return forms, title, categories
end
conjugations["irreg-jesť"] = function()
-- irregular, only for verbs derived from jesť
local forms = {}
local categories = {"Slovak irregular verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (irregular)"
local prefix = remove_suffix(remove_reflexive_particle_and_suffix(PAGENAME, ""), "jesť")
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, prefix .. "je", prefix .. "jed", "ia")
add_imperative_suffixes(forms, prefix .. "jedz")
set_participles_etc(forms, nil, prefix .. "jed", "en")
forms["past_actv_part"] = ""
add_preterite_suffixes(forms, prefix .. "jed")
return forms, title, categories
end
conjugations["irreg-vedieť"] = function()
-- irregular, only for verbs derived from vedieť
local forms = {}
local categories = {"Slovak irregular verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (irregular)"
local prefix = remove_suffix(remove_reflexive_particle_and_suffix(PAGENAME, ""), "vedieť")
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, prefix .. "vie", prefix .. "ved", "ia")
if prefix == "" then
add_imperative_suffixes(forms, "vedz")
else
add_imperative_suffixes(forms, prefix .. "veď")
end
set_participles_etc(forms, prefix .. "vede", prefix .. "vede", "n")
add_preterite_suffixes(forms, prefix .. "vede")
return forms, title, categories
end
conjugations["irreg-chcieť"] = function()
-- irregular, only for verbs derived from chcieť
local forms = {}
local categories = {"Slovak irregular verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (irregular)"
local prefix = remove_suffix(remove_reflexive_particle_and_suffix(PAGENAME, ""), "chcieť")
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, prefix .. "chce", prefix .. "chc", "ú")
add_imperative_suffixes(forms, prefix .. "chc")
set_participles_etc(forms, prefix .. "chce", prefix .. "chce", "n")
forms["transgr"] = prefix .. "chcejúc"
forms["pres_actv_part"] = forms["transgr"] .. "i"
add_preterite_suffixes(forms, prefix .. "chce")
return forms, title, categories
end
conjugations["irreg-ísť"] = function()
-- irregular, only for verbs derived from ísť
local forms = {}
local categories = {"Slovak irregular verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (irregular)"
local prefix = remove_suffix(remove_reflexive_particle_and_suffix(PAGENAME, ""), "sť")
if prefix == "í" then prefix = "i" end
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, prefix .. "de", prefix .. "d", "ú")
add_imperative_suffixes(forms, prefix .. "ď")
set_participles_etc(forms, nil, prefix .. "de", "n")
local preterite_stem = shorten_last_vowel(remove_suffix(prefix, "j")) .. "š"
add_preterite_suffixes(forms, preterite_stem)
forms["past_m"] = preterite_stem .. "iel"
return forms, title, categories
end
conjugations["irreg-stáť"] = function()
-- irregular, only for verbs derived from stáť or báť sa
local forms = {}
local categories = {"Slovak irregular verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (irregular)"
local prefix = remove_suffix(remove_reflexive_particle_and_suffix(PAGENAME, ""), "áť")
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, prefix .. "ojí", prefix .. "oj", "ia")
add_imperative_suffixes(forms, prefix .. "oj")
set_participles_etc(forms, prefix .. "á", prefix .. "á", "t")
add_preterite_suffixes(forms, prefix .. "á")
return forms, title, categories
end
conjugations["irreg-stať"] = function()
-- irregular, only for verbs derived from stať (sa)
local forms = {}
local categories = {"Slovak irregular verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (irregular)"
local prefix = remove_suffix(remove_reflexive_particle_and_suffix(PAGENAME, ""), "stať")
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, prefix .. "stane", prefix .. "stan", "ú")
add_imperative_suffixes(forms, prefix .. "staň")
set_participles_etc(forms, prefix .. "sta", prefix .. "sta", "n")
add_preterite_suffixes(forms, prefix .. "sta")
return forms, title, categories
end
conjugations["irreg-môcť"] = function(args)
-- officially regular according to the pattern niesť
local forms = {}
local categories = {"Slovak class 3 verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (" .. PERF_FULL .. "; " .. IMPERS .. "class III, pattern ''niesť'')"
local prefix = remove_suffix(remove_reflexive_particle_and_suffix(PAGENAME, ""), "môcť")
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, prefix .. "môže", prefix .. "môž", "ú")
set_participles_etc(forms, nil, prefix .. "može", "n")
if prefix ~= "" then
add_imperative_suffixes(forms, prefix .. "môž")
else
forms["pres_actv_part"] = ""
forms["pres_pasv_part"] = ""
end
add_preterite_suffixes(forms, prefix .. "moh")
return forms, title, categories
end
conjugations["irreg-povedať"] = function()
-- irregular, only for perfective verbs derived from -vedať
local forms = {}
local categories = {"Slovak irregular verbs"}
local title = "Conjugation of ''" .. PAGENAME .. "'' (irregular)"
local prefix = remove_suffix(remove_reflexive_particle_and_suffix(PAGENAME, ""), "vedať")
forms["infinitive"] = PAGENAME
add_present_suffixes(forms, prefix .. "vie", prefix .. "ved", "ia")
add_imperative_suffixes(forms, prefix .. "vedz")
set_participles_etc(forms, prefix .. "veda", prefix .. "veda", "n")
add_preterite_suffixes(forms, prefix .. "veda")
return forms, title, categories
end
--[=[
Partial conjugation functions
]=]--
function get_last_char(str)
local last = mw.ustring.sub(str, -1, -1)
return last
end
function remove_last_char(str)
local stem = mw.ustring.sub(str, 1, -2)
return stem
end
function remove_diacritics(str)
local new_string = str
new_string = mw.ustring.gsub(new_string, "č", "cj")
new_string = mw.ustring.gsub(new_string, "ď", "dj")
new_string = mw.ustring.gsub(new_string, "dž", "dzj")
new_string = mw.ustring.gsub(new_string, "ľ", "lj")
new_string = mw.ustring.gsub(new_string, "ň", "nj")
new_string = mw.ustring.gsub(new_string, "š", "sj")
new_string = mw.ustring.gsub(new_string, "ť", "tj")
new_string = mw.ustring.gsub(new_string, "ž", "zj")
return new_string
end
function soften_last_consonant(str)
local consonants = {
c = "č",
d = "ď",
l = "ľ",
n = "ň",
s = "š",
t = "ť",
z = "ž"
}
local last = get_last_char(str)
local new_string = str
if consonants[last] then
new_string = remove_last_char(str) .. consonants[last]
end
return new_string
end
function soften_last_given_consonant(str, consonants)
local new_string = str
if mw.ustring.find(str, "[" .. consonants .. "]$") then
new_string = soften_last_consonant(str)
end
return new_string
end
function shorten_last_vowel(str)
local last = get_last_char(str)
last = mw.ustring.gsub(last, "á", "a")
last = mw.ustring.gsub(last, "é", "e")
last = mw.ustring.gsub(last, "í", "i")
last = mw.ustring.gsub(last, "ó", "o")
last = mw.ustring.gsub(last, "ú", "u")
last = mw.ustring.gsub(last, "ý", "y")
local new_string = remove_last_char(str) .. last
return new_string
end
function ends_with_2_consonants(str)
local cond = false
if mw.ustring.find(str, "[bcčdďfghjklľmnňpqrsštťvwxzž][bcčdďfghjklľmnňpqrsštťvwxzž]$") and not mw.ustring.find(str, "ch$") and not mw.ustring.find(str, "d[zž]$") then
cond = true
end
return cond
end
function ends_with_sylabic_cons_cluster(str)
local cond = false
if mw.ustring.find(str, "[bcčdďfghjkľmnňpqsštťvwxzž][rl][bcčdďfghjkľmnňpqysštťvwxzž]$") then
cond = true
end
return cond
end
function remove_suffix(form, suffix)
local base = form
if mw.ustring.find(base, suffix .. "$") then
local length = mw.ustring.len(suffix)
base = mw.ustring.sub(base, 1, -length-1)
end
return base
end
function last_vowel(stem)
local vowel = nil
local letter = nil;
--TODO: syllabic r?
if (mw.ustring.find(stem, "[áéíóúýĺŕôaeiouyä]")) then
for i=1,mw.ustring.len(stem) do
letter = mw.ustring.sub(stem, -i, -i)
if (mw.ustring.find(letter, "[áéíóúýĺŕôaeiouyä]")) then
if (mw.ustring.find(letter, "[aeu]") and mw.ustring.sub(stem, -i-1, -i-1) == "i") then
vowel = "i" .. letter
else
vowel = letter
end
break
end
end
end
return vowel
end
function last_syllable_long(stem)
local is_long = false
local last_vowel = last_vowel(stem)
if last_vowel then
if (mw.ustring.find(last_vowel, "[áéíóúýĺŕô]") or mw.ustring.find(last_vowel, "i[aeu]")) then
is_long = true
end
end
return is_long
end
function get_reflexive_particle(inf)
local particle = ""
if mw.ustring.find(inf, " s[ai]$") then
particle = mw.ustring.sub(inf, -2, -1)
end
return particle
end
function remove_reflexive_particle_and_suffix(inf, suffix)
local stem = null
if mw.ustring.find(inf, " s[ai]$") then
stem = remove_suffix(inf, suffix .. " " .. get_reflexive_particle(inf))
else
stem = remove_suffix(inf, suffix)
end
return stem
end
function repl_dtnl_ei(str)
local new_string = str
new_string = mw.ustring.gsub(new_string, "ďe", "de")
new_string = mw.ustring.gsub(new_string, "ťe", "te")
new_string = mw.ustring.gsub(new_string, "ňe", "ne")
new_string = mw.ustring.gsub(new_string, "ľe", "le")
new_string = mw.ustring.gsub(new_string, "ďi", "di")
new_string = mw.ustring.gsub(new_string, "ťi", "ti")
new_string = mw.ustring.gsub(new_string, "ňi", "ni")
new_string = mw.ustring.gsub(new_string, "ľi", "li")
new_string = mw.ustring.gsub(new_string, "ďé", "dé")
new_string = mw.ustring.gsub(new_string, "ťé", "té")
new_string = mw.ustring.gsub(new_string, "ňé", "né")
new_string = mw.ustring.gsub(new_string, "ľé", "lé")
new_string = mw.ustring.gsub(new_string, "ďí", "dí")
new_string = mw.ustring.gsub(new_string, "ťí", "tí")
new_string = mw.ustring.gsub(new_string, "ňí", "ní")
new_string = mw.ustring.gsub(new_string, "ľí", "lí")
return new_string
end
function add_present_suffixes(forms, stem1, stem2, stem2suffix)
local suffix2 = stem2suffix
if last_syllable_long(stem2) and suffix2 == "ú" then
suffix2 = "u"
elseif mw.ustring.find(stem2, "j$") and suffix2 == "ia" then
suffix2 = "a"
end
local stem1_dtnl = repl_dtnl_ei(stem1)
forms["pres_futr_1sg"] = stem1_dtnl .. "m"
forms["pres_futr_2sg"] = stem1_dtnl .. "š"
forms["pres_futr_3sg"] = stem1_dtnl
forms["pres_futr_1pl"] = stem1_dtnl .. "me"
forms["pres_futr_2pl"] = stem1_dtnl .. "te"
forms["pres_futr_3pl"] = repl_dtnl_ei(stem2 .. suffix2)
end
function add_imperative_suffixes(forms, stem)
local st = stem
local extra_i = ""
if ends_with_2_consonants(st) and not ends_with_sylabic_cons_cluster(st) then
extra_i = "i"
end
if mw.ustring.find(st, "[iy]j$") then
st = remove_suffix(st, "j")
end
forms["impr_2sg"] = repl_dtnl_ei(st .. extra_i)
forms["impr_1pl"] = repl_dtnl_ei(st .. extra_i .. "me")
forms["impr_2pl"] = repl_dtnl_ei(st .. extra_i .. "te")
end
function add_preterite_suffixes(forms, stem)
local extra_o = ""
if mw.ustring.find(stem, "[bcčdďfghjklĺmnňpqrsštťvwxzž]$") then
extra_o = "o"
end
local stem_dtnl = repl_dtnl_ei(stem)
forms["past_m"] = stem_dtnl .. extra_o .. "l"
forms["past_f"] = stem_dtnl .. "la"
forms["past_n"] = stem_dtnl .. "lo"
forms["past_pl"] = stem_dtnl .. "li"
end
function set_participles_etc(forms, stem1, stem2, pas_part_suffix)
forms["pres_actv_part"] = forms["pres_futr_3pl"] .. "ci"
if stem1 == nil then
forms["past_actv_part"] = ""
else
forms["past_actv_part"] = repl_dtnl_ei(stem1 .. "vší")
end
if last_syllable_long(stem2 .. pas_part_suffix) then
forms["pres_pasv_part"] = repl_dtnl_ei(stem2 .. pas_part_suffix .. "y")
else
forms["pres_pasv_part"] = repl_dtnl_ei(stem2 .. pas_part_suffix .. "ý")
end
forms["transgr"] = forms["pres_futr_3pl"] .. "c"
forms["gerund"] = repl_dtnl_ei(stem2 .. pas_part_suffix .. "ie")
end
function create_composite(form, inf, tense, mood, person, gender, impers)
impers = impers or false
gender = gender or "p"
local byt_pres = {" [[som#Slovak|som]]", " [[si#Slovak|si]]", "", " [[sme#Slovak|sme]]", " [[ste#Slovak|ste]]", ""}
local bol_gend = {m="[[bol#Slovak|bol]]", f="[[bola#Slovak|bola]]", n="[[bolo#Slovak|bolo]]", p="[[boli#Slovak|boli]]"}
local bude = {"[[budem#Slovak|budem]]", "[[budeš#Slovak|budeš]]", "[[bude#Slovak|bude]]", "[[budeme#Slovak|budeme]]", "[[budete#Slovak|budete]]", "[[budú#Slovak|budú]]"}
local bude_nl = {"budem", "budeš", "bude", "budeme", "budete", "budú"}
local byval = {m="býval", f="bývala", n="bývalo", p="bývali"}
local pojde = {"pôjdem", "pôjdeš", "pôjde", "pôjdeme", "pôjdete", "pôjdu"}
local by = " [[by#Slovak|by]]"
local refl = ""
if mw.ustring.find(inf, " s[ai]$") then refl = " " .. get_reflexive_particle(inf) end
local refl_space = refl .. " "
if person > 3 then gender = "p" end
if inf == "byť" and mood == "cond" and (tense == "past" or tense == "past perfect") then
form = byval[gender]
end
local accel_form = ""
if tense == "past" and mood == "ind" and person % 3 == 0 then
if person == 3 then
accel_form = gender .. "|3|s|past|ind"
elseif person == 6 then
accel_form = "3|p|past|ind"
end
elseif gender == "p" then
accel_form = "p|l-ptcp"
else
accel_form = gender .. "|s|l-ptcp"
end
if tense ~= "fut" then form = make_link(form, accel_form) end
local result = nil
if tense == "past" then
if mood == "ind" then
result = form .. byt_pres[person] .. refl
elseif mood == "cond" then
result = bol_gend[gender] .. by .. byt_pres[person] .. refl_space .. form
end
elseif tense == "past perfect" and mood == "ind" then
result = bol_gend[gender] .. byt_pres[person] .. refl_space .. form
elseif tense == "present" and mood == "cond" then
result = form .. by .. byt_pres[person] .. refl
elseif tense == "fut" then
if inf == "ísť" then
result = make_link(pojde[person], (((person - 1) % 3) + 1) .. "|" .. ((person <= 3) and "s" or "p") .. "|fut|ind")
elseif inf == "byť" then
result = make_link(bude_nl[person], (((person - 1) % 3) + 1) .. "|" .. ((person <= 3) and "s" or "p") .. "|fut|ind")
elseif impers and person ~= 3 then
result = "—"
else
result = bude[person] .. refl_space .. remove_suffix(inf, refl)
end
end
return result
end
-- Add the reflexive particle to all verb forms
function make_reflexive(forms)
for key, form in pairs(forms) do
if form ~= "" and not mw.ustring.find(form, " s[ai]$") and not mw.ustring.find(key, "past_[mfnp]") and not mw.ustring.find(key, "pres_pasv_part") then
forms[key] = form .. " " .. get_reflexive_particle(forms["infinitive"])
end
end
end
function make_link(link, accel_form)
local new_link = link
-- Check if the link ends with " sa" or " si"
local ending = get_reflexive_particle(link)
if #ending > 0 then
-- Remove the ending from the link
link = remove_suffix(link, " " .. ending)
end
-- If link is not empty, valid, and not "—", create the full link
if link ~= "" and link and link ~= "—" then
new_link = m_links.full_link({lang = lang, term = link, accel = {form = accel_form}})
end
if #ending > 0 then
new_link = new_link .. " " .. ending
end
return new_link
end
function convert_to_accel(input)
-- Define mappings for person, number, tense, mood, and other specific cases
local mood_map = {
pres = "ind",
futr = "ind",
impr = "imp"
}
local tense_map = {
pres = "pres",
futr = "fut",
impr = "pres" -- For imperative, tense is always present
}
-- Handle special cases
local special_cases = {
["pres_actv_part"] = "pres|act|part",
["past_actv_part"] = "past|act|part", -- Assuming 'past' is passive
["pres_pasv_part"] = "pasv|part",
["past_m"] = "m|s|l-ptcp",
["transgr"] = "transgressive",
["gerund"] = "vnoun"
}
-- Check if the input matches any special case
if special_cases[input] then
return special_cases[input]
end
-- Otherwise, proceed with regular tense/mood parsing
local tense_mood, person_number = input:match("([a-z]+)_([0-9]+[sp]+)")
-- Extract person and number
local person = person_number:match("([1-3])")
local number = person_number:match("([sp])")
-- Convert tense/mood
local tense = tense_map[tense_mood]
local mood = mood_map[tense_mood]
-- Format the result as "person|number|(tense)|mood"
if tense_mood == "impr" then
return string.format("%s|%s|%s", person, number, mood)
else
return string.format("%s|%s|%s|%s", person, number, tense, mood)
end
end
function check_add_alt(forms, id, impers)
local accel_form = convert_to_accel(id)
local result = make_link(forms[id], accel_form)
if id == "past_m" and impers then
result = make_link(forms["past_n"])
if forms["past_n2"] then result = result .. ",<br />" .. make_link(forms["past_n2"], accel_form) end
elseif id == "past_m" then
result = make_link(forms[id], accel_form) .. ", "
.. make_link(forms["past_f"], "f|s|l-ptcp") .. ", "
.. make_link(forms["past_n"], "n|s|l-ptcp") .. ", "
.. make_link(forms["past_pl"], "p|l-ptcp")
if forms[id .. "2"] and forms["past_f2"] and forms["past_n2"] and forms["past_pl2"] then
result = result .. "<br />" .. make_link(forms[id .. "2"], accel_form) .. ", "
.. make_link(forms["past_f2"], "f|s|l-ptcp") .. ", "
.. make_link(forms["past_n2"], "n|s|l-ptcp") .. ", "
.. make_link(forms["past_pl2"], "p|l-ptcp")
end
else
if forms[id .. "2"] then result = result .. ",<br />" .. make_link(forms[id .. "2"], accel_form) end
end
return result
end
function check_add_alt_comp(forms, tense, mood, gender, person)
local result = ""
result = create_composite(forms["past_" .. gender], forms["infinitive"], tense, mood, person, gender)
if forms["past_" .. gender .. "2"] then
result = result .. ",<br />" .. create_composite(forms["past_" .. gender .. "2"], forms["infinitive"], tense, mood, person, gender)
end
return result
end
function make_table_header(title)
local header = [=[<div class="NavFrame">
<div class="NavHead">]=] .. title .. [=[</div>
<div class="NavContent">
<table style="text-align:center; width:100%" class="inflection-table">]=]
return header
end
function make_simple_row(label, form)
local row = [=[<tr style="height:2em;">
<th colspan="3" style="background:#d0d0d0;">]=] .. label .. [=[</th>
<td colspan="5"><span lang=\"sk\">''']=] .. form .. [=['''</span></td>
</tr>]=]
return row
end
function make_mood_header(mood, colour)
local header = [=[<tr>
<th colspan="2" rowspan="2" style="background:]=] .. colour .. [=[">]=] .. mood .. [=[</th>
<th colspan="3" style="background:]=] .. colour .. [=[">''singular''</th>
<th colspan="3" style="background:]=] .. colour .. [=[">''plural''</th>
</tr>
<tr>
<th style="background:]=] .. colour .. [=[">[[first person|first]]</th>
<th style="background:]=] .. colour .. [=[">[[second person|second]]</th>
<th style="background:]=] .. colour .. [=[">[[third person|third]]</th>
<th style="background:]=] .. colour .. [=[">[[first person|first]]</th>
<th style="background:]=] .. colour .. [=[">[[second person|second]]</th>
<th style="background:]=] .. colour .. [=[">[[third person|third]]</th>
</tr>]=]
return header
end
function make_indecl_header(colour)
local header = [=[<tr>
<th colspan="2" rowspan="3" style="background:]=] .. colour .. [=[">non-finite forms</th>
<th colspan="4" style="background:]=] .. colour .. [=[">participles</th>
<th rowspan="2" style="background:]=] .. colour .. [=[">transgressive</th>
<th rowspan="2" style="background:]=] .. colour .. [=[">verbal noun</th>
</tr>
<tr>
<th style="background:]=] .. colour .. [=[">present active</th>
<th style="background:]=] .. colour .. [=[">past active</th>
<th style="background:]=] .. colour .. [=[">passive</th>
<th style="background:]=] .. colour .. [=[">l-participle</th>
</tr>]=]
return header
end
function make_full_row(tense, colour, form1, form2, form3, form4, form5, form6)
local first_col = ""
if tense ~= "non-finite" then
first_col = [=[<th colspan="2" style="background:]=] .. colour .. [=[; width:7em">]=] .. tense .. [=[</th>]=]
end
local row = [=[<tr>]=]
.. first_col ..
[=[<td><span lang=\"sk\">]=] .. form1 .. [=[</span></td>
<td><span lang=\"sk\">]=] .. form2 .. [=[</span></td>
<td><span lang=\"sk\">]=] .. form3 .. [=[</span></td>
<td><span lang=\"sk\">]=] .. form4 .. [=[</span></td>
<td><span lang=\"sk\">]=] .. form5 .. [=[</span></td>
<td><span lang=\"sk\">]=] .. form6 .. [=[</span></td>
</tr>]=]
row = row .. add_row_separator()
return row
end
function add_row_separator()
if #IMPERS > 0 then
return ""
else
return "<tr style=\"height: 0px;\"><td colspan=\"8\" style=\"height: 0px; padding: 0;\"></td></tr>"
end
end
function make_full_row_comp(tense, colour, forms, mood, impers)
local row = ""
if impers then
row = make_full_row(tense, colour, "—", "—", check_add_alt_comp(forms, tense, mood, "n", 3), "—", "—", "—")
else
row = [=[<tr style="line-height: 1.2;">
<th rowspan="3" style="background:]=] .. colour .. [=[; width:7em">]=] .. tense .. [=[</th>
<th style="background:]=] .. colour .. [=[; width:7em; padding-bottom: 0;">masculine</th>
<td><span lang=\"sk\">]=] .. check_add_alt_comp(forms, tense, mood, "m", 1) .. [=[</span></td>
<td><span lang=\"sk\">]=] .. check_add_alt_comp(forms, tense, mood, "m", 2) .. [=[</span></td>
<td><span lang=\"sk\">]=] .. check_add_alt_comp(forms, tense, mood, "m", 3) .. [=[</span></td>
<td rowspan="3"><span lang=\"sk\">]=] .. check_add_alt_comp(forms, tense, mood, "pl", 4) .. [=[</span></td>
<td rowspan="3"><span lang=\"sk\">]=] .. check_add_alt_comp(forms, tense, mood, "pl", 5) .. [=[</span></td>
<td rowspan="3"><span lang=\"sk\">]=] .. check_add_alt_comp(forms, tense, mood, "pl", 6) .. [=[</span></td>
</tr>
<tr style="line-height: 1.2;">
<th style="background:]=] .. colour .. [=[; width:7em; padding-top: 0; padding-bottom: 0;"">feminine</th>
<td><span lang=\"sk\">]=] .. check_add_alt_comp(forms, tense, mood, "f", 1) .. [=[</span></td>
<td><span lang=\"sk\">]=] .. check_add_alt_comp(forms, tense, mood, "f", 2) .. [=[</span></td>
<td><span lang=\"sk\">]=] .. check_add_alt_comp(forms, tense, mood, "f", 3) .. [=[</span></td>
</tr>
<tr style="line-height: 1.2;">
<th style="background:]=] .. colour .. [=[; width:7em; padding-top: 0;">neuter</th>
<td><span lang=\"sk\">]=] .. check_add_alt_comp(forms, tense, mood, "n", 1) .. [=[</span></td>
<td><span lang=\"sk\">]=] .. check_add_alt_comp(forms, tense, mood, "n", 2) .. [=[</span></td>
<td><span lang=\"sk\">]=] .. check_add_alt_comp(forms, tense, mood, "n", 3) .. [=[</span></td>
</tr>]=]
row = row .. add_row_separator()
end
return row
end
function make_table_footer()
local header = [=[</table></div></div>]=]
return header
end
-- Make the table
function make_table(forms, title, cats, params)
if cats["impers"] then
forms["pres_futr_1sg"] = ""
forms["pres_futr_2sg"] = ""
forms["pres_futr_1pl"] = ""
forms["pres_futr_2pl"] = ""
forms["pres_futr_3pl"] = ""
forms["past_m"] = ""
forms["past_f"] = ""
forms["past_pl"] = ""
forms["pres_actv_part"] = ""
forms["past_actv_part"] = ""
forms["transgr"] = ""
forms["impr_2sg"] = ""
forms["impr_1pl"] = ""
forms["impr_2pl"] = ""
--alternatives
forms["pres_futr_1sg2"] = nil
forms["pres_futr_2sg2"] = nil
forms["pres_futr_1pl2"] = nil
forms["pres_futr_2pl2"] = nil
forms["pres_futr_3pl2"] = nil
forms["past_m2"] = nil
forms["past_m3"] = nil
forms["past_f2"] = nil
forms["past_pl2"] = nil
forms["pres_actv_part2"] = nil
forms["past_actv_part2"] = nil
forms["transgr2"] = nil
forms["impr_2sg"] = nil
forms["impr_1pl"] = nil
forms["impr_2pl"] = nil
end
-- Perfective verbs have no present forms.
if cats["perf"] then
forms["pres_actv_part"] = ""
forms["pres_1sg"] = ""
forms["pres_2sg"] = ""
forms["pres_3sg"] = ""
forms["pres_1pl"] = ""
forms["pres_2pl"] = ""
forms["pres_3pl"] = ""
--alternatives
forms["pres_actv_part2"] = nil
forms["pres_1sg2"] = nil
forms["pres_2sg2"] = nil
forms["pres_3sg2"] = nil
forms["pres_1pl2"] = nil
forms["pres_2pl2"] = nil
forms["pres_3pl2"] = nil
forms["futr_1sg"] = forms["pres_futr_1sg"]
forms["futr_2sg"] = forms["pres_futr_2sg"]
forms["futr_3sg"] = forms["pres_futr_3sg"]
forms["futr_1pl"] = forms["pres_futr_1pl"]
forms["futr_2pl"] = forms["pres_futr_2pl"]
forms["futr_3pl"] = forms["pres_futr_3pl"]
-- alternatives
forms["futr_1sg2"] = forms["pres_futr_1sg2"]
forms["futr_2sg2"] = forms["pres_futr_2sg2"]
forms["futr_3sg2"] = forms["pres_futr_3sg2"]
forms["futr_1pl2"] = forms["pres_futr_1pl2"]
forms["futr_2pl2"] = forms["pres_futr_2pl2"]
forms["futr_3pl2"] = forms["pres_futr_3pl2"]
else
forms["past_actv_part"] = ""
forms["pres_1sg"] = forms["pres_futr_1sg"]
forms["pres_2sg"] = forms["pres_futr_2sg"]
forms["pres_3sg"] = forms["pres_futr_3sg"]
forms["pres_1pl"] = forms["pres_futr_1pl"]
forms["pres_2pl"] = forms["pres_futr_2pl"]
forms["pres_3pl"] = forms["pres_futr_3pl"]
forms["pres_2sg"] = forms["pres_futr_2sg"]
-- alternatives
forms["pres_1sg2"] = forms["pres_futr_1sg2"]
forms["pres_2sg2"] = forms["pres_futr_2sg2"]
forms["pres_3sg2"] = forms["pres_futr_3sg2"]
forms["pres_1pl2"] = forms["pres_futr_1pl2"]
forms["pres_2pl2"] = forms["pres_futr_2pl2"]
forms["pres_3pl2"] = forms["pres_futr_3pl2"]
end
if cats["impers"] then
forms["futr_1sg"] = ""
forms["futr_2sg"] = ""
forms["futr_1pl"] = ""
forms["futr_2pl"] = ""
forms["futr_3pl"] = ""
--alternatives
forms["futr_1sg2"] = nil
forms["futr_2sg2"] = nil
forms["futr_1pl2"] = nil
forms["futr_2pl2"] = nil
forms["futr_3pl2"] = nil
end
local inf = forms["infinitive"]
for key, form in pairs(forms) do
-- check for empty strings and nil's
if form == "" or not form then
forms[key] = "—"
end
end
local final = make_table_header(title)
final = final .. make_simple_row("infinitive", inf)
final = final .. make_mood_header("indicative", "#A0ADE3")
if not cats["perf"] then
final = final .. make_full_row(
"present",
"#C0CFE4",
check_add_alt(forms, "pres_1sg", cats["impers"]),
check_add_alt(forms, "pres_2sg", cats["impers"]),
check_add_alt(forms, "pres_3sg", cats["impers"]),
check_add_alt(forms, "pres_1pl", cats["impers"]),
check_add_alt(forms, "pres_2pl", cats["impers"]),
check_add_alt(forms, "pres_3pl", cats["impers"])
)
end
final = final .. make_full_row_comp("past", "#C0CFE4", forms, "ind", cats["impers"])
final = final .. make_full_row_comp("past perfect", "#C0CFE4", forms, "ind", cats["impers"])
if cats["perf"] then
final = final .. make_full_row(
"future",
"#C0CFE4",
check_add_alt(forms, "futr_1sg", cats["impers"]),
check_add_alt(forms, "futr_2sg", cats["impers"]),
check_add_alt(forms, "futr_3sg", cats["impers"]),
check_add_alt(forms, "futr_1pl", cats["impers"]),
check_add_alt(forms, "futr_2pl", cats["impers"]),
check_add_alt(forms, "futr_3pl", cats["impers"])
)
else
final = final .. make_full_row(
"future",
"#C0CFE4",
create_composite(nil, inf, "fut", nil, 1, nil, cats["impers"]),
create_composite(nil, inf, "fut", nil, 2, nil, cats["impers"]),
create_composite(nil, inf, "fut", nil, 3, nil, cats["impers"]),
create_composite(nil, inf, "fut", nil, 4, nil, cats["impers"]),
create_composite(nil, inf, "fut", nil, 5, nil, cats["impers"]),
create_composite(nil, inf, "fut", nil, 6, nil, cats["impers"])
)
end
final = final .. make_mood_header("conditional", "#A7D8B8")
final = final .. make_full_row_comp("present", "#B2E8A6", forms, "cond", cats["impers"])
final = final .. make_full_row_comp("past", "#B2E8A6", forms, "cond", cats["impers"])
if (forms["impr_2sg"] and forms["impr_1pl"] and forms["impr_2pl"] and not params["no_impr"] and not cats["impers"]) then
final = final .. make_mood_header("imperative", "#F4A7A7")
final = final .. make_full_row(
"present",
"#F7B2B7",
"—",
check_add_alt(forms, "impr_2sg", cats["impers"]),
"—",
check_add_alt(forms, "impr_1pl", cats["impers"]),
check_add_alt(forms, "impr_2pl", cats["impers"]),
"—"
)
end
local pasv_part_final, gerund_final = "—", "—"
if not params["no_pasv_part"] and (not cats["refl"] or params["pasv_part"]) and (not cats["impers"] or cats["perf"] or params["pasv_part"]) then
pasv_part_final = check_add_alt(forms, "pres_pasv_part", cats["impers"])
end
if not params["no_gerund"] then
gerund_final = check_add_alt(forms, "gerund", cats["impers"])
end
final = final .. make_indecl_header("#F3F781")
final = final .. make_full_row(
"non-finite",
"#F2F5A9",
check_add_alt(forms, "pres_actv_part", cats["impers"]),
check_add_alt(forms, "past_actv_part", cats["impers"]),
pasv_part_final,
check_add_alt(forms, "past_m", cats["impers"]),
check_add_alt(forms, "transgr", cats["impers"]),
gerund_final
)
final = final .. make_table_footer()
return final
end
return export