import { L as LanguagePack } from '../pack-u-LoPClV.cjs'; /** * Russian noun declension. * * Russian endings come in pairs — `-а`/`-я`, `-у`/`-ю`, `-ом`/`-ем`, * `-ы`/`-и` — and which of each pair a noun takes is decided once, by * whether its stem is hard or soft. That single choice runs through the * whole paradigm, so the tables below are written once and read twice. * * On top of that sit two spelling rules that have nothing to do with * grammar and everything to do with the alphabet: `ы` may not be written * after `г к х ж ч ш щ`, and `о` may not be written after a husher unless * it is stressed. The first is mechanical. The second depends on stress, * which the spelling does not record — so it is one of the things the * generated lexicon has to carry. */ /** The cases Russian marks. */ type RuCase = "nominative" | "genitive" | "dative" | "accusative" | "instrumental" | "prepositional"; /** The declension patterns, named for the nominative singular. */ type RuClass = "masculine" | "feminine-a" | "feminine-soft" | "neuter"; /** What the lexicon can say about one noun. */ interface RuStemFlags { /** `-ь` is masculine as often as it is feminine, and only a word knows. */ class?: RuClass; /** The oblique stem, when a vowel drops: `отец` → `отц-`. */ stem?: string; /** The stem takes soft endings although its last letter looks hard. */ soft?: boolean; genSg?: string; datSg?: string; insSg?: string; prepSg?: string; nomPl?: string; genPl?: string; /** Animate: the accusative copies the genitive, in both numbers. */ animate?: boolean; /** Cells nothing shorter explains, keyed `case.number`. */ forms?: Readonly>; } /** Guess the declension class from the nominative singular. */ declare function guessClass(lemma: string): RuClass; /** Decline a Russian noun into one cell of its paradigm. */ declare function declineNoun(lemma: string, ruCase: RuCase, plural: boolean, flags?: RuStemFlags): string; /** * Russian adjective agreement. * * Adjectives are the regular half of Russian: every one of them takes the * same endings, and the only question is whether the stem is hard * (`красивый`) or soft (`синий`). The alphabet then intervenes twice, as it * does for nouns — no `ы` after `г к х ж ч ш щ`, no unstressed `о` after a * husher — which is why `русский` is `русские` and `хороший` is `хорошего`. */ /** The gender an adjective agrees with, derived from the noun's class. */ type RuGender = "masculine" | "feminine" | "neuter"; /** Build the agreeing form of an adjective. */ declare function agreeAdjective(word: string, gender: RuGender, ruCase: RuCase, plural: boolean, options?: { animate?: boolean; }): string; /** The Russian language pack. */ declare const ru: LanguagePack; export { agreeAdjective, declineNoun, guessClass, ru };