Module:ru-verb Apr 22nd 2013, 02:46 | | (One intermediate revision by one user not shown) | Line 506: | Line 506: | | forms["pres_adv_part"] = stem_noa .. "я́" | | forms["pres_adv_part"] = stem_noa .. "я́" | | end | | end | − | | | − | -- Verbs ending in a hushing consonant do not get j-vowels in the endings, same check for pres_futr_1sg | | − | -- the same for stressed stem | | − | --[=[ | | − | | | − | if mw.ustring.find(iotated_stem, "[шщжч]$") then | | − | forms["pres_futr_1sg"] = iotated_stem .. "у́" | | − | else | | − | forms["pres_futr_1sg"] = iotated_stem .. "ю́" | | − | end | | − | | | − | forms["pres_futr_2sg"] = stem .. "ишь" | | − | forms["pres_futr_3sg"] = stem .. "ит" | | − | forms["pres_futr_1pl"] = stem .. "им" | | − | forms["pres_futr_2pl"] = stem .. "ите" | | − | | | − | ]=]-- | | | | | | | forms["impr_sg"] = stem_noa .. "и́" | | forms["impr_sg"] = stem_noa .. "и́" | | forms["impr_pl"] = stem_noa .. "и́те" | | forms["impr_pl"] = stem_noa .. "и́те" | | | | | − | -- TESTING | + | present_i_c(forms, stem) | − | --present_i_c(forms, stem) | | | | | | | forms["past_m"] = stem_noa .. "и́л" | | forms["past_m"] = stem_noa .. "и́л" | --[=[ 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") local forms, title, categories if conjugations[conj_type] then forms, title, categories = conjugations[conj_type](args) else error("Unknown conjugation type '" .. conj_type .. "'") end -- This form is not always present on verbs, so it needs to be specified explicitly. forms["past_pasv_part"] = args["past_pasv_part"] or "" local intr = (verb_type == "impf-intr" or verb_type == "pf-intr") local refl = (verb_type == "impf-refl" or verb_type == "pf-refl") local perf = (verb_type == "pf" or verb_type == "pf-intr" or verb_type == "pf-refl") -- Perfective/imperfective if perf then table.insert(categories, "Russian perfective verbs") else table.insert(categories, "Russian imperfective verbs") 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 local ret = "" if NAMESPACE == "" then local sort_key = com.sort_key(PAGENAME) for key, cat in ipairs(categories) do ret = ret .. "[[Category:" .. cat .. "|" .. sort_key .. "]]" end end return make_table(forms, title, perf, intr or refl) .. ret 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") forms["infinitive"] = stem .. "ть" forms["pres_actv_part"] = stem .. "ющий" forms["past_actv_part"] = stem .. "вший" forms["pres_pasv_part"] = stem .. "емый" forms["pres_adv_part"] = stem .. "я" 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["1irreg"] = function(args) -- for irregular verbs in this group "живописа́ть" and "минова́ть", mixture of types 1 and 2 local forms = {} local categories = {"Russian class 1 verbs"} local title = "class 1" 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") if pres_stem == nil then local pres_stem = inf_stem end 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["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, "[ео]ва$", "у") pres_stem = mw.ustring.gsub(pres_stem, "[ео]́ва$", "у́") pres_stem = mw.ustring.gsub(pres_stem, "[ео]ва́$", "у́") 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") -- "y" if no short past forms to be used local no_short_past = args[3] -- "y" if no short past participle forms to be used local no_short_past_partcpl = args[4] -- "нь" if "-нь"/"-ньте" instead of "-ни"/"-ните" in the imperative local impr_end = args[5] -- optional full infinitive form for verbs like достичь local full_inf = args[6] -- optional short masculine past form for verbs like вять local past_m_short = args[7] -- if full infinitive is not passed, build from the stem, otherwise use the optional parameter if full_inf == nil or 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 "нь" if impr_end ~= nil then forms["impr_sg"] = stem .. impr_end forms["impr_pl"] = stem .. impr_end .. "те" else -- default forms["impr_sg"] = stem .. "ни" forms["impr_pl"] = stem .. "ни" .. "те" end -- if the 4rd argument is not equal "y", is empty or is absent, add short past active participle, -- both short and long will be used if no_short_past_partcpl ~= "y" or no_short_past_partcpl == nil or no_short_past_partcpl == "" then forms["past_actv_part_short"] = stem .. "ший" elseif no_short_past_partcpl == "y" then forms["past_actv_part_short"] = "" end forms["past_m"] = stem .. "нул" forms["past_f"] = stem .. "нула" forms["past_n"] = stem .. "нуло" forms["past_pl"] = stem .. "нули" -- if the 3rd argument is not equal "y", is empty or is absent, add short past forms if no_short_past ~= "y" or no_short_past == nil or 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 == "n" then 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 if past_m_short ~= nil then forms["past_m_short"] = past_m_short end 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 if forms["past_actv_part_short"] ~= "" then forms["past_actv_part"] = forms["past_actv_part_short"] .. ", " .. forms["past_actv_part"] 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["3irreg"] = function(args) -- for an irregular verb in this group "ми́нуть" 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_c(forms, stem) forms["pres_futr_1sg"] = "(" .. forms["pres_futr_1sg"] .. ")" -- no imperative forms["impr_sg"] = "" forms["impr_pl"] = "" forms["past_m"] = stem .. "у́л" forms["past_f"] = stem .. "у́ла" forms["past_n"] = stem .. "у́ло" forms["past_pl"] = stem .. "у́ли" 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 = args[3] --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 if mw.ustring.find(stem, "[аэыоуяеиёю́]$") and impr_end == nil then impr_end = "й" -- "и" after two consonants in a row (мо́рщить, зафре́ндить), no parameter passed elseif mw.ustring.find(stem, "[бвгджзклмнпрстфхцчшщ][бвгджзклмнпрстфхцчшщ]$") and impr_end == nil then impr_end = "и" -- "ь" after a single consonant (бре́дить), no parameter passed elseif mw.ustring.find(stem, "[аэыоуяеиёю́C$]$") and impr_end == nil 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 .. "ив" present_i_a(forms, stem) 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") 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 .. "и́в" present_i_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["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") -- 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 .. "и́те" present_i_c(forms, stem) 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["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 --[=[ 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) 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_c(forms, stem) local stem_noa = com.remove_accents(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) 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_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.remove_accents(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 -i-. function present_i_a(forms, stem) local iotated_stem = com.iotation(stem) -- 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) -- Verbs ending in a hushing consonant do not get j-vowels in the endings. local iotated_stem = com.iotation(stem) if mw.ustring.find(iotated_stem, "[шщжч]$") then forms["pres_futr_1sg"] = iotated_stem .. "у́" else forms["pres_futr_1sg"] = iotated_stem .. "ю́" end 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_i_c(forms, stem) local stem_noa = com.remove_accents(stem) local iotated_stem = com.iotation(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_futr_1sg"] = iotated_stem .. "у́ TEST: here1" else forms["pres_futr_1sg"] = iotated_stem .. "ю́ TEST: here2" end 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 -- 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 if 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) if forms["past_adv_part_short"] ~= "" then forms["past_adv_part"] = forms["past_adv_part_short"] .. ", " .. forms["past_adv_part"] end -- Intransitive verbs have no passive participles. if intr then forms["pres_pasv_part"] = "" forms["past_pasv_part"] = "" 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"] = "" 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"] 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["futr_1sg"] = "бу́ду " .. forms["infinitive"] forms["futr_2sg"] = "бу́дешь " .. forms["infinitive"] forms["futr_3sg"] = "бу́дет " .. forms["infinitive"] forms["futr_1pl"] = "бу́дем " .. forms["infinitive"] forms["futr_2pl"] = "бу́дете " .. forms["infinitive"] forms["futr_3pl"] = "бу́дут " .. forms["infinitive"] end local title = "Conjugation of <span lang=\"ru\" class=\"Cyrl\">''" .. forms["infinitive"] .. "''</span>" .. (title and " (" .. title .. ")" or "") -- Add transliterations to all forms for key, form in pairs(forms) do if form ~= "" then forms[key] = "<span lang=\"ru\" class=\"Cyrl\">" .. form .. "</span><br/>" .. translit.tr(form) else forms[key] = "—" end end return [=[<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]] | ]=] .. forms["pres_actv_part"] .. [=[ || ]=] .. forms["past_actv_part"] .. [=[ |- ! [[страдательный залог|passive]] | ]=] .. forms["pres_pasv_part"] .. [=[ || ]=] .. forms["past_pasv_part"] .. [=[ |- ! [[деепричастие|adverbial]] | ]=] .. forms["pres_adv_part"] .. [=[ || ]=] .. forms["past_adv_part"] .. [=[ |- class="rowgroup" ! ! [[настоящее время|present tense]] ! [[будущее время|future tense]] |- ! [[первое лицо|1st]] [[единственное число|singular]] (<span lang="ru" class="Cyrl">я</span>) | ]=] .. forms["pres_1sg"] .. [=[ || ]=] .. forms["futr_1sg"] .. [=[ |- ! [[второе лицо|2nd]] [[единственное число|singular]] (<span lang="ru" class="Cyrl">ты</span>) | ]=] .. forms["pres_2sg"] .. [=[ || ]=] .. forms["futr_2sg"] .. [=[ |- ! [[третье лицо|3rd]] [[единственное число|singular]] (<span lang="ru" class="Cyrl">он/она́/оно́</span>) | ]=] .. forms["pres_3sg"] .. [=[ || ]=] .. forms["futr_3sg"] .. [=[ |- ! [[первое лицо|1st]] [[множественное число|plural]] (<span lang="ru" class="Cyrl">мы</span>) | ]=] .. forms["pres_1pl"] .. [=[ || ]=] .. forms["futr_1pl"] .. [=[ |- ! [[второе лицо|2nd]] [[множественное число|plural]] (<span lang="ru" class="Cyrl">вы</span>) | ]=] .. forms["pres_2pl"] .. [=[ || ]=] .. forms["futr_2pl"] .. [=[ |- ! [[третье лицо|3rd]] [[множественное число|plural]] (<span lang="ru" class="Cyrl">они́</span>) | ]=] .. forms["pres_3pl"] .. [=[ || ]=] .. forms["futr_3pl"] .. [=[ |- class="rowgroup" ! [[повелительное наклонение|imperative]] ! [[единственное число|singular]] ! [[множественное число|plural]] |- ! | ]=] .. forms["impr_sg"] .. [=[ || ]=] .. forms["impr_pl"] .. [=[ |- class="rowgroup" ! [[прошедшее время|past tense]] ! [[единственное число|singular]] ! [[множественное число|plural]]<br/>(<span lang="ru" class="Cyrl">мы/вы/они́</span>) |- ! [[мужской род|masculine]] (<span lang="ru" class="Cyrl">я/ты/он</span>) | ]=] .. forms["past_m"] .. [=[ || rowspan="3" | ]=] .. forms["past_pl"] .. [=[ |- ! [[женский род|feminine]] (<span lang="ru" class="Cyrl">я/ты/она́</span>) | ]=] .. forms["past_f"] .. [=[ |- ! style="background-color:#ffffe0; text-align:left;" | [[средний род|neuter]] (<span lang="ru" class="Cyrl">оно́</span>) | ]=] .. forms["past_n"] .. [=[ |} </div> </div>]=] end return export | |