XBrackets plugin

Discuss and announce AkelPad plugins
  • Author
  • Message
DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

NakaRB wrote:плагин не обрабатывает множественные вложенные скобки одного типа, например, (()). с чередующимися скобками - все ок.
Так и задумано. Когда пользователь печатает открывающую скобку, сразу за которой уже имеется соответствующая закрывающая скобка, то она (имеющаяся закрывающая скобка) считается относящейся к только что введенной открывающей скобке, и поэтому плагин ничего не добавляет. Чередующиеся скобки автодополняются всегда, потому что, например, ] никак не может быть введенной ранее закрывающей скобкой для ( или {. Если непонятно, прочитайте предыдущее предложение еще раз :) И еще раз :)
Впрочем, при необходимости я могу сделать подобное поведение изменяемым из настроек. Только надо подумать, как бы назвать такой пункт настроек. Добавить его или не стоит?

Кстати, замечено, что при активном плагине LineBoard v1.7 и AkelPad 3.2.4 подсветка скобок барахлит :(
Если убрать плагин LineBoard, то всё нормально. Почему бы это?

Offline
Posts: 6
Joined: Fri Mar 09, 2007 8:39 pm

Post by NakaRB »

ну если я один такой привередливый... ;) можно и не делать, но вообще-то как раз напрашивается именно такой случай прежде всего (в разных скобках запутаться имхо сложнее, чем в одинаковых). а пункт можно назвать типа "обрабатывать (учитывать) одинаковые скобки" или что-то вроде...

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Плагин временно не доступен.

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

Плагин уже доступен.

v.1.2
Что нового:
* для AkelPad 3.3.0+
- исправлено: границы области редактирования определялись неправильно
+ (настройка) автозакрытие скобок при уже имеющейся правой скобке
+ уменьшен размер dll-файла (сборка с помощью Build.cmd)

===============

v.1.2 (March 2007)
What's new:
* for AkelPad 3.3.0+
- fixed: edit-control's formatting rectangle was determined incorrectly
+ (option) autocomlete brackets even if corresponding right bracket exists
+ size of dll-file is reduced (using Build.cmd)

Offline
Posts: 1
Joined: Sun Apr 01, 2007 6:00 am
Location: СПб

Post by pbot »

добрый день, плагин не подсвечивает скобки (при установке курсора рядом с левой скобкой), если в этой строке имеется два слеша подряд, т.е. вот так не подсвечивает:

Code: Select all

