1
daMaster
16.02.15
✎
14:12
|
//(c) daMaster 2015
//mailto: damasterprog@yandex.ru
//
//СИНТАКСИС
// daСклонение(_Выражение, _Падеж, _Род, _Режим, _ФорматнаяСтрока);
// _Выражение - склоняемое выражение
// _Падеж - падеж склонения, буква или цифра: "И" = 1, "Р" = 2, "В" = 3, "Д" = 4, "Т" = 5, "П" = 6
// _Род - род склоняемого выражения, буква или цифра: "М" = 1, "Ж" = 2, "С" = 3, "Н" = 4
// _Режим - режим работы функции, определяется типом склоняемого выражения
// _ФорматнаяСтрока - определяет формат и регистр выводимого результата
//
//СКЛОНЕНИЕ ФИО
//запуск выполняется в режиме "ФИО" или с пустым режимом, в таком случае - режим "ФИО" установится по умолчанию:
// daСклонение("Пухов Федор Николаевич", "Р", "М", "ФИО") = "Пухова Федора Николаевича"
// daСклонение("Пухова Ольга Сергеевна", "Д") = "Пуховой Ольге Сергеевне"
//порядок символов "Ф", "И", "О" в параметре режима определяет порядок частей ФИО в склоняемом выражении, т.к. фамилия, имя и отчество склоняются по разным правилам
// daСклонение("Мария Ивановна Кожедуб", "Т", , "ИОФ") = "Марией Ивановной Кожедуб"
// daСклонение("В. Тёркин", "П", , "ИФ") = "В. Тёркине"
// daСклонение("Тихончук", "Р", "Ж", "Ф") = "Тихончук"
//форматная строка может содержать ключевые слова "Фамилия", "Имя", "Отчество" или сокращения "Ф", "И", "О", их регистр определяет регистр выводимого результата
// daСклонение("Чапаев Василий Иванович", "Р", , , "Имя Отчество Фамилия") = "Василия Ивановича Чапаева"
// daСклонение("Чапаев Василий Иванович", "Д", , , "Фамилия И. О.") = "Чапаеву В. И."
// daСклонение("Чапаев Василий Иванович", "И", , , "отчество: Имя - ФАМИЛИЯ") = "иванович: Василий - ЧАПАЕВ"
//
//ОПРЕДЕЛЕНИЕ РОДА
//если с параметром _Род передать переменную со значением "?", в нее вернется род в случае успеха или останется "?" в случае неудачи
// ПоискРода = "?"; Результат = daСклонение("Лукашенко Александр Григорьевич", "Р", ПоискРода); Сообщить(ПоискРода); //"М"
// ПоискРода = "?"; Результат = daСклонение("Лукашенко А. Г.", "Р", ПоискРода); Сообщить(ПоискРода); //"?"
//
//СКЛОНЕНИЕ ПРОФЕССИЙ
//запуск выполняется в режиме "Д":
// daСклонение("Ведущий программист 1С и консультант по ЗиК", "Р", , "Д") = "Ведущего программиста 1С и консультанта по ЗиК"
//в этом и остальных режимах форматная строка определяет регистр слов результата и задается при помощи литер, если литера не задана - остается исходный регистр,
//А - первая буква первого слова, Б - первая буква остальных слов, В - все остальные буквы всех слов, Г - специально для аббревиатур:
// daСклонение("Ведущий программист 1С и Консультант по ЗиК", "Р", , "Д", "АБВГ") = "ВЕДУЩЕГО ПРОГРАММИСТА 1С И КОНСУЛЬТАНТА ПО ЗИК"
// daСклонение("Ведущий программист 1С и Консультант по ЗиК", "Р", , "Д", "абвг") = "ведущего программиста 1с и консультанта по зик"
// daСклонение("Ведущий программист 1С и Консультант по ЗиК", "Р", , "Д", "АБ") = "Ведущего Программиста 1С и Консультанта По ЗиК"
// daСклонение("Ведущий программист 1С и Консультант по ЗиК", "Р", , "Д", "Абв") = "Ведущего программиста 1С и консультанта по ЗиК"
//
//СКЛОНЕНИЕ СУЩЕСТВИТЕЛЬНЫХ, ПРИЛАГАТЕЛЬНЫХ, ГЛАГОЛОВ, ГЕОГРАФИЧЕСКИХ НАИМЕНОВАНИЙ
//запуск выполняется в режиме "Ч":
// daСклонение("Генеральная доверенность", "Р", , "В") = "Генеральной доверенности"
// daСклонение("Санкт-Петербург", "П", , "В") = "Санкт-Петербурге"
//в этом режиме возможно склонение в форме множественного числа, для этого в параметре _Род указывается "Н" (мНожественный):
// daСклонение("Устав", "И", "Н", "В") = "Уставы"
// daСклонение("Генеральная доверенность", "Р", "Н", "В") = "Генеральных доверенностей"
//возможно склонение глаголов по родам и по числам, исходный глагол может быть в форме любого рода и числа, но в настоящем времени:
// daСклонение("Подготовили", "И", "Ж", "В") = "Подготовила"
// daСклонение("Утвердило ответственное лицо", "И", "Н", "В") = "Утвердили ответственные лица"
//
//СКЛОНЕНИЕ ЧИСЕЛ, ВАЛЮТ, ЕДИНИЦ ИЗМЕРЕНИЯ
//запуск выполняется в режиме "Ч", возможно склонение по родам:
// daСклонение("Двадцать один", "И", "С", "Ч") = "Двадцать одно"
// daСклонение("Двадцать один", "Р", "Ж", "Ч") = "Двадцати одной"
//параметр _Выражение может иметь тип "Число":
// daСклонение(21, "И", "С", "Ч") = "Двадцать одно"
// daСклонение(21, "Р", "Ж", "Ч") = "Двадцати одной"
//возможно склонение сочетания числа и исчислимого (валюты, единицы измерения, прочих существительных)
// daСклонение("32 доска", "Р", , "Ч") = "Тридцати двух досок"
//исчислимое должно быть в начальной форме (именительный падеж, единственное число):
// daСклонение("23 австралийский доллар", "Р", , "Ч") = "Двадцати трех австралийских долларов"
//исключение для популярных валют, они могут быть в формате встроенной функции ЧислоПрописью()- "5 рублей", "13 долларов"):
// daСклонение("14 рублей 88 копеек", "Р", , "Ч", "абв") = "четырнадцати рублей восьмидесяти восьми копеек"
//если перед словом поставить символ "\", данное слово не будет изменено:
// daСклонение("51 рубль \81 копейка", "Р", , "Ч") = "Пятидесяти одного рубля 81 копейки"
//если перед числом поставить символ "^", данное слово будет склоняться без преобразования в пропись:
// daСклонение("^25 страница", "П", , "Ч") = "25-ти страницах"
//для получения формы винительного падежа одушевленных существительных, используется специальный падеж "О" (винительный Одушевленный):
// daСклонение("41 мешок", "В", , "Ч") = "Сорок один мешок"
// daСклонение("41 маляр", "О", , "Ч") = "Сорок одного маляра"
//
Функция daСклонение(_Выражение, _Падеж = "И", _Род = "", _Режим = "ФИО", _ФорматнаяСтрока = "")
_Версия = "13.02.2015";
//ТАБЛИЦЫ ПРАВИЛ СКЛОНЕНИЯ
//в колонке "Окончания" указывается перечень окончаний, для которых действует данное правило, разделитель "/", в конце также ставится разделитель
//алгоритм ищет строки с окончаниями последовательно, при совпадении останавливается, поэтому более узкое правило ("РВИН") должно следовать выше, чем широкое ("ИН")
//если окончание не найдено в таблице правил - такое слово не склоняется
//колонка "Обрезка" определяет, сколько символов с конца слова обрезать, перед добавлением окончания из колонки падежа ("Р", "Д", "В", "Т", "П")
_ПравилаФ = //Фамилия
//Род; Окончания; Обрезка; Р; Д; В;
Т; П; Комментарий
//символ "*" перед окончанием означает, что данное окончание сравнивается не с концом слова, а с целым словом ("*ГРИН" сработает только на Грин, а "ГРИН" - и на "Грин",
и на "Багрин")
"М-; *ГРИН/*ЧАПЛИН/РВИН/*БИН/; 0; а; у; а; ом;
е; Грин, Дарвин, Чаплин - исключения, чтобы пройти тест gramota.ru )
//в колонке "Род" указывается один литерал рода ("М", "Ж", "С"), если окончание позволяет однозначно определить род ("Петров" - "М", "Ильина" - "Ж")
|Ж; ЕВА/ЁВА/ИНА/ОВА/ЫНА/; 1; ой; ой; у;
ой; ой;
|М; ЕВ/ЁВ/ИН/ОВ/ЫН/; 0; а; у; а;
ым; е;
|М; ЧИЙ/ШИЙ/ЩИЙ/; 2; его; ему; его; им;
ем; Осадчий, Старший, Вещий
|Ж; ЧАЯ/ШАЯ/ЩАЯ/; 2; ей; ей; ую;
ей; ей; Осадчая, Старшая, Вещая
|Ж; АЯ/; 2; ой; ой;
ую; ой; ой; Крутая
|Ж; ЯЯ/; 2; ей; ей;
юю; ей; ей; Верхняя
//"М-" в колонке "Род" означает, что по окончанию род не определить, но правило действует только для рода "М" ("Воробей" склоняется только для "М", для "Ж" - не
склоняется)
|М-; *ВОРОБЕЙ/*СОЛОВЕЙ/; 2; ья; ью; ья;
ьем; ье; Воробей, Соловей
|М-; *ЛЕВ/; 2; ьва; ьву; ьва; ьвом; ьве;
Лев
|М-; *КИЙ/*БОКИЙ/; 1; я; ю; я;
ем; е; Кий
|М-; ЦОЙ/ВИЙ/СОЙ/ЕЙ/АЙ/УЙ/; 1; я; ю; я; ем;
е; Цой, Гелетей, Лузай
|М; ХОЙ/ШОЙ/; 2; ого; ому; ого; им;
ом; Плохой, Большой
|М; ЧОЙ/ЩОЙ/; 2; его; ему; его; им;
ом;
|М; ОЙ/ЫЙ/; 2; ого; ому; ого; ым;
ом; Крутой, Мудрый
|М; ГИЙ/КИЙ/; 2; ого; ому; ого; им;
ом;
|М-; ИЙ/; 1; я; ю; я;
ем; и; Шарий
|М-; КАШ/; 0; а; у; а;
ом; е; Лукаш
|М-; ЬМИЧ/; 0; а; у; а;
ом; е; Кузьмич
|М-; ИЧ/Ш/; 0; а; у; а;
ем; е; Митрич, Гаспажиньш, Милош, Хараш, Черныш
|М-; АК/АН/ЕР/ИР/ЙН/НГ/ОН/ОР/УК/ЯК/ЯН/БИХ/РИХ/; 0; а; у; а; ом; е;
//колонка "Род" пустая, если по окончанию род не определить, но правило склонения одинаковое для "М" и "Ж ("Живаго", "Лисица")
|; АГО/ИА/НКО/ОВО/ОТО/ЦКО/ЫХ/ЮДО/ОЛЯ/ЬДА/ИХ/ЫХ/УА/; 0; ; ; ; ; ;
//символ "+" перед окончанием означает, что данное правило действует, для не последней части составного слова (в "Абдул-Шах" часть "Абдул" не склоняется, а если "Абдул"
- отдельное слово, то склоняется)
|; +ВАН/+АБДУЛ/+БЕЛИЦ/+ГАСАН/+ДЮССАР/+ДЮМОН/+КНИППЕР/+КОРВИН/ 0; ; ; ; ; ;
|; +КАРА/+САЕД/+БОНЧ/+ШОЛОМ/+ПРИЗВАН/+МЕЛИК/*ТЕР/*ВАР/*ФОН/; 0; ; ; ; ; ;
|; *ДЮМА/*ТОМА/*ДЕГА/*ЛЮКА/*ФЕРМА/*ГАМАРРА/; 0; ; ; ; ; ;
|; *ПЕТИПА/*ШАНДРА/*СКАЛЯ/*КАРУАНА/; 0; ; ; ; ; ;
|М-; ИЯ/; 1; и; и; ю;
ей; и; Берия
|М-; ОЯ/; 1; и; е; ю;
ей; е;
|; НЖА/; 1; и; е;
у; ей; е; Стринжа
|; ЖА/; 1; и; е;
у; ой; е; Ганжа
|; ГА/КА/УЛЕША/ВАША/ХА/; 1; и; е; у;
ой; е; Кулеша/Кулешой
|; Я/; 1; и; е;
ю; ей; е; Разиня
|; ЙА/ЧА/ША/ЩА/; 1; и; е; у;
ей; е; Олеша/Олешей, Мойа
|; ЦА/; 1; ы; е;
у; ей; е; Лисица
|; А/; 1; ы; е;
у; ой; е;
|М-; ЕНЬ/; 3; ня; ню; ня;
нем; не; Камень
|М-; Ь/; 1; я; ю;
я; ем; е; Даль
|М-; ЁК/; 2; ька; ьку; ька; ьком; ьке;
Королёк
|М-; БЛОК/; 0; а; у; а;
ом; е; Блок
|М-; ОК/; 2; ка; ку; ка;
ком; ке; Миненок, Кисляченок
|М-; ИЕЦ/; 2; йца; йцу; йца; йцем; йце;
Коломиец
|М-; ПАЛЕЦ/; 2; ьца; ьцу; ьца; ьцем; ьце;
Долгопалец
|М-; ЛЕЦ/; 2; ьца; ьцу; ьца; ьцом; ьце;
Стрелец
|М-; ЧЕЦ/; 0; а; у; а;
ом; е; Чайчец
|М-; АВЕЦ/ЖЕЦ/; 2; ца; цу; ца;
цем; це; Переяславец, Запорожец
|М-; ОВЕЦ/БЕЦ/АМЕЦ/НЕЦ/ТЕЦ/; 2; ца; цу; ца; цом;
це; Горовец
|М-; ШВЕЦ/; 0; а; у; а;
ом; е; Швец
|М-; Ц/; 0; а; у;
а; ем; е; Кац, Бэц
|М-; ЁЛ/; 2; ла; лу; ла;
лом; ле; Козёл
|М-; ДЖ/ИЖ/ОЖ/РЖ/ЙЧ/; 0; а; у; а;
ем; е; Джордж, Лейч
|М-; Б/В/Г/Д/Ж/З/К/Л/М/Н/П/Р/С/Т/Ф/Х/Ч/Ш/Щ/; 0; а; у; а; ом; е;
Заканчивается на согласную";
_ПравилаИ = //Имя
//Род; Окончания; Обрезка; Р; Д; В;
Т; П; Комментарий
"Ж; *ИЯ/; 1; и; е;
ю; ей; е; Ия
|Ж; ИЯ/; 1; и; и;
ю; ей; и; Мария
|; ГА/КА/ХА/; 1; и; е;
у; ой; е; Ольга, Серега, Лука, Лика, Хоха
|; ЖА/ЙА/ЧА/ША/ЩА/; 1; и; е; у;
ей; е; Миша, Маша
|; ЦА/; 1; ы; е;
у; ей; е; Маца
|Ж; НА/ВЕРА/; 1; ы; е;
у; ой; е; Инна, Нина, Ирина, Вера
|Ж; А/; 1; ы; е;
у; ой; е; Тома (женские на -а чаще)
|М; *ШОТА/; 0; ; ;
; ; ; Шота
|М; А/ЛО/; 1; ы; е;
у; ой; е; Дима, Гаврило
|М; *ИЛЬЯ/*ИЛИЯ/; 1; и; е; ю;
ей; е; Илья
|Ж-; Я/; 1; и; е;
ю; ей; е; Дуня
|М-; Я/; 1; и; е;
ю; ей; е; Гия
|М; РЬ/; 1; я; ю;
я; ем; е; Игорь
|Ж; *ЛЮБОВЬ/*АГАРЬ/*РАХИЛЬ/*РУФЬ/*СУЛАМИФЬ/*ЭСФИРЬ/; 1; и; и; ь; ью; и;
Любовь
|Ж; *ЮДИФЬ/*РАШЕЛЬ/*НИНЕЛЬ/*ИЗАБЕЛЬ/*ИСАБЕЛЬ/; 1; и; и; ь; ью;
и; Любовь
|М-; Ь/; 1; я; ю;
я; ем; е; Олесь
|М; *ПАВЕЛ/; 2; ла; лу;
ла; &nbs
|
|