Module:User:Ignatus/ru-verb/sandbox

--[=[   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 = "\n'   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 %s %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] = "" .. form .. " " .. translit.tr(form) .. " "       else forms[key] = "—" end end if not perf then forms["futr_1sg"] = "бу́ду " .. inf .. " búdu " .. inf_tr .. " "        forms["futr_2sg"] = "бу́дешь " .. inf .. " búdešʹ " .. inf_tr .. " "       forms["futr_3sg"] = "бу́дет " .. inf .. " búdet " .. inf_tr .. " "       forms["futr_1pl"] = "бу́дем " .. inf .. " búdem " .. inf_tr .. " "       forms["futr_2pl"] = "бу́дете " .. inf .. " búdete " .. inf_tr .. " "       forms["futr_3pl"] = "бу́дут " .. inf .. " búdut " .. inf_tr .. " "   end

-- only for "бы́ть" the future forms are бу́ду, бу́дешь, etc.   if inf == "бы́ть" then forms["futr_1sg"] = "бу́ду " .. " <span style=\"color: #888\">búdu " .. " "        forms["futr_2sg"] = "<span lang=\"ru\" class=\"Cyrl\">бу́дешь " .. " <span style=\"color: #888\">búdešʹ " .. " "       forms["futr_3sg"] = "<span lang=\"ru\" class=\"Cyrl\">бу́дет "  .. " <span style=\"color: #888\">búdet " .. " "       forms["futr_1pl"] = "<span lang=\"ru\" class=\"Cyrl\">бу́дем "  .. " <span style=\"color: #888\">búdem "  .. " "       forms["futr_2pl"] = "<span lang=\"ru\" class=\"Cyrl\">бу́дете "  .. " <span style=\"color: #888\">búdete "  .. " "       forms["futr_3pl"] = "<span lang=\"ru\" class=\"Cyrl\">бу́дут "  .. " <span style=\"color: #888\">búdut "  .. " "   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"] .. ", " .. 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,', ') end end return table.concat({[=[ ]=], title , [=[  ]=]}) end return export