PageSourceSearch

https://feminizator.github.io/js/feminitives-rules.js

js feminizator.github.io collected 2026-10-03 09:11:21 UTC 18,793 bytes, 450 lines download raw bytes

1//
2// Copyright (C) 2016-2019, Maxim Lihachev, <[email protected]>
3//
4// This program is free software: you can redistribute it and/or modify it
5// under the terms of the GNU General Public License as published by the Free
6// Software Foundation, version 3.
7//
8// This program is distributed in the hope that it will be useful, but WITHOUT
9// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
11// more details.
12//
13// You should have received a copy of the GNU General Public License along with
14// this program. If not, see <https://www.gnu.org/licenses/>.
15//
16
17//------------------------------------------------------------------------------
18
19var FEM = {};
20
21//Слова для замены и исключения
22//Имеют высший приоритет и не обрабатываются остальными правилами
23FEM.words = {
24	'без'      : 'без',
25	'как'      : 'как',
26	'либо'     : 'либо',
27	'например' : 'например',
28	'них'      : 'них',
29	'под'      : 'под',
30
31	'два'      : 'две',
32
33	'весь'     : 'вся',
34	'всё'      : 'вся',
35
36	'чего'     : 'чегой',
37
38	'ее'       : 'е_е',
39	'её'       : 'е_ё',
40	'кто'      : 'котор_ая',
41	'каким'    : 'как_ой',
42	'муж.'     : 'жен.',
43	'муж'      : 'жена',
44	'то'       : 'т_а',
45	'того'     : 'т_у',
46	'тот'      : 'т_а',
47	'мужчина'  : 'женщи_на',
48	'мужчины'  : 'женщи_ны'
49};
50
51//Слова со специфичными определениями
52FEM.exceptions = {
53	'феминист' : [ ['профеминист', 'союзник'],
54			"Мифическое создание, якобы поддерживающее феминизм. В реальности не встречается."
55	],
56	'жена' : [ ['мужерабка', 'подстилка патриархата'],
57			"Женщина, прогнувшаяся под патриархат и получающая удовольствие от угнетения."
58	]
59};
60
61// Формат:
62//   '<префикс>+окончание1|окончание2|...|окончаниеN' : {
63//       ['<шаблон>', <сколько удалять символов на конце слова>]
64//   }
65//
66// Окончания отсортированы от наиболее специфичных к наиболее общим
67//
68FEM.endings = {
69	//Исключения, которые не нужно феминизировать
70	'бо' : [
71		['либо', 2]                    // -либо
72	],
73	'их' : [
74		['их', 2]                      // нескольких
75	],
76	'ых' : [
77		['ых', 2]                      // грубых
78	],
79	'ной' : [
80		['ной', 3]                     // платёжной
81	],
82	'ных' : [
83		['ных', 3]                     // засушенных
84	],
85	'тей' : [
86		['тей', 3]                     // обязанностей
87	],
88	'ть' : [
89		['[аеи]ть', 2]                 // глаголы в инфинитиве
90	],
91	'ёт' : [
92		['[её]т', 2]                   // глаголы в форме 3 л. ед.ч.
93	],
94	'ют' : [
95		['ают', 2]                     // глаголы в форме мн.ч.
96	],
97
98	// имена прилагательные
99	'ая' : [
100		['[дкнш]ое', 2],               // твёрдое, офицерское, полное, большое
101		['[дн]ый', 2],                 // твёрдый, полный
102		['[бвлмпт][оы][ей]', 2],       // новый, круглый, знакомый, глупый, принятый
103		//['[бвклмнтш]ое', 2],         // новое, сладкое, круглое, знакомое, полное, принятое, прошлое
104		['[шщ]ее', 2],                 // пешее, вещее
105		['[кнпщщ]ий', 2]               // сладкий, дольний, глупый, пеший, пещий
106	],
107
108	'яя' : [
109		['[нчщ]ий', 2],                 // верхний, ползучий, знающий
110		['[нчщ]ее', 2]                  // верхнее, ползучее, знающее
111	],
112
113	'аяся' : [
114		['ееся', 4],                    // являющееся
115		['ийся', 4]                     // занимающийся
116	],
117
118	//
119	// ----- ФОРМА РОДИТЕЛЬНОГО ПАДЕЖА (преимущественно) -----
120	//
121
122	// форма мн.ч.
123	'ок|есс|ин|иц' : [
124		['вий', 2],                     // действий
125		['лей', 2],                     // родителей
126		['ств', 0],                     // свойств
127		['тра', 0],                     // метра
128		['еров', 2]                     // размеров
129	],
130
131	// форма ед.ч.
132	'ч+ки|ессы|ини|ицы' : [
133		['века', 2]                     // человека
134	],
135
136	'ки|ессы|ини|ицы' : [
137		['[ае]за', 1],                  // газа
138		['[ай]на', 1],                  // капитана, бассейна
139		['[ас]та', 1],                  // заката, роста
140		['[её]ма', 1],                  // водоёма
141		['[коя][тдя]а', 1],             // отряда, объекта, города, живота
142		['[мн]ца', 2],                  // самца, солнца
143		['алла', 1],                    // металла
144		['дке', 2],                     // порядке
145		['е[жт]а', 1],                  // платежа, света
146		['зда', 1],                     // переезда
147		['ены', 1],                     // члены (организации)
148		['еста', 1],                    // теста
149		['и[дтщ]а', 1],                 // вида, кредита, туловища
150		['иала', 1],                    // материала
151		['инка', 1],                    // клинка
152		['кты', 1],                     // объекты
153		['лива', 1],                    // полива
154		['нта', 1],                     // варианта
155		['о[лрс]а', 1],                 // пола, надзора, космоса
156		['рева', 1],                    // дерева
157		['ства', 1],                    // государства
158		['те[лр][аия]', 1],             // руководителя
159		['[оу]ви', 1],                  // крови, обуви
160		['фона', 1],                    // телефона
161		['я[дс]а', 1]                   // отряда, мяса
162	],
163
164	'ессы|ини|ицы' : [
165		// действия, равновесия, предприятия, метталургии
166		['[вгнст]и[ия]', 2],
167
168		['бега', 1],                    // побега
169		['[бк]оя', 1],                  // покоя, боя
170		['иги', 1],                     // подвиги
171		['[врт]ца', 1],                 // продавца, кварца, отца
172		['ени', 1],                     // времени
173		['есы', 1],                     // интересы
174		['[исы]ка', 1],                 // дворника, песка, языка
175		['изма', 1],                    // организма
176		['лия', 2],                     // изделия
177		['сьма', 1],                    // письма
178		['йма', 1],                     // займа
179		['нка', 1],                     // банка
180		['ья', 1],                      // несчастья
181		['уки', 1],                     // звуки
182		['юди', 1],                     // люди
183		['у[сх]а', 1]                   // вкуса, воздуха
184	],
185
186	'ии' : [
187		['[гн]и[ия]', 2]                // металлургия
188	],
189
190	'есс|иц|инь' : [
191		['вых', 2]                      // паслёновых
192	],
193
194	'й+ки' : [
195		['боя', 1],                     // боя
196		['ви[йя]', 1]                   // действия
197	],
198
199	// имена прилагательные
200	'ей' : [
201		['[шщ]им', 2],                  // общим
202		['его', 3]                      // высшего
203	],
204
205	'ой' : [
206		// другого, молодого, женского, целого, художественного, которого, этого, большого
207		['[вгдклнртш]ого', 3],
208
209		['[ео]му', 3],                  // судебному
210		['[гд][иы]м', 2],               // твёрдым, другим
211		['[клмнр][оы]м', 2]             // музыкальном, прямым
212	],
213
214	//
215	// ----- ФОРМЫ ДАТЕЛЬНОГО И ПРЕДЛОЖНОГО ПАДЕЖА -----
216	//
217
218	// форма ед.ч.
219	'ке|ессе|ине|ице' : [
220		['[ия]де', 1],                  // виде, ряде
221		['[оя]ду', 1],                  // периоду, взгляду
222		['ане', 1],                     // плане
223		['е[нс]те', 1],                 // инструменте -> инструментессе, месте -> местессе
224		['[ар]те', 1],                  // результате, транспорте
225		['ессе', 1],                    // процессе
226		['[её]ме', 1],                  // объёме
227		['ксу', 1],                     // боксу -> боксессе
228		['лу', 1],                      // делу
229		['нию', 2],                     // отношению
230		['нке', 1],                     // ребёнке
231		['оду', 1],                     // период
232		['ету', 1],                     // предмету
233		['сту', 1],                     // росту
234		['усе', 1]                      // соусе
235	],
236	'ессе|ине|ице' : [
237		['еге', 1], // беге
238		['тве', 1], // государстве
239		['дне', 1], // судне -> суднессе
240		['[иы]ке', 1], // крике, языке
241		['нцу', 1], // концу -> концессе
242		['чае', 1]  // случае
243	],
244	'ей|це' : [
245		['н[иь]ем', 2] // давлением -> давленией, вареньем -> вареньей
246	],
247
248	// форма мн.ч.
249	'ессам' : [
250		['кам', 2] // потомкам -> потомкессам
251	],
252	'ессам|иням|ицам' : [
253		['[дт]ям', 2] // людям, детям
254	],
255
256	//
257	// ----- ФОРМА ВИНИТЕЛЬНОГО ПАДЕЖА -----
258	//
259
260	'ую' : [
261		['шой', 2],    // большой
262		['чий', 2],    // горячий
263		['[вг]ое', 2]  // готовое, другое
264	],
265
266	//
267	// ----- ФОРМА ТВОРИТЕЛЬНОГО ПАДЕЖА -----
268	//
269
270	'ессой|иней|ицей' : [
271		['[вгдл]ом', 2],      // клювом, ремеслом, лозунгом, трудом
272		['ью', 2],            // осенью
273		['[илнт][её]м', 2]    // носителем, лезвием, остриём, временем, путём
274	],
275
276	'ками|ессами|ицами' : [
277		['[вдлн][ая]ми', 3],  // островами, спортсменами, представителями, плодами
278		['[иы]ми', 3],        // мелкими, продолговатыми
279		['тами', 3],          // продуктами
280		['ьями', 4]           // листьями
281	],
282
283	'ессами|ицами' : [
284		['[ая]ми', 3]         // лицами, отношениями
285	],
286
287	// ---------------------------------
288	// ----- ИМЕНА СУЩЕСТВИТЕЛЬНЫЕ -----
289	// ---------------------------------
290
291	// Слова с заменой согласного основы
292	'ч+ка|есса|ина|иня|ица' : [
293		['ёнок', 1],                    // ребёнок
294		['ыка', 2],                     // владыка
295		['[ае]к', 1]                    // левак, человек
296	],
297
298	'ч+есса|ина|иня|ица' : [
299		['цо', 2]                       // лицо
300	],
301
302	'ц+есса|иня|ица' : [
303		['[бнр]ец', 2]                  // конец, творец, рубец
304	],
305
306	'к+иня' : [
307		['ст', 0],                      // специалист
308		['нт', 0]                       // агент
309	],
310
311	'н+ица' : [
312		['ль', 0]                       // создатель
313	],
314
315	'адья' : [
316		['поп', 0]                      // поп
317	],
318
319	'ка|есса|иня|ица' : [
320		// [а] прораб, нрав, раж, лаз, зал, кран, этап, нагар, ужас, закат, граф, врач, палаш, плащ
321		// [е] хлеб, лев, манеж, вырез, удел, овен, зацеп, характер, лес, авторитет, блеф, меч, флеш, клещ
322		// [ё] небоскрёб, рёв, ёж, -ёз, орёл, клён, поклёп, сапёр, овёс, зачёт, -ёф, -ёч, клёш, -ёщ
323		// [и] гриб, залив, чиж, бриз, спил, блин, хрип, жир, рис, визит, гриф, клич, мякиш, товарищ
324		// [н] -нб, -нв, -нж, ценз, -нл, джинн, -нп, жанр, анонс, бант, аканф, ленч, реванш, -нщ
325		// [о] сноб, ров, нож, воз, пол, район, клоп, узор, снос, азот, штоф, светоч, грош, овощ
326		// [р] ущерб, нерв, морж, -рз, жерл, сатурн, карп, -рр, барс, торт, торф, грач, фарш, борщ
327		// [y] сруб, обдув, уж, арбуз, гул, врун, закуп, амур, трус, жгут, пуф, луч, душ, хрущ
328		// [э] дзэн, кэб, дэв, -эж, -эз, -эл, нэп, мэр, аэс, поэт, -эф, -эч, -эш, -эщ
329		// [ю] книголюб, клюв, -юж, союз, -юл, вьюн, шлюп, бордюр, полюс, уют, -юф, ключ, плюш, плющ
330
331		['[аеёиноруэю][бвжзлнпрстфчшщ]', 0],
332
333		['евт', 0],                     // терапевт
334		['[аеи][дн]ец', 2],             // канадец, уроженец
335		['тец', 0],                     // отец
336		['[лн]ь', 1],                   // вождь, создатель, создателесса, камень
337		['л[блнпт]', 0],                // металл, столб, челн, залп, болт
338		['льм', 0],                     // фильм
339		['мп', 0],                      // темп
340		['оша', 1],                     // юноша
341		['рин', 2],                     // татарин
342		['с[лст]', 0],                  // смысл, процесс, специалист
343		['ы[нсш]', 0],                  // сын, мыс, ландыш
344		['я[жнпрсчшщ]', 0]              // пляж, кляп, маляр, пояс, мя
344ч, гуляш, хрящ
345	],
346
347
348	'ка' : [
349		['яд',0],                       // отряд
350		['[аеёуы]м',0],                 // хам, джем, вотум, дым
351		['рий',0],                      // гербарий
352		['[аеоу]й',0],                  // бугай, лакей, зной, буй
353		['[рст]ь', 0]                   // фонарь, карась, гость
354	],
355
356	'есса|иня|ица' : [
357		// [а] маг, клад, знак, хам, страх, плац
358		// [е] берег, бред, человек, джем, цех, боец
359		// [ё] -ёг, лёд, отёк, -ёх, -ём, -ец
360		// [и] подвиг, вид, медик, грим, вывих, шприц
361		// [н] ринг, фонд, банк, сонм, бронх, принц
362		// [о] рог, сброд, срок, дом, вдох, -оц
363		// [р] торг, аккорд, кварк, шторм, стерх, кварц
364		// [с] пеласг, -сд, спуск, микрокосм, -сх, -сц
365		// [у] супруг, пуд, жук, вотум, пух, кибуц
366		// [ы] припрыг, стыд, клык, дым, жмых, -ыц
367		// [я] стяг, отряд, тюфяк, -ям, лях, -паяц
368
369		['[аеёинорсуыя][гдкмхц]', 0],
370
371		['[аеи]лец', 2],                // жилец
372
373		['[бвдт]р', 0],                 // бобр, кентавр, театр, кадр
374		['з[дм]', 0],                   // съезд
375		['ол[гк]', 0],                  // долг, полк
376		['офе', 1],                     // кофе
377		['ыв', 0],                      // взрыв
378		['[аеиоу]й',1],                 // бугай, лакей, гербарий, зной, буй
379		['[дрст]ь', 1],                 // вождь, фонарь, карась, путь
380		['ядя', 1],                     // дядя
381		['дья', 2],                     // судья
382
383		['[кы]т', 0],                   // реликт, опыт
384		['к[сх]', 1],                   // бокс, сикх
385
386		// ----- слова среднего рода -----
387
388		// небо, существо, чудо, яблоко, стекло, письмо, окно, ведро, колесо, пальто, ухо, плечо
389		['[бвдклмнрстхч]о', 1],
390
391		// действие, оружие, приспособление, кушанье, участие, отличие, жильё, согласие
392		['[вжлнстч][иь][её]', 2],
393
394		['мя', 1],                      // время
395		['[лрцщ]е', 1]                  // поле, море, солнце, вместилище
396	],
397
398	'есса' : [
399		['[длн]ие', 1]                  // правосудие, изделие, мнение
400	],
401
402	'ыня' : [
403		['рин', 2],                     // барин
404		['уз', 0]                       // арбуз
405	],
406
407	'ица' : [
408		['[дл]ие', 2],                  // правосудие, изделие
409		['ще', 3]                       // вместилище
410	],
411
412	'ша' : [
413		['у[нт]', 0],                   // врун, лилипут
414		['ир', 0]                       // командир
415	],
416
417	'ь+я' : [
418		['ун', 0]                       // врун
419	],
420
421	// формы мн.ч.
422	'ессы|ыни|ицы' : [
423		['нга', 1],                      // ранга
424		['о[дс]ы', 1],                   // выводы, матросы
425		['усы', 2]                       // вкусы
426	],
427
428	// ----- РАЗНОЕ -----
429
430	'инь' : [
431		['дей', 2]  //людей -> людинь
432	],
433
434	'на' : [
435		['обно', 2] //способно -> способна
436	]
437};
438
439//Случайный элемент списка
440FEM.random_word = wordlist => wordlist[Math.floor(Math.random() * wordlist.length)];
441
442//Проверка на исключение
443FEM.exceptions.contains = word => Object.keys(FEM.exceptions).includes(word);
444
445//Список значений
446FEM.exceptions.feminitives = word => [FEM.random_word(FEM.exceptions[word][0]), FEM.exceptions[word][0]];
447
448//Дефиниция слова-исключения
449FEM.exceptions.definition = word => FEM.exceptions[word][1];
450

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.