----------------------------------------------------------- XBrackets - плагин для текстового редактора AkelPad ----------------------------------------------------------- Плагин позволяет: 1) автозавершить скобки ([{""}]) - т.е. он добавляет соответствующую правую скобку при печати левой скобки. Плагин использует "умное" автозавершение: - для скобок ([{ анализируется следующий символ; - для кавычек " анализируются следующий и предыдущий символы. 2) подсветить активные скобки - т.е. он подсвечивает скобку под курсором и соответствующую ей парную скобку. 3) перейти к парной скобке - функция GoToMatchingBracket. 4) выделить текст между парными скобками - функция SelToMatchingBracket. Примечание: Чтобы избежать перерисовки подсвеченных активных скобок, функция XBrackets::Main должна быть загружена ПОСЛЕ Coder::HighLight. Для работы функций GoToMatchingBracket и SelToMatchingBracket плагин должен быть активен - то есть должна быть активна его функция Main. Пример внешнего вызова: var lpBuffer; var a; var s = ""; if ( lpBuffer = AkelPad.MemAlloc(64 * _TSIZE) ) { var res; res = AkelPad.Call("XBrackets::SelToMatchingBracket", 1, lpBuffer); if ( res > 0 ) { s = AkelPad.MemRead(lpBuffer, _TSTR); } AkelPad.MemFree(lpBuffer); } a = s.split(" "); if ( a.length == 3 ) { WScript.Echo( "pos1 = " + a[0] + "\npos2 = " + a[1] + "\nbrackets = " + a[2] ); } Дополнительные настройки (файл "AkelFiles\Plugs\XBrackets.ini"): common.user_brpairs = «» ‘’ “” Определяемые пользователем пары скобок, которые плагин XBrackets может автозавершать и подсвечивать. Обратите внимание, что пары скобок, которые состоят из одинаковых открывающего и закрывающего символа (такие как "" или ''), могут быть подсвечены неправильно, поскольку невозможно определить наверняка, находится ли каретка у открывающего или же у закрывающего символа такой пары скобок. Для того, чтобы задать свою пару скобок, следуйте таким правилам: 1) Пары скобок должны разделяться пробелом (' ') 2) Каждая пара скобок должна состоять из двух символов: первый задаёт левую (открывающую) скобку, и второй задаёт правую (закрывающую) скобку. Если в качестве пары скобок вы зададите всего 1 символ или 3 или больше символов, такая пара скобок будет проигнорирована. 3) Можно задать до 30 пар скобок. 4) Не забудьте добавить символ новой закрывающей/открывающей скобки в набор 'next_char_ok'/'prev_char_ok' при необходимости. autobrackets.next_char_ok = .,!?:;<)]}"'>/ »’” Набор символов, для которых разрешено автозавершение скобок при печати открывающей скобки ПЕРЕД таким символом. Кроме того, автозавершение любых скобок разрешено перед следующими жёстко закодированными символами: '\r', '\n', '\0', ' ' и '\t'. Этот набор может содержать до 90 символов. Пробелы игнорируются. autobrackets.prev_char_ok = ([{<= «‘“ Набор символов, для которых разрешено автозавершение скобок при печати скобки ПОСЛЕ такого символа. Это правило применяется только к тем парам скобок, которые состоят из одинаковых открывающего и закрывающего символа (такие как "" или ''). Кроме того, автозавершение таких скобок разрешено после следующих жёстко закодированных символов: '\r', '\n', '\0', ' ' и '\t'. Этот набор может содержать до 90 символов. Пробелы игнорируются. autocomplete.all_autobr = 0 Стандартное поведение: перед автозакрытием скобки проверяются символы из набора 'next_char_ok' (а также из набора 'prev_char_ok' в зависимости от типа скобки). autocomplete.all_autobr = 1 Автозакрытие скобок разрешено ПЕРЕД любым символом (т.е. набор 'next_char_ok' игнорируется). Это правило дополнительно зависит от настройки "Even if corresponding right bracket exists". autocomplete.all_autobr = 2 Автозакрытие скобок разрешено ПОСЛЕ любого символа (т.е. набор 'prev_char_ok' игнорируется). Это правило применяется только к тем парам скобок, которые состоят из одинаковых открывающего и закрывающего символа (такие как "" или ''). autocomplete.all_autobr = 3 Автозакрытие скобок разрешено ПЕРЕД и ПОСЛЕ любого символа (т.е. оба набора 'next_char_ok' и 'prev_char_ok' игнорируются). autocomplete.ovr_autobr = 0 В режиме "печать поверх" (Overwrite) закрывающая скобка не добавляется автоматически. autocomplete.ovr_autobr = 1 В режиме "печать поверх" (Overwrite) закрывающая скобка добавляется как новый символ (не поверх имеющегося символа). autocomplete.ovr_autobr = 2 В режиме "печать поверх" (Overwrite) закрывающая скобка добавляется поверх имеющегося символа (затирая его). autocomplete.sel_autobr = 0 При печати открывающей скобки выделенный текст исчезает (заменяется на напечатанную скобку). autocomplete.sel_autobr = 1 При печати открывающей скобки выделенный текст заключается в соответствующую пару скобок. autocomplete.sel_autobr = 2 При печати открывающей скобки выделенный текст заключается в соответствующую пару скобок, причём эта пара скобок также становится выделенной. Если выделенный текст уже начинается и заканчивается соответствующей парой скобок, эти скобки будут удалены. highlight.hlt_bothbr = 1 Если каретка находится между двумя парными скобками, подсвечиваются обе пары скобок. highlight.hlt_bothbr = 0 Если каретка находится между двумя парными скобками, подсвечивается только одна пара скобок (справа от закрывающей скобки приоритет выше). highlight.hlt_style = 3 XBrackets перерисовывает скобки, подсвеченные плагином Coder. Для подсветки парных скобок используется жирный шрифт. highlight.hlt_style = 2 XBrackets перерисовывает скобки, подсвеченные плагином Coder. Для подсветки парных скобок используется шрифт по умолчанию. highlight.hlt_style = 1 Для подсветки парных скобок используется жирный шрифт. XBrackets не перерисовывает скобки, подсвеченные плагином Coder. highlight.hlt_style = 0 Для подсветки парных скобок используется шрифт по умолчанию. XBrackets не перерисовывает скобки, подсвеченные плагином Coder. highlight.hlt_xmode = 7 Эта настройка управляет тем, что использует XBrackets для поиска и подсветки парных скобок. Позволяет отключить как запрос к AkelEdit насчёт синтаксиса файла, так и внутренний алгоритм поиска парной скобки. Предполагает использование в экспериментальных целях. Значением настройки будет сумма следующих чисел, отвечающих за поведение плагина: 1 - использовать внутренний алгоритм поиска парной скобки/кавычки; 2 - использовать AEM_HLGETHIGHLIGHT (подсветка, кавычки); 4 - использовать AEM_FINDFOLD (сворачиваемые блоки). highlight.quote_detect_lines = 1 Количество строк, которые просматривает XBrackets в поисках парной кавычки в обоих направлениях (когда направление поиска не может быть определено, например: " " ). Если это значение превышает 'highlight.quote_max_lines', то оно уменьшается до значения 'highlight.quote_max_lines'. Значение 1 означает "в пределах текущей строки". Значение 0 запрещает поиск парной кавычки в данных условиях. highlight.quote_max_lines = 10 Количество строк, которые просматривает XBrackets в поисках парной кавычки в одном определённом направлении (когда направление поиска может быть определено, например: "a b" ). Значение 1 означает "в пределах текущей строки". Значение 0 запрещает поиск парной кавычки вообще. highlight.br_max_lines = 0 Количество строк, которые просматривает XBrackets в поисках парной скобки. Значение 0 означает "без ограничения" - т.е. до конца файла. Дополнительные настройки плагина можно менять, не закрывая AkelPad. В три шага, вот в таком порядке: 1а. Открываем окно "Плагины" (Настройки -> Плагины...) и отключаем функцию XBrackets::Main (если она активна). 1б. (альтернативный вариант) Запускаем XBrackets::Settings и в появившемся окне дважды щелкаем лев.кн.мыши на "Status: the plugin is active", чтобы надпись сменилась на "Status: the plugin is NOT active". При деактивации плагин автоматически сохраняет свои настройки. 2. Открываем файл "XBrackets.ini" (если настройки хранятся в ini-файле) или ключ реестра "HKEY_CURRENT_USER\Software\Akelsoft\AkelPad\Plugs" и меняем настройки плагина XBrackets. Не забываем сохранить изменённый файл "XBrackets.ini". 3. Активируем плагин XBrackets, вызвав функцию XBrackets::Main или запустив XBrackets::Settings и в появившемся окне дважды щелкнув лев.кн.мыши на "Status: the plugin is NOT active". При активации плагин автоматически перечитывает свои настройки. -------- История: -------- v.7.2 (Июль 2016) + настройка 'highlight.hlt_xmode' v.7.1 (Июль 2016) * AkelPad 4.9.8+ v.7.0 (Июль 2016) + теперь настройка "Пропускать экранированные скобки" учитывает расширение файла (точно так же, как настройка "Пропускать скобки после //") v.6.9 (Июль 2016) + ничего не тянем из MSVCR = меньший размер файла v.6.8 (Декабрь 2015) * AkelPad 4.9.7+ + поддержка символа '\0' в строке AEM_GETWORDDELIMITERS v.6.7 (Сентябрь 2015) + теперь Go/SelToMatchingBracket автоматически вызывает XBrackets::Main, если эта функция ещё не активна v.6.6 (Сентябрь 2015) * AkelPad 4.9.5+ v.6.5 (Май 2015) * (уточнение) поддержка перенесенных (wrapped) строк v.6.4 (Апрель 2015) + теперь XBrackets поддерживает перенесенные (wrapped) строки v.6.3 (Апрель 2015) + усовершенствован алгоритм поиска парных кавычек v.6.2 (Апрель 2015) - исправлено: изменение цветовой темы не обрабатывалось должным образом + несколько исправлений/улучшений + новая настройка: Считать " " парой скобок + несколько исправлений/улучшений ещё раз + теперь галочки для пар " ", ' ' и < > поддерживают три состояния: [v] Автозакрытие + подсветка [o] Только подсветка [ ] Выкл. v.6.1 (Март 2015) + добавлена информация про лицензию (см. ниже) v.6.0 (Декабрь 2014) * AkelPad 4.9.1+ v.5.9 (Август 2014) * (оптимизация) уменьшено количество вызовов SPI_GETFONTSMOOTHING v.5.8 (Июнь 2014) - исправлено: не проверялся результат AKD_GETEDITINFO (TRUE или FALSE) v.5.7 (Апрель 2014) * AkelPad 4.8.8+ v.5.6 (Сентябрь 2013) + исправлена перерисовка скобок при включенном ClearType (заимствовано из плагина SpecialChar, спасибо Instructor) * небольшие внутренние изменения + добавлен 'Escaped1FileExts' (пробно) v.5.5 (Июнь 2013) * AkelPad 4.8.4+ v.5.4 (Февраль 2013) * AkelPad 4.8.1+ + 'highlight.br_max_lines' v.5.3 (Сентябрь 2012) + обновления/исправления для цвета фона и стиля шрифта v.5.2 (Сентябрь 2012) - исправлено: цвет фона подсвеченной скобки в выделении - исправлено: не поддерживались игнорируемые стили шрифта из Coder::HighLight v.5.1 (Июль 2012) * AkelPad 4.7.7+ v.5.0 (Май 2012) * AkelPad 4.7.5+ v.4.9 (Февраль 2012) * для AkelPad 4.7.3+ v.4.8 (Декабрь 2011) * для AkelPad 4.7.1+ + добавлено: autocomplete.sel_autobr=2 - исправлено: некорректная подсветка при скобке в позиции переноса строки + добавлено: внешний вызов ("XBrackets::SelToMatchingBracket", 1, lpBuffer) + поддержка внутреннего языка AkelPad v.4.7 (Ноябрь 2011) * для AkelPad 4.7.0+ v.4.6 (Май 2011) - исправлено: ошибка выделения памяти, появившаяся в версии 4.4 (в AutoBracketsFunc при вызове sys_memalloc) v.4.5 (Май 2011) + улучшен алгоритм поиска парной кавычки - исправлено: в многосимвольном комментарии мог подсвечиваться не тот символ v.4.4 (Май 2011) * для AkelPad 4.6.0+ + теперь XBrackets тесно сотрудничает с Coder (при наличии оного) + добавлено: параметры 'hlt_style', 'quote_detect_lines' и 'quote_max_lines' * изменено: к именам всех параметров добавлены префиксы (см. выше) + мелкие исправления/улучшения v.4.3 (Март 2011) + экспериментальный алгоритм для поиска парной кавычки + мелкие исправления/улучшения + поддержка AkelPad x64 v.4.2 (Ноябрь 2010) + несколько мелких улучшений v.4.1 (Ноябрь 2010) * обновлена иконка (спасибо se7h) v.4.0 (Октябрь 2010) * четвёртая годовщина XBrackets :) * для AkelPad 4.5.0+ * убрано: параметр 'hlt_bkgnd' (больше не нужен) + добавлено: настройка как цвета скобок, так и фона + другие мелкие улучшения/исправления + добавлена иконка (спасибо se7h) v.3.8 (Июль 2010) - исправлено: теперь автозакрытие скобок не происходит в read-only файле(-ах) - исправлено: неправильная перерисовка скобок в режиме PMDI v.3.7 (Июнь 2010) * для AkelPad 4.4.4+ v.3.6 (Май 2010) + SettingsDlg: добавлены РУС и УКР языки v.3.5 (Февраль 2010) + при активном 'hlt_bkgnd' цвет подсветки накладывается на цвет выделения v.3.4 (Февраль 2010) + добавлено: параметр 'hlt_bkgnd' - исправлено: после рестарта XBrackets::Main скобки могли не подсвечиваться v.3.3 (Февраль 2010) * для AkelPad 3.7.4+/4.4.0+ v.3.2 (Ноябрь 2009) + изменено: теперь 'sel_autobr = 1' заменяет весь выделенный текст v.3.1 (Ноябрь 2009) + добавлено: параметр 'all_autobr' v.3.0 (Октябрь 2009) * третья годовщина XBrackets :) + улучшено: закрывающую скобку можно напечатать "поверх" добавленной автоматически + добавлено: параметры 'ovr_autobr', 'sel_autobr', 'hlt_bothbr' + добавлено: параметр 'user_brpairs' (пользовательские скобки!) + добавлено: параметры 'next_char_ok' и 'prev_char_ok' + обновлена документация плагина v.2.8 (Август 2009) * для AkelPad 3.7.3+/4.3.0+ v.2.7 (Март 2009) * для AkelPad 3.7.0+/4.2.0+ v.2.6 (Март 2009) + новая функция: SelToMatchingBracket - исправлено: поддержка разделяемых окон в AkelPad 4.1.6 v.2.5 (Февраль 2009) + теперь можно задать типы файлов, в которых игнорируются скобки после // + улучшена поддержка AkelEdit + другие мелкие улучшения/исправления v.2.4 (Декабрь 2008) + закрывающую скобку можно напечатать "поверх" добавленной автоматически + новая настройка: пропуск "экранированных" скобок (после '\') v.2.3 (Август 2008) + некоторые исправления v.2.2 (Август 2008) * для AkelPad 3.6.0+/4.0.1+ + теперь GoToMatchingBracket не требует подсветки скобок + некоторые исправления v.2.1 (Август 2008) + новая функция: GoToMatchingBracket + небольшие оптимизации v.2.0 (Июль 2008) * для AkelPad 3.6.0+ v.1.9 (Апрель 2008) * название плагина изменено на XBrackets + несколько мелких улучшений v.1.8 (Март 2008) - Исправлено: ошибка при закрытии AkelPad 3.5.0 v.1.7 (Январь 2008) + (опционально) автозавершение ' ' + (опционально) автозавершение и подсветка < /> v.1.6 (Ноябрь 2007) + Совместимость с AkelPad 3.4.2+ v.1.5 (Сентябрь 2007) * для AkelPad 3.4.0+ - Исправлено: закомментированные скобки (C/C++/Pascal) обрабатывались некорректно v.1.4 (Август 2007) * для AkelPad 3.3.0+ - Исправлено: подсвеченные скобки оставляли след на панели LineBoard - Исправлено: некоторые внутренние переменные неправильно инициализировались v.1.3 (Июль 2007) * для AkelPad 3.3.0+ + для файлов C/C++/Pascal скобки после // не подсвечиваются + теперь вызов диалога настроек не активирует плагин (AkelBrackets::Main) + теперь плагин может быть активирован/деактивирован из диалога настроек v.1.2 (Март 2007) * для AkelPad 3.3.0+ - границы области редактирования определялись неправильно + (настройка) автозакрытие скобок при уже имеющейся правой скобке + уменьшен размер dll-файла (сборка с помощью Build.cmd) v.1.1 (Февраль 2007) * для AkelPad 3.2.1+ + подсветка активных скобок + диалог настроек v.1.0 (Октябрь 2006) * начальная версия * для AkelPad 3.1.2+ + автозавершение скобок Автор выражает благодарность Александру Шенгальцу aka Instructor за его помощь в создании и тестировании этого плагина. ----------------------------------------------------------- The icon by se7h. ----------------------------------------------------------- (C) Oct 2006 - Jul 2016, Vitaliy Dovgan aka DV dvv81 ukr net Этот плагин является бесплатным (бесплатным как для частного, так и для коммерческого использования); он распространяется на условиях той же лицензии, что AkelPad.