Yoficator — Макрос для расстановки буквы Ё

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
HaRT
Moderator
Posts: 9651
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 119 times
Been thanked: 244 times

Yoficator — Макрос для расстановки буквы Ё

Post by HaRT »

Latest post of the previous page:

Vladimir. wrote: Mon 30 Nov, 2020 15:00 не предусмотрен вариант модификатора для безразличия к регистру
Отчего же? У меня print(regex.new'/я/i':match'МЯЧ') выводит Я.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13000
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 40 times
Been thanked: 310 times

Yoficator — Макрос для расстановки буквы Ё

Post by John Doe »

faruser wrote: Mon 30 Nov, 2020 09:11 По умолчанию параметр WordReg в конфигурационном файле настроен на поиск «слов», которые состоят только из русских букв:
Значит по умолчанию ошибка во "все-таки" найдена не будет.
Не означает ли это, что стоит что-то усовершенствовать?
Last edited by HaRT on Tue 01 Dec, 2020 12:54, edited 1 time in total.
Reason: Исправлены автор и источник цитаты
https://t.me/FarManager — Telegram чат
faruser
Posts: 47
Joined: Thu 05 May, 2011 09:22
Location: Москва
Been thanked: 2 times

Yoficator — Макрос для расстановки буквы Ё

Post by faruser »

Наряду с основным словарём на сайте "YO" есть также словарь регулярных выражений. И там есть «всё-таки».
Ранее я не стал заморачиваться этим словарём, т.к. мне кажется, что для некоторых приведённых там случаев можно изобрести искусственные, но всё же контрпримеры.
Но попробую копнуть в эту сторону.
Last edited by faruser on Fri 04 Dec, 2020 13:20, edited 3 times in total.
Vladimir.
Posts: 12
Joined: Mon 20 Apr, 2020 11:50
Has thanked: 5 times

Yoficator — Макрос для расстановки буквы Ё

Post by Vladimir. »

Ну что-ж, я лично буду надеяться, что у Вас будет и время и возможность.
faruser
Posts: 47
Joined: Thu 05 May, 2011 09:22
Location: Москва
Been thanked: 2 times

Yoficator — Макрос для расстановки буквы Ё

Post by faruser »

Я не смог придумать, как использовать исходный словарь регулярных выражений, поэтому пошёл другим путём — через словарь замен

Файл словаря содержит строки вида:
<регулярное выражение поиска> <символ(ы) табуляции> <регулярное выражение замены>

Например:
([вВ])с[её]-таки <tab> %1сё-таки
([вВ])с[её], что <tab> %1сё, что
([вВ])с[её], чем <tab> %1сё, чем

Ещё примеры:
# 35 лет
(\d+) л[её]т <tab> %1 лет
# Многих/долгих лет
(\w+х) л[её]т <tab> %1 лет

Словарь замен применяется перед всеми остальными словарями

В конфигурацию добавляется параметр словаря замен:
YoDictReplace = [[%FARPROFILE%\Dictionaries\YoDictReplace.txt]],

Предполагается, что длина строки замены равна длине строки поиска

Прикладываю новую версию Yoficator.lua и файл YoDictReplace.txt, который я сконвертировал из исходного http://vgiv.narod.ru/yo/yo_regexpr.zip

Попробуйте, подойдёт ли такой вариант.
Attachments
Yoficator.lua
(22.76 KiB) Downloaded 12 times
YoDictReplace.txt
(3.8 KiB) Downloaded 11 times
Last edited by faruser on Mon 28 Dec, 2020 06:44, edited 1 time in total.
dmitrik
Posts: 53
Joined: Mon 30 Nov, 2009 21:58
Been thanked: 1 time

Yoficator — Макрос для расстановки буквы Ё

Post by dmitrik »

Новый вариант вылетает:

Code: Select all

╔════════════════════════════════════════════════════════════════════ LuaMacro ═════════════════════════════════════════════════════════════════════╗
║ ...r\Far\x86\Profile\Macros\scripts\Yoficator\Yoficator.lua:336: attempt to call field 'RemoveBOM' (a nil value)                                  ║
║ stack traceback:                                                                                                                                  ║
║    ...r\Far\x86\Profile\Macros\scripts\Yoficator\Yoficator.lua: in function 'Read'                                                                ║
║    ...r\Far\x86\Profile\Macros\scripts\Yoficator\Yoficator.lua:508: in function 'Create'                                                          ║
║    ...r\Far\x86\Profile\Macros\scripts\Yoficator\Yoficator.lua:618: in function <...r\Far\x86\Profile\Macros\scripts\Yoficator\Yoficator.lua:615> ║
╟───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╢
║                                                                      { OK }                                                                       ║
╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
Last edited by dmitrik on Tue 29 Dec, 2020 12:08, edited 1 time in total.
faruser
Posts: 47
Joined: Thu 05 May, 2011 09:22
Location: Москва
Been thanked: 2 times

Yoficator — Макрос для расстановки буквы Ё

Post by faruser »

Попробуйте с этой версией vutil.lua
Attachments
vutil.lua
(15.14 KiB) Downloaded 7 times
User avatar
John Doe
Бюрократ
Posts: 13000
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 40 times
Been thanked: 310 times

Yoficator — Макрос для расстановки буквы Ё

Post by John Doe »

faruser wrote: Mon 28 Dec, 2020 06:41 Например:
([вВ])с[её]-таки <tab> %1сё-таки
Выходит что строки набранные капсом не найдутся.
https://t.me/FarManager — Telegram чат
dmitrik
Posts: 53
Joined: Mon 30 Nov, 2009 21:58
Been thanked: 1 time

Yoficator — Макрос для расстановки буквы Ё

Post by dmitrik »

faruser wrote: Tue 29 Dec, 2020 15:59 Попробуйте с этой версией vutil.lua
Да, теперь всё отлично, спасибо! 👍
faruser
Posts: 47
Joined: Thu 05 May, 2011 09:22
Location: Москва
Been thanked: 2 times

Yoficator — Макрос для расстановки буквы Ё

Post by faruser »

На текущий момент шаблоны обрабатываются без игнорирования регистра
Для некоторых случаев я не смог придумать хорошего шаблона, например: "ТЕР-ТЕР ТЕР-ОГАНЕСЯН СТОЛ, ПОКА НЕ ВЫТЕР" — в первом случае ТЕР должно замениться на ТЁР, во втором нет.
Я решил, что пусть уж шаблоны не найдут какой-то вариант, и его придётся править по словарю, чем если шаблон ошибочно заменит Е/Ё
User avatar
John Doe
Бюрократ
Posts: 13000
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 40 times
Been thanked: 310 times

Yoficator — Макрос для расстановки буквы Ё

Post by John Doe »

faruser wrote: Sun 03 Jan, 2021 03:11 На текущий момент шаблоны обрабатываются без игнорирования регистра
В документации стоит указать. Но я не очень понял в чём принципиальная разница между словарём и шаблонами:
faruser wrote: Sun 03 Jan, 2021 03:11 и его придётся править по словарю
"по словарю" автоматически или вручную?
При массовой замене неоднозначные вхождения подтверждаются пользователем или пропускаются?
https://t.me/FarManager — Telegram чат
faruser
Posts: 47
Joined: Thu 05 May, 2011 09:22
Location: Москва
Been thanked: 2 times

Yoficator — Макрос для расстановки буквы Ё

Post by faruser »

John Doe,
В основном словаре (включая пользовательский) указываются единичные слова во всех словоформах: "вселённая", "вселённой", "вселёнными" и т.д.
При этом, если в тексте обнаруживается слово "Вселенная", то макрос спрашивает: здесь "Е" или "Ё"
В словаре регулярных выражений (шаблонов) указываются регулярные выражения: "([а-я]\s+Вс)[её](л)[её](нн\w+)"<tab>%1е%2е%3
Т.е. если перед словом "Вселенн…" (с большой буквы) слоит слово, которое оканчивается на [а-я], то в этом случае всегда используется "Е", без запроса пользователя
В противном случае (если не найден ни один подходящий шаблон) будет использоваться основной словарь

Работа по словарю шаблонов сейчас находится в стадии разработки/отладки. Я по легкомысленности попытался избрести велосипед, но получилось скверно.
Но есть уже существующий алгоритм, и я буду пробовать его.
Post Reply

Return to “Полезные макросы и скрипты”