Module:ru-verb: difference between revisions
No edit summary |
No edit summary |
||
Line 532: | Line 532: | ||
forms["past_n"] = stem_noa .. "и́ло" |
forms["past_n"] = stem_noa .. "и́ло" |
||
forms["past_pl"] = stem_noa .. "и́ли" |
forms["past_pl"] = stem_noa .. "и́ли" |
||
-- pres_actv_part for суши́ть -> су́шащий |
|||
if forms["infinitive"] == "суши́ть" then |
|||
forms["pres_actv_part"] = "су́шащий" |
|||
end |
|||
return forms, title, categories |
return forms, title, categories |
Revision as of 11:50, 9 August 2015
- The following documentation is located at Module:ru-verb/documentation. [edit] Categories were auto-generated by Module:module categorization. [edit]
- Useful links: subpage list • links • transclusions • testcases • sandbox
This documentation is for Module:ru-verb and for all the templates that use this module ({{ru-conj}}
, {{ru-conj-old}}
, {{ru-generate-verb-forms}}
).
Parameters
Introduction
Russian verbs are complex. This module is designed to allow all the complexities to be specified as easily as possible, following the scheme of Andrey Zaliznyak. In general, the basic parameters to control the form of a verb are numbered parameters; named parameters control ancillary aspects such as overriding individual forms or adding footnotes. Examples:
{{ru-conj|pf|1a+p|сде́лать}}
This specifies the conjugation of the verb сде́лать (sdélatʹ), which is a perfective verb (code pf
), of verb class 1a (code 1a
), with a past passive participle (code +p
). The meanings of the various verb classes are documented below under #Verb classes.
{{ru-conj|impf-impers|5b/c''|спа́ться}}
This specifies the conjugation of the verb спа́ться (spátʹsja), which is an imperfective impersonal verb (code impf-impers
), of verb class 5b (code 5b
), whose past tense is conjugated according to accent pattern c'' (code /c''
). The meanings of the various past-tense accent patterns are documented below under #Past stress variants.
{{ru-conj|impf-intr|6°a|жа́ждать|pradp=жа́ждая}}
This specifies the conjugation of the verb жа́ждать (žáždatʹ), which is an imperfective intransitive verb (code impf-intr
), of verb class 6°a (code 6°a
). The present adverbial participle is irregular and needs to be specified explicitly (named parameter |pradp=
). The various named parameters for overriding individual forms are documented below under #Overrides and alternative forms.
Numbered parameters
All templates that use this module require the first, second and third parameters to be specified, and sometimes further parameters are required or optional.
The first parameter indicates the type of verb:
impf
- imperfective, transitive (or reflexive if the infinitive is reflexive)pf
- perfective, transitive (or reflexive if the infinitive is reflexive)impf-intr
- imperfective, intransitive (not allowed for reflexive verbs)pf-intr
- perfective, intransitive (not allowed for reflexive verbs)impf-impers
- imperfective, transitive (or reflexive if the infinitive is reflexive), impersonalpf-impers
- perfective, transitive (or reflexive if the infinitive is reflexive), impersonalimpf-intr-impers
- imperfective, intransitive (not allowed for reflexive verbs), impersonalpf-intr-impers
- perfective, intransitive (not allowed for reflexive verbs), impersonal
The second parameter is the verb class, e.g. 1a
for verb class 1a. It can also support variant codes (see below), e.g. 7b/b
for class 7b with past-tense stress pattern b, or 4c(4)
for class 4c with variant code (4)
(which indicates a different stress pattern in the present active participle). Note that for classes with a ° sign in them, a o
(lowercase O) can be used instead, e.g. for class 3°a the verb class code 3oa
can also be used in addition to 3°a
; the latter is preferred.
The third parameter is the stressed infinitive, i.e. the full infinitive (including reflexive -ся or -сь if appropriate), with an acute accent placed on the stressed syllable. If the full infinitive is monosyllabic (e.g. быть (bytʹ), гнуть (gnutʹ), тлеть (tletʹ), etc.), the accent is optional. Note that if the infinitive is a suffix (e.g. -ве́ргнуть (-vérgnutʹ), -йти́ (-jtí), stressed -и́ть (-ítʹ), unstressed -ать (-atʹ), etc.), the accent should be included or omitted as appropriate.
The fourth parameter is the present-tense stem, minus any endings such as -у/-ю, -ешь/-ишь, etc. It should be stressed if the stem is stressed in any present-tense forms (accent patterns a and c), otherwise unstressed. Generally, this should be included only if it's not predictable from the infinitive. For some verb classes, it's required, for others it's optional, for yet others it's not allowed. See the descriptions of individual verb classes for more information.
A few classes have an optional fifth parameter, which specifies the form of the past tense. The exact semantics are documented in the descriptions of individual verb classes.
In all cases, a blank parameter is equivalent to a missing parameter.
Named parameters
There are many named parameters used to override particular forms, supply alternative forms or control other aspects of the conjugation:
- Parameters to override particular forms. These are documented below in #Overrides and alternative forms. As above, a blank parameter is equivalent to a missing parameter. If you need to specifically specify that a form doesn't exist, when it would normally be created, set its value to
-
.- The most commonly seen named parameter is the override parameter
|past_pasv_part=
or its alias|ppp=
, which specifies the past passive participle form. Note that all verbs that have this participle need to explicitly specify it in one form or another, because it's unpredictable whether a given verb has such a participle; but it is now preferred to use variant codes, usually just+p
, in place of explicitly specifying its value using an override.
- The most commonly seen named parameter is the override parameter
- Parameters for footnote symbols; see below.
- Parameters to suppress parts of the conjugation and specify iterative verbs; see below.
|reflex_stress=ся́
: Used for reflexive verbs that have a past masculine singular in stressed -ся́. Normally, unstressed -ся or -сь is automatically added to all active forms for reflexive verbs. If|reflex_stress=ся́
is given, then stressed -ся́ will instead be added to any past masculine singular form that lacks an accent.|asif_prefix=
: If specified, pretend as if this prefix is prepended to the verb when generating the verb forms. This is used when conjugating suffixes. For example, one of the variants of the suffix -а́ть (-átʹ) occurs particularly after the hushing consonants ш щ ч ж; to get the right verb forms for this suffix one needs to use a hushing consonant as an as-if-prefix, like this:{{ru-conj|impf-intr|5b|-а́ть|asif_prefix=ж}}
|has_ppp=y
,|has_prpp=y
: If specified, indicate that an intransitive verb has (respectively) a past passive participle or present passive participle.
Past stress, imperative ending and other variant codes
Many verb classes take a variant-code parameter, which may control the stress in the past tense, the ending of the imperative and/or other things. The variant codes are specified as part of parameter 2, directly following the verb class. Past-stress variant codes need to have a slash before them, e.g. 14b/c'
for verb class 14b
and past-stress variant c'
. Other variant codes are attached directly without any separators, e.g. 4aщ+p
for похи́тить (poxítitʹ), which specifies verb class 4a
with two variant codes: щ
(indicating that the first-person singular and past passive participle have щ rather than ч at the end of the stem) and +p
(indicating that the verb has a past passive participle). There is no order required for such variant codes; 4a+pщ
is equally allowed. An example with three variant codes is 4b/c+pжд
for роди́ть (rodítʹ), which specifies verb class 4b
with past-stress variant c
and additional variant codes +p
(indicating that the verb has a past passive participle) and жд
(indicating the the past passive participle's stem ends in жд rather than ж). As previously, the order of the variant codes is immaterial; for example, 4bжд+p/c
would work equally as well.
Note that the *
variant code indicating a longer prefix in the present/future tense (e.g. future 1sg. разошью́ (razošʹjú) from расши́ть (rasšítʹ)) is handled specially. It is normally placed in the middle of the verb class (e.g. 9*b
or 11*b
), and will only be recognized in this position or directly following the verb class (e.g. 9b*
). The reason for this is that /b*
is a valid past stress variant code, and the two uses of *
would otherwise conflict.
The allowable codes differ from class to class and are specified in the documentation for the particular class, but are a subset of the following codes. When multiple codes need to be specified, just append them all together without spaces or other separators. Note that the particular form of the codes is chosen to be compatible with A. A. Zaliznyak's dictionaries.
Past stress variants
For the classes that allow the stress in the past tense to be specified, the following codes are allowed (using a prefixed derivative of дать (datʹ) as an example):
/a
: -да́л, -да́ла, -да́ло, -да́ли/b
: -да́л, -дала́, -дало́, -дали́/b*
(reflexive verbs): -дался́, -дала́сь, -дало́сь, -дали́сь/c
: -да́л, -дала́, -да́ло, -да́ли/c(1)
: -́дал, -дала́, -́дало, -́дали (i.e. with stress on the prefix in most cases)/c'
: -да́л, -да́ла, -да́ло/-дало́, -да́ли/c''
(reflexive verbs): -да́лся/-дался́, -дала́сь, -дало́сь/-да́лось, -дали́сь/-да́лись (with a footnote indicating that -дался́ is dated)/c''-bd
(reflexive verbs): Same as/c''
but the footnote says "is becoming dated" instead of "is dated"/c''-nd
(reflexive verbs): Same as/c''
but without the "is dated" footnote/c''(1)
(reflexive verbs): -дался́/-́дался, -дала́сь, -дало́сь/-́далось, -дали́сь/-́дались (i.e. with stress on the prefix in some cases)
The past stress variant should be separated from the verb class by a slash, e.g. 7b/b
.
A comma-separated list of codes is also possible, e.g.
/c(1),c
: -́дал/-да́л, -дала́, -́дало/-да́ло, -́дали/-да́ли (i.e. with stress on the prefix in some cases)/c,c(1)
: -да́л/-́дал, -дала́, -да́ло/-́дало, -да́ли/-́дали (i.e. with stress on the prefix in some cases)- (etc.)
When multiple codes are specified, duplicate forms will not appear.
The default for the past stress is /a
.
Note that some of the above patterns call for stress on the prefix. Normally the last syllable is stressed (e.g. припо́д-), but пере- is stressed as пе́ре-, and рас and раз are converted into ро́с- and ро́з-.
Imperative ending
The following codes are allowed in classes that allow the imperative ending to be specified.
и
: Ending is -и in both singular and plural.ь
: If the stem ends in a consonant, ending is -ь in both singular and plural; else, -й in both singular and plural.й
: Same asь
.(2)
: Same asь
, but only allowed for verbs in вы́-.[(2)]
: Ending is both -и and -ь/й in singular and plural.(3)
: Ending is -и in singular but -ь/й in plural.[(3)]
: Ending is both -и and -ь/й in singular, but -ь/й only in plural.
For verbs that use imperative-ending codes, the default ending is as follows:
- If the stem ends in a vowel: -и́ for classes 4b and 4c, -и for class 4a if the stem begins in вы́-, else й
- If the stem ends in a consonant: -и́ for classes b and c in general, else -и if the stem begins in вы́- or ends in two consonants or -щ (e.g. мо́рщить (mórščitʹ)), else -ь (e.g. бре́дить (bréditʹ))
Past passive participle
The following codes are used both for specifying that a verb has a past passive participle (PPP), and specifying how it is to be formed. Note that each particular verb class allows only some of these codes to be specified; the codes that are allowed are specified in the class's documentation. If none of +p
, (7)
, [(7)]
, (8)
and [(8)]
is given, no PPP will exist. If none of these codes is given, the remaining codes ё
and жд
cannot be given, and no codes can be given for intransitive and reflexive verbs, which do not have PPP's.
+p
: Allowed for all classes. Specifies that a PPP is to be formed the "normal" way (which depends on the particular class).(7)
: For certain classes: Specify that a PPP is to be formed with stress on the ending (-а́нный, -я́нный, -ённый, -у́тый, etc.) instead of on the preceding syllable, where it normally would be.[(7)]
: For certain classes: Specify that a PPP can be formed in two ways: the normal way with stress on the syllable preceding the ending, and also with stress on the ending, as in(7)
.(8)
: For class 4b: Specify that a PPP is to be formed with stress on the syllable preceding the ending (-́енный) instead of on the ending (-ённый), where it normally would be.[(8)]
: For class 4b: Specify that a PPP can be formed in two ways: the normal way with stress on ending (-ённый), and also with stress on the syllable preceding the ending (-́енный), as in(8)
.ё
: For the classes that allow code(7)
: Specify that an -е- changes into -ё- when the stress moves onto it. This is useful when the stem normally has ending stress but the PPP rules call for the stress to be on the preceding syllable; e.g. 1a наверста́ть (naverstátʹ), PPP навёрстанный (navjórstannyj); 3b поверну́ть (povernútʹ), PPP повёрнутый (povjórnutyj); 5b облежа́ть (obležátʹ), PPP облёжанный (obljóžannyj). Not required or allowed in class 2 verbs in -ева́ть, which will automatically have -ёванный unless code(7)
is used (note that verbs in -цева́ть will have -цо́ванный in the same circumstances).жд
: For class 4: Specify that a stem with final -д changes into -жд instead of iotating normally to -ж, e.g. 4b роди́ть (rodítʹ), PPP рождённый (roždjónnyj).
Other variants
(4)
: For class 4c and 5c: Present active participle ends in -́ящий (-́ащий for verbs ending in one of the hushing consonants ж ч ш щ), with stress on the final syllable of the stem, instead of the expected -я́щий/-а́щий with stress on the ending.[(4)]
: For class 4c and 5c: Present active participle ends in both -́ящий/-́ащий and -я́щий/-а́щий.(5)
: For class 3°a: Only long masc sg. past (with -ну-).[(5)]
: For class 3°a: Both short and long masc. sg. past (with and without -ну-).- no
(5)
or[(5)]
: For class 3°a: Only short masc sg. past (without -ну-). (6)
: For class 3°a: Only long past active/adverbial participles (with -ну-).[(6)]
: For class 3°a: Both short and long past active/adverbial participles (with and without -ну-).- no
(6)
or[(6)]
: For class 3°a: Only short past active/adverbial participles (without -ну-). [(5)(6)]
: For class 3°a: Equivalent to[(5)][(6)]
.(9)
: For class 7b: Past adverbial participle ends in -я́ (normally the present adverbial participle ending); the expected endings -(в)(ши) are dated.щ
: For class 4 and 6 whose stem ends in -т: Iotated version ends in -щ instead of -ч. Examples: class 4a похи́тить (poxítitʹ), 1sg похи́щу (poxíšču); class 4b защити́ть (zaščitítʹ), 1sg защищу́ (zaščiščú); class 4c поглоти́ть (poglotítʹ), 1sg поглощу́ (pogloščú); class 6c клевета́ть (klevetátʹ), 1sg клевещу́ (kleveščú).*
: For class 9b and 11b: Present tense has an extra -о- at the end of the prefix. Examples: class 9b растере́ть (rasterétʹ), 1sg разотру́ (razotrú); class 11b отби́ться (otbítʹsja), 1sg отобью́сь (otobʹjúsʹ). The variation between рас-/разо-, ис-/изо-, and вс-/взо- is automatically handled. Note that the*
variant code should normally be placed in the middle of the verb class (e.g.9*b
or11*b
), and will only be recognized in this position or directly following the verb class (e.g.9b*
), to avoid a conflict with past stress variant/b*
.
Overrides and alternative forms
All forms can be overridden using override parameters. Each form except the infinitive has three alternatives that can be overridden, to specify up to four possibilities for each form. For example, the feminine singular past can be overridden using |past_f=
, and the three alternatives can be overridden using |past_f2=
, |past_f3=
and |past_f4=
. Overriding the alternative forms is useful, for example, to add an alternative to the existing form or forms that are generated by the module. There is no problem if e.g. |past_f3=
has a value but |past_f2=
does not.
The following is the full list of forms:
Form code | Alias | Form | Notes |
---|---|---|---|
pres_1sg |
First-person singular present indicative | Only for imperfective verbs | |
pres_2sg |
Second-person singular present indicative | Only for imperfective verbs | |
pres_3sg |
Third-person singular present indicative | Only for imperfective verbs | |
pres_1pl |
First-person plural present indicative | Only for imperfective verbs | |
pres_2pl |
Second-person plural present indicative | Only for imperfective verbs | |
pres_3pl |
Third-person plural present indicative | Only for imperfective verbs | |
futr_1sg |
First-person singular future indicative | Only for perfective verbs | |
futr_2sg |
Second-person singular future indicative | Only for perfective verbs | |
futr_3sg |
Third-person singular future indicative | Only for perfective verbs | |
futr_1pl |
First-person plural future indicative | Only for perfective verbs | |
futr_2pl |
Second-person plural future indicative | Only for perfective verbs | |
futr_3pl |
Third-person plural future indicative | Only for perfective verbs | |
impr_sg |
Second-person singular imperative | ||
impr_pl |
Second-person plural imperative | ||
past_m |
Masculine singular past indicative | ||
past_f |
Feminine singular past indicative | ||
past_n |
Neuter singular past indicative | ||
past_p |
Plural past indicative | ||
past_m_short |
Short masculine singular past indicative | Used for verbs in -нуть | |
past_f_short |
Short feminine singular past indicative | Used for verbs in -нуть | |
past_n_short |
Short neuter singular past indicative | Used for verbs in -нуть | |
past_p_short |
Short plural past indicative | Used for verbs in -нуть | |
pres_actv_part |
prap |
Present active participle | only for imperfective verbs |
past_actv_part |
pap |
Past active participle | |
pres_pasv_part |
prpp |
Present passive participle | only for imperfective verbs |
past_pasv_part |
ppp |
Past passive participle | |
pres_adv_part |
pradp |
Present adverbial participle | only for imperfective verbs |
past_adv_part |
padp |
Past adverbial participle | Form with -ши |
past_adv_part_short |
padp_short |
Short past adverbial participle | Form without -ши; not for reflexive verbs |
infinitive |
Infinitive | Does not have alternatives |
Furthermore:
- Intransitive verbs do not have passive participles.
- Impersonal verbs have only the following forms:
- Third-person singular present and future indicative
- Neuter singular past indicative
- Present and past passive participles
- Infinitive
Participle aliases
The override parameters for participles are rather long, and shorter aliases are provided to make it easier to enter them:
Short form | Equivalent long form | Meaning |
---|---|---|
prap |
pres_actv_part |
Present active participle |
prpp |
pres_pasv_part |
Present passive participle |
pap |
past_actv_part |
Past active participle |
ppp |
past_pasv_part |
Past passive participle |
pradp |
pres_adv_part |
Present adverbial participle |
padp |
past_adv_part |
Past adverbial participle |
padp_short |
past_adv_part_short |
Short past adverbial participle |
The alternative parameters have similar short aliases, e.g. |ppp2=
is the same as |past_pasv_part2=
.
Similar aliases are provided for the footnote parameters ending in tail
and tailall
:
|ppptail=
is the same as|past_pasv_part_tail=
.|ppptailall=
is the same as|past_pasv_part_tailall=
.|praptail=
is the same as|pres_actv_part_tail=
.|praptailall=
is the same as|pres_actv_part_tailall=
.- etc.
Specifying multiple conjugations
Some verbs can be conjugated according to more than one conjugation. This happens especially with verbs that can be either type 4b or 4c. It is possible to express this by following the numbered parameters for a conjugation with the word or
, followed by another conjugation (i.e. all numbered parameters except the first one corresponding to the verb type). Examples:
- бели́ть (belítʹ):
{{ru-conj|impf|4c[(4)](7)|бели́ть|or|4b+p|бели́ть}}
- гази́ровать (gazírovatʹ)/газирова́ть (gazirovátʹ):
{{ru-conj|impf|2a+p|гази́ровать|or|2a+p|газирова́ть}}
- закли́нить (zaklínitʹ)/заклини́ть (zaklinítʹ):
{{ru-conj|impf|4a+p|закли́нить|or|4b+p|заклини́ть}}
Suppressing parts of the conjugation and specifying iterative verbs
Some verbs are defective, i.e. they lack parts of the conjugation. You can specify that a particular form doesn't exist by setting its value to -
, e.g. |futr_1sg=-
in a number of verbs. However, when an entire tense is missing, it can be more convenient to use one of the following parameters:
|nopres=1
: No present tense.|nofutr=1
: No future tense (e.g. увида́ть (uvidátʹ)).|nopast=1
: No past tense (e.g. грясти́ (grjastí)).|noimpr=1
: No imperative (e.g. слы́шать (slýšatʹ), увида́ть (uvidátʹ)).
A special class of defective verbs are iterative verbs (also called frequentative), used to express the concept of doing an action repeatedly. These verbs are always imperfective and are found only in the infinitive and the past (i.e. they are missing the present, future and imperative). This can be specified using iter=1
(e.g. пи́сывать (písyvatʹ), ха́живать (xáživatʹ), бира́ть (birátʹ)). In addition to disabling the missing forms, it places the verb into Category:Russian iterative verbs.
Manual transliteration
Currently, explicit manual transliteration can be specified in all subclasses of classes 1, 2, 3 and 4. Separate the Cyrillic and transliteration with a //
.
Example:
- семпли́ровать (sɛmplírovatʹ):
{{ru-conj|impf|2a+p|семпли́ровать//sɛmplírovatʹ}}
- зафре́ндить (zafrɛ́nditʹ):
{{ru-conj|pf|4a[(2)]|зафре́ндить//zafrɛ́nditʹ|ppp=зафре́нженный//zafrɛ́nžennyj|ppp2=зафре́ндженный//zafrɛ́ndžennyj|futr_1sg2=зафре́нджу//zafrɛ́ndžu|futr_1sg3=зафре́ндю//zafrɛ́ndju|padp2=зафре́ндя//zafrɛ́ndja}}
Note that manual transliteration is supported for all aspects of the classes that support it, including, among other things, manual overrides and automatic past passive participle generation, as shown by the examples.
Pre-reform conjugations
Pre-reform conjugations are specified using the template {{ru-conj-old}}
instead of {{ru-conj|}}
, or by using |old=y
.
Footnote symbols
A system is in place for inserting usage notes into conjugation tables, in the form of footnotes. Footnote symbols attached to the end of a manual override are recognized automatically; they are automatically superscripted and do not interfere with linking. Examples of such symbols are *
, @
, ~
and various other ASCII symbols; numbers; _
, which is automatically converted to a space; and most Unicode symbols (§
, ¤
, †
, ‡
, ⁕
, etc.). You can also attach these symbols using parameters such as |pltail=
. The usage note itself is inserted using |notes=
.
|notes=
,|notes2=
,|notes3=
, ...- Usage note(s) to insert into the table. Footnote symbols at the beginning of the note are automatically superscripted.
|pasttail=
- Specify text to append directly to the end of past-tense entries with more than one form (except those with explicit overrides). Normally used to add a footnote symbol to those entries, to add a usage note to alternate past-tense forms.
|prestail=
- Same but for present-tense entries.
|futrtail=
- Same but for future-tense entries.
|imprtail=
- Same but for imperative entries.
|parttail=
- Same but for participle entries.
|pasttailall=
- Like
|pasttail=
but appends to all past-tense entries (except those with explicit overrides). Normally used to add a footnote symbol, in order to add a usage note about the past-tense forms. |prestailall=
- Same but for present-tense entries.
|futrtailall=
- Same but for future-tense entries.
|imprtailall=
- Same but for imperative entries.
|parttailall=
- Same but for participle entries.
|MAINFORM_tail=
- Append a footnote symbol to the last entry for a particular form. Note that this differs from
|pasttail=
,|prestail=
, and|futrtail=
in that it will be appended even if there's only one form. The possible values of MAINFORM are the same as for overrides, except that only main forms are recognized (e.g. use|pres_1sg_tail=
, not|pres_1sg2_tail=
). |MAINFORM_tailall=
- Same but append to all entries.
|FORM_sym=
- Append a footnote symbol to the specified form. This differs from
|MAINFORM_tail=
in that FORM can be any value for which an override exists, including e.g.|pres_1sg2_sym=
.
Handling exceptional verbs with normal present passive participles in classes without them
Class-4 verbs (in -ить) normally have rare and awkward present passive participles (e.g. гра́бимый (grábimyj) of гра́бить (grábitʹ) and хорони́мый (xoronímyj) of хорони́ть (xoronítʹ)) but some verbs have normal present passive participles (e.g. води́мый (vodímyj) of води́ть (vodítʹ)). Similarly, class-6a verbs in -ать normally have no present passive participle, but some verbs have normal present passive participles (e.g. коле́блемый (koléblemyj) of колеба́ть (kolebátʹ)). You can specify that a present passive participle should be generated normally even if it normally would be missing or marked as awkward by using |prpp=+
or |pres_pasv_part=+
.
Verb classes
Note that verb classes come in 3 stress patterns:
- Pattern a: accent in the present/future is consistently on the stem
- Pattern b: accent in the present/future is consistently on the endings
- Pattern c: accent in the present/future is on the ending in the first singular, and otherwise on the stem
Verbs also come in two conjugations:
- Conjugation I has third-person plural in -ут or -ют, and 2sg/3sg/1pl/2pl usually in -е- or -ё-.
- Conjugation II has third-person plural in -ят, and 2sg/3sg/1pl/2pl in -и-.
Verbs come in 16 classes, plus some irregular variations. The 16 classes are as follows:
Class | Infinitive | Pres 1sg | Pres 3sg |
---|---|---|---|
1 | -ать -ять -еть |
-аю -яю -ею |
-ает -яет -еет |
2 | -овать -евать -евать |
-ую -ую -юю |
-ует -ует -юет |
3 | -нуть | -ну | -нет |
4 | -ить | -ю/-у | -ит |
5 | -ать -ять -еть |
-ю/-у | -ит |
6 | -ать -ять |
-ю/-у | -ет |
7 | -зти/-зть | -зу | -зет |
-сти/-сть | -су -ду -ту -сту -бу |
-сет -дет -тет -стет -бет | |
8 | -чь | -гу -ку |
-жет -чет |
9 | -ереть | -ру | -рет |
10 | -олоть -ороть |
-олю -орю |
-олет -орет |
11 | -ить | -ью | -ьет |
12 | -ыть -уть -ить |
-ою -ую -ию |
-оет -ует -иет |
13 | -авать | -аю | -ает |
14 | -ать/-ять | -ну -му -иму |
-нет -мет -имет |
15 | -ть | -ну | -нет |
16 | -ть | -ву | -вет |
Class 1a
- verbs in -ать/-ять (some in -еть), conjugation I, stress pattern a:
- -ать (-аю, -ает)
- -ять (-яю, -яет)
- -еть (-ею, -еет)
Parameters:
- 3 (required): the stressed infinitive
Allowed variants (param 2) are the past-passive-participle codes +p
, (7)
, [(7)]
and ё
.
Examples:
- де́лать (délatʹ):
{{ru-conj|impf|1a+p|де́лать}}
- сде́лать (sdélatʹ):
{{ru-conj|pf|1a+p|сде́лать}}
- венча́ть (venčátʹ):
{{ru-conj|impf|1a(7)|венча́ть}}
and{{ru-conj|pf|1a(7)|венча́ть}}
- наверста́ть (naverstátʹ):
{{ru-conj|pf|1a+pё|наверста́ть}}
- жале́ть (žalétʹ):
{{ru-conj|impf|1a|жале́ть|ppp=-}}
- сожале́ть (sožalétʹ):
{{ru-conj|impf-intr|1a|сожале́ть}}
- теря́ться (terjátʹsja):
{{ru-conj|impf|1a|теря́ться}}
Note that specifying |ppp=-
to indicate a missing past passive participle isn't necessary for imperfective verbs but is done in жале́ть (žalétʹ) for clarity, since transitive imperfective verbs that were not formed by suffixing a perfective verb normally do have a past passive participle.
Class 2a
- verbs in -овать/-евать, conjugation I, stress pattern a:
- -овать (-ую, -ует/-уёт)
- -евать (-юю, -юет/-юёт), (-ую, -ует/-уёт) (after ш, щ, ж, ч, ц)
Parameters:
- 3 (required): the stressed infinitive
Allowed variants (param 2) are the past-passive-participle codes +p
, (7)
and [(7)]
. Note that ё
is not allowed but is automatic in verbs ending in -ева́ть, with participles in -ёванный, and is indicated in the title line of the declension table (verbs in -цева́ть have participles -цо́ванный and have the indication -о- in the title line).
Examples:
- рисова́ть (risovátʹ):
{{ru-conj|impf|2a+p|рисова́ть}}
- танцева́ть (tancevátʹ):
{{ru-conj|impf|2a+p|танцева́ть}}
- транслитери́ровать (transliterírovatʹ):
{{ru-conj|impf|2a+p|транслитери́ровать}}
and{{ru-conj|pf|2a+p|транслитери́ровать}}
- почу́вствоваться (počúvstvovatʹsja):
{{ru-conj|pf|2a|почу́вствоваться}}
- гази́ровать (gazírovatʹ)/газирова́ть (gazirovátʹ):
{{ru-conj|impf|2a+p|гази́ровать|or|2a+p|газирова́ть}}
Class 2b
- verbs in -овать/-евать, conjugation I, stress pattern b:
Identical to class 2a except for the stress pattern.
Allowed variants (param 2) are the past-passive-participle codes +p
, (7)
and [(7)]
. Note that ё
is not allowed but is automatic in verbs ending in -ева́ть, with participles in -ёванный, and is indicated in the title line of the declension table (verbs in -цевать have participles -цо́ванный and have the indication -о- in the title line).
- сова́ть (sovátʹ):
{{ru-conj|impf|2b+p|сова́ть}}
- наплева́ть (naplevátʹ):
{{ru-conj|pf|2b+p|наплева́ть}}
- основа́ться (osnovátʹsja):
{{ru-conj|pf|2b|основа́ться}}
Class 3a
- verbs in -нуть, conjugation I, stress pattern a, long past-tense forms (including -ну-).
Parameters:
- 3 (required): the stressed infinitive
Allowed variants (param 2) are imperative-ending codes, as well as the past-passive-participle codes +p
, (7)
, [(7)]
and ё
.
Examples:
- дви́нуть (dvínutʹ):
{{ru-conj|pf|3a+p|дви́нуть}}
- ка́шлянуть (kášljanutʹ):
{{ru-conj|pf-intr|3a(3)|ка́шлянуть}}
- вы́сунуться (výsunutʹsja):
{{ru-conj|pf|3a[(3)]|вы́сунуться}}
Class 3°a
- verbs in -нуть, conjugation I, stress pattern a, short past-tense forms (lacking -ну-, except perhaps in the masculine singular).
Note that these verbs can use both 3°a
and 3oa
as the code.
Parameters:
- 3 (required): the stressed infinitive
Allowed variants (param 2) are (5)
or [(5)]
, (6)
or [(6)]
, an imperative-ending code, as well as the past-passive-participle codes +p
, (7)
, [(7)]
and ё
; [(5)(6)]
can be written and is equivalent to [(5)][(6)]
.
Examples:
- вы́сохнуть (výsoxnutʹ):
{{ru-conj|pf-intr|3°a|вы́сохнуть}}
- дости́чь (dostíčʹ):
{{ru-conj|pf|3°a+p[(6)]|дости́гнуть|infinitive=дости́чь}}
- Note that this verb has only short past masculine singular дости́г (dostíg) (since it lacks
(5)
and[(5)]
) but both short and long past participles дости́гший (dostígšij)/дости́гнувший (dostígnuvšij) (active) and дости́гнув (dostígnuv)/дости́гши (dostígši)/дости́гнувши (dostígnuvši) (adverbial), due to code[(6)]
.
- Note that this verb has only short past masculine singular дости́г (dostíg) (since it lacks
- вя́нуть (vjánutʹ):
{{ru-conj|impf-intr|3°a[(5)](6)|вя́нуть}}
- подве́ргнуться (podvérgnutʹsja):
{{ru-conj|pf|3°a[(5)(6)]|подве́ргнуться}}
- Note that this verb has both short past masculine singular подве́ргся (podvérgsja) and long подве́ргнулся (podvérgnulsja) (code
[(5)]
), and both short and long past participles подве́ргшийся (podvérgšijsja)/подве́ргнувшийся (podvérgnuvšijsja) (active) and подве́ргшись (podvérgšisʹ)/подве́ргнувшись (podvérgnuvšisʹ) (adverbial), due to code[(6)]
.
- Note that this verb has both short past masculine singular подве́ргся (podvérgsja) and long подве́ргнулся (podvérgnulsja) (code
Class 3b
- verbs in -ну́ть, conjugation I, stress pattern b.
Parameters:
- 3 (required): the stressed infinitive
Allowed variants (param 2) are the past-passive-participle codes +p
, (7)
, [(7)]
and ё
.
Examples:
- согну́ть (sognútʹ):
{{ru-conj|pf|3b+p|согну́ть}}
- поверну́ть (povernútʹ):
{{ru-conj|pf|3b+pё|поверну́ть}}
- гну́ться (gnútʹsja):
{{ru-conj|impf|3b|гну́ться}}
Class 3c
- verbs in -ну́ть, conjugation I, stress pattern c.
Parameters:
- 3 (required): the stressed infinitive
Allowed variants (param 2) are the past-passive-participle codes +p
, (7)
, [(7)]
and ё
.
Examples:
- тяну́ть (tjanútʹ):
{{ru-conj|impf|3c+p|тяну́ть}}
- тону́ть (tonútʹ):
{{ru-conj|impf-intr|3c|тону́ть}}
- взгляну́ть (vzgljanútʹ):
{{ru-conj|pf-intr|3c|взгляну́ть}}
- упомяну́ться (upomjanútʹsja):
{{ru-conj|pf|3c|упомяну́ться}}
Class 4a
- verbs in -ить, conjugation II, stress pattern a.
Parameters:
- 3 (required): the stressed infinitive
Allowed variants (param 2) are past stress codes, щ
, an imperative-ending code, and the past-passive-participle codes +p
, (7)
, [(7)]
and жд
.
Examples:
- тра́тить (trátitʹ):
{{ru-conj|impf|4a+p|тра́тить}}
- е́здить (jézditʹ):
{{ru-conj|impf-intr|4a|е́здить}}
- похи́тить (poxítitʹ):
{{ru-conj|pf|4aщ+p|похи́тить}}
- вы́нудить (výnuditʹ):
{{ru-conj|pf|4a+pжд|вы́нудить}}
- вы́строиться (výstroitʹsja):
{{ru-conj|pf|4a(2)|вы́строиться}}
- ско́рчиться (skórčitʹsja):
{{ru-conj|pf|4a[(2)]|ско́рчиться}}
- вы́ставить (výstavitʹ):
{{ru-conj|pf|4a[(3)]+p|вы́ставить}}
- осве́домить (osvédomitʹ):
{{ru-conj|pf|4a[(3)][(7)]|осве́домить}}
Class 4b
- verbs in -и́ть, conjugation II, stress pattern b.
Parameters:
- 3 (required): the stressed infinitive
Allowed variants (param 2) are past stress codes, щ
and the past-passive-participle codes +p
, (8)
, [(8)]
and жд
.
Examples:
- огласи́ть (oglasítʹ):
{{ru-conj|pf|4b+p|огласи́ть}}
- защити́ть (zaščitítʹ):
{{ru-conj|pf|4bщ+p|защити́ть}}
- возбуди́ть (vozbudítʹ):
{{ru-conj|pf|4b+pжд|возбуди́ть}}
- крои́ть (kroítʹ):
{{ru-conj|impf|4b(8)|крои́ть}}
- разгроми́ть (razgromítʹ):
{{ru-conj|pf|4b[(8)]|разгроми́ть}}
- роди́ть (rodítʹ):
{{ru-conj|pf|4b/c+pжд|роди́ть}}
- роди́ться (rodítʹsja):
{{ru-conj|pf|4b/c''-nd|роди́ться}}
- пронзи́ть (pronzítʹ):
{{ru-conj|pf|4b|пронзи́ть|ppp=пронзённый}}
Class 4c
- verbs in -и́ть, conjugation II, stress pattern c.
Parameters:
- 3 (required): the stressed infinitive
Allowed variants (param 2) are past stress codes, щ
, the present-active-participle codes (4)
and [(4)]
, and the past-passive-participle codes +p
, (7)
, [(7)]
and жд
.
Examples:
- спроси́ть (sprosítʹ):
{{ru-conj|pf|4c+p|спроси́ть}}
- води́ть (vodítʹ):
{{ru-conj|impf|4c+p|води́ть|prpp=+}}
- вари́ть (varítʹ):
{{ru-conj|impf|4c[(4)]+p|вари́ть}}
- лечи́ться (lečítʹsja):
{{ru-conj|impf|4c(4)|лечи́ться}}
- иссуши́ть (issušítʹ):
{{ru-conj|pf|4c[(7)]|иссуши́ть}}
- поглоти́ть (poglotítʹ):
{{ru-conj|pf|4c(7)щ|поглоти́ть|or|4b+pщ|поглоти́ть}}
) - осуди́ть (osudítʹ):
{{ru-conj|pf|4c(7)жд|осуди́ть}}
(In the example above with води́ть (vodítʹ), we request a normal present passive participle; otherwise, it would marked as "rare and awkward", as with вари́ть (varítʹ).)
Class 4a//1a
Verbs of this class can have forms of either 4a or 1a, and use the code 4a1a
. All verbs of this type are derivatives of either ме́рить (méritʹ) or му́чить (múčitʹ), and have alternative class-1a present and imperative forms (as well as perfective future forms) derived as if from ме́рять or му́чать. (These verbs actually exist and are colloquial alternatives, especially in the past and infinitive.) See verbal section 16 of A.A. Zaliznyak's book Грамматический Словарь Русского Языка, described on page 142 of the 1980 edition. The infinitive and past forms are identical for both classes.
Parameters:
- 3 (required): the stressed infinitive
The allowed variants are the same as for class 4a (but щ and жд are never encountered).
Examples:
- му́чить (múčitʹ):
{{ru-conj|impf|4a1a+p|му́чить}}
- обме́рить (obméritʹ):
{{ru-conj|pf|4a1a+p|обме́рить}}
Class 5a
- verbs in -еть (-ять after vowels, -ать after ш/щ/ч/ж), conjugation II, stress pattern a.
Parameters:
- 3 (required): the stressed infinitive
- 4 (optional): the present stem, if different from the infinitive stem; needs to have the stress indicated
Allowed variants (param 2) are past-stress codes, an imperative-ending code, and the past-passive-participle codes +p
, (7)
, [(7)]
and ё
.
Examples:
- оби́деть (obídetʹ):
{{ru-conj|pf|5a+p|оби́деть}}
- вы́стоять (výstojatʹ):
{{ru-conj|pf|5a+p|вы́стоять}}
- вы́гнать (výgnatʹ):
{{ru-conj|pf|5a+p|вы́гнать|вы́гон}}
- ви́деть (vídetʹ):
{{ru-conj|impf|5a|ви́деть|noimpr=1|ppp=ви́денный}}
- слы́шаться (slýšatʹsja):
{{ru-conj|impf|5a|слы́шаться|noimpr=1}}
or (impersonal){{ru-conj|impf-impers|5a|слы́шаться|noimpr=1}}
Class 5b
- verbs in -е́ть (-я́ть after vowels, -а́ть after ш/щ/ч/ж), conjugation II, stress pattern b.
Parameters:
- 3 (required): the stressed infinitive
- 4 (optional): the present stem, if different from the infinitive stem; should not have stress
Allowed variants (param 2) are past-stress codes, an imperative-ending code, and the past-passive-participle codes +p
, (7)
, [(7)]
and ё
.
Examples:
- зазвене́ть (zazvenétʹ):
{{ru-conj|pf-intr|5b|зазвене́ть}}
- лежа́ть (ležátʹ):
{{ru-conj|impf-intr|5b|лежа́ть|pradp=лёжа}}
- переспа́ть (perespátʹ):
{{ru-conj|pf|5b/c+p|переспа́ть}}
- состоя́ться (sostojátʹsja):
{{ru-conj|pf|5b|состоя́ться}}
- спа́ться (spátʹsja):
{{ru-conj|impf-impers|5b/c''|спа́ться}}
Class 5c
- verbs in -е́ть (-я́ть after vowels, -а́ть after ш/щ/ч/ж, гнать exceptionally), conjugation II, stress pattern c.
Parameters:
- 3 (required): the stressed infinitive
- 4 (optional): the present stem, if different from the infinitive stem; needs to have the stress indicated
Allowed variants (param 2) are past-stress codes, an imperative-ending code, the present-active-participle codes (4)
and [(4)]
, and the past-passive-participle codes +p
, (7)
, [(7)]
and ё
.
Examples:
- рассмотре́ть (rassmotrétʹ):
{{ru-conj|pf|5c+p|рассмотре́ть}}
- терпе́ть (terpétʹ):
{{ru-conj|impf|5c(4)|терпе́ть|ppp=-}}
- гнать (gnatʹ):
{{ru-conj|impf|5c/c|гнать|го́н|ppp=-}}
- погна́ться (pognátʹsja):
{{ru-conj|pf|5c/c''|погна́ться|пого́н}}
Note that specifying |ppp=-
to indicate a missing past passive participle isn't necessary for imperfective verbs but is done in терпе́ть (terpétʹ) and гнать (gnatʹ) for clarity, since transitive imperfective verbs that were not formed by suffixing a perfective verb normally do have a past passive participle.
Class 6a
- verbs in -ать (-ять after vowels), iotated present tense without -а, conjugation I, stress pattern a.
Parameters:
- 3 (required): the stressed infinitive
- 4 (optional): the present stem, if different from the infinitive stem; needs to have the stress indicated
Allowed variants (param 2) are past-stress codes, an imperative-ending code, and the past-passive-participle codes +p
, (7)
, [(7)]
and ё
.
Examples:
- се́ять (séjatʹ):
{{ru-conj|impf|6a+p|се́ять}}
- вы́писать (výpisatʹ):
{{ru-conj|pf|6a+p|вы́писать}}
- колыха́ться (kolyxátʹsja):
{{ru-conj|impf|6a|колыха́ться}}
- колеба́ть (kolebátʹ):
{{ru-conj|impf|6a|колеба́ть|ppp=-|prpp=+}}
(In the last example, we mark the past passive participle as nonexistent using |ppp=-
and request a normal present passive participle using |prpp=+
; otherwise, no present passive participle would be generated.)
Class 6°a
- verbs in -ать, non-iotated present tense without -а, conjugation I, stress pattern a.
Parameters:
- 3 (required): the stressed infinitive
- 4 (optional): the present stem, if different from the infinitive stem; needs to have the stress indicated
Note that these verbs can use both 6°a
and 6oa
as the code.
Examples:
- вы́рвать (výrvatʹ):
{{ru-conj|pf|6°a+p|вы́рвать}}
- вы́брать (výbratʹ):
{{ru-conj|pf|6°a+p|вы́брать|вы́бер}}
- жа́ждать (žáždatʹ):
{{ru-conj|impf-intr|6°a|жа́ждать|pradp=жа́ждая}}
Class 6b
- verbs in -а́ть (-я́ть after vowels), iotated present tense without -а, conjugation I, stress pattern b.
Parameters:
- 3 (required): the stressed infinitive
- 4 (optional): the present stem, if different from the infinitive stem; should not have stress
Allowed variants (param 2) are past stress and the past-passive-participle codes +p
, (7)
, [(7)]
and ё
.
Examples:
- ржать (ržatʹ):
{{ru-conj|impf-intr|6b|ржать|pradp=-}}
- рассмея́ться (rassmejátʹsja):
{{ru-conj|pf|6b|рассмея́ться}}
Class 6°b
- verbs in -а́ть, non-iotated present tense without -а, conjugation I, stress pattern b.
Parameters:
- 3 (required): the stressed infinitive
- 4 (optional): the present stem, if different from the infinitive stem; should not have stress
Note that these verbs can use both 6°b
and 6ob
as the code.
Allowed variants (param 2) are past stress and the past-passive-participle codes +p
, (7)
, [(7)]
and ё
.
Examples:
- соса́ть (sosátʹ):
{{ru-conj|impf|6°b+p|соса́ть}}
- совра́ть (sovrátʹ):
{{ru-conj|pf|6°b/c+p|совра́ть}}
- звать (zvatʹ):
{{ru-conj|impf|6°b/c+p|звать|зов}}
- разобра́ться (razobrátʹsja):
{{ru-conj|pf|6°b/c''|разобра́ться|разбер}}
Class 6c
- verbs in -а́ть (-я́ть after vowels), iotated present tense without -а, conjugation I, stress pattern c.
Parameters:
- 3 (required): the stressed infinitive
- 4 (optional): the present stem, if different from the infinitive stem; needs to have the stress indicated
Allowed variants (param 2) are щ
, past stress, and the past-passive-participle codes +p
, (7)
, [(7)]
and ё
.
Examples:
- писа́ть (pisátʹ):
{{ru-conj|impf|6c+p|писа́ть}}
- клевета́ть (klevetátʹ):
{{ru-conj|impf-intr|6cщ|клевета́ть}}
- истрепа́ть (istrepátʹ):
{{ru-conj|pf|6c+pё|истрепа́ть}}
- постла́ть (postlátʹ):
{{ru-conj|pf|6c+p|постла́ть|посте́л}}
- каза́ться (kazátʹsja):
{{ru-conj|impf|6c|каза́ться}}
- разостла́ться (razostlátʹsja):
{{ru-conj|pf|6c|разостла́ться|рассте́л}}
Class 6°c
- verbs in -ать, non-iotated present tense without -а, conjugation I, stress pattern c.
Parameters:
- 3 (required): the stressed infinitive
- 4 (optional): the present stem, if different from the infinitive stem; needs to have the stress indicated
Note that these verbs can use both 6°c
and 6oc
as the code.
All verbs in this class are derivatives of стона́ть (stonátʹ).
Examples:
- стона́ть (stonátʹ):
{{ru-conj|impf-intr|6°c|стона́ть}}
- простона́ть (prostonátʹ):
{{ru-conj|pf-intr|6°c|простона́ть}}
Class 6a//1a and 6c//1a, §13
Verbs of this class can have forms of either 6a/6c or 1a, and use the codes 6a1as13
(because there is another 6a//1a variant) and 6c1a
.
Section 13 refers to a notation in A.A. Zaliznyak's book Грамматический Словарь Русского Языка, described on page 141 of the 1980 edition. The infinitive and past forms are identical for both classes. In the finite present (or perfective future) tense and the present active participle, the class 6 forms are preferred and the class 1a forms are considered colloquial. In the remaining present participles and the imperative, forms of both classes are equally preferred.
Parameters are as in class 6a or 6c.
Examples:
- ты́кать (týkatʹ, “to jab, to prod”):
{{ru-conj|impf|6a1as13+p|ты́кать}}
- щипа́ть (ščipátʹ, “to pinch, to pluck”):
{{ru-conj|impf|6c1a+p|щипа́ть}}
Class 6a//1a and 1a//6a, §14
Verbs of this class can have forms of either 6a or 1a, and use the codes 6a1as14
(because there is another 6a//1a variant) and 1a6a
.
Section 14 refers to a notation in A.A. Zaliznyak's book Грамматический Словарь Русского Языка, described on page 141 of the 1980 edition. The infinitive and past forms are identical for both classes. In the present adverbial participle and imperative, the class 1 forms are preferred and the class 6 forms are dated. In the remainder of the present (and perfective future), forms of one class or the other are slightly preferred: class 6 for 6a//1a, class 1 for 1a//6a.
Parameters are as in class 6a.
Examples:
- колыха́ться (kolyxátʹsja, “to heave, to flutter, to flicker”):
{{ru-conj|impf|6a1as14|колыха́ться}}
- ка́пать (kápatʹ, “to drip”):
{{ru-conj|impf-intr|1a6a|ка́пать}}
Class 7a
- verbs in -сти/сть, -зти/-зть, present tense stem ending in various consonants, conjugation I, stress pattern a.
Parameters:
- 3 (required): the stressed infinitive
- 4 (required): the present stem; needs to have the stress indicated; multiple stems can be specified, separated by commas
- 5 (optional): the past stem; needs to have the stress indicated; normally should be omitted, and defaults to the infinitive (but ending in д, т, с, з, б or ст of the present stem, except in verbs in -сть where the present stem ends in д or т, in which case the default value ends in a vowel)
Allowed variants (param 2) are past stress codes, imperative-ending codes, (9)
and the past-passive-participle code +p
.
Examples:
- вы́вести (vývesti):
{{ru-conj|pf|7a(9)+p|вы́вести|вы́вед}}
- сесть (sestʹ):
{{ru-conj|pf-intr|7a|сесть|ся́д}}
- вылезть (vyleztʹ):
{{ru-conj|pf-intr|7a[(3)]|вы́лезть|вы́лез}}
Class 7b
- verbs in -сти́/сть, -зти́/-зть, present tense stem ending in various consonants, conjugation I, stress pattern b.
Parameters:
- 3 (required): the stressed infinitive
- 4 (required): the present stem; should not have stress; multiple stems can be specified, separated by commas
- 5 (optional): the past stem; needs to have the stress indicated; normally should be omitted, and defaults to the infinitive (but ending in д, т, с, з, б or ст of the present stem, except in verbs in -сть where the present stem ends in д or т, in which case the default value ends in a vowel); the special argument ёе should be used if the past tense masculine singular has ё in it but the past active and adverbial participles have е
Allowed variants (param 2) are past stress codes, (9)
and the past-passive-participle code +p
.
Examples:
- везти́ (veztí):
{{ru-conj|impf|7b/b+p|везти́|вез}}
- вести́ (vestí):
{{ru-conj|impf|7b/b+p|вести́|вед|ёе|prpp=ведо́мый*|notes=* Dated.}}
- пронести́ (pronestí):
{{ru-conj|pf|7b/b(9)+p|пронести́|пронес}}
- спасть (spastʹ):
{{ru-conj|pf-intr|7b|спасть|спад}}
- дорасти́ (dorastí):
{{ru-conj|pf-intr|7b/b|дорасти́|дораст|доро́с}}
- обокра́сть (obokrástʹ):
{{ru-conj|pf|7b+p|обокра́сть|обкрад,обокрад}}
Class 8a
- verbs in -чь, present tense in -г-/-к- (iotated to -ж-/-ч- in the 2sg/3sg/1pl/2pl), conjugation I, stress pattern a.
Parameters:
- 3 (required): the stressed infinitive
- 4 (required): the present stem, in non-iotated form; needs to have the stress indicated
- 5 (optional): the stressed past stem, used for the masculine singular past and as the stem of past participles; needs to have the stress indicated, defaults to the present stem
The default for the present passive participle, present adverbial participle, and short past adverbial participle are blank, and will need to be specified with overrides if they exist.
Examples:
- вы́течь (výtečʹ):
{{ru-conj|pf-intr|8a|вы́течь|вы́тек}}
- вы́жечь (výžečʹ):
{{ru-conj|pf|8a+p|вы́жечь|вы́жг|вы́жег}}
Class 8b
- verbs in -чь, present tense in -г-/-к- (iotated to -ж-/-ч- in the 2sg/3sg/1pl/2pl), conjugation I, stress pattern b.
Parameters:
- 3 (required): the stressed infinitive
- 4 (required): the present stem, in non-iotated form; should not have stress
- 5 (optional): one or more stressed past stems separated by commas, used for the masculine singular past and as the stem of past participles; needs to have the stress indicated, defaults to the present stem with the last vowel stressed (actually to the special value ё, see below)
For the stressed past stem (param 5), the special arguments ё, е or ёе can be used in conjunction with verbs whose infinitive ends in -ечь. The argument ё is the default, and indicates that the stressed past stem should have ё in place of the last е. The argument е contrarily indicates that the stressed past stem should have е́, and the argument ёе indicates that the stressed past stem should have ё in the masculine singular past but е́ in the past active and adverbial participles.
The default for the present passive participle, present adverbial participle, and short past adverbial participle are blank, and will need to be specified with overrides if they exist.
Allowed variants (param 2) are past stress codes and the past-passive-participle code +p
.
Examples:
- печь (pečʹ):
{{ru-conj|impf|8b/b+p|печь|пек}}
- жечь (žečʹ):
{{ru-conj|impf|8b/b+p|жечь|жг|жёг}}
- стричь (stričʹ):
{{ru-conj|impf|8b+p|стричь|стриг}}
- отвле́чься (otvléčʹsja):
{{ru-conj|pf|8b/b|отвле́чься|отвлек}}
- приволо́чь (privolóčʹ):
{{ru-conj|pf|8b/b|приволо́чь|приволок|ppp=приволо́ченный|ppp2=приволочённый}}
- засе́чь (zaséčʹ, “to notch, to locate, to plot on a map”):
{{ru-conj|pf|8b/b+p|засе́чь|засек|ёе,е|ppp2=засе́ченный|pasttail=*|notes=* Dated.}}
- засе́чь (zaséčʹ, “to whip to death”):
{{ru-conj|pf|8b/b+p|засе́чь|засек|ёе|or|8b+p|засе́чь|засек|е|pasttail=*|notes=* Dated.}}
Class 9a
- verbs in -ереть, present tense in -р- (no root vowel), conjugation I, stress pattern a.
Parameters:
- 3 (required): the stressed infinitive
- 4 (optional): the present stem; needs to have the stress indicated
Allowed variants (param 2) are past stress codes and the past-passive-participle code +p
.
These verbs only occur in the perfective.
Examples:
- вы́тереть (výteretʹ):
{{ru-conj|pf|9a+p|вы́тереть}}
- вы́мереть (výmeretʹ):
{{ru-conj|pf-intr|9a|вы́мереть}}
Class 9b
- verbs in -ере́ть, present tense in -р- (no root vowel), conjugation I, stress pattern b.
Parameters:
- 3 (required): the stressed infinitive
- 4 (optional): the present stem; should not have stress
- 5 (optional): the past participle stem, minus -ши(й); needs to have the stress indicated; used for the past active and adverbial participles, defaults to the value of past_m; multiple stems can be specified, separated by commas
Allowed variants (param 2) are past stress codes, the past-passive-participle code +p
and the long prefix code *
.
The default for the present passive participle, present adverbial participle, and (in the imperfect) the short past adverbial participle are blank, and will need to be specified with overrides if they exist.
Examples:
- тере́ть (terétʹ):
{{ru-conj|impf|9b+p|тере́ть}}
- стере́ть (sterétʹ):
{{ru-conj|pf|9*b+p|стере́ть}}
- запере́ть (zaperétʹ):
{{ru-conj|pf|9b/c(1)+p|запере́ть}}
- замере́ть (zamerétʹ):
{{ru-conj|pf-intr|9b/c(1)|замере́ть||заме́р,за́мер}}
- опере́ться (operétʹsja):
{{ru-conj|pf|9*b/c'',a|опере́ться|обопр|padp2=оперши́}}
- отпере́ться (otperétʹsja, “to unlock”):
{{ru-conj|pf|9*b/b*|отпере́ться|padp=отперши́|pap=о́тперший}}
Class 10a
- verbs in -олоть or -ороть, conjugation I, stress pattern a.
Parameters:
- 3 (required): the stressed infinitive
Allowed variants (param 2) are the past-passive-participle codes +p
, (7)
and [(7)]
.
These verbs only occur in the perfective.
Examples:
Class 10c
- verbs mostly in -оло́ть or -оро́ть, conjugation I, stress pattern c.
- 3 (required): the stressed infinitive
- 4 (optional): the present stem; needs to have the stress indicated
Allowed variants (param 2) are the past-passive-participle codes +p
, (7)
and [(7)]
.
The default for the present passive participle is blank, and will need to be specified with an override if it exists.
Examples:
- уколо́ть (ukolótʹ):
{{ru-conj|pf|10c+p|уколо́ть}}
- моло́ть (molótʹ):
{{ru-conj|impf|10c+p|моло́ть|ме́л}}
- боро́ться (borótʹsja):
{{ru-conj|impf|10c|боро́ться}}
Class 11a
- verbs in -ить, present tense in -ью/-ьет, conjugation I, stress pattern a.
Parameters:
- 3 (required): the stressed infinitive
Allowed variants (param 2) are past stress codes and the past-passive-participle code +p
.
These verbs only occur in the perfective.
Examples:
Class 11b
- verbs in -и́ть, present tense in -ью́/-ьёт, conjugation I, stress pattern b.
- 3 (required): the stressed infinitive
- 4 (optional): the present stem; should not have stress
Allowed variants (param 2) are past stress codes, the past-passive-participle code +p
and the long prefix code *
.
The default for the present passive participle is blank, and will need to be specified with an override if it exists.
Examples:
- би́ться (bítʹsja):
{{ru-conj|impf|11b|би́ться}}
- разви́ть (razvítʹ):
{{ru-conj|pf|11*b/c|разви́ть|ppp=ра́звитый|ppp2=разви́тый}}
- пить (pitʹ):
{{ru-conj|impf|11b/c+p|пить}}
- опи́ть (opítʹ):
{{ru-conj|pf|11*b/c+p|опи́ть|обоп}}
Class 12a
- verbs in a single-syllable root ending in a vowel, usually infinitive -ыть (present tense -о́ю) or -уть (present tense -у́ю), conjugation I, stress pattern a.
Parameters:
- 3 (required): the stressed infinitive
- 4 (optional): the present stem; needs to have the stress indicated
Allowed variants (param 2) are past stress codes and the past-passive-participle code +p
.
Examples:
Class 12b
- петь (petʹ) (пою́, поёт), гнить (gnitʹ) (гнию́, гниёт) and derivatives, conjugation I, stress pattern b.
Parameters:
- 3 (required): the stressed infinitive
- 4 (optional): the present stem; should not have stress
Allowed variants (param 2) are past stress codes and the past-passive-participle code +p
.
The default for the present passive participle is blank, and will need to be specified with an override if it exists.
Examples:
Class 13b
- verbs in -ава́ть (present tense -аю́, -аёт), conjugation I, stress pattern b.
Parameters:
- 3 (required): the stressed infinitive
Allowed variants (param 2) are the past-passive-participle code +p
.
Examples:
- дава́ть (davátʹ):
{{ru-conj|impf|13b|дава́ть}}
- остава́ться (ostavátʹsja):
{{ru-conj|impf|13b|остава́ться}}
Class 14a
- one verb вы́жать (výžatʹ) (present tense вы́жму, вы́жмет), conjugation I, stress pattern a.
Parameters:
- 3 (required): the stressed infinitive
- 4 (required): the present stem; needs to have the stress indicated
Allowed variants (param 2) are past stress codes and the past-passive-participle code +p
.
Example (only one):
Class 14b
- verbs in a single-syllable root ending in infinitive -ать or -ять, present tense in -н- or -м- (no root vowel) or in -им-, conjugation I, stress pattern b.
Parameters:
- 3 (required): the stressed infinitive
- 4 (required): the present stem; should not have stress
Allowed variants (param 2) are past stress codes and the past-passive-participle code +p
.
The default for the present passive participle is blank, and will need to be specified with an override if it exists.
Examples:
- мять (mjatʹ):
{{ru-conj|impf|14b+p|мять|мн}}
- нажа́ть (nažátʹ, “to press”):
{{ru-conj|pf|14b+p|нажа́ть|нажм}}
- взять (vzjatʹ):
{{ru-conj|pf|14b/c'+p|взять|возьм}}
- заня́ться (zanjátʹsja):
{{ru-conj|pf|14b/b*,b|заня́ться|займ}}
Class 14c
- verbs in a single-syllable root ending in infinitive -ать or -ять, present tense in -н- or -м- (no root vowel) or in -им-, conjugation I, stress pattern c.
Parameters:
- 3 (required): the stressed infinitive
- 4 (required): the present stem; needs to have the stress indicated
Allowed variants (param 2) are past stress codes and the past-passive-participle code +p
.
The default for the present passive participle is blank, and will need to be specified with an override if it exists.
Examples:
- изъя́ть (izʺjátʹ):
{{ru-conj|pf|14c+p|изъя́ть|изы́м}}
- обня́ться (obnjátʹsja):
{{ru-conj|pf|14c/c''-bd|обня́ться|обни́м}}
Class 15a
- verbs in a single-syllable root, present tense in full root plus -н-, conjugation I, stress pattern a. All verbs are derivatives of деть (detʹ), стать (statʹ), стыть (stytʹ), or -стрять (-strjatʹ).
Parameters:
- 3 (required): the stressed infinitive
Allowed variants (param 2) are the past-passive-participle code +p
.
The default for the present passive and present adverbial participle is blank, and will need to be specified with overrides if they exist.
Examples:
- стыть (stytʹ):
{{ru-conj|impf-intr|15a|стыть}}
- деть (detʹ):
{{ru-conj|pf|15a+p|деть}}
- оста́ться (ostátʹsja):
{{ru-conj|pf|15a|оста́ться}}
Class 16a
- verbs in a single-syllable root, present tense in full root plus -в-, conjugation I, stress pattern a. All verbs begin with вы́- (vý-) and are perfective.
Parameters:
- 3 (required): the stressed infinitive
Allowed variants (param 2) are past stress codes and the past-passive-participle code +p
.
Examples:
Class 16b
- verbs in a single-syllable root, present tense in full root plus -в-, conjugation I, stress pattern b. All verbs are derivatives of жить (žitʹ), плыть (plytʹ), or слыть (slytʹ).
Parameters:
- 3 (required): the stressed infinitive
Allowed variants (param 2) are past stress codes and the past-passive-participle code +p
.
The default for the present passive participle is blank, and will need to be specified with an override if it exists.
Examples:
- плыть (plytʹ):
{{ru-conj|impf-intr|16b/c'|плыть}}
- зажи́ть (zažítʹ):
{{ru-conj|pf-intr|16b/c(1),c|зажи́ть|pasttail=*|notes=* Colloquial.}}
Irregular verbs
There are numerous irregular verbs that don't fit into the above classes. All of them use class irreg
. The following is the full list of irregular main verbs supported (prefixed and reflexive variants are also supported):
- бежа́ть (bežátʹ), бѣжа́ть (běžátʹ)
- быть (bytʹ)
- внять (vnjatʹ)
- дать (datʹ)
- есть (jestʹ), ѣсть (jěstʹ)
- е́хать (jéxatʹ), ѣ́хать (jě́xatʹ)
- живописа́ть (živopisátʹ)
- зи́ждиться (zížditʹsja)
- зы́бить (zýbitʹ)
- идти́ (idtí) and verbs in -йти́ (-jtí)
- има́ть (imátʹ) (and derivatives such as внима́ть (vnimátʹ), восприима́ть (vospriimátʹ))
- клясть (kljastʹ)
- лгать (lgatʹ)
- лечь (lečʹ)
- мину́ть (minútʹ)
- мочь (močʹ)
- обя́зывать (objázyvatʹ)
- ссать (ssatʹ)
- стели́ть (stelítʹ)
- сцать (scatʹ)
- сы́пать (sýpatʹ)
- хоте́ть (xotétʹ), хотѣ́ть (xotě́tʹ)
- честь (čestʹ)
- чтить (čtitʹ)
- -шиби́ть (-šibítʹ) and derivatives
Note that pre-reform verbs such as ѣ́хать (jě́xatʹ) still must be invoked using {{ru-conj-old}}
(not {{ru-conj|}}
) despite the fact that the spelling itself indicates a pre-reform verb.
Parameters:
- 3 (required): the stressed infinitive
Allowed variants (param 2) are past stress codes for the verbs быть (bytʹ), дать (datʹ), клясть (kljastʹ) and derivatives, and +p
for быть (bytʹ), внять (vnjatʹ), дать (datʹ), есть (jestʹ), живописа́ть (živopisátʹ), идти́ (idtí), има́ть (imátʹ), клясть (kljastʹ), лгать (lgatʹ), минова́ть (minovátʹ), мину́ть (minútʹ), обя́зывать (objázyvatʹ), стели́ть (stelítʹ), сы́пать (sýpatʹ), честь (čestʹ), чтить (čtitʹ), -шиби́ть (-šibítʹ) and derivatives; otherwise, no variant codes are allowed.
Examples:
- изнемо́чь (iznemóčʹ):
{{ru-conj|pf-intr|irreg|изнемо́чь}}
- да́ться (dátʹsja):
{{ru-conj|pf|irreg/c''|да́ться}}
- разда́ть (razdátʹ):
{{ru-conj|pf|irreg/c(1),c+p|разда́ть}}
- прийти́ (prijtí):
{{ru-conj|pf-intr|irreg|прийти́}}
- слать (slatʹ):
{{ru-conj|impf|irreg|слать|ppp=-|pradp=-}}
- посла́ть (poslátʹ):
{{ru-conj|pf|irreg+p|посла́ть}}
- вы́сыпать (výsypatʹ):
{{ru-conj|pf|irreg+p|вы́сыпать}}
- изнемо́чь (iznemóčʹ):
{{ru-conj|pf-intr|irreg|изнемо́чь}}
- убѣжа́ть (uběžátʹ):
{{ru-conj-old|pf-intr|irreg|убѣжа́ть}}
--[=[
This module contains functions for creating inflection tables for Russian
verbs.
]=]--
local m_utilities = require("Module:utilities")
local com = require("Module:ru-common")
local export = {}
-- Within this module, conjugations are the functions that do the actual
-- conjugating by creating the forms of a basic verb.
-- They are defined further down.
local conjugations = {}
local lang = require("Module:languages").getByCode("ru")
-- 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
-- This form is not always present on verbs, so it needs to be specified explicitly.
forms["past_pasv_part"] = args["past_pasv_part"] or ""
--alternative forms
forms["impr_sg2"] = forms["impr_sg2"] or args["impr_sg2"]
forms["impr_pl2"] = forms["impr_pl2"] or args["impr_pl2"]
forms["pres_actv_part2"] = forms["pres_actv_part2"] or args["pres_actv_part2"]
forms["past_actv_part2"] = forms["past_actv_part2"] or args["past_actv_part2"]
forms["pres_pasv_part2"] = forms["pres_pasv_part2"] or args["pres_pasv_part2"]
forms["past_pasv_part2"] = forms["past_pasv_part2"] or args["past_pasv_part2"]
forms["pres_adv_part2"] = forms["pres_adv_part2"] or args["pres_adv_part2"]
forms["past_adv_part2"] = forms["past_adv_part2"] or args["past_adv_part2"]
forms["past_adv_part_short2"] = forms["past_adv_part_short2"] or args["past_adv_part_short2"]
forms["past_m2"] = forms["past_m2"] or args["past_m2"]
forms["past_m3"] = forms["past_m3"] or args["past_m3"]
forms["past_f2"] = forms["past_f2"] or args["past_f2"]
forms["past_n2"] = forms["past_n2"] or args["past_n2"]
forms["past_pl2"] = forms["past_pl2"] or args["past_pl2"]
forms["pres_futr_1sg2"] = forms["pres_futr_1sg2"] or args["pres_futr_1sg2"]
forms["pres_futr_2sg2"] = forms["pres_futr_2sg2"] or args["pres_futr_2sg2"]
forms["pres_futr_3sg2"] = forms["pres_futr_3sg2"] or args["pres_futr_3sg2"]
forms["pres_futr_1pl2"] = forms["pres_futr_1pl2"] or args["pres_futr_1pl2"]
forms["pres_futr_2pl2"] = forms["pres_futr_2pl2"] or args["pres_futr_2pl2"]
forms["pres_futr_3pl2"] = forms["pres_futr_3pl2"] or args["pres_futr_3pl2"]
--бдеть, победить have no 1st person sg present (impf) / future (pf)
if args["no_1sg_pres"] then
if args["no_1sg_pres"] == "1" then
forms["pres_futr_1sg"] = ""
end
end
if args["no_1sg_futr"] then
if args["no_1sg_futr"] == "1" then
forms["pres_futr_1sg"] = ""
end
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
return make_table(forms, title, perf, intr or refl, impers) .. m_utilities.format_categories(categories, lang)
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["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
local pres_stem = inf_stem
local pres_stem = inf_stem
-- -ева- change to -ю- after most consonants and vowels, to -у- after hissing sounds and ц
if mw.ustring.find(pres_stem, "ова$") then
pres_stem = mw.ustring.gsub(pres_stem, "ова$", "у")
elseif mw.ustring.find(pres_stem, "о́ва$") then
pres_stem = mw.ustring.gsub(pres_stem, "о́ва$", "у́")
elseif mw.ustring.find(pres_stem, "ова́$") then
pres_stem = mw.ustring.gsub(pres_stem, "ова́$", "у́")
elseif mw.ustring.find(pres_stem, "[жцчшщ]ева$") then
pres_stem = mw.ustring.gsub(pres_stem, "ева$", "у")
elseif mw.ustring.find(pres_stem, "[жцчшщ]е́ва$") then
pres_stem = mw.ustring.gsub(pres_stem, "е́ва$", "у́")
elseif mw.ustring.find(pres_stem, "[жцчшщ]ева́$") then
pres_stem = mw.ustring.gsub(pres_stem, "ева́$", "у́")
elseif mw.ustring.find(pres_stem, "[бвгдзклмнпрстфхьаэыоуяеиёю́]ева$") then
pres_stem = mw.ustring.gsub(pres_stem, "ева$", "ю")
elseif mw.ustring.find(pres_stem, "[бвгдзклмнпрстфхьаэыоуяеиёю́]е́ва$") then
pres_stem = mw.ustring.gsub(pres_stem, "е́ва$", "ю́")
elseif mw.ustring.find(pres_stem, "[бвгдзклмнпрстфхьаэыоуяеиёю́]ева́$") then
pres_stem = mw.ustring.gsub(pres_stem, "ева́$", "ю́")
end
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
-- all -ова- change to -у-
pres_stem = mw.ustring.gsub(pres_stem, "о(́?)ва(́?)$", "у%1%2")
-- -ева- change to -ю- after most consonants and vowels, to -у- after hissing sounds and ц
if mw.ustring.find(pres_stem, "[бвгдзклмнпрстфхьаэыоуяеиёю́]е(́?)ва(́?)$") then
pres_stem = mw.ustring.gsub(pres_stem, "е(́?)ва(́?)$", "ю%1%2")
elseif mw.ustring.find(pres_stem, "[жцчшщ]е(́?)ва(́?)$") then
pres_stem = mw.ustring.gsub(pres_stem, "е(́?)ва(́?)$", "у%1%2")
end
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 .. "ли"
end
-- if past_m_short is special, e.g. вять - вял, then use it, otherwise use the current value
if past_m_short then
forms["past_m_short"] = past_m_short
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, 0)
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 .. "и́ли"
-- pres_actv_part for суши́ть -> су́шащий
if forms["infinitive"] == "суши́ть" then
forms["pres_actv_part"] = "су́шащий"
end
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"] = stem .. "и́мый"
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")
-- optional parameter for verbs like клеветать (клевещу́
local shch = args[3]; if shch == "" then shch = nil end
-- remove accent for some forms
local stem_noa = com.make_unstressed(stem)
-- iotate the stem
local iotated_stem = ""
if not shch then
iotated_stem = com.iotation(stem)
else
iotated_stem = com.iotation(stem, shch)
end
-- iotate the 2nd stem
local iotated_stem_noa = ""
if not shch then
iotated_stem_noa = com.iotation(stem_noa)
else
iotated_stem_noa = com.iotation(stem_noa, shch)
end
local no_iotation = nil
if args["no_iotation"] == "1" then
no_iotation = "1"
end
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, "[шщжч]$") or no_iotation 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, no_iotation)
-- if shch is nil, pass nothing, otherwise pass "щ"
if not shch then
present_je_c(forms, stem) -- param #3 must be a string
else -- tell the conjugator that this is an exception
present_je_c(forms, stem, shch)
end
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 past_f = args["past_f"]
local past_n = args["past_n"]
local past_pl = args["past_pl"]
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
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["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"
--for this type, it's important to distinguish impf and pf
local verb_type = args[1] or (NAMESPACE == "Template" and "impf") or error("Verb type (first parameter) has not been provided")
local impf = (verb_type == "impf" or verb_type == "impf-intr" or verb_type == "impf-impers" or verb_type == "impf-refl" or verb_type == "impf-impers-refl")
local pf = (verb_type == "pf" or verb_type == "pf-intr" or verb_type == "pf-impers" or verb_type == "pf-refl" or verb_type == "pf-impers-refl")
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
--тереть -> тёрши
if impf then
forms["past_adv_part"] = stem .. "ши"; forms["past_adv_part_short"] = ""
end
--растереть -> растере́вши, растер́ев
if pf then
forms["past_adv_part"] = stem_noa .. "е́вши"; forms["past_adv_part_short"] = stem_noa .. "е́в"
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"] = stem .. "емый"
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 .. "ю́т"
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_m then
forms["past_m"] = past_m
end
if past_n then
forms["past_n"] = past_n
end
if past_pl then
forms["past_pl"] = past_pl
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["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"
--for this type, it's important to distinguish if it's reflexive to set some stress patterns
local verb_type = args[1] or (NAMESPACE == "Template" and "refl") or error("Verb type (first parameter) has not been provided")
local refl = (verb_type == "impf-refl" or verb_type == "pf-refl" or verb_type == "impf-impers-refl" or verb_type == "pf-impers-refl")
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 .. "да́ли"
if refl then
forms["past_n"] = prefix .. "дало́"
forms["past_n2"] = nil
end
-- вы́дать (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"] = prefix .. "сы́племый"
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["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
conjugations["irreg-ссать-сцать"] = function(args)
-- irregular, only for verbs derived from ссать and сцать (both vulgar!)
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 pres_stem = args[3] or (NAMESPACE == "Template" and "-") or error("Third parameter has not been provided")
local prefix = args[4]; if not prefix then prefix = "" end
-- if the prefix is stressed, remove stress from the stem
if mw.ustring.find(prefix, "[́]") then
stem = com.remove_accents(stem)
end
forms["infinitive"] = prefix .. stem .. "ть"
-- if the prefix is stressed
if mw.ustring.find(prefix, "[́]") then
forms["pres_actv_part"] = prefix .. pres_stem .. "ущий"
forms["impr_sg"] = prefix .. pres_stem .. "ы"
forms["impr_pl"] = prefix .. pres_stem .. "ыте"
forms["pres_futr_1sg"] = prefix .. pres_stem .. "у"
forms["pres_futr_2sg"] = prefix .. pres_stem .. "ышь"
forms["pres_futr_3sg"] = prefix .. pres_stem .. "ыт"
forms["pres_futr_1pl"] = prefix .. pres_stem .. "ым"
forms["pres_futr_2pl"] = prefix .. pres_stem .. "ыте"
forms["pres_futr_3pl"] = prefix .. pres_stem .. "ут"
else
forms["pres_actv_part"] = prefix .. pres_stem .. "у́щий"
forms["impr_sg"] = prefix .. pres_stem .. "ы́"
forms["impr_pl"] = prefix .. pres_stem .. "ы́те"
forms["pres_futr_1sg"] = prefix .. pres_stem .. "у́"
forms["pres_futr_2sg"] = prefix .. pres_stem .. "ы́шь"
forms["pres_futr_3sg"] = prefix .. pres_stem .. "ы́т"
forms["pres_futr_1pl"] = prefix .. pres_stem .. "ы́м"
forms["pres_futr_2pl"] = prefix .. pres_stem .. "ы́те"
forms["pres_futr_3pl"] = prefix .. pres_stem .. "у́т"
end
forms["past_actv_part"] = prefix .. stem .. "вший"
forms["pres_pasv_part"] = ""
forms["past_adv_part"] = prefix .. stem .. "вши"; forms["past_adv_part_short"] = prefix .. stem .. "в"
forms["pres_adv_part"] = ""
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 чтить
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_actv_part2"] = 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["pres_futr_3pl2"] = 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 for ошибиться
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_actv_part2"] = ""
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"] = prefix .. "плеска́емый"
forms["past_adv_part"] = prefix .. "плеска́вши"; forms["past_adv_part_short"] = prefix .. "плеска́в"
forms["pres_actv_part"] = prefix .. "плеска́ющий"
forms["pres_actv_part2"] = prefix .. "пле́щущий"
forms["pres_adv_part"] = prefix .. "плеска́я"
forms["pres_adv_part2"] = prefix .. "плеща́"
forms["impr_sg"] = prefix .. "плеска́й"
forms["impr_sg2"] = prefix .. "плещи́"
forms["impr_pl"] = prefix .. "плеска́йте"
forms["impr_pl2"] = 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["pres_futr_1sg2"] = prefix .. "плещу́"
forms["pres_futr_2sg2"] = prefix .. "пле́щешь"
forms["pres_futr_3sg2"] = prefix .. "пле́щет"
forms["pres_futr_1pl2"] = prefix .. "пле́щем"
forms["pres_futr_2pl2"] = prefix .. "пле́щете"
forms["pres_futr_3pl2"] = 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["pres_actv_part"] = prefix .. "реву́щий"
forms["past_actv_part"] = prefix .. "реве́вший"
forms["pres_pasv_part"] = ""
forms["pres_adv_part"] = prefix .. "ревя́"
forms["past_adv_part"] = prefix .. "реве́вши"; forms["past_adv_part_short"] = 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 .. "реву́т"
-- no imperative
forms["impr_sg"] = prefix .. "реви́"
forms["impr_pl"] = 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"] = prefix .. "вне́млемый"
forms["pres_pasv_part2"] = prefix .. "внима́емый"
forms["past_adv_part"] = prefix .. "внима́вши"; forms["past_adv_part_short"] = prefix .. "внима́в"
forms["pres_actv_part"] = prefix .. "вне́млющий"
forms["pres_actv_part2"] = prefix .. "внима́ющий"
forms["pres_adv_part"] = prefix .. "вне́мля́"
forms["pres_adv_part2"] = prefix .. "внима́я"
forms["impr_sg"] = prefix .. "вне́мли́"
forms["impr_pl"] = prefix .. "вне́мли́те"
forms["impr_sg2"] = prefix .. "внима́й"
forms["impr_pl2"] = 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["pres_futr_1sg2"] = prefix .. "внима́ю"
forms["pres_futr_2sg2"] = prefix .. "внима́ешь"
forms["pres_futr_3sg2"] = prefix .. "внима́ет"
forms["pres_futr_1pl2"] = prefix .. "внима́ем"
forms["pres_futr_2pl2"] = prefix .. "внима́ете"
forms["pres_futr_3pl2"] = 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 the reflexive verb обязаться
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_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"] = prefix .. "обя́зываемый"
forms["pres_pasv_part2"] = prefix .. "обязу́емый"
forms["past_adv_part"] = prefix .. "обя́зывавши"; forms["past_adv_part_short"] = prefix .. "обя́зывав"
forms["pres_actv_part"] = prefix .. "обя́зывающий"
forms["pres_actv_part2"] = prefix .. "обязу́ющий"
forms["pres_adv_part"] = prefix .. "обя́зывая"
forms["pres_adv_part2"] = prefix .. "обязу́я"
forms["impr_sg"] = prefix .. "обя́зывай"
forms["impr_sg2"] = prefix .. "обязу́й"
forms["impr_pl"] = prefix .. "обя́зывайте"
forms["impr_pl2"] = 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["pres_futr_1sg2"] = prefix .. "обязу́ю"
forms["pres_futr_2sg2"] = prefix .. "обязу́ешь"
forms["pres_futr_3sg2"] = prefix .. "обязу́ет"
forms["pres_futr_1pl2"] = prefix .. "обязу́ем"
forms["pres_futr_2pl2"] = prefix .. "обязу́ете"
forms["pres_futr_3pl2"] = prefix .. "обязу́ют"
forms["past_m"] = prefix .. "обя́зывал"
forms["past_f"] = prefix .. "обя́зывала"
forms["past_n"] = prefix .. "обя́зывало"
forms["past_pl"] = prefix .. "обя́зывали"
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, shch)
-- shch - iotatate final т as щ, not ч
-- iotate the stem
local stem_noa = com.make_unstressed(stem)
-- iotate the stem
local iotated_stem = ""
if not shch then
iotated_stem = com.iotation(stem)
else
iotated_stem = com.iotation(stem, shch)
end
local iotated_stem_noa = com.make_unstressed(iotated_stem)
-- Verbs ending in a hushing consonant do not get j-vowels in the endings.
if mw.ustring.find(iotated_stem, "[шщжч]$") or no_iotation 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, "[шщжч]$") or no_iotation then
forms["pres_futr_3pl"] = iotated_stem .. "ут"
else
forms["pres_futr_3pl"] = iotated_stem .. "ют"
end
forms["pres_futr_2sg"] = iotated_stem .. "ешь"
forms["pres_futr_3sg"] = iotated_stem .. "ет"
forms["pres_futr_1pl"] = iotated_stem .. "ем"
forms["pres_futr_2pl"] = iotated_stem .. "ете"
end
-- Present forms with -i-.
function present_i_a(forms, stem, shch)
-- shch - iotatate final т as щ, not ч
-- iotate the stem
local iotated_stem = com.iotation(stem, shch)
-- Verbs ending in a hushing consonant do not get j-vowels in the endings.
if mw.ustring.find(iotated_stem, "[шщжч]$") then
forms["pres_futr_1sg"] = iotated_stem .. "у"
else
forms["pres_futr_1sg"] = iotated_stem .. "ю"
end
if mw.ustring.find(stem, "[шщжч]$") then
forms["pres_futr_3pl"] = stem .. "ат"
else
forms["pres_futr_3pl"] = stem .. "ят"
end
forms["pres_futr_2sg"] = stem .. "ишь"
forms["pres_futr_3sg"] = stem .. "ит"
forms["pres_futr_1pl"] = stem .. "им"
forms["pres_futr_2pl"] = stem .. "ите"
end
function present_i_b(forms, stem, no_1sg_futr, shch)
-- parameter no_1sg_futr - no 1st person singular future if no_1sg_futr = 1
if not no_1sg_futr then
no_1sg_futr = 0
end
-- parameter shch - iotatate final т as щ, not ч
if not shch then
shch = ""
end
-- iotate the stem
local iotated_stem = com.iotation(stem, shch)
-- Make 1st person future singular blank if no_1sg_futr = 1
if no_1sg_futr == 1 then
forms["pres_futr_1sg"] = ""
-- Verbs ending in a hushing consonant do not get j-vowels in the endings.
elseif mw.ustring.find(iotated_stem, "[шщжч]$") then
forms["pres_futr_1sg"] = iotated_stem .. "у́"
else
forms["pres_futr_1sg"] = iotated_stem .. "ю́"
end
if mw.ustring.find(stem, "[шщжч]$") then
forms["pres_futr_3pl"] = stem .. "а́т"
else
forms["pres_futr_3pl"] = stem .. "я́т"
end
forms["pres_futr_2sg"] = stem .. "и́шь"
forms["pres_futr_3sg"] = stem .. "и́т"
forms["pres_futr_1pl"] = stem .. "и́м"
forms["pres_futr_2pl"] = stem .. "и́те"
end
function present_i_c(forms, stem, shch)
-- shch - iotatate final т as щ, not ч
local stem_noa = com.make_unstressed(stem)
-- iotate the stem
local iotated_stem = com.iotation(stem_noa, shch)
-- Verbs ending in a hushing consonant do not get j-vowels in the endings.
if mw.ustring.find(iotated_stem, "[шщжч]$") then
forms["pres_futr_1sg"] = iotated_stem .. "у́"
else
forms["pres_futr_1sg"] = iotated_stem .. "ю́"
end
if mw.ustring.find(stem, "[шщжч]$") then
forms["pres_futr_3pl"] = stem .. "ат"
else
forms["pres_futr_3pl"] = stem .. "ят"
end
if mw.ustring.find(stem, "[шщжч]$") then
forms["pres_futr_3pl"] = stem .. "ат"
else
forms["pres_futr_3pl"] = stem .. "ят"
end
forms["pres_futr_2sg"] = stem .. "ишь"
forms["pres_futr_3sg"] = stem .. "ит"
forms["pres_futr_1pl"] = stem .. "им"
forms["pres_futr_2pl"] = stem .. "ите"
end
-- add alternative form stressed on the reflexive particle
function make_reflexive_alt(forms)
for key, form in pairs(forms) do
if form ~= "" then
-- if a form doesn't contain a stress, add a stressed particle "ся́"
if not mw.ustring.find(form, "[́]") then
-- only applies to past masculine forms
if key == "past_m" or key == "past_m2" or key == "past_m3" then
forms[key] = form .. "ся́"
end
end
end
end
end
-- Add the reflexive particle to all verb forms
function make_reflexive(forms)
for key, form in pairs(forms) do
-- The particle is "сь" after a vowel, "ся" after a consonant
-- append "ся" if "ся́" was not attached already
if form ~= "" and not mw.ustring.find(form, "ся́$") then
if mw.ustring.find(form, "[аэыоуяеиёю́]$") then
forms[key] = form .. "сь"
else
forms[key] = form .. "ся"
end
end
end
-- This form does not exist for reflexive verbs.
forms["past_adv_part_short"] = ""
end
-- Make the table
function make_table(forms, title, perf, intr, impers)
local title = "Conjugation of <span lang=\"ru\" class=\"Cyrl\">''" .. forms["infinitive"] .. "''</span>" .. (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 = lang:transliterate(forms["infinitive"])
-- Add transliterations to all forms
for key, form in pairs(forms) do
-- check for empty strings and nil's
if form ~= "" and form then
forms[key] = "<span lang=\"ru\" class=\"Cyrl\">[[" .. com.remove_accents(form) .. "#Russian|" .. form .. "]]</span><br/><span style=\"color: #888\">" .. lang:transliterate(form) .. "</span>"
else
forms[key] = "—"
end
end
if not perf then
forms["futr_1sg"] = "<span lang=\"ru\" class=\"Cyrl\">[[буду#Russian|бу́ду]] " .. inf .. "</span><br/><span style=\"color: #888\">búdu " .. inf_tr .. "</span>"
forms["futr_2sg"] = "<span lang=\"ru\" class=\"Cyrl\">[[будешь#Russian|бу́дешь]] " .. inf .. "</span><br/><span style=\"color: #888\">búdešʹ " .. inf_tr .. "</span>"
forms["futr_3sg"] = "<span lang=\"ru\" class=\"Cyrl\">[[будет#Russian|бу́дет]] " .. inf .. "</span><br/><span style=\"color: #888\">búdet " .. inf_tr .. "</span>"
forms["futr_1pl"] = "<span lang=\"ru\" class=\"Cyrl\">[[будем#Russian|бу́дем]] " .. inf .. "</span><br/><span style=\"color: #888\">búdem " .. inf_tr .. "</span>"
forms["futr_2pl"] = "<span lang=\"ru\" class=\"Cyrl\">[[будете#Russian|бу́дете]] " .. inf .. "</span><br/><span style=\"color: #888\">búdete " .. inf_tr .. "</span>"
forms["futr_3pl"] = "<span lang=\"ru\" class=\"Cyrl\">[[будут#Russian|бу́дут]] " .. inf .. "</span><br/><span style=\"color: #888\">búdut " .. inf_tr .. "</span>"
end
-- only for "бы́ть" the future forms are бу́ду, бу́дешь, etc.
if inf == "бы́ть" then
forms["futr_1sg"] = "<span lang=\"ru\" class=\"Cyrl\">[[буду#Russian|бу́ду]] " .. "</span><br/><span style=\"color: #888\">búdu " .. "</span>"
forms["futr_2sg"] = "<span lang=\"ru\" class=\"Cyrl\">[[будешь#Russian|бу́дешь]] " .. "</span><br/><span style=\"color: #888\">búdešʹ " .. "</span>"
forms["futr_3sg"] = "<span lang=\"ru\" class=\"Cyrl\">[[будет#Russian|бу́дет]] " .. "</span><br/><span style=\"color: #888\">búdet " .. "</span>"
forms["futr_1pl"] = "<span lang=\"ru\" class=\"Cyrl\">[[будем#Russian|бу́дем]] " .. "</span><br/><span style=\"color: #888\">búdem " .. "</span>"
forms["futr_2pl"] = "<span lang=\"ru\" class=\"Cyrl\">[[будете#Russian|бу́дете]] " .. "</span><br/><span style=\"color: #888\">búdete " .. "</span>"
forms["futr_3pl"] = "<span lang=\"ru\" class=\"Cyrl\">[[будут#Russian|бу́дут]] " .. "</span><br/><span style=\"color: #888\">búdut " .. "</span>"
end
if impers then
forms["futr_1sg"] = ""
forms["futr_2sg"] = ""
forms["futr_1pl"] = ""
forms["futr_2pl"] = ""
forms["futr_3pl"] = ""
--alternatives
forms["futr_1sg2"] = nil
forms["futr_2sg2"] = nil
forms["futr_1pl2"] = nil
forms["futr_2pl2"] = nil
forms["futr_3pl2"] = nil
end
if forms["past_adv_part_short"] ~= "—" then
forms["past_adv_part"] = forms["past_adv_part_short"] .. ",<br/>" .. forms["past_adv_part"]
end
-- alternative forms
local alt_impr_sg = forms["impr_sg"]
if forms["impr_sg2"] then alt_impr_sg = forms["impr_sg"] .. ",<br/>" .. forms["impr_sg2"] end
local alt_impr_pl = forms["impr_pl"]
if forms["impr_pl2"] then alt_impr_pl = forms["impr_pl"] .. ",<br/>" .. forms["impr_pl2"] end
-- со́здал/созд́ал, п́ередал/переда́л, ́отдал/отд́ал
local alt_past_m = forms["past_m"]
if forms["past_m2"] then alt_past_m = forms["past_m"] .. ",<br/>" .. forms["past_m2"] end
--for verbs with three past masculine sg forms: за́нялся, заня́лся, занялс́я (заня́ться)
if forms["past_m3"] then alt_past_m = alt_past_m .. ",<br/>" .. forms["past_m3"] end
-- short forms in 3a (исчез, сох, etc.)
if forms["past_m_short"] then alt_past_m = forms["past_m_short"] .. ",<br/>" .. alt_past_m end
local alt_past_f = forms["past_f"]
if forms["past_f2"] then alt_past_f = forms["past_f"] .. ",<br/>" .. forms["past_f2"] end
-- short forms in 3a (исчезла, сохла, etc.)
if forms["past_f_short"] then alt_past_f = forms["past_f_short"] .. ",<br/>" .. alt_past_f end
-- да́ло, дал́о; вз́яло, взяло́
local alt_past_n = forms["past_n"]
if forms["past_n2"] then alt_past_n = forms["past_n"] .. ",<br/>" .. forms["past_n2"] end
-- short forms in 3a (исчезло, сохло, etc.)
if forms["past_n_short"] then alt_past_n = forms["past_n_short"] .. ",<br/>" .. alt_past_n end
-- разобрали́сь (разобрали́)
local alt_past_pl = forms["past_pl"]
if forms["past_pl2"] then alt_past_pl = forms["past_pl"] .. ",<br/>" .. forms["past_pl2"] end
-- short forms in 3a (исчезли, сохли, etc.)
if forms["past_pl_short"] then alt_past_pl = forms["past_pl_short"] .. ",<br/>" .. alt_past_pl end
--
-- тереть: тере́вши, тёрши, short: тере́в
-- умереть: умере́вши, у́мерши, short: умере́в
local alt_past_adv_part = forms["past_adv_part"]
if forms["past_adv_part2"] then alt_past_adv_part = forms["past_adv_part"] .. ",<br/>" .. forms["past_adv_part2"] end
-- сыпля, сыпя
local alt_pres_adv_part = forms["pres_adv_part"]
if forms["pres_adv_part2"] and not perf then alt_pres_adv_part = forms["pres_adv_part"] .. ",<br/>" .. forms["pres_adv_part2"] end
local alt_pres_1sg = forms["pres_1sg"]
if forms["pres_1sg2"] and not perf then alt_pres_1sg = forms["pres_1sg"] .. ",<br/>" .. forms["pres_1sg2"] end
-- сыплешь, сыпешь
local alt_pres_2sg = forms["pres_2sg"]
if forms["pres_2sg2"] and not perf then alt_pres_2sg = forms["pres_2sg"] .. ",<br/>" .. forms["pres_2sg2"] end
-- сыплет, сыпет
local alt_pres_3sg = forms["pres_3sg"]
if forms["pres_3sg2"] and not perf then alt_pres_3sg = forms["pres_3sg"] .. ",<br/>" .. forms["pres_3sg2"] end
-- сыплем, сыпем
local alt_pres_1pl = forms["pres_1pl"]
if forms["pres_1pl2"] and not perf then alt_pres_1pl = forms["pres_1pl"] .. ",<br/>" .. forms["pres_1pl2"] end
-- сыплете, сыпете
local alt_pres_2pl = forms["pres_2pl"]
if forms["pres_2pl2"] and not perf then alt_pres_2pl = forms["pres_2pl"] .. ",<br/>" .. forms["pres_2pl2"] end
-- сыплют, сыпют
local alt_pres_3pl = forms["pres_3pl"]
if forms["pres_3pl2"] and not perf then alt_pres_3pl = forms["pres_3pl"] .. ",<br/>" .. forms["pres_3pl2"] end
local alt_futr_1sg = forms["futr_1sg"]
if forms["futr_1sg2"] then alt_futr_1sg = forms["futr_1sg"] .. ",<br/>" .. forms["futr_1sg2"] end
-- насыплешь, насыпешь
local alt_futr_2sg = forms["futr_2sg"]
if forms["futr_2sg2"] then alt_futr_2sg = forms["futr_2sg"] .. ",<br/>" .. forms["futr_2sg2"] end
-- насыплет, насыпет
local alt_futr_3sg = forms["futr_3sg"]
if forms["futr_3sg2"] then alt_futr_3sg = forms["futr_3sg"] .. ",<br/>" .. forms["futr_3sg2"] end
-- насыплем, насыпем
local alt_futr_1pl = forms["futr_1pl"]
if forms["futr_1pl2"] then alt_futr_1pl = forms["futr_1pl"] .. ",<br/>" .. forms["futr_1pl2"] end
-- насыплете, насыпете
local alt_futr_2pl = forms["futr_2pl"]
if forms["futr_2pl2"] then alt_futr_2pl = forms["futr_2pl"] .. ",<br/>" .. forms["futr_2pl2"] end
-- насыплют, насыпют
local alt_futr_3pl = forms["futr_3pl"]
if forms["futr_3pl2"] then alt_futr_3pl = forms["futr_3pl"] .. ",<br/>" .. forms["futr_3pl2"] end
local alt_pres_actv_part = forms["pres_actv_part"]
if forms["pres_actv_part2"] then alt_pres_actv_part = forms["pres_actv_part"] .. ",<br/>" .. forms["pres_actv_part2"] end
local alt_past_actv_part = forms["past_actv_part"]
if forms["past_actv_part2"] then alt_past_actv_part = forms["past_actv_part"] .. ",<br/>" .. forms["past_actv_part2"] end
local alt_pres_pasv_part = forms["pres_pasv_part"]
if forms["pres_pasv_part2"] then alt_pres_pasv_part = forms["pres_pasv_part"] .. ",<br/>" .. forms["pres_pasv_part2"] end
local alt_past_pasv_part = forms["past_pasv_part"]
if forms["past_pasv_part2"] then alt_past_pasv_part = forms["past_pasv_part"] .. ",<br/>" .. forms["past_pasv_part2"] 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 inflection-table"
|+ Note 1: for declension of participles, see their entries. Adverbial participles are indeclinable.
|- class="rowgroup"
! colspan="3" | ]=] .. (perf and [=[[[совершенный вид|perfective aspect]]]=] or [=[[[несовершенный вид|imperfective aspect]]]=]) .. [=[
|-
! [[неопределённая форма|infinitive]]
| colspan="2" | ]=] .. forms["infinitive"] .. [=[
|- class="rowgroup"
! style="width:15em" | [[причастие|participles]]
! [[настоящее время|present tense]]
! [[прошедшее время|past tense]]
|-
! [[действительный залог|active]]
| ]=] .. alt_pres_actv_part .. [=[ || ]=] .. alt_past_actv_part .. [=[
|-
! [[страдательный залог|passive]]
| ]=] .. alt_pres_pasv_part .. [=[ || ]=] .. alt_past_pasv_part .. [=[
|-
! [[деепричастие|adverbial]]
| ]=] .. alt_pres_adv_part .. [=[ || ]=] .. alt_past_adv_part .. [=[
|- class="rowgroup"
!
! [[настоящее время|present tense]]
! [[будущее время|future tense]]
|-
! [[первое лицо|1st]] [[единственное число|singular]] (<span lang="ru" class="Cyrl">я</span>)
| ]=] .. alt_pres_1sg .. [=[ || ]=] .. alt_futr_1sg .. [=[
|-
! [[второе лицо|2nd]] [[единственное число|singular]] (<span lang="ru" class="Cyrl">ты</span>)
| ]=] .. alt_pres_2sg .. [=[ || ]=] .. alt_futr_2sg .. [=[
|-
! [[третье лицо|3rd]] [[единственное число|singular]] (<span lang="ru" class="Cyrl">он/она́/оно́</span>)
| ]=] .. alt_pres_3sg .. [=[ || ]=] .. alt_futr_3sg .. [=[
|-
! [[первое лицо|1st]] [[множественное число|plural]] (<span lang="ru" class="Cyrl">мы</span>)
| ]=] .. alt_pres_1pl .. [=[ || ]=] .. alt_futr_1pl .. [=[
|-
! [[второе лицо|2nd]] [[множественное число|plural]] (<span lang="ru" class="Cyrl">вы</span>)
| ]=] .. alt_pres_2pl .. [=[ || ]=] .. alt_futr_2pl .. [=[
|-
! [[третье лицо|3rd]] [[множественное число|plural]] (<span lang="ru" class="Cyrl">они́</span>)
| ]=] .. alt_pres_3pl .. [=[ || ]=] .. alt_futr_3pl .. [=[
|- class="rowgroup"
! [[повелительное наклонение|imperative]]
! [[единственное число|singular]]
! [[множественное число|plural]]
|-
!
| ]=] .. alt_impr_sg .. [=[ || ]=] .. alt_impr_pl .. [=[
|- class="rowgroup"
! [[прошедшее время|past tense]]
! [[единственное число|singular]]
! [[множественное число|plural]]<br/>(<span lang="ru" class="Cyrl">мы/вы/они́</span>)
|-
! [[мужской род|masculine]] (<span lang="ru" class="Cyrl">я/ты/он</span>)
| ]=] .. alt_past_m .. [=[ || rowspan="3" | ]=] .. alt_past_pl .. [=[
|-
! [[женский род|feminine]] (<span lang="ru" class="Cyrl">я/ты/она́</span>)
| ]=] .. alt_past_f .. [=[
|-
! style="background-color:#ffffe0; text-align:left;" | [[средний род|neuter]] (<span lang="ru" class="Cyrl">оно́</span>)
| ]=] .. alt_past_n .. [=[
|}
</div>
</div>]=]
end
return export