SpellCheck plugin

Discuss and announce AkelPad plugins
  • Author
  • Message
Offline
Posts: 14
Joined: Thu Aug 16, 2012 6:52 pm

Post by vadim »

Помогло, спасибо! Быстро и просто.
Эти символы: ‹›«»‘’“”‚„ взяты из таблицы 1251
Красные подчеркивания слов с этими кавычками сильно раздражали.
Сейчас - совсем другое дело!

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Не являются ошибочными:
поможемd
наddписание
а вот наdddписание - уже ошибочное.
Странно всё это...

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Эм, у меня они все ошибочные. Или вместо "d","dd","ddd" мне нужно подобрать специальный набор символов?

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

FeyFre wrote:Эм, у меня они все ошибочные.
Ото ж я и говорю - странно, хотя Aspell у нас одинаковый и словари.. разве что у меня украинский не установлен.

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

После вызова +Call("SpellCheck::Background") обновляется только активная часть разделенного окна.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

FeyFre
Если будете что-то допиливать/перепиливать, то очень прошу сделать, чтобы при нажатых клавишах, влияющих на промотку страницы (Left, Right, Up, Down, PgUp, PgDown) и удаление символов (Del, Backspase) определение и прорисовка неверных слов не срабатывала. Т.е. когда нажата любая из вышеупомянутых клавиш, то не определять/прорисовывать, а делать это при только отпускании.
Может быть опционально (какой-то параметр в ini), но пожалуйста, сделайте, а то уж очень плохо работать на старых компах!

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

VladSh
А попробуйте эту версию.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

FeyFre
Надо теперь найти слабый комп, чтобы скорость движения каретки сравнить с включенным плагином и без; это в следующий раз когда к заказчику поеду.

Вообще по работе:
1. Если в нескольких строках специально сделать ошибки, а затем установить курсор ниже, а потом просто нажать Up и держать, то проходя по отмеченным словам курсор как бы удаляет существующие отметки.
После отпускания клавиши происходит не НЕмедленная перепрорисовка неправильных слов, а с задержкой в 1-2 секунды, создаётся впечатление, что на этой операции оно подтормаживает. Если бегать курсором по одному и тому же куску текста, то при последующих "пробегах" задержка перед прорисовкой меньше.
Убирать прорисовку при нажатии клавиш Up/Down и прохождении по определённому слову не надо, это стоит делать только при клавишах Del/Backspase.
2. При нажатии Del/Backspase убираются все подчёркивания ниже этой строки, а потом, при отпускании, неправильные слова всего окна редактирования прорисовываются снова, что долго. Лучше бы это действовало на текущее подчёркнутое слово, при невозможности - на текущую строку.
3. При одиночном нажатии Up/Down вся прорисовка подёргивается (происходит сброс и прорисовка заново; это хорошо видно, когда в текущей строке рядом 2 подчёркнутых слова), что тоже не нужно. Нужна перепрорисовка только когда в результате Up/Down текст "проскролился" в окне редактирования. А лучше именно ДОпрорисовка только появляющегося текста, как, вроде бы, сделано в текущей версии.
4. Если нажимать одиночный Left, то при каждом нажатии прорисовка убирается и снова проставляется, что подтормаживает. В этом случае лучше оставить предыдущую работу, т.е. текст не должен "мигать". Должен только когда в результате Left/Right текст "проскролился" в окне редактирования. Этот пункт похож на предыдущий.

Спасибо за начинание!