(http://rarlab.com/) 
http://winace.com/ (Commandline Ace).
а так подсвечивает:

Code: Select all

(http:/rarlab.com/) 
http:/winace.com/ (Commandline Ace).

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

pbot wrote: т.е. вот так не подсвечивает:
http://winace.com/ (Commandline Ace).
В C, C++ и Delphi двойной слеш (то есть //) - это начало комментария, и поэтому вся часть строки после // игнорируется. Наверное, надо бы проверять расширение файла перед тем, как отбрасывать эту часть строки :)

Offline
Posts: 63
Joined: Sun Jun 24, 2007 4:03 pm
Contact:

Post by wisgest »

При вызове AkellBrackets::Settings также начинает работать AkellBrackets::Main, причём это нигде не отмечается (в диалоге "Настройки/Плагины..." не появляется отметка возле AkellBrackets::Main, также не появляятся отметка возле соотв. пункта ContextDLL-меню), но при попытке вызова AkellBrackets::Main сообщается "Plugin is active. Unload it?"

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

wisgest wrote:При вызове AkellBrackets::Settings также начинает работать AkellBrackets::Main
Да.
причём это нигде не отмечается (...)
Это надо уточнить у Instructor'а. Наверное, я не выставил какой-то флажок, но не знаю, какой.
Кстати, как раз на выходных собирался заняться плагином (отбрасывание комментариев // только для файлов C/C++/Pas уже сделано, но все никак не соберусь убедиться в работоспособности под MustDie98 - это ж каждый раз в случае ошибки надо перегружаться в 2000, чтобы там пересобрать проект. И пока не нашел дров под MustDie9x для GeForce7600GT, а работать на 640x480 @ 60Hz неуютно).

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Если функция Main активируется без ее вызова, то поменять статус можно так:

Code: Select all

PLUGINFUNCTIONA *pf;

if (pf=(PLUGINFUNCTIONA *)SendMessage(pd->hMainWnd, AKD_DLLFIND, (WPARAM)"AkelBrackets::Main", 0))
{
  pf->bRunning=TRUE;
}
EDIT:
...но все никак не соберусь убедиться в работоспособности под MustDie98 - это ж каждый раз в случае ошибки надо перегружаться в 2000, чтобы там пересобрать проект
В 9x/Me cобираю с помощью Microsoft Visual C++ 6.0. Или пользуюсь виртуальной машиной с 9x/Me.
Last edited by Instructor on Fri Jul 06, 2007 4:41 pm, edited 2 times in total.

Offline
Posts: 63
Joined: Sun Jun 24, 2007 4:03 pm
Contact:

Post by wisgest »

DV wrote:
wisgest wrote:При вызове AkellBrackets::Settings также начинает работать AkellBrackets::Main
Да.
Мне кажется этого делать не следовало. Например, диалог настройки может быть вызван просто, чтобы посмотреть/вспомнить доступные возможности.

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

wisgest wrote:Мне кажется этого делать не следовало
Пожалуй, да. Переделываю с учетом того, что настройки могут измениться даже при неактивном плагине (когда Main не работает). Это подразумевает, что при изменении настроек при неактивной функции Main они (настройки) будут читаться из файла при открытии диалога настроек, и изменившиеся настройки будут писаться в файл при закрытии диалога настроек.

Offline
Posts: 63
Joined: Sun Jun 24, 2007 4:03 pm
Contact:

Post by wisgest »

DV wrote:отбрасывание комментариев // только для файлов C/C++/Pas уже сделано...
Разве в С (не С++) есть //-комментарии?
С другой стороны //-комментарии используются и в других С-образных языках, например, Java, JavaScript и не только. А учитывая, что JavaScript-сценарии могут быть встроены в другие типы документов (html, wsf и др.), то необходимо уметь различать, является ли // частью сценария или объемлющего документа. (Это я пишу, т.к. считаю, что на поддержку JavaScript и html, следует обращать не меньшее внимание, чем на C++ и Delphi, для которых существуют IDE).

А ситуации, когда пара символов // явлеятся частью литерала строки или блокового комментария и таким образом экранируется, Вы предусмотрели? (В имеющейся версии этого нет, хотя пара символов // в ней как-то воспринимается.)

А нужно ли всё это? Всё равно не удастся(?) объять необъятное (например, аналогичные комментарии -- в Ada, точку с запятой в ассемблере и т.п.)...

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

Instructor wrote:

Code: Select all

  pf->bRunning=TRUE;
Что-то в AkelPad 3.3.0 следующий вызов всегда возвращает 0:

Code: Select all

SendMessage( g_hMainWnd, AKD_DLLFIND, (WPARAM) L"AkelBrackets::Main", 0 )
Это в Windows 2000, а под 98 еще не проверял. Хэндл окна указан правильно, так как я его проверял с помощью других функций.
wisgest wrote:Разве в С (не С++) есть //-комментарии?
Во всяком случае, известные мне компиляторы (MS-VC++, GCC(MinGW), Borland и tcc) их поддерживают.

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

И под 98 тоже не пашет :(
Вот полный код:

Code: Select all

  if (g_bOldWindows)
  {
    PLUGINFUNCTIONA* pfA = (PLUGINFUNCTIONA *) SendMessage( g_hMainWnd, 
      AKD_DLLFIND, (WPARAM) "AkelBrackets::Main", 0 );
    if (pfA) 
    { 
      pfA->bRunning = g_bInitialized; 
    } else MessageBox(NULL, "Not found", "(char*)AkelBrackets::Main", MB_OK);
  }
  else
  {
    PLUGINFUNCTIONW* pfW = (PLUGINFUNCTIONW *) SendMessage( g_hMainWnd,
      AKD_DLLFIND, (WPARAM) L"AkelBrackets::Main", 0 );
    if (pfW)
    {
      pfW->bRunning = g_bInitialized;
    } else MessageBox(NULL, "Not found", "(wchar_t*)AkelBrackets::Main", MB_OK);
  }
Все время появляется окошко "Not found".

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Точно не работает. Вспомнил, что информация о плагине держится в памяти программы, только, если он загружен или назначена горячая клавиша. Т.е. активировать без вызова "AkelBrackets::Main" не получится. Т.е можно сначала проверить загружена ли функция с помощью AKD_DLLFIND, а потом воспользоваться AKD_DLLCALL, если нет.
Post Reply