Page 1 of 3

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

Posted: Tue 16 Jul, 2013 23:06
by zg
Сам макрос тут.
для его работы нужны:
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 — включить/выключить подсветку неправильных слов.
выглядит это примерно так:

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

Posted: Wed 17 Jul, 2013 07:42
by Shmuel
Спасибо, полезная штука!

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

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

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

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

Posted: Wed 17 Jul, 2013 07:51
by Denis
На x64 ошибка:
\Macros\scripts\spell.lua:33: cannot load module 'hunspellAMD64'

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

Posted: Wed 17 Jul, 2013 07:59
by tstr
переименуйте Hunspellx64.dll в HunspellAMD64.dll

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

Posted: Wed 17 Jul, 2013 08:03
by Denis
Спасибо :)

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

Posted: Wed 17 Jul, 2013 08:35
by Shmuel
tstr wrote:переименуйте Hunspellx64.dll в HunspellAMD64.dll
Можно, и так, но лучше заменить 33-ю строку на

Code: Select all

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

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

Posted: Wed 17 Jul, 2013 09:27
by zg
ошибки исправил.

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

Posted: Wed 17 Jul, 2013 11:05
by Shmuel
Мне, чтобы скачать скрипт, приходится 5 раз кликать мышкой.

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

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

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

Posted: Wed 17 Jul, 2013 13:53
by John Doe
Аналогичные процедуры требуются также для скачивания движка и словарей :-)

Вот прямые ссылки для ленивых:

https://evil-programmers.googlecode.com ... /spell.lua
http://sourceforge.net/projects/aoo-ext ... t/download
http://sourceforge.net/projects/aoo-ext ... t/download
http://sourceforge.net/projects/nhunspe ... p/download

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

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

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

Code: Select all

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

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

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

Code: Select all

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

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

Posted: Fri 19 Jul, 2013 10:54
by Shmuel
zg wrote:можно к ExitFAR. если надо различать, то можно ввести параметр, указывающий, что реально происходит.
Сделал, чтобы ExitFAR вызывался при выгрузке и перезагрузке макросов.

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

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

Posted: Fri 19 Jul, 2013 11:50
by Smitis
Я так понимаю, проблема имеет место для любых библиотек, загружаемых через ffi.load?

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

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

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

Posted: Fri 19 Jul, 2013 12:34
by Smitis
Я имел ввиду отъедание памяти