Upd: сейчас поставил текущую официальную версию, так там при движении Up/Down прорисовка не подёргивается, при скроле текста в результате действия кнопок новый текст прорисовывается мгновенно(!), я не вижу никакого "подрагивания", такое ощущение, что реально прорисовывается не всё окно редактирования, а только добавляемый текст.
Вы оптимизировали прошлую версию в этом плане? А то я её не смог потестить на старых компах((
Ещё заметил: при долгом нажатии Del низлежащие "подчёркивания" становятся блёклыми, а при отпускании клавиши прорисовываются в полный цвет, - интересный эффект!

В общем, тестовая версия во многих случаях стала работать гораздо медленнее (это стало видно на моём i3 3.2), возможно из-за того, что делает ненужные действия, а возможно из-за того, что для перепрорисовки стало использоваться отключение/включение плага (почему-то возникло такое ощущение), что долго. Т.е. в текущей официальной версии на указанной конфигурации работать гораздо комфортней.
Сравнить скорость при долгом нажатии Del/Backspace не могу, т.к. пока нет доступа к слабым компам.

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

VladSh,
> Вообще по работе:
Я вкурсе, грубо говоря, так специально делалось.
Давайте я объясню принцип, что изменилось, а Вы уже решите лучше или хуже:
Когда пришел пинок "перерисуй окно редактирования", тут появляюсь я и начинаю в заданой области искать слова и рисовать. Замечу, то практически после каждой операции с кнопками приходит такой пинок, ибо нужно перерисовать(либо редактирование, либо движение курсора).
Добавил:
Теперь я дополнительно ловлю все операции с кнопками. При каждой операции я взвожу некий флажок.
Рисовальщик ошибок в свою очередь смотрит "флажок поднят" значит ничего не делать, опущен - рисовать как обычно(вот Вам и ощущение отключения).
За флажком следит арбитр: он каждую секунду смотрит: опущен - ничего не делать, поднят - опустить, и перерисовать окно. Таким образом если за секунду пришло 10 нажатий, то я рисую(и проверяю) не 10 раз, а один. Но побочным эффектом является то, что те 10 раз просили перерисовывать маленькую область, фактически только ту что изменилась, а 1 раз - приходится перерисовывать всё, ибо невозможно выяснить куда за время предыдущих 9 занятий переместилась область которую нужно перерисовать(это ваш пункт 3).

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

FeyFre
Спасибо за описание. Но сказать что-то по делу трудно, т.к. не знаешь, как оно раньше работало. Можно ли точно также описать, для сравнения?

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

VladSh, ну дык
Когда пришел пинок "перерисуй окно редактирования", тут появляюсь я и начинаю в заданой области искать слова и рисовать.
Техически так:
Пришел WM_PAINT - нарисовать окно. Даю АР нарисовать фон и слова. Далее я смотрю какую область окна попросили перерисовать(эта область не всегда полное окно, чаще всего строчка и нескокльо последующих), определяю диапазон текста размещенного в этой области и начинаю в этом диапазоне искать слова и проверять и подчеркивать.
Стало:
Включение функции фоновой проверки: сделать флаг=0
Кнопочное событие: сделать флаг=1
WM_PAINT - нарисовать окно: если флаг=0 то проверить и нарисовать(тем же алгоритмом).
Событие секундного таймера: если флаг=1 сделать его 0 и заставить перерисовать окно(полностью). За интервал срабатывания таймера событий WM_PAINT может прийти десятки, каждое требующее перерисовать свою область. За интервал срабатывания таймера может пройти десяток кнопочных событий, которые могут менять текст, а значит и отображение, т.е порождать WM_PAINT.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Спасибо, ясно.
Мы, "высокоуровневики" и пользователи привыкли, что оно там "как-то само всё делается")), невольно начинаешь уважать тех, кто это на низком уровне рубает.

Значит по таймеру - от него придётся отказаться. Таймеры хороши для каких-то фоновых операций, т.е. где юзер не ожидает немедленного исполнения, например то же отображение лога в реальном времени.
Тут же надо "немедленно".

Вот этот вариант идеален:
FeyFre wrote:Пришел WM_PAINT - нарисовать окно. Даю АР нарисовать фон и слова. Далее я смотрю какую область окна попросили перерисовать(эта область не всегда полное окно, чаще всего строчка и нескокльо последующих), определяю диапазон текста размещенного в этой области и начинаю в этом диапазоне искать слова и проверять и подчеркивать.
но хотелось бы вклиниться перед рисованием подчёркиваний.
Вот, на примере нажатия PgUp: мы находимся на первой странице, жмём PgUp, перед самой отрисовкой определяем, что это PgUp (ну или то, 'какая была нажата клавиша' можно передать параметром, если там не линейный код), заходим в switch по 'кодам нажатых клавиш' и в case для PgUp делаем свою проверку "если текст в окне редактирования не проскролился (а он не проскролился, т.к. находимся на 1-й странице)", то ничего не определяем и не прорисовываем.

Т.о. то, что я предлагаю, это для некоторых клавиш поставить такие case и просто в некоторых случаях не прорисовывать - выходить, ничего не делая. А именно (добавить обработку по 2-м основным правилам):
1. Если жмутся клавиши, изменяющие содержимое окна редактирования, и клавиша нажата и не отпускается (нажали Del и держим или нажали любой символ и держим), то ничего не нужно определять и прорисовывать, пока клавиша не будет отжата.
2. Если жмутся клавиши "навигации" (не изменяющие содержимого): Left, Right, Up, Down, PgUp, PgDown), то для них нужно определять (дополнительно отлавливать событие?), проскролился ли текст в окне редактирования, и если да, то при отпускании клавиши производить определение и прорисовку.

Если же так вклиниться можно, тогда всё решаемо.

P.S. Знаю, что вариант с case плохой... Я у себя для скорости инициализирую собственные 'объекты поведения' для определённых случаев (здесь это специальные клавиши) и объект поведения для всех остальных случаев, и засовываю их в объект, аналогичный Dictionary. При нажатии любой клавиши можно получить соотв. объект поведения по коду нажатой клавиши и вызвать у него метод, выполняющий действия, который состоит из предварительного условия (условия может и не быть), определения просчитываемого текста и вызова общего метода прорисовки слов с ошибками.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »


Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

FeyFre wrote:Magister, spellcheck x64 не существует. И не просуществует ровно столько, сколько мне понадобится времени что-бы найти для него адекватную замену. Так что предложения принимаются.
>2 лет прошло с того момента - неужели до сих пор не нашлось адекватной замены? нельзя ли просто пересобрать х32 версию имеющегося плагина под х64?
p.s.: я новичок, только приобщился к AkelPad, тему не читал, то сообщение нашёл гуглом.

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Drugmix wrote:нельзя ли просто пересобрать х32 версию имеющегося плагина под х64?
viewtopic.php?p=15960#p15960
FeyFre wrote:Nizaury, плагин будеть работать на x64 как только найду ASpell x64, а пока нет. Я конечно могу выпустить x64-плагин-пустышку, который будет только подсвечивать все слова которые не находятся в белых списках, но вряд ли это будет назвать "работает".
Post Reply