Skip to content

Commit 0eed2e0

Browse files
authored
🤖 Merge PR DefinitelyTyped#73021 [russian-nouns-js] Updated to v2.3.0 by @georgy7
1 parent b8294fd commit 0eed2e0

File tree

8 files changed

+196
-106
lines changed

8 files changed

+196
-106
lines changed

types/russian-nouns-js/index.d.ts

Lines changed: 19 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,46 @@
11
/* tslint:disable:no-redundant-jsdoc-2 */
22

3-
import { Case as CaseEnum } from "./src/Case";
3+
import { Case } from "./src/Case";
44
import Engine from "./src/Engine";
5-
import { Gender as GenderEnum } from "./src/Gender";
5+
import { Gender } from "./src/Gender";
66
import { Lemma, LemmaOptions } from "./src/Lemma";
7+
import { LocativeForm, LocativeFormAttribute } from "./src/LocativeForm";
78

89
export as namespace RussianNounsJS;
910

10-
/**
11-
* Case
12-
*/
13-
export const Case: { [key in keyof typeof CaseEnum]: typeof CaseEnum[key] };
14-
15-
/**
16-
* Gender
17-
*/
18-
export const Gender: { [key in keyof typeof GenderEnum]: typeof GenderEnum[key] };
11+
export { Case, Gender };
1912

2013
/**
21-
* Cases
14+
* Падежи в обычном порядке.
2215
*/
23-
export const CASES: Array<typeof CaseEnum[keyof typeof CaseEnum]>;
16+
export const CASES: [Case];
2417

2518
/**
2619
* Интерфейс с именованными параметрами для создания лемм.
2720
* Если параметр — уже лемма, вернет тот же объект, а не копию.
2821
*
29-
* Леммы, которые в коде используются много раз, следует
30-
* конструировать через эту функцию, иначе они будут
31-
* неявно конструироваться на каждый вызов любой функции
32-
* или метода в этой библиотеке.
33-
*
3422
* @param {RussianNouns.Lemma|Object} o
35-
* @throws {RussianNouns.LemmaException} Ошибки из конструктора леммы.
23+
* @throws {Error} Ошибки из конструктора леммы.
3624
* @returns {RussianNouns.Lemma} Иммутабельный объект.
3725
*/
38-
export function createLemma(o: LemmaOptions): Lemma;
26+
export function createLemma(o: Lemma | LemmaOptions): Lemma;
3927

4028
/**
41-
* Склонение существительного.
42-
*
43-
* Возможные значения:
44-
* + -1 — несклоняемые, в основном заимствованные слова;
45-
* + 0 — разносклоняемые "путь" и "дитя";
46-
* + 1 — мужской и средний род без окончания;
47-
* + 2 — слова на "а", "я" (м., ж. и общий род);
48-
* + 3 — жен. род без окончания; слова, оканчивающиеся на "мя".
49-
*
50-
* Понятие "склонение" сложно применить к словам pluralia tantum,
51-
* поэтому этот метод возвращает для них undefined.
29+
* Безопасное создание леммы с минимальными накладными расходами.
5230
*
53-
* @param {RussianNouns.Lemma|Object} lemma
54-
* @returns {number|undefined}
31+
* @param {Object} options
32+
* @returns {RussianNouns.Lemma|null}
5533
*/
56-
export function getDeclension(lemma: Lemma | object): number | undefined;
34+
export function createLemmaOrNull(options: LemmaOptions): Lemma | null;
5735

5836
/**
59-
* «Названия „первое склонение“ и „второе склонение“ в школьной практике и вузовском преподавании
60-
* нередко закрепляются за разными разрядами слов. В школьных учебниках первым склонением называют изменение
61-
* слов с окончанием -а (вода), во многих вузовских пособиях и академических грамматиках — слов мужского
62-
* рода (стол) и среднего рода (окно)».
63-
*
64-
* Современный русский язык. Морфология — Камынина А.А., 1999, стр. 67
65-
*
66-
* Почти везде указывают это число. Например, в Викисловаре.
67-
* Иногда в школьных учебниках 10 слов на «-мя» относят к разносклоняемым.
68-
* Здесь это третье склонение.
69-
*
70-
* Понятие "склонение" сложно применить к словам pluralia tantum,
71-
* поэтому этот метод возвращает для них undefined.
72-
*
73-
* @param lemma
74-
* @returns {number} «Школьный» вариант склонения:
75-
* «вода» — 1; «стол», «окно» — 2,
76-
* разносклоняемые — 0; несклоняемые — минус единица.
37+
* @deprecated since version 2.3.0
38+
*/
39+
export function getDeclension(lemma: Lemma | object): number;
40+
41+
/**
42+
* @deprecated since version 2.3.0
7743
*/
7844
export function getSchoolDeclension(lemma: Lemma): number;
7945

80-
export { Engine };
46+
export { Engine, Lemma, LocativeForm, LocativeFormAttribute };

types/russian-nouns-js/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"private": true,
33
"name": "@types/russian-nouns-js",
4-
"version": "1.2.9999",
4+
"version": "2.3.9999",
55
"projects": [
66
"https://github.com/georgy7/RussianNounsJS"
77
],

types/russian-nouns-js/russian-nouns-js-tests.ts

Lines changed: 0 additions & 3 deletions
This file was deleted.

types/russian-nouns-js/src/Engine.d.ts

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import { Case } from "./Case";
44
import { Lemma, LemmaOptions } from "./Lemma";
5+
import { LocativeForm } from "./LocativeForm";
56
import StressDictionary from "./StressDictionary";
67

