Page 2 of 27
Posted: Sun Mar 11, 2007 3:43 pm
by DV
NakaRB wrote:плагин не обрабатывает множественные вложенные скобки одного типа, например, (()). с чередующимися скобками - все ок.
Так и задумано. Когда пользователь печатает открывающую скобку, сразу за которой уже имеется соответствующая закрывающая скобка, то она (имеющаяся закрывающая скобка) считается относящейся к только что введенной открывающей скобке, и поэтому плагин ничего не добавляет. Чередующиеся скобки автодополняются всегда, потому что, например, ] никак не может быть введенной ранее закрывающей скобкой для ( или {. Если непонятно, прочитайте предыдущее предложение еще раз

И еще раз

Впрочем, при необходимости я могу сделать подобное поведение изменяемым из настроек. Только надо подумать, как бы назвать такой пункт настроек. Добавить его или не стоит?
Кстати, замечено, что при активном плагине LineBoard v1.7 и AkelPad 3.2.4 подсветка скобок барахлит

Если убрать плагин LineBoard, то всё нормально. Почему бы это?
Posted: Fri Mar 16, 2007 10:07 pm
by NakaRB
ну если я один такой привередливый...

можно и не делать, но вообще-то как раз напрашивается именно такой случай прежде всего (в разных скобках запутаться имхо сложнее, чем в одинаковых). а пункт можно назвать типа "обрабатывать (учитывать) одинаковые скобки" или что-то вроде...
Posted: Fri Mar 23, 2007 7:08 am
by Instructor
Плагин временно не доступен.
Posted: Sun Mar 25, 2007 10:39 am
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)
Posted: Sun Apr 01, 2007 7:59 am
by pbot
добрый день, плагин не подсвечивает скобки (при установке курсора рядом с левой скобкой), если в этой строке имеется два слеша подряд, т.е. вот так не подсвечивает:
Code: Select all
(http://rarlab.com/)
http://winace.com/ (Commandline Ace).
а так подсвечивает:
Code: Select all
(http:/rarlab.com/)
http:/winace.com/ (Commandline Ace).
Posted: Tue Apr 03, 2007 11:29 am
by DV
В C, C++ и Delphi двойной слеш (то есть //) - это начало комментария, и поэтому вся часть строки после // игнорируется. Наверное, надо бы проверять расширение файла перед тем, как отбрасывать эту часть строки

Posted: Fri Jul 06, 2007 1:08 pm
by wisgest
При вызове AkellBrackets::Settings также начинает работать AkellBrackets::Main, причём это нигде не отмечается (в диалоге "Настройки/Плагины..." не появляется отметка возле AkellBrackets::Main, также не появляятся отметка возле соотв. пункта ContextDLL-меню), но при попытке вызова AkellBrackets::Main сообщается "Plugin is active. Unload it?"
Posted: Fri Jul 06, 2007 3:48 pm
by DV
wisgest wrote:При вызове AkellBrackets::Settings также начинает работать AkellBrackets::Main
Да.
причём это нигде не отмечается (...)
Это надо уточнить у Instructor'а. Наверное, я не выставил какой-то флажок, но не знаю, какой.
Кстати, как раз на выходных собирался заняться плагином (отбрасывание комментариев // только для файлов C/C++/Pas уже сделано, но все никак не соберусь убедиться в работоспособности под MustDie98 - это ж каждый раз в случае ошибки надо перегружаться в 2000, чтобы там пересобрать проект. И пока не нашел дров под MustDie9x для GeForce7600GT, а работать на 640x480 @ 60Hz неуютно).
Posted: Fri Jul 06, 2007 4:31 pm
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.
Posted: Fri Jul 06, 2007 4:36 pm
by wisgest
DV wrote:wisgest wrote:При вызове AkellBrackets::Settings также начинает работать AkellBrackets::Main
Да.
Мне кажется этого делать не следовало. Например, диалог настройки может быть вызван просто, чтобы посмотреть/вспомнить доступные возможности.
Posted: Fri Jul 06, 2007 7:45 pm
by DV
wisgest wrote:Мне кажется этого делать не следовало
Пожалуй, да. Переделываю с учетом того, что настройки могут измениться даже при неактивном плагине (когда Main не работает). Это подразумевает, что при изменении настроек при неактивной функции Main они (настройки) будут читаться из файла при открытии диалога настроек, и изменившиеся настройки будут писаться в файл при закрытии диалога настроек.
Posted: Fri Jul 06, 2007 9:42 pm
by wisgest
DV wrote:отбрасывание комментариев // только для файлов C/C++/Pas уже сделано...
Разве в С (не С++) есть //-комментарии?
С другой стороны //-комментарии используются и в других С-образных языках, например, Java, JavaScript и не только. А учитывая, что JavaScript-сценарии могут быть встроены в другие типы документов (html, wsf и др.), то необходимо уметь различать, является ли // частью сценария или объемлющего документа. (Это я пишу, т.к. считаю, что на поддержку JavaScript и html, следует обращать не меньшее внимание, чем на C++ и Delphi, для которых существуют IDE).
А ситуации, когда пара символов // явлеятся частью литерала строки или блокового комментария и таким образом экранируется, Вы предусмотрели? (В имеющейся версии этого нет, хотя пара символов // в ней как-то воспринимается.)
А нужно ли всё это? Всё равно не удастся(?) объять необъятное (например, аналогичные комментарии -- в Ada, точку с запятой в ассемблере и т.п.)...
Posted: Sat Jul 07, 2007 3:15 pm
by DV
Что-то в 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) их поддерживают.
Posted: Sat Jul 07, 2007 3:40 pm
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".
Posted: Sun Jul 08, 2007 1:17 pm
by Instructor
Точно не работает. Вспомнил, что информация о плагине держится в памяти программы, только, если он загружен или назначена горячая клавиша. Т.е. активировать без вызова "AkelBrackets::Main" не получится. Т.е можно сначала проверить загружена ли функция с помощью AKD_DLLFIND, а потом воспользоваться AKD_DLLCALL, если нет.