-----------------------------------------------------------
XBrackets - плагин для текстового редактора AkelPad
-----------------------------------------------------------

Плагин позволяет:
1) автозавершить скобки ([{""}]) - т.е. он добавляет
   соответствующую правую скобку при печати левой скобки.
   Плагин использует "умное" автозавершение:
   - для скобок ([{ анализируется следующий символ;
   - для кавычек " анализируются следующий и предыдущий
     символы.
2) подсветить активные скобки - т.е. он подсвечивает
   скобку под курсором и соответствующую ей парную скобку.
3) перейти к парной скобке - функция GoToMatchingBracket
   или GoToNearestBracket.
4) выделить текст между парными скобками - функция
   SelToMatchingBracket или SelToNearestBrackets.

Примечание:
Чтобы избежать перерисовки подсвеченных активных скобок,
функция XBrackets::Main должна быть загружена ПОСЛЕ
Coder::HighLight.
Для работы функций GoToMatchingBracket и SelToMatchingBracket,
а также для GoToNearestBracket и SelToNearestBrackets, плагин
должен быть активен - то есть должна быть активна его функция
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
    При печати открывающей скобки выделенный текст заключается в
    соответствующую пару скобок, причём эта пара скобок также становится
    выделенной. Если выделенный текст уже начинается и заканчивается
    соответствующей парой скобок, эти скобки будут удалены.
  autocomplete.sel_autobr = 3
    При печати открывающей скобки выделенный текст заключается в
    соответствующую пару скобок, причём эта пара скобок _не_ становится
    выделенной. Если выделенный текст уже начинается и заканчивается
    соответствующей парой скобок, эти скобки будут удалены. Если же
    окружающие скобки не выделены, они не будут удалены. (Этот режим был
    вдохновлён редактором Sublime Text.)
  autocomplete.sel_autobr = 4
    При печати открывающей скобки выделенный текст заключается в
    соответствующую пару скобок, причём эта пара скобок _не_ становится
    выделенной. Если выделенный текст уже начинается и заканчивается
    соответствующей парой скобок, эти скобки будут удалены. Если окружающие
    скобки не выделены (при этом обрамляя выделенный текст слева и справа),
    они тоже будут удалены. Таким образом, печать левой скобки/кавычки окружает
    выделенный текст соответствующей парой скобок/кавычек, и повторная печать
    левой скобки/кавычки убирает обрамляющие скобки/кавычки. (Этот режим был
    вдохновлён редактором Sublime Text.)

  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 означает "без ограничения" - т.е. до конца файла.

  nearestbr.goto_flags = 0
    Эта настройка управляет поведением функции GoToNearestBracket.
    Значением настройки будет сумма следующих чисел:
    0 - (по умолчанию) каретка идёт к ближайшей скобке (либо левой, либо
        правой), оставаясь внутри скобок (либо после левой скобки, либо
        перед правой скобкой);
    1 - каретка идёт к скобке и за неё, оставаясь вне скобок (либо перед
        левой скобкой, либо после правой скобки);
    16 - каретка всегда идёт к левой скобке;
    32 - каретка всегда идёт к правой скобке.
    Когда используется сумма (16 + 32), она обрабатывается как 16.

  nearestbr.selto_flags = 2
    Эта настройка управляет поведением функции SelToNearestBrackets.
    Значением настройки будет сумма следующих чисел:
    0 - окружающие скобки либо включаются, либо не включаются в выделение,
        в зависимости от положения каретки;
    1 - окружающие скобки всегда включаются в выделение;
    2 - повторные вызовы SelToNearestBrackets расширяют выделение ближайших
        скобок (то есть выделение внутри скобок превращается в выделение
        снаружи скобок, а при повторных вызовах ищутся ближайшие окружающие
        скобки).

  nearestbr.max_lines = 0
    Количество строк, которые просматривает XBrackets в поисках ближайшей
    пары скобок.
    Значение 1 означает "в пределах текущей строки".
    Значение 0 означает "без ограничения" - т.е. до конца файла.

  gotobr.lines_vis_up = 1
    Количество строк, которые должны быть видны над активной скобкой сразу после
    вызова "GoToMatchingBracket", "SelToMatchingBracket", "GoToNearestBracket"
    или "SelToNearestBrackets". См. также: 'gotobr.pair_line_diff'.

  gotobr.lines_vis_down = 0
    Количество строк, которые должны быть видны под активной скобкой сразу после
    вызова "GoToMatchingBracket", "SelToMatchingBracket", "GoToNearestBracket"
    или "SelToNearestBrackets". См. также: 'gotobr.pair_line_diff'.

  gotobr.pair_line_diff = 1
    Минимальная разность, в строках, между позициями открывающей и закрывающей
    скобки, при которой применяются настройки 'gotobr.lines_vis_up' и
    'gotobr.lines_vis_down'.
    Например:
    0 - открывающая и закрывающая скобки могут быть на одной строке.
    1 - открывающая и закрывающая скобки не должны быть на одной строке.
    2 - открывающая и закрывающая скобки не должны быть на соседних строках.
    3 - должно быть хотя бы 2 строки между открывающей и закрывающей скобками.
    И так далее.
    Если фактическая разность между позициями открывающей и закрывающей скобки
    меньше указанного значения, настройки 'lines_vis_up' и 'lines_vis_down'
    игнорируются - и дополнительная прокрутка строк не происходит.