78
export default class Engine {
@@ -13,20 +14,24 @@ export default class Engine {
1314
constructor();
1415

1516
/**
16-
* @param {RussianNouns.Lemma|Object} lemma Слово в именительном падеже с метаинформацией.
17-
* @param {string} grammaticalCase Падеж.
18-
* @param {string} pluralForm Форма во множественном числе.
19-
* Если указана, результат будет тоже во множественном.
20-
* У pluralia tantum игнорируется.
21-
* @returns {Array} Список, т.к. бывают вторые родительный, винительный падежи. Существительные
22-
* женского рода в творительном могут иметь как окончания -ей -ой, так и -ею -ою.
17+
* Просклонять лемму в указанном падеже.
18+
* Метод возвращает список, т.к. бывают вторые родительный, винительный падежи,
19+
* и просто в некоторых падежах слова могут иметь по два окончания (например, -ой, -ою).
2320
* Второй предложный падеж (местный падеж, локатив) не включен в предложный.
2421
*/
25-
decline(lemma: LemmaOptions | Lemma, grammaticalCase?: Case[keyof Case], pluralForm?: string): [string];
22+
decline(lemma: LemmaOptions | Lemma, grammaticalCase: Case, pluralForm?: string): [string];
2623

2724
/**
28-
* @param {RussianNouns.Lemma|Object} lemma
29-
* @returns {Array}
25+
* Получить формы множественного числа в именительном падеже.
3026
*/
3127
pluralize(lemma: LemmaOptions | Lemma): [string];
28+
29+
/**
30+
* Возвращает формы слов с условиями их использования (там смешаны
31+
* семантические классы и некоторые синтаксические обстоятельства).
32+
*
33+
* Экспериментальная возможность.
34+
* Заточено под ед. число.
35+
*/
36+
getLocativeForms(lemma: LemmaOptions | Lemma): [LocativeForm];
3237
}

types/russian-nouns-js/src/Lemma.d.ts

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,61 @@ import { Gender } from "./Gender";
44

55
export interface LemmaOptions {
66
text: string;
7-
gender?: Gender[keyof Gender] | undefined;
8-
indeclinable?: boolean | undefined;
7+
98
pluraleTantum?: boolean | undefined;
9+
gender?: Gender | undefined;
10+
indeclinable?: boolean | undefined;
1011
animate?: boolean | undefined;
12+
13+
surname?: boolean | undefined;
14+
name?: boolean | undefined;
15+
transport?: boolean | undefined;
1116
}
1217

1318
export class Lemma {
1419
constructor(o: LemmaOptions | Lemma);
1520

21+
/**
22+
* @deprecated since version 2.0.0
23+
*/
1624
newText(f: (o: string) => string): Lemma;
25+
26+
/**
27+
* @deprecated since version 2.0.0
28+
*/
1729
newGender(f: (o: string) => string): Lemma;
30+
1831
equals(o: Lemma): boolean;
19-
fuzzyEquals(o: Lemma): boolean;
2032
text(): string;
2133
lower(): string;
34+
2235
isPluraleTantum(): boolean;
23-
/**
24-
* @deprecated Используйте isPluraleTantum(), т.к. речь об одной лемме, а pluralia — во мн.ч. на латыни.
25-
* @returns {boolean}
26-
*/
27-
isPluraliaTantum(): boolean;
28-
getGender(): string;
36+
getGender(): Gender | undefined;
2937
isIndeclinable(): boolean;
3038
isAnimate(): boolean;
39+
3140
isASurname(): boolean;
32-
isASurname(): boolean;
41+
isAName(): boolean;
3342
isATransport(): boolean;
43+
44+
/**
45+
* Склонение существительного.
46+
*
47+
* Возможные значения:
48+
* -1 (несклоняемые, в основном заимствованные слова);
49+
* 0 (разносклоняемые "путь" и "дитя");
50+
* 1 (мужской и средний род без окончания);
51+
* 2 (слова на "а", "я" — м., ж. и общий род);
52+
* 3 (жен. род без окончания; слова, оканчивающиеся на "мя").
53+
*
54+
* Понятие «склонение» сложно применить к словам plurale tantum,
55+
* поэтому этот метод возвращает для них -2 (вместо undefined).
56+
*/
57+
getDeclension(): number;
58+
59+
/**
60+
* Возвращает «школьный» вариант склонения:
61+
* «вода» — первое склонение; «стол», «окно» — второе склонение.
62+
*/
63+
getSchoolDeclension(): number;
3464
}
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
/* tslint:disable:no-redundant-jsdoc-2 */
2+
3+
/**
4+
* Форма слова с условиями её использования.
5+
* Ключом является комбинация предлога и атрибутов, т.е. объект должен игнорироваться,
6+
* если что-либо из этого набора не соответствует ситуации.
7+
*
8+
* Результат метода getLocativeForms движка может содержать повторяющиеся формы слова
9+
* с разными комбинациями условий в виде отдельных объектов.
10+
*/
11+
export class LocativeForm {
12+
constructor(preposition: string, word: string, attributes: number);
13+
14+
/**
15+
* Предлог (часть условия применения).
16+
* Правило должно быть отброшено, если предлог побуквенно не совпадает
17+
* ("в" и "во" — разные предлоги).
18+
*/
19+
preposition: string;
20+
21+
/**
22+
* Атрибуты в виде битовых флагов (часть условия применения).
23+
* Все выставленные в единицу флаги должны соответствовать.
24+
* Например, если мы используем слово "край" с прилагательным,
25+
* правило, где бит атрибута WITHOUT_ADJECTIVE установлен в единицу, должно быть отброшено,
26+
* даже если другие атрибуты соответствуют ситуации.
27+
*/
28+
attributes: number;
29+
30+
/**
31+
* Форма слова.
32+
*/
33+
word: string;
34+
}
35+
36+
export enum LocativeFormAttribute {
37+
/**
38+
* Вместилище, сосуд.
39+
*/
40+
CONTAINER = 1,
41+
42+
/**
43+
* Пространство.
44+
*/
45+
LOCATION = 2,
46+
47+
/**
48+
* Конфигурация объектов, образующая устойчивую структуру.
49+
*/
50+
STRUCTURE = 4,
51+
52+
/**
53+
* Поверхность.
54+
*/
55+
SURFACE = 8,
56+
57+
/**
58+
* Метафорический путь. Луч времени, на (или в) котором лежат события.
59+
*/
60+
WAY = 16,
61+
62+
/**
63+
* Объект с функциональной (не обязательно плоской) поверхностью.
64+
*/
65+
OBJECT_WITH_FUNCTIONAL_SURFACE = 32,
66+
67+
/**
68+
* Вещество (обволакивающее или покрывающее).
69+
*/
70+
SUBSTANCE = 64,
71+
72+
/**
73+
* Материал, средство изготовления, приготовления (еды), ремонта.
74+
*/
75+
RESOURCE = 128,
76+
77+
/**
78+
* Состояние, свойство, положение дел.
79+
*/
80+
CONDITION = 256,
81+
82+
/**
83+
* Испытываемое воздействие (стихии или внимания/отношения человека).
84+
*/
85+
EXPOSURE = 512,
86+
87+
/**
88+
* Перемещение или кратковременное пространственное положение.
89+
*/
90+
MOTION = 1024,
91+
92+
/**
93+
* Мероприятие.
94+
*/
95+
EVENT = 2048,
96+
97+
/**
98+
* Используется только в присутствии прилагательного.
99+
*/
100+
WITH_ADJECTIVE = 4096,
101+
102+
/**
103+
* Не используется в присутствии прилагательного.
104+
*/
105+
WITHOUT_ADJECTIVE = 8192,
106+
107+
/**
108+
* Я еще не до конца понял этот аспект.
109+
* Этот флаг наверняка исчезнет в будущих релизах.
110+
* @deprecated
111+
*/
112+
RELIGIOUS = 16384,
113+
}
Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,27 @@
11
/* tslint:disable:no-redundant-jsdoc-2 */
22

3+
import { Case } from "./Case";
34
import { Lemma, LemmaOptions } from "./Lemma";
45

56
export default class StressDictionary {
6-
data: {};
7-
87
constructor();
98

109
/**
11-
* @param {RussianNouns.Lemma|Object} lemma
12-
* @param {string} settings Строка настроек в формате 1234567-123456.
10+
* Строка задаётся в формате 1234567-123456.
1311
* До дефиса — единственное число, после дефиса — множественное.
14-
* Номер символа — номер падежа в {@link RussianNouns.CASES}.
12+
* Номер символа — номер падежа в RussianNouns.CASES.
1513
* Возможные значения каждого символа:
1614
* S — ударение только на основу;
1715
* s — чаще на основу;
1816
* b — оба варианта употребляются одинаково часто;
1917
* e — чаще на окончание;
2018
* E — только на окончание.
21-
* @throws {RussianNouns.StressDictionaryException}
19+
*
20+
* @throws {Error} Если некорректный формат строки.
2221
*/
2322
put(lemma: LemmaOptions | Lemma, settings: string): void;
2423

25-
/**
26-
* @param {RussianNouns.Lemma|Object} lemma
27-
* @param {boolean} fuzzy Если не найдено, игнорировать букву Ё и второстепенные поля у леммы.
28-
* @returns {*} Строка настроек или undefined.
29-
*/
30-
get(lemma: LemmaOptions | Lemma, fuzzy: boolean): string | undefined;
31-
32-
remove(lemma: LemmaOptions | Lemma): void;
24+
hasStressedEndingSingular(lemma: Lemma, grCase: Case): boolean[];
3325

34-
hasStressedEndingSingular(lemma: LemmaOptions | Lemma, grCase: string): boolean[];
35-
36-
hasStressedEndingPlural(lemma: LemmaOptions | Lemma, grCase: string): boolean[];
37-
38-
/**
39-
* Благодаря этому методу, словарь можно использовать для других целей.
40-
* Например, если там есть слово, можно посмотреть его род и признаки.
41-
*
42-
* @param word Слово, по которому производится поиск.
43-
* Буква Ё и регистр игнорируются.
44-
* @returns {Array} Список лемм.
45-
*/
46-
find(word: string): string[];
26+
hasStressedEndingPlural(lemma: Lemma, grCase: Case): boolean[];
4727
}

0 commit comments

Comments
 (0)