Макрос для проверки орфографии в редакторе

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
zg
zero-gravity
Posts: 5221
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

Макрос для проверки орфографии в редакторе

Postby zg » Tue 16 Jul, 2013 23:06

Сам макрос тут.
для его работы нужны:
1. dll от проекта nhunspell. отсюда берётся архив с последней версией и из него нужны либо Hunspellx86.dll, либо Hunspellx64.dll. именно эти dll чисто нативные, никакого .net-а в них нет. положить их нужно куда-нибудь, откуда они загрузятся, например в папку с фаром.
2. словари. по умолчанию макрос настроен на вот этот русский словарь (нужны файлы ru_RU_yo.aff и ru_RU_yo.dic), и вот этот английский словарь (нужны файлы en_US.aff и en_US.dic). по умолчанию словари ожидаются в %FARPROFILE%\Dictionaries\.

все настройки словарей лежат в начале макроса.
F3 — показать меню с вариантами замены.
ShiftF3 — включить/выключить подсветку неправильных слов.
выглядит это примерно так:
Attachments
spell.png
spell.png (8.68 KiB) Viewed 11005 times

Shmuel
Posts: 4997
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Re: Макрос для проверки орфографии в редакторе

Postby Shmuel » Wed 17 Jul, 2013 07:42

Спасибо, полезная штука!

Пара мелких замечаний:
1. if word:len() - это баг. Правильно будет: if word ~= ""

2. kernel32 не обязательно явно грузить, можно просто вызывать его функции, например, ffi.C.lstrlenW()

Можно определить в файле local C = ffi.C, тогда ещё красивее: C.lstrlenW().
В то же время не рекомендуется делать local lstrlenW = ffi.C.lstrlenW.

Denis
Posts: 1389
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 2 times
Been thanked: 2 times

Re: Макрос для проверки орфографии в редакторе

Postby Denis » Wed 17 Jul, 2013 07:51

На x64 ошибка:
\Macros\scripts\spell.lua:33: cannot load module 'hunspellAMD64'

tstr
Posts: 483
Joined: Thu 16 Apr, 2009 16:15
Has thanked: 2 times
Been thanked: 2 times

Re: Макрос для проверки орфографии в редакторе

Postby tstr » Wed 17 Jul, 2013 07:59

переименуйте Hunspellx64.dll в HunspellAMD64.dll

Denis
Posts: 1389
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 2 times
Been thanked: 2 times

Re: Макрос для проверки орфографии в редакторе

Postby Denis » Wed 17 Jul, 2013 08:03

Спасибо :)

Shmuel
Posts: 4997
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Re: Макрос для проверки орфографии в редакторе

Postby Shmuel » Wed 17 Jul, 2013 08:35

tstr wrote:переименуйте Hunspellx64.dll в HunspellAMD64.dll

Можно, и так, но лучше заменить 33-ю строку на

Code: Select all

local hunspell=ffi.load("hunspell"..(win.GetEnv("PROCESSOR_ARCHITECTURE"):gsub("AMD64","x64")))

User avatar
zg
zero-gravity
Posts: 5221
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

Re: Макрос для проверки орфографии в редакторе

Postby zg » Wed 17 Jul, 2013 09:27

ошибки исправил.

Shmuel
Posts: 4997
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Re: Макрос для проверки орфографии в редакторе

Postby Shmuel » Wed 17 Jul, 2013 11:05

Мне, чтобы скачать скрипт, приходится 5 раз кликать мышкой.

1. ссылка, приведенная в шапке
2. ссылка на spell.lua в папке .../scripts
3. правый клик на ссылке "View raw file"
4. клик "Save Link Target" в контекстном меню
5. и, наконец, кнопка "Save" в диалоге сохранения

Может я что-то не так делаю? Пока это всё делаешь, может и качать расхотеться. :(

User avatar
John Doe
Бюрократ
Posts: 11048
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 10 times
Been thanked: 63 times

Re: Макрос для проверки орфографии в редакторе

Postby John Doe » Wed 17 Jul, 2013 13:53


Shmuel
Posts: 4997
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Re: Макрос для проверки орфографии в редакторе

Postby Shmuel » Thu 18 Jul, 2013 18:02

Сабж при перезагрузке макросов (MCTL_LOADALL) не освобождает хэндлы библиотеки, что приводит при каждой перезагрузке к отъеданию около 12 MB памяти. Да, сабж не виноват, он не в курсе. Но, видимо, надо будет организовать новый тип события для извещения макросов о их выгрузке, или подцепиться к ExitFAR.

На данный момент, при установленном сабже, следующая команда валит Фар из-за съедания всей памяти:

Code: Select all

lm:post for k=1,400 do far.MacroLoadAll() end

User avatar
zg
zero-gravity
Posts: 5221
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

Re: Макрос для проверки орфографии в редакторе

Postby zg » Thu 18 Jul, 2013 23:05

Shmuel wrote:или подцепиться к ExitFAR.
можно к ExitFAR. если надо различать, то можно ввести параметр, указывающий, что реально происходит.
На данный момент, при установленном сабже, следующая команда валит Фар из-за съедания всей памяти:

Code: Select all

lm:post for k=1,400 do far.MacroLoadAll() end
у меня не валит, появляется несколько сообщений про нехватку памяти, потом даже по папкам ходить можно :)

Shmuel
Posts: 4997
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Макрос для проверки орфографии в редакторе

Postby Shmuel » Fri 19 Jul, 2013 10:54

zg wrote:можно к ExitFAR. если надо различать, то можно ввести параметр, указывающий, что реально происходит.
Сделал, чтобы ExitFAR вызывался при выгрузке и перезагрузке макросов.

Мы как-то обсуждали общее время загрузки макросов. Сабж увеличивает его на 300 ms на моей машине, из которых 30 ms - загрузка файлов и 270 ms - инициализация. Может имеет смысл грузить библиотеку и словари при первом нажатии на F3/ShiftF3 в редакторе? Время lm:load меня не волнует, волнует время запуска Фара.

Smitis
Posts: 1438
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 12 times
Been thanked: 22 times
Contact:

Re: Макрос для проверки орфографии в редакторе

Postby Smitis » Fri 19 Jul, 2013 11:50

Я так понимаю, проблема имеет место для любых библиотек, загружаемых через ffi.load?
Разум когда-нибудь победит.

Shmuel
Posts: 4997
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Макрос для проверки орфографии в редакторе

Postby Shmuel » Fri 19 Jul, 2013 12:02

Smitis wrote:Я так понимаю, проблема имеет место для любых библиотек, загружаемых через ffi.load?
ffi.load тут ни при чём. Загрузка любой библиотеки делается не за нулевое время.
Речь идёт не о загрузке, а об инициализации, которая для данной библиотеки, включая загрузку словарей, занимает примерно 300 ms, что само по себе не так уж много, но если учесть, что у меня все остальные макросы вместе грузятся за 4 ms, то разница налицо.

Smitis
Posts: 1438
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 12 times
Been thanked: 22 times
Contact:

Re: Макрос для проверки орфографии в редакторе

Postby Smitis » Fri 19 Jul, 2013 12:34

Я имел ввиду отъедание памяти
Разум когда-нибудь победит.

Shmuel
Posts: 4997
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Макрос для проверки орфографии в редакторе

Postby Shmuel » Fri 19 Jul, 2013 12:41

Smitis wrote:Я имел ввиду отъедание памяти
Нет больше отъедания, починили.


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

Who is online

Users browsing this forum: No registered users and 2 guests