Code: Select all
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=34456#p34456
// Version: 0.3
// Author: Vitaliy Dovgan aka DV... Модернизировал AZJIO
//
// *** Command Palette: AkelPad's and Plugins' commands ***
//
// Description(1049): Быстрый поиск пунктов меню по мере набора части текста и их выполнение
// Добавил Exec
//
var ShowCmdIds = true; // true -> "[4153] Edit: Cut", false -> "Edit: Cut"
var ID_PLUGIN = -1;
var ID_SCRIPT = -2;
var Commands = [];
// var Commands1 = [];
// Windows Messages...
var WM_CREATE = 0x0001;
var WM_DESTROY = 0x0002;
var WM_SETFOCUS = 0x0007;
var WM_SETREDRAW = 0x000B;
var WM_CLOSE = 0x0010;
var WM_SETFONT = 0x0030;
var WM_GETFONT = 0x0031;
var WM_KEYDOWN = 0x0100;
var WM_CHAR = 0x0102;
var WM_SYSKEYDOWN = 0x0104;
var WM_COMMAND = 0x0111;
var EM_GETSEL = 0x00B0;
var EM_SETSEL = 0x00B1;
var EM_REPLACESEL = 0x00C2;
var LB_ADDSTRING = 0x0180;
var LB_RESETCONTENT = 0x0184;
var LB_SETCURSEL = 0x0186;
var LB_GETCURSEL = 0x0188;
var LB_GETTEXT = 0x0189;
var LB_GETITEMDATA = 0x0199;
var LB_SETITEMDATA = 0x019A;
var LBN_DBLCLK = 2;
// Windows Constants...
var TRUE = 1;
var FALSE = 0;
var VK_BACK = 0x08; // BackSpace
var VK_TAB = 0x09;
var VK_RETURN = 0x0D; // Enter
var VK_CONTROL = 0x11; // Ctrl
var VK_ESCAPE = 0x1B;
var VK_PRIOR = 0x21; // Page Up
var VK_NEXT = 0x22; // Page Down
var VK_END = 0x23;
var VK_HOME = 0x24;
var VK_LEFT = 0x25;
var VK_UP = 0x26;
var VK_RIGHT = 0x27;
var VK_DOWN = 0x28;
var VK_DELETE = 0x2E;
var SW_SHOWNA = 8;
var SW_RESTORE = 9;
var DEFAULT_GUI_FONT = 17;
var MB_OK = 0x0000;
var MB_ICONERROR = 0x0010;
var MB_ICONWARNING = 0x0030;
var WS_TABSTOP = 0x00010000;
var WS_SYSMENU = 0x00080000;
var WS_HSCROLL = 0x00100000;
var WS_VSCROLL = 0x00200000;
var WS_BORDER = 0x00800000;
var WS_CAPTION = 0x00C00000;
var WS_VISIBLE = 0x10000000;
var WS_CHILD = 0x40000000;
var WS_POPUP = 0x80000000;
var ES_AUTOHSCROLL = 0x0080;
var LBS_NOTIFY = 0x0001;
var LBS_SORT = 0x0002;
var LBS_USETABSTOPS = 0x0080;
var LANGID_FULL = 0;
var LANGID_PRIMARY = 1;
var LANGID_SUB = 2;
// AkelPad Constants...
var DT_ANSI = 0;
var DT_UNICODE = 1;
var DT_QWORD = 2;
var DT_DWORD = 3;
var DT_WORD = 4;
var DT_BYTE = 5;
// The Program...
var oSys = AkelPad.SystemFunction();
var hInstDLL = AkelPad.GetInstanceDll();
var sClassName = "AkelPad::Scripts::" + WScript.ScriptName + "::" + hInstDLL;
var hWndDlg;
var hWndFilterEdit;
var hWndCommandsListBox;
var hSubclassFilterEdit;
var hSubclassCommandsListBox;
var sCmdFilter = "";
var sCmdFilter0 = "";
var nCmdIndex = -1;
var nCmdIndex0 = -1;
ReadLngFile();
if (hWndDlg = oSys.Call("User32::FindWindowEx" + _TCHAR, 0, 0, sClassName, 0)) {
if (!oSys.Call("User32::IsWindowVisible", hWndDlg))
oSys.Call("User32::ShowWindow", hWndDlg, SW_SHOWNA);
if (oSys.Call("User32::IsIconic", hWndDlg))
oSys.Call("User32::ShowWindow", hWndDlg, SW_RESTORE);
oSys.Call("User32::SetForegroundWindow", hWndDlg);
} else {
var sScripName = "Command Palette";
var ActionItem = undefined;
var ID = 0;
var CLASS = 1;
var HWND = 2;
var EXSTYLE = 3;
var STYLE = 4;
var X = 5;
var Y = 6;
var W = 7;
var H = 8;
var TXT = 9;
var aWnd = [];
var IDC_ED_FILTER = 1011;
var IDC_LB_ITEMS = 1021;
var hGuiFont;
var hWndEdit = AkelPad.GetEditWnd();
var hFontEdit = AkelPad.SendMessage(hWndEdit, WM_GETFONT, 0, 0);
if (hFontEdit) {
hGuiFont = hFontEdit;
} else {
hGuiFont = oSys.Call("Gdi32::GetStockObject", DEFAULT_GUI_FONT);
}
var nDlgWidth = 600;
var nDlgHeight = 570;
var hMainWnd = AkelPad.GetMainWnd();
var rectWnd = GetWindowRect(hMainWnd);
var nEdStyle = WS_VISIBLE | WS_CHILD | WS_TABSTOP | ES_AUTOHSCROLL;
var nLbStyle = WS_VISIBLE | WS_CHILD | WS_VSCROLL | WS_BORDER | WS_TABSTOP | LBS_USETABSTOPS | LBS_NOTIFY;
//Windows ID, CLASS, HWND,EXSTYLE, STYLE, X, Y, W, H, TXT
aWnd.push([IDC_ED_FILTER, "EDIT", 0, 0, nEdStyle, 2, 4, -1, 20, ""]);
aWnd.push([IDC_LB_ITEMS, "LISTBOX", 0, 0, nLbStyle, 2, 26, -1, -1, ""]);
ReadWriteIni(false);
AkelPad.ScriptNoMutex(0x11 /*ULT_LOCKSENDMESSAGE|ULT_UNLOCKSCRIPTSQUEUE*/ );
AkelPad.WindowRegisterClass(sClassName);
hWndDlg = oSys.Call("User32::CreateWindowEx" + _TCHAR,
0, // dwExStyle
sClassName, // lpClassName
sScripName, // lpWindowName
WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU, // style
rectWnd.X + Math.floor((rectWnd.W - nDlgWidth) / 2), // x
rectWnd.Y + 40, // y
nDlgWidth, // nWidth
nDlgHeight, // nHeight
hMainWnd, // hWndParent
0, // ID
hInstDLL, // hInstance
DialogCallback); // Script function callback. To use it class must be registered by WindowRegisterClass.
AkelPad.WindowGetMessage();
AkelPad.WindowUnregisterClass(sClassName);
if (ActionItem != undefined) {
oSys.Call("User32::SetFocus", hMainWnd);
// if (ActionItem[0] == ID_PLUGIN)
var idx = ActionItem[0]
// WScript.Echo('=' + idx);
// WScript.Echo('0 = ' + ActionItem[0] + '\n1 = ' + ActionItem[1]);
// WScript.Echo('0 = ' + Commands[idx][0] + '\n1 = ' + Commands[idx][1] + '\n2 = ' + Commands[idx][2] + '\n3 = ' + Commands[idx][3]);
// WScript.Echo('0 = ' + Commands[idx][0] + '\n1 = ' + Commands[idx][1] + '\n2 = ' + Commands[idx][2]);
// WScript.Quit();
if (/^\d\d\d\d$/g.test(Commands[idx][2])) {
// AkelPad.Command(ActionItem[0]);
AkelPad.Command(Commands[idx][2]);
} else if (/^\w+::\w+$/g.test(Commands[idx][2])) {
AkelPad.Call(Commands[idx][2]);
} else if (/^\w+?.js$/g.test(Commands[idx][2])) {
AkelPad.Call("Scripts::Main", 1, Commands[idx][2], Commands[idx][3]);
} else if (/^ex$/g.test(Commands[idx][3])) {
AkelPad.Exec(Commands[idx][2]);
}
}
}
function IsCtrlPressed() {
return oSys.Call("User32::GetKeyState", VK_CONTROL) & 0x8000;
}
function DialogCallback(hWnd, uMsg, wParam, lParam) {
if (uMsg == WM_CREATE) {
var i;
var w, h;
var rectClient;
var hLbWnd;
rectClient = GetClientRect(hWnd);
for (i = 0; i < aWnd.length; ++i) {
w = (aWnd[i][W] < 0) ? (rectClient.W - 2 * aWnd[i][X]) : aWnd[i][W];
h = (aWnd[i][H] < 0) ? (rectClient.H - aWnd[i][Y]) : aWnd[i][H];
aWnd[i][HWND] =
oSys.Call("User32::CreateWindowEx" + _TCHAR,
aWnd[i][EXSTYLE], //dwExStyle
aWnd[i][CLASS], //lpClassName
0, //lpWindowName
aWnd[i][STYLE], //dwStyle
aWnd[i][X], //x
aWnd[i][Y], //y
w, //nWidth
h, //nHeight
hWnd, //hWndParent
aWnd[i][ID], //ID
hInstDLL, //hInstance
0); //lpParam
SetWndFont(aWnd[i][HWND], hGuiFont);
}
hWndFilterEdit = oSys.Call("User32::GetDlgItem", hWnd, IDC_ED_FILTER);
hWndCommandsListBox = oSys.Call("User32::GetDlgItem", hWnd, IDC_LB_ITEMS);
if (sCmdFilter == "") {
FillCommandsListBox(hWndCommandsListBox, undefined);
} else {
oSys.Call("User32::SetWindowTextW", hWndFilterEdit, sCmdFilter);
i = sCmdFilter.length;
AkelPad.SendMessage(hWndFilterEdit, EM_SETSEL, 0, -1);
FillCommandsListBox(hWndCommandsListBox, sCmdFilter);
}
if (nCmdIndex != -1) {
AkelPad.SendMessage(hWndCommandsListBox, LB_SETCURSEL, nCmdIndex, 0);
}
oSys.Call("User32::SetFocus", hWndFilterEdit);
hSubclassFilterEdit = AkelPad.WindowSubClass(hWndFilterEdit, FilterEditCallback);
hSubclassCommandsListBox = AkelPad.WindowSubClass(hWndCommandsListBox, CommandsListBoxCallback);
} else if (uMsg == WM_KEYDOWN) {
if (wParam == VK_ESCAPE) {
sCmdFilter = "";
nCmdIndex = -1;
oSys.Call("User32::PostMessage" + _TCHAR, hWnd, WM_CLOSE, 0, 0);
} else if (wParam == VK_RETURN) {
ActionItem = GetLbCurSelItem(hWndCommandsListBox);
oSys.Call("User32::PostMessage" + _TCHAR, hWnd, WM_CLOSE, 0, 0);
}
} else if (uMsg == WM_COMMAND) {
if (HIWORD(wParam) == LBN_DBLCLK) {
if (LOWORD(wParam) == IDC_LB_ITEMS) {
ActionItem = GetLbCurSelItem(hWndCommandsListBox);
oSys.Call("User32::PostMessage" + _TCHAR, hWnd, WM_CLOSE, 0, 0);
}
}
} else if (uMsg == WM_CLOSE) {
ReadWriteIni(true);
oSys.Call("User32::DestroyWindow", hWnd); // Destroy dialog
} else if (uMsg == WM_DESTROY) {
oSys.Call("User32::PostQuitMessage", 0); // Exit message loop
}
return 0;
}
function FilterEditCallback(hWnd, uMsg, wParam, lParam) {
if (uMsg == WM_KEYDOWN) {
if ((wParam == VK_BACK) || (wParam == VK_DELETE)) {
if ((wParam == VK_BACK) && IsCtrlPressed()) {
var n1, n2;
n2 = LOWORD(AkelPad.SendMessage(hWnd, EM_GETSEL, 0, 0));
AkelPad.WindowNextProc(hSubclassFilterEdit, hWnd, uMsg, VK_LEFT, 0);
n1 = LOWORD(AkelPad.SendMessage(hWnd, EM_GETSEL, 0, 0));
AkelPad.SendMessage(hWndFilterEdit, EM_SETSEL, n1, n2);
AkelPad.SendMessage(hWndFilterEdit, EM_REPLACESEL, 1, "");
} else
AkelPad.WindowNextProc(hSubclassFilterEdit, hWnd, uMsg, wParam, lParam);
sCmdFilter = GetWindowText(hWnd);
FillCommandsListBox(hWndCommandsListBox, sCmdFilter);
AkelPad.WindowNoNextProc(hSubclassFilterEdit);
return 0;
}
if ((wParam == VK_DOWN) || (wParam == VK_UP) ||
(wParam == VK_PRIOR) || (wParam == VK_NEXT)) {
AkelPad.SendMessage(hWndCommandsListBox, uMsg, wParam, lParam);
AkelPad.WindowNoNextProc(hSubclassFilterEdit);
return 0;
}
} else if (uMsg == WM_CHAR) {
if ((wParam == 0x7F) && IsCtrlPressed()) // 0x7F is Ctrl+Backspace. Why? Ask M$
{
// do nothing
} else {
AkelPad.WindowNextProc(hSubclassFilterEdit, hWnd, uMsg, wParam, lParam);
sCmdFilter = GetWindowText(hWnd);
FillCommandsListBox(hWndCommandsListBox, sCmdFilter);
}
AkelPad.WindowNoNextProc(hSubclassFilterEdit);
return 0;
}
}
function CommandsListBoxCallback(hWnd, uMsg, wParam, lParam) {
if (uMsg == WM_KEYDOWN) {
if ((wParam == VK_DOWN) || (wParam == VK_UP) ||
(wParam == VK_PRIOR) || (wParam == VK_NEXT) ||
(wParam == VK_HOME) || (wParam == VK_END)) {
// default processing
} else {
AkelPad.SendMessage(hWndFilterEdit, uMsg, wParam, lParam);
oSys.Call("User32::SetFocus", hWndFilterEdit);
AkelPad.WindowNoNextProc(hSubclassCommandsListBox);
return 0;
}
} else if (uMsg == WM_CHAR) {
AkelPad.SendMessage(hWndFilterEdit, uMsg, wParam, lParam);
oSys.Call("User32::SetFocus", hWndFilterEdit);
AkelPad.WindowNoNextProc(hSubclassCommandsListBox);
return 0;
}
}
function GetWindowRect(hWnd) {
var oRect = new Object();
var lpRect = AkelPad.MemAlloc(16); //sizeof(RECT)
oSys.Call("User32::GetWindowRect", hWnd, lpRect);
oRect.X = AkelPad.MemRead(_PtrAdd(lpRect, 0), DT_DWORD);
oRect.Y = AkelPad.MemRead(_PtrAdd(lpRect, 4), DT_DWORD);
oRect.W = AkelPad.MemRead(_PtrAdd(lpRect, 8), DT_DWORD) - oRect.X;
oRect.H = AkelPad.MemRead(_PtrAdd(lpRect, 12), DT_DWORD) - oRect.Y;
AkelPad.MemFree(lpRect);
return oRect;
}
function GetClientRect(hWnd) {
var oRect = new Object();
var lpRect = AkelPad.MemAlloc(16); //sizeof(RECT)
oSys.Call("User32::GetClientRect", hWnd, lpRect);
oRect.X = AkelPad.MemRead(_PtrAdd(lpRect, 0), DT_DWORD);
oRect.Y = AkelPad.MemRead(_PtrAdd(lpRect, 4), DT_DWORD);
oRect.W = AkelPad.MemRead(_PtrAdd(lpRect, 8), DT_DWORD) - oRect.X;
oRect.H = AkelPad.MemRead(_PtrAdd(lpRect, 12), DT_DWORD) - oRect.Y;
AkelPad.MemFree(lpRect);
return oRect;
}
function SetWndFont(hWnd, hFont) {
AkelPad.SendMessage(hWnd, WM_SETFONT, hFont, TRUE);
}
function GetWindowText(hWnd) {
var nMaxTextLen = 1024;
var lpText = AkelPad.MemAlloc(nMaxTextLen * 2);
oSys.Call("User32::GetWindowTextW", hWnd, lpText, nMaxTextLen);
var S = AkelPad.MemRead(lpText, DT_UNICODE);
AkelPad.MemFree(lpText);
return S;
}
function GetLbCurSelItem(hLbWnd) {
var n = AkelPad.SendMessage(hLbWnd, LB_GETCURSEL, 0, 0);
if (n < 0)
n = 0;
nCmdIndex = n;
var S = "";
var Id = AkelPad.SendMessage(hLbWnd, LB_GETITEMDATA, n, 0);
// if (Id == ID_PLUGIN)
// {
var nMaxTextLen = 1024;
var lpText = AkelPad.MemAlloc(nMaxTextLen * 2);
AkelPad.SendMessage(hLbWnd, LB_GETTEXT, n, lpText);
S = AkelPad.MemRead(lpText, DT_UNICODE);
AkelPad.MemFree(lpText);
// }
return [Id, getInitialCmdText(S)];
}
function MatchFilter(sFilter, sLine) {
var i;
var j;
var m;
i = sLine.indexOf(sFilter);
if (i != -1) {
m = "" + i;
while (m.length < 3) m = "0" + m;
return "e" + m; // exact match
}
j = 0;
m = "";
for (i = 0; i < sFilter.length; i++) {
j = sLine.indexOf(sFilter.substr(i, 1), j);
if (j == -1)
return ""; // no match
while (m.length < j) m = m + "x";
m = m + "v";
++j;
}
return "p" + m; // partial match
}
function compareByCommand(a, b) {
if ((a[2] < b[2]) || (a[2] == b[2] && a[1] < b[1]))
return -1;
if ((a[2] > b[2]) || (a[2] == b[2] && a[1] > b[1]))
return 1;
return 0;
}
function getFullCmdText(cmdText, cmdId) {
if (ShowCmdIds) {
// cmdText = "[" + cmdId + "] " + cmdText;
if (/^\d\d\d\d$/g.test(Commands[cmdId][2])) {
cmdText = "[" + Commands[cmdId][2] + "] " + cmdText;
} else if (/^\w+::\w+$/g.test(Commands[cmdId][2])) {
cmdText = "[::] " + cmdText;
} else if (/^\w+?.js$/g.test(Commands[cmdId][2])) {
cmdText = "[js] " + cmdText;
} else if (/^ex$/g.test(Commands[cmdId][3])) {
cmdText = "[ex] " + cmdText;
}
}
return cmdText;
}
function getInitialCmdText(cmdText) {
var n = cmdText.lastIndexOf(" ");
if (n != -1) {
while (n != 0 && cmdText.substr(n, 1) == " ") n--;
cmdText = cmdText.substr(0, n + 1); // without the trailing " Shortcut"
}
if (ShowCmdIds) {
var n = cmdText.indexOf("] ");
if (n != -1)
cmdText = cmdText.substr(n + 2); // without the leading "[...] "
}
return cmdText;
}
function FillCommandsListBox(hLbWnd, sFilter) {
var i;
var n;
var C;
var cmdId;
var cmdText;
var Matches = [];
if (sFilter != undefined)
sFilter = sFilter.toLowerCase();
for (i = 0; i < Commands.length; i++) {
C = [];
C.push(Commands[i][0]);
C.push(Commands[i][1]);
if (sFilter == undefined || sFilter == "") {
C.push(0);
Matches.push(C);
} else {
cmdText = C[1].toLowerCase();
n = cmdText.indexOf("::");
if (n != -1) {
// allows to type ' ' instead of '::'
cmdText = cmdText.replace("::", ":: ");
}
cmdText = getFullCmdText(cmdText, C[0]);
n = MatchFilter(sFilter, cmdText);
if (n != "") {
C.push(n);
Matches.push(C);
}
}
}
// Matches.sort(compareByCommand);
AkelPad.SendMessage(hLbWnd, WM_SETREDRAW, FALSE, 0);
AkelPad.SendMessage(hLbWnd, LB_RESETCONTENT, 0, 0);
for (i = 0; i < Matches.length; i++) {
cmdId = Matches[i][0];
cmdText = getFullCmdText(Matches[i][1], cmdId);
n = AkelPad.SendMessage(hLbWnd, LB_ADDSTRING, 0, cmdText);
AkelPad.SendMessage(hLbWnd, LB_SETITEMDATA, n, cmdId);
}
AkelPad.SendMessage(hLbWnd, WM_SETREDRAW, TRUE, 0);
AkelPad.SendMessage(hLbWnd, LB_SETCURSEL, 0, 0);
}
function LOWORD(nParam) {
return (nParam & 0xFFFF);
}
function HIWORD(nParam) {
return ((nParam >> 16) & 0xFFFF);
}
function ReadWriteIni(bWrite) {
var oFSO = new ActiveXObject("Scripting.FileSystemObject");
var sIniFile = WScript.ScriptFullName.substring(0, WScript.ScriptFullName.lastIndexOf(".")) + ".ini";
var sIniTxt;
var oFile;
var oRect;
var i;
if (bWrite) {
if ((sCmdFilter0 != sCmdFilter) ||
(nCmdIndex0 != nCmdIndex)) {
//oRect = GetWindowPos(hWndDlg);
sIniTxt = //"nWndX=" + oRect.X + ";\r\n" +
//"nWndY=" + oRect.Y + ";";
"sCmdFilter=\"" + sCmdFilter + "\";\r\n" +
"nCmdIndex=" + nCmdIndex + ";";
oFile = oFSO.OpenTextFile(sIniFile, 2, true, -1);
oFile.Write(sIniTxt);
oFile.Close();
}
} else if (oFSO.FileExists(sIniFile)) {
oFile = oFSO.OpenTextFile(sIniFile, 1, false, -1);
try {
eval(oFile.ReadAll());
sCmdFilter0 = sCmdFilter;
nCmdIndex0 = nCmdIndex;
} catch (oError) {}
oFile.Close();
}
}
function alignCmdShortcut(cmdText) {
var nMaxLen = 72 - (ShowCmdIds ? 7 : 0);
var n = cmdText.lastIndexOf("\\t");
if (n != -1) {
if (cmdText.length < nMaxLen) {
var t = "";
var i = cmdText.length;
while (i < nMaxLen) {
t = t + " ";
i++;
}
cmdText = cmdText.substr(0, n) + t + cmdText.substr(n + 2);
} else {
cmdText = cmdText.substr(0, n) + " " + cmdText.substr(n + 2);
}
}
return cmdText;
}
function ReadLngFile() {
var oFSO = new ActiveXObject("Scripting.FileSystemObject");
var sLngFile = WScript.ScriptFullName.replace(/\.js$/i, "_" + AkelPad.GetLangId(LANGID_FULL).toString() + ".lng");
if (!oFSO.FileExists(sLngFile)) {
sLngFile = WScript.ScriptFullName.replace(/\.js$/i, ".lng");
}
if (oFSO.FileExists(sLngFile)) {
var n;
var s;
var m;
var count = -1;
var section = "";
var oTextStream = oFSO.OpenTextFile(sLngFile, 1, false, -1);
while (!oTextStream.AtEndOfStream) {
s = oTextStream.ReadLine();
m = s.match(/^\s*\/\/.*/);
if (m) {
// Comment
continue;
}
m = s.match(/^\s*\[([^\]]+)\]\s*$/);
if (m) {
// [Section]
section = m[1].toLowerCase();
continue;
}
if (section == "akelpad") {
m = s.match(/^\s*(\d\d\d\d)\s*=\s*"(.+)"\s*$/);
if (m) {
// AkelPad's Command: id = Text
n = parseInt(m[1]);
if (isNaN(n)) {
n = oTextStream.Line - 1;
oTextStream.Close();
FatalErr("Command Id is not a number: \"" + m[1] + "\"!\nFile: \"" + sLngFile + "\"\nLine: " + n);
}
s = alignCmdShortcut(m[2]);
count += 1
Commands.push([count, s, n, ""]);
continue;
}
} else if (section == "plugins") {
m = s.match(/^\s*([\w:]+)\s*=\s*"(.+)"\s*$/);
if (m) {
n = m[1];
s = alignCmdShortcut(m[2]);
count += 1
Commands.push([count, s, n, ""]);
continue;
} else { // иначе плаг без текста перевода
m = s.match(/^\s*([\w:]+)\s*$/);
if (m) {
n = m[1];
s = alignCmdShortcut(m[1]);
count += 1
Commands.push([count, s, n, ""]);
continue;
}
}
} else if (section == "scripts") {
// m = s.match(/^\s*"(.+)"\s*$/);
// m = s.match(/^\s*([\w\.]+)\s*=\s*"(.+)"\s*$/);
// m = s.match(/^\s*([\w\.]+)\s*|\s*([^|]+?)\s*|\s*([^|]+)\s*$/);
m = s.match(/^\s*([\w\.]+)\s*\|\s*([^|]+?)\s*\|\s*(.+)\s*$/);
if (m) {
n = m[1];
p = m[3];
s = alignCmdShortcut(m[2]);
// WScript.Echo('1 = ' + m[1] + '\n2 = ' + m[2] + '\n3 = ' + m[3]);
// WScript.Quit();
// Commands.push( [n, s] );
count += 1
Commands.push([count, s, n, p]);
continue;
} else { // иначе скрипт без параметра
m = s.match(/^\s*([\w\.]+)\s*\|\s*([^|]+?)\s*$/);
if (m) {
n = m[1];
s = alignCmdShortcut(m[2]);
count += 1
Commands.push([count, s, n, ""]);
continue;
} else { // иначе скрипт без имени и параметра
m = s.match(/^\s*([\w\.]+)\s*$/);
if (m) {
n = m[1];
s = alignCmdShortcut(m[1]);
count += 1
Commands.push([count, s, n, ""]);
continue;
}
}
}
} else if (section == "exec") {
m = s.match(/^\s*(.+?)\s*\|\s*(.+?)\s*$/);
// WScript.Echo('0 = ' + m[0] + '\n1 = ' + m[1] + '\n2 = ' +m[2]);
if (m) {
n = m[2];
s = alignCmdShortcut(m[1]);
count += 1
Commands.push([count, s, n, "ex"]);
continue;
}
}
}
oTextStream.Close();
} else {
FatalErr("File not found: \"" + sLngFile + "\"");
}
}
function FatalErr(errMsg) {
AkelPad.MessageBox(AkelPad.GetMainWnd(), errMsg, WScript.ScriptName, MB_OK | MB_ICONERROR);
WScript.Quit();
}