GUI for TextReplace function.
All parts of the script should be saved in one file in Unicode format.
Download archive: KDJ.zip.
Part 1:
Code: Select all
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=30804#p30804
// Version: 2016-07-26
// Author: KDJ
//
// *** Replace text in edit window ***
// *** GUI for TextReplace function ***
//
// Usage:
// Call("Scripts::Main", 1, "TextReplace.js")
//
// Remarks:
// Script should be saved in Unicode format.
// Required to include:
// InputBox_function.js: http://akelpad.sourceforge.net/forum/viewtopic.php?p=17609#p17609
// TextReplace_function.js: http://akelpad.sourceforge.net/forum/viewtopic.php?p=30653#p30653
// For view AkelPad help file, is needed HtmlView.js: http://akelpad.sourceforge.net/forum/viewtopic.php?p=29221#p29221
// Templates are saved in file: TextReplace_templ.tsv.
// F1 key - show context menu if available (for edit controls and "Find" button).
// 'Disable "Undo"' option:
// - causes less memory usage, but is not possible to undo changes from undo buffer,
// - to restore previous content of the document, reopen it.
// "Find" button action:
// left click - if is set default action - do it, else show menu,
// right click - show context menu.
//
// Batch files:
// Should be named TextReplace_batch*.tsv, where * is any text.
// Should be saved in UTF-16LE format with Windows new line "\r\n".
// Each line of the batch file should contain tab-separated fields:
// FindIt<TAB>ReplaceWith<TAB>Flags<TAB>Description
// - FindIt, ReplaceWith, Flags - see description in TextReplace_function.js,
// - if line is empty or FindIt is empty, this line will be ommited,
// - flag "g" can be ommited - will be added automatically.
// Example 1 (replace all "abc" with "xyz", next delete all "gwx"):
// abc xyz
// gwx
// Example 2:
// \b(\d{4})-(\d{2})-(\d{2})\b \3-\2-\1 r (replace date in format "yyyy-mm-dd" with date in format "dd-mm-yyyy", used regular expressions)
// \b0x[\dA-F]{1,8}\b return parseInt(_s0).toString(); fir (replace hex values (0x0 - 0xFFFFFFFF) with decimals, used regular expressions, function and ignore case)
// abc return _s0 + _n1; f (add counter to "abc", used function)
var oSys = AkelPad.SystemFunction();
var sClass = "AkelPad::Scripts::" + WScript.ScriptName + "::" + AkelPad.GetInstanceDll();
var hDlg;
if (hDlg = oSys.Call("User32::FindWindowExW", 0, 0, sClass, 0))
{
if (! oSys.Call("User32::IsWindowVisible", hDlg))
oSys.Call("User32::ShowWindow", hDlg, 8 /*SW_SHOWNA*/);
if (oSys.Call("User32::IsIconic", hDlg))
oSys.Call("User32::ShowWindow", hDlg, 9 /*SW_RESTORE*/);
oSys.Call("User32::SetForegroundWindow", hDlg);
WScript.Quit();
}
if (! (AkelPad.Include("InputBox_function.js") && AkelPad.Include("TextReplace_function.js")))
WScript.Quit();
var hMainWnd = AkelPad.GetMainWnd();
var hGuiFont = oSys.Call("Gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/);
var oFSO = new ActiveXObject("Scripting.FileSystemObject");
var aHotKey = [[0x5 /*MOD_SHIFT|MOD_ALT*/, 0x2D /*VK_INSERT*/, BookmarkLines, true],
[0x5 /*MOD_SHIFT|MOD_ALT*/, 0x2E /*VK_DELETE*/, BookmarkLines, false]];
var bSizingEdit = false;
var nDlgMinW = 405;
var nDlgMinH = 263;
var nEditMinW = 350;
var nEditMinH = 30;
var nScaleX;
var nScaleY;
var nDlgX;
var nDlgY;
var nDlgW;
var nDlgH;
var nWhatH;
var bTranspNA;
var nOpacity;
var bMatch;
var bWord;
var bRegExp;
var bDotNL;
var bFunc;
var bBatch;
var bLockUndo;
var nRange;
var bFont1;
var bFont2;
var bWrap1;
var bWrap2;
var sWhat;
var sWith;
var sBFile;
var nFindDef;
var nHistLen;
var aHist;
ReadIni();
GetLangStrings();
var IDCANCEL = 2;
var IDWHATS = 1000;
var IDWHATE = 1001;
var IDWITHS = 1002;
var IDWITHE = 1003;
var IDMATCH = 1004;
var IDWORD = 1005;
var IDREGEXP = 1006;
var IDDOTNL = 1007;
var IDFUNC = 1008;
var IDBATCH = 1009;
var IDLOCKUNDO = 1010;
var IDRANGE = 1011;
var IDFBTC = 1012;
var IDFCTE = 1013;
var IDSEL = 1014;
var IDBOOK = 1015;
var IDDOC = 1016;
var IDALLDOC = 1017;
var IDTRACKBAR = 1018;
var IDTRANSPNAB = 1019;
var IDREPL1B = 1020;
var IDREPL2B = 1021;
var IDHISTB = 1022;
var IDTEMPLB = 1023;
var IDFINDB = 1024;
var IDCLOSEB = 1025;
AkelPad.WindowRegisterClass(sClass);
//0x50000000=WS_VISIBLE|WS_CHILD
//0x50000007=WS_VISIBLE|WS_CHILD|BS_GROUPBOX
//0x50010000=WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_PUSHBUTTON
//0x50010003=WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTOCHECKBOX
//0x50010005=WS_VISIBLE|WS_CHILD|WS_TABSTOP|TBS_TOP|TBS_AUTOTICKS
//0x50010009=WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTORADIOBUTTON
//0x50851004=WS_VISIBLE|WS_CHILD|WS_BORDER|WS_SIZEBOX|WS_TABSTOP|ES_WANTRETURN|ES_MULTILINE
//0x90CE0040=WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_SIZEBOX|WS_MINIMIZEBOX|DS_SETFONT
AkelPad.CreateDialog(0, sClass, sTxtDlgTitle, 0X90CE0040, nDlgX, nDlgY, nDlgW, nDlgH, hMainWnd, CallbackDlg, 0x2 /*CDF_PIXELS*/, 0, 0, "", 0, 0, "|",
// Class, Title, Style, X, Y, W, H, ID, lParam
0, "STATIC", "", 0x50000000, 10, 14, 34, 13, IDWHATS, 0, "|",
0, "AkelEditW", "", 0x50851004, 45, 10, 0, 0, IDWHATE, 0, "|",
0, "STATIC", sTxtWith, 0x50000000, 0, 0, 34, 13, IDWITHS, 0, "|",
0, "AkelEditW", "", 0x50851004, 0, 0, 0, 0, IDWITHE, 0, "|",
0, "BUTTON", sTxtMatchCase, 0x50010003, 0, 0, 140, 16, IDMATCH, 0, "|",
0, "BUTTON", sTxtWholeWord, 0x50010003, 0, 0, 140, 16, IDWORD, 0, "|",
0, "BUTTON", sTxtRegExp, 0x50010003, 0, 0, 140, 16, IDREGEXP, 0, "|",
0, "BUTTON", sTxtDotMatchesNL, 0x50010003, 0, 0, 123, 16, IDDOTNL, 0, "|",
0, "BUTTON", sTxtWithFunc, 0x50010003, 0, 0, 140, 16, IDFUNC, 0, "|",
0, "BUTTON", sTxtBatchRepl, 0x50010003, 0, 0, 140, 16, IDBATCH, 0, "|",
0, "BUTTON", sTxtLockUndo, 0x50010003, 0, 0, 123, 16, IDLOCKUNDO, 0, "|",
0, "BUTTON", sTxtRange, 0x50000307, 0, 0, 135, 142, IDRANGE, 0, "|",
0, "BUTTON", "&1 - " + sTxtBegToCaret, 0x50010009, 0, 0, 115, 16, IDFBTC, 0, "|",
0, "BUTTON", "&2 - " + sTxtCaretToEnd, 0x50010009, 0, 0, 115, 16, IDFCTE, 0, "|",
0, "BUTTON", "&3 - " + sTxtSelection, 0x50010009, 0, 0, 115, 16, IDSEL, 0, "|",
0, "BUTTON", "&4 - " + sTxtBookmarks, 0x50010009, 0, 0, 115, 16, IDBOOK, 0, "|",
0, "BUTTON", "&5 - " + sTxtEntireDoc, 0x50010009, 0, 0, 115, 16, IDDOC, 0, "|",
0, "BUTTON", "&6 - " + sTxtAllDocs, 0x50010009, 0, 0, 115, 16, IDALLDOC, 0, "|",
0, "msctls_trackbar32", "", 0x50010005, 0, 0, 70, 20, IDTRACKBAR, 0, "|",
0, "BUTTON", sTxtTransparentNA, 0x50010003, 0, 0, 185, 16, IDTRANSPNAB, 0, "|",
0, "BUTTON", sTxtReplace1, 0x50010000, 0, 0, 90, 23, IDREPL1B, 0, "|",
0, "BUTTON", sTxtReplaceAll, 0x50010000, 0, 0, 90, 23, IDREPL2B, 0, "|",
0, "BUTTON", sTxtHistory + "...", 0x50010000, 0, 0, 90, 23, IDHISTB, 0, "|",
0, "BUTTON", sTxtTemplates + "...", 0x50010000, 0, 0, 90, 23, IDTEMPLB, 0, "|",
0, "BUTTON", sTxtFind + (nFindDef ? "" : " >"), 0x50010000, 0, 0, 90, 23, IDFINDB, 0, "|",
0, "BUTTON", sTxtClose, 0x50010000, 0, 0, 90, 23, IDCLOSEB, 0);
if (hDlg)
{
AkelPad.ScriptNoMutex();
AkelPad.WindowGetMessage(0x4 /*WGM_KEYDOWNUP*/);
}
AkelPad.WindowUnregisterClass(sClass);
function CallbackDlg(hWnd, uMsg, wParam, lParam)
{
var nID, nCode;
if (uMsg == 272 /*WM_INITDIALOG*/)
{
hDlg = hWnd;
InitDlg();
}
else if (uMsg == 6 /*WM_ACTIVATE*/)
{
if (LoWord(wParam))
EnableButtonsDlg();
SetHotKeys(LoWord(wParam));
SetTransparency(LoWord(wParam) || (lParam != hMainWnd));
}
else if (uMsg == 786 /*WM_HOTKEY*/)
aHotKey[wParam][2](aHotKey[wParam][3]);
else if (uMsg == 36 /*WM_GETMINMAXINFO*/)
{
AkelPad.MemCopy(_PtrAdd(lParam, 24), nDlgMinW, 3 /*DT_DWORD*/); //ptMinTrackSize_x
AkelPad.MemCopy(_PtrAdd(lParam, 28), nDlgMinH, 3 /*DT_DWORD*/); //ptMinTrackSize_y
}
else if (uMsg == 5 /*WM_SIZE*/)
{
if ((wParam == 0 /*SIZE_RESTORED*/) && (! bSizingEdit))
{
nDlgW = LoWord(lParam);
nDlgH = HiWord(lParam);
ResizeDlg();
}
}
else if (uMsg == 15 /*WM_PAINT*/)
PaintSizeGrip();
else if (uMsg == 256 /*WM_KEYDOWN*/)
{
nID = GetDlgCtrlID(oSys.Call("User32::GetFocus"));
if ((wParam >= 0x31 /*1 key*/) && (wParam <= 0x36 /*6 key*/))
{
if (Ctrl() && (! Shift()) && (! Alt()))
CountInRange(wParam - 0x30);
}
else if (wParam == 0x70 /*VK_F1*/)
{
if (! Alt())
{
if (Ctrl() || Shift())
AkelHelp(GetAkelHelpFile());
else if ((nID == IDWHATE) || (nID == IDWITHE))
MenuAE(oSys.Call("User32::GetFocus"), nID);
else if (nID == IDFINDB)
MenuFind();
}
}
else if ((wParam == 0x72 /*VK_F3*/) || (wParam == 0x76 /*VK_F7*/))
{
if (! Alt())
{
if (Ctrl())
{
if (Shift())
Find((wParam == 0x72 /*VK_F3*/) ? 4 : 14);
else
Find((wParam == 0x72 /*VK_F3*/) ? 3 : 13);
}
else if (Shift())
Find((wParam == 0x72 /*VK_F3*/) ? 2 : 12);
else
Find((wParam == 0x72 /*VK_F3*/) ? 1 : 11);
}
}
else if (((nID == IDWHATE) || (nID == IDWITHE)) && Ctrl() && (! Shift()) && (! Alt()))
{
if (wParam == 0x46 /*F key*/)
{
if (nID == IDWHATE)
bFont1 = ! bFont1;
else
bFont2 = ! bFont2;
SetFontAE(nID);
}
else if (wParam == 0x55 /*U key*/)
{
if (nID == IDWHATE)
bWrap1 = ! bWrap1;
else
bWrap2 = ! bWrap2;
SetWrapAE(nID);
}
}
}
else if (uMsg == 123 /*WM_CONTEXTMENU*/)
{
nID = GetDlgCtrlID(wParam);
if ((nID == IDWHATE) || (nID == IDWITHE))
MenuAE(wParam, nID, LoWord(lParam), HiWord(lParam));
else if (nID == IDFINDB)
MenuFind();
}
else if (uMsg == 273 /*WM_COMMAND*/)
{
nID = LoWord(wParam);
nCode = HiWord(wParam);
if ((nID == IDWHATE) || (nID == IDWITHE))
{
if (nCode == 0x0300 /*EN_CHANGE*/)
{
if (bBatch)
{
if (nID == IDWHATE)
sBFile = GetTextAE(nID);
}
else
{
if (nID == IDWHATE)
sWhat = GetTextAE(nID);
else
sWith = GetTextAE(nID);
}
EnableButtonsDlg();
}
}
else if (nID == IDMATCH)
bMatch = ! bMatch;
else if (nID == IDWORD)
bWord = ! bWord;
else if (nID == IDREGEXP)
{
bRegExp = ! bRegExp;
SetColorsAE();
EnableButtonsDlg();
}
else if (nID == IDDOTNL)
bDotNL = ! bDotNL;
else if (nID == IDFUNC)
{
bFunc = ! bFunc;
SetColorsAE();
}
else if (nID == IDBATCH)
{
bBatch = ! bBatch;
SetColorsAE();
if (bBatch)
{
ReplaceTextAE(IDWHATE, sBFile);
ReplaceTextAE(IDWITHE, "");
if (! sBFile)
{
MenuBatch();
SetColorsAE();
}
}
else
{
ReplaceTextAE(IDWHATE, sWhat);
ReplaceTextAE(IDWITHE, sWith);
}
EnableButtonsDlg();
}
else if (nID == IDLOCKUNDO)
bLockUndo = ! bLockUndo;
else if ((nID >= IDFBTC) && (nID <= IDALLDOC))
{
nRange = nID - IDFBTC;
EnableButtonsDlg();
}
else if (nID == IDTRANSPNAB)
{
bTranspNA = ! bTranspNA;
SetTransparency(true);
}
else if ((nID == IDREPL1B) || (nID == IDREPL2B))
Replace(nID);
else if ((nID == IDHISTB) || (nID == IDTEMPLB))
HistAndTempl(nID == IDHISTB);
else if (nID == IDFINDB)
{
if (nFindDef)
Find(nFindDef);
else
MenuFind();
}
else if ((nID == IDCANCEL) || (nID == IDCLOSEB))
PostMessage(hDlg, 16 /*WM_CLOSE*/, 0, 0);
}
else if (uMsg == 276 /*WM_HSCROLL*/)
{
if (lParam == GetDlgItem(hDlg, IDTRACKBAR))
{
nOpacity = 255 - SendMessage(lParam, 1024 /*TBM_GETPOS*/, 0, 0);
SetTransparency(true);
}
}
else if (uMsg == 16 /*WM_CLOSE*/)
{
WriteIni();
AkelPad.WindowUnsubClass(GetDlgItem(hDlg, IDWHATE));
AkelPad.WindowUnsubClass(GetDlgItem(hDlg, IDWITHE));
oSys.Call("User32::PostQuitMessage", 0);
oSys.Call("User32::DestroyWindow", hDlg);
}
return 0;
}
function InitDlg()
{
var lpRECT = AkelPad.MemAlloc(16);
var i;
for (i = IDWHATE; i <= IDWITHE; i += 2)
{
SendDlgItemMessage(hDlg, i, 3228 /*AEM_SETOPTIONS*/, 2 /*AECOOP_OR*/, 0x10000020 /*AECO_DISABLEBEEP|AECO_DETAILEDUNDO*/);
SendDlgItemMessage(hDlg, i, 3230 /*AEM_SETNEWLINE*/, 0x3 /*AENL_OUTPUT|AENL_INPUT*/, MkLong(6, 6 /*AELB_N*/));
SendDlgItemMessage(hDlg, i, 1093 /*EM_SETEVENTMASK*/, 0, 0x1 /*ENM_CHANGE*/);
SetFontAE(i);
SetWrapAE(i);
AkelPad.WindowSubClass(GetDlgItem(hDlg, i), CallbackAE, 36 /*WM_GETMINMAXINFO*/, 532 /*WM_SIZING*/, 562 /*WM_EXITSIZEMOVE*/);
}
if (bBatch)
{
SetTextAE(IDWHATE, sBFile);
SetTextAE(IDWITHE, "");
}
else
{
SetTextAE(IDWHATE, sWhat);
SetTextAE(IDWITHE, sWith);
if ((nRange != 2) && (AkelPad.GetSelStart() != AkelPad.GetSelEnd()))
ReplaceTextAE(IDWHATE, AkelPad.GetSelText());
}
SendDlgItemMessage(hDlg, IDMATCH, 241 /*BM_SETCHECK*/, bMatch, 0);
SendDlgItemMessage(hDlg, IDWORD, 241 /*BM_SETCHECK*/, bWord, 0);
SendDlgItemMessage(hDlg, IDREGEXP, 241 /*BM_SETCHECK*/, bRegExp, 0);
SendDlgItemMessage(hDlg, IDDOTNL, 241 /*BM_SETCHECK*/, bDotNL, 0);
SendDlgItemMessage(hDlg, IDFUNC, 241 /*BM_SETCHECK*/, bFunc, 0);
SendDlgItemMessage(hDlg, IDBATCH, 241 /*BM_SETCHECK*/, bBatch, 0);
SendDlgItemMessage(hDlg, IDLOCKUNDO, 241 /*BM_SETCHECK*/, bLockUndo, 0);
oSys.Call("User32::CheckRadioButton", hDlg, IDFBTC, IDALLDOC, IDFBTC + nRange);
SetColorsAE();
EnableButtonsDlg();
SendDlgItemMessage(hDlg, IDTRANSPNAB, 241 /*BM_SETCHECK*/, bTranspNA, 0);
SendDlgItemMessage(hDlg, IDTRACKBAR, 1030 /*TBM_SETRANGE*/, 0, MkLong(0, 240));
SendDlgItemMessage(hDlg, IDTRACKBAR, 1047 /*TBM_SETLINESIZEE*/, 0, 10);
SendDlgItemMessage(hDlg, IDTRACKBAR, 1045 /*TBM_SETPAGESIZE*/, 0, 40);
SendDlgItemMessage(hDlg, IDTRACKBAR, 1044 /*TBM_SETTICFREQ*/, 20, 0);
SendDlgItemMessage(hDlg, IDTRACKBAR, 1029 /*TBM_SETPOS*/, 1, 255 - nOpacity);
SetTransparency(true);
oSys.Call("User32::GetClientRect", hDlg, lpRECT);
nScaleX = AkelPad.MemRead(_PtrAdd(lpRECT, 8), 3 /*DT_DWORD*/) / nDlgW;
nScaleY = AkelPad.MemRead(_PtrAdd(lpRECT, 12), 3 /*DT_DWORD*/) / nDlgH;
nDlgW = AkelPad.MemRead(_PtrAdd(lpRECT, 8), 3 /*DT_DWORD*/);
nDlgH = AkelPad.MemRead(_PtrAdd(lpRECT, 12), 3 /*DT_DWORD*/);
oSys.Call("User32::GetWindowRect", hDlg, lpRECT);
nDlgMinW = ScaleX(nDlgMinW) + AkelPad.MemRead(_PtrAdd(lpRECT, 8), 3 /*DT_DWORD*/) - AkelPad.MemRead(_PtrAdd(lpRECT, 0), 3 /*DT_DWORD*/) - nDlgW;
nDlgMinH = ScaleY(nDlgMinH) + AkelPad.MemRead(_PtrAdd(lpRECT, 12), 3 /*DT_DWORD*/) - AkelPad.MemRead(_PtrAdd(lpRECT, 4), 3 /*DT_DWORD*/) - nDlgH;
nEditMinW = ScaleX(nEditMinW);
nEditMinH = ScaleY(nEditMinH);
nWhatH = ScaleY(nWhatH);
ResizeDlg();
AkelPad.MemFree(lpRECT);
}
function CallbackAE(hWnd, uMsg, wParam, lParam)
{
var lpRECT;
var nX1, nY1, nX2, nY2;
var nNY1, nNY2;
var bSizingWhat;
if (uMsg == 36 /*WM_GETMINMAXINFO*/)
{
AkelPad.MemCopy(_PtrAdd(lParam, 24), nEditMinW, 3 /*DT_DWORD*/); //ptMinTrackSize_x
AkelPad.MemCopy(_PtrAdd(lParam, 28), nEditMinH, 3 /*DT_DWORD*/); //ptMinTrackSize_y
}
else if (uMsg == 532 /*WM_SIZING*/)
{
lpRECT = AkelPad.MemAlloc(16);
oSys.Call("User32::GetWindowRect", hWnd, lpRECT);
nX1 = AkelPad.MemRead(_PtrAdd(lpRECT, 0), 3 /*DT_DWORD*/);
nY1 = AkelPad.MemRead(_PtrAdd(lpRECT, 4), 3 /*DT_DWORD*/);
nX2 = AkelPad.MemRead(_PtrAdd(lpRECT, 8), 3 /*DT_DWORD*/);
nY2 = AkelPad.MemRead(_PtrAdd(lpRECT, 12), 3 /*DT_DWORD*/);
nNY1 = AkelPad.MemRead(_PtrAdd(lParam, 4), 3 /*DT_DWORD*/);
nNY2 = AkelPad.MemRead(_PtrAdd(lParam, 12), 3 /*DT_DWORD*/);
if ((wParam == 6 /*WMSZ_BOTTOM*/) && (nNY2 != nY2))
{
bSizingEdit = true;
if (bSizingWhat = (GetDlgCtrlID(hWnd) == IDWHATE))
nDlgMinH += nNY2 - nY2;
oSys.Call("User32::GetWindowRect", hDlg, lpRECT);
nDlgW = AkelPad.MemRead(_PtrAdd(lpRECT, 8), 3 /*DT_DWORD*/) - AkelPad.MemRead(_PtrAdd(lpRECT, 0), 3 /*DT_DWORD*/);
nDlgH = AkelPad.MemRead(_PtrAdd(lpRECT, 12), 3 /*DT_DWORD*/) - AkelPad.MemRead(_PtrAdd(lpRECT, 4), 3 /*DT_DWORD*/) + nNY2 - nY2;
oSys.Call("User32::SetWindowPos", hDlg, 0, 0, 0, nDlgW, nDlgH, 0x16 /*SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOMOVE*/);
oSys.Call("User32::GetClientRect", hDlg, lpRECT);
nDlgW = AkelPad.MemRead(_PtrAdd(lpRECT, 8), 3 /*DT_DWORD*/);
nDlgH = AkelPad.MemRead(_PtrAdd(lpRECT, 12), 3 /*DT_DWORD*/);
ResizeDlg(bSizingWhat, nX2 - nX1, nNY2 - nNY1);
bSizingEdit = false;
}
else
{
AkelPad.MemCopy(_PtrAdd(lParam, 0), nX1, 3 /*DT_DWORD*/);
AkelPad.MemCopy(_PtrAdd(lParam, 4), nY1, 3 /*DT_DWORD*/);
AkelPad.MemCopy(_PtrAdd(lParam, 8), nX2, 3 /*DT_DWORD*/);
AkelPad.MemCopy(_PtrAdd(lParam, 12), nY2, 3 /*DT_DWORD*/);
}
AkelPad.MemFree(lpRECT);
}
else if (uMsg == 562 /*WM_EXITSIZEMOVE*/)
//bug in WinXP - set z-order
oSys.Call("User32::SetWindowPos", hWnd, GetDlgItem(hDlg, GetDlgCtrlID(hWnd) - 1), 0, 0, 0, 0, 0x13 /*SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE*/);
return 0;
}
function LoWord(nDwNum)
{
return nDwNum & 0xFFFF;
}
function HiWord(nDwNum)
{
return (nDwNum >> 16) & 0xFFFF;
}
function MkLong(nLoWord, nHiWord)
{
return (nLoWord & 0xFFFF) | (nHiWord << 16);
}
function Ctrl()
{
return oSys.Call("User32::GetKeyState", 0x11 /*VK_CONTROL*/) & 0x8000;
}
function Shift()
{
return oSys.Call("User32::GetKeyState", 0x10 /*VK_SHIFT*/) & 0x8000;
}
function Alt()
{
return oSys.Call("user32::GetKeyState", 0x12 /*VK_MENU*/) & 0x8000;
}
function SendMessage(hWnd, uMsg, wParam, lParam)
{
return AkelPad.SendMessage(hWnd, uMsg, wParam, lParam);
}
function PostMessage(hWnd, uMsg, wParam, lParam)
{
return oSys.Call("User32::PostMessageW", hWnd, uMsg, wParam, lParam);
}
function SendDlgItemMessage(hWnd, nID, uMsg, wParam, lParam)
{
return oSys.Call("User32::SendDlgItemMessageW", hWnd, nID, uMsg, wParam, lParam);
}
function GetDlgItem(hWnd, nID)
{
return oSys.Call("User32::GetDlgItem", hWnd, nID);
}
function GetDlgCtrlID(hWnd)
{
return oSys.Call("User32::GetDlgCtrlID", hWnd);
}
function GetTextAE(nID)
{
var sText;
AkelPad.SetEditWnd(GetDlgItem(hDlg, nID));
sText = AkelPad.GetTextRange(0, -1, 2 /*\n*/);
AkelPad.SetEditWnd(0);
return sText;
}
function SetTextAE(nID, sText)
{
var lpText = AkelPad.MemAlloc((sText.length + 1) * 2);
AkelPad.MemCopy(lpText, sText, 1 /*DT_UNICODE*/, sText.length);
SendDlgItemMessage(hDlg, nID, 3026 /*AEM_SETTEXTW*/, sText.length, lpText);
AkelPad.MemFree(lpText);
}
function ReplaceTextAE(nID, sText)
{
if (bBatch && (nID == IDWHATE))
SendDlgItemMessage(hDlg, nID, 3228 /*AEM_SETOPTIONS*/, 4 /*AECOOP_XOR*/, 1 /*AECO_READONLY*/);
SendDlgItemMessage(hDlg, nID, 177 /*EM_SETSEL*/, 0, -1);
AkelPad.SetEditWnd(GetDlgItem(hDlg, nID));
AkelPad.ReplaceSel(sText);
AkelPad.SetEditWnd(0);
SendDlgItemMessage(hDlg, nID, 177 /*EM_SETSEL*/, 0, 0);
if (bBatch && (nID == IDWHATE))
SendDlgItemMessage(hDlg, nID, 3228 /*AEM_SETOPTIONS*/, 2 /*AECOOP_OR*/, 1 /*AECO_READONLY*/);
}
function SetFontAE(nID)
{
var bFont = (nID == IDWHATE) ? bFont1 : bFont2;
var hFont = bFont ? SendMessage(hMainWnd, 1233 /*AKD_GETFONTW*/, 0, 0) : hGuiFont;
SendDlgItemMessage(hDlg, nID, 48 /*WM_SETFONT*/, hFont, 0);
oSys.Call("User32::InvalidateRect", GetDlgItem(hDlg, nID), 0, 1);
}
function SetWrapAE(nID)
{
var bWrap = (nID == IDWHATE) ? bWrap1 : bWrap2;
SendDlgItemMessage(hDlg, nID, 3242 /*AEM_SETWORDWRAP*/, bWrap ? 2 /*AEWW_SYMBOL*/ : 0 /*AEWW_NONE*/, 0);
}
function SetColorsAE()
{
var nColorBk1;
var nColorBk2;
if (bBatch)
{
SendDlgItemMessage(hDlg, IDWHATS, 12 /*WM_SETTEXT*/, 0, sTxtBatch);
SendDlgItemMessage(hDlg, IDWHATE, 3228 /*AEM_SETOPTIONS*/, 2 /*AECOOP_OR*/, 1 /*AECO_READONLY*/);
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, IDWITHS), 0);
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, IDWITHE), 0);
nColorBk1 = 0x98FBCC;
nColorBk2 = oSys.Call("User32::GetSysColor", 15 /*COLOR_BTNFACE*/);
}
else
{
SendDlgItemMessage(hDlg, IDWHATS, 12 /*WM_SETTEXT*/, 0, sTxtWhat);
SendDlgItemMessage(hDlg, IDWHATE, 3228 /*AEM_SETOPTIONS*/, 4 /*AECOOP_XOR*/, 1 /*AECO_READONLY*/);
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, IDWITHS), 1);
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, IDWITHE), 1);
nColorBk1 = bRegExp ? 0xA0FFFF : oSys.Call("User32::GetSysColor", 5 /*COLOR_WINDOW*/);
nColorBk2 = bFunc ? 0xE1E4FF : nColorBk1;
}
SendDlgItemMessage(hDlg, IDWHATE, 1091 /*EM_SETBKGNDCOLOR*/, 0, nColorBk1);
SendDlgItemMessage(hDlg, IDWITHE, 1091 /*EM_SETBKGNDCOLOR*/, 0, nColorBk2);
}
function IsLineBoard()
{
return AkelPad.IsPluginRunning("LineBoard::Main");
}
function EnableButtonsDlg()
{
var hEditWnd = AkelPad.GetEditWnd();
if ((! IsLineBoard()) && (nRange == 3))
{
nRange = 4;
oSys.Call("User32::CheckRadioButton", hDlg, IDFBTC, IDALLDOC, IDFBTC + nRange);
}
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, IDMATCH), (! bBatch));
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, IDWORD), (! bBatch));
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, IDREGEXP), (! bBatch));
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, IDDOTNL), (! bBatch) && bRegExp);
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, IDFUNC), (! bBatch));
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, IDLOCKUNDO), bBatch);
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, IDBOOK), IsLineBoard());
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, IDREPL1B), hEditWnd && sWhat.length && (nRange < 5) && (! bBatch));
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, IDREPL2B), hEditWnd && (sWhat.length && (! bBatch) || sBFile.length && bBatch));
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, IDFINDB), hEditWnd && sWhat.length && (! bBatch));
}
function SetDefPushButton(nID)
{
for (var i = IDREPL1B; i <= IDCLOSEB; ++i)
SendDlgItemMessage(hDlg, i, 244 /*BM_SETSTYLE*/, 0 /*BS_PUSHBUTTON*/, 1);
if (nID)
SendDlgItemMessage(hDlg, nID, 244 /*BM_SETSTYLE*/, 1 /*BS_DEFPUSHBUTTON*/, 1);
}
function SetHotKeys(bSet)
{
var i;
if (bSet)
{
for (i = 0; i < aHotKey.length; ++i)
oSys.Call("User32::RegisterHotKey", hDlg, i, aHotKey[i][0], aHotKey[i][1]);
}
else
{
for (i = 0; i < aHotKey.length; ++i)
oSys.Call("User32::UnregisterHotKey", hDlg, i);
}
}
function SetTransparency(bDlgActive)
{
var nExStyle = oSys.Call("User32::GetWindowLongW", hDlg, -20 /*GWL_EXSTYLE*/);
var nAlphaCur = -1;
var nAlphaNew = -1;
var lpAlpha;
if (nExStyle & 0x00080000 /*WS_EX_LAYERED*/)
{
lpAlpha = AkelPad.MemAlloc(1);
oSys.Call("User32::GetLayeredWindowAttributes", hDlg, 0, lpAlpha, 0);
nAlphaCur = AkelPad.MemRead(lpAlpha, 5 /*DT_BYTE*/);
AkelPad.MemFree(lpAlpha);
}
if (bTranspNA && bDlgActive)
{
if (nAlphaCur >= 0)
nAlphaNew = 255;
}
else if ((nAlphaCur < 0) && (nOpacity < 255) || (nAlphaCur >= 0) && (nAlphaCur != nOpacity))
nAlphaNew = nOpacity;
if (nAlphaNew >= 0)
{
oSys.Call("User32::SetWindowLongW", hDlg, -20 /*GWL_EXSTYLE*/, nExStyle | 0x00080000 /*WS_EX_LAYERED*/);
oSys.Call("User32::SetLayeredWindowAttributes", hDlg, 0, nAlphaNew, 2 /*LWA_ALPHA*/);
oSys.Call("User32::UpdateWindow", hDlg);
}
}
function ScaleX(n)
{
return Math.round(n * nScaleX);
}
function ScaleY(n)
{
return Math.round(n * nScaleY);
}
function ScaleUX(n)
{
return Math.round(n / nScaleX);
}
function ScaleUY(n)
{
return Math.round(n / nScaleY);
}
function ResizeDlg(bSizingWhat, nW, nH)
{
var lpRECT = AkelPad.MemAlloc(16);
var nEditW, nWithH;
var i;
if (bSizingEdit)
{
nEditW = nW;
if (bSizingWhat)
{
oSys.Call("User32::GetWindowRect", GetDlgItem(hDlg, IDWITHE), lpRECT);
nWhatH = nH;
nWithH = AkelPad.MemRead(_PtrAdd(lpRECT, 12), 3 /*DT_DWORD*/) - AkelPad.MemRead(_PtrAdd(lpRECT, 4), 3 /*DT_DWORD*/);
}
else
{
oSys.Call("User32::GetWindowRect", GetDlgItem(hDlg, IDWHATE), lpRECT);
nWithH = nH;
nWhatH = AkelPad.MemRead(_PtrAdd(lpRECT, 12), 3 /*DT_DWORD*/) - AkelPad.MemRead(_PtrAdd(lpRECT, 4), 3 /*DT_DWORD*/);
}
}
else
{
nEditW = nDlgW - ScaleX(55);
nWithH = nDlgH - nWhatH - ScaleY(203);
}
AkelPad.MemFree(lpRECT);
oSys.Call("User32::SetWindowPos", GetDlgItem(hDlg, IDWHATE), 0,
0,
0,
nEditW,
nWhatH,
0x16 /*SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOMOVE*/);
oSys.Call("User32::SetWindowPos", GetDlgItem(hDlg, IDWITHS), 0,
ScaleX(10),
nWhatH + ScaleY(19),
0,
0,
0x15 /*SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOSIZE*/);
oSys.Call("User32::SetWindowPos", GetDlgItem(hDlg, IDWITHE), 0,
ScaleX(45),
nWhatH + ScaleY(15),
nEditW,
nWithH,
0x14 /*SWP_NOACTIVATE|SWP_NOZORDER*/);
for (i = IDMATCH; i <= IDLOCKUNDO; ++i)
oSys.Call("User32::SetWindowPos", GetDlgItem(hDlg, i), 0,
ScaleX(((i == IDDOTNL) || (i == IDLOCKUNDO)) ? 27 : 10),
nWhatH + nWithH + ScaleY(25) + ScaleY((i - IDMATCH) * 20),
0,
0,
0x15 /*SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOSIZE*/);
oSys.Call("User32::SetWindowPos", GetDlgItem(hDlg, IDRANGE), 0,
ScaleX(160),
nWhatH + nWithH + ScaleY(23),
0,
0,
0x15 /*SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOSIZE*/);
for (i = IDFBTC; i <= IDALLDOC; ++i)
oSys.Call("User32::SetWindowPos", GetDlgItem(hDlg, i), 0,
ScaleX(170),
nWhatH + nWithH + ScaleY(40) + ScaleY((i - IDFBTC) * 20),
0,
0,
0x15 /*SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOSIZE*/);
oSys.Call("User32::SetWindowPos", GetDlgItem(hDlg, IDTRACKBAR), 0,
ScaleX(10),
nDlgH - ScaleY(30),
0,
0,
0x15 /*SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOSIZE*/);
oSys.Call("User32::SetWindowPos", GetDlgItem(hDlg, IDTRANSPNAB), 0,
ScaleX(85),
nDlgH - ScaleY(26),
0,
0,
0x15 /*SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOSIZE*/);
for (i = IDREPL1B; i <= IDCLOSEB; ++i)
oSys.Call("User32::SetWindowPos", GetDlgItem(hDlg, i), 0,
nDlgW - ScaleX(100),
nWhatH + nWithH + ScaleY(45) + ScaleY((i - IDREPL1B) * 25),
0,
0,
0x15 /*SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOSIZE*/);
oSys.Call("user32::InvalidateRect", hDlg, 0, 1);
}
function PaintSizeGrip()
{
var lpPAINT = AkelPad.MemAlloc(_X64 ? 72 : 64 /*PAINTSTRUCT*/);
var lpRECT = AkelPad.MemAlloc(16);
var hDC;
if (hDC = oSys.Call("User32::BeginPaint", hDlg, lpPAINT))
{
oSys.Call("User32::GetClientRect", hDlg, lpRECT);
AkelPad.MemCopy(_PtrAdd(lpRECT, 0), AkelPad.MemRead(_PtrAdd(lpRECT, 8), 3 /*DT_DWORD*/) - oSys.Call("User32::GetSystemMetrics", 2 /*SM_CXVSCROLL*/), 3 /*DT_DWORD*/);
AkelPad.MemCopy(_PtrAdd(lpRECT, 4), AkelPad.MemRead(_PtrAdd(lpRECT, 12), 3 /*DT_DWORD*/) - oSys.Call("User32::GetSystemMetrics", 20 /*SM_CYVSCROLL*/), 3 /*DT_DWORD*/);
oSys.Call("User32::DrawFrameControl", hDC, lpRECT, 3 /*DFC_SCROLL*/, 0x8 /*DFCS_SCROLLSIZEGRIP*/);
oSys.Call("User32::EndPaint", hDlg, lpPAINT);
}
AkelPad.MemFree(lpPAINT);
AkelPad.MemFree(lpRECT);
}
function Replace(nID)
{
var aBatch;
var hFocus;
var lpFrameStart;
var lpFrameCurr;
var lpFrameEnd;
var aDoc;
var sMsg;
var sFlags;
var nCount;
var nCountAll;
var nRange1;
var nRange2;
var nMsgType;
var hEditWnd;
var lpCaret;
var lpSelect;
var lpPoint64;
var nSelStart;
var nSelEnd;
var nCaretPos;
var bChanged;
var nTextLen;
var i, n;
if (bBatch)
{
aBatch = GetBatch();
if (! aBatch.length)
return;
if (bLockUndo)
{
lpFrameStart = SendMessage(hMainWnd, 1290 /*AKD_FRAMEFINDW*/, 1 /*FWF_CURRENT*/, 0);
lpFrameCurr = lpFrameStart;
do
{
if (SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 15 /*FI_MODIFIED*/, lpFrameCurr) || (! SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 33 /*FI_FILELEN*/, lpFrameCurr)))
{
AkelPad.MessageBox(hDlg, sTxtSaveDocs, sTxtDlgTitle, 0x30 /*MB_ICONWARNING*/);
return;
}
}
while ((nRange == 5) && ((lpFrameCurr = SendMessage(hMainWnd, 1290 /*AKD_FRAMEFINDW*/, 2 /*FWF_NEXT*/, lpFrameCurr)) != lpFrameStart));
}
}
else
{
sFlags = "";
if (! bMatch) sFlags += "i";
if (bWord) sFlags += "w";
if (bRegExp) sFlags += "r";
if (! bDotNL) sFlags += "n";
if (bFunc) sFlags += "f";
if (nID == IDREPL2B) sFlags += "g";
}
if ((nRange == 5) && (SendMessage(hMainWnd, 1291 /*AKD_FRAMESTATS*/, 0 /*FWS_COUNTALL*/, 0) > 1) &&
(AkelPad.MessageBox(hDlg, sTxtAreYouSure, sTxtDlgTitle, 0x21 /*MB_OKCANCEL|MB_ICONQUESTION*/) != 1 /*IDOK*/))
return;
hFocus = oSys.Call("User32::GetFocus");
lpFrameStart = SendMessage(hMainWnd, 1290 /*AKD_FRAMEFINDW*/, 1 /*FWF_CURRENT*/, 0);
lpFrameCurr = lpFrameStart;
lpFrameEnd = lpFrameStart;
aDoc = [];
sMsg = "";
nCountAll = 0;
if (nRange < 4)
nRange1 = -(nRange + 1);
if (nID == IDREPL2B)
{
for (i = IDWHATS; i <= IDCLOSEB; ++i)
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, i), 0);
}
do
{
hEditWnd = AkelPad.GetEditWnd();
lpCaret = AkelPad.MemAlloc(_X64 ? 24 : 12 /*AECHARINDEX)*/);
lpSelect = AkelPad.MemAlloc(_X64 ? 56 : 32 /*AESELECTION)*/);
lpPoint64 = AkelPad.MemAlloc(_X64 ? 16 : 8);
SendMessage(hEditWnd, 3125 /*AEM_GETSEL*/, lpCaret, lpSelect);
SendMessage(hEditWnd, 3179 /*AEM_GETSCROLLPOS*/, 0, lpPoint64);
if (bBatch)
{
nCount = 0;
bChanged = false;
nSelStart = AkelPad.GetSelStart();
nSelEnd = AkelPad.GetSelEnd();
nCaretPos = SendMessage(hEditWnd, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpCaret);
nTextLen = SendMessage(hEditWnd, 3138 /*AEM_GETRICHOFFSET*/, 2 /*AEGI_LASTCHAR*/, 0);
if (bLockUndo)
{
SendMessage(hEditWnd, 3079 /*AEM_EMPTYUNDOBUFFER*/, 0, 0);
SendMessage(hEditWnd, 3083 /*AEM_LOCKCOLLECTUNDO*/, 1, 0);
}
else
{
SendMessage(hEditWnd, 3080 /*AEM_STOPGROUPTYPING*/, 0, 0);
SendMessage(hEditWnd, 3081 /*AEM_BEGINUNDOACTION*/, 0, 0);
}
SendMessage(hEditWnd, 3185 /*AEM_LOCKSCROLL*/, 3 /*SB_BOTH*/, 1);
SendMessage(hMainWnd, 11 /*WM_SETREDRAW*/, 0, 0);
SendMessage(hEditWnd, 11 /*WM_SETREDRAW*/, 0, 0);
for (i = 0; i < aBatch.length; ++i)
{
if (aBatch[i][0])
{
if (nRange == 0)
{
nCaretPos -= nTextLen - (nTextLen = SendMessage(hEditWnd, 3138 /*AEM_GETRICHOFFSET*/, 2 /*AEGI_LASTCHAR*/, 0));
AkelPad.SetSel(nCaretPos, nCaretPos);
}
else if (nRange == 1)
AkelPad.SetSel(nCaretPos, nCaretPos);
else if (nRange == 2)
{
nSelEnd -= nTextLen - (nTextLen = SendMessage(hEditWnd, 3138 /*AEM_GETRICHOFFSET*/, 2 /*AEGI_LASTCHAR*/, 0));
AkelPad.SetSel(nSelStart, nSelEnd);
}
n = TextReplace(aBatch[i][0], aBatch[i][1], aBatch[i][2], nRange1, nRange2);
if ((n instanceof Error) || (n < 0))
{
nCount = n;
sMsg += sTxtBatchErr + (i + 1) + ".\n";
break;
}
if (n > 0)
{
nCount += n;
bChanged = true;
}
}
}
if (bLockUndo)
SendMessage(hEditWnd, 3083 /*AEM_LOCKCOLLECTUNDO*/, 0, 0);
else
{
SendMessage(hEditWnd, 3082 /*AEM_ENDUNDOACTION*/, 0, 0);
SendMessage(hEditWnd, 3080 /*AEM_STOPGROUPTYPING*/, 0, 0);
}
SendMessage(hEditWnd, 3185 /*AEM_LOCKSCROLL*/, 3 /*SB_BOTH*/, 0);
SendMessage(hEditWnd, 3376 /*AEM_UPDATESCROLLBAR*/, 3 /*SB_BOTH*/, 0);
if ((nCount instanceof Error) || (nCount <= 0))
{
if (bChanged)
{
if (bLockUndo)
{
SendMessage(hEditWnd, 3087 /*AEM_SETMODIFY*/, 0, 0);
AkelPad.Command(4104 /*IDM_FILE_REOPEN*/);
}
else
SendMessage(hEditWnd, 3077 /*AEM_UNDO*/, 0, 0);
}
SendMessage(hEditWnd, 3132 /*AEM_INDEXUPDATE*/, 0, lpCaret);
SendMessage(hEditWnd, 3132 /*AEM_INDEXUPDATE*/, 0, lpSelect);
SendMessage(hEditWnd, 3132 /*AEM_INDEXUPDATE*/, 0, _PtrAdd(lpSelect, _X64 ? 24 : 12));
SendMessage(hEditWnd, 3126 /*AEM_SETSEL*/, lpCaret, lpSelect);
SendMessage(hEditWnd, 3180 /*AEM_SETSCROLLPOS*/, 0, lpPoint64);
}
else
{
SendMessage(hEditWnd, 3087 /*AEM_SETMODIFY*/, 1, 0);
SendMessage(hEditWnd, 3183 /*AEM_SCROLLTOPOINT*/, 0, 0 /*scroll to caret*/);
}
SendMessage(hMainWnd, 11 /*WM_SETREDRAW*/, 1, 0);
SendMessage(hEditWnd, 11 /*WM_SETREDRAW*/, 1, 0);
oSys.Call("User32::InvalidateRect", hMainWnd, 0, 1);
oSys.Call("User32::InvalidateRect", hEditWnd, 0, 1);
}
else
nCount = TextReplace(sWhat, sWith, sFlags, nRange1, nRange2);
if ((nCount instanceof Error) || (nCount <= 0))
{
AkelPad.MemFree(lpCaret);
AkelPad.MemFree(lpSelect);
AkelPad.MemFree(lpPoint64);
if (nCount != 0)
{
if (nCount instanceof Error)
{
sMsg += sTxtRunTimeErr + "\n" + nCount.description;
if (! bBatch)
hFocus = GetDlgItem(hDlg, IDWITHE);
}
else if (nCount == -13)
{
sMsg += sTxtNoFuncErr;
if (! bBatch)
hFocus = GetDlgItem(hDlg, IDWITHE);
}
else if (nCount == -14)
{
sMsg += sTxtNoTextErr;
if (! bBatch)
hFocus = GetDlgItem(hDlg, IDWITHE);
}
else if (nCount <= -100)
{
sMsg += sTxtRegExpErr;
if (! bBatch)
{
hFocus = GetDlgItem(hDlg, IDWHATE);
SendDlgItemMessage(hDlg, IDWHATE, 177 /*EM_SETSEL*/, -nCount - 100, -1);
}
}
nMsgType = 0x10 /*MB_ICONERROR*/;
break;
}
}
else
{
nCountAll += nCount;
lpFrameEnd = lpFrameCurr;
aDoc.push([lpFrameCurr, lpCaret, lpSelect, lpPoint64]);
}
}
while ((nRange == 5) && ((lpFrameCurr = SendMessage(hMainWnd, 1285 /*AKD_FRAMEACTIVATE*/, 0x10 /*FWA_NEXT*/, lpFrameCurr)) != lpFrameStart));
if (nID == IDREPL2B)
{
for (i = IDWHATS; i <= IDCLOSEB; ++i)
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, i), 1);
SetColorsAE();
EnableButtonsDlg();
}
oSys.Call("User32::SetFocus", hFocus);
if ((typeof nCount == "number") && (nCount >= 0))
{
SendMessage(hMainWnd, 1285 /*AKD_FRAMEACTIVATE*/, 0, lpFrameEnd);
nMsgType = 0x40 /*MB_ICONINFORMATION*/;
if ((nRange == 5) && (nCountAll > 0))
sMsg += sTxtChangedDocs + aDoc.length + "\n";
if ((nID == IDREPL1B) && (nCountAll == 0) || (nID == IDREPL2B))
sMsg += sTxtCountChanges + nCountAll;
//add to history
if ((nCountAll > 0) && (nHistLen > 0))
{
if (bBatch)
{
for (i = 0; i < aHist.length; ++i)
{
if ((aHist[i][0].toLowerCase() == sBFile.toLowerCase()) && (aHist[i][2] == "b"))
{
aHist.splice(i, 1);
break;
}
}
aHist.unshift([sBFile, "", "b"]);
}
else
{
sFlags = sFlags.replace("g", "");
for (i = 0; i < aHist.length; ++i)
{
if ((aHist[i][0] == sWhat) && (aHist[i][1] == sWith) && (aHist[i][2] == sFlags))
{
aHist.splice(i, 1);
break;
}
}
aHist.unshift([sWhat, sWith, sFlags]);
}
if (aHist.length > nHistLen)
aHist.length = nHistLen;
}
}
else
{
for (i = aDoc.length - 1; i >= 0; --i)
{
SendMessage(hMainWnd, 1285 /*AKD_FRAMEACTIVATE*/, 0, aDoc[i][0]);
hEditWnd = AkelPad.GetEditWnd();
if (bBatch && bLockUndo)
{
SendMessage(hEditWnd, 3087 /*AEM_SETMODIFY*/, 0, 0);
AkelPad.Command(4104 /*IDM_FILE_REOPEN*/);
}
else
SendMessage(hEditWnd, 3077 /*AEM_UNDO*/, 0, 0);
SendMessage(hEditWnd, 3132 /*AEM_INDEXUPDATE*/, 0, aDoc[i][1]);
SendMessage(hEditWnd, 3132 /*AEM_INDEXUPDATE*/, 0, aDoc[i][2]);
SendMessage(hEditWnd, 3132 /*AEM_INDEXUPDATE*/, 0, _PtrAdd(aDoc[i][2], _X64 ? 24 : 12));
SendMessage(hEditWnd, 3126 /*AEM_SETSEL*/, aDoc[i][1], aDoc[i][2]);
SendMessage(hEditWnd, 3180 /*AEM_SETSCROLLPOS*/, 0, aDoc[i][3]);
}
SendMessage(hMainWnd, 1285 /*AKD_FRAMEACTIVATE*/, 0, lpFrameStart);
}
for (i = 0; i < aDoc.length; ++i)
{
for (n = 1; n < aDoc[i].length; ++n)
AkelPad.MemFree(aDoc[i][n]);
}
if (sMsg.length)
AkelPad.MessageBox(hDlg, sMsg, sTxtDlgTitle, nMsgType);
}
function GetBatch()
{
var sBFileFull = AkelPad.GetAkelDir(5 /*ADTYPE_SCRIPTS*/) + "\\" + sBFile;
var aBatch;
var bEmpty;
var i;
if (! oFSO.FileExists(sBFileFull))
{
AkelPad.MessageBox(hDlg, sBFileFull + "\n\n" + sTxtFileNotExist, sTxtBatchRepl.replace("&", ""), 0x40 /*MB_ICONINFORMATION*/);
MenuBatch();
return [];
}
aBatch = AkelPad.ReadFile(sBFileFull, 0x10 /*ADT_NOMESSAGES*/, 1200 /*UTF-16LE*/, 1).split("\r\n");
bEmpty = true;
for (i = 0; i < aBatch.length; ++i)
{
aBatch[i] = aBatch[i].split("\t", 3);
if (aBatch[i][0])
{
bEmpty = false;
if (aBatch[i].length < 2)
aBatch[i][1] = "";
if (aBatch[i].length < 3)
aBatch[i][2] = "";
aBatch[i][2] += "bg";
}
}
if (bEmpty)
{
AkelPad.MessageBox(hDlg, sBFileFull + "\n\n" + sTxtFileNoData, sTxtBatchRepl.replace("&", ""), 0x40 /*MB_ICONINFORMATION*/);
aBatch.length = 0;
}
return aBatch;
}
Part 2: TextReplace_part2.js
Part 3: TextReplace_part3.js