-----------------------------------------------------------
AkelPad 文本编辑器 XBrackets 插件
-----------------------------------------------------------

这个插件可以:
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) 每个括号对必须由两个字符组成：第一个字符定义为左（开）括符，第二个字符定义为右（关）括符。如果只自定义一个字符或三个或以上字符为一个括号对，这个括号对被被忽略掉。
    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' 集合)。这个规则还依赖于选项 "即使存在相应的右括号"。
  autocomplete.all_autobr = 2
    在任意字符之后的括号可以被自动完成 (也就是忽略了 'prev_char_ok' 集合)。这个规则仅应用于开和关符号相同的括号对 (如 "" 或 '')。
  autocomplete.all_autobr = 3
    在任意字符之前和之后的括号可以被自动完成 (也就是忽略了 'next_char_ok' 和 'prev_char_ok' 集合)。

  autocomplete.ovr_autobr = 0
    在覆盖模式中，不自动添加右 (关) 括号。
  autocomplete.ovr_autobr = 1
    在覆盖模式中，自动添加右 (关) 括号作为一个新字符 (不覆盖已经存在的字符)。
  autocomplete.ovr_autobr = 2
    在覆盖模式中，右 (关) 括号代替已经存在的字符 (也就是越过该字符)。

  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 (highlight, quotes);
    4 - 使用 AEM_FINDFOLD (folding blocks).

  highlight.quote_detect_lines = 1
    当在前后方向 (当搜索的方向不能确定时，例:  "  " ) 搜索匹配引号时的文本的行数。
    如果这个值大于 'highlight.quote_max_lines'，它将会减少为 'highlight.quote_max_lines' 的值。
    值为 1 时表示 "在当前行"。
    值为 0 时表示禁止在那种情况下搜索匹配的引号。

  highlight.quote_max_lines = 10
    当在某一方向 (当搜索的方向能够确定时，例:  "a b" ) 搜索匹配引号时的文本的行数。
    值为 1 时表示 "在当前行"。
    值为 0 时表示禁止搜索匹配的引号。

  highlight.br_max_lines = 0
    Number of text lines to be processed by XBrackets 搜索一对括号时处理的文本行数。
    值为 0 时表示 "无限制的" - 也就是说到达文件末尾。

插件允许您在未关闭 AkelPad 的情况下更改额外的选项。
需要三个步骤，如下:
  1a. 打开“插件”窗口 (设置 -> 插件...) 然后禁用函数 XBrackets::Main (如果它正处于活动状态)。
  1b. (可选) 运行 XBrackets::Settings 和双击 (鼠标左键) 标题 "状态: 插件正在运行中"。结果应该是标题将会变为 "状态: 插件未在运行中"。
当您反激活插件时将会自动保存它的设置。
  2. 打开文件 "XBrackets.ini" (如果设置是存储在一个 .ini 文件的话)
或者注册表键 "HKEY_CURRENT_USER\Software\Akelsoft\AkelPad\Plugs" 并更改 XBrackets 插件所需的选项。
别忘了保存修改好的 "XBrackets.ini" 文件。
  3. 通过调用函数 XBrackets::Main 来激活 XBrackets 插件，或通过运行函数 XBrackets::Settings 并双击 (鼠标左键) 标题 "状态: 插件未在运行中"。
当您激活插件时将会重新读取它的设置。

--------
历史:
--------
v.7.2 (七月 2016)
 + 选项 'highlight.hlt_xmode'

v.7.1 (七月 2016)
 * AkelPad 4.9.8+

v.7.0 (七月 2016)
 + 现在 "Skip escaped brackets" 选项根据文件扩展名 (和 "Skip brackets after //" 选项操作的方法相同)

v.6.9 (七月 2016)
 + 去除 MSVCR 的 stuff ，体积更小了

v.6.8 (十二月 2015)
 * AkelPad 4.9.7+
 + 支持 AEM_GETWORDDELIMITERS 字符串内的 '\0' 符号

v.6.7 (九月 2015)
 + 现在 Go/SelToMatchingBracket 若 XBrackets::Main 未正在运行中就自动调用它

v.6.6 (九月 2015)
 * AkelPad 4.9.5+

v.6.5 (五月 2015)
 * (纠正) 自动换行支持

v.6.4 (四月 2015)
 + 现在 XBrackets 支持自动换行

v.6.3 (四月 2015)
 + 改进成对引号检测的算法

v.6.2 (四月 2015)
 - 修正: 颜色主题更改出错
 + 多个改进/修正
 + 新选项: 把 " " 当作括号
 + 再次多个改进/修正
 +  " "、' ' 和 < > 括号对的复选框现在有 3 种状态了:
   [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' (TBD)

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)
 - 修正: 选定区域中的高亮显示括号的背景颜色
 - 修正: XBrackets 不支持忽略的 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)
 - 修正: 出现在 v.4.4 中的内存分配缺陷 (在 AutoBracketsFunc 中，当调用 sys_memalloc 时)

v.4.5 (五月 2011)
 + 改进引号对搜索算法
 - 修正: 在多字节注释中出现符号的错误高亮显示

v.4.4 (五月 2011)
 * 可用于 AkelPad 4.6.0+
 + 现在 XBrackets 与 Coder 更和谐相处了(如果 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)
 - 修正: 现在在只读文件中不自动完成括号了
 - 修正: 在 PMDI 模式中的不正确括号重绘

v.3.7 (六月 2010)
 * 可用于 AkelPad 4.4.4+

v.3.6 (五月 2010)
 + SettingsDlg: 添加 RUS 和 UKR 语言

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)
 + 更改: 现在 'autocomplete.sel_autobr = 1' 替换整个选定的文本

v.3.1 (十一月 2009)
 + 添加: 参数 'autocomplete.all_autobr'

v.3.0 (十月 2009)
 * XBrackets 三周年纪念日 :)
 + 改进: 您可以自动地 "覆盖键入" 添加的关括号
 + 添加: 参数 'autocomplete.ovr_autobr', 'autocomplete.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+
 + 自动完成括号


作者对 Aleksander Shengalts (Instructor) 对于创建和测试这个插件的帮助表示他的谢意。
-----------------------------------------------------------
Se7h 提供图标。
-----------------------------------------------------------
(C) 2006 十月 - 2016 七月, Vitaliy Dovgan aka DV
          dvv81 <at> ukr <dot> net
