-----------------------------------------------------------
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.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.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 <at> ukr <dot> net

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