*****************************************************************
***               LineBoard AkelPad plugin v12.6              ***
*****************************************************************

2007-2017 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)


*** 描述 ***

1. 显示行号和列号。
2. 添加书签的支持。

提示:
- 如果在设置中未设置 删除书签 的热键时，那么书签设置的热键以像“设置/删除”的方式工作。


*** 函数 ***

LineBoard::Main
启动和停止插件的主函数。

LineBoard::Settings
设置对话框。


*** 外部调用 ***

Call("LineBoard::Main", 1)
  参数:
    1
      等待插件初始化。

Call("LineBoard::Main", 2, *HEIGHT, *ENABLE)
  参数:
    2
      获取标尺高度。
    *HEIGHT
      指针指向一个接收标尺高度的内存。
    *ENABLE
      可选参数。指针指向一个接收标尺可视性的内存。
  例:
    WScript.Echo(GetRulerHeight());

    function GetRulerHeight()
    {
      var lpHeight;
      var nHeight=0;

      if (lpHeight=AkelPad.MemAlloc(4 /*sizeof(int)*/))
      {
        AkelPad.CallW("LineBoard::Main", 2, lpHeight);
        nHeight=AkelPad.MemRead(lpHeight, 3 /*DT_DWORD*/);
        AkelPad.MemFree(lpHeight);
      }
      return nHeight;
    }

Call("LineBoard::Main", 3, HEIGHT)
  参数:
    3
      设置标尺高度。
    HEIGHT
      标尺高度。
        如果新的标尺高度等于当前的，那么标尺将被隐藏 (高度设置为 0)。
        如果为 -1, 那么反转标尺的可视性。


Call("LineBoard::Main", 4, *BOOL)
  参数:
    4
      显示/隐藏面板。
    *BOOL
      可选参数。指针指向一个接收面板可视情况的变量。
  例 (获取面板可视情况):
    WScript.Echo(IsLineBoardVisible());

    function IsLineBoardVisible()
    {
      var lpVisible;
      var bVisible=false;

      if (lpVisible=AkelPad.MemAlloc(4 /*sizeof(BOOL)*/))
      {
        AkelPad.CallW("LineBoard::Main", 4, lpVisible);
        bVisible=AkelPad.MemRead(lpVisible, 3 /*DT_DWORD*/);
        AkelPad.MemFree(lpVisible);
      }
      return bVisible;
    }

Call("LineBoard::Main", 11, WINDOW, DOCUMENT, *RECT)
  参数:
    11
      获取矩形外面板。
    WINDOW
      编辑窗口句柄。
    DOCUMENT
      编辑文档句柄。
    *RECT
      指针指向一个接收矩形外面板的内存。
        RECT.left - 行号面板宽度。
        RECT.top - 标尺高度。
        RECT.right - 编辑窗口客户端区域的右边边缘。
        RECT.bottom - 编辑窗口客户端区域的底边边缘。
  例:
    WScript.Echo(GetBoardWidth(AkelPad.GetEditWnd(), 0));

    function GetBoardWidth(hWndEdit, hDocEdit)
    {
      var lpRect;
      var nWidth=0;

      if (lpRect=AkelPad.MemAlloc(16 /*sizeof(RECT)*/))
      {
        AkelPad.CallW("LineBoard::Main", 11, hWndEdit, hDocEdit, lpRect);
        nWidth=AkelPad.MemRead(lpRect + 0 /*offsetof(RECT, left)*/, 3 /*DT_DWORD*/);
        AkelPad.MemFree(lpRect);
      }
      return nWidth;
    }

Call("LineBoard::Main", 12, WINDOW, DOCUMENT, *BOOKMARK, *BOOKMARKLENGTH)
  参数:
    12
      获取书签行号集合的字符串。
    WINDOW
      编辑窗口句柄。
    DOCUMENT
      编辑文档句柄。
    *BOOKMARK
      指针指向一个接收以逗号分隔的书签行号的集合的字符串。可以为 NULL。字符串类型为 Unicode。
    *BOOKMARKLENGTH
       BOOKMARK 的字符数。可以为 NULL。
  例:
    WScript.Echo(GetBookmarksString(AkelPad.GetEditWnd(), 0));

    function GetBookmarksString(hWndEdit, hDocEdit)
    {
      var pBookmarksStr="";
      var lpBookmarksStr;
      var nBookmarksLen;
      var lpBookmarksLen;

      if (lpBookmarksLen=AkelPad.MemAlloc(4 /*sizeof(int)*/))
      {
        AkelPad.CallW("LineBoard::Main", 12, hWndEdit, hDocEdit, 0, lpBookmarksLen);

        if ((nBookmarksLen=AkelPad.MemRead(lpBookmarksLen, 3 /*DT_DWORD*/)) > 1)
        {
          if (lpBookmarksStr=AkelPad.MemAlloc(nBookmarksLen * 2 /*sizeof(wchar_t)*/))
          {
            AkelPad.CallW("LineBoard::Main", 12, hWndEdit, hDocEdit, lpBookmarksStr, 0);
            pBookmarksStr=AkelPad.MemRead(lpBookmarksStr, 1 /*DT_UNICODE*/);
            AkelPad.MemFree(lpBookmarksStr);
          }
        }
        AkelPad.MemFree(lpBookmarksLen);
      }
      return pBookmarksStr;
    }

Call("LineBoard::Main", 13, WINDOW, DOCUMENT, "BOOKMARK")
  参数:
    13
      设置书签。
    WINDOW
      编辑窗口句柄。
    DOCUMENT
      编辑文档句柄。
    "BOOKMARK"
      以逗号分隔的书签行号的集合的字符串。例如: "10,14,20"。

Call("LineBoard::Main", 14, WINDOW, DOCUMENT)
  参数:
    14
      删除所有书签。
    WINDOW
      可选参数。编辑窗口句柄。
    DOCUMENT
      可选参数。编辑文档句柄。

Call("LineBoard::Main", 15, WINDOW, DOCUMENT)
  参数:
    15
      为当前行设置书签，或若未为删除书签设置快捷键时就切换书签。
    WINDOW
      可选参数。编辑窗口句柄。
    DOCUMENT
      可选参数。编辑文档句柄。

Call("LineBoard::Main", 16, WINDOW, DOCUMENT)
  参数:
    16
      从当前行删除书签。
    WINDOW
      可选参数。编辑窗口句柄。
    DOCUMENT
      可选参数。编辑文档句柄。

Call("LineBoard::Main", 17, WINDOW, DOCUMENT)
  参数:
    17
      显示书签菜单。
    WINDOW
      可选参数。编辑窗口句柄。
    DOCUMENT
      可选参数。编辑文档句柄。

Call("LineBoard::Main", 18, WINDOW, DOCUMENT)
  参数:
    18
      转到下一个书签。
    WINDOW
      可选参数。编辑窗口句柄。
    DOCUMENT
      可选参数。编辑文档句柄。

Call("LineBoard::Main", 19, WINDOW, DOCUMENT)
  参数:
    19
      转到上一个书签。
    WINDOW
      可选参数。编辑窗口句柄。
    DOCUMENT
      可选参数。编辑文档句柄。
