Module:User:Ignatus/ru-verb/sandbox
Appearance
- This module sandbox lacks a documentation subpage. You may create it.
- Useful links: root page • root page’s subpages • links • transclusions • testcases • user page • user talk page • userspace
This is a private module sandbox of Ignatus, for his own experimentation. Items in this module may be added and removed at Ignatus's discretion; do not rely on this module's stability.
--[=[
This module contains functions for creating inflection tables for Russian
verbs.
]=]--
local com = require("Module:ru-common")
local translit = require("Module:ru-translit")
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 = {}
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
local conj_type = frame.args[1] or error("Conjugation type has not been specified. Please pass parameter 1 to the module invocation")
local args = frame:getParent().args
PAGENAME = mw.title.getCurrentTitle().text
NAMESPACE = mw.title.getCurrentTitle().nsText
-- Verb type, one of impf, pf, impf-intr, pf-intr, impf-refl, pf-refl.
-- 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 (first parameter) has not been provided")
-- verbs may have reflexive ending stressed in the masculine singular: занялся́, начался́, etc.
local reflex_stress = args["reflex_stress"] -- "ся́"
local forms, title, categories
if conjugations[conj_type] then
forms, title, categories = conjugations[conj_type](args)
else
error("Unknown conjugation type '" .. conj_type .. "'")
end
local intr = (verb_type == "impf-intr" or verb_type == "pf-intr" or verb_type == "pf-impers" or verb_type == "impf-impers" or verb_type == "pf-impers-refl" or verb_type == "impf-impers-refl")
local refl = (verb_type == "impf-refl" or verb_type == "pf-refl" or verb_type == "pf-impers-refl" or verb_type == "impf-impers-refl")
local perf = (verb_type == "pf" or verb_type == "pf-intr" or verb_type == "pf-refl" or verb_type == "pf-impers" or verb_type == "pf-impers-refl")
--impersonal
local impers = (verb_type == "pf-impers" or verb_type == "impf-impers" or verb_type == "pf-impers-refl" or verb_type == "impf-impers-refl")
-- Perfective/imperfective
if perf then
table.insert(categories, "Russian perfective verbs")
else
table.insert(categories, "Russian imperfective verbs")
end
-- call alternative reflexive form to add a stressed "ся́" particle
if reflex_stress then
make_reflexive_alt(forms)
end
-- Reflexive/intransitive/transitive
if refl then
make_reflexive(forms)
table.insert(categories, "Russian reflexive verbs")
elseif intr then
table.insert(categories, "Russian intransitive verbs")
else
table.insert(categories, "Russian transitive verbs")
end
-- Impersonal
if impers then
table.insert(categories, "Russian impersonal verbs")
end
local ret=''
if NAMESPACE == "" then
local sort_key = com.sort_key(PAGENAME)
ret = "[[Category:" .. table.concat( categories , "|"..sort_key.."]]\n[[Category:" ) .. ']]'
end
return make_table(forms, title, perf, intr or refl, impers) .. ret
end
-- Auxiliary function to build piece of paradigm
function specforms(forms, spec, pref)
-- spec is a string in format "pres_actv_part=ющий pres_pasv_part=емый"
-- pref is optional
for k,e,v in spec:gmatch('([^%s=]+)(%=?)(%S*)') do
forms[k] = e~='' and (pref or '')..v or nil
end
end
--[=[
Conjugation functions
]=]--
conjugations["1a"] = function(args)
local forms = {}
local categories = {"Russian class 1 verbs"}
local title = "class 1"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
specforms(forms,[=[
infinitive=ть
pres_actv_part=ющий
past_actv_part=вший
pres_pasv_part=емый
pres_adv_part=я
past_adv_part=вши past_adv_part_short=в
]=],stem);
present_je_a(forms, stem);
specforms(forms,[=[
impr_sg=й
impr_pl=йте
past_m=л past_f=ла past_n=ло past_pl=ли
]=],stem)
return forms, title, categories
end
conjugations["2a"] = function(args)
local forms = {}
local categories = {"Russian class 2 verbs"}
local title = "class 2"
local inf_stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local pres_stem = inf_stem
pres_stem = mw.ustring.gsub(pres_stem, "[ео](́?)ва(́?)$","у%1%2")
forms["infinitive"] = inf_stem .. "ть"
forms["pres_actv_part"] = pres_stem .. "ющий"
forms["past_actv_part"] = inf_stem .. "вший"
forms["pres_pasv_part"] = pres_stem .. "емый"
forms["pres_adv_part"] = pres_stem .. "я"
forms["past_adv_part"] = inf_stem .. "вши"; forms["past_adv_part_short"] = inf_stem .. "в"
present_je_a(forms, pres_stem)
forms["impr_sg"] = pres_stem .. "й"
forms["impr_pl"] = pres_stem .. "йте"
forms["past_m"] = inf_stem .. "л"
forms["past_f"] = inf_stem .. "ла"
forms["past_n"] = inf_stem .. "ло"
forms["past_pl"] = inf_stem .. "ли"
return forms, title, categories
end
conjugations["2b"] = function(args)
local forms = {}
local categories = {"Russian class 2 verbs"}
local title = "class 2"
local inf_stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local pres_stem = inf_stem
pres_stem = mw.ustring.gsub(pres_stem, "о(́?)ва(́?)$", "у%1%2")
pres_stem = mw.ustring.gsub(pres_stem, "е(́?)ва(́?)$", "ю%1%2")
local pres_stem_noa = com.remove_accents(pres_stem)
forms["infinitive"] = inf_stem .. "ть"
forms["pres_actv_part"] = pres_stem_noa .. "ю́щий"
forms["past_actv_part"] = inf_stem .. "вший"
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = pres_stem_noa .. "я́"
forms["past_adv_part"] = inf_stem .. "вши"; forms["past_adv_part_short"] = inf_stem .. "в"
present_je_b(forms, pres_stem_noa)
forms["impr_sg"] = pres_stem .. "й"
forms["impr_pl"] = pres_stem .. "йте"
forms["past_m"] = inf_stem .. "л"
forms["past_f"] = inf_stem .. "ла"
forms["past_n"] = inf_stem .. "ло"
forms["past_pl"] = inf_stem .. "ли"
return forms, title, categories
end
conjugations["3a"] = function(args)
local forms = {}
local categories = {"Russian class 3 verbs"}
local title = "class 3"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
-- non-empty if no short past forms to be used
local no_short_past = args[3]; if no_short_past == "" then no_short_past = nil end
-- non-empty if no short past participle forms to be used
local no_short_past_partcpl = args[4]; if no_short_past_partcpl == "" then no_short_past_partcpl = nil end
-- "нь" if "-нь"/"-ньте" instead of "-ни"/"-ните" in the imperative
local impr_end = args[5]
-- optional full infinitive form for verbs like достичь
local full_inf = args[6]; if full_inf == "" then full_inf = nil end
-- optional short masculine past form for verbs like вять
local past_m_short = args[7]; if past_m_short == "" then past_m_short = nil end
-- if full infinitive is not passed, build from the stem, otherwise use the optional parameter
if not full_inf then
forms["infinitive"] = stem .. "нуть"
else
forms["infinitive"] = full_inf
end
forms["pres_actv_part"] = stem .. "нущий"
forms["past_actv_part"] = stem .. "нувший"
-- default is blank
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = ""
forms["past_adv_part"] = stem .. "нувши"; forms["past_adv_part_short"] = stem .. "нув"
present_e_a(forms, stem .. "н")
-- "ни" or "нь"
forms["impr_sg"] = stem .. (impr_end or "ни")
forms["impr_pl"] = stem .. (impr_end or "ни") .. "те"
-- if the 4rd argument is empty, add short past active participle,
-- both short and long will be used
if no_short_past_partcpl then
forms["past_actv_part_short"] = ""
else
forms["past_actv_part_short"] = stem .. "ший"
end
forms["past_m"] = stem .. "нул"
forms["past_f"] = stem .. "нула"
forms["past_n"] = stem .. "нуло"
forms["past_pl"] = stem .. "нули"
-- if the 3rd argument is empty add short past forms
if not no_short_past then
-- use long and short past forms
forms["past_m_short"] = stem
forms["past_f_short"] = stem .. "ла"
forms["past_n_short"] = stem .. "ло"
forms["past_pl_short"] = stem .. "ли"
elseif no_short_past then
forms["past_m_short"] = ""
forms["past_f_short"] = ""
forms["past_n_short"] = ""
forms["past_pl_short"] = ""
else -- default
forms["past_m_short"] = stem
forms["past_f_short"] = stem .. "ла"
forms["past_n_short"] = stem .. "ло"
forms["past_pl_short"] = stem .. "ли"
end
-- if past_m_short is special, e.g. вять - вял, then use it, otherwise use the current value
forms["past_m_short"] = (past_m_short or forms["past_m_short"])
if forms["past_m_short"] ~= "" then
forms["past_m"] = forms["past_m_short"] .. ", " .. forms["past_m"]
end
if forms["past_f_short"] ~= "" then
forms["past_f"] = forms["past_f_short"] .. ", " .. forms["past_f"]
end
if forms["past_n_short"] ~= "" then
forms["past_n"] = forms["past_n_short"] .. ", " .. forms["past_n"]
end
if forms["past_pl_short"] ~= "" then
forms["past_pl"] = forms["past_pl_short"] .. ", " .. forms["past_pl"]
end
return forms, title, categories
end
conjugations["3b"] = function(args)
local forms = {}
local categories = {"Russian class 3 verbs"}
local title = "class 3"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
forms["infinitive"] = stem .. "у́ть"
forms["pres_actv_part"] = stem .. "у́щий"
forms["past_actv_part"] = stem .. "у́вший"
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = ""
forms["past_adv_part"] = stem .. "у́вши"; forms["past_adv_part_short"] = stem .. "у́в"
present_e_b(forms, stem)
forms["impr_sg"] = stem .. "и́"
forms["impr_pl"] = stem .. "и́те"
forms["past_m"] = stem .. "у́л"
forms["past_f"] = stem .. "у́ла"
forms["past_n"] = stem .. "у́ло"
forms["past_pl"] = stem .. "у́ли"
return forms, title, categories
end
conjugations["3c"] = function(args)
local forms = {}
local categories = {"Russian class 3 verbs"}
local title = "class 3"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
-- remove accent for some forms
local stem_noa = com.remove_accents(stem)
forms["infinitive"] = stem_noa .. "у́ть"
forms["pres_actv_part"] = stem_noa .. "у́щий"
forms["past_actv_part"] = stem_noa .. "у́вший"
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = ""
forms["past_adv_part"] = stem_noa .. "у́вши"; forms["past_adv_part_short"] = stem_noa .. "у́в"
present_e_c(forms, stem)
forms["impr_sg"] = stem_noa .. "и́"
forms["impr_pl"] = stem_noa .. "и́те"
forms["past_m"] = stem_noa .. "у́л"
forms["past_f"] = stem_noa .. "у́ла"
forms["past_n"] = stem_noa .. "у́ло"
forms["past_pl"] = stem_noa .. "у́ли"
return forms, title, categories
end
conjugations["4a"] = function(args)
local forms = {}
local categories = {"Russian class 4 verbs"}
local title = "class 4"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
-- for "a" stress type "й" - after vowels, "ь" - after single consonants, "и" - after consonant clusters
local impr_end_param = args[3]
-- optional parameter for verbs like похитить (похи́щу) (4a), защитить (защищу́) (4b), поглотить (поглощу́) (4c) with a different iotation (т -> щ, not ч)
local shch = args[4]; if shch == "" then shch = nil end
--set defaults if nothing is passed, "й" for stems ending in a vowel, "ь" for single consonant ending, "и" for double consonant ending
-- "й" after any vowel, with or without an acute accent (беспоко́ить), no parameter passed
local impr_end = ""
if impr_end_param then
impr_end = impr_end_param
elseif mw.ustring.find(stem, "[аэыоуяеиёю́]$") then
impr_end = "й"
-- "и" after two consonants in a row (мо́рщить, зафре́ндить), no parameter passed
elseif mw.ustring.find(stem, "[бвгджзклмнпрстфхцчшщ][бвгджзклмнпрстфхцчшщ]$") then
impr_end = "и"
-- "ь" after a single consonant (бре́дить), no parameter passed
elseif mw.ustring.find(stem, "[аэыоуяеиёю́][бвгджзклмнпрстфхцчшщ]$") then
impr_end = "ь"
-- default
else --default
impr_end = "ь"
end
forms["infinitive"] = stem .. "ить"
-- Verbs ending in a hushing consonant do not get j-vowels in the endings.
if mw.ustring.find(stem, "[шщжч]$") then
forms["pres_actv_part"] = stem .. "ащий"
forms["pres_adv_part"] = stem .. "а"
-- use the passed parameter or default
forms["impr_sg"] = stem .. impr_end
forms["impr_pl"] = stem .. impr_end .. "те"
else
forms["pres_actv_part"] = stem .. "ящий"
forms["pres_adv_part"] = stem .. "я"
-- use the passed parameter or default
forms["impr_sg"] = stem .. impr_end
forms["impr_pl"] = stem .. impr_end .. "те"
end
forms["past_actv_part"] = stem .. "ивший"
forms["pres_pasv_part"] = stem .. "имый"
forms["past_adv_part"] = stem .. "ивши"; forms["past_adv_part_short"] = stem .. "ив"
-- if shch is nil, pass nothing, otherwise pass "щ"
if not shch then
present_i_a(forms, stem) -- param #3 must be a string
else -- tell the conjugator that this is an exception
present_i_a(forms, stem, shch)
end
forms["past_m"] = stem .. "ил"
forms["past_f"] = stem .. "ила"
forms["past_n"] = stem .. "ило"
forms["past_pl"] = stem .. "или"
return forms, title, categories
end
conjugations["4b"] = function(args)
local forms = {}
local categories = {"Russian class 4 verbs"}
local title = "class 4"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
-- optional parameter for verbs like похитить (похи́щу) (4a), защитить (защищу́) (4b), поглотить (поглощу́) (4c) with a different iotation (т -> щ, not ч)
local shch = args[3]; if shch == "" then shch = nil end
-- some verbs don't have 1st person singular - победить, возродить, use "no_1sg_futr=1" in the template
local no_1sg_futr = "0"
local past_f = args["past_f"]
if not args["no_1sg_futr"] then
no_1sg_futr = 0
elseif args["no_1sg_futr"] == "1" then
no_1sg_futr = 1
else
no_1sg_futr = 0
end
forms["infinitive"] = stem .. "и́ть"
-- Verbs ending in a hushing consonant do not get j-vowels in the endings.
if mw.ustring.find(stem, "[шщжч]$") then
forms["pres_actv_part"] = stem .. "а́щий"
forms["pres_adv_part"] = stem .. "а́"
else
forms["pres_actv_part"] = stem .. "я́щий"
forms["pres_adv_part"] = stem .. "я́"
end
forms["past_actv_part"] = stem .. "и́вший"
forms["pres_pasv_part"] = stem .. "и́мый"
forms["past_adv_part"] = stem .. "и́вши"; forms["past_adv_part_short"] = stem .. "и́в"
-- if shch is nil, pass nothing, otherwise pass "щ"
if not shch then
present_i_b(forms, stem)
elseif no_1sg_futr then -- no 1st person future
present_i_b(forms, stem, no_1sg_futr)
else -- т-щ, not т-ч
present_i_b(forms, stem, 0, shch)
end
-- make 1st person future singular blank if no_1sg_futr = 1
if no_1sg_futr == 1 then
forms["pres_futr_1sg"] = ""
end
forms["impr_sg"] = stem .. "и́"
forms["impr_pl"] = stem .. "и́те"
forms["past_m"] = stem .. "и́л"
forms["past_n"] = stem .. "и́ло"
forms["past_pl"] = stem .. "и́ли"
if past_f then
forms["past_f"] = past_f
else
forms["past_f"] = stem .. "и́ла"
end
return forms, title, categories
end
conjugations["4c"] = function(args)
local forms = {}
local categories = {"Russian class 4 verbs"}
local title = "class 4"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
-- optional parameter for verbs like похитить (похи́щу) (4a), защитить (защищу́) (4b), поглотить (поглощу́) (4c) with a different iotation (т -> щ, not ч)
local shch = args[3]; if shch == "" then shch = nil end
-- remove accent for some forms
local stem_noa = com.remove_accents(stem)
-- replace consonants for 1st person singular present/future
local iotated_stem = com.iotation(stem_noa)
forms["infinitive"] = stem_noa .. "и́ть"
forms["past_actv_part"] = stem_noa .. "и́вший"
forms["pres_pasv_part"] = stem_noa .. "и́мый"
forms["past_adv_part"] = stem_noa .. "и́вши"; forms["past_adv_part_short"] = stem_noa .. "и́в"
-- Verbs ending in a hushing consonant do not get j-vowels in the endings.
if mw.ustring.find(stem, "[шщжч]$") then
forms["pres_actv_part"] = stem_noa .. "а́щий"
forms["pres_adv_part"] = stem_noa .. "а́"
else
forms["pres_actv_part"] = stem_noa .. "я́щий"
forms["pres_adv_part"] = stem_noa .. "я́"
end
forms["impr_sg"] = stem_noa .. "и́"
forms["impr_pl"] = stem_noa .. "и́те"
-- if shch is nil, pass nothing, otherwise pass "щ"
if not shch then
present_i_c(forms, stem) -- param #3 must be a string
else -- tell the conjugator that this is an exception
present_i_c(forms, stem, shch)
end
forms["past_m"] = stem_noa .. "и́л"
forms["past_f"] = stem_noa .. "и́ла"
forms["past_n"] = stem_noa .. "и́ло"
forms["past_pl"] = stem_noa .. "и́ли"
return forms, title, categories
end
conjugations["5a"] = function(args)
local forms = {}
local categories = {"Russian class 5 verbs"}
local title = "class 5"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
-- обидеть, выстоять have different past tense and infinitive forms
local past_stem = args[3]; if past_stem == "" then past_stem = nil end
-- imperative ending, выгнать - выгони
local impr_end = args[4]; if impr_end == "" then impr_end = nil end
if not past_stem then
past_stem = stem .. "е"
end
if not impr_end then
impr_end = "ь"
end
forms["infinitive"] = past_stem .. "ть"
-- Verbs ending in a hushing consonant do not get j-vowels in the endings.
if mw.ustring.find(stem, "[шщжч]$") then
forms["pres_actv_part"] = stem .. "ащий"
forms["pres_adv_part"] = stem .. "а"
else
forms["pres_actv_part"] = stem .. "ящий"
forms["pres_adv_part"] = stem .. "я"
end
forms["past_actv_part"] = past_stem .. "вший"
forms["pres_pasv_part"] = stem .. "имый"
forms["past_adv_part"] = past_stem .. "вши"; forms["past_adv_part_short"] = past_stem .. "в"
-- "й" after any vowel (e.g. выстоять), with or without an acute accent, otherwise "ь"
if mw.ustring.find(stem, "[аэыоуяеиёю́]$") and impr_end == nil then
impr_end = "й"
end
forms["impr_sg"] = stem .. impr_end
forms["impr_pl"] = stem .. impr_end .. "те"
present_i_a(forms, stem)
forms["past_m"] = past_stem .. "л"
forms["past_f"] = past_stem .. "ла"
forms["past_n"] = past_stem .. "ло"
forms["past_pl"] = past_stem .. "ли"
return forms, title, categories
end
conjugations["5b"] = function(args)
local forms = {}
local categories = {"Russian class 5 verbs"}
local title = "class 5"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local past_stem = args[3] or (NAMESPACE == "Template" and "-") or error("Third parameter has not been provided")
-- irreg: лежать - лёжа
local pres_adv_part = args[4]; if pres_adv_part == "" then pres_adv_part = nil end
if mw.ustring.find(stem, "[шщжч]$") then
forms["pres_actv_part"] = stem .. "а́щий"
else
forms["pres_actv_part"] = stem .. "я́щий"
end
-- override if passed as a parameter, e.g. лёжа
if pres_adv_part then
forms["pres_adv_part"] = pres_adv_part
elseif mw.ustring.find(stem, "[шщжч]$") and not pres_adv_part then
forms["pres_adv_part"] = stem .. "а́"
else
forms["pres_adv_part"] = stem .. "я́"
end
forms["infinitive"] = past_stem .. "ть"
forms["past_actv_part"] = past_stem .. "вший"
forms["past_adv_part"] = past_stem .. "вши"; forms["past_adv_part_short"] = past_stem .. "в"
forms["past_m"] = past_stem .. "л"
forms["past_f"] = past_stem .. "ла"
forms["past_n"] = past_stem .. "ло"
forms["past_pl"] = past_stem .. "ли"
forms["pres_pasv_part"] = "и́мый"
present_i_b(forms, stem)
-- "й" after any vowel (e.g. выстоять), with or without an acute accent, otherwise "ь"
local impr_end = "и́"
if mw.ustring.find(stem, "[аэыоуяеиёю́]$") then
impr_end = "́й" -- the last vowel is stressed (an acute accent before "й")
end
forms["impr_sg"] = stem .. impr_end
forms["impr_pl"] = stem .. impr_end .. "те"
return forms, title, categories
end
conjugations["5c"] = function(args)
local forms = {}
local categories = {"Russian class 5 verbs"}
local title = "class 5"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local past_stem = args[3] or (NAMESPACE == "Template" and "-") or error("Third parameter has not been provided")
-- e.g. гнать - гнала́
local fem_past = args[4]; if fem_past == "" then fem_past = nil end
-- remove accent for some forms
local stem_noa = com.remove_accents(stem)
-- replace consonants for 1st person singular present/future
local iotated_stem = com.iotation(stem_noa)
forms["infinitive"] = past_stem .. "ть"
forms["past_actv_part"] = past_stem .. "вший"
forms["pres_pasv_part"] = stem_noa .. "и́мый"
forms["past_adv_part"] = past_stem .. "вши"; forms["past_adv_part_short"] = past_stem .. "в"
-- Verbs ending in a hushing consonant do not get j-vowels in the endings.
if mw.ustring.find(stem, "[шщжч]$") then
forms["pres_actv_part"] = stem_noa .. "а́щий"
forms["pres_adv_part"] = stem_noa .. "а́"
else
forms["pres_actv_part"] = stem_noa .. "я́щий"
forms["pres_adv_part"] = stem_noa .. "я́"
end
forms["impr_sg"] = stem_noa .. "и́"
forms["impr_pl"] = stem_noa .. "и́те"
present_i_c(forms, stem)
-- some verbs have a different stress in the feminine past from, e.g. гнать - гнала
if not fem_past then
forms["past_f"] = past_stem .. "ла"
else
forms["past_f"] = fem_past
end
forms["past_m"] = past_stem .. "л"
forms["past_n"] = past_stem .. "ло"
forms["past_pl"] = past_stem .. "ли"
return forms, title, categories
end
conjugations["6a"] = function(args)
local forms = {}
local categories = {"Russian class 6 verbs"}
local title = "class 6"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local impr_end = args[3]; if impr_end == "" then impr_end = nil end
-- irregular imperatives (сыпать - сыпь is moved to a separate function but the parameter may still be needed)
local impr_sg = args[4]; if impr_sg == "" then impr_sg = nil end
-- optional full infinitive form for verbs like колебать
local full_inf = args[5]; if full_inf == "" then full_inf = nil end
-- no iotation, e.g. вырвать - вы́рву
local no_iotation = nil
if args["no_iotation"] == "1" then
no_iotation = "1"
end
-- вызвать - вы́зову (в́ызов)
local pres_stem = args["pres_stem"]; if pres_stem == "" or not pres_stem then pres_stem = stem end
-- replace consonants for 1st person singular present/future
local iotated_stem = com.iotation(pres_stem)
if mw.ustring.find(iotated_stem, "[шщжч]$") then
forms["pres_actv_part"] = iotated_stem .. "ущий"
else
forms["pres_actv_part"] = iotated_stem .. "ющий"
end
if mw.ustring.find(iotated_stem, "[шщжч]$") then
forms["pres_adv_part"] = iotated_stem .. "а"
else
forms["pres_adv_part"] = iotated_stem .. "я"
end
if no_iotation then
forms["pres_adv_part"] = pres_stem .. "я"
end
if mw.ustring.find(stem, "[аэыоуяеиёю́]$") then
forms["infinitive"] = stem .. "ять"
forms["past_actv_part"] = stem .. "явший"
forms["past_adv_part"] = stem .. "явши"; forms["past_adv_part_short"] = stem .. "яв"
forms["past_m"] = stem .. "ял"
forms["past_f"] = stem .. "яла"
forms["past_n"] = stem .. "яло"
forms["past_pl"] = stem .. "яли"
else
forms["infinitive"] = stem .. "ать"
forms["past_actv_part"] = stem .. "авший"
forms["past_adv_part"] = stem .. "авши"; forms["past_adv_part_short"] = stem .. "ав"
forms["past_m"] = stem .. "ал"
forms["past_f"] = stem .. "ала"
forms["past_n"] = stem .. "ало"
forms["past_pl"] = stem .. "али"
end
-- if full infinitive is not passed, build from the stem, otherwise use the optional parameter
if full_inf then
forms["infinitive"] = full_inf
end
if no_iotation then
forms["pres_pasv_part"] = stem .. "емый"
else
forms["pres_pasv_part"] = iotated_stem .. "емый"
end
present_je_a(forms, pres_stem, no_iotation)
if not impr_end and mw.ustring.find(stem, "[аэыоуяеиёю́]$") and not impr_end then
impr_end = "й"
elseif not impr_end and not mw.ustring.find(stem, "[аэыоуяеиёю́]$") and not impr_end then
impr_end = "и"
end
if no_iotation then
forms["impr_sg"] = pres_stem .. impr_end
forms["impr_pl"] = pres_stem .. impr_end .. "те"
else
forms["impr_sg"] = iotated_stem .. impr_end
forms["impr_pl"] = iotated_stem .. impr_end .. "те"
end
-- irreg: сыпать - сыпь, сыпьте
if impr_sg then
forms["impr_sg"] = impr_sg
forms["impr_pl"] = impr_sg .. "те"
end
return forms, title, categories
end
conjugations["6b"] = function(args)
local forms = {}
local categories = {"Russian class 6 verbs"}
local title = "class 6"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
-- звать - зов, драть - дер
local pres_stem = args[3]; if pres_stem == "" or not pres_stem then pres_stem = stem end
local past_f = args[4]; if past_f == "" then past_f = nil end
local past_n2 = args["past_n2"]
local past_pl2 = args["past_pl2"]
forms["pres_pasv_part"] = ""
present_e_b(forms, pres_stem)
if not impr_end and mw.ustring.find(stem, "[аэыоуяеиёю́]$") and not impr_end then
impr_end = "́й" -- accent on the preceding vowel
elseif not impr_end and not mw.ustring.find(stem, "[аэыоуяеиёю́]$") and not impr_end then
impr_end = "и́"
end
forms["impr_sg"] = pres_stem .. impr_end
forms["impr_pl"] = pres_stem .. impr_end .. "те"
if mw.ustring.find(pres_stem, "[шщжч]$") then
forms["pres_adv_part"] = pres_stem .. "а́"
else
forms["pres_adv_part"] = pres_stem .. "я́"
end
if mw.ustring.find(pres_stem, "[аэыоуяеиёю́]$") then
forms["pres_actv_part"] = pres_stem .. "ю́щий"
else
forms["pres_actv_part"] = pres_stem .. "у́щий"
end
if mw.ustring.find(stem, "[аэыоуяеиёю́]$") then
forms["infinitive"] = stem .. "я́ть"
forms["past_actv_part"] = stem .. "я́вший"
forms["past_adv_part"] = stem .. "я́вши"; forms["past_adv_part_short"] = stem .. "́яв"
forms["past_m"] = stem .. "я́л"
forms["past_f"] = stem .. "я́ла"
forms["past_n"] = stem .. "я́ло"
forms["past_pl"] = stem .. "я́ли"
else
forms["infinitive"] = stem .. "а́ть"
forms["past_actv_part"] = stem .. "а́вший"
forms["past_adv_part"] = stem .. "а́вши"; forms["past_adv_part_short"] = stem .. "а́в"
forms["past_m"] = stem .. "а́л"
forms["past_f"] = stem .. "а́ла"
forms["past_n"] = stem .. "а́ло"
forms["past_pl"] = stem .. "а́ли"
end
-- ждала́, подождала́
if past_f then
forms["past_f"] = past_f
end
--разобрало́сь (разобрало́)
forms["past_n2"] = past_n2
--разобрали́сь (разобрали́)
forms["past_pl2"] = past_pl2
return forms, title, categories
end
conjugations["6c"] = function(args)
local forms = {}
local categories = {"Russian class 6 verbs"}
local title = "class 6"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
-- remove accent for some forms
local stem_noa = com.make_unstressed(stem)
-- iotate the stem
local iotated_stem = com.iotation(stem)
-- iotate the 2nd stem
local iotated_stem_noa = com.iotation(stem_noa)
forms["infinitive"] = stem_noa .. "а́ть"
forms["past_actv_part"] = stem_noa .. "а́вший"
forms["pres_pasv_part"] = ""
forms["past_adv_part"] = stem_noa .. "а́вши"; forms["past_adv_part_short"] = stem_noa .. "а́в"
-- Verbs ending in a hushing consonant do not get j-vowels in the endings.
if mw.ustring.find(iotated_stem, "[шщжч]$") then
forms["pres_actv_part"] = iotated_stem .. "ущий"
else
forms["pres_actv_part"] = iotated_stem .. "ющий"
end
-- Verbs ending in a hushing consonant do not get j-vowels in the endings.
if mw.ustring.find(iotated_stem_noa, "[шщжч]$") then
forms["pres_adv_part"] = iotated_stem_noa .. "а́"
else
forms["pres_adv_part"] = iotated_stem_noa .. "я́"
end
present_je_c(forms, stem)
forms["impr_sg"] = iotated_stem_noa .. "и́"
forms["impr_pl"] = iotated_stem_noa .. "и́те"
forms["past_m"] = stem_noa .. "а́л"
forms["past_f"] = stem_noa .. "а́ла"
forms["past_n"] = stem_noa .. "а́ло"
forms["past_pl"] = stem_noa .. "а́ли"
return forms, title, categories
end
conjugations["7a"] = function(args)
local forms = {}
local categories = {"Russian class 7 verbs"}
local title = "class 7"
local full_inf = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local pres_stem = args[3] or (NAMESPACE == "Template" and "-") or error("Third parameter has not been provided")
local past_stem = args[4] or (NAMESPACE == "Template" and "-") or error("Fourth parameter has not been provided")
local impr_sg = args[5] or (NAMESPACE == "Template" and "-") or error("Fifth parameter has not been provided")
local past_adv_part = args[6] or (NAMESPACE == "Template" and "-") or error("Sixth parameter has not been provided")
local past_m = args["past_m"]
local pres_adv_part = args["pres_adv_part"]
local past_actv_part = args["past_actv_part"]
forms["infinitive"] = full_inf
forms["pres_actv_part"] = pres_stem .. "ущий"
-- вычесть - "" (non-existent)
if past_actv_part then
forms["past_actv_part"] = past_actv_part
else
forms["past_actv_part"] = past_stem .. "ший"
end
-- лезть - ле́зши (non-existent)
if pres_adv_part then
forms["pres_adv_part"] = pres_adv_part
else
forms["pres_adv_part"] =pres_stem .. "я"
end
forms["pres_pasv_part"] = ""
forms["past_adv_part"] = past_adv_part; forms["past_adv_part_short"] = ""
present_e_a(forms, pres_stem)
forms["impr_sg"] = impr_sg
forms["impr_pl"] = impr_sg .. "те"
-- 0 ending if the past stem ends in a consonant
if mw.ustring.find(past_stem, "[аэыоуяеиёю́]$") then
forms["past_m"] = past_stem .. "л"
else
forms["past_m"] = past_stem
end
-- вычесть - вы́чел
if past_m then
forms["past_m"] = past_m
end
forms["past_f"] = past_stem .. "ла"
forms["past_n"] = past_stem .. "ло"
forms["past_pl"] = past_stem .. "ли"
return forms, title, categories
end
conjugations["7b"] = function(args)
local forms = {}
local categories = {"Russian class 7 verbs"}
local title = "class 7"
local full_inf = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local pres_stem = args[3] or (NAMESPACE == "Template" and "-") or error("Third parameter has not been provided")
local past_stem = args[4] or (NAMESPACE == "Template" and "-") or error("Fourth parameter has not been provided")
local pres_pasv_part = args["pres_pasv_part"]
local past_actv_part = args["past_actv_part"]
local past_adv_part = args["past_adv_part"]
local past_adv_part_short = args["past_adv_part_short"]
local past_m = args["past_m"]
local past_n = args["past_n"]
local past_f = args["past_f"]
local past_pl = args["past_pl"]
forms["infinitive"] = full_inf
forms["pres_actv_part"] = pres_stem .. "у́щий"
forms["pres_adv_part"] = pres_stem .. "я́"
if past_actv_part then
forms["past_actv_part"] = past_actv_part
else
forms["past_actv_part"] = past_stem .. "ший"
end
if past_adv_part then
forms["past_adv_part"] = past_adv_part
else
forms["past_adv_part"] = past_stem .. "вши"
end
if past_adv_part_short then
forms["past_adv_part_short"] = past_adv_part_short
else
forms["past_adv_part_short"] = past_stem .. "в"
end
if pres_pasv_part then
forms["pres_pasv_part"] = pres_pasv_part
else
forms["pres_pasv_part"] = ""
end
present_e_b(forms, pres_stem)
forms["impr_sg"] = pres_stem .. "и́"
forms["impr_pl"] = pres_stem .. "и́те"
-- 0 ending if the past stem ends in a consonant
if mw.ustring.find(past_stem, "[аэыоуяеиёю́]$") then
forms["past_m"] = past_stem .. "л"
else
forms["past_m"] = past_stem
end
if past_m then
forms["past_m"] = past_m
end
if past_f then
forms["past_f"] = past_f
else
forms["past_f"] = past_stem .. "ла"
end
if past_n then
forms["past_n"] = past_n
else
forms["past_n"] = past_stem .. "ло"
end
if past_pl then
forms["past_pl"] = past_pl
else
forms["past_pl"] = past_stem .. "ли"
end
return forms, title, categories
end
conjugations["8a"] = function(args)
local forms = {}
local categories = {"Russian class 8 verbs"}
local title = "class 8"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local full_inf = args[3] or (NAMESPACE == "Template" and "-") or error("Third parameter has not been provided")
local past_m = args["past_m"] or (NAMESPACE == "Template" and "-") or error("past_m parameter has not been provided")
-- if full infinitive is not passed, build from the stem, otherwise use the optional parameter
forms["infinitive"] = full_inf
forms["pres_actv_part"] = stem .. "ущий"
forms["past_actv_part"] = past_m .. "ший"
-- default is blank
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = ""
forms["past_adv_part"] = past_m .. "ши"; forms["past_adv_part_short"] = ""
local iotated_stem = com.iotation(stem)
forms["pres_futr_1sg"] = stem .. "у"
forms["pres_futr_2sg"] = iotated_stem .. "ешь"
forms["pres_futr_3sg"] = iotated_stem .. "ет"
forms["pres_futr_1pl"] = iotated_stem .. "ем"
forms["pres_futr_2pl"] = iotated_stem .. "ете"
forms["pres_futr_3pl"] = stem .. "ут"
forms["impr_sg"] = stem .. "и"
forms["impr_pl"] = stem .. "ите"
forms["past_m"] = past_m
forms["past_f"] = stem .. "ла"
forms["past_n"] = stem .. "ло"
forms["past_pl"] = stem .. "ли"
return forms, title, categories
end
conjugations["8b"] = function(args)
local forms = {}
local categories = {"Russian class 8 verbs"}
local title = "class 8"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local full_inf = args[3] or (NAMESPACE == "Template" and "-") or error("Third parameter has not been provided")
local past_m = args["past_m"] or (NAMESPACE == "Template" and "-") or error("past_m parameter has not been provided")
-- if full infinitive is not passed, build from the stem, otherwise use the optional parameter
forms["infinitive"] = full_inf
forms["pres_actv_part"] = stem .. "у́щий"
forms["past_actv_part"] = past_m .. "ший"
-- default is blank
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = ""
forms["past_adv_part"] = past_m .. "ши"; forms["past_adv_part_short"] = ""
local iotated_stem = com.iotation(stem)
forms["pres_futr_1sg"] = stem .. "у́"
forms["pres_futr_3pl"] = stem .. "у́т"
forms["pres_futr_2sg"] = iotated_stem .. "ёшь"
forms["pres_futr_3sg"] = iotated_stem .. "ёт"
forms["pres_futr_1pl"] = iotated_stem .. "ём"
forms["pres_futr_2pl"] = iotated_stem .. "ёте"
forms["impr_sg"] = stem .. "и́"
forms["impr_pl"] = stem .. "и́те"
forms["past_m"] = past_m
forms["past_f"] = stem .. "ла́"
forms["past_n"] = stem .. "ло́"
forms["past_pl"] = stem .. "ли́"
return forms, title, categories
end
conjugations["9a"] = function(args)
local forms = {}
local categories = {"Russian class 9 verbs"}
local title = "class 9"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local pres_stem = args[3] or (NAMESPACE == "Template" and "-") or error("Third parameter has not been provided")
forms["infinitive"] = stem .. "еть"
-- prefective only
forms["pres_actv_part"] = ""
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = ""
forms["past_actv_part"] = stem .. "евший"
-- default is blank
forms["past_adv_part"] = stem .. "евши"; forms["past_adv_part_short"] = stem .. "ев"
present_e_a(forms, pres_stem)
forms["impr_sg"] = pres_stem .. "и"
forms["impr_pl"] = pres_stem .. "ите"
forms["past_m"] = stem
forms["past_f"] = stem .. "ла"
forms["past_n"] = stem .. "ло"
forms["past_pl"] = stem .. "ли"
return forms, title, categories
end
conjugations["9b"] = function(args)
local forms = {}
local categories = {"Russian class 9 verbs"}
local title = "class 9"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local pres_stem = args[3] or (NAMESPACE == "Template" and "-") or error("Third parameter has not been provided")
local past_adv_part2 = args["past_adv_part2"]
-- remove stress, replace ё with е
local stem_noa = com.make_unstressed(stem)
forms["infinitive"] = stem_noa .. "е́ть"
forms["pres_actv_part"] = pres_stem .. "у́щий"
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = ""
forms["past_actv_part"] = stem .. "ший"
-- default is blank
forms["past_adv_part"] = stem_noa .. "е́вши"; forms["past_adv_part_short"] = stem_noa .. "е́в"
--eg тереть - тёрши
if past_adv_part2 then
forms["past_adv_part2"] = past_adv_part2
end
present_e_b(forms, pres_stem)
forms["impr_sg"] = pres_stem .. "и́"
forms["impr_pl"] = pres_stem .. "и́те"
forms["past_m"] = stem
forms["past_f"] = stem .. "ла"
forms["past_n"] = stem .. "ло"
forms["past_pl"] = stem .. "ли"
return forms, title, categories
end
conjugations["10a"] = function(args)
local forms = {}
local categories = {"Russian class 10 verbs"}
local title = "class 10"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
forms["infinitive"] = stem .. "оть"
forms["pres_actv_part"] = ""
forms["past_actv_part"] = stem .. "овший"
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = ""
forms["past_adv_part"] = stem .. "овши"; forms["past_adv_part_short"] = stem .. "ов"
present_je_a(forms, stem)
forms["impr_sg"] = stem .. "и"
forms["impr_pl"] = stem .. "ите"
forms["past_m"] = stem .. "ол"
forms["past_f"] = stem .. "ола"
forms["past_n"] = stem .. "оло"
forms["past_pl"] = stem .. "оли"
return forms, title, categories
end
conjugations["10c"] = function(args)
local forms = {}
local categories = {"Russian class 10 verbs"}
local title = "class 10"
local inf_stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
-- present tense stressed stem "моло́ть" - м́елет
local pres_stem = args[3] or (NAMESPACE == "Template" and "-") or error("Third parameter has not been provided")
-- remove accent for some forms
local pres_stem_noa = com.remove_accents(pres_stem)
forms["infinitive"] = inf_stem .. "ть"
forms["pres_actv_part"] = pres_stem .. "ющий"
forms["past_actv_part"] = inf_stem .. "вший"
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = pres_stem_noa .. "я́"
forms["past_adv_part"] = inf_stem .. "вши"; forms["past_adv_part_short"] = inf_stem .. "в"
present_je_c(forms, pres_stem)
forms["impr_sg"] = pres_stem_noa .. "и́"
forms["impr_pl"] = pres_stem_noa .. "и́те"
forms["past_m"] = inf_stem .. "л"
forms["past_f"] = inf_stem .. "ла"
forms["past_n"] = inf_stem .. "ло"
forms["past_pl"] = inf_stem .. "ли"
return forms, title, categories
end
conjugations["11a"] = function(args)
local forms = {}
local categories = {"Russian class 11 verbs"}
local title = "class 11"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
forms["infinitive"] = stem .. "ить"
-- prefective only
forms["pres_actv_part"] = ""
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = ""
forms["past_actv_part"] = stem .. "ивший"
-- default is blank
forms["past_adv_part"] = stem .. "ивши"; forms["past_adv_part_short"] = stem .. "ив"
forms["pres_futr_1sg"] = stem .. "ью"
forms["pres_futr_2sg"] = stem .. "ьешь"
forms["pres_futr_3sg"] = stem .. "ьет"
forms["pres_futr_1pl"] = stem .. "ьем"
forms["pres_futr_2pl"] = stem .. "ьете"
forms["pres_futr_3pl"] = stem .. "ьют"
forms["impr_sg"] = stem .. "ей"
forms["impr_pl"] = stem .. "ейте"
forms["past_m"] = stem .. "ил"
forms["past_f"] = stem .. "ила"
forms["past_n"] = stem .. "ило"
forms["past_pl"] = stem .. "или"
return forms, title, categories
end
conjugations["11b"] = function(args)
local forms = {}
local categories = {"Russian class 11 verbs"}
local title = "class 11"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local pres_stem = args[3] or (NAMESPACE == "Template" and "-") or error("Third parameter has not been provided")
local past_f = args["past_f"]
forms["infinitive"] = stem .. "и́ть"
forms["pres_actv_part"] = pres_stem .. "ью́щий"
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = pres_stem .. "ья́"
forms["past_actv_part"] = stem .. "и́вший"
-- default is blank
forms["past_adv_part"] = stem .. "и́вши"; forms["past_adv_part_short"] = stem .. "и́в"
forms["pres_futr_1sg"] = pres_stem .. "ью́"
forms["pres_futr_2sg"] = pres_stem .. "ьёшь"
forms["pres_futr_3sg"] = pres_stem .. "ьёт"
forms["pres_futr_1pl"] = pres_stem .. "ьём"
forms["pres_futr_2pl"] = pres_stem .. "ьёте"
forms["pres_futr_3pl"] = pres_stem .. "ью́т"
forms["impr_sg"] = stem .. "е́й"
forms["impr_pl"] = stem .. "е́йте"
forms["past_m"] = stem .. "и́л"
forms["past_f"] = stem .. "и́ла"
forms["past_n"] = stem .. "и́ло"
forms["past_pl"] = stem .. "и́ли"
-- пила́, лила́
if past_f then
forms["past_f"] =past_f
else
forms["past_f"] = stem .. "и́ла"
end
return forms, title, categories
end
conjugations["12a"] = function(args)
local forms = {}
local categories = {"Russian class 12 verbs"}
local title = "class 12"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local pres_stem = args[3] or (NAMESPACE == "Template" and "-") or error("Third parameter has not been provided")
forms["infinitive"] = stem .. "ть"
forms["pres_actv_part"] = pres_stem .. "ющий"
forms["pres_pasv_part"] = pres_stem .. "емый"
forms["pres_adv_part"] = pres_stem .. "я"
forms["past_actv_part"] = stem .. "вший"
-- default is blank
forms["past_adv_part"] = stem .. "вши"; forms["past_adv_part_short"] = stem .. "в"
forms["pres_futr_1sg"] = pres_stem .. "ю"
forms["pres_futr_2sg"] = pres_stem .. "ешь"
forms["pres_futr_3sg"] = pres_stem .. "ет"
forms["pres_futr_1pl"] = pres_stem .. "ем"
forms["pres_futr_2pl"] = pres_stem .. "ете"
forms["pres_futr_3pl"] = pres_stem .. "ют"
forms["impr_sg"] = pres_stem .. "й"
forms["impr_pl"] = pres_stem .. "йте"
forms["past_m"] = stem .. "л"
forms["past_f"] = stem .. "ла"
forms["past_n"] = stem .. "ло"
forms["past_pl"] = stem .. "ли"
return forms, title, categories
end
conjugations["12b"] = function(args)
local forms = {}
local categories = {"Russian class 12 verbs"}
local title = "class 12"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local pres_stem = args[3] or (NAMESPACE == "Template" and "-") or error("Third parameter has not been provided")
-- гнила́ needs a parameter, default - пе́ла
local past_f = args["past_f"]
forms["infinitive"] = stem .. "ть"
forms["pres_actv_part"] = pres_stem .. "ю́щий"
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = pres_stem .. "я́"
forms["past_actv_part"] = stem .. "вший"
-- default is blank
forms["past_adv_part"] = stem .. "вши"; forms["past_adv_part_short"] = stem .. "в"
forms["pres_futr_1sg"] = pres_stem .. "ю́"
forms["pres_futr_2sg"] = pres_stem .. "ёшь"
forms["pres_futr_3sg"] = pres_stem .. "ёт"
forms["pres_futr_1pl"] = pres_stem .. "ём"
forms["pres_futr_2pl"] = pres_stem .. "ёте"
forms["pres_futr_3pl"] = pres_stem .. "ю́т"
-- the preceding vowel is stressed
forms["impr_sg"] = pres_stem .. "́й"
forms["impr_pl"] = pres_stem .. "́йте"
-- гнила́
if past_f then
forms["past_f"] = past_f
else
forms["past_f"] = stem .. "ла"
end
forms["past_m"] = stem .. "л"
forms["past_n"] = stem .. "ло"
forms["past_pl"] = stem .. "ли"
return forms, title, categories
end
conjugations["13b"] = function(args)
local forms = {}
local categories = {"Russian class 13 verbs"}
local title = "class 13"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local pres_stem = args[3] or (NAMESPACE == "Template" and "-") or error("Third parameter has not been provided")
forms["infinitive"] = stem .. "ть"
forms["pres_actv_part"] = pres_stem .. "ю́щий"
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = stem .. "я"
forms["past_actv_part"] = stem .. "вший"
-- default is blank
forms["past_adv_part"] = stem .. "вши"; forms["past_adv_part_short"] = stem .. "в"
forms["pres_futr_1sg"] = pres_stem .. "ю́"
forms["pres_futr_2sg"] = pres_stem .. "ёшь"
forms["pres_futr_3sg"] = pres_stem .. "ёт"
forms["pres_futr_1pl"] = pres_stem .. "ём"
forms["pres_futr_2pl"] = pres_stem .. "ёте"
forms["pres_futr_3pl"] = pres_stem .. "ю́т"
-- the preceding vowel is stressed
forms["impr_sg"] = stem .. "́й"
forms["impr_pl"] = stem .. "́йте"
forms["past_m"] = stem .. "л"
forms["past_f"] = stem .. "ла"
forms["past_n"] = stem .. "ло"
forms["past_pl"] = stem .. "ли"
return forms, title, categories
end
conjugations["14a"] = function(args)
-- only one verb: вы́жать
local forms = {}
local categories = {"Russian class 14 verbs"}
local title = "class 14"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local pres_stem = args[3] or (NAMESPACE == "Template" and "-") or error("Third parameter has not been provided")
forms["infinitive"] = stem .. "ть"
-- perfective only
forms["pres_actv_part"] = ""
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = ""
forms["past_actv_part"] = stem .. "вший"
-- default is blank
forms["past_adv_part"] = stem .. "вши"; forms["past_adv_part_short"] = stem .. "в"
present_e_a(forms, pres_stem)
forms["impr_sg"] = pres_stem .. "и"
forms["impr_pl"] = pres_stem .. "ите"
forms["past_m"] = stem .. "л"
forms["past_f"] = stem .. "ла"
forms["past_n"] = stem .. "ло"
forms["past_pl"] = stem .. "ли"
return forms, title, categories
end
conjugations["14b"] = function(args)
local forms = {}
local categories = {"Russian class 14 verbs"}
local title = "class 14"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local pres_stem = args[3] or (NAMESPACE == "Template" and "-") or error("Third parameter has not been provided")
-- заня́ться has three forms: за́нялся, зан́ялся, занялся́
local past_m = args["past_m"]
local past_m2 = args["past_m2"]
local past_m3 = args["past_m3"]
local past_f = args["past_f"]
local past_n = args["past_n"]
local past_n2 = args["past_n2"]
local past_pl = args["past_pl"]
local past_pl2 = args["past_pl2"]
forms["infinitive"] = stem .. "ть"
forms["pres_actv_part"] = pres_stem .. "у́щий"
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = pres_stem .. "я́"
forms["past_actv_part"] = stem .. "вший"
forms["past_adv_part"] = stem .. "вши"; forms["past_adv_part_short"] = stem .. "в"
present_e_b(forms, pres_stem)
forms["impr_sg"] = pres_stem .. "и́"
forms["impr_pl"] = pres_stem .. "и́те"
if past_m then
forms["past_m"] = past_m
forms["past_n"] = past_m .. "о"
forms["past_pl"] = past_m .. "и"
else
forms["past_m"] = stem .. "л"
forms["past_f"] = stem .. "ла"
forms["past_n"] = stem .. "ло"
forms["past_pl"] = stem .. "ли"
end
if past_f then
forms["past_f"] = past_f
end
-- override these if supplied
if past_n then
forms["past_n"] = past_n
end
if past_pl then
forms["past_pl"] = past_pl
end
if past_m2 then
forms["past_m2"] = past_m2
end
if past_m3 then
forms["past_m3"] = past_m3
end
if past_n2 then
forms["past_n2"] = past_n2
end
if past_pl2 then
forms["past_pl2"] = past_pl2
end
return forms, title, categories
end
conjugations["14c"] = function(args)
local forms = {}
local categories = {"Russian class 14 verbs"}
local title = "class 14"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local pres_stem = args[3] or (NAMESPACE == "Template" and "-") or error("Third parameter has not been provided")
local pres_stem_noa = com.make_unstressed(pres_stem)
local past_m = args["past_m"]
local past_f = args["past_f"]
local past_n = args["past_n"]
local past_pl = args["past_pl"]
local past_m2 = args["past_m2"]
local past_n2 = args["past_n2"]
local past_pl2 = args["past_pl2"]
forms["infinitive"] = stem .. "ть"
forms["pres_actv_part"] = pres_stem .. "у́щий"
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = pres_stem .. "я́"
forms["past_actv_part"] = stem .. "вший"
forms["past_adv_part"] = stem .. "вши"; forms["past_adv_part_short"] = stem .. "в"
present_e_c(forms, pres_stem)
forms["impr_sg"] = pres_stem_noa .. "и́"
forms["impr_pl"] = pres_stem_noa .. "и́те"
if past_m then
forms["past_m"] = past_m
forms["past_n"] = past_m .. "о"
forms["past_pl"] = past_m .. "и"
else
forms["past_m"] = stem .. "л"
forms["past_n"] = stem .. "ло"
forms["past_pl"] = stem .. "ли"
end
if past_n then
forms["past_n"] = past_n
end
--изъя́ла but приняла́
if past_f then
forms["past_f"] = past_f
else
forms["past_f"] = stem .. "ла"
end
--two forms: при́нялся, принялс́я
if past_m2 then
forms["past_m2"] = past_m2
end
if past_n2 then
forms["past_n2"] = past_n2
end
if past_pl then
forms["past_pl"] = past_pl
end
if past_pl2 then
forms["past_pl2"] = past_pl2
end
return forms, title, categories
end
conjugations["15a"] = function(args)
local forms = {}
local categories = {"Russian class 15 verbs"}
local title = "class 15"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
forms["infinitive"] = stem .. "ть"
forms["pres_actv_part"] = stem .. "нущий"
forms["past_actv_part"] = stem .. "вший"
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = ""
forms["past_adv_part"] = stem .. "вши"; forms["past_adv_part_short"] = stem .. "в"
present_e_a(forms, stem .. "н")
forms["impr_sg"] = stem .. "нь"
forms["impr_pl"] = stem .. "ньте"
forms["past_m"] = stem .. "л"
forms["past_f"] = stem .. "ла"
forms["past_n"] = stem .. "ло"
forms["past_pl"] = stem .. "ли"
return forms, title, categories
end
conjugations["16a"] = function(args)
local forms = {}
local categories = {"Russian class 16 verbs"}
local title = "class 16"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
forms["infinitive"] = stem .. "ть"
forms["pres_actv_part"] = stem .. "ву́щий"
forms["past_actv_part"] = stem .. "вший"
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = ""
forms["past_adv_part"] = stem .. "вши"; forms["past_adv_part_short"] = stem .. "в"
present_e_a(forms, stem .. "в")
forms["impr_sg"] = stem .. "ви"
forms["impr_pl"] = stem .. "вите"
forms["past_m"] = stem .. "л"
forms["past_f"] = stem .. "ла"
forms["past_n"] = stem .. "ло"
forms["past_pl"] = stem .. "ли"
return forms, title, categories
end
conjugations["16b"] = function(args)
local forms = {}
local categories = {"Russian class 16 verbs"}
local title = "class 16"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local stem_noa = com.make_unstressed(stem)
local past_n2 = args["past_n2"]
local past_pl2 = args["past_pl2"]
forms["infinitive"] = stem .. "ть"
forms["pres_actv_part"] = stem_noa .. "ву́щий"
forms["past_actv_part"] = stem .. "вший"
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = stem_noa .. "вя́"
forms["past_adv_part"] = stem .. "вши"; forms["past_adv_part_short"] = stem .. "в"
present_e_b(forms, stem_noa .. "в")
forms["impr_sg"] = stem_noa .. "ви́"
forms["impr_pl"] = stem_noa .. "ви́те"
forms["past_m"] = stem .. "л"
forms["past_f"] = stem_noa .. "ла́"
forms["past_n"] = stem .. "ло"
forms["past_pl"] = stem .. "ли"
-- прижило́сь, прижи́лось
if past_n2 then
forms["past_n2"] = past_n2
end
if past_pl2 then
forms["past_pl2"] = past_pl2
end
return forms, title, categories
end
conjugations["irreg-бежать"] = function(args)
-- irregular, only for verbs derived from бежать with the same stress pattern
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local prefix = args[2]; if not prefix then prefix = "" end
forms["infinitive"] = prefix .. "бежа́ть"
forms["past_actv_part"] = prefix .. "бежа́вший"
forms["pres_pasv_part"] = ""
forms["past_adv_part"] = prefix .. "бежа́вши"; forms["past_adv_part_short"] = prefix .. "бежа́в"
forms["pres_actv_part"] = prefix .. "бегу́щий"
forms["pres_adv_part"] = ""
forms["impr_sg"] = prefix .. "беги́"
forms["impr_pl"] = prefix .. "беги́те"
forms["pres_futr_1sg"] = prefix .. "бегу́"
forms["pres_futr_2sg"] = prefix .. "бежи́шь"
forms["pres_futr_3sg"] = prefix .. "бежи́т"
forms["pres_futr_1pl"] = prefix .. "бежи́м"
forms["pres_futr_2pl"] = prefix .. "бежи́те"
forms["pres_futr_3pl"] = prefix .. "бегу́т"
forms["past_m"] = prefix .. "бежа́л"
forms["past_f"] = prefix .. "бежа́ла"
forms["past_n"] = prefix .. "бежа́ло"
forms["past_pl"] = prefix .. "бежа́ли"
-- вы́бежать (perfective)
if prefix == "вы́" then
forms["infinitive"] = prefix .. "бежать"
forms["past_actv_part"] = prefix .. "бежавший"
forms["past_adv_part"] = prefix .. "бежавши"; forms["past_adv_part_short"] = prefix .. "бежав"
forms["impr_sg"] = prefix .. "беги"
forms["impr_pl"] = prefix .. "бегите"
forms["pres_futr_1sg"] = prefix .. "бегу"
forms["pres_futr_2sg"] = prefix .. "бежишь"
forms["pres_futr_3sg"] = prefix .. "бежит"
forms["pres_futr_1pl"] = prefix .. "бежим"
forms["pres_futr_2pl"] = prefix .. "бежите"
forms["pres_futr_3pl"] = prefix .. "бегут"
forms["past_m"] = prefix .. "бежал"
forms["past_f"] = prefix .. "бежала"
forms["past_n"] = prefix .. "бежало"
forms["past_pl"] = prefix .. "бежали"
end
return forms, title, categories
end
conjugations["irreg-спать"] = function(args)
-- irregular, only for verbs derived from спать
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local prefix = args[2]; if not prefix then prefix = "" end
forms["infinitive"] = prefix .. "спа́ть"
forms["past_actv_part"] = prefix .. "спа́вший"
forms["pres_pasv_part"] = ""
forms["past_adv_part"] = prefix .. "спа́вши"; forms["past_adv_part_short"] = prefix .. "спа́в"
forms["pres_actv_part"] = prefix .. "спя́щий"
forms["pres_adv_part"] = prefix .. "спя́"
forms["impr_sg"] = prefix .. "спи́"
forms["impr_pl"] = prefix .. "спи́те"
forms["pres_futr_1sg"] = prefix .. "сплю́"
forms["pres_futr_2sg"] = prefix .. "спи́шь"
forms["pres_futr_3sg"] = prefix .. "спи́т"
forms["pres_futr_1pl"] = prefix .. "спи́м"
forms["pres_futr_2pl"] = prefix .. "спи́те"
forms["pres_futr_3pl"] = prefix .. "спя́т"
forms["past_m"] = prefix .. "спа́л"
forms["past_f"] = prefix .. "спала́"
forms["past_n"] = prefix .. "спа́ло"
forms["past_pl"] = prefix .. "спа́ли"
-- вы́спаться (perfective, reflexive), reflexive endings are added later
if prefix == "вы́" then
forms["infinitive"] = prefix .. "спать"
forms["past_actv_part"] = prefix .. "спавший"
forms["past_adv_part"] = prefix .. "спавши"; forms["past_adv_part_short"] = ""
forms["impr_sg"] = prefix .. "спи"
forms["impr_pl"] = prefix .. "спите"
forms["pres_futr_1sg"] = prefix .. "сплю"
forms["pres_futr_2sg"] = prefix .. "спишь"
forms["pres_futr_3sg"] = prefix .. "спит"
forms["pres_futr_1pl"] = prefix .. "спим"
forms["pres_futr_2pl"] = prefix .. "спите"
forms["pres_futr_3pl"] = prefix .. "спят"
forms["past_m"] = prefix .. "спал"
forms["past_f"] = prefix .. "спала"
forms["past_n"] = prefix .. "спало"
forms["past_pl"] = prefix .. "спали"
end
return forms, title, categories
end
conjugations["irreg-хотеть"] = function(args)
-- irregular, only for verbs derived from хотеть with the same stress pattern
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local prefix = args[2]; if not prefix then prefix = "" end
forms["infinitive"] = prefix .. "хоте́ть"
forms["past_actv_part"] = prefix .. "хоте́вший"
forms["pres_pasv_part"] = ""
forms["past_adv_part"] = prefix .. "хоте́вши"; forms["past_adv_part_short"] = prefix .. "хоте́в"
forms["pres_actv_part"] = prefix .. "хотя́щий"
forms["pres_adv_part"] = prefix .. "хотя́"
forms["impr_sg"] = prefix .. "хоти́"
forms["impr_pl"] = prefix .. "хоти́те"
forms["pres_futr_1sg"] = prefix .. "хочу́"
forms["pres_futr_2sg"] = prefix .. "хо́чешь"
forms["pres_futr_3sg"] = prefix .. "хо́чет"
forms["pres_futr_1pl"] = prefix .. "хоти́м"
forms["pres_futr_2pl"] = prefix .. "хоти́те"
forms["pres_futr_3pl"] = prefix .. "хотя́т"
forms["past_m"] = prefix .. "хоте́л"
forms["past_f"] = prefix .. "хоте́ла"
forms["past_n"] = prefix .. "хоте́ло"
forms["past_pl"] = prefix .. "хоте́ли"
return forms, title, categories
end
conjugations["irreg-дать"] = function(args)
-- irregular, only for verbs derived from дать with the same stress pattern and вы́дать
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local prefix = args[2]; if not prefix then prefix = "" end
-- alternative past masculine forms: со́здал/созд́ал, п́ередал/переда́л, ́отдал/отд́ал, etc.
local past_m = args["past_m"]
local past_m2 = args["past_m2"]
local past_f = args["past_f"]
local past_n = args["past_n"]
local past_pl = args["past_pl"]
forms["infinitive"] = prefix .. "да́ть"
forms["past_actv_part"] = prefix .. "да́вший"
forms["pres_pasv_part"] = ""
forms["past_adv_part"] = prefix .. "да́вши"; forms["past_adv_part_short"] = prefix .. "да́в"
forms["pres_actv_part"] = "даю́щий"
forms["pres_adv_part"] = ""
forms["impr_sg"] = prefix .. "да́й"
forms["impr_pl"] = prefix .. "да́йте"
forms["pres_futr_1sg"] = prefix .. "да́м"
forms["pres_futr_2sg"] = prefix .. "да́шь"
forms["pres_futr_3sg"] = prefix .. "да́ст"
forms["pres_futr_1pl"] = prefix .. "дади́м"
forms["pres_futr_2pl"] = prefix .. "дади́те"
forms["pres_futr_3pl"] = prefix .. "даду́т"
forms["past_m"] = prefix .. "да́л"
-- пе́редал, ́отдал, пр́одал, з́адал, etc.
forms["past_m2"] = past_m2
forms["past_f"] = prefix .. "дала́"
forms["past_n"] = prefix .. "да́ло"
forms["past_n2"] = prefix .. "дало́" --same with "взять"
forms["past_pl"] = prefix .. "да́ли"
-- вы́дать (perfective)
if prefix == "вы́" then
forms["infinitive"] = prefix .. "дать"
forms["past_actv_part"] = prefix .. "давший"
forms["past_adv_part"] = prefix .. "давши"; forms["past_adv_part_short"] = prefix .. "дав"
forms["impr_sg"] = prefix .. "дай"
forms["impr_pl"] = prefix .. "дайте"
forms["pres_futr_1sg"] = prefix .. "дам"
forms["pres_futr_2sg"] = prefix .. "дашь"
forms["pres_futr_3sg"] = prefix .. "даст"
forms["pres_futr_1pl"] = prefix .. "дадим"
forms["pres_futr_2pl"] = prefix .. "дадите"
forms["pres_futr_3pl"] = prefix .. "дадут"
forms["past_m"] = prefix .. "дал"
forms["past_f"] = prefix .. "дала"
forms["past_n"] = prefix .. "дало"
forms["past_pl"] = prefix .. "дали"
end
if past_m then
forms["past_m"] = past_m
end
if past_f then
forms["past_f"] = past_f
end
if past_n then
forms["past_n"] = past_n
end
if past_pl then
forms["past_pl"] = past_pl
end
return forms, title, categories
end
conjugations["irreg-есть"] = function(args)
-- irregular, only for verbs derived from есть
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local prefix = args[2]; if not prefix then prefix = "" end
forms["infinitive"] = prefix .. "е́сть"
forms["past_actv_part"] = prefix .. "е́вший"
forms["pres_pasv_part"] = "едо́мый"
forms["past_adv_part"] = prefix .. "е́вши"; forms["past_adv_part_short"] = prefix .. "е́в"
forms["pres_actv_part"] = "едя́щий"
forms["pres_adv_part"] = "едя́"
forms["impr_sg"] = prefix .. "е́шь"
forms["impr_pl"] = prefix .. "е́шьте"
forms["pres_futr_1sg"] = prefix .. "е́м"
forms["pres_futr_2sg"] = prefix .. "е́шь"
forms["pres_futr_3sg"] = prefix .. "е́ст"
forms["pres_futr_1pl"] = prefix .. "еди́м"
forms["pres_futr_2pl"] = prefix .. "еди́те"
forms["pres_futr_3pl"] = prefix .. "едя́т"
forms["past_m"] = prefix .. "е́л"
forms["past_f"] = prefix .. "е́ла"
forms["past_n"] = prefix .. "е́ло"
forms["past_pl"] = prefix .. "е́ли"
-- вы́есть (perfective)
if prefix == "вы́" then
forms["infinitive"] = prefix .. "есть"
forms["past_actv_part"] = prefix .. "евший"
forms["past_adv_part"] = prefix .. "евши"; forms["past_adv_part_short"] = prefix .. "ев"
forms["impr_sg"] = prefix .. "ешь"
forms["impr_pl"] = prefix .. "ешьте"
forms["pres_futr_1sg"] = prefix .. "ем"
forms["pres_futr_2sg"] = prefix .. "ешь"
forms["pres_futr_3sg"] = prefix .. "ест"
forms["pres_futr_1pl"] = prefix .. "едим"
forms["pres_futr_2pl"] = prefix .. "едите"
forms["pres_futr_3pl"] = prefix .. "едят"
forms["past_m"] = prefix .. "ел"
forms["past_f"] = prefix .. "ела"
forms["past_n"] = prefix .. "ело"
forms["past_pl"] = prefix .. "ели"
end
return forms, title, categories
end
conjugations["irreg-сыпать"] = function(args)
-- irregular, only for verbs derived from сыпать
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local prefix = args[2]; if not prefix then prefix = "" end
forms["infinitive"] = prefix .. "сы́пать"
forms["past_actv_part"] = prefix .. "сы́павший"
forms["pres_pasv_part"] = ""
forms["past_adv_part"] = prefix .. "сы́павши"; forms["past_adv_part_short"] = prefix .. "сы́пав"
forms["pres_actv_part"] = prefix .. "сы́плющий"
forms["pres_adv_part"] = prefix .. "сы́пля"
forms["pres_adv_part2"] = prefix .. "сы́пя"
forms["impr_sg"] = prefix .. "сы́пь"
forms["impr_pl"] = prefix .. "сы́пьте"
forms["pres_futr_1sg"] = prefix .. "сы́плю"
forms["pres_futr_2sg"] = prefix .. "сы́плешь"
forms["pres_futr_2sg2"] = prefix .. "сы́пешь"
forms["pres_futr_3sg"] = prefix .. "сы́плет"
forms["pres_futr_3sg2"] = prefix .. "сы́пет"
forms["pres_futr_1pl"] = prefix .. "сы́плем"
forms["pres_futr_1pl2"] = prefix .. "сы́пем"
forms["pres_futr_2pl"] = prefix .. "сы́плете"
forms["pres_futr_2pl2"] = prefix .. "сы́пете"
forms["pres_futr_3pl"] = prefix .. "сы́плют"
forms["pres_futr_3pl2"] = prefix .. "сы́пют"
forms["past_m"] = prefix .. "сы́пал"
forms["past_f"] = prefix .. "сы́пала"
forms["past_n"] = prefix .. "сы́пало"
forms["past_pl"] = prefix .. "сы́пали"
-- вы́сыпать (perfective), not to confuse with высыпа́ть (1a, imperfective)
if prefix == "вы́" then
forms["infinitive"] = prefix .. "сыпать"
forms["past_actv_part"] = prefix .. "сыпавший"
forms["past_adv_part"] = prefix .. "сыпавши"; forms["past_adv_part_short"] = prefix .. "сыпав"
forms["impr_sg"] = prefix .. "сыпь"
forms["impr_pl"] = prefix .. "сыпьте"
forms["pres_futr_1sg"] = prefix .. "сыплю"
forms["pres_futr_2sg"] = prefix .. "сыплешь"
forms["pres_futr_2sg2"] = prefix .. "сыпешь"
forms["pres_futr_3sg"] = prefix .. "сыплет"
forms["pres_futr_3sg2"] = prefix .. "сыпет"
forms["pres_futr_1pl"] = prefix .. "сыплем"
forms["pres_futr_1pl2"] = prefix .. "сыпем"
forms["pres_futr_2pl"] = prefix .. "сыплете"
forms["pres_futr_2pl2"] = prefix .. "сыпете"
forms["pres_futr_3pl"] = prefix .. "сыплют"
forms["pres_futr_3pl2"] = prefix .. "сыпют"
forms["past_m"] = prefix .. "сыпал"
forms["past_f"] = prefix .. "сыпала"
forms["past_n"] = prefix .. "сыпало"
forms["past_pl"] = prefix .. "сыпали"
end
return forms, title, categories
end
conjugations["irreg-лгать"] = function(args)
-- irregular, only for verbs derived from лгать with the same stress pattern
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local prefix = args[2]; if not prefix then prefix = "" end
forms["infinitive"] = prefix .. "лга́ть"
forms["past_actv_part"] = prefix .. "лга́вший"
forms["pres_pasv_part"] = ""
forms["past_adv_part"] = prefix .. "лга́вши"; forms["past_adv_part_short"] = prefix .. "лга́в"
forms["pres_actv_part"] = prefix .. "лгу́щий"
forms["pres_adv_part"] = ""
forms["impr_sg"] = prefix .. "лги́"
forms["impr_pl"] = prefix .. "лги́те"
forms["pres_futr_1sg"] = prefix .. "лгу́"
forms["pres_futr_2sg"] = prefix .. "лжёшь"
forms["pres_futr_3sg"] = prefix .. "лжёт"
forms["pres_futr_1pl"] = prefix .. "лжём"
forms["pres_futr_2pl"] = prefix .. "лжёте"
forms["pres_futr_3pl"] = prefix .. "лгу́т"
forms["past_m"] = prefix .. "лга́л"
forms["past_f"] = prefix .. "лгала́"
forms["past_n"] = prefix .. "лга́ло"
forms["past_pl"] = prefix .. "лга́ли"
return forms, title, categories
end
conjugations["irreg-мочь"] = function(args)
-- irregular, only for verbs derived from мочь with the same stress pattern
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local prefix = args[2]; if not prefix then prefix = "" end
local no_past_adv = "0"
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local prefix = args[2]; if not prefix then prefix = "" end
forms["infinitive"] = prefix .. "мо́чь"
forms["past_actv_part"] = prefix .. "мо́гший"
forms["pres_pasv_part"] = ""
forms["past_adv_part"] = ""; forms["past_adv_part_short"] = ""
forms["pres_actv_part"] = prefix .. "мо́гущий"
forms["pres_adv_part"] = ""
forms["impr_sg"] = prefix .. "моги́"
forms["impr_pl"] = prefix .. "моги́те"
forms["pres_futr_1sg"] = prefix .. "могу́"
forms["pres_futr_2sg"] = prefix .. "мо́жешь"
forms["pres_futr_3sg"] = prefix .. "мо́жет"
forms["pres_futr_1pl"] = prefix .. "мо́жем"
forms["pres_futr_2pl"] = prefix .. "мо́жете"
forms["pres_futr_3pl"] = prefix .. "мо́гут"
forms["past_m"] = prefix .. "мо́г"
forms["past_f"] = prefix .. "могла́"
forms["past_n"] = prefix .. "могло́"
forms["past_pl"] = prefix .. "могли́"
return forms, title, categories
end
conjugations["irreg-слать"] = function(args)
-- irregular, only for verbs derived from слать
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local prefix = args[2]; if not prefix then prefix = "" end
forms["infinitive"] = prefix .. "сла́ть"
forms["past_actv_part"] = prefix .. "сла́вший"
forms["pres_pasv_part"] = ""
forms["past_adv_part"] = prefix .. "сла́вши"; forms["past_adv_part_short"] = prefix .. "сла́в"
forms["pres_actv_part"] = prefix .. "шлю́щий"
forms["pres_adv_part"] = ""
forms["impr_sg"] = prefix .. "шли́"
forms["impr_pl"] = prefix .. "шли́те"
forms["pres_futr_1sg"] = prefix .. "шлю́"
forms["pres_futr_2sg"] = prefix .. "шлёшь"
forms["pres_futr_3sg"] = prefix .. "шлёт"
forms["pres_futr_1pl"] = prefix .. "шлём"
forms["pres_futr_2pl"] = prefix .. "шлёте"
forms["pres_futr_3pl"] = prefix .. "шлю́т"
forms["past_m"] = prefix .. "сла́л"
forms["past_f"] = prefix .. "сла́ла"
forms["past_n"] = prefix .. "сла́ло"
forms["past_pl"] = prefix .. "сла́ли"
-- вы́слать (perfective)
if prefix == "вы́" then
forms["infinitive"] = prefix .. "слать"
forms["past_actv_part"] = prefix .. "славший"
forms["past_adv_part"] = prefix .. "славши"; forms["past_adv_part_short"] = prefix .. "слав"
forms["impr_sg"] = prefix .. "шли"
forms["impr_pl"] = prefix .. "шлите"
forms["pres_futr_1sg"] = prefix .. "шлю"
forms["pres_futr_2sg"] = prefix .. "шлешь"
forms["pres_futr_3sg"] = prefix .. "шлет"
forms["pres_futr_1pl"] = prefix .. "шлем"
forms["pres_futr_2pl"] = prefix .. "шлете"
forms["pres_futr_3pl"] = prefix .. "шлют"
forms["past_m"] = prefix .. "слал"
forms["past_f"] = prefix .. "слала"
forms["past_n"] = prefix .. "слало"
forms["past_pl"] = prefix .. "слали"
end
return forms, title, categories
end
conjugations["irreg-идти"] = function(args)
-- irregular, only for verbs derived from идти, including прийти́ and в́ыйти
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local prefix = args[2]; if not prefix then prefix = "" end
forms["pres_pasv_part"] = ""
if prefix == "вы́" then
forms["infinitive"] = prefix .. "йти"
forms["impr_sg"] = prefix .. "йди"
forms["impr_pl"] = prefix .. "йдите"
present_e_a(forms, prefix .. "йд")
forms["past_adv_part"] = prefix .. "шедши"; forms["past_adv_part_short"] = prefix .. "йдя"
elseif prefix == "при" then
forms["infinitive"] = prefix .. "йти́"
forms["impr_sg"] = prefix .. "ди́"
forms["impr_pl"] = prefix .. "ди́те"
present_e_b(forms, prefix .. "д")
forms["past_adv_part"] = prefix .. "ше́дши"; forms["past_adv_part_short"] = prefix .. "дя́"
else
forms["infinitive"] = prefix .. "йти́"
forms["pres_actv_part"] = prefix .. "иду́щий"
forms["impr_sg"] = prefix .. "йди́"
forms["impr_pl"] = prefix .. "йди́те"
present_e_b(forms, prefix .. "йд")
forms["past_adv_part"] = prefix .. "ше́дши"; forms["past_adv_part_short"] = prefix .. "йдя́"
end
-- only идти, present imperfective
if prefix == "" then
--only used with imperfective идти
forms["pres_adv_part"] = "идя́"
forms["pres_actv_part"] = "иду́щий"
forms["infinitive"] = "идти́"
forms["pres_actv_part"] = "иду́щий"
forms["impr_sg"] = "иди́"
forms["impr_pl"] = "иди́те"
present_e_b(forms, "ид")
forms["past_adv_part"] = "ше́дши"; forms["past_adv_part_short"] = ""
end
-- вы́йти (perfective)
if prefix == "вы́" then
forms["past_actv_part"] = prefix .. "шедший"
forms["past_m"] = prefix .. "шел"
forms["past_f"] = prefix .. "шла"
forms["past_n"] = prefix .. "шло"
forms["past_pl"] = prefix .. "шли"
else
forms["past_actv_part"] = prefix .. "ше́дший"
forms["past_m"] = prefix .. "шёл"
forms["past_f"] = prefix .. "шла́"
forms["past_n"] = prefix .. "шло́"
forms["past_pl"] = prefix .. "шли́"
end
return forms, title, categories
end
conjugations["irreg-ехать"] = function(args)
-- irregular, only for verbs derived from ехать
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local prefix = args[2]; if not prefix then prefix = "" end
local pres_stem = prefix .. "е́д"
local past_stem = prefix .. "е́х"
-- вы́ехать
if prefix == "вы́" then
pres_stem = prefix .. "ед"
past_stem = prefix .. "ех"
end
forms["infinitive"] = past_stem .. "ать"
forms["past_actv_part"] = past_stem .. "авший"
forms["pres_pasv_part"] = ""
forms["past_adv_part"] = past_stem .. "авши"; forms["past_adv_part_short"] = past_stem .. "ав"
--вы́ехать has no present
forms["pres_actv_part"] = pres_stem .. "ущий"
forms["pres_adv_part"] = ""
--literary (special) imperative forms for ехать are поезжа́й, поезжа́йте
if prefix == "" then
forms["impr_sg"] = "поезжа́й"
forms["impr_pl"] = "поезжа́йте"
forms["impr_sg2"] = "езжа́й"
forms["impr_pl2"] = "езжа́йте"
elseif prefix == "вы́" then
forms["impr_sg"] = "выезжа́й"
forms["impr_pl"] = "выезжа́йте"
else
forms["impr_sg"] = prefix .. "езжа́й"
forms["impr_pl"] = prefix .. "езжа́йте"
end
present_e_a(forms, pres_stem)
forms["past_m"] = past_stem .. "ал"
forms["past_f"] = past_stem .. "ала"
forms["past_n"] = past_stem .. "ало"
forms["past_pl"] = past_stem .. "али"
return forms, title, categories
end
conjugations["irreg-минуть"] = function(args)
-- for the irregular verb "ми́нуть"
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local stem_noa = com.make_unstressed(stem)
forms["infinitive"] = stem .. "уть"
forms["pres_actv_part"] = stem .. "у́щий"
forms["past_actv_part"] = stem_noa .. "у́вший"
forms["past_actv_part2"] = stem .. "увший"
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = ""
forms["past_adv_part"] = stem_noa .. "у́вши"; forms["past_adv_part_short"] = stem_noa .. "у́в"
forms["past_adv_part2"] = stem .. "увши"; forms["past_adv_part_shor2t"] = stem .. "ув"
present_e_c(forms, stem)
-- no imperative
forms["impr_sg"] = ""
forms["impr_pl"] = ""
forms["past_m"] = stem_noa .. "у́л"
forms["past_f"] = stem_noa .. "у́ла"
forms["past_n"] = stem_noa .. "у́ло"
forms["past_pl"] = stem_noa .. "у́ли"
forms["past_m2"] = stem .. "ул"
forms["past_f2"] = stem .. "ула"
forms["past_n2"] = stem .. "уло"
forms["past_pl2"] = stem .. "ули"
return forms, title, categories
end
conjugations["irreg-живописать-миновать"] = function(args)
-- for irregular verbs "живописа́ть" and "минова́ть", mixture of types 1 and 2
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local inf_stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local pres_stem = args[3] or (NAMESPACE == "Template" and "-") or error("Third parameter has not been provided")
forms["infinitive"] = inf_stem .. "ть"
forms["pres_actv_part"] = pres_stem .. "ющий"
forms["past_actv_part"] = inf_stem .. "вший"
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = pres_stem .. "я"
forms["past_adv_part"] = inf_stem .. "вши"; forms["past_adv_part_short"] = inf_stem .. "в"
present_je_a(forms, pres_stem)
forms["impr_sg"] = pres_stem .. "й"
forms["impr_pl"] = pres_stem .. "йте"
forms["past_m"] = inf_stem .. "л"
forms["past_f"] = inf_stem .. "ла"
forms["past_n"] = inf_stem .. "ло"
forms["past_pl"] = inf_stem .. "ли"
return forms, title, categories
end
conjugations["irreg-лечь"] = function(args)
-- irregular, only for verbs derived from лечь with the same stress pattern
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local prefix = args[2]; if not prefix then prefix = "" end
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local prefix = args[2]; if not prefix then prefix = "" end
forms["infinitive"] = prefix .. "ле́чь"
forms["past_actv_part"] = prefix .. "лёгший"
forms["pres_pasv_part"] = ""
forms["past_adv_part"] = prefix .. "лёгши"; forms["past_adv_part_short"] = ""
forms["pres_actv_part"] = ""
forms["pres_adv_part"] = ""
forms["impr_sg"] = prefix .. "ля́г"
forms["impr_pl"] = prefix .. "ля́гте"
forms["pres_futr_1sg"] = prefix .. "ля́гу"
forms["pres_futr_2sg"] = prefix .. "ля́жешь"
forms["pres_futr_3sg"] = prefix .. "ля́жет"
forms["pres_futr_1pl"] = prefix .. "ля́жем"
forms["pres_futr_2pl"] = prefix .. "ля́жете"
forms["pres_futr_3pl"] = prefix .. "ля́гут"
forms["past_m"] = prefix .. "лёг"
forms["past_f"] = prefix .. "легла́"
forms["past_n"] = prefix .. "легло́"
forms["past_pl"] = prefix .. "легли́"
return forms, title, categories
end
conjugations["irreg-зиждиться"] = function(args)
-- irregular, only for verbs derived from зиждиться with the same stress pattern
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local prefix = args[2]; if not prefix then prefix = "" end
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local prefix = args[2]; if not prefix then prefix = "" end
forms["infinitive"] = prefix .. "зи́ждить"
forms["past_actv_part"] = prefix .. "зи́ждивший"
forms["pres_pasv_part"] = ""
forms["past_adv_part"] = prefix .. "зи́ждивши"; forms["past_adv_part_short"] = ""
forms["pres_actv_part"] = prefix .. "зи́ждущий"
forms["pres_adv_part"] = prefix .. "зи́ждя"
forms["impr_sg"] = prefix .. "зи́жди"
forms["impr_pl"] = prefix .. "зи́ждите"
forms["pres_futr_1sg"] = prefix .. "зи́жду"
forms["pres_futr_2sg"] = prefix .. "зи́ждешь"
forms["pres_futr_3sg"] = prefix .. "зи́ждет"
forms["pres_futr_1pl"] = prefix .. "зи́ждем"
forms["pres_futr_2pl"] = prefix .. "зи́ждете"
forms["pres_futr_3pl"] = prefix .. "зи́ждут"
forms["past_m"] = prefix .. "зи́ждил"
forms["past_f"] = prefix .. "зи́ждила"
forms["past_n"] = prefix .. "зи́ждило"
forms["past_pl"] = prefix .. "зи́ждили"
return forms, title, categories
end
conjugations["irreg-клясть"] = function(args)
-- irregular, only for verbs derived from клясть with the same stress pattern
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local prefix = args[2]; if not prefix then prefix = "" end
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local prefix = args[2]; if not prefix then prefix = "" end
forms["infinitive"] = prefix .. "кля́сть"
forms["past_actv_part"] = prefix .. "кля́вший"
forms["pres_pasv_part"] = prefix .. "кляну́щий"
forms["past_adv_part"] = prefix .. "кля́вши"; forms["past_adv_part_short"] =prefix .. "кля́в"
forms["pres_actv_part"] = prefix .. "кляну́щий"
forms["pres_adv_part"] = prefix .. "кляня́"
forms["impr_sg"] = prefix .. "кляни́"
forms["impr_pl"] = prefix .. "кляни́те"
forms["pres_futr_1sg"] = prefix .. "кляну́"
forms["pres_futr_2sg"] = prefix .. "клянёшь"
forms["pres_futr_3sg"] = prefix .. "клянёт"
forms["pres_futr_1pl"] = prefix .. "клянём"
forms["pres_futr_2pl"] = prefix .. "клянёте"
forms["pres_futr_3pl"] = prefix .. "кляну́т"
if args["past_m"] then
forms["past_m"] = args["past_m"]
forms["past_n"] = args["past_m"] .. "о"
forms["past_pl"] = args["past_m"] .. "и"
else
forms["past_m"] = prefix .. "кля́л"
forms["past_n"] = prefix .. "кля́ло"
forms["past_pl"] = prefix .. "кля́ли"
end
forms["past_f"] = prefix .. "кляла́"
return forms, title, categories
end
conjugations["irreg-слыхать-видать"] = function(args)
-- irregular, only for isolated verbs derived from слыхать or видать with the same stress pattern
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
forms["infinitive"] = stem .. "ть"
forms["past_actv_part"] = stem .. "вший"
forms["pres_pasv_part"] = ""
forms["past_adv_part"] = stem .. "вши"; forms["past_adv_part_short"] = stem .. "в"
-- no present forms or imperatives
forms["pres_actv_part"] = ""
forms["pres_adv_part"] = ""
forms["impr_sg"] = ""
forms["impr_pl"] = ""
forms["pres_futr_1sg"] = ""
forms["pres_futr_2sg"] = ""
forms["pres_futr_3sg"] = ""
forms["pres_futr_1pl"] = ""
forms["pres_futr_2pl"] = ""
forms["pres_futr_3pl"] = ""
forms["past_m"] = stem .. "л"
forms["past_f"] = stem .. "ла"
forms["past_n"] = stem .. "ло"
forms["past_pl"] = stem .. "ли"
return forms, title, categories
end
conjugations["irreg-стелить-стлать"] = function(args)
-- irregular, only for verbs derived from стелить and стлать with the same stress pattern
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local stem = args[2] or (NAMESPACE == "Template" and "-") or error("Second parameter has not been provided")
local prefix = args[3]; if not prefix then prefix = "" end
forms["infinitive"] = prefix .. stem .. "ть"
forms["past_actv_part"] = prefix .. stem .. "вший"
forms["pres_pasv_part"] = prefix .. "стели́мый"
forms["past_adv_part"] = prefix .. stem .. "вши"; forms["past_adv_part_short"] = prefix .. stem .. "в"
forms["pres_actv_part"] = prefix .. "сте́лющий"
forms["pres_adv_part"] = prefix .. "стеля́"
forms["impr_sg"] = prefix .. "стели́"
forms["impr_pl"] = prefix .. "стели́те"
forms["pres_futr_1sg"] = prefix .. "стелю́"
forms["pres_futr_2sg"] = prefix .. "сте́лешь"
forms["pres_futr_3sg"] = prefix .. "сте́лет"
forms["pres_futr_1pl"] = prefix .. "сте́лем"
forms["pres_futr_2pl"] = prefix .. "сте́лете"
forms["pres_futr_3pl"] = prefix .. "сте́лют"
forms["past_m"] = prefix .. stem .. "л"
forms["past_f"] = prefix .. stem .. "ла"
forms["past_n"] = prefix .. stem .. "ло"
forms["past_pl"] = prefix .. stem .. "ли"
return forms, title, categories
end
conjugations["irreg-быть"] = function(args)
-- irregular, only for verbs derived from быть with various stress patterns, the actual verb быть different from its derivatives
local forms = {}
local categories = {"Russian irregular verbs"}
local title = "irregular"
local prefix = args[2]; if not prefix then prefix = "" end
local past_m = args["past_m"]
local past_f = args["past_f"]
local past_n = args["past_n"]
local past_pl = args["past_pl"]
if prefix == ""
then forms["infinitive"] = "бы́ть"
else
forms["infinitive"] = prefix .. "бы́ть"
end
forms["past_actv_part"] = prefix .. "бы́вший"
forms["pres_pasv_part"] = ""
--only for "бы́ть" - бу́дучи
if forms["infinitive"] == "бы́ть" then
forms["past_adv_part"] = "бу́дучи"; forms["past_adv_part_short"] = ""
end
forms["past_adv_part"] = prefix .. "бы́вши"; forms["past_adv_part_short"] = prefix .. "бы́в"
-- if the prefix is stressed
if mw.ustring.find(prefix, "[́]") then
forms["past_adv_part"] = prefix .. "бывши"; forms["past_adv_part_short"] = prefix .. "быв"
end
forms["pres_actv_part"] = "су́щий"
forms["pres_adv_part"] = ""
forms["impr_sg"] = prefix .. "бу́дь"
forms["impr_pl"] = prefix .. "бу́дьте"
-- only for "бы́ть", some forms are archaic
if forms["infinitive"] == "бы́ть" then
forms["pres_futr_1sg"] = "есмь"
forms["pres_futr_2sg"] = "еси́"
forms["pres_futr_3sg"] = "есть"
forms["pres_futr_1pl"] = "есмы́"
forms["pres_futr_2pl"] = "е́сте"
forms["pres_futr_3pl"] = "суть"
else
forms["pres_futr_1sg"] = prefix .. "бу́ду"
forms["pres_futr_2sg"] = prefix .. "бу́дешь"
forms["pres_futr_3sg"] = prefix .. "бу́дет"
forms["pres_futr_1pl"] = prefix .. "бу́дем"
forms["pres_futr_2pl"] = prefix .. "бу́дете"
forms["pres_futr_3pl"] = prefix .. "бу́дут"
end
-- if the prefix is stressed, e.g. "вы́быть"
if mw.ustring.find(prefix, "[́]") then
forms["pres_futr_1sg"] = prefix .. "буду"
forms["pres_futr_2sg"] = prefix .. "будешь"
forms["pres_futr_3sg"] = prefix .. "будет"
forms["pres_futr_1pl"] = prefix .. "будем"
forms["pres_futr_2pl"] = prefix .. "будете"
forms["pres_futr_3pl"] = prefix .. "будут"
end
forms["past_m"] = prefix .. "бы́л"
forms["past_f"] = prefix .. "была́"
forms["past_n"] = prefix .. "бы́ло"
forms["past_pl"] = prefix .. "бы́ли"
-- if the prefix is stressed
if mw.ustring.find(prefix, "[́]") then
forms["past_m"] = prefix .. "был"
forms["past_f"] = prefix .. "была"
forms["past_n"] = prefix .. "было"
forms["past_pl"] = prefix .. "были"
end
-- при́был
if past_m then
forms["past_m"] = past_m
end
-- прибыла́
if past_f then
forms["past_f"] = past_f
end
-- сбыло́сь
if past_n then
forms["past_n"] = past_n
end
-- сбыли́сь
if past_pl then
forms["past_pl"] = past_pl
end
return forms, title, categories
end
--[=[
Partial conjugation functions
]=]--
-- Present forms with -e-, no j-vowels.
function present_e_a(forms, stem)
forms["pres_futr_1sg"] = stem .. "у"
forms["pres_futr_2sg"] = stem .. "ешь"
forms["pres_futr_3sg"] = stem .. "ет"
forms["pres_futr_1pl"] = stem .. "ем"
forms["pres_futr_2pl"] = stem .. "ете"
forms["pres_futr_3pl"] = stem .. "ут"
end
function present_e_b(forms, stem)
if mw.ustring.find(stem, "[аэыоуяеиёю́]$") then
forms["pres_futr_1sg"] = stem .. "ю́"
forms["pres_futr_3pl"] = stem .. "ю́т"
else
forms["pres_futr_1sg"] = stem .. "у́"
forms["pres_futr_3pl"] = stem .. "у́т"
end
forms["pres_futr_2sg"] = stem .. "ёшь"
forms["pres_futr_3sg"] = stem .. "ёт"
forms["pres_futr_1pl"] = stem .. "ём"
forms["pres_futr_2pl"] = stem .. "ёте"
end
function present_e_c(forms, stem)
local stem_noa = com.make_unstressed(stem)
forms["pres_futr_1sg"] = stem_noa .. "у́"
forms["pres_futr_2sg"] = stem .. "ешь"
forms["pres_futr_3sg"] = stem .. "ет"
forms["pres_futr_1pl"] = stem .. "ем"
forms["pres_futr_2pl"] = stem .. "ете"
forms["pres_futr_3pl"] = stem .. "ут"
end
-- Present forms with -e-, with j-vowels.
function present_je_a(forms, stem, no_iotation)
local iotated_stem = com.iotation(stem, shch)
-- Verbs ending in a hushing consonant do not get j-vowels in the endings.
if mw.ustring.find(iotated_stem, "[шщжч]$") then
forms["pres_futr_1sg"] = iotated_stem .. "у"
else
forms["pres_futr_1sg"] = iotated_stem .. "ю"
end
if mw.ustring.find(iotated_stem, "[шщжч]$") then
forms["pres_futr_3pl"] = iotated_stem .. "ут"
else
forms["pres_futr_3pl"] = iotated_stem .. "ют"
end
forms["pres_futr_2sg"] = iotated_stem .. "ешь"
forms["pres_futr_3sg"] = iotated_stem .. "ет"
forms["pres_futr_1pl"] = iotated_stem .. "ем"
forms["pres_futr_2pl"] = iotated_stem .. "ете"
if no_iotation then
forms["pres_futr_1sg"] = stem .. "у"
forms["pres_futr_3pl"] = stem .. "ут"
forms["pres_futr_2sg"] = stem .. "ешь"
forms["pres_futr_3sg"] = stem .. "ет"
forms["pres_futr_1pl"] = stem .. "ем"
forms["pres_futr_2pl"] = stem .. "ете"
end
end
function present_je_b(forms, stem)
forms["pres_futr_1sg"] = stem .. "ю́"
forms["pres_futr_2sg"] = stem .. "ёшь"
forms["pres_futr_3sg"] = stem .. "ёт"
forms["pres_futr_1pl"] = stem .. "ём"
forms["pres_futr_2pl"] = stem .. "ёте"
forms["pres_futr_3pl"] = stem .. "ю́т"
end
function present_je_c(forms, stem)
local stem_noa = com.make_unstressed(stem)
-- iotate the stem
local iotated_stem = com.iotation(stem)
-- iotate the 2nd stem
local iotated_stem_noa = com.iotation(stem_noa)
-- Verbs ending in a hushing consonant do not get j-vowels in the endings.
if mw.ustring.find(iotated_stem_noa, "[шщжч]$") then
forms["pres_futr_1sg"] = iotated_stem_noa .. "у́"
else
forms["pres_futr_1sg"] = iotated_stem_noa .. "ю́"
end
-- Verbs ending in a hushing consonant do not get j-vowels in the endings.
if mw.ustring.find(iotated_stem, "[шщжч]$") then
forms["pres_futr_3pl"] = iotated_stem .. "ут"
else
forms["pres_futr_3pl"] = iotated_stem .. "ют"
end
forms["pres_futr_2sg"] = iotated_stem .. "ешь"
forms["pres_futr_3sg"] = iotated_stem .. "ет"
forms["pres_futr_1pl"] = iotated_stem .. "ем"
forms["pres_futr_2pl"] = iotated_stem .. "ете"
end
-- Present forms with -i-.
function present_i_a(forms, stem, shch)
-- shch - iotatate final т as щ, not ч
-- iotate the stem
local iotated_stem = com.iotation(stem, shch)
-- Verbs ending in a hushing consonant do not get j-vowels in the endings.
if mw.ustring.find(iotated_stem, "[шщжч]$") then
forms["pres_futr_1sg"] = iotated_stem .. "у"
else
forms["pres_futr_1sg"] = iotated_stem .. "ю"
end
if mw.ustring.find(stem, "[шщжч]$") then
forms["pres_futr_3pl"] = stem .. "ат"
else
forms["pres_futr_3pl"] = stem .. "ят"
end
forms["pres_futr_2sg"] = stem .. "ишь"
forms["pres_futr_3sg"] = stem .. "ит"
forms["pres_futr_1pl"] = stem .. "им"
forms["pres_futr_2pl"] = stem .. "ите"
end
function present_i_b(forms, stem, no_1sg_futr, shch)
-- parameter no_1sg_futr - no 1st person singular future if no_1sg_futr = 1
if not no_1sg_futr then
no_1sg_futr = 0
end
-- parameter shch - iotatate final т as щ, not ч
if not shch then
shch = ""
end
-- iotate the stem
local iotated_stem = com.iotation(stem, shch)
-- Make 1st person future singular blank if no_1sg_futr = 1
if no_1sg_futr == 1 then
forms["pres_futr_1sg"] = ""
-- Verbs ending in a hushing consonant do not get j-vowels in the endings.
elseif mw.ustring.find(iotated_stem, "[шщжч]$") then
forms["pres_futr_1sg"] = iotated_stem .. "у́"
else
forms["pres_futr_1sg"] = iotated_stem .. "ю́"
end
if mw.ustring.find(stem, "[шщжч]$") then
forms["pres_futr_3pl"] = stem .. "а́т"
else
forms["pres_futr_3pl"] = stem .. "я́т"
end
forms["pres_futr_2sg"] = stem .. "и́шь"
forms["pres_futr_3sg"] = stem .. "и́т"
forms["pres_futr_1pl"] = stem .. "и́м"
forms["pres_futr_2pl"] = stem .. "и́те"
end
function present_i_c(forms, stem, shch)
-- shch - iotatate final т as щ, not ч
local stem_noa = com.make_unstressed(stem)
-- iotate the stem
local iotated_stem = com.iotation(stem_noa, shch)
-- Verbs ending in a hushing consonant do not get j-vowels in the endings.
if mw.ustring.find(iotated_stem, "[шщжч]$") then
forms["pres_futr_1sg"] = iotated_stem .. "у́"
else
forms["pres_futr_1sg"] = iotated_stem .. "ю́"
end
if mw.ustring.find(stem, "[шщжч]$") then
forms["pres_futr_3pl"] = stem .. "ат"
else
forms["pres_futr_3pl"] = stem .. "ят"
end
if mw.ustring.find(stem, "[шщжч]$") then
forms["pres_futr_3pl"] = stem .. "ат"
else
forms["pres_futr_3pl"] = stem .. "ят"
end
forms["pres_futr_2sg"] = stem .. "ишь"
forms["pres_futr_3sg"] = stem .. "ит"
forms["pres_futr_1pl"] = stem .. "им"
forms["pres_futr_2pl"] = stem .. "ите"
end
-- add alternative form stressed on the reflexive particle
function make_reflexive_alt(forms)
for key, form in pairs(forms) do
if form ~= "" then
-- if a form doesn't contain a stress, add a stressed particle "ся́"
if not mw.ustring.find(form, "[́]") then
-- only applies to past masculine forms
if key == "past_m" or key == "past_m2" or key == "past_m3" then
forms[key] = form .. "ся́"
end
end
end
end
end
-- Add the reflexive particle to all verb forms
function make_reflexive(forms)
for key, form in pairs(forms) do
-- The particle is "сь" after a vowel, "ся" after a consonant
-- append "ся" if "ся́" was not attached already
if form ~= "" and not mw.ustring.find(form, "ся́$") then
if mw.ustring.find(form, "[аэыоуяеиёю́]$") then
forms[key] = form .. "сь"
else
forms[key] = form .. "ся"
end
end
end
-- This form does not exist for reflexive verbs.
forms["past_adv_part_short"] = ""
end
-- Make the table
function make_table(forms, title, perf, intr, impers)
local title = ("Conjugation of <span lang=\"ru\" class=\"Cyrl\">''%s''</span>%s"):format( forms["infinitive"], title and " (" .. title .. ")" or "" )
-- Intransitive verbs have no passive participles.
if intr then
forms["pres_pasv_part"] = ""
forms["pres_pasv_part2"] = nil
forms["past_pasv_part"] = ""
forms["past_pasv_part2"] = nil
end
if 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["pres_adv_part"] = ""
forms["past_adv_part"] = ""
forms["past_adv_part_short"] = ""
forms["impr_sg"] = ""
forms["impr_pl"] = ""
--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["pres_adv_part2"] = nil
forms["past_adv_part2"] = nil
forms["past_adv_part_short2"] = nil
forms["impr_sg2"] = nil
forms["impr_pl2"] = nil
end
-- Perfective verbs have no present forms.
if perf then
forms["pres_actv_part"] = ""
forms["pres_pasv_part"] = ""
forms["pres_adv_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_pasv_part2"] = nil
forms["pres_adv_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["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
local inf = forms["infinitive"]
local inf_tr = translit.tr(forms["infinitive"])
-- Add transliterations to all forms
for key, form in pairs(forms) do
-- check for empty strings and nil's
if form ~= "" and form then
forms[key] = "<span lang=\"ru\" class=\"Cyrl\">[[" .. com.remove_accents(form) .. "#Russian|" .. form .. "]]</span><br/><span style=\"color: #888\">" .. translit.tr(form) .. "</span>"
else
forms[key] = "—"
end
end
if not perf then
forms["futr_1sg"] = "<span lang=\"ru\" class=\"Cyrl\">[[буду#Russian|бу́ду]] " .. inf .. "</span><br/><span style=\"color: #888\">búdu " .. inf_tr .. "</span>"
forms["futr_2sg"] = "<span lang=\"ru\" class=\"Cyrl\">[[будешь#Russian|бу́дешь]] " .. inf .. "</span><br/><span style=\"color: #888\">búdešʹ " .. inf_tr .. "</span>"
forms["futr_3sg"] = "<span lang=\"ru\" class=\"Cyrl\">[[будет#Russian|бу́дет]] " .. inf .. "</span><br/><span style=\"color: #888\">búdet " .. inf_tr .. "</span>"
forms["futr_1pl"] = "<span lang=\"ru\" class=\"Cyrl\">[[будем#Russian|бу́дем]] " .. inf .. "</span><br/><span style=\"color: #888\">búdem " .. inf_tr .. "</span>"
forms["futr_2pl"] = "<span lang=\"ru\" class=\"Cyrl\">[[будете#Russian|бу́дете]] " .. inf .. "</span><br/><span style=\"color: #888\">búdete " .. inf_tr .. "</span>"
forms["futr_3pl"] = "<span lang=\"ru\" class=\"Cyrl\">[[будут#Russian|бу́дут]] " .. inf .. "</span><br/><span style=\"color: #888\">búdut " .. inf_tr .. "</span>"
end
-- only for "бы́ть" the future forms are бу́ду, бу́дешь, etc.
if inf == "бы́ть" then
forms["futr_1sg"] = "<span lang=\"ru\" class=\"Cyrl\">[[буду#Russian|бу́ду]] " .. "</span><br/><span style=\"color: #888\">búdu " .. "</span>"
forms["futr_2sg"] = "<span lang=\"ru\" class=\"Cyrl\">[[будешь#Russian|бу́дешь]] " .. "</span><br/><span style=\"color: #888\">búdešʹ " .. "</span>"
forms["futr_3sg"] = "<span lang=\"ru\" class=\"Cyrl\">[[будет#Russian|бу́дет]] " .. "</span><br/><span style=\"color: #888\">búdet " .. "</span>"
forms["futr_1pl"] = "<span lang=\"ru\" class=\"Cyrl\">[[будем#Russian|бу́дем]] " .. "</span><br/><span style=\"color: #888\">búdem " .. "</span>"
forms["futr_2pl"] = "<span lang=\"ru\" class=\"Cyrl\">[[будете#Russian|бу́дете]] " .. "</span><br/><span style=\"color: #888\">búdete " .. "</span>"
forms["futr_3pl"] = "<span lang=\"ru\" class=\"Cyrl\">[[будут#Russian|бу́дут]] " .. "</span><br/><span style=\"color: #888\">búdut " .. "</span>"
end
if 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
if forms["past_adv_part_short"] ~= "—" then
forms["past_adv_part"] = forms["past_adv_part_short"] .. ",<br/>" .. forms["past_adv_part"]
end
-- collect forms specified explicitly
for k,v in pairs(args) do
if type(k)=='string' then
local base,n = k:match('^(.*)(%d)$') -- alternative forms, from 2
if n then --build table of alt-forms
n=tonumber(n)
if type(forms[k])=='table' then
forms[k][n] = v
else
forms[k] = { [1]=forms[k]; [n]=v }
end
else
if type(forms[k])=='table' then
forms[k][1] = v
else
forms[k] = v
end
end
end
end
-- concatenate alt-forms
for k, v in forms do
if type(v) == 'table' then forms[k] = table.concat(v,',<br/>') end
end
return table.concat({[=[<div class="NavFrame" style="width:49.6em;">
<div class="NavHead" style="text-align:left; background:#e0e0ff;">]=] , title , [=[</div>
<div class="NavContent">
{| class="inflection inflection-ru inflection-verb"
|+ Note 1: for declension of participles, see their entries. Adverbial participles are indeclinable.
|- class="rowgroup"
! colspan="3" | ]=] , (perf and [=[[[совершенный вид|perfective aspect]]]=] or [=[[[несовершенный вид|imperfective aspect]]]=]) , [=[
|-
! [[неопределённая форма|infinitive]]
| colspan="2" | ]=] , forms["infinitive"] , [=[
|- class="rowgroup"
! style="width:15em" | [[причастие|participles]]
! [[настоящее время|present tense]]
! [[прошедшее время|past tense]]
|-
! [[действительный залог|active]]
| ]=] , alt_pres_actv_part , [=[ || ]=] , alt_past_actv_part , [=[
|-
! [[страдательный залог|passive]]
| ]=] , alt_pres_pasv_part , [=[ || ]=] , alt_past_pasv_part, [=[
|-
! [[деепричастие|adverbial]]
| ]=], alt_pres_adv_part, [=[ || ]=], alt_past_adv_part, [=[
|- class="rowgroup"
!
! [[настоящее время|present tense]]
! [[будущее время|future tense]]
|-
! [[первое лицо|1st]] [[единственное число|singular]] (<span lang="ru" class="Cyrl">я</span>)
| ]=], alt_pres_1sg, [=[ || ]=], alt_futr_1sg, [=[
|-
! [[второе лицо|2nd]] [[единственное число|singular]] (<span lang="ru" class="Cyrl">ты</span>)
| ]=], alt_pres_2sg, [=[ || ]=], alt_futr_2sg, [=[
|-
! [[третье лицо|3rd]] [[единственное число|singular]] (<span lang="ru" class="Cyrl">он/она́/оно́</span>)
| ]=], alt_pres_3sg, [=[ || ]=], alt_futr_3sg, [=[
|-
! [[первое лицо|1st]] [[множественное число|plural]] (<span lang="ru" class="Cyrl">мы</span>)
| ]=], alt_pres_1pl, [=[ || ]=], alt_futr_1pl, [=[
|-
! [[второе лицо|2nd]] [[множественное число|plural]] (<span lang="ru" class="Cyrl">вы</span>)
| ]=], alt_pres_2pl, [=[ || ]=], alt_futr_2pl, [=[
|-
! [[третье лицо|3rd]] [[множественное число|plural]] (<span lang="ru" class="Cyrl">они́</span>)
| ]=], alt_pres_3pl, [=[ || ]=], alt_futr_3pl, [=[
|- class="rowgroup"
! [[повелительное наклонение|imperative]]
! [[единственное число|singular]]
! [[множественное число|plural]]
|-
!
| ]=], alt_impr_sg, [=[ || ]=], alt_impr_pl, [=[
|- class="rowgroup"
! [[прошедшее время|past tense]]
! [[единственное число|singular]]
! [[множественное число|plural]]<br/>(<span lang="ru" class="Cyrl">мы/вы/они́</span>)
|-
! [[мужской род|masculine]] (<span lang="ru" class="Cyrl">я/ты/он</span>)
| ]=], alt_past_m, [=[ || rowspan="3" | ]=], alt_past_pl, [=[
|-
! [[женский род|feminine]] (<span lang="ru" class="Cyrl">я/ты/она́</span>)
| ]=], alt_past_f, [=[
|-
! style="background-color:#ffffe0; text-align:left;" | [[средний род|neuter]] (<span lang="ru" class="Cyrl">оно́</span>)
| ]=], alt_past_n, [=[
|}
</div>
</div>]=]})
end
return export