Дополнительные настройки плагина можно менять, не закрывая 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.8.2 (Декабрь 2024)
 * Слава Україні! Героям слава!
 - исправлено: скобки не подсвечивались в новой созданной вкладке в режиме PMDI
 - исправлено: GoToNearestBracket могла не сработать внутри HTML тегов
 * уменьшен размер 64-битной версии XBrackets.dll
 * некоторые внутренние улучшения

v.8.1 (Март 2024)
 * Слава Україні! Героям слава!
 + добавлено: gotobr.lines_vis_up, gotobr.lines_vis_down и gotobr.pair_line_diff
 - исправлено: убрано мигание подсвеченных скобок при закрытии AkelPad

v.8.0 (Январь 2024)
 * Слава Україні! Героям слава!
 + добавлено: расширенная настройка для "Считать '' парой скобок"
 - исправлено: функция GetNearestBracketsRange не учитывала, что вызов
   NearestBr_GetFoldOrQuoteFromAkelEdit может вернуть не ту пару скобок

v.7.9 (Июнь 2023)
 * Слава Україні! Героям слава!
 - исправлено: при вставке текста в только что созданный документ (сразу после
   Файл -> Новый), скобки не подсвечивались пока окно редактирования не теряло
   фокус и не получало фокус опять

v.7.8 (Май 2022)
 + улучшено поведение при запуске AkelPad
 + небольшой рефакторинг для OnEditGetActiveBrackets

v.7.7 (Апрель 2021)
 + добавлено: nearestbr.selto_flags = 2 (расширяет выделение ближайших скобок)

v.7.6 (Апрель 2021)
 - исправлено: при вызове GoToNearestBracket и SelToNearestBrackets
   функция NearestBr_ApplyStateToRange теперь проверяет условие
   nLeftBrPos < nRightBrPos

v.7.5 (Октябрь 2018)
 * небольшие уточнения в GoToNearestBracket/SelToNearestBrackets
 * 12 лет XBrackets! :)

v.7.4 (Сентябрь 2018)
 + новые функции: GoToNearestBracket, SelToNearestBrackets
 + новые настройки: nearestbr.goto_flags, nearestbr.selto_flags
 + теперь повторный вызов SelToMatchingBracket и SelToNearestBrackets
   перемещает каретку из конца выделения в начало выделения и наоборот

v.7.3 (Июнь 2018)
 + добавлено: autocomplete.sel_autobr=3 и 4

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 - Dec 2024, Vitaliy Dovgan aka DV
          dvv81 <at> ukr <dot> net

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