View previous topic :: View next topic |
Author |
Message |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Sat Mar 05, 2016 6:39 pm Post subject: |
|
|
Replace text in edit window.
GUI for TextReplace function.
All parts of the script should be saved in one file in Unicode format.
Download archive: KDJ.zip.
Part 1: TextReplace.js
Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=30804#30804
// 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#17609
// TextReplace_function.js: http://akelpad.sourceforge.net/forum/viewtopic.php?p=30653#30653
// For view AkelPad help file, is needed HtmlView.js: http://akelpad.sourceforge.net/forum/viewtopic.php?p=29221#29221
// 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
Last edited by KDJ on Tue Jul 26, 2016 6:59 pm; edited 17 times in total |
|
Back to top |
|
 |
nbsp
Joined: 17 Jan 2016 Posts: 19
|
Posted: Tue Mar 08, 2016 8:40 am Post subject: fullWindow.js - resizable window |
|
|
Infocatcher wrote: | fullWindow.js Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=24434#24434
// http://infocatcher.ucoz.net/js/akelpad_scripts/fullWindow.js
// https://github.com/Infocatcher/AkelPad_scripts/blob/master/fullWindow.js
// (c) Infocatcher 2014
// version 0.1.0 - 2014-04-03
// Just like full screen mode, but preserve window size and position
// Required FullScreen plugin!
var hMainWnd = AkelPad.GetMainWnd();
var oSys = AkelPad.SystemFunction();
if(hMainWnd) {
var lpRect = AkelPad.MemAlloc(16); //sizeof(RECT)
if(lpRect) {
oSys.Call("user32::GetWindowRect", hMainWnd, lpRect);
var x = AkelPad.MemRead(lpRect, 3 /*DT_DWORD*/);
var y = AkelPad.MemRead(lpRect + 4, 3 /*DT_DWORD*/);
var w = AkelPad.MemRead(lpRect + 8, 3 /*DT_DWORD*/) - x;
var h = AkelPad.MemRead(lpRect + 12, 3 /*DT_DWORD*/) - y;
AkelPad.MemFree(lpRect);
AkelPad.Call("FullScreen::Main");
oSys.Call("user32::SetWindowPos", hMainWnd, 0, x, y, w, h, 0x14 /*SWP_NOZORDER|SWP_NOACTIVATE*/);
}
} |
<download | mirror | development version>
Just like full screen mode, but preserve window size and position.
Required FullScreen plugin! |
fullWindowRes.js Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=24434#24434
// http://infocatcher.ucoz.net/js/akelpad_scripts/fullWindow.js
// https://github.com/Infocatcher/AkelPad_scripts/blob/master/fullWindow.js
// (c) Infocatcher 2014
// Version: 0.1.0 - 2014-04-03
// Author: Infocatcher
//// Just like full screen mode, but preserve window size and position (supports resize, minimize, maximize)
// Required FullScreen plugin!
// Arguments:
// -resizable=1 - sets the WS_THICKFRAME, WS_MINIMIZEBOX, WS_MAXIMIZEBOX styles allowing the window
// to be resized, minimized (WinKey+Down arrow) and maximized (WinKey+Up arrow)
// Usage:
// Call("Scripts::Main", 1, "fullWindowRes.js") - switch to full window mode
// Call("Scripts::Main", 1, "fullWindowRes.js", `-resizable=1`) - switch to full resizable window mode
var hMainWnd = AkelPad.GetMainWnd();
var oSys = AkelPad.SystemFunction();
if (hMainWnd) {
var lpRect = AkelPad.MemAlloc(16); //sizeof(RECT)
if (lpRect) {
oSys.Call("user32::GetWindowRect", hMainWnd, lpRect);
var x = AkelPad.MemRead(_PtrAdd(lpRect, 0), 3 /*DT_DWORD*/);
var y = AkelPad.MemRead(_PtrAdd(lpRect, 4), 3 /*DT_DWORD*/);
var w = AkelPad.MemRead(_PtrAdd(lpRect, 8), 3 /*DT_DWORD*/) - x;
var h = AkelPad.MemRead(_PtrAdd(lpRect, 12), 3 /*DT_DWORD*/) - y;
AkelPad.MemFree(lpRect);
AkelPad.Call("FullScreen::Main");
if (AkelPad.GetArgValue("resizable", 0) == 1) {
var style = oSys.Call("user32::GetWindowLong" + _TCHAR, hMainWnd, -16 /*GWL_STYLE*/);
style |= 0x00040000 | 0x00020000 | 0x00010000; /*WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX*/
oSys.Call("user32::SetWindowLong" + _TCHAR, hMainWnd, -16 /*GWL_STYLE*/, style);
}
oSys.Call("user32::SetWindowPos", hMainWnd, 0, x, y, w, h, 0x34 /*SWP_FRAMECHANGED|SWP_NOZORDER|SWP_NOACTIVATE*/);
}
} |
Just like full screen mode, but preserve window size and position - supports resize, minimize (WinKey+Down arrow), maximize (WinKey+Up arrow).
Required FullScreen plugin!
Recommended also are the ContextMenu and Hotkeys plugins, and assigning a hotkey for showing the main menu using something like:
Code: | Call("ContextMenu::Show", 2, "-6", "-6") |
|
|
Back to top |
|
 |
Kley
Joined: 28 Mar 2015 Posts: 202 Location: Russia
|
Posted: Wed Mar 09, 2016 4:52 pm Post subject: |
|
|
Removing lines containing / not containing the selected phrase.
DeletePhrasesInText.js
Code: | // ============================================================================
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=30854#30854
// Version: 2016-03-09
// Author: Kley
//
// *** Удаление строк содержащих/не содержащих выделенную фразу в строке ***
//
// Параметры:
// -toempty=1 -действие со строкой:
// 0 удаление (по умолчанию);
// 1 замена на пустую.
// -nophrase=1 -поиск строк по содержимому:
// 0 строки с фразой (по умолчанию);
// 1 строки без фразы.
// -ignorecase=1 -метод сравнения строк:
// 0 с учетом регистра (по умолчанию);
// 1 без учета регистра.
// -clipboard=1 -фраза (текст для поиска):
// 0 выделенный текст (по умолчанию);
// 1 текст из буфера обмена.
//
// Применение:
// Заменить строки с фразой из буфера на пустую
// Call("Scripts::Main", 1, "DeletePhrasesInText.js", "-toempty=1 -clipboard=1 -ignorecase=1")
// Удалить строки не содержащие фразу (с учетом регистра)
// Call("Scripts::Main", 1, "DeletePhrasesInText.js", "-nophrase=1")
//
// Примечание:
// Поиск и замена ведется во всем тексте, построчно.
// ============================================================================
var argClipBoard = AkelPad.GetArgValue("clipboard", 0);
var argEmptyString = AkelPad.GetArgValue("toempty", 0);
var argNoPhrase = AkelPad.GetArgValue("nophrase", 0);
var argIgnoreCase = AkelPad.GetArgValue("ignorecase", 0);
var hWndEdit = AkelPad.GetEditWnd();
var pEditText = AkelPad.GetTextRange(0, -1);
var nCaretLine;
var aText;
var aNewText = [];
var pSearchText;
var pCurLine;
var bFaind = false;
if (hWndEdit)
{
nCaretLine = GetCaretLine(hWndEdit);
pSearchText = (argClipBoard != 0) ? AkelPad.GetClipboardText() : AkelPad.GetSelText();
if (pEditText && pSearchText)
{
pSearchText = GetIgnoreCase(pSearchText);
aText = pEditText.split("\r");
for (var i = 0; i < aText.length; i++)
{
pCurLine = GetIgnoreCase(aText[i]);
if (argNoPhrase != 0)
bFaind = pCurLine.indexOf(pSearchText) == -1;
else
bFaind = pCurLine.indexOf(pSearchText) != -1;
AddInNewArrey(aText[i], bFaind);
}
pEditText = aNewText.join("\n");
SetRedraw(hWndEdit, false);
AkelPad.SetSel(0, -1);
AkelPad.ReplaceSel(pEditText);
AkelPad.SendMessage(AkelPad.GetMainWnd(),
1206 /*AKD_GOTOW*/,
0x1 /*GT_LINE*/,
AkelPad.MemStrPtr(nCaretLine + ":0"));
SetRedraw(hWndEdit, true);
AkelPad.SendMessage(hWndEdit, 3376 /*AEM_UPDATESCROLLBAR*/, 3, 0);
}
}
function AddInNewArrey(sTxt, bEmpty)
{
if (bEmpty)
{
if (argEmptyString != 0)
aNewText.push("");
}
else
aNewText.push(sTxt);
}
function GetIgnoreCase(sTxt)
{
return (argIgnoreCase != 0) ? sTxt.toLowerCase() : sTxt;
}
function SetRedraw(hWnd, bRedraw)
{
AkelPad.SendMessage(hWnd, 11 /*WM_SETREDRAW*/, bRedraw, 0);
if (bRedraw) AkelPad.SystemFunction().Call("user32::InvalidateRect", hWnd, 0, true);
}
function GetCaretLine(hWnd)
{
var nLine = AkelPad.SendMessage(hWnd, 3129 /*AEM_GETLINENUMBER*/, 1 /*AEGL_FIRSTSELLINE*/, 0);
var nUnwrappedLine = AkelPad.SendMessage(hWnd, 3143 /*AEM_GETUNWRAPLINE*/, nLine, 0);
return nUnwrappedLine + 1;
}
|
|
|
Back to top |
|
 |
Kley
Joined: 28 Mar 2015 Posts: 202 Location: Russia
|
Posted: Mon Mar 21, 2016 8:56 pm Post subject: |
|
|
ConvertNumColorValue part2.js
Code: | function GetCoderVariableValue(hWndEdit, hDocEdit, pVarName)
{
var pVarValue = "";
var lpVarValue;
if (AkelPad.IsPluginRunning("Coder::HighLight"))
{
if (lpVarValue = AkelPad.MemAlloc(32 * 2 /*sizeof(wchar_t)*/))
{
AkelPad.CallW("Coder::Settings", 22, hWndEdit, hDocEdit, pVarName, lpVarValue);
pVarValue = AkelPad.MemRead(lpVarValue, 1 /*DT_UNICODE*/);
AkelPad.MemFree(lpVarValue);
}
}
return pVarValue;
}
function ConvertToHex(pNum, nID)
{
switch (nID)
{
case IDC_EDTRGB:
if (/^(\d{1,3})[ \W]+(\d{1,3})[ \W]+(\d{1,3})$/.test(pNum))
{
if ( (RegExp.$1 > 255) ||
(RegExp.$2 > 255) ||
(RegExp.$3 > 255) )
return "";
return Pad( (parseInt(RegExp.$1, 10)).toString(16) ) +
Pad( (parseInt(RegExp.$2, 10)).toString(16) ) +
Pad( (parseInt(RegExp.$3, 10)).toString(16) );
}
else if (/^(0x[0-9A-FHa-fh]+)[ \W]+(0x[0-9A-FHa-fh]+)[ \W]+(0x[0-9A-FHa-fh]+)$/.test(pNum))
{
if ( (RegExp.$1 > 255) ||
(RegExp.$2 > 255) ||
(RegExp.$3 > 255) )
return "";
return Pad(RegExp.$1.substr(2)) +
Pad(RegExp.$2.substr(2)) +
Pad(RegExp.$3.substr(2));
}
break;
case IDC_EDTDEC:
if (/^\d+$/.test(pNum))
{
pNum = (parseInt(pNum, 10)).toString(16);
if ( (pNum.length != 0) &&
(pNum.length < 6) )
pNum = Pad(pNum, 6);
return pNum;
}
break;
case IDC_EDTBIN:
if (/^[0-1]+$/.test(pNum))
{
pNum = (parseInt(pNum, 2)).toString(16);
if ( (pNum.length != 0) &&
(pNum.length < 6) )
pNum = Pad(pNum, 6);
return pNum;
}
break;
case IDC_EDTOCT:
if (/^[0-7]+$/.test(pNum))
{
pNum = (parseInt(pNum, 8)).toString(16);
if ( (pNum.length != 0) &&
(pNum.length < 6) )
pNum = Pad(pNum, 6);
return pNum;
}
}
return "";
}
// sHex="ffff00", return 255,255,0
function HexToRGB(sHex)
{
if (/^[\da-f]{6}$/i.test(sHex))
{
var nRGB = parseInt(sHex, 16);
// Red,Green,Blue
return (0xFF & (nRGB >> 0x10)) + ',' +
(0xFF & (nRGB >> 0x08)) + ',' +
(0xFF & nRGB);
}
return "";
}
function HexToOct(pNum)
{
if (/^[\da-f]+$/i.test(pNum))
return (parseInt(pNum, 16)).toString(8);
return "";
}
function HexToDec(pNum)
{
if (/^[\da-f]+$/i.test(pNum))
return parseInt(pNum, 16).toString();
return "";
}
function HexToBin(pNum)
{
if (/^[\da-f]+$/i.test(pNum))
{
pNum = (parseInt(pNum, 16)).toString(2);
if (pNum.length < 32)
pNum = Pad(pNum, 32);
return pNum;
}
return "";
}
//pHex=ffccff or pHex=#ffccff
function HexToCMYK(pHex)
{
pHex = (pHex.charAt(0) == "#") ? pHex.substring(1, 7) : pHex;
if (pHex.length == 6)
{
if (/[0-9a-f]{6}/i.test(pHex))
{
var r = parseInt(pHex.substring(0, 2), 16);
var g = parseInt(pHex.substring(2, 4), 16);
var b = parseInt(pHex.substring(4, 6), 16);
// Black
if (r == 0 && g == 0 && b == 0)
return [0, 0, 0, 1];
var C = 1 - (r / 255);
var M = 1 - (g / 255);
var Y = 1 - (b / 255);
var minCMY = Math.min(C, Math.min(M, Y));
C = (C - minCMY) / (1 - minCMY);
M = (M - minCMY) / (1 - minCMY);
Y = (Y - minCMY) / (1 - minCMY);
var K = minCMY;
return [C, M, Y, K];
}
}
return 0;
}
//R:0-255, G:0-255, B:0-255
function HexToHSV(pHex)
{
pHex = HexToRGB(pHex).split(",");
var r = parseInt(pHex[0], 10);
var g = parseInt(pHex[1], 10);
var b = parseInt(pHex[2], 10);
if (isNaN(r) || isNaN(g) || isNaN(b))
return;
if ( r < 0 || r > 255 ||
g < 0 || g > 255 ||
b < 0 || b > 255 )
return;
r /= 255;
g /= 255;
b /= 255;
var minRGB = Math.min(r, Math.min(g, b));
var maxRGB = Math.max(r, Math.max(g, b));
// Black-gray-white
if (minRGB == maxRGB)
return [0, 0, minRGB];
var d = (r == minRGB) ? g-b : ((b == minRGB) ? r-g : b-r);
var h = (r == minRGB) ? 3 : ((b == minRGB) ? 1 : 5);
var H = 60 * (h - d / (maxRGB - minRGB));
var S = (maxRGB - minRGB) / maxRGB;
var V = maxRGB;
return [H, S, V];
}
function Pad(pNum, n)
{
if (!n) n = 2;
while (pNum.length < n)
pNum = "0" + pNum;
return pNum;
}
function ChooseColor()
{
var lpRGB;
var sByte;
var nChoCoSize = _X64?72:36 /*sizeof(CHOOSECOLOR)*/;
var lpChoCo = AkelPad.MemAlloc(nChoCoSize); //CHOOSECOLOR
var lpCusCo = AkelPad.MemAlloc(16 * 4 /*sizeof(COLORREF)*/);
var pHex = GetDlgItemText(IDC_EDTHEX);
if (!pHex)
pHex = "000000";
pHex = HexReverse(pHex);
oSys.RegisterCallback(ColorCallback);
//Flags = CC_ANYCOLOR|CC_FULLOPEN|CC_RGBINIT|CC_ENABLEHOOK
AkelPad.MemCopy(_PtrAdd(lpChoCo, 0), nChoCoSize, 3 /*DT_DWORD*/); //lStructSize
AkelPad.MemCopy(_PtrAdd(lpChoCo, _X64? 8: 4), hWndDialog, 2 /*DT_QWORD*/); //hWndOwner
AkelPad.MemCopy(_PtrAdd(lpChoCo, _X64?24:12), pHex, 3 /*DT_DWORD*/); //rgbResult
AkelPad.MemCopy(_PtrAdd(lpChoCo, _X64?32:16), lpCusCo, 2 /*DT_QWORD*/); //lpCustColors
AkelPad.MemCopy(_PtrAdd(lpChoCo, _X64?40:20), 0x113, 3 /*DT_DWORD*/); //Flags
AkelPad.MemCopy(_PtrAdd(lpChoCo, _X64?56:28), ColorCallback, 2 /*DT_QWORD*/); //lpfnHook
if (oSys.Call("Comdlg32::ChooseColorW", lpChoCo))
{
pHex = "";
lpRGB = _PtrAdd(lpChoCo, _X64?24:12); //offsetof(CHOOSECOLOR, rgbResult)
if (AkelPad.MemRead(lpRGB, 3 /*DT_DWORD*/) != -1)
{
for (var i = 0; i < 3; ++i)
{
sByte = AkelPad.MemRead(_PtrAdd(lpRGB, i), 5 /*DT_BYTE*/).toString(16).toUpperCase();
pHex += Pad(sByte);
}
}
oSys.Call("User32::SetFocus", GetDlgItem(IDC_EDTHEX));
SetDlgItemText(IDC_EDTHEX, pHex);
SendDlgItemMessage(IDC_EDTHEX, 177 /*EM_SETSEL*/, 0, -1);
}
oSys.UnregisterCallback(ColorCallback);
AkelPad.MemFree(lpChoCo);
AkelPad.MemFree(lpCusCo);
return "";
}
function ColorCallback(hWnd, uMsg, wParam, lParam)
{
if (uMsg == 272 /*WM_INITDIALOG*/)
SetDialogPos(hWnd);
return 0;
}
// sHex="10ff20", return (Int) 20ff10
function HexReverse(sHex)
{
if (/^[\da-f]{6}$/i.test(sHex))
return parseInt(sHex.substr(4, 2) +
sHex.substr(2, 2) +
sHex.substr(0, 2), 16);
return oSys.Call("User32::GetSysColor", 15 /*COLOR_BTNFACE*/);
}
function PixelColorCapture()
{
var hDC;
var nColor = 0;
var ptPoint = [];
if (hDC = oSys.Call("User32::GetDC", 0))
{
GetCursorPos(ptPoint);
nColor = oSys.Call("Gdi32::GetPixel", hDC, ptPoint.x, ptPoint.y)
var nRed = (0xFF & (nColor ));
var nGreen = (0xFF & (nColor >> 0x08));
var nBlue = (0xFF & (nColor >> 0x10));
nColor = Pad(nRed.toString(16)) +
Pad(nGreen.toString(16)) +
Pad(nBlue.toString(16));
oSys.Call("User32::ReleaseDC", 0, hDC);
}
return nColor;
}
function GetCursorPos(ptPoint)
{
var lpPoint;
ptPoint.x = 0;
ptPoint.y = 0;
if (lpPoint = AkelPad.MemAlloc(8 /*sizeof(POINT)*/))
{
if (oSys.Call("user32::GetCursorPos", lpPoint))
{
ptPoint.x = AkelPad.MemRead(_PtrAdd(lpPoint, 0) /*offsetof(POINT, x)*/, 3 /*DT_DWORD*/);
ptPoint.y = AkelPad.MemRead(_PtrAdd(lpPoint, 4) /*offsetof(POINT, y)*/, 3 /*DT_DWORD*/);
}
AkelPad.MemFree(lpPoint);
}
}
function GetSysMenu(hWnd)
{
hSysMenu = oSys.Call("User32::GetSystemMenu", hWnd, false);
AppendMenu(hSysMenu, MF_SEPARATOR, 0, 0);
AppendMenu(hSysMenu, MF_STRING, IDM_SYSGETCOLOR, GetLangString(7));
AppendMenu(hSysMenu, MF_STRING, IDM_SYSDLGCOLOR, GetLangString(8));
AppendMenu(hSysMenu, MF_SEPARATOR, 0, 0);
AppendMenu(hSysMenu, MF_STRING, IDM_SYSCAPTURE, GetLangString(9));
AppendMenu(hSysMenu, MF_STRING, IDM_SYSONTOP, GetLangString(10));
}
function InitSysMenu(hMenu)
{
oSys.Call("User32::CheckMenuItem", hMenu, IDM_SYSCAPTURE,
bCapture ?
0x0000 /*MF_BYCOMMAND*/ | 0x0008 /*MF_CHECKED*/ :
0x0000 /*MF_BYCOMMAND*/ | 0x0000 /*MF_UNCHECKED*/);
oSys.Call("User32::CheckMenuItem", hMenu, IDM_SYSONTOP,
bWinOnTop ?
0x0000 /*MF_BYCOMMAND*/ | 0x0008 /*MF_CHECKED*/ :
0x0000 /*MF_BYCOMMAND*/ | 0x0000 /*MF_UNCHECKED*/);
}
function SysMenuCommand(nIDM)
{
if (nIDM == IDM_SYSDLGCOLOR)
{
PostMessage(hWndDialog, 0x111 /*WM_COMMAND*/, IDC_BTNIMG, 0);
}
else if (nIDM == IDM_SYSGETCOLOR)
{
oSys.Call("User32::SetFocus", GetDlgItem(IDC_EDTHEX));
SetDlgItemText(IDC_EDTHEX, PixelColorCapture());
}
else if (nIDM == IDM_SYSONTOP)
{
bWinOnTop = ! bWinOnTop;
bCloseDlg = false;
PostMessage(hWndDialog, 16 /*WM_CLOSE*/, 0, 0);
}
else if (nIDM == IDM_SYSCAPTURE)
{
if (!bCapture)
AkelPad.WindowSubClass(2 /*WSC_EDITPROC*/, AkelEditCallback,
514 /*WM_LBUTTONUP*/, 257 /*WM_KEYUP*/);
else
AkelPad.WindowUnsubClass(2 /*WSC_EDITPROC*/);
bCapture = ! bCapture;
}
}
function ContextMenuEdit(nID, nX, nY)
{
var hMenu = oSys.Call("User32::CreatePopupMenu");
var hMenu1 = oSys.Call("User32::CreatePopupMenu");
var nTextLen = GetDlgItemTextLen(nID);
var nSelRange = SendDlgItemMessage(nID, 176 /*EM_GETSEL*/, 0, 0);
var nSelBeg = LOWORD(nSelRange);
var nSelEnd = HIWORD(nSelRange);
var bSelect = (nSelBeg != nSelEnd);
var bSelAll = (nTextLen && (nTextLen != (nSelEnd - nSelBeg)));
var bUndo = SendDlgItemMessage(nID, 198 /*EM_CANUNDO*/, 0, 0);
var bPaste = AkelPad.GetClipboardText().length;
var aColor;
var aCMYK = [[],[]];
var aMenuItems = [];
var bCaseChanged;
var nCmd;
if (nX == 0xFFFF) //menu from keyboard
{
var ptCaret = GetCaretPos(GetDlgItem(nID));
nX = ptCaret.x;
nY = ptCaret.y;
}
AppendMenu(hMenu, bUndo ? MF_STRING : MF_GRAYED, 1, GetLangString(0)); //Undo
AppendMenu(hMenu, MF_SEPARATOR, 0, 0);
AppendMenu(hMenu, bSelect ? MF_STRING : MF_GRAYED, 2, GetLangString(1)); //Cut
AppendMenu(hMenu, bSelect ? MF_STRING : MF_GRAYED, 3, GetLangString(2)); //Copy
AppendMenu(hMenu, bPaste ? MF_STRING : MF_GRAYED, 4, GetLangString(3)); //Paste
AppendMenu(hMenu, bSelect ? MF_STRING : MF_GRAYED, 5, GetLangString(4)); //Delete
AppendMenu(hMenu, MF_SEPARATOR, 0, 0);
AppendMenu(hMenu, bSelAll ? MF_STRING : MF_GRAYED, 6, GetLangString(5)); //Select all
if (nTextLen)
{
aMenuItems[0] = GetDlgItemText(IDC_EDTHEX); // 00FFFF
if (nID == IDC_EDTHEX)
{
aMenuItems[1] = aMenuItems[0].toLowerCase(); // 00ffff
aMenuItems[2] = aMenuItems[1].replace(/^(0+)([\da-f]+)/i, "$2"); // ffff
aMenuItems[3] = aMenuItems[2].toUpperCase(); // FFFF
bCaseChanged = (aMenuItems[1] != aMenuItems[0]);
AppendMenu(hMenu, MF_SEPARATOR, 0, 0);
AppendMenu(hMenu, MF_POPUP, hMenu1, GetLangString(6)); //Copy...
AppendMenu(hMenu1, MF_STRING, 7, aMenuItems[1]);
if (bCaseChanged)
AppendMenu(hMenu1, MF_STRING, 8, aMenuItems[0]);
if (aMenuItems[1].length == 3 || aMenuItems[1].length == 6)
{
AppendMenu(hMenu1, MF_SEPARATOR, 0, 0);
AppendMenu(hMenu1, MF_STRING, 9, "#" + aMenuItems[1]);
if (bCaseChanged)
AppendMenu(hMenu1, MF_STRING, 10, "#" + aMenuItems[0]);
}
AppendMenu(hMenu1, MF_SEPARATOR, 0, 0);
AppendMenu(hMenu1, MF_STRING, 11, "0x" + aMenuItems[1]);
if (bCaseChanged)
AppendMenu(hMenu1, MF_STRING, 12, "0x" + aMenuItems[0]);
if (aMenuItems[1] != aMenuItems[2])
{
AppendMenu(hMenu1, MF_SEPARATOR, 0, 0);
AppendMenu(hMenu1, MF_STRING, 13, "0x" + aMenuItems[2]);
if (bCaseChanged)
AppendMenu(hMenu1, MF_STRING, 14, "0x" + aMenuItems[3]);
}
}
else if (nID == IDC_EDTRGB)
{
AppendMenu(hMenu, MF_SEPARATOR, 0, 0);
AppendMenu(hMenu, MF_POPUP, hMenu1, GetLangString(6 /*Copy...*/));
aMenuItems[6] = GetDlgItemText(IDC_CBOIMG);
if (aMenuItems[6] && (aMenuItems[6] !== "<Nothing>"))
{
AppendMenu(hMenu1, MF_STRING, 21, aMenuItems[6]);
AppendMenu(hMenu1, MF_SEPARATOR, 0, 0);
}
if (aColor = HexToCMYK(aMenuItems[0]))
{
for (var i = 0; i < aColor.length; ++i)
{
aCMYK[0][i] = (aColor[i] * 100).toFixed();
aCMYK[1][i] = (aColor[i]).toFixed(4);
}
aMenuItems[3] = aCMYK[0].join(", ");
aMenuItems[4] = aCMYK[0].join("%, ") + "%";
aMenuItems[5] = aCMYK[1].join(", ");
AppendMenu(hMenu1, MF_GRAYED, 0, "CMYK");
AppendMenu(hMenu1, MF_SEPARATOR, 0, 0);
AppendMenu(hMenu1, MF_STRING, 15, aMenuItems[3]);
AppendMenu(hMenu1, MF_STRING, 16, aMenuItems[4]);
AppendMenu(hMenu1, MF_STRING, 17, aMenuItems[5]);
}
if (aColor = HexToHSV(aMenuItems[0]))
{
aMenuItems[0] = aColor.join(", ");
aMenuItems[2] = aColor[0].toFixed(4) +", "+
aColor[1].toFixed(4) +", "+
aColor[2].toFixed(4);
aMenuItems[1] = aColor[0].toFixed(0) +", "+
(aColor[1] * 100).toFixed() +"%, "+
(aColor[2] * 100).toFixed() +"%";
AppendMenu(hMenu1, MF_GRAYED, 0, "HSV");
AppendMenu(hMenu1, MF_SEPARATOR, 0, 0);
AppendMenu(hMenu1, MF_STRING, 18, aMenuItems[0]);
AppendMenu(hMenu1, MF_STRING, 19, aMenuItems[1]);
AppendMenu(hMenu1, MF_STRING, 20, aMenuItems[2]);
}
}
}
nCmd = oSys.Call("User32::TrackPopupMenu", hMenu,
0x180 /*TPM_NONOTIFY|TPM_RETURNCMD*/, nX, nY, 0, GetDlgItem(nID), 0);
oSys.Call("User32::DestroyMenu", hMenu1);
oSys.Call("User32::DestroyMenu", hMenu);
switch (nCmd)
{
case 1: SendDlgItemMessage(nID, 199 /*EM_UNDO*/, 0, 0); break;
case 2: SendDlgItemMessage(nID, 768 /*WM_CUT*/, 0, 0); break;
case 3: SendDlgItemMessage(nID, 769 /*WM_COPY*/, 0, 0); break;
case 4: SendDlgItemMessage(nID, 770 /*WM_PASTE*/, 0, 0); break;
case 5: SendDlgItemMessage(nID, 771 /*WM_CLEAR*/, 0, 0); break;
case 6: SendDlgItemMessage(nID, 177 /*EM_SETSEL*/, 0, -1); break;
// HEX
case 7: AkelPad.SetClipboardText( aMenuItems[1]); break;
case 8: AkelPad.SetClipboardText( aMenuItems[0]); break;
case 9: AkelPad.SetClipboardText("#" + aMenuItems[1]); break;
case 10: AkelPad.SetClipboardText("#" + aMenuItems[0]); break;
case 11: AkelPad.SetClipboardText("0x" + aMenuItems[1]); break;
case 12: AkelPad.SetClipboardText("0x" + aMenuItems[0]); break;
case 13: AkelPad.SetClipboardText("0x" + aMenuItems[2]); break;
case 14: AkelPad.SetClipboardText("0x" + aMenuItems[3]); break;
// RGB
case 15: AkelPad.SetClipboardText(aMenuItems[3]); break;
case 16: AkelPad.SetClipboardText(aMenuItems[4]); break;
case 17: AkelPad.SetClipboardText(aMenuItems[5]); break;
case 18: AkelPad.SetClipboardText(aMenuItems[0]); break;
case 19: AkelPad.SetClipboardText(aMenuItems[1]); break;
case 20: AkelPad.SetClipboardText(aMenuItems[2]); break;
case 21: AkelPad.SetClipboardText(aMenuItems[6]); break;
}
}
function AppendMenu(hMenu, uFlags, uIDNewItem, lpNewItem)
{
oSys.Call("User32::AppendMenuW", hMenu, uFlags, uIDNewItem, lpNewItem);
}
function GetCaretPos(hWnd)
{
var lpPoint;
var ptPoint = [];
ptPoint.x = 0;
ptPoint.y = 0;
if (lpPoint = AkelPad.MemAlloc(8 /*sizeof(POINT)*/))
{
if (oSys.Call("User32::GetCaretPos", lpPoint))
{
oSys.Call("User32::ClientToScreen", hWnd, lpPoint);
ptPoint.x = AkelPad.MemRead(_PtrAdd(lpPoint, 0) /*offsetof(POINT, x)*/, 3 /*DT_DWORD*/);
ptPoint.y = AkelPad.MemRead(_PtrAdd(lpPoint, 4) /*offsetof(POINT, y)*/, 3 /*DT_DWORD*/) +
SendMessage(hWnd, 3188 /*AEM_GETCHARSIZE*/, 0 /*AECS_HEIGHT*/, 0);
}
AkelPad.MemFree(lpPoint);
}
return ptPoint;
}
function SetWindowFont(hWnd, hFont)
{
if (!hFont)
{
var nLFSize = 28 + 32 * 2; //sizeof(LOGFONTW)
var lpLF = AkelPad.MemAlloc(nLFSize);
var hDC;
var pFaceName = "MS Shell Dlg";
var nHeight = 10;
var nWeight = 400 /*FW_NORMAL*/;
var bItalic = false;
hDC = oSys.Call("User32::GetDC", hMainWnd);
nHeight = -oSys.Call("Kernel32::MulDiv", nHeight,
oSys.Call("Gdi32::GetDeviceCaps", hDC, 90 /*LOGPIXELSY*/), 72);
oSys.Call("User32::ReleaseDC", hMainWnd, hDC);
AkelPad.MemCopy(_PtrAdd(lpLF, 0), nHeight, 3 /*DT_DWORD*/); //lfHeight
AkelPad.MemCopy(_PtrAdd(lpLF, 16), nWeight, 3 /*DT_DWORD*/); //lfWeight
AkelPad.MemCopy(_PtrAdd(lpLF, 20), bItalic, 5 /*DT_BYTE*/); //lfItalic
AkelPad.MemCopy(_PtrAdd(lpLF, 28), pFaceName, 1 /*DT_UNICODE*/); //lfFaceName
hFont = oSys.Call("Gdi32::CreateFontIndirectW", lpLF);
AkelPad.MemFree(lpLF);
}
SendMessage(hWnd, 48 /*WM_SETFONT*/, hFont, true);
}
function SetDialogPos(hWnd)
{
var rcWndDesktop = GetWindowPos();
var sizeNonClient = {
"cx": oSys.Call("user32::GetSystemMetrics", 7 /*SM_CXFIXEDFRAME*/) * 2,
"cy": oSys.Call("user32::GetSystemMetrics", 8 /*SM_CYFIXEDFRAME*/) * 2 +
oSys.Call("user32::GetSystemMetrics", 4 /*SM_CYCAPTION*/)
};
oSys.Call("user32::SetWindowPos", hWnd, 0, oDlgPos.left, oDlgPos.top, 0, 0,
0x15 /*SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE*/);
var rcRect = GetWindowPos(hWnd);
var bPos = false;
if (rcRect.left < 0)
{
rcRect.left = sizeNonClient.cx;
bPos = true;
}
if (rcRect.right > rcWndDesktop.right)
{
rcRect.left = rcRect.left - (rcRect.right - rcWndDesktop.right) - sizeNonClient.cx;
bPos = true;
}
if (rcRect.bottom > rcWndDesktop.bottom)
{
rcRect.top = rcRect.top - (rcRect.bottom - rcWndDesktop.bottom) - sizeNonClient.cx;
bPos = true;
}
if (bPos)
oSys.Call("user32::SetWindowPos", hWnd, 0, rcRect.left, rcRect.top, 0, 0,
0x15 /*SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE*/);
}
function GetWindowPos(hWnd)
{
var rcRect = [];
var lpRect = AkelPad.MemAlloc(16); //sizeof(RECT)
if (!hWnd)
oSys.Call("User32::SystemParametersInfo" + _TCHAR, 48 /*SPI_GETWORKAREA*/, 0, lpRect, 0);
else
oSys.Call("User32::GetWindowRect", hWnd, lpRect);
rcRect.left = AkelPad.MemRead(_PtrAdd(lpRect, 0) /*offsetof(RECT, left)*/, 3 /*DT_DWORD*/);
rcRect.top = AkelPad.MemRead(_PtrAdd(lpRect, 4) /*offsetof(RECT, top)*/, 3 /*DT_DWORD*/);
rcRect.right = AkelPad.MemRead(_PtrAdd(lpRect, 8) /*offsetof(RECT, right)*/, 3 /*DT_DWORD*/);
rcRect.bottom = AkelPad.MemRead(_PtrAdd(lpRect, 12) /*offsetof(RECT, bottom)*/, 3 /*DT_DWORD*/);
AkelPad.MemFree(lpRect);
return rcRect;
}
function SetDlgIcon()
{
var hLib;
var hIcon = 0;
oSys.Call("Kernel32::SetDllDirectory" + _TCHAR, AkelPad.GetAkelDir(4 /*ADTYPE_PLUGS*/));
if (hLib = oSys.Call("Kernel32::LoadLibraryEx" + _TCHAR, "ToolBar.dll", 0, 2 /*LOAD_LIBRARY_AS_DATAFILE*/))
{
if (hIcon = oSys.Call("User32::LoadImageW", hLib, 130, 1 /*uType=IMAGE_ICON*/, 16, 16, 0))
SendMessage(hWndDialog, 128 /*WM_SETICON*/, 1 /*ICON_BIG*/, hIcon);
oSys.Call("Kernel32::FreeLibrary", hLib);
}
return hIcon;
}
function ReadIni()
{
var oSet = AkelPad.ScriptSettings();
var bCap, bTop;
if (oSet.Begin("", 0x1 /*POB_READ*/))
{
oDlgPos.left = oSet.Read("DlgLeft", 1 /*PO_DWORD*/, 0);
oDlgPos.top = oSet.Read("DlgTop", 1 /*PO_DWORD*/, 0);
bCap = oSet.Read("Capture", 1 /*PO_DWORD*/, 0);
bTop = oSet.Read("WinOnTop", 1 /*PO_DWORD*/, 0);
if (nAddUserColors === undefined)
{
nAddUserColors = oSet.Read("AddUserColors", 1 /*PO_DWORD*/, 0);
pUserColors = oSet.Read("UserColors", 3 /*PO_STRING*/, "");
aUserColorName = GetUserColorsList();
}
oSet.End();
}
if (bCap) SysMenuCommand(IDM_SYSCAPTURE);
if (bTop) SysMenuCommand(IDM_SYSONTOP);
}
function WriteIni()
{
var oSet = AkelPad.ScriptSettings();
if (oSet.Begin("", 0x2 /*POB_SAVE*/))
{
oSet.Write("DlgLeft", 1 /*PO_DWORD*/, oDlgPos.left);
oSet.Write("DlgTop", 1 /*PO_DWORD*/, oDlgPos.top);
oSet.Write("WinOnTop", 1 /*PO_DWORD*/, bWinOnTop);
oSet.Write("Capture", 1 /*PO_DWORD*/, bCapture);
oSet.End();
}
}
function GetLangString(nStringID)
{
var nLangID=AkelPad.GetLangId(1 /*LANGID_PRIMARY*/);
if (nLangID == 0x19) //LANG_RUSSIAN
{
if (nStringID == 0)
return "&Отменить\tCtrl+Z";
if (nStringID == 1)
return "&Вырезать\tCtrl+X";
if (nStringID == 2)
return "&Копировать\tCtrl+C";
if (nStringID == 3)
return "Вст&авить\tCtrl+V";
if (nStringID == 4)
return "&Удалить\tDel";
if (nStringID == 5)
return "Выделить в&се\tCtrl+A";
if (nStringID == 6)
return "Копировать...";
if (nStringID == 7)
return "Получить цвет под курсором\tF2";
if (nStringID == 8)
return "Диалог выбора цвета...\tF3";
if (nStringID == 9)
return "Автозахват выделенного текста";
if (nStringID == 10)
return "Поверх всех окон";
}
else
{
if (nStringID == 0)
return "&Undo\tCtrl+Z";
if (nStringID == 1)
return "C&ut\tCtrl+X";
if (nStringID == 2)
return "&Copy\tCtrl+C";
if (nStringID == 3)
return "&Paste\tCtrl+V";
if (nStringID == 4)
return "&Delete\tDel";
if (nStringID == 5)
return "Select &all\tCtrl+A";
if (nStringID == 6)
return "Copy...";
if (nStringID == 7)
return "Get the color under the cursor\tF2";
if (nStringID == 8)
return "Color Selection Dialog...\tF3";
if (nStringID == 9)
return "Auto capture selected text";
if (nStringID == 10)
return "Always on top";
}
return "";
}
function GetUserColorsList()
{
var aColors = [["<Nothing>","0"]];
if (pUserColors)
{
pUserColors = pUserColors.split(";");
for (var i = 0; i < pUserColors.length; ++i)
aColors.push(pUserColors[i].split(","));
}
return aColors;
}
function GetColorsList()
{
return [["<Nothing>","0"],["AliceBlue","#F0F8FF"],["AntiqueWhite","#FAEBD7"],["Aqua","#00FFFF"],["Aquamarine","#7FFFD4"],["Azure","#F0FFFF"],["Beige","#F5F5DC"],["Bisque","#FFE4C4"],["Black","#000000"],["BlanchedAlmond","#FFEBCD"],["Blue","#0000FF"],["BlueViolet","#8A2BE2"],["Brown","#A52A2A"],["BurlyWood","#DEB887"],["CadetBlue","#5F9EA0"],["Chartreuse","#7FFF00"],["Chocolate","#D2691E"],["Coral","#FF7F50"],["CornflowerBlue","#6495ED"],["Cornsilk","#FFF8DC"],["Crimson","#DC143C"],["Cyan","#00FFFF"],["DarkBlue","#00008B"],["DarkCyan","#008B8B"],["DarkGoldenrod","#B8860B"],["DarkGray","#A9A9A9"],["DarkGreen","#006400"],["DarkKhaki","#BDB76B"],["DarkMagenta","#8B008B"],["DarkOliveGreen","#556B2F"],["DarkOrange","#FF8C00"],["DarkOrchid","#9932CC"],["DarkRed","#8B0000"],["DarkSalmon","#E9967A"],["DarkSeaGreen","#8FBC8F"],["DarkSlateBlue","#483D8B"],["DarkSlateGray","#2F4F4F"],["DarkTurquoise","#00CED1"],["DarkViolet","#9400D3"],["DeepPink","#FF1493"],["DeepSkyBlue","#00BFFF"],["DimGray","#696969"],["DodgerBlue","#1E90FF"],["FireBrick","#B22222"],["FloralWhite","#FFFAF0"],["ForestGreen","#228B22"],["Fuchsia","#FF00FF"],["Gainsboro","#DCDCDC"],["GhostWhite","#F8F8FF"],["Gold","#FFD700"],["Goldenrod","#DAA520"],["Gray","#808080"],["Green","#008000"],["GreenYellow","#ADFF2F"],["HoneyDew","#F0FFF0"],["HotPink","#FF69B4"],["IndianRed","#CD5C5C"],["Indigo","#4B0082"],["Ivory","#FFFFF0"],["Khaki","#F0E68C"],["Lavender","#E6E6FA"],["LavenderBlush","#FFF0F5"],["LawnGreen","#7CFC00"],["LemonChiffon","#FFFACD"],["LightBlue","#ADD8E6"],["LightCoral","#F08080"],["LightCyan","#E0FFFF"],["LightGoldenrodYellow","#FAFAD2"],["LightGray","#D3D3D3"],["LightGreen","#90EE90"],["LightPink","#FFB6C1"],["LightSalmon","#FFA07A"],["LightSeaGreen","#20B2AA"],["LightSkyBlue","#87CEFA"],["LightSlateGray","#778899"],["LightSteelBlue","#B0C4DE"],["LightYellow","#FFFFE0"],["Lime","#00FF00"],["LimeGreen","#32CD32"],["Linen","#FAF0E6"],["Magenta","#FF00FF"],["Maroon","#800000"],["MediumAquaMarine","#66CDAA"],["MediumBlue","#0000CD"],["MediumOrchid","#BA55D3"],["MediumPurple","#9370DB"],["MediumSeaGreen","#3CB371"],["MediumSlateBlue","#7B68EE"],["MediumSpringGreen","#00FA9A"],["MediumTurquoise","#48D1CC"],["MediumVioletRed","#C71585"],["MidnightBlue","#191970"],["MintCream","#F5FFFA"],["MistyRose","#FFE4E1"],["Moccasin","#FFE4B5"],["NavajoWhite","#FFDEAD"],["Navy","#000080"],["OldLace","#FDF5E6"],["Olive","#808000"],["OliveDrab","#6B8E23"],["Orange","#FFA500"],["OrangeRed","#FF4500"],["Orchid","#DA70D6"],["PaleGoldenrod","#EEE8AA"],["PaleGreen","#98FB98"],["PaleTurquoise","#AFEEEE"],["PaleVioletRed","#DB7093"],["PapayaWhip","#FFEFD5"],["PeachPuff","#FFDAB9"],["Peru","#CD853F"],["Pink","#FFC0CB"],["Plum","#DDA0DD"],["PowderBlue","#B0E0E6"],["Purple","#800080"],["Red","#FF0000"],["RosyBrown","#BC8F8F"],["RoyalBlue","#4169E1"],["SaddleBrown","#8B4513"],["Salmon","#FA8072"],["SandyBrown","#F4A460"],["SeaGreen","#2E8B57"],["SeaShell","#FFF5EE"],["Sienna","#A0522D"],["Silver","#C0C0C0"],["SkyBlue","#87CEEB"],["SlateBlue","#6A5ACD"],["SlateGray","#708090"],["Snow","#FFFAFA"],["SpringGreen","#00FF7F"],["SteelBlue","#4682B4"],["Tan","#D2B48C"],["Teal","#008080"],["Thistle","#D8BFD8"],["Tomato","#FF6347"],["Turquoise","#40E0D0"],["Violet","#EE82EE"],["Wheat","#F5DEB3"],["White","#FFFFFF"],["WhiteSmoke","#F5F5F5"],["Yellow","#FFFF00"],["YellowGreen","#9ACD32"]];
}
|
ConvertNumColorValue part1.js
Last edited by Kley on Sat Mar 26, 2016 7:01 am; edited 1 time in total |
|
Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Wed Mar 23, 2016 6:06 pm Post subject: |
|
|
Replace text in edit window.
Part 1: TextReplace.js
Part 2: TextReplace_part2.js
Code: | function HistAndTempl(bHist)
{
var aSel = [[IDWHATE, AkelPad.MemAlloc(_X64 ? 24 : 12 /*AECHARINDEX*/), AkelPad.MemAlloc(_X64 ? 56 : 32 /*AESELECTION*/), AkelPad.MemAlloc(_X64 ? 16 : 8 /*POINT64*/)],
[IDWITHE, AkelPad.MemAlloc(_X64 ? 24 : 12 /*AECHARINDEX*/), AkelPad.MemAlloc(_X64 ? 56 : 32 /*AESELECTION*/), AkelPad.MemAlloc(_X64 ? 16 : 8 /*POINT64*/)]];
var lpRECT = AkelPad.MemAlloc(16);
var sWhatHT = sWhat;
var sWithHT = sWith;
var sBFileHT = sBFile;
var bSaveTempl = false;
var IDLIST = 2000;
var IDMENUB = 2001;
var IDOKB = 2002;
var IDCANCELB = 2003;
var sTitleHT;
var aHotKeyHT;
var aTempl;
var sTempl;
var hWndHT;
var nX, nY, nW, nBX;
var i, n;
oSys.Call("User32::SetFocus", GetDlgItem(hDlg, bHist ? IDHISTB : IDTEMPLB));
SetDefPushButton(bHist ? IDHISTB : IDTEMPLB);
oSys.Call("User32::GetWindowRect", GetDlgItem(hDlg, IDMATCH), lpRECT);
oSys.Call("User32::ScreenToClient", hDlg, _PtrAdd(lpRECT, 8));
nX = ScaleUX(AkelPad.MemRead(_PtrAdd(lpRECT, 8), 3 /*DT_DWORD*/));
oSys.Call("User32::GetWindowRect", GetDlgItem(hDlg, IDWITHE), lpRECT);
oSys.Call("User32::ScreenToClient", hDlg, _PtrAdd(lpRECT, 0));
oSys.Call("User32::ScreenToClient", hDlg, _PtrAdd(lpRECT, 8));
nY = ScaleUY(AkelPad.MemRead(_PtrAdd(lpRECT, 12), 3 /*DT_DWORD*/) + 5);
nW = ScaleUX(AkelPad.MemRead(_PtrAdd(lpRECT, 8), 3 /*DT_DWORD*/)) - nX;
nBX = Math.round((nW - 70 * 3 - 10) / 2);
AkelPad.MemFree(lpRECT);
for (i = 0; i < 2; ++i)
{
SendDlgItemMessage(hDlg, aSel[i][0], 3125 /*AEM_GETSEL*/, aSel[i][1], aSel[i][2]);
SendDlgItemMessage(hDlg, aSel[i][0], 3179 /*AEM_GETSCROLLPOS*/, 0, aSel[i][3]);
SendDlgItemMessage(hDlg, aSel[i][0], 3081 /*AEM_BEGINUNDOACTION*/, 0, 0);
}
if (bHist)
{
sTitleHT = sTxtHistory.replace("&", "");
aHotKeyHT = [[0x0, 0x70 /*VK_F1*/, MenuHT],
[0x1 /*MOD_ALT*/, 0x2E /*VK_DELETE*/, RemoveHist],
[0x5 /*MOD_SHIFT|MOD_ALT*/, 0x2E /*VK_DELETE*/, ClearHist]];
}
else
{
sTitleHT = sTxtTemplates.replace("&", "");
aTempl = AkelPad.ReadFile(WScript.ScriptFullName.replace(/\.js$/i, "_templ.tsv"), 0x10 /*ADT_NOMESSAGES*/, 1200 /*UTF-16LE*/, 1).split("\r\n");
aHotKeyHT = [[0x0, 0x70 /*VK_F1*/, MenuHT],
[0x0, 0x2D /*VK_INSERT*/, AddTempl],
[0x0, 0x71 /*VK_F2*/, RenameTempl],
[0x1 /*MOD_ALT*/, 0x26 /*VK_UP*/, UpTempl],
[0x1 /*MOD_ALT*/, 0x28 /*VK_DOWN*/, DownTempl],
[0x1 /*MOD_ALT*/, 0x2E /*VK_DELETE*/, RemoveTempl]];
}
oSys.Call("User32::EnableWindow", hMainWnd, 0);
//0x50000000=WS_VISIBLE|WS_CHILD
//0x50000001=WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON
//0x50A10181=WS_VISIBLE|WS_CHILD|WS_BORDER|WS_VSCROLL|WS_TABSTOP|LBS_NOINTEGRALHEIGHT|LBS_USETABSTOPS|LBS_NOTIFY
//0x90C80040=WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|DS_SETFONT
AkelPad.CreateDialog(0, sClass, sTitleHT, 0x90C80040, nX, nY, nW, 208, hDlg, CallbackHT, 0x3 /*CDF_PIXELS|CDF_MODAL*/, 0, 0, "", 0, 0, "|",
// Class, Title, Style, X, Y, W, H, ID, lParam
0, "LISTBOX", "", 0x50A10181, 5, 5, nW - 10, 170, IDLIST, 0, "|",
0, "BUTTON", sTxtMenu + " (F1)", 0x50000000, nBX, 180, 70, 23, IDMENUB, 0, "|",
0, "BUTTON", sTxtOK, 0x50000001, nBX + 75, 180, 70, 23, IDOKB, 0, "|",
0, "BUTTON", sTxtCancel, 0x50000000, nBX + 150, 180, 70, 23, IDCANCELB, 0);
oSys.Call("User32::EnableWindow", hMainWnd, 1);
for (i = 0; i < 2; ++i)
{
SendDlgItemMessage(hDlg, aSel[i][0], 3082 /*AEM_ENDUNDOACTION*/, 0, 0);
for (n = 1; n < 4; ++n)
AkelPad.MemFree(aSel[i][n]);
}
if (bHist)
aHist.shift();
else if (bSaveTempl)
{
sTempl = "";
if (aTempl.length > 1)
{
for (i = 1; i < aTempl.length; ++i)
sTempl += aTempl[i].join("\t") + "\r\n";
sTempl = sTempl.substr(0, sTempl.length - 2);
}
AkelPad.WriteFile(WScript.ScriptFullName.replace(/\.js$/i, "_templ.tsv"), sTempl, sTempl.length, 1200 /*UTF-16LE*/, 1, 0x1 /*WFF_WRITEREADONLY*/);
}
function CallbackHT(hWnd, uMsg, wParam, lParam)
{
var nID, nCode;
if (uMsg == 272 /*WM_INITDIALOG*/)
{
hWndHT = hWnd;
InitHT();
}
else if (uMsg == 6 /*WM_ACTIVATE*/)
SetHotKeysHT(LoWord(wParam));
else if (uMsg == 786 /*WM_HOTKEY*/)
{
if (oSys.Call("User32::GetFocus") == GetDlgItem(hWndHT, IDLIST))
aHotKeyHT[wParam][2]();
}
else if (uMsg == 123 /*WM_CONTEXTMENU*/)
{
if (wParam == GetDlgItem(hWndHT, IDLIST))
MenuHT(LoWord(lParam), HiWord(lParam));
else if (wParam == GetDlgItem(hWndHT, IDMENUB))
MenuHT();
}
else if (uMsg == 273 /*WM_COMMAND*/)
{
nID = LoWord(wParam);
nCode = HiWord(wParam);
if (nID == IDLIST)
{
if (nCode == 1 /*LBN_SELCHANGE*/)
SetHTToDlg();
else if (nCode == 2 /*LBN_DBLCLK*/)
PostMessage(hWndHT, 16 /*WM_CLOSE*/, 0, 0);
}
else if (nID == IDMENUB)
MenuHT();
else if (nID == IDOKB)
PostMessage(hWndHT, 16 /*WM_CLOSE*/, 0, 0);
else if ((nID == IDCANCEL) || (nID == IDCANCELB))
{
SendDlgItemMessage(hWndHT, IDLIST, 390 /*LB_SETCURSEL*/, 0, 0);
SetHTToDlg();
PostMessage(hWndHT, 16 /*WM_CLOSE*/, 0, 0);
}
}
else if (uMsg == 16 /*WM_CLOSE*/)
{
if (bBatch)
{
sWhat = sWhatHT;
sWith = sWithHT;
}
else
sBFile = sBFileHT;
oSys.Call("User32::EndDialog", hWndHT, 0);
}
return 0;
}
function InitHT()
{
var lpTabStops;
var i;
if (bHist)
{
lpTabStops = AkelPad.MemAlloc(4);
AkelPad.MemCopy(lpTabStops, 16, 3 /*DT_DWORD*/);
SendDlgItemMessage(hWndHT, IDLIST, 402 /*LB_SETTABSTOPS*/, 1, lpTabStops);
AkelPad.MemFree(lpTabStops);
aHist.unshift([bBatch ? sBFile : sWhat, bBatch ? "" : sWith, (bFunc ? "f" : "") + (bMatch ? "" : "i") + (bDotNL ? "" : "n") + (bRegExp ? "r" : "") + (bWord ? "w" : "") + (bBatch ? "b" : "")]);
SendDlgItemMessage(hWndHT, IDLIST, 384 /*LB_ADDSTRING*/, 0, "");
for (i = 1; i < aHist.length; ++i)
SendDlgItemMessage(hWndHT, IDLIST, 384 /*LB_ADDSTRING*/, 0, i.toString() + "\t" + aHist[i][0].substr(0, 128).replace(/[\0\s]+/g, " "));
}
else
{
for (i = aTempl.length - 1; i >= 0; --i)
{
aTempl[i] = aTempl[i].split("\t", 4);
if ((aTempl[i].length == 4) && aTempl[i][0].length && aTempl[i][3].replace(/ +$/, "").length)
SendDlgItemMessage(hWndHT, IDLIST, 385 /*LB_INSERTSTRING*/, 0, aTempl[i][3]);
else
{
bSaveTempl = true;
aTempl.splice(i, 1);
}
}
aTempl.unshift([EscapeStr(bBatch ? sBFile : sWhat), EscapeStr(bBatch ? "" : sWith), (bFunc ? "f" : "") + (bMatch ? "" : "i") + (bDotNL ? "" : "n") + (bRegExp ? "r" : "") + (bWord ? "w" : "") + (bBatch ? "b" : ""), ""]);
SendDlgItemMessage(hWndHT, IDLIST, 385 /*LB_INSERTSTRING*/, 0, "");
}
SendDlgItemMessage(hWndHT, IDLIST, 390 /*LB_SETCURSEL*/, 0, 0);
}
function SetHTToDlg()
{
var nPos = SendDlgItemMessage(hWndHT, IDLIST, 392 /*LB_GETCURSEL*/, 0, 0);
var i;
if (bHist)
{
bMatch = (aHist[nPos][2].indexOf("i") == -1);
bWord = (aHist[nPos][2].indexOf("w") > -1);
bRegExp = (aHist[nPos][2].indexOf("r") > -1);
bDotNL = (aHist[nPos][2].indexOf("n") == -1);
bFunc = (aHist[nPos][2].indexOf("f") > -1);
bBatch = (aHist[nPos][2].indexOf("b") > -1);
SetColorsAE();
ReplaceTextAE(IDWHATE, aHist[nPos][0]);
ReplaceTextAE(IDWITHE, aHist[nPos][1]);
}
else
{
bMatch = (aTempl[nPos][2].indexOf("i") == -1);
bWord = (aTempl[nPos][2].indexOf("w") > -1);
bRegExp = (aTempl[nPos][2].indexOf("r") > -1);
bDotNL = (aTempl[nPos][2].indexOf("n") == -1);
bFunc = (aTempl[nPos][2].indexOf("f") > -1);
bBatch = (aTempl[nPos][2].indexOf("b") > -1);
SetColorsAE();
ReplaceTextAE(IDWHATE, UnEscapeStr(aTempl[nPos][0]));
ReplaceTextAE(IDWITHE, UnEscapeStr(aTempl[nPos][1]));
}
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);
EnableButtonsDlg();
if (nPos == 0)
{
for (i = 0; i < 2; ++i)
{
SendDlgItemMessage(hDlg, aSel[i][0], 3132 /*AEM_INDEXUPDATE*/, 0, aSel[i][1]);
SendDlgItemMessage(hDlg, aSel[i][0], 3132 /*AEM_INDEXUPDATE*/, 0, aSel[i][2]);
SendDlgItemMessage(hDlg, aSel[i][0], 3132 /*AEM_INDEXUPDATE*/, 0, _PtrAdd(aSel[i][2], _X64 ? 24 : 12));
SendDlgItemMessage(hDlg, aSel[i][0], 3126 /*AEM_SETSEL*/, aSel[i][1], aSel[i][2]);
SendDlgItemMessage(hDlg, aSel[i][0], 3180 /*AEM_SETSCROLLPOS*/, 0, aSel[i][3]);
}
}
}
function SetHotKeysHT(bSet)
{
var i;
if (bSet)
{
for (i = 0; i < aHotKeyHT.length; ++i)
oSys.Call("User32::RegisterHotKey", hWndHT, i, aHotKeyHT[i][0], aHotKeyHT[i][1]);
}
else
{
for (i = 0; i < aHotKeyHT.length; ++i)
oSys.Call("User32::UnregisterHotKey", hWndHT, i);
}
}
function RemoveHist()
{
var nPos = SendDlgItemMessage(hWndHT, IDLIST, 392 /*LB_GETCURSEL*/, 0, 0);
var i;
if (nPos > 0)
{
aHist.splice(nPos, 1);
if (aHist.length == 1)
PostMessage(hWndHT, 273 /*WM_COMMAND*/, IDCANCELB, 0);
else
{
SendDlgItemMessage(hWndHT, IDLIST, 386 /*LB_DELETESTRING*/, nPos, 0);
if (nPos == aHist.length)
--nPos;
else
{
for (i = nPos; i < aHist.length; ++i)
{
SendDlgItemMessage(hWndHT, IDLIST, 386 /*LB_DELETESTRING*/, i, 0);
SendDlgItemMessage(hWndHT, IDLIST, 385 /*LB_INSERTSTRING*/, i, i.toString() + "\t" + aHist[i][0].substr(0, 128).replace(/[\0\s]+/g, " "));
}
}
SendDlgItemMessage(hWndHT, IDLIST, 390 /*LB_SETCURSEL*/, nPos, 0);
SetHTToDlg();
}
}
}
function ClearHist()
{
aHist.length = 1;
PostMessage(hWndHT, 273 /*WM_COMMAND*/, IDCANCELB, 0);
}
function SetHistLen()
{
var sLen = nHistLen.toString(10);
var nPos = SendDlgItemMessage(hWndHT, IDLIST, 392 /*LB_GETCURSEL*/, 0, 0);
var i;
if (sLen = InputBox(hWndHT, sTitleHT, sTxtHistLen + " (0 - 99):", sLen, 0, CheckLen))
{
if (sLen = sLen.replace(/\s+/g, ""))
{
nHistLen = parseInt(sLen, 10);
if (aHist.length > nHistLen + 1)
{
aHist.length = nHistLen + 1;
if (aHist.length == 1)
PostMessage(hWndHT, 273 /*WM_COMMAND*/, IDCANCELB, 0);
else
{
while (SendDlgItemMessage(hWndHT, IDLIST, 395 /*LB_GETCOUNT*/, 0, 0) > aHist.length)
SendDlgItemMessage(hWndHT, IDLIST, 386 /*LB_DELETESTRING*/, aHist.length, 0);
if (nPos >= aHist.length)
{
SendDlgItemMessage(hWndHT, IDLIST, 390 /*LB_SETCURSEL*/, aHist.length - 1, 0);
SetHTToDlg();
}
}
}
}
}
function CheckLen(hWnd, aStr)
{
var sLen = aStr[0].replace(/\s+/g, "");
if (/\D/.test(sLen))
return 0;
else
{
sLen = parseInt(sLen, 10);
if ((sLen < 0) || (sLen > 99))
return 0;
}
return -1;
}
}
function AddTempl()
{
var nPos = SendDlgItemMessage(hWndHT, IDLIST, 392 /*LB_GETCURSEL*/, 0, 0);
var sName;
var bAdded;
var i;
if (! aTempl[0][0].length)
return;
for (i = 1; i < aTempl.length; ++i)
{
if ((aTempl[i][0] == aTempl[0][0]) && (aTempl[i][1] == aTempl[0][1]) && (aTempl[i][2] == aTempl[0][2]))
{
SendDlgItemMessage(hWndHT, IDLIST, 390 /*LB_SETCURSEL*/, i, 0);
SetHTToDlg();
AkelPad.MessageBox(hWndHT, sTxtTemplExists, sTxtAdd, 0x40 /*MB_ICONINFORMATION*/);
return;
}
}
if (nPos > 0)
{
SendDlgItemMessage(hWndHT, IDLIST, 390 /*LB_SETCURSEL*/, 0, 0);
SetHTToDlg();
}
if (sName = InputBox(hWndHT, sTxtAdd, sTxtName, aTempl[nPos][3], 0, CheckTemplName, 0))
{
if (sName = sName.replace(/ +$/, ""))
{
bSaveTempl = true;
bAdded = true;
aTempl.splice(++nPos, 0, [aTempl[0][0], aTempl[0][1], aTempl[0][2], sName]);
SendDlgItemMessage(hWndHT, IDLIST, 385 /*LB_INSERTSTRING*/, nPos, sName);
SendDlgItemMessage(hWndHT, IDLIST, 390 /*LB_SETCURSEL*/, nPos, 0);
}
}
if (! bAdded)
{
SendDlgItemMessage(hWndHT, IDLIST, 390 /*LB_SETCURSEL*/, nPos, 0);
SetHTToDlg();
}
}
function CheckTemplName(hWnd, aStr, nPos)
{
var sName = aStr[0].replace(/ +$/, "");
var i;
if (sName)
{
for (i = 1; i < aTempl.length; ++i)
{
if ((aTempl[i][3] == sName) && ((nPos == 0) || (nPos != i)))
{
SendDlgItemMessage(hWndHT, IDLIST, 390 /*LB_SETCURSEL*/, i, 0);
SetHTToDlg();
AkelPad.MessageBox(hWndHT, sTxtNameExists, nPos ? sTxtRename : sTxtAdd, 0x40 /*MB_ICONINFORMATION*/);
SendDlgItemMessage(hWndHT, IDLIST, 390 /*LB_SETCURSEL*/, nPos, 0);
SetHTToDlg();
return 0;
}
}
}
return -1;
}
function RenameTempl()
{
var nPos = SendDlgItemMessage(hWndHT, IDLIST, 392 /*LB_GETCURSEL*/, 0, 0);
var sName;
if (nPos < 1)
return;
if (sName = InputBox(hWndHT, sTxtRename, sTxtName, aTempl[nPos][3], 0, CheckTemplName, nPos))
{
if (sName = sName.replace(/ +$/, ""))
{
bSaveTempl = true;
aTempl[nPos][3] = sName;
SendDlgItemMessage(hWndHT, IDLIST, 386 /*LB_DELETESTRING*/, nPos, 0);
SendDlgItemMessage(hWndHT, IDLIST, 385 /*LB_INSERTSTRING*/, nPos, sName);
SendDlgItemMessage(hWndHT, IDLIST, 390 /*LB_SETCURSEL*/, nPos, 0);
}
}
}
function UpTempl()
{
var nPos = SendDlgItemMessage(hWndHT, IDLIST, 392 /*LB_GETCURSEL*/, 0, 0);
if (nPos > 1)
{
bSaveTempl = true;
aTempl.splice(nPos - 1, 0, [aTempl[nPos][0], aTempl[nPos][1], aTempl[nPos][2], aTempl[nPos][3]]);
aTempl.splice(nPos + 1, 1);
SendDlgItemMessage(hWndHT, IDLIST, 385 /*LB_INSERTSTRING*/, nPos - 1, aTempl[nPos - 1][3]);
SendDlgItemMessage(hWndHT, IDLIST, 386 /*LB_DELETESTRING*/, nPos + 1, 0);
SendDlgItemMessage(hWndHT, IDLIST, 390 /*LB_SETCURSEL*/, nPos - 1, 0);
}
}
function DownTempl()
{
var nPos = SendDlgItemMessage(hWndHT, IDLIST, 392 /*LB_GETCURSEL*/, 0, 0);
if ((nPos > 0) && (nPos < aTempl.length - 1))
{
bSaveTempl = true;
aTempl.splice(nPos + 2, 0, [aTempl[nPos][0], aTempl[nPos][1], aTempl[nPos][2], aTempl[nPos][3]]);
aTempl.splice(nPos, 1);
SendDlgItemMessage(hWndHT, IDLIST, 385 /*LB_INSERTSTRING*/, nPos + 2, aTempl[nPos + 1][3]);
SendDlgItemMessage(hWndHT, IDLIST, 386 /*LB_DELETESTRING*/, nPos, 0);
SendDlgItemMessage(hWndHT, IDLIST, 390 /*LB_SETCURSEL*/, nPos + 1, 0);
}
}
function RemoveTempl()
{
var nPos = SendDlgItemMessage(hWndHT, IDLIST, 392 /*LB_GETCURSEL*/, 0, 0);
if (nPos > 0)
{
bSaveTempl = true;
aTempl.splice(nPos, 1);
SendDlgItemMessage(hWndHT, IDLIST, 386 /*LB_DELETESTRING*/, nPos, 0);
SendDlgItemMessage(hWndHT, IDLIST, 390 /*LB_SETCURSEL*/, nPos - ((nPos == aTempl.length) ? 1 : 0), 0);
SetHTToDlg();
}
}
function SortTempl()
{
var nPos = SendDlgItemMessage(hWndHT, IDLIST, 392 /*LB_GETCURSEL*/, 0, 0);
var sName = aTempl[nPos][3];
var i;
bSaveTempl = true;
aTempl.sort(
function(a1, a2)
{
return oSys.Call("Kernel32::lstrcmpW", a1[3], a2[3]);
});
SendDlgItemMessage(hWndHT, IDLIST, 388 /*LB_RESETCONTENT*/, 0, 0);
for (i = 0; i < aTempl.length; ++i)
{
SendDlgItemMessage(hWndHT, IDLIST, 384 /*LB_ADDSTRING*/, 0, aTempl[i][3]);
if (aTempl[i][3] == sName)
nPos = i;
}
SendDlgItemMessage(hWndHT, IDLIST, 390 /*LB_SETCURSEL*/, nPos, 0);
SetHTToDlg();
}
function MenuHT(nX, nY)
{
var MF_STRING = 0x0000;
var MF_GRAYED = 0x0001;
var MF_SEPARATOR = 0x0800;
var nPos = SendDlgItemMessage(hWndHT, IDLIST, 392 /*LB_GETCURSEL*/, 0, 0);
var hMenu = oSys.Call("User32::CreatePopupMenu");
var lpRECT;
var nIH;
var nCmd;
oSys.Call("User32::SetFocus", GetDlgItem(hWndHT, IDLIST));
SendDlgItemMessage(hWndHT, IDMENUB, 244 /*BM_SETSTYLE*/, 0 /*BS_PUSHBUTTON*/, 1);
SendDlgItemMessage(hWndHT, IDOKB, 244 /*BM_SETSTYLE*/, 1 /*BS_DEFPUSHBUTTON*/, 1);
//menu from keyboard or "Menu" button
if ((typeof nX != "number") || (nX == 0xFFFF))
{
lpRECT = AkelPad.MemAlloc(16);
SendDlgItemMessage(hWndHT, IDLIST, 408 /*LB_GETITEMRECT*/, nPos, lpRECT);
nIH = AkelPad.MemRead(_PtrAdd(lpRECT, 12), 3 /*DT_DWORD*/) - AkelPad.MemRead(_PtrAdd(lpRECT, 4), 3 /*DT_DWORD*/);
oSys.Call("User32::ClientToScreen", GetDlgItem(hWndHT, IDLIST), lpRECT);
nX = AkelPad.MemRead(_PtrAdd(lpRECT, 0), 3 /*DT_DWORD*/);
nY = AkelPad.MemRead(_PtrAdd(lpRECT, 4), 3 /*DT_DWORD*/) + nIH;
AkelPad.MemFree(lpRECT);
}
if (bHist)
{
oSys.Call("User32::AppendMenuW", hMenu, (nPos > 0) ? MF_STRING : MF_GRAYED, 1, sTxtRemove + "\tAlt+Del");
oSys.Call("User32::AppendMenuW", hMenu, (aHist.length > 1) ? MF_STRING : MF_GRAYED, 2, sTxtClear + "\tShift+Alt+Del");
oSys.Call("User32::AppendMenuW", hMenu, MF_SEPARATOR);
oSys.Call("User32::AppendMenuW", hMenu, MF_STRING, 3, sTxtHistLen + ": " + nHistLen);
}
else
{
oSys.Call("User32::AppendMenuW", hMenu, (aTempl[0][0].length && (aTempl[0][2].indexOf("b") == -1)) ? MF_STRING : MF_GRAYED, 11, sTxtAdd + "\tInsert");
oSys.Call("User32::AppendMenuW", hMenu, (nPos > 0) ? MF_STRING : MF_GRAYED, 12, sTxtRename + "\tF2");
oSys.Call("User32::AppendMenuW", hMenu, (nPos > 1) ? MF_STRING : MF_GRAYED, 13, sTxtMoveUp + "\tAlt+Up");
oSys.Call("User32::AppendMenuW", hMenu, ((nPos > 0) && (nPos < aTempl.length - 1)) ? MF_STRING : MF_GRAYED, 14, sTxtMoveDown + "\tAlt+Down");
oSys.Call("User32::AppendMenuW", hMenu, (nPos > 0) ? MF_STRING : MF_GRAYED, 15, sTxtRemove + "\tAlt+Del");
oSys.Call("User32::AppendMenuW", hMenu, (aTempl.length > 2) ? MF_STRING : MF_GRAYED, 16, sTxtSort);
}
SetHotKeysHT(0);
nCmd = oSys.Call("User32::TrackPopupMenu", hMenu, 0x0180 /*TPM_NONOTIFY|TPM_RETURNCMD*/, nX, nY, 0, hWndHT, 0);
oSys.Call("User32::DestroyMenu", hMenu);
SetHotKeysHT(1);
if (nCmd == 1)
RemoveHist();
else if (nCmd == 2)
ClearHist();
else if (nCmd == 3)
SetHistLen();
else if (nCmd == 11)
AddTempl();
else if (nCmd == 12)
RenameTempl();
else if (nCmd == 13)
UpTempl();
else if (nCmd == 14)
DownTempl();
else if (nCmd == 15)
RemoveTempl();
else if (nCmd == 16)
SortTempl();
}
}
function Find(nCmd)
{
var hEditWnd = AkelPad.GetEditWnd();
var nFRF;
var sFindIt;
var lpCaret;
var lpSelect;
var lpPoint64;
var nPos;
var nSel;
var aBRange;
var nBRange;
var sTitle;
var i;
if ((! hEditWnd) || (! sWhat) || bBatch || ((nCmd > 10) && (! IsLineBoard())))
return;
nFRF = 0;
if (bMatch)
nFRF |= 0x00000004 /*FRF_MATCHCASE*/;
if (bWord)
nFRF |= 0x00000002 /*FRF_WHOLEWORD*/;
if (bRegExp)
nFRF |= 0x00080000 /*FRF_REGEXP*/;
if (! bDotNL)
nFRF |= 0x00040000 /*FRF_REGEXPNONEWLINEDOT*/;
sFindIt = sWhat.replace(/\n/g, bRegExp ? "\\n" : "\r");
lpCaret = AkelPad.MemAlloc(_X64 ? 24 : 12 /*sizeof(AECHARINDEX)*/);
lpSelect = AkelPad.MemAlloc(_X64 ? 56 : 32 /*sizeof(AESELECTION)*/);
lpPoint64 = AkelPad.MemAlloc(_X64 ? 16 : 8 /*sizeof(POINT64)*/);
SendMessage(hEditWnd, 3125 /*AEM_GETSEL*/, lpCaret, lpSelect);
SendMessage(hEditWnd, 3179 /*AEM_GETSCROLLPOS*/, 0, lpPoint64);
SendMessage(hMainWnd, 11 /*WM_SETREDRAW*/, 0, 0);
SendMessage(hEditWnd, 11 /*WM_SETREDRAW*/, 0, 0);
if (nCmd < 11)
{
if (nCmd == 1)
nFRF |= 0x00000001 /*FRF_DOWN*/;
else if ((nCmd == 2) || (nCmd == 3))
{
nFRF |= 0x00100000 /*FRF_UP*/;
if (nCmd == 3)
AkelPad.SetSel(-1, -1);
}
else
nFRF |= 0x00200001 /*FRF_BEGINNING|FRF_DOWN*/;
nPos = AkelPad.TextFind(0, sFindIt, nFRF);
}
else //in bookmarks
{
aBRange = GetBRangeArr(hEditWnd);
if (aBRange.length)
{
nPos = -1;
if ((nCmd == 11) || (nCmd == 14))
{
nFRF |= 0x00000001 /*FRF_DOWN*/;
if (nCmd == 11)
{
nSel = AkelPad.GetSelEnd();
nBRange = GetCurrBRange(aBRange, nSel);
if ((nBRange >= 0) && (nSel < aBRange[nBRange][1]))
{
AkelPad.SetSel(nSel, nSel);
nPos = AkelPad.TextFind(0, sFindIt, nFRF);
if ((nPos >= 0) && (AkelPad.GetSelEnd() > aBRange[nBRange][1]))
nPos = -1;
}
}
if (nPos == -1)
{
if (nCmd == 11)
nBRange = GetNextBRange(aBRange, nBRange, true);
else
nBRange = 0;
if (nBRange >= 0)
{
for (; nBRange < aBRange.length; ++nBRange)
{
AkelPad.SetSel(aBRange[nBRange][0], aBRange[nBRange][0]);
nPos = AkelPad.TextFind(0, sFindIt, nFRF);
if ((nPos >= 0) && (AkelPad.GetSelEnd() > aBRange[nBRange][1]))
nPos = -1;
else
break;
}
}
}
}
else
{
nFRF |= 0x00100000 /*FRF_UP*/;
if (nCmd == 12)
{
nSel = AkelPad.GetSelStart();
nBRange = GetCurrBRange(aBRange, nSel);
if ((nBRange >= 0) && (nSel > aBRange[nBRange][0]))
{
AkelPad.SetSel(nSel, nSel);
nPos = AkelPad.TextFind(0, sFindIt, nFRF);
if ((nPos >= 0) && (AkelPad.GetSelStart() < aBRange[nBRange][0]))
nPos = -1;
}
}
if (nPos == -1)
{
if (nCmd == 12)
nBRange = GetNextBRange(aBRange, nBRange, false);
else
nBRange = aBRange.length - 1;
if (nBRange >= 0)
{
for (; nBRange >= 0; --nBRange)
{
AkelPad.SetSel(aBRange[nBRange][1], aBRange[nBRange][1]);
nPos = AkelPad.TextFind(0, sFindIt, nFRF);
if ((nPos >= 0) && (AkelPad.GetSelStart() < aBRange[nBRange][0]))
nPos = -1;
else
break;
}
}
}
}
}
else
{
if (bRegExp)
{
AkelPad.SetSel(0, 0);
nPos = AkelPad.TextFind(0, sFindIt, nFRF | 0x80100000 /*FRF_TEST|FRF_UP*/);
if (nPos > 0)
nPos = -1;
}
}
}
if (nPos < 0)
{
SendMessage(hEditWnd, 3126 /*AEM_SETSEL*/, lpCaret, lpSelect);
SendMessage(hEditWnd, 3180 /*AEM_SETSCROLLPOS*/, 0, lpPoint64);
}
AkelPad.MemFree(lpCaret);
AkelPad.MemFree(lpSelect);
AkelPad.MemFree(lpPoint64);
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);
if (nPos < 0)
{
if ((nCmd % 10) == 1)
sTitle = sTxtNext;
else if ((nCmd % 10) == 2)
sTitle = sTxtPrev;
else if ((nCmd % 10) == 3)
sTitle = sTxtLast;
else
sTitle = sTxtFirst;
sTitle = (((nCmd < 11) ? sTxtFind : sTxtFindInBooks) + ": " + sTitle).replace(/&/g, "");
if (nPos == -1)
AkelPad.MessageBox(hDlg, sTxtNotFound, sTitle, 0x40 /*MB_ICONINFORMATION*/);
else if (nPos <= -100)
{
AkelPad.MessageBox(hDlg, sTxtRegExpErr, sTitle, 0x10 /*MB_ICONERROR*/);
SendDlgItemMessage(hDlg, IDWHATE, 177 /*EM_SETSEL*/, -nPos - 100, -1);
oSys.Call("User32::SetFocus", GetDlgItem(hDlg, IDWHATE));
SetDefPushButton(0);
}
}
}
function GetCurrBRange(aBRange, nPos)
{
var nBRange;
var i;
if (nPos < aBRange[0][0])
nBRange = -1;
else if ((nPos >= aBRange[0][0]) && (nPos <= aBRange[0][1]))
nBRange = 0;
else if (nPos > aBRange[aBRange.length - 1][1])
nBRange = -aBRange.length - 1;
else
{
for (i = 1; i < aBRange.length; ++i)
{
if ((nPos >= aBRange[i][0]) && (nPos <= aBRange[i][1]))
{
nBRange = i;
break;
}
else if ((nPos > aBRange[i - 1][1]) && (nPos < aBRange[i][0]))
{
nBRange = -i - 1;
break;
}
}
}
return nBRange;
}
function GetNextBRange(aBRange, nBRange, bNext)
{
if (nBRange >= 0)
nBRange += bNext ? 1 : -1;
else
nBRange = -nBRange - (bNext ? 1 : 2);
if (nBRange >= aBRange.length)
nBRange = -1;
return nBRange;
}
function GetBRangeArr(hEditWnd)
{
var aBook = GetBookmarkStr(hEditWnd).split(",");
var aBRange = [];
var i, n;
if (aBook[0])
{
for (i = 0; i < aBook.length; i = n + 1)
{
for (n = i; (n + 1 < aBook.length) && (aBook[n + 1] - aBook[n] <= 1); ++n);
aBRange.push([SendMessage(hEditWnd, 3138 /*AEM_GETRICHOFFSET*/, 41 /*AEGI_RICHOFFSETFROMUNWRAPLINE*/, parseInt(aBook[i])), SendMessage(hEditWnd, 3138 /*AEM_GETRICHOFFSET*/, 19 /*AEGI_WRAPLINEEND*/, SendMessage(hEditWnd, 3138 /*AEM_GETRICHOFFSET*/, 41 /*AEGI_RICHOFFSETFROMUNWRAPLINE*/, parseInt(aBook[n])))]);
}
}
return aBRange;
}
function GetBookmarkStr(hEditWnd)
{
var lpLen = AkelPad.MemAlloc(4 /*int*/);
var sBooks = "";
var nLen;
var lpBooks;
AkelPad.CallW("LineBoard::Main", 12, hEditWnd, 0, 0, lpLen);
if ((nLen = AkelPad.MemRead(lpLen, 3 /*DT_DWORD*/)) > 1)
{
lpBooks = AkelPad.MemAlloc(nLen * 2);
AkelPad.CallW("LineBoard::Main", 12, hEditWnd, 0, lpBooks, 0);
sBooks = AkelPad.MemRead(lpBooks, 1 /*DT_UNICODE*/).replace(/(^|,)(\d+)(?:,\2)+/g, "$1$2");
AkelPad.MemFree(lpBooks);
}
AkelPad.MemFree(lpLen);
return sBooks;
}
function BookmarkLines(bBookmark)
{
var hEditWnd = AkelPad.GetEditWnd();
var nFRF;
var sFindIt;
var lpCaret;
var lpSelect;
var lpPoint64;
var nPos;
var sBooks;
var aBook;
var nLine1;
var nLine2;
var sTitle;
var i;
if ((! hEditWnd) || (! sWhat) || bBatch || (! IsLineBoard()))
return;
nFRF = 0x00000001 /*FRF_DOWN*/;
if (bMatch)
nFRF |= 0x00000004 /*FRF_MATCHCASE*/;
if (bWord)
nFRF |= 0x00000002 /*FRF_WHOLEWORD*/;
if (bRegExp)
nFRF |= 0x00080000 /*FRF_REGEXP*/;
if (! bDotNL)
nFRF |= 0x00040000 /*FRF_REGEXPNONEWLINEDOT*/;
sFindIt = sWhat.replace(/\n/g, bRegExp ? "\\n" : "\r");
lpCaret = AkelPad.MemAlloc(_X64 ? 24 : 12 /*sizeof(AECHARINDEX)*/);
lpSelect = AkelPad.MemAlloc(_X64 ? 56 : 32 /*sizeof(AESELECTION)*/);
lpPoint64 = AkelPad.MemAlloc(_X64 ? 16 : 8 /*sizeof(POINT64)*/);
SendMessage(hEditWnd, 3125 /*AEM_GETSEL*/, lpCaret, lpSelect);
SendMessage(hEditWnd, 3179 /*AEM_GETSCROLLPOS*/, 0, lpPoint64);
SendMessage(hMainWnd, 11 /*WM_SETREDRAW*/, 0, 0);
SendMessage(hEditWnd, 11 /*WM_SETREDRAW*/, 0, 0);
sBooks = "";
AkelPad.SetSel(0, 0);
while ((nPos = AkelPad.TextFind(0, sFindIt, nFRF)) >= 0)
{
nLine1 = SendMessage(hEditWnd, 3129 /*AEM_GETLINENUMBER*/, 21 /*AEGI_UNWRAPLINEFROMRICHOFFSET*/, nPos);
nLine2 = SendMessage(hEditWnd, 3129 /*AEM_GETLINENUMBER*/, 21 /*AEGI_UNWRAPLINEFROMRICHOFFSET*/, AkelPad.GetSelEnd());
for (i = nLine1; i <= nLine2; ++i)
sBooks += i + ",";
}
SendMessage(hEditWnd, 3126 /*AEM_SETSEL*/, lpCaret, lpSelect);
SendMessage(hEditWnd, 3180 /*AEM_SETSCROLLPOS*/, 0, lpPoint64);
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);
AkelPad.MemFree(lpCaret);
AkelPad.MemFree(lpSelect);
AkelPad.MemFree(lpPoint64);
if (sBooks)
{
if (bBookmark)
{
sBooks += GetBookmarkStr(hEditWnd);
AkelPad.CallW("LineBoard::Main", 13 /*set bookmarks*/, hEditWnd, 0, sBooks);
}
else
{
aBook = sBooks.slice(0, -1).split(",");
sBooks = GetBookmarkStr(hEditWnd);
if (sBooks)
{
for (i = 0; i < aBook.length; ++i)
sBooks = sBooks.replace(new RegExp("(^|,)" + aBook[i] + "(?:,|$)"), "$1");
AkelPad.CallW("LineBoard::Main", 14 /*del bookmarks*/, hEditWnd);
AkelPad.CallW("LineBoard::Main", 13 /*set bookmarks*/, hEditWnd, 0, sBooks);
}
}
}
else
{
sTitle = (bBookmark ? sTxtBookmarkLines : sTxtUnmarkLines).replace("&", "");
if (nPos <= -100)
{
AkelPad.MessageBox(hDlg, sTxtRegExpErr, sTitle, 0x10 /*MB_ICONERROR*/);
SendDlgItemMessage(hDlg, IDWHATE, 177 /*EM_SETSEL*/, -nPos - 100, -1);
oSys.Call("User32::SetFocus", GetDlgItem(hDlg, IDWHATE));
SetDefPushButton(0);
}
else
AkelPad.MessageBox(hDlg, sTxtNotFound, sTitle, 0x40 /*MB_ICONINFORMATION*/);
}
}
function CountInRange(nCmd)
{
var hEditWnd = AkelPad.GetEditWnd();
var nFRF;
var sFindIt;
var lpCaret;
var lpSelect;
var lpPoint64;
var aBRange;
var nCount;
var sTitle;
var sText;
var i, n;
if ((! hEditWnd) || (! sWhat) || bBatch || ((nCmd == 24) && (! IsLineBoard())))
return;
nFRF = 0x80000001 /*FRF_TEST|FRF_DOWN*/;
if (bMatch)
nFRF |= 0x00000004 /*FRF_MATCHCASE*/;
if (bWord)
nFRF |= 0x00000002 /*FRF_WHOLEWORD*/;
if (bRegExp)
nFRF |= 0x00080000 /*FRF_REGEXP*/;
if (! bDotNL)
nFRF |= 0x00040000 /*FRF_REGEXPNONEWLINEDOT*/;
if (nCmd < 5)
nFRF |= 0x00400000 /*FRF_SELECTION*/;
else
{
nFRF |= 0x00200000 /*FRF_BEGINNING*/;
if (nCmd == 6)
nFRF |= 0x01000000 /*FRF_ALLFILES*/;
}
sFindIt = sWhat.replace(/\n/g, bRegExp ? "\\n" : "\r");
lpCaret = AkelPad.MemAlloc(_X64 ? 24 : 12 /*sizeof(AECHARINDEX)*/);
lpSelect = AkelPad.MemAlloc(_X64 ? 56 : 32 /*sizeof(AESELECTION)*/);
lpPoint64 = AkelPad.MemAlloc(_X64 ? 16 : 8 /*sizeof(POINT64)*/);
SendMessage(hEditWnd, 3125 /*AEM_GETSEL*/, lpCaret, lpSelect);
SendMessage(hEditWnd, 3179 /*AEM_GETSCROLLPOS*/, 0, lpPoint64);
SendMessage(hMainWnd, 11 /*WM_SETREDRAW*/, 0, 0);
SendMessage(hEditWnd, 11 /*WM_SETREDRAW*/, 0, 0);
if (nCmd == 4) //in bookmarks
{
nCount = 0;
aBRange = GetBRangeArr(hEditWnd);
if (aBRange.length)
{
for (i = 0; i < aBRange.length; ++i)
{
AkelPad.SetSel(aBRange[i][0], aBRange[i][1]);
n = AkelPad.TextReplace(0, sFindIt, "", nFRF, 0x1 /*RRF_ALL*/);
if (n <= -100)
{
nCount = n;
break;
}
nCount += n;
}
}
else if (bRegExp)
{
AkelPad.SetSel(-1, -1);
nCount = AkelPad.TextReplace(0, sFindIt, "", nFRF, 0x1 /*RRF_ALL*/);
}
}
else
{
if (nCmd == 1)
AkelPad.SetSel(0, SendMessage(hEditWnd, 3138 /*AEM_GETRICHOFFSET*/, 5 /*AEGI_CARETCHAR*/, 0));
else if (nCmd == 2)
AkelPad.SetSel(SendMessage(hEditWnd, 3138 /*AEM_GETRICHOFFSET*/, 5 /*AEGI_CARETCHAR*/, 0), -1);
nCount = AkelPad.TextReplace(0, sFindIt, "", nFRF, 0x1 /*RRF_ALL*/);
}
SendMessage(hEditWnd, 3126 /*AEM_SETSEL*/, lpCaret, lpSelect);
SendMessage(hEditWnd, 3180 /*AEM_SETSCROLLPOS*/, 0, lpPoint64);
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);
AkelPad.MemFree(lpCaret);
AkelPad.MemFree(lpSelect);
AkelPad.MemFree(lpPoint64);
sTitle = sTxtCountInRange.replace("&", "");
if (nCount <= -100)
{
AkelPad.MessageBox(hDlg, sTxtRegExpErr, sTitle, 0x10 /*MB_ICONERROR*/);
SendDlgItemMessage(hDlg, IDWHATE, 177 /*EM_SETSEL*/, -nCount - 100, -1);
oSys.Call("User32::SetFocus", GetDlgItem(hDlg, IDWHATE));
SetDefPushButton(0);
}
else
{
if (nCmd == 1)
sText = sTxtBegToCaret;
else if (nCmd == 2)
sText = sTxtCaretToEnd;
else if (nCmd == 3)
sText = sTxtSelection;
else if (nCmd == 4)
sText = sTxtBookmarks;
else if (nCmd == 5)
sText = sTxtEntireDoc;
else
sText = sTxtAllDocs;
AkelPad.MessageBox(hDlg, sText + ": " + nCount + ".", sTitle, 0x40 /*MB_ICONINFORMATION*/);
}
}
function MenuAE(hWnd, nID, nX, nY)
{
var MF_STRING = 0x0000;
var MF_GRAYED = 0x0001;
var MF_CHECKED = 0x0008;
var MF_POPUP = 0x0010;
var MF_SEPARATOR = 0x0800;
var bSel = SendMessage(hWnd, 3125 /*AEM_GETSEL*/, 0, 0);
var sHelpFile = GetAkelHelpFile();
var hMenu = oSys.Call("User32::CreatePopupMenu");
var hMenu1;
var aBFile;
var bFont;
var bWrap;
var lpPOINT;
var nCmd;
var i;
oSys.Call("User32::SetFocus", hWnd);
SetDefPushButton(0);
if (nID == IDWHATE)
{
bFont = bFont1;
bWrap = bWrap1;
}
else
{
bFont = bFont2;
bWrap = bWrap2;
}
//menu from keyboard
if ((typeof nX != "number") || (nX == 0xFFFF))
{
lpPOINT = AkelPad.MemAlloc(8);
oSys.Call("User32::GetCaretPos", lpPOINT);
oSys.Call("User32::ClientToScreen", hWnd, lpPOINT);
nX = AkelPad.MemRead(_PtrAdd(lpPOINT, 0), 3 /*DT_DWORD*/);
nY = AkelPad.MemRead(_PtrAdd(lpPOINT, 4), 3 /*DT_DWORD*/) + SendMessage(hWnd, 3188 /*AEM_GETCHARSIZE*/, 0 /*AECS_HEIGHT*/, 0);
AkelPad.MemFree(lpPOINT);
}
if (bBatch)
{
hMenu1 = oSys.Call("User32::CreatePopupMenu");
aBFile = [];
GetBatchFiles(aBFile);
if (aBFile.length)
{
for (i = 0; i < aBFile.length; ++i)
oSys.Call("User32::AppendMenuW", hMenu1, MF_STRING, i + 100, aBFile[i]);
}
else
oSys.Call("User32::AppendMenuW", hMenu1, MF_GRAYED, 0, sTxtNoBatchFiles);
oSys.Call("User32::AppendMenuW", hMenu, MF_POPUP, hMenu1, sTxtBatchFile);
oSys.Call("User32::AppendMenuW", hMenu, MF_SEPARATOR);
oSys.Call("User32::AppendMenuW", hMenu, bSel ? MF_STRING : MF_GRAYED, 4, sTxtCopy + "\tCtrl+C");
oSys.Call("User32::AppendMenuW", hMenu, oSys.Call("User32::GetWindowTextLengthW", hWnd) ? MF_STRING : MF_GRAYED, 7, sTxtSelAll + "\tCtrl+A");
}
else
{
oSys.Call("User32::AppendMenuW", hMenu, SendMessage(hWnd, 3075 /*AEM_CANUNDO*/, 0, 0) ? MF_STRING : MF_GRAYED, 1, sTxtUndo + "\tCtrl+Z");
oSys.Call("User32::AppendMenuW", hMenu, SendMessage(hWnd, 3076 /*AEM_CANREDO*/, 0, 0) ? MF_STRING : MF_GRAYED, 2, sTxtRedo + "\tCtrl+Shift+Z");
oSys.Call("User32::AppendMenuW", hMenu, MF_SEPARATOR);
oSys.Call("User32::AppendMenuW", hMenu, bSel ? MF_STRING : MF_GRAYED, 3, sTxtCut + "\tCtrl+X");
oSys.Call("User32::AppendMenuW", hMenu, bSel ? MF_STRING : MF_GRAYED, 4, sTxtCopy + "\tCtrl+C");
oSys.Call("User32::AppendMenuW", hMenu, SendMessage(hWnd, 3035 /*AEM_CANPASTE*/, 0, 0) ? MF_STRING : MF_GRAYED, 5, sTxtPaste + "\tCtrl+V");
oSys.Call("User32::AppendMenuW", hMenu, bSel ? MF_STRING : MF_GRAYED, 6, sTxtDelete + "\tDel");
oSys.Call("User32::AppendMenuW", hMenu, MF_SEPARATOR);
oSys.Call("User32::AppendMenuW", hMenu, oSys.Call("User32::GetWindowTextLengthW", hWnd) ? MF_STRING : MF_GRAYED, 7, sTxtSelAll + "\tCtrl+A");
}
oSys.Call("User32::AppendMenuW", hMenu, MF_SEPARATOR);
oSys.Call("User32::AppendMenuW", hMenu, bFont ? MF_CHECKED : MF_STRING, 8, sTxtAPFont + "\tCtrl+F");
oSys.Call("User32::AppendMenuW", hMenu, bWrap ? MF_CHECKED : MF_STRING, 9, sTxtWrap + "\tCtrl+U");
if (sHelpFile)
{
oSys.Call("User32::AppendMenuW", hMenu, MF_SEPARATOR);
oSys.Call("User32::AppendMenuW", hMenu, oFSO.FileExists(AkelPad.GetAkelDir(5 /*ADTYPE_SCRIPTS*/) + "\\HtmlView.js") ? MF_STRING : MF_GRAYED, 10, sHelpFile + "\tCtrl+F1");
}
nCmd = oSys.Call("User32::TrackPopupMenu", hMenu, 0x180 /*TPM_NONOTIFY|TPM_RETURNCMD*/, nX, nY, 0, hWnd, 0);
oSys.Call("User32::DestroyMenu", hMenu1);
oSys.Call("User32::DestroyMenu", hMenu);
if (nCmd == 1)
SendMessage(hWnd, 3077 /*AEM_UNDO*/, 0, 0);
else if (nCmd == 2)
SendMessage(hWnd, 3078 /*AEM_REDO*/, 0, 0);
else if (nCmd == 3)
SendMessage(hWnd, 3037 /*AEM_CUT*/, 0, 0);
else if (nCmd == 4)
SendMessage(hWnd, 3038 /*AEM_COPY*/, 0, 0);
else if (nCmd == 5)
SendMessage(hWnd, 3036 /*AEM_PASTE*/, 0, 0);
else if (nCmd == 6)
SendMessage(hWnd, 771 /*WM_CLEAR*/, 0, 0);
else if (nCmd == 7)
SendMessage(hWnd, 177 /*EM_SETSEL*/, 0, -1);
else if (nCmd == 8)
{
if (nID == IDWHATE)
bFont1 = ! bFont1;
else
bFont2 = ! bFont2;
SetFontAE(nID);
}
else if (nCmd == 9)
{
if (nID == IDWHATE)
bWrap1 = ! bWrap1;
else
bWrap2 = ! bWrap2;
SetWrapAE(nID);
}
else if (nCmd == 10)
AkelHelp(sHelpFile);
else if (nCmd >= 100)
ReplaceTextAE(IDWHATE, aBFile[nCmd - 100]);
}
function MenuBatch()
{
var MF_STRING = 0x0000;
var MF_GRAYED = 0x0001;
var hWnd = GetDlgItem(hDlg, IDWHATE);
var lpPOINT = AkelPad.MemAlloc(8);
var aBFile = [];
var hMenu = oSys.Call("User32::CreatePopupMenu");
var nX, nY;
var nCmd;
var i;
oSys.Call("User32::SetFocus", hWnd);
SetDefPushButton(0);
oSys.Call("User32::GetCaretPos", lpPOINT);
oSys.Call("User32::ClientToScreen", hWnd, lpPOINT);
nX = AkelPad.MemRead(_PtrAdd(lpPOINT, 0), 3 /*DT_DWORD*/);
nY = AkelPad.MemRead(_PtrAdd(lpPOINT, 4), 3 /*DT_DWORD*/) + SendMessage(hWnd, 3188 /*AEM_GETCHARSIZE*/, 0 /*AECS_HEIGHT*/, 0);
AkelPad.MemFree(lpPOINT);
GetBatchFiles(aBFile);
if (aBFile.length)
{
for (i = 0; i < aBFile.length; ++i)
oSys.Call("User32::AppendMenuW", hMenu, MF_STRING, i + 100, aBFile[i]);
}
else
oSys.Call("User32::AppendMenuW", hMenu, MF_GRAYED, 0, sTxtNoBatchFiles);
nCmd = oSys.Call("User32::TrackPopupMenu", hMenu, 0x180 /*TPM_NONOTIFY|TPM_RETURNCMD*/, nX, nY, 0, hWnd, 0);
oSys.Call("User32::DestroyMenu", hMenu);
if (nCmd >= 100)
ReplaceTextAE(IDWHATE, aBFile[nCmd - 100]);
}
function GetBatchFiles(aBFile)
{
var lpFindData = AkelPad.MemAlloc(44 + (260 + 14) * 2); //WIN32_FIND_DATAW
var hFindFile = oSys.Call("Kernel32::FindFirstFileW", WScript.ScriptFullName.replace(/\.js$/i, "_batch") + "*.tsv", lpFindData);
if (hFindFile != -1 /*INVALID_HANDLE_VALUE*/)
{
do
{
if (! (AkelPad.MemRead(lpFindData, 3 /*DT_DWORD*/) & 16 /*FILE_ATTRIBUTE_DIRECTORY*/))
aBFile.push(AkelPad.MemRead(_PtrAdd(lpFindData, 44 /*WIN32_FIND_DATAW.cFileName*/), 1 /*DT_UNICODE*/));
}
while (oSys.Call("Kernel32::FindNextFileW", hFindFile, lpFindData));
oSys.Call("Kernel32::FindClose", hFindFile);
}
AkelPad.MemFree(lpFindData);
aBFile.sort(
function(s1, s2)
{
return oSys.Call("Kernel32::lstrcmpiW", s1, s2);
});
}
|
Part 3: TextReplace_part3.js
Last edited by KDJ on Tue Jul 26, 2016 7:00 pm; edited 7 times in total |
|
Back to top |
|
 |
Kley
Joined: 28 Mar 2015 Posts: 202 Location: Russia
|
Posted: Sat Mar 26, 2016 5:59 pm Post subject: |
|
|
Показать меню с файлами конкретной сессии.
Show menu with files specific session.
SessionMenu.js
Code: | // ============================================================================
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=30939#30939
// Version: 2016-09-18
// Author: Kley
//
// Description(1033): Show menu with files specific session.
// Description(1049): Показать меню с файлами конкретной сессии.
//
// Arguments:
// -p=1 -Показывать в меню полные пути.
// 0 -имена файлов (по умолчанию);
// 1 -пути файлов;
// 2 -значение из SessionMenu.ini.
// -s="name" -Вывод в меню файлов конкретной сессии.
// (имя файла сессии, без расширения).
// -b="NoExist " -Строка перед именем не существующего файла (по умолчанию "* ").
// -a="\t*" -Строка после имени не существующего файла (по умолчанию "").
// -e=1 -Показать дополнительные пункты меню (по умолчанию 0).
// Сумма следующих флагов:
// 1 "Диалог" (открыть\закрыть диалог Session);
// 2 "Открыть сессию";
// 4 "Сохранить сессию";
// 8 "Закрыть сессию";
// 16 "Редактировать сессию";
// 32 "Удалить сессию";
// 64 "Создать сессию";
// 128 пункты меню сверху.
// -es=62 -Показать дополнительные пункты в подменю (по умолчанию 0).
// Сумма следующих флагов: смотри параметр -e.
// -e и -es игнорируются, если задан параметр -s.
// -sm=2 -Сортировать пункты меню с файлами из сессии.
// 0 -сортировать по возрастанию (по умолчанию);
// 1 -сортировать по убыванию;
// 2 -порядок сортировки, как в файле сессии.
//
// -m="%m" -Вывод меню под кнопкой панели инструментов
// -i="%i" (необходимы оба параметра!).
//
// Usage:
// Для меню и ToolBar (вывод у курсора)
// Call("Scripts::Main", 1, "SessionMenu.js")
// Для ToolBar (вывод у кнопки)
// Call("Scripts::Main", 1, "SessionMenu.js", `-s="OnExit" -m="%m" -i="%i"`)
//
// Note:
// Только для многооконного режима, если не задан параметр -s.
//
// ============================================================================
// Include: ShowMenu.js (http://akelpad.sourceforge.net/en/plugins.php#Scripts)
// ============================================================================
if (!AkelPad.Include("ShowMenu.js"))
WScript.Quit();
var nShowPath = AkelPad.GetArgValue("p", 0);
var pSessionName = AkelPad.GetArgValue("s", "");
var pBeforeName = AkelPad.GetArgValue("b", "* ");
var pAfterName = AkelPad.GetArgValue("a", "");
var nExtraMenu = AkelPad.GetArgValue("e", 0);
var nExtraSubMenu = AkelPad.GetArgValue("es", 0);
var nSortMenu = AkelPad.GetArgValue("sm", 0);
var hToolbarHandle = AkelPad.GetArgValue("m", 0);
var nToolbarItemID = AkelPad.GetArgValue("i", 0);
var PARAM_DIALOG = 1;
var PARAM_OPEN = 2;
var PARAM_SAVE = 4;
var PARAM_CLOSE = 8;
var PARAM_EDIT = 16;
var PARAM_DELETE = 32;
var PARAM_NEW = 64;
var PARAM_TOP = 128;
//Variables
var oFSO = new ActiveXObject("Scripting.FileSystemObject");
var oSys = AkelPad.SystemFunction();
var pAkelPadDir = AkelPad.GetAkelDir(0 /*ADTYPE_ROOT*/);
var pSessionsDir = GetSessionsDir();
var aSessionsFile = []; //[Path, BaseName]
var aExtraMenu = [];
var aExtraSubMenu = [];
var aFilesMenu;
var aFinalMenu = [];
var nMenuItem = 0;
var ptPoint;
var nPointX = POS_CURSOR;
var nPointY = POS_CURSOR;
var bShowPath = (nShowPath == 2) ? true : false;
var i = 0;
if (AkelPad.IsMDI() == 0 /*WMD_SDI*/)
{
if (!pSessionName)
WScript.Quit();
}
if (pSessionsDir)
{
if (hToolbarHandle && nToolbarItemID)
{
ptPoint = GetToolbarBottonPos(parseInt(hToolbarHandle), parseInt(nToolbarItemID));
nPointX = ptPoint.x;
nPointY = ptPoint.y;
}
pAfterName = pAfterName.replace(/\\t/g, "\t");
GetLangStrings();
if (nShowPath == 2)
ReadIni();
if (pSessionName)
{
aFinalMenu = GetFilesInSession(pSessionsDir + "\\" + pSessionName + ".session");
if (!aFinalMenu.length)
{
if (!oFSO.FileExists(pSessionsDir + "\\" + pSessionName + ".session"))
aFinalMenu = aFinalMenu.concat([[sEmpty, MF_DISABLED]], GetExtraSubMenu(pSessionName, PARAM_SAVE));
else
aFinalMenu = aFinalMenu.concat(
[[sEmpty, MF_DISABLED]],
[[sAddCurFile, MF_NORMAL, 9, pSessionsDir + "\\" + pSessionName + ".session"]],
GetExtraSubMenu(pSessionName, PARAM_SAVE|PARAM_EDIT|PARAM_DELETE));
}
}
else
{
aSessionsFile = GetSessionsFile(pSessionsDir)
if (aSessionsFile.length)
{
for (var i = 0; i < aSessionsFile.length; ++i)
{
aFilesMenu = GetFilesInSession(aSessionsFile[i][0]);
if (aFilesMenu.length)
aExtraSubMenu = GetExtraSubMenu(aSessionsFile[i][1], nExtraSubMenu);
else
aExtraSubMenu = [[sEmpty, MF_DISABLED]].concat(
[[sAddCurFile, MF_NORMAL, 9, aSessionsFile[i][0]]],
GetExtraSubMenu(aSessionsFile[i][1], PARAM_SAVE|PARAM_EDIT|PARAM_DELETE));
aFinalMenu = aFinalMenu.concat([[aSessionsFile[i][1], MF_SUBMENU]]);
aFinalMenu = (nExtraSubMenu & PARAM_TOP) ? aFinalMenu.concat(aExtraSubMenu, aFilesMenu)
: aFinalMenu.concat(aFilesMenu, aExtraSubMenu);
if (aFinalMenu.length)
aFinalMenu[aFinalMenu.length - 1][1] |= MF_LAST;
}
aExtraMenu = GetExtraMenu(nExtraMenu);
aFinalMenu = (nExtraMenu & PARAM_TOP) ? aExtraMenu.concat([["", MF_SEPARATOR]], aFinalMenu)
: aFinalMenu.concat([["", MF_SEPARATOR]], aExtraMenu);
}
else
aFinalMenu = [[sEmpty, MF_DISABLED], ["", MF_SEPARATOR], [sDialog, MF_NORMAL, 6]];
}
//Show menu
if ((nMenuItem = ShowMenu(aFinalMenu, nPointX, nPointY)) != -1)
{
switch (aFinalMenu[nMenuItem][2])
{
case 1:
case 2:
case 3:
case 4:
AkelPad.Call("Sessions::Main", aFinalMenu[nMenuItem][2], aFinalMenu[nMenuItem][3]);
break;
case 5:
if (AkelPad.MessageBox(AkelPad.GetMainWnd(), sMsgDelete.replace(/%s/, aFinalMenu[nMenuItem][3]),
WScript.ScriptName, 292 /*MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2*/)
== 6 /*IDYES*/)
AkelPad.Call("Sessions::Main", 5, aFinalMenu[nMenuItem][3]);
break;
case 6:
AkelPad.Call("Sessions::Main"); //open/close dialog
break;
case 7:
RemoveNonExistFiles(aFinalMenu[nMenuItem][3]);
break;
case 8:
nShowPath = !nShowPath;
WriteIni();
break;
case 9:
AddCurFileToSession(aFinalMenu[nMenuItem][3]);
break;
case 10:
CreateNewSession();
break;
default:
AkelPad.OpenFile(aFinalMenu[nMenuItem][3], 0x002 /*OD_ADT_REGCODEPAGE*/);
}
}
}
function GetSessionsFile(pSessionsDir)
{
var oFolder = oFSO.GetFolder(pSessionsDir);
var oFiles;
var aSessions = [];
for (oFiles = new Enumerator(oFolder.files); !oFiles.atEnd(); oFiles.moveNext())
{
if (oFSO.GetExtensionName(oFiles.item().Name).toLowerCase() == "session")
aSessions.push([oFiles.item().Path, oFSO.GetBaseName(oFiles.item().Name)]);
}
if (aSessions)
{
//Sort array
aSessions.sort(function(a, b)
{
return oSys.Call("kernel32::lstrcmpi" + _TCHAR, a[1], b[1]);
});
}
return aSessions;
}
function GetFilesInSession(pSessionFile)
{
var aFilesPath = [];
var aFilesMenu = [];
var pSessionText = "";
var aSessionLines;
var pPath;
var pPrefix;
var pSuffix;
var bNonExist = false;
var nIDMenu = 100;
var i;
if (oFSO.FileExists(pSessionFile))
{
if (pSessionText = AkelPad.ReadFile(pSessionFile))
{
pSessionText = pSessionText.replace(/\%a/gi, pAkelPadDir);
pSessionText = pSessionText.replace(/(\r\n|\r|\n)/g, "\n");
aSessionLines = pSessionText.split("\n");
for (i = 0; i < aSessionLines.length; ++i)
{
if (aSessionLines[i].length)
{
if (aSessionLines[i].indexOf("\\") != -1)
{
pPath = aSessionLines[i].replace(/(^[ \t]*)|([ \t]*$)/mg, "");
aFilesPath.push([pPath, oFSO.GetFileName(pPath)]);
}
}
}
//Sort array
if (nSortMenu != 2)
{
if (nShowPath == 0)
{
aFilesPath.sort(function(a, b)
{
if (nSortMenu == 1)
return oSys.Call("kernel32::lstrcmpiW", b[1], a[1]);
else
return oSys.Call("kernel32::lstrcmpiW", a[1], b[1]);
});
}
else
{
aFilesPath.sort(function(a, b)
{
if (nSortMenu == 1)
return oSys.Call("kernel32::lstrcmpiW", b[0], a[0]);
else
return oSys.Call("kernel32::lstrcmpiW", a[0], b[0]);
});
}
}
for (i = 0; i < aFilesPath.length; ++i)
{
pPrefix = "";
pSuffix = "";
if (!oFSO.FileExists(aFilesPath[i][0]))
{
pPrefix = pBeforeName;
pSuffix = pAfterName;
bNonExist = true;
}
pPath = (nShowPath) ? pPrefix + aFilesPath[i][0] + pSuffix
: pPrefix + aFilesPath[i][1] + pSuffix;
aFilesMenu.push([pPath, MF_NORMAL, nIDMenu + i, aFilesPath[i][0]]);
}
aFilesMenu = aFilesMenu.concat([["", MF_SEPARATOR]]);
if (bShowPath)
aFilesMenu = (nShowPath) ? aFilesMenu.concat([[sShowPath, MF_CHECKED, 8]])
: aFilesMenu.concat([[sShowPath, MF_NORMAL, 8]]);
if (AkelPad.GetEditFile(0))
aFilesMenu = aFilesMenu.concat([[sAddCurFile, MF_NORMAL, 9, pSessionFile]]);
if (bNonExist)
aFilesMenu = aFilesMenu.concat([[sNonExist, MF_NORMAL, 7, pSessionFile]]);
}
}
return aFilesMenu;
}
function GetExtraSubMenu(pSessionBaseName, nFlags)
{
var aMenuEdit = [];
if (nFlags & PARAM_OPEN)
aMenuEdit = aMenuEdit.concat([[sOpen, MF_NORMAL, 1, pSessionBaseName]]);
if (nFlags & PARAM_SAVE)
aMenuEdit = aMenuEdit.concat([[sSave, MF_NORMAL, 2, pSessionBaseName]]);
if (nFlags & PARAM_CLOSE)
aMenuEdit = aMenuEdit.concat([[sClose, MF_NORMAL, 3, pSessionBaseName]]);
if (nFlags & PARAM_EDIT)
aMenuEdit = aMenuEdit.concat([[sEdit, MF_NORMAL, 4, pSessionBaseName]]);
if (nFlags & PARAM_DELETE)
aMenuEdit = aMenuEdit.concat([[sDelete, MF_NORMAL, 5, pSessionBaseName]]);
if (nFlags & PARAM_NEW)
aMenuEdit = aMenuEdit.concat([[sCreate, MF_NORMAL, 10]]);
if (nFlags & PARAM_DIALOG)
aMenuEdit = aMenuEdit.concat([[sDialog, MF_NORMAL, 6]]);
if (aMenuEdit.length)
aMenuEdit = (nFlags & PARAM_TOP) ? aMenuEdit.concat([["", MF_SEPARATOR]])
: [["", MF_SEPARATOR]].concat(aMenuEdit);
return aMenuEdit;
}
function GetExtraMenu(nFlags)
{
var aMenuEdit = [];
if (nFlags & PARAM_OPEN)
aMenuEdit = aMenuEdit.concat([[sOpen, MF_SUBMENU]], GetSessionFiles(1));
if (nFlags & PARAM_SAVE)
aMenuEdit = aMenuEdit.concat([[sSave, MF_SUBMENU]], GetSessionFiles(2));
if (nFlags & PARAM_CLOSE)
aMenuEdit = aMenuEdit.concat([[sClose, MF_SUBMENU]], GetSessionFiles(3));
if (nFlags & PARAM_EDIT)
aMenuEdit = aMenuEdit.concat([[sEdit, MF_SUBMENU]], GetSessionFiles(4));
if (nFlags & PARAM_DELETE)
aMenuEdit = aMenuEdit.concat([[sDelete, MF_SUBMENU]], GetSessionFiles(5));
if (nFlags & PARAM_NEW)
aMenuEdit = aMenuEdit.concat([[sCreate, MF_NORMAL, 10]]);
if (nFlags & PARAM_DIALOG)
aMenuEdit = aMenuEdit.concat([[sDialog, MF_NORMAL, 6]]);
return aMenuEdit;
}
function GetSessionFiles(vIDMenu)
{
var aSubMenu = [];
for (var i = 0; i < aSessionsFile.length; ++i)
aSubMenu.push([aSessionsFile[i][1], MF_NORMAL, vIDMenu, aSessionsFile[i][1]]);
if (aSubMenu.length)
aSubMenu[aSubMenu.length - 1][1] |= MF_LAST;
return aSubMenu;
}
function AddCurFileToSession(pSessionFile)
{
var pAkelDir;
var pEditFile;
var oSet;
var bSaveRelative = 0;
var pText;
if (oFSO.FileExists(pSessionFile))
{
if (pEditFile = AkelPad.GetEditFile(0))
{
oSet = AkelPad.ScriptSettings();
if (oSet.Begin("Sessions", 0x21 /*POB_READ|POB_PLUGS*/))
{
bSaveRelative = oSet.Read("SaveRelative", 1 /*PO_DWORD*/, 0);
oSet.End();
}
if (bSaveRelative)
{
pAkelDir = pAkelPadDir.replace(/\\/g, "\\\\");
pEditFile = pEditFile.replace(new RegExp(pAkelDir, "gi"), "%a");
}
pText = (AkelPad.ReadFile(pSessionFile) ? "\r\n" : "") +
pEditFile + '\r\n' +
'/Name="' + oFSO.GetFileName(pEditFile) + '" ' +
'/Active=0 ' +
'/Codepage=0 ' +
'/Selection=0-0 ' +
'/FirstVisChar=0 ' +
'/WordWrap=0 ' +
'/ReadOnly=0 ' +
'/Overtype=0 ' +
'/Bookmarks= ' +
'/CoderAlias= ' +
'/Folds= ' +
'/Marks=\r\n';
AkelPad.WriteFile(pSessionFile, pText, -1, 1200, true, 0x2 /*WFF_APPENDFILE*/);
}
}
}
function RemoveNonExistFiles(pSessionFile)
{
var pSessionText;
var aTextArray;
var pLineText;
var bNonExist = false;
var bEmptyLine = false;
var aNewText = [];
if (oFSO.FileExists(pSessionFile))
{
if (pSessionText = AkelPad.ReadFile(pSessionFile))
{
pSessionText = pSessionText.replace(/(\r\n|\r|\n)/g, "\n");
aTextArray = pSessionText.split("\n");
for (var i = 0; i < aTextArray.length; ++i)
{
pLineText = aTextArray[i].replace(/(^[ \t]*)|([ \t]*$)/mg, "");
if (pLineText.length > 0)
{
if (pLineText.indexOf("\\") != -1)
{
if (oFSO.FileExists(pLineText.replace(/\%a/i, pAkelPadDir)))
{
aNewText.push(aTextArray[i]);
bNonExist = false;
bEmptyLine = false;
}
else bNonExist = true;
}
else
{
if (bNonExist)
{
bNonExist = false;
bEmptyLine = true;
}
else aNewText.push(aTextArray[i]);
}
}
else
{
if (bEmptyLine) bEmptyLine = false;
else aNewText.push(aTextArray[i]);
}
}
}
}
AkelPad.WriteFile(pSessionFile, aNewText.join("\r\n"), -1, 1200, true);
}
function CreateNewSession()
{
var hMainWnd = AkelPad.GetMainWnd();
var pSessionName = "";
for (;;)
{
pSessionName = AkelPad.InputBox(hMainWnd, sCreate, sMsgNewName, pSessionName);
if (pSessionName === undefined)
break;
if (pSessionName = pSessionName.replace(/[\\\/:\*\?"{}<>\|]/g, "_"))
{
if (!oFSO.FileExists(pSessionsDir + "\\" + pSessionName + ".session"))
{
AkelPad.Call("Sessions::Main", 2, pSessionName);
break;
}
else
{
if (AkelPad.MessageBox(hMainWnd, sMsgExists.replace(/%s/, pSessionName),
WScript.ScriptName, 292 /*MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2*/)
== 6 /*MB_YES*/)
{
AkelPad.Call("Sessions::Main", 2, pSessionName);
break;
}
}
}
}
}
function GetSessionsDir()
{
var oSet = AkelPad.ScriptSettings();
var nSaveSessions = 1 /*SDIR_PROGRAM*/;
var lpBuffer;
var pSessionsDir = "";
if (oSet.Begin("Sessions", 0x21 /*POB_READ|POB_PLUGS*/))
{
nSaveSessions = oSet.Read("SaveSessions", 1 /*PO_DWORD*/);
oSet.End();
}
if (nSaveSessions == 1 /*SDIR_PROGRAM*/)
pSessionsDir = AkelPad.GetAkelDir(4 /*ADTYPE_PLUGS*/) + "\\Sessions";
else if (nSaveSessions == 2 /*SDIR_APPDATA*/)
{
if (lpBuffer = AkelPad.MemAlloc(256 * _TSIZE))
{
oSys.Call("shell32::SHGetSpecialFolderPath" + _TCHAR, AkelPad.GetMainWnd(), lpBuffer, 0x1a /*CSIDL_APPDATA*/, 0);
pSessionsDir = AkelPad.MemRead(lpBuffer, _TSTR) + "\\AkelPad\\Sessions";
AkelPad.MemFree(lpBuffer);
}
}
return pSessionsDir;
}
function ReadIni()
{
var oSet = AkelPad.ScriptSettings();
if (oSet.Begin("", 0x1 /*POB_READ*/))
{
nShowPath = oSet.Read("ShowPath", 1 /*PO_DWORD*/, 0);
oSet.End();
}
}
function WriteIni()
{
var oSet = AkelPad.ScriptSettings();
if (oSet.Begin("", 0x2 /*POB_SAVE*/))
{
oSet.Write("ShowPath", 1 /*PO_DWORD*/, nShowPath);
oSet.End();
}
}
function GetLangStrings()
{
if (AkelPad.GetLangId(0 /*LANGID_FULL*/) == 1049 /*Russian*/)
{
sDialog = "Диалог...";
sOpen = "Открыть сессию";
sSave = "Сохранить сессию";
sClose = "Закрыть сессию";
sEdit = "Редактировать сессию";
sCreate = "Создать сессию...";
sDelete = "Удалить файл сессии...";
sNonExist = "Удалить несуществующие";
sShowPath = "Показывать путь файлов";
sAddCurFile = "Добавить текущий файл";
sEmpty = "Пусто";
sMsgNewName = "Новое имя:";
sMsgExists = "Сессия \"%s\" уже существует. Перезаписать её?";
sMsgDelete = "Вы уверены, что хотите удалить сессию \"%s\"?";
}
else
{
sDialog = "Dialog...";
sOpen = "Open session";
sSave = "Save session";
sClose = "Close session";
sEdit = "Edit session";
sCreate = "Create session...";
sDelete = "Delete session file...";
sNonExist = "Delete non-existent";
sShowPath = "Show files path";
sAddCurFile = "Add current file";
sEmpty = "Empty";
sMsgNewName = "New name:";
sMsgExists = "Session \"%s\" already exists. Overwrite it?";
sMsgDelete = "Are you sure you want to delete session \"%s\"?";
}
} |
Last edited by Kley on Sun Sep 18, 2016 8:57 pm; edited 6 times in total |
|
Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Fri Jul 01, 2016 8:53 pm Post subject: |
|
|
Hide/Show lines that contains text.
LinesHideShow.js
Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=31498#31498
// Version: 2016-07-03
// Author: KDJ
//
// *** Hide/Show lines that contains text ***
//
// Usage:
// Call("Scripts::Main", 1, "LinesHideShow.js", '-hide=1 -text="^\s*$" -flag="r"')
// Call("Scripts::Main", 1, "LinesHideShow.js", '-hide=2 -text="world" -flag="i"')
// Call("Scripts::Main", 1, "LinesHideShow.js", '-flag="i"')
// Call("Scripts::Main", 1, "LinesHideShow.js")
//
// Arguments:
// -hide (number):
// 0 - show all lines,
// 1 - hide lines that contains text,
// 2 - hide lines that doesn't contain text.
// -text (string):
// Text to find. Can be pattern of AkelPad regular expression.
// If not specified, it will be text selected in edit window.
// -flag (string)
// Can be combination of the following:
// "i" - ignore case,
// "w" - whole word,
// "r" - -text is pattern of regular expression,
// "n" - dot in regular expression specifies any character except new line "\n".
//
// Remarks:
// Coder::CodeFold function does not work with this script, so do not use this function when any line is hidden.
// You can not hide the first line in document.
// Behavior when script is called without -hide and -text arguments:
// - if no selection in edit window - show all lines,
// - if selection is from left to right (caret is at end of selection) - hide lines that contains selected text,
// - if selection is from right to left (caret is at beginning of selection) - hide lines that doesn't contain selected text.
//
// Warning:
// If you select text that contains hidden lines and delete selection, the hidden lines will also be deleted!
var hMainWnd = AkelPad.GetMainWnd();
var hEditWnd = AkelPad.GetEditWnd();
var hEditWnd = AkelPad.GetEditWnd();
var oSys = AkelPad.SystemFunction();
var nHide;
var sText;
var sFlag;
var bCodeFold;
var nLastHide;
var nFirstVisLine;
var nLastLine;
var lpCaret;
var lpSelect;
var lpPoint64;
var lpFold;
var lpPoint1;
var lpPoint2;
var lpIndex1;
var lpIndex2;
var aFold;
var nFRF;
var nOffset3;
var nLine1;
var nLine2;
var nLine3;
var nLine4;
var hFoldStack;
var i;
if (! hEditWnd)
WScript.Quit();
nHide = AkelPad.GetArgValue("hide", 1);
sText = AkelPad.GetArgValue("text", "");
sFlag = AkelPad.GetArgValue("flag", "").toLowerCase();
ReadIni();
if ((! sText) && (! (sText = AkelPad.GetTextRange(AkelPad.GetSelStart(), AkelPad.GetSelEnd(), 1 /*\r*/))))
nHide = 0;
nFirstVisLine = AkelPad.SendMessage(hEditWnd, 3129 /*AEM_GETLINENUMBER*/, 4 /*AEGL_FIRSTVISIBLELINE*/, 0);
nLastLine = AkelPad.SendMessage(hEditWnd, 3129 /*AEM_GETLINENUMBER*/, 11 /*AEGL_LINEUNWRAPCOUNT*/, 0) - 1;
if (nHide == 0)
{
if (AkelPad.SendMessage(hEditWnd, 3406 /*AEM_GETFOLDCOUNT*/, 0 /*AEFC_ALL*/, 0))
{
AkelPad.SendMessage(hEditWnd, 11 /*WM_SETREDRAW*/, 0, 0);
if (AkelPad.IsPluginRunning("Coder::CodeFold"))
{
bCodeFold = true;
AkelPad.Call("Coder::CodeFold");
}
AkelPad.SendMessage(hEditWnd, 3408 /*AEM_DELETEFOLD*/, 0 /*all*/, 0);
AkelPad.SendMessage(hEditWnd, 3418 /*AEM_SETFOLDHIDEOFFSET*/, MakeLong(1, -1), 0);
if (bCodeFold)
AkelPad.Call("Coder::CodeFold");
AkelPad.SendMessage(hEditWnd, 11 /*WM_SETREDRAW*/, 1, 0);
AkelPad.SendMessage(hEditWnd, 3416 /*AEM_UPDATEFOLD*/, 0, nFirstVisLine);
oSys.Call("User32::InvalidateRect", hEditWnd, 0, 1);
}
}
else if (nLastLine > 1)
{
nFRF = 0x00000001 /*FRF_DOWN*/;
if (sFlag.indexOf("i") == -1)
nFRF |= 0x00000004 /*FRF_MATCHCASE*/;
if (sFlag.indexOf("w") > -1)
nFRF |= 0x00000002 /*FRF_WHOLEWORD*/;
if (sFlag.indexOf("n") > -1)
nFRF |= 0x00040000 /*FRF_REGEXPNONEWLINEDOT*/;
if (sFlag.indexOf("r") > -1)
{
nFRF |= 0x00080000 /*FRF_REGEXP*/;
nOffset3 = AkelPad.TextFind(0, sText, nFRF | 0x80000000 /*FRF_TEST*/);
if (nOffset3 <= -100)
{
AkelPad.MessageBox(hMainWnd, "Syntax error in regular expression!", WScript.ScriptName, 0x10 /*MB_ICONERROR*/);
WScript.Quit();
}
}
lpCaret = AkelPad.MemAlloc(_X64 ? 24 : 12); //AECHARINDEX
lpSelect = AkelPad.MemAlloc(_X64 ? 56 : 32); //AESELECTION
lpPoint64 = AkelPad.MemAlloc(_X64 ? 16 : 8); //POINT64
lpFold = AkelPad.MemAlloc(_X64 ? 96 : 60); //AEFOLD
lpPoint1 = AkelPad.MemAlloc(_X64 ? 80 : 44); //AEPOINT
lpPoint2 = AkelPad.MemAlloc(_X64 ? 80 : 44); //AEPOINT
lpIndex1 = _PtrAdd(lpPoint1, _X64 ? 16 : 8); //ciPoint
lpIndex2 = _PtrAdd(lpPoint2, _X64 ? 16 : 8); //ciPoint
AkelPad.MemCopy(_PtrAdd(lpPoint1, _X64 ? 40 : 20), -2 /*AEPTO_CALC*/, 2 /*DT_QWORD*/); //nPointOffset
AkelPad.MemCopy(_PtrAdd(lpPoint2, _X64 ? 40 : 20), -2 /*AEPTO_CALC*/, 2 /*DT_QWORD*/); //nPointOffset
AkelPad.MemCopy(_PtrAdd(lpFold, _X64 ? 40 : 20), lpPoint1, 2 /*DT_QWORD*/); //*lpMinPoint
AkelPad.MemCopy(_PtrAdd(lpFold, _X64 ? 48 : 24), lpPoint2, 2 /*DT_QWORD*/); //*lpMaxPoint
AkelPad.MemCopy(_PtrAdd(lpFold, _X64 ? 64 : 36), -1, 3 /*DT_DWORD*/); //crText
AkelPad.MemCopy(_PtrAdd(lpFold, _X64 ? 68 : 40), -1, 3 /*DT_DWORD*/); //crBk
if (AkelPad.IsPluginRunning("Coder::CodeFold"))
{
bCodeFold = true;
AkelPad.Call("Coder::CodeFold");
}
else
{
if (nLastHide == 0)
bCodeFold = false;
}
if (AkelPad.SendMessage(hEditWnd, 3406 /*AEM_GETFOLDCOUNT*/, 0 /*AEFC_ALL*/, 0))
{
AkelPad.SendMessage(hEditWnd, 3408 /*AEM_DELETEFOLD*/, 0 /*all*/, 0);
AkelPad.SendMessage(hEditWnd, 3416 /*AEM_UPDATEFOLD*/, 0, nFirstVisLine);
}
AkelPad.SendMessage(hEditWnd, 3125 /*AEM_GETSEL*/, lpCaret, lpSelect);
AkelPad.SendMessage(hEditWnd, 3179 /*AEM_GETSCROLLPOS*/, 0, lpPoint64);
AkelPad.SendMessage(hMainWnd, 11 /*WM_SETREDRAW*/, 0, 0);
AkelPad.SendMessage(hEditWnd, 11 /*WM_SETREDRAW*/, 0, 0);
AkelPad.SetSel(0, 0);
//reverse selection
if ((! (/-hide=/i).test(AkelPad.GetArgLine())) && (! (/-text=/i).test(AkelPad.GetArgLine())) && (AkelPad.SendMessage(hEditWnd, 3133 /*AEM_INDEXCOMPARE*/, lpCaret, lpSelect) == 0))
nHide = 2;
aFold = [];
if (nHide == 1)
{
nOffset3 = AkelPad.TextFind(0, sText, nFRF);
while (nOffset3 > -1)
{
nLine1 = -1;
do
{
nLine3 = AkelPad.SendMessage(hEditWnd, 3129 /*AEM_GETLINENUMBER*/, 21 /*AEGI_UNWRAPLINEFROMRICHOFFSET*/, nOffset3);
nLine4 = AkelPad.SendMessage(hEditWnd, 3129 /*AEM_GETLINENUMBER*/, 21 /*AEGI_UNWRAPLINEFROMRICHOFFSET*/, -1 /*caret offset*/);
if (nLine1 == -1)
{
nLine1 = nLine3;
nLine2 = nLine4;
}
else if (nLine3 - nLine2 < 2)
nLine2 = nLine4;
else
break;
}
while ((nOffset3 = AkelPad.TextFind(0, sText, nFRF)) > -1);
if ((nLine1 != 0) || (nLine2 != 0))
{
if (nLine1 > 0)
--nLine1;
AddFold();
}
}
}
else
{
nOffset3 = 0;
nLine1 = 0;
nLine2 = nLastLine;
while (nOffset3 > -1)
{
while ((nOffset3 = AkelPad.TextFind(0, sText, nFRF)) > -1)
{
nLine3 = AkelPad.SendMessage(hEditWnd, 3129 /*AEM_GETLINENUMBER*/, 21 /*AEGI_UNWRAPLINEFROMRICHOFFSET*/, nOffset3);
nLine4 = AkelPad.SendMessage(hEditWnd, 3129 /*AEM_GETLINENUMBER*/, 21 /*AEGI_UNWRAPLINEFROMRICHOFFSET*/, -1 /*caret offset*/);
if (nLine3 - nLine1 < 2)
nLine1 = nLine4;
else
{
nLine2 = nLine3 - 1;
break;
}
}
AddFold();
nLine1 = nLine2 + 1;
nLine2 = nLastLine;
}
}
AkelPad.SendMessage(hEditWnd, 3126 /*AEM_SETSEL*/, lpCaret, lpSelect);
AkelPad.SendMessage(hEditWnd, 3180 /*AEM_SETSCROLLPOS*/, 0, lpPoint64);
if (aFold.length)
{
for (i = 0; i < aFold.length; ++i)
{
AkelPad.MemCopy(_PtrAdd(aFold[i], _X64 ? 0 : 0), (i == aFold.length - 1) ? 0 : aFold[i + 1], 2 /*DT_QWORD*/); //*next
AkelPad.MemCopy(_PtrAdd(aFold[i], _X64 ? 8 : 4), (i == 0) ? 0 : aFold[i - 1], 2 /*DT_QWORD*/); //*prev
AkelPad.MemCopy(_PtrAdd(aFold[i], _X64 ? 16 : 8), 0, 2 /*DT_QWORD*/); //*parent
AkelPad.MemCopy(_PtrAdd(aFold[i], _X64 ? 24 : 12), 0, 2 /*DT_QWORD*/); //*firstChild
AkelPad.MemCopy(_PtrAdd(aFold[i], _X64 ? 32 : 16), 0, 2 /*DT_QWORD*/); //*lastChild
}
hFoldStack = AkelPad.SendMessage(hEditWnd, 3405 /*AEM_GETFOLDSTACK*/, 0, 0);
AkelPad.MemCopy(hFoldStack, aFold[0], 2 /*DT_QWORD*/); //first
AkelPad.MemCopy(_PtrAdd(hFoldStack, _X64 ? 8 : 4), aFold[aFold.length - 1], 2 /*DT_QWORD*/); //last
AkelPad.SendMessage(hEditWnd, 3418 /*AEM_SETFOLDHIDEOFFSET*/, MakeLong(1, 0), 0);
AkelPad.SendMessage(hEditWnd, 3415 /*AEM_COLLAPSEFOLD*/, 0 /*all*/, 0x9 /*AECF_NOCARETCORRECT|AECF_COLLAPSE*/);
}
else if (bCodeFold && (! AkelPad.IsPluginRunning("Coder::CodeFold")))
AkelPad.Call("Coder::CodeFold");
AkelPad.SendMessage(hMainWnd, 11 /*WM_SETREDRAW*/, 1, 0);
AkelPad.SendMessage(hEditWnd, 11 /*WM_SETREDRAW*/, 1, 0);
AkelPad.SendMessage(hEditWnd, 3416 /*AEM_UPDATEFOLD*/, 0, nFirstVisLine);
oSys.Call("User32::InvalidateRect", hMainWnd, 0, 1);
oSys.Call("User32::InvalidateRect", hEditWnd, 0, 1);
AkelPad.MemFree(lpCaret);
AkelPad.MemFree(lpSelect);
AkelPad.MemFree(lpPoint64);
AkelPad.MemFree(lpFold);
AkelPad.MemFree(lpPoint1);
AkelPad.MemFree(lpPoint2);
}
WriteIni();
function MakeLong(nLoWord, nHiWord)
{
return (nLoWord & 0xFFFF) | (nHiWord << 16);
}
function AddFold()
{
AkelPad.SendMessage(hEditWnd, 3142 /*AEM_GETWRAPLINE*/, nLine1, lpIndex1);
AkelPad.SendMessage(hEditWnd, 3142 /*AEM_GETWRAPLINE*/, nLine2, lpIndex2);
aFold.push(AkelPad.SendMessage(hEditWnd, 3407 /*AEM_ADDFOLD*/, 0, lpFold));
}
function ReadIni()
{
try
{
eval(AkelPad.ReadFile(WScript.ScriptFullName.replace(/\.js$/i, ".ini"), 0x10 /*OD_ADT_NOMESSAGES*/, 1200 /*UTF-16LE*/, 1));
}
catch (oError)
{}
if ((typeof bCodeFold != "boolean") && (typeof bCodeFold != "number"))
bCodeFold = false;
if (typeof nLastHide != "number")
nLastHide = 0;
}
function WriteIni()
{
var sText =
'bCodeFold=' + bCodeFold + ';\r\n' +
'nLastHide=' + nHide + ';\r\n';
AkelPad.WriteFile(WScript.ScriptFullName.replace(/\.js$/i, ".ini"), sText, sText.length, 1200 /*UTF-16LE*/, 1, 1);
}
|
|
|
Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Wed Jul 20, 2016 10:45 am Post subject: |
|
|
Replace text in edit window.
Part 1: TextReplace.js
Part 2: TextReplace_part2.js
Part 3: TextReplace_part3.js
Code: | function GetAkelHelpFile()
{
var sDir = AkelPad.GetAkelDir(2 /*ADTYPE_DOCS*/) + "\\";
var sFile = "";
if (AkelPad.GetLangId() == 1049 /*Russian*/)
{
if (oFSO.FileExists(sDir + "AkelHelp-Rus.htm"))
sFile = "AkelHelp-Rus.htm";
else if (oFSO.FileExists(sDir + "AkelHelp-Eng.htm"))
sFile = "AkelHelp-Eng.htm";
}
else
{
if (oFSO.FileExists(sDir + "AkelHelp-Eng.htm"))
sFile = "AkelHelp-Eng.htm";
else if (oFSO.FileExists(sDir + "AkelHelp-Rus.htm"))
sFile = "AkelHelp-Rus.htm";
}
return sFile;
}
function AkelHelp(sFile)
{
if (sFile)
{
sFile = AkelPad.GetAkelDir(2 /*ADTYPE_DOCS*/) + "\\" + sFile;
if (oFSO.FileExists(AkelPad.GetAkelDir(5 /*ADTYPE_SCRIPTS*/) + "\\HtmlView.js"))
AkelPad.Call("Scripts::Main", 1, "HtmlView.js", sFile + "#ch7");
}
}
function MenuFind()
{
var MF_STRING = 0x0000;
var MF_GRAYED = 0x0001;
var MF_CHECKED = 0x0008;
var MF_POPUP = 0x0010;
var MF_SEPARATOR = 0x0800;
var lpRECT = AkelPad.MemAlloc(16);
var hMenu1 = oSys.Call("User32::CreatePopupMenu");
var hMenu2 = oSys.Call("User32::CreatePopupMenu");
var hMenu3 = oSys.Call("User32::CreatePopupMenu");
var hMenu = oSys.Call("User32::CreatePopupMenu");
var nX, nY;
var nCmd;
oSys.Call("User32::SetFocus", GetDlgItem(hDlg, IDFINDB));
SetDefPushButton(IDFINDB);
oSys.Call("User32::GetWindowRect", GetDlgItem(hDlg, IDFINDB), lpRECT);
nX = AkelPad.MemRead(_PtrAdd(lpRECT, 8), 3 /*DT_DWORD*/);
nY = AkelPad.MemRead(_PtrAdd(lpRECT, 4), 3 /*DT_DWORD*/);
AkelPad.MemFree(lpRECT);
oSys.Call("User32::AppendMenuW", hMenu1, MF_STRING, 11, sTxtNext + "\tF7");
oSys.Call("User32::AppendMenuW", hMenu1, MF_STRING, 12, sTxtPrev + "\tShift+F7");
oSys.Call("User32::AppendMenuW", hMenu1, MF_STRING, 13, sTxtLast + "\tCtrl+F7");
oSys.Call("User32::AppendMenuW", hMenu1, MF_STRING, 14, sTxtFirst + "\tCtrl+Shift+F7");
oSys.Call("User32::AppendMenuW", hMenu2, MF_STRING, 21, "&1 - " + sTxtBegToCaret + "\tCtrl+1");
oSys.Call("User32::AppendMenuW", hMenu2, MF_STRING, 22, "&2 - " + sTxtCaretToEnd + "\tCtrl+2");
oSys.Call("User32::AppendMenuW", hMenu2, MF_STRING, 23, "&3 - " + sTxtSelection + "\tCtrl+3");
oSys.Call("User32::AppendMenuW", hMenu2, IsLineBoard() ? MF_STRING : MF_GRAYED, 24, "&4 - " + sTxtBookmarks + "\tCtrl+4");
oSys.Call("User32::AppendMenuW", hMenu2, MF_STRING, 25, "&5 - " + sTxtEntireDoc + "\tCtrl+5");
oSys.Call("User32::AppendMenuW", hMenu2, MF_STRING, 26, "&6 - " + sTxtAllDocs + "\tCtrl+6");
oSys.Call("User32::AppendMenuW", hMenu3, (nFindDef == 1) ? MF_CHECKED : MF_STRING, 101, sTxtNext);
oSys.Call("User32::AppendMenuW", hMenu3, (nFindDef == 2) ? MF_CHECKED : MF_STRING, 102, sTxtPrev);
oSys.Call("User32::AppendMenuW", hMenu3, (nFindDef == 3) ? MF_CHECKED : MF_STRING, 103, sTxtLast);
oSys.Call("User32::AppendMenuW", hMenu3, (nFindDef == 4) ? MF_CHECKED : MF_STRING, 104, sTxtFirst);
oSys.Call("User32::AppendMenuW", hMenu3, MF_SEPARATOR);
oSys.Call("User32::AppendMenuW", hMenu3, (nFindDef == 0) ? MF_CHECKED : MF_STRING, 100, sTxtNone);
oSys.Call("User32::AppendMenuW", hMenu, MF_STRING, 1, sTxtNext + "\tF3");
oSys.Call("User32::AppendMenuW", hMenu, MF_STRING, 2, sTxtPrev + "\tShift+F3");
oSys.Call("User32::AppendMenuW", hMenu, MF_STRING, 3, sTxtLast + "\tCtrl+F3");
oSys.Call("User32::AppendMenuW", hMenu, MF_STRING, 4, sTxtFirst + "\tCtrl+Shift+F3");
oSys.Call("User32::AppendMenuW", hMenu, MF_SEPARATOR);
oSys.Call("User32::AppendMenuW", hMenu, IsLineBoard() ? MF_POPUP : MF_GRAYED, hMenu1, sTxtFindInBooks);
oSys.Call("User32::AppendMenuW", hMenu, IsLineBoard() ? MF_STRING : MF_GRAYED, 15, sTxtBookmarkLines + "\tShift+Alt+Ins");
oSys.Call("User32::AppendMenuW", hMenu, IsLineBoard() ? MF_STRING : MF_GRAYED, 16, sTxtUnmarkLines + "\tShift+Alt+Del");
oSys.Call("User32::AppendMenuW", hMenu, MF_SEPARATOR);
oSys.Call("User32::AppendMenuW", hMenu, MF_POPUP, hMenu2, sTxtCountInRange);
oSys.Call("User32::AppendMenuW", hMenu, MF_SEPARATOR);
oSys.Call("User32::AppendMenuW", hMenu, MF_POPUP, hMenu3, sTxtFindDefault);
nCmd = oSys.Call("User32::TrackPopupMenu", hMenu, 0x1A8 /*TPM_RETURNCMD|TPM_NONOTIFY|TPM_BOTTOMALIGN|TPM_RIGHTALIGN*/, nX, nY, 0, hDlg, 0);
oSys.Call("User32::DestroyMenu", hMenu1);
oSys.Call("User32::DestroyMenu", hMenu2);
oSys.Call("User32::DestroyMenu", hMenu3);
oSys.Call("User32::DestroyMenu", hMenu);
if (nCmd > 0)
{
if (nCmd < 15)
Find(nCmd);
else if (nCmd == 15)
BookmarkLines(true);
else if (nCmd == 16)
BookmarkLines(false);
else if (nCmd < 29)
CountInRange(nCmd - 20);
else if (nCmd > 99)
{
nFindDef = nCmd - 100;
SendDlgItemMessage(hDlg, IDFINDB, 12 /*WM_SETTEXT*/, 0, sTxtFind + (nFindDef ? "" : " >"));
}
}
}
function ReadIni()
{
try
{
eval(AkelPad.ReadFile(WScript.ScriptFullName.replace(/\.js$/i, ".ini"), 0x10 /*ADT_NOMESSAGES*/, 1200 /*UTF-16LE*/, 1));
}
catch (oError)
{}
if ((typeof nWhatH != "number") || (nWhatH < nEditMinH)) nWhatH = nEditMinH;
nDlgMinH += nWhatH - nEditMinH;
if (typeof nDlgX != "number") nDlgX = 200;
if (typeof nDlgY != "number") nDlgY = 200;
if ((typeof nDlgW != "number") || (nDlgW < nDlgMinW)) nDlgW = nDlgMinW;
if ((typeof nDlgH != "number") || (nDlgH < nDlgMinH)) nDlgH = nDlgMinH;
if (typeof bTranspNA != "boolean") bTranspNA = false;
if ((typeof nOpacity != "number") || (nOpacity < 15) || (nOpacity > 255)) nOpacity = 255;
if (typeof bMatch != "boolean") bMatch = false;
if (typeof bWord != "boolean") bWord = false;
if (typeof bRegExp != "boolean") bRegExp = false;
if (typeof bDotNL != "boolean") bDotNL = true;
if (typeof bFunc != "boolean") bFunc = false;
if (typeof bBatch != "boolean") bBatch = false;
if (typeof bLockUndo != "boolean") bLockUndo = false;
if ((typeof nRange != "number") || (nRange < 0) || (nRange > 5)) nRange = 3;
if (typeof bFont1 != "boolean") bFont1 = false;
if (typeof bFont2 != "boolean") bFont2 = false;
if (typeof bWrap1 != "boolean") bWrap1 = false;
if (typeof bWrap2 != "boolean") bWrap2 = false;
if (typeof sWhat != "string") sWhat = "";
if (typeof sWith != "string") sWith = "";
if ((typeof sBFile != "string") || (! oFSO.FileExists(AkelPad.GetAkelDir(5 /*ADTYPE_SCRIPTS*/) + "\\" + sBFile))) sBFile = "";
if ((typeof nFindDef != "number") || (nFindDef < 1) || (nFindDef > 4)) nFindDef = 0;
if (typeof nHistLen != "number") nHistLen = 10;
if (nHistLen < 0)
nHistLen = 0;
else if (nHistLen > 99)
nHistLen = 99;
if (! (aHist instanceof Array)) aHist = [];
}
function WriteIni()
{
var lpRECT = AkelPad.MemAlloc(16);
var sText;
var i;
oSys.Call("User32::GetWindowRect", hDlg, lpRECT);
oSys.Call("User32::ScreenToClient", hMainWnd, lpRECT);
nDlgX = AkelPad.MemRead(_PtrAdd(lpRECT, 0), 3 /*DT_DWORD*/);
nDlgY = AkelPad.MemRead(_PtrAdd(lpRECT, 4), 3 /*DT_DWORD*/);
oSys.Call("User32::GetClientRect", hDlg, lpRECT);
nDlgW = AkelPad.MemRead(_PtrAdd(lpRECT, 8), 3 /*DT_DWORD*/);
nDlgH = AkelPad.MemRead(_PtrAdd(lpRECT, 12), 3 /*DT_DWORD*/);
AkelPad.MemFree(lpRECT);
sText =
'nDlgX=' + ScaleUX(nDlgX) + ';\r\n' +
'nDlgY=' + ScaleUY(nDlgY) + ';\r\n' +
'nDlgW=' + ScaleUX(nDlgW) + ';\r\n' +
'nDlgH=' + ScaleUY(nDlgH) + ';\r\n' +
'nWhatH=' + ScaleUY(nWhatH) + ';\r\n' +
'bTranspNA=' + bTranspNA + ';\r\n' +
'nOpacity=' + nOpacity + ';\r\n' +
'bMatch=' + bMatch + ';\r\n' +
'bWord=' + bWord + ';\r\n' +
'bRegExp=' + bRegExp + ';\r\n' +
'bDotNL=' + bDotNL + ';\r\n' +
'bFunc=' + bFunc + ';\r\n' +
'bBatch=' + bBatch + ';\r\n' +
'bLockUndo=' + bLockUndo + ';\r\n' +
'nRange=' + nRange + ';\r\n' +
'bFont1=' + bFont1 + ';\r\n' +
'bFont2=' + bFont2 + ';\r\n' +
'bWrap1=' + bWrap1 + ';\r\n' +
'bWrap2=' + bWrap2 + ';\r\n' +
'sWhat="' + EscapeStr(sWhat) + '";\r\n' +
'sWith="' + EscapeStr(sWith) + '";\r\n' +
'sBFile="' + EscapeStr(sBFile) + '";\r\n' +
'nFindDef=' + nFindDef + ';\r\n' +
'nHistLen=' + nHistLen + ';\r\n' +
'aHist=[';
for (i = 0; i < aHist.length; ++i)
sText += '["' + EscapeStr(aHist[i][0]) + '","' + EscapeStr(aHist[i][1]) + '","' + aHist[i][2] + '"]' + ((i == aHist.length - 1) ? '' : ',');
sText += '];\r\n';
AkelPad.WriteFile(WScript.ScriptFullName.replace(/\.js$/i, ".ini"), sText, sText.length, 1200 /*UTF-16LE*/, 1, 0x1 /*WFF_WRITEREADONLY*/);
}
function EscapeStr(sStr)
{
return sStr.replace(/[\\"]/g, '\\$&').replace(/\0/g, '\\0').replace(/\t/g, '\\t').replace(/\n/g, '\\n');
}
function UnEscapeStr(sStr)
{
return sStr.replace(/(\\+)(.?)/g,
function(s0, s1, s2)
{
if (s1.length % 2)
{
if (s2 == "0") s2 = "\0";
else if (s2 == "t") s2 = "\t";
else if (s2 == "n") s2 = "\n";
return s1.substr(0, (s1.length - 1) / 2) + s2;
}
return s1.substr(0, s1.length / 2) + s2;
});
}
function GetLangStrings()
{
if (AkelPad.GetLangId(0 /*LANGID_FULL*/) == 1045) //Polish
{
sTxtDlgTitle = 'Zamień Tekst';
sTxtWhat = '&Co:';
sTxtBatch = 'Pakiet:';
sTxtWith = 'Czy&m:';
sTxtMatchCase = 'Uwzględnij wielkość &liter';
sTxtWholeWord = 'Całe &wyrazy';
sTxtRegExp = 'Wyrażenia ®ularne';
sTxtDotMatchesNL = '&. dopasowuje \\n';
sTxtWithFunc = 'Zamień przez &funkcję';
sTxtBatchRepl = 'Zamień &pakietowo';
sTxtLockUndo = 'Wyłącz "Cofnij"';
sTxtRange = 'Zakres do zamiany';
sTxtBegToCaret = 'Początek - Kursor';
sTxtCaretToEnd = 'Kursor - Koniec';
sTxtSelection = 'Zaznaczenie';
sTxtBookmarks = 'Zakładki';
sTxtEntireDoc = 'Cały dokument';
sTxtAllDocs = 'Wszystkie dokum.';
sTxtTransparentNA = 'Przezroczystość - gdy nieaktywne';
sTxtReplace1 = '&Zamień jedno';
sTxtReplaceAll = 'Z&amień wszystko';
sTxtHistory = '&Historia';
sTxtTemplates = '&Szablony';
sTxtFind = 'Z&najdź';
sTxtClose = 'Zamknij';
sTxtMenu = '&Menu';
sTxtOK = 'OK';
sTxtCancel = 'Anuluj';
sTxtBatchFile = 'Plik pakietu';
sTxtNoBatchFiles = '<brak plików pakietów>';
sTxtUndo = '&Cofnij';
sTxtRedo = '&Powtórz';
sTxtCut = '&Wytnij';
sTxtCopy = '&Kopiuj';
sTxtPaste = 'Wkl&ej';
sTxtDelete = '&Usuń';
sTxtSelAll = 'Zaznacz w&szystko';
sTxtAPFont = 'Czcionka AkelPad';
sTxtWrap = 'Zawijaj wiersze';
sTxtRemove = 'Usuń';
sTxtClear = 'Wyczyść';
sTxtHistLen = 'Długość historii';
sTxtAdd = 'Dodaj';
sTxtRename = 'Zmień nazwę';
sTxtMoveUp = 'W górę';
sTxtMoveDown = 'W dół';
sTxtSort = 'Sortuj';
sTxtName = 'Nazwa:';
sTxtNext = 'Następny';
sTxtPrev = 'Poprzedni';
sTxtLast = 'Ostatni';
sTxtFirst = 'Pierwszy';
sTxtNone = 'Brak';
sTxtFindInBooks = 'Znajdź w zakładkach';
sTxtBookmarkLines = 'Oznacz wiersze zakładkami';
sTxtUnmarkLines = 'Usuń zakładki z wierszy';
sTxtCountInRange = 'Policz w zakresie';
sTxtFindDefault = 'Domyślne działanie "Znajdź"';
sTxtFileNotExist = 'Plik nie istnieje!';
sTxtFileNoData = 'Plik nie zawiera poprawnych danych!';
sTxtAreYouSure = 'Czy jesteś pewien ?';
sTxtNotFound = 'Nie znaleziono!';
sTxtChangedDocs = 'Zmienione dokumenty: ';
sTxtCountChanges = 'Łączna liczba zamian: ';
sTxtRegExpErr = 'Błąd składni w wyrażeniu regularnym!';
sTxtNoFuncErr = 'Nie można utworzyć funkcji Zamiany!';
sTxtNoTextErr = 'Funkcja Zamiany nie zwraca tekstu!';
sTxtRunTimeErr = 'Błąd w czasie wykonywania funkcji Zamiany:';
sTxtBatchErr = 'Błąd w pliku pakietu, wiersz: ';
sTxtSaveDocs = 'Wszystkie dokumenty podlegające zamianie powinny być zapisane!';
sTxtNameExists = 'Nazwa już istnieje!';
sTxtTemplExists = 'Szablon już istnieje!';
}
else if (AkelPad.GetLangId(0 /*LANGID_FULL*/) == 1049) //Russian
{
//translated by YuS
sTxtDlgTitle = 'Замена текста';
sTxtWhat = 'Ч&то:';
sTxtBatch = 'Пакет:';
sTxtWith = 'Ч&ем:';
sTxtMatchCase = 'Учитывать &регистр';
sTxtWholeWord = 'Слово &целиком';
sTxtRegExp = 'Регулярные в&ыражения';
sTxtDotMatchesNL = '&. захватывает \\n';
sTxtWithFunc = 'Заменять на &функцию';
sTxtBatchRepl = '&Пакетная замена';
sTxtLockUndo = 'Выкл. "Отменить"';
sTxtRange = 'Диапазон для замены';
sTxtBegToCaret = 'До курсора';
sTxtCaretToEnd = 'От курсора';
sTxtSelection = 'В выделении';
sTxtBookmarks = 'Закладки';
sTxtEntireDoc = 'Весь файл';
sTxtAllDocs = 'Все файлы';
sTxtTransparentNA = 'Прозрачный неактивный диалог';
sTxtReplace1 = '&Заменить';
sTxtReplaceAll = 'Заменить &всё';
sTxtHistory = '&История';
sTxtTemplates = '&Шаблоны';
sTxtFind = '&Найти';
sTxtClose = 'Закрыть';
sTxtMenu = '&Меню';
sTxtOK = 'OK';
sTxtCancel = 'Отмена';
sTxtBatchFile = 'Пакетный файл';
sTxtNoBatchFiles = '<нет пакетных файлов>';
sTxtUndo = 'От&менить';
sTxtRedo = '&Повторить';
sTxtCut = '&Вырезать';
sTxtCopy = '&Копировать';
sTxtPaste = 'В&ставить';
sTxtDelete = '&Удалить';
sTxtSelAll = 'Вы&делить всё';
sTxtAPFont = 'Шрифт AkelPad';
sTxtWrap = 'Перенос строк';
sTxtRemove = 'Удалить';
sTxtClear = 'Удалить всё';
sTxtHistLen = 'Количество строк';
sTxtAdd = 'Добавить';
sTxtRename = 'Переименовать';
sTxtMoveUp = 'Вверх';
sTxtMoveDown = 'Вниз';
sTxtSort = 'Сортировать';
sTxtName = 'Имя:';
sTxtNext = 'Следующее';
sTxtPrev = 'Предыдущее';
sTxtLast = 'Последнее';
sTxtFirst = 'Первое';
sTxtNone = 'Нет';
sTxtFindInBooks = 'Найти в закладках';
sTxtBookmarkLines = 'Пометить строки';
sTxtUnmarkLines = 'Снять пометки строк';
sTxtCountInRange = 'Посчитать в диапазоне';
sTxtFindDefault = 'По умолчанию: "Найти ..."';
sTxtFileNotExist = 'Файл не существует!';
sTxtFileNoData = 'Файл не содержит правильных данных!';
sTxtAreYouSure = 'Вы уверены?';
sTxtNotFound = 'Не найдено!';
sTxtChangedDocs = 'Изменённые документы: ';
sTxtCountChanges = 'Количество замен: ';
sTxtRegExpErr = 'Синтаксическая ошибка в регулярном выражении!';
sTxtNoFuncErr = 'Невозможно создать функцию замены!';
sTxtNoTextErr = 'Функция замены текст не вернула!';
sTxtRunTimeErr = 'Ошибка выполнения функции замены:';
sTxtBatchErr = 'Ошибка в пакетном файле, строка: ';
sTxtSaveDocs = 'Все документы, подлежащие замене, необходимо сохранить!';
sTxtNameExists = 'Имя уже существует!';
sTxtTemplExists = 'Шаблон уже существует!';
}
else
{
sTxtDlgTitle = 'Text Replace';
sTxtWhat = '&What:';
sTxtBatch = 'Batch:';
sTxtWith = 'W&ith:';
sTxtMatchCase = 'Match &case';
sTxtWholeWord = '&Whole word';
sTxtRegExp = 'Regular e&xpressions';
sTxtDotMatchesNL = '&. matches \\n';
sTxtWithFunc = 'Replace with f&unction';
sTxtBatchRepl = '&Batch replace';
sTxtLockUndo = 'Disable "Undo"';
sTxtRange = 'Range for Replace';
sTxtBegToCaret = 'Beginning - Caret';
sTxtCaretToEnd = 'Caret - End';
sTxtSelection = 'Selection';
sTxtBookmarks = 'Bookmarks';
sTxtEntireDoc = 'Entire document';
sTxtAllDocs = 'All documents';
sTxtTransparentNA = 'Transparency - only when inactive';
sTxtReplace1 = '&Replace single';
sTxtReplaceAll = 'Replace &all';
sTxtHistory = '&History';
sTxtTemplates = '&Templates';
sTxtFind = '&Find';
sTxtClose = 'Close';
sTxtMenu = '&Menu';
sTxtOK = 'OK';
sTxtCancel = 'Cancel';
sTxtBatchFile = 'Batch file';
sTxtNoBatchFiles = '<no batch files>';
sTxtUndo = '&Undo';
sTxtRedo = '&Redo';
sTxtCut = 'C&ut';
sTxtCopy = '&Copy';
sTxtPaste = '&Paste';
sTxtDelete = '&Delete';
sTxtSelAll = 'Select &all';
sTxtAPFont = 'AkelPad font';
sTxtWrap = 'Wrap lines';
sTxtRemove = 'Remove';
sTxtClear = 'Clear';
sTxtHistLen = 'History length';
sTxtAdd = 'Add';
sTxtRename = 'Rename';
sTxtMoveUp = 'Move up';
sTxtMoveDown = 'Move down';
sTxtSort = 'Sort';
sTxtName = 'Name:';
sTxtNext = 'Next';
sTxtPrev = 'Previous';
sTxtLast = 'Last';
sTxtFirst = 'First';
sTxtNone = 'None';
sTxtFindInBooks = 'Find in bookmarks';
sTxtBookmarkLines = 'Bookmark lines';
sTxtUnmarkLines = 'Unmark lines';
sTxtCountInRange = 'Count in range';
sTxtFindDefault = '"Find" - default action';
sTxtFileNotExist = 'File does not exist!';
sTxtFileNoData = 'File does not contain valid data!';
sTxtAreYouSure = 'Are you sure ?';
sTxtNotFound = 'Not found!';
sTxtChangedDocs = 'Changed documents: ';
sTxtCountChanges = 'Count of changes: ';
sTxtRegExpErr = 'Syntax error in regular expression!';
sTxtNoFuncErr = 'Can not create Replace function!';
sTxtNoTextErr = 'Replace function does not return a text!';
sTxtRunTimeErr = 'Run time error Replace function:';
sTxtBatchErr = 'Error in batch file, line: ';
sTxtSaveDocs = 'All documents that are subject to the replacement should be saved!';
sTxtNameExists = 'Name already exists!';
sTxtTemplExists = 'Template already exists!';
}
}
|
|
|
Back to top |
|
 |
Sticher78
Joined: 30 Jul 2016 Posts: 22
|
Posted: Fri Nov 04, 2016 11:10 pm Post subject: |
|
|
Activate window of FileZilla, when saving file on FTP:
ActivateFZ.js
Code: | //http://akelpad.sourceforge.net/forum/viewtopic.php?p=31982#31982
// Version: 2016-04-11
// Author: Sticher78
// Активирует окно FileZilla, при сохранении файла на FTP.
// Если файл не сохранен никуда - открывается просто окно сохранения файла.
// Если файл сохранён, но не с FTP - просто активируется окно FileZilla.
AkelPad.Command(4105);
var WshShell;
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.AppActivate ("FileZilla"); |
|
|
Back to top |
|
 |
beotiger
Joined: 09 Dec 2015 Posts: 53
|
Posted: Fri Dec 02, 2016 7:43 pm Post subject: Quoted printable decode/encode |
|
|
quoted-printable.js Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=32125#32125
// Version: 1.0.1 (2016-12-02)
// Author: Mathias Bynens - original version, Andrey Tzar - adaptation for AkelPad editor
// Origin: https://github.com/mathiasbynens/quoted-printable
// License: MIT https://mths.be/mit
// Description(1033): Decode/encode quoted-printable strings (selected in AkelPad editor)
// Description(1049): Декодировать/кодировать quoted-printable выбранные в редакторе строки
/*
Argument:
First argument: 'decode' or 'encode' - do decode or encode operation on selected string
Default is: `decode`
Example:
Call("Scripts::Main", 1, "quoted-printable.js", `encode`) - encode current selection into quoted-printable string
Note: operation performs on the spot
Аргумент:
Первый аргумент - 'decode' - декодировать выбранный текст из кодировки quoted-printable в простой текст (можно не указывать, т.к. это действие должно быть выполнено по умолчанию),
'encode' - закодировать выбранный текст в кодировку quoted-printable
Пример:
Call("Scripts::Main", 1, "quoted-printable.js", `encode`);
foo=0D=0Abar => foo=3D0D=3D0Abar
Привет! => =D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D1=82!
*/
/*! https://mths.be/quoted-printable v1.0.1 by @mathias | MIT license */
var quotedPrintable = (function() {
function convertToUnicode(str, cp) {
var oSys = AkelPad.SystemFunction();
if(cp === undefined)
cp = AkelPad.GetEditCodePage(0);
var ret = "";
if(
cp == 1200 //UTF-16LE
|| cp == 1201 //UTF-16BE
|| cp == 12000 //UTF-32LE
|| cp == 12001 //UTF-32BE
) {
var isLE = cp == 1200 || cp == 12000;
var step = cp == 12000 || cp == 12001 ? 4 : 2;
if(str.length % step != 0)
throw "Invalid unicode string";
for(var i = 0, l = str.length; i < l; i += step) {
var chars = str.substr(i, step);
if(isLE) {
var b1 = chars.charCodeAt(0);
var b2 = chars.charCodeAt(1);
}
else {
var b1 = chars.charCodeAt(step - 1);
var b2 = chars.charCodeAt(step - 2);
}
ret += String.fromCharCode((b2 << 8) + b1);
}
return ret;
}
// based on Fr0sT's code: http://akelpad.sourceforge.net/forum/viewtopic.php?p=7972#7972
// current code page is UTF16* or UTF32* - set ansi current code page
// (WideChar <-> MultiByte functions don't work with this code pages)
if(cp == 1 || cp == 1200 || cp == 1201 || cp == 12000 || cp == 12001)
cp = 0;
try {
var strLen = str.length;
var pMBBuf = AkelPad.MemAlloc(strLen * 1 /*sizeof(char)*/);
if(!pMBBuf)
throw new Error("MemAlloc fail");
for(var i = 0; i < strLen; ++i)
AkelPad.MemCopy(_PtrAdd(pMBBuf, i), str.charCodeAt(i), 5 /*DT_BYTE*/);
// get required buffer size
var bufLen = oSys.Call(
"Kernel32::MultiByteToWideChar",
cp, // __in UINT CodePage,
0, // __in DWORD dwFlags,
pMBBuf, // __in LPCSTR lpMultiByteStr,
strLen, // __in int cbMultiByte,
0, // __out LPWSTR lpWideCharStr,
0 // __in int cchWideChar
);
if(!bufLen)
throw new Error("MultiByteToWideChar fail " + oSys.GetLastError());
bufLen *= 2 /*sizeof(wchar_t)*/;
var pWCBuf = AkelPad.MemAlloc(bufLen);
if(!pWCBuf)
throw new Error("MemAlloc fail");
// convert buffer
bufLen = oSys.Call(
"Kernel32::MultiByteToWideChar",
cp, // __in UINT CodePage,
0, // __in DWORD dwFlags,
pMBBuf, // __in LPCSTR lpMultiByteStr,
strLen, // __in int cbMultiByte,
pWCBuf, // __out LPWSTR lpWideCharStr,
bufLen // __in int cchWideChar
);
if(!bufLen)
throw new Error("MultiByteToWideChar fail " + oSys.GetLastError());
//ret = AkelPad.MemRead(pWCBuf, 1 /*DT_UNICODE*/);
for(
var pCurr = pWCBuf, bufMax = _PtrAdd(pWCBuf, bufLen*2);
_PtrMath(pCurr, "<", bufMax);
pCurr = _PtrAdd(pCurr, 2)
)
ret += String.fromCharCode(AkelPad.MemRead(pCurr, 4 /*DT_WORD*/));
}
catch(e) {
throw e;
}
finally {
pMBBuf && AkelPad.MemFree(pMBBuf);
pWCBuf && AkelPad.MemFree(pWCBuf);
}
return ret;
}
function convertFromUnicode(str, cp) {
var oSys = AkelPad.SystemFunction();
if(cp === undefined)
cp = AkelPad.GetEditCodePage(0);
var ret = "";
if(
cp == 1200 //UTF-16LE
|| cp == 1201 //UTF-16BE
|| cp == 12000 //UTF-32LE
|| cp == 12001 //UTF-32BE
) {
var isLE = cp == 1200 || cp == 12000;
var u32 = cp == 12000 || cp == 12001 ? "\x00\x00" : "";
for(var i = 0, l = str.length; i < l; ++i) {
var code = str.charCodeAt(i);
var b1 = String.fromCharCode(code & 0xff);
var b2 = String.fromCharCode(code >> 8 & 0xff);
ret += isLE
? b1 + b2 + u32
: u32 + b2 + b1;
}
return ret;
}
// based on Fr0sT's code: http://akelpad.sourceforge.net/forum/viewtopic.php?p=7972#7972
// current code page is UTF16* or UTF32* - set ansi current code page
// (WideChar <-> MultiByte functions don't work with this code pages)
if(cp == 1 || cp == 1200 || cp == 1201 || cp == 12000 || cp == 12001)
cp = 0;
try {
var strLen = str.length + 1;
var pWCBuf = AkelPad.MemAlloc(strLen * _TSIZE);
if(!pWCBuf)
throw new Error("MemAlloc fail");
AkelPad.MemCopy(pWCBuf, str, _TSTR);
// get required buffer size
var bufLen = oSys.Call(
"Kernel32::WideCharToMultiByte",
cp, // __in UINT CodePage,
0, // __in DWORD dwFlags,
pWCBuf, // __in LPCWSTR lpWideCharStr,
strLen, // __in int cchWideChar,
0, // __out LPSTR lpMultiByteStr,
0, // __in int cbMultiByte,
0, // __in LPCSTR lpDefaultChar,
0 // __out LPBOOL lpUsedDefaultChar
);
if(!bufLen)
throw new Error("WideCharToMultiByte fail " + oSys.GetLastError());
var pMBBuf = AkelPad.MemAlloc(bufLen);
if(!pMBBuf)
throw new Error("MemAlloc fail");
// convert buffer
bufLen = oSys.Call(
"Kernel32::WideCharToMultiByte",
cp, // __in UINT CodePage,
0, // __in DWORD dwFlags,
pWCBuf, // __in LPCWSTR lpWideCharStr,
strLen, // __in int cchWideChar,
pMBBuf, // __out LPSTR lpMultiByteStr,
bufLen, // __in int cbMultiByte,
0, // __in LPCSTR lpDefaultChar,
0 // __out LPBOOL lpUsedDefaultChar
);
if(!bufLen)
throw new Error("WideCharToMultiByte fail " + oSys.GetLastError());
//ret = AkelPad.MemRead(pMBBuf, 0 /*DT_ANSI*/);
for(
var pCurr = pMBBuf, bufMax = _PtrAdd(pMBBuf, bufLen - 1);
_PtrMath(pCurr, "<", bufMax);
pCurr = _PtrAdd(pCurr, 1)
)
ret += String.fromCharCode(AkelPad.MemRead(pCurr, 5 /*DT_BYTE*/));
}
catch(e) {
throw e;
}
finally {
pWCBuf && AkelPad.MemFree(pWCBuf);
pMBBuf && AkelPad.MemFree(pMBBuf);
}
return ret;
}
/*--------------------------------------------------------------------------*/
var stringFromCharCode = String.fromCharCode;
var decode = function(input) {
var s = input
// https://tools.ietf.org/html/rfc2045#section-6.7, rule 3:
// тАЬTherefore, when decoding a `Quoted-Printable` body, any trailing white
// space on a line must be deleted, as it will necessarily have been added
// by intermediate transport agents.тАЭ
.replace(/[\t\x20]$/gm, '')
// Remove hard line breaks preceded by `=`. Proper `Quoted-Printable`-
// encoded data only contains CRLF line endings, but for compatibility
// reasons we support separate CR and LF too.
.replace(/=(?:\r\n?|\n|$)/g, '')
// Decode escape sequences of the form `=XX` where `XX` is any
// combination of two hexidecimal digits. For optimal compatibility,
// lowercase hexadecimal digits are supported as well. See
// https://tools.ietf.org/html/rfc2045#section-6.7, note 1.
.replace(/=([a-fA-F0-9]{2})/g, function($0, $1) {
var codePoint = parseInt($1, 16);
return stringFromCharCode(codePoint);
});
// WScript.Echo(s);
return convertToUnicode(s, 65001);
};
var handleTrailingCharacters = function(string) {
return string
.replace(/\x20$/, '=20') // Handle trailing space.
.replace(/\t$/, '=09') // Handle trailing tab.
};
var regexUnsafeSymbols = /[\0-\x08\n-\x1F=\x7F-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
var encode = function(string) {
string = convertFromUnicode(string, 65001);
// Encode symbols that are definitely unsafe (i.e. unsafe in any context).
var encoded = string.replace(regexUnsafeSymbols, function(symbol) {
if (symbol > '\xFF') {
throw RangeError(
'`quotedPrintable.encode()` expects extended ASCII input only. ' +
'Don\u2019t forget to encode the input first using a character ' +
'encoding like UTF-8.'
);
}
var codePoint = symbol.charCodeAt(0);
var hexadecimal = codePoint.toString(16).toUpperCase();
return '=' + ('0' + hexadecimal).slice(-2);
});
// Limit lines to 76 characters (not counting the CRLF line endings).
var lines = encoded.split(/\r\n?|\n/g);
var lineIndex = -1;
var lineCount = lines.length;
var result = [];
while (++lineIndex < lineCount) {
var line = lines[lineIndex];
// Leave room for the trailing `=` for soft line breaks.
var LINE_LENGTH = 75;
var index = 0;
var length = line.length;
while (index < length) {
var buffer = encoded.slice(index, index + LINE_LENGTH);
// If this line ends with `=`, optionally followed by a single uppercase
// hexadecimal digit, we broke an escape sequence in half. Fix it by
// moving these characters to the next line.
if (/=$/.test(buffer)) {
buffer = buffer.slice(0, LINE_LENGTH - 1);
index += LINE_LENGTH - 1;
} else if (/=[A-F0-9]$/.test(buffer)) {
buffer = buffer.slice(0, LINE_LENGTH - 2);
index += LINE_LENGTH - 2;
} else {
index += LINE_LENGTH;
}
result.push(buffer);
}
}
// Encode space and tab characters at the end of encoded lines. Note that
// with the current implementation, this can only occur at the very end of
// the encoded string тАФ every other line ends with `=` anyway.
var lastLineLength = buffer.length;
if (/[\t\x20]$/.test(buffer)) {
// Thereт's a space or a tab at the end of the last encoded line. Remove
// this line from the `result` array, as it needs to change.
result.pop();
if (lastLineLength + 2 <= LINE_LENGTH + 1) {
// It's possible to encode the character without exceeding the line
// length limit.
result.push(
handleTrailingCharacters(buffer)
);
} else {
// It's not possible to encode the character without exceeding the line
// length limit. Remvoe the character from the line, and insert a new
// line that contains only the encoded character.
result.push(
buffer.slice(0, lastLineLength - 1),
handleTrailingCharacters(
buffer.slice(lastLineLength - 1, lastLineLength)
)
);
}
}
// `Quoted-Printable` uses CRLF.
var s = result.join('=\r\n');
return s;
};
return {
'encode': encode,
'decode': decode,
'version': '1.0.1'
};
}());
/* AkelPad specific code below */
// check if we use this script out of AkelPad editor's environment
if (typeof AkelPad == "undefined")
{
try
{
AkelPad = new ActiveXObject("AkelPad.Document");
_PtrAdd = function(n1, n2) {return AkelPad.Global._PtrAdd(n1, n2);};
_X64 = AkelPad.Constants._X64;
AkelPad.ActiveXThis(this);
}
catch (oError)
{
WScript.Echo("You need to register Scripts.dll");
WScript.Quit();
}
}
// find selected text and throw error if there is no one
var nSelStart = AkelPad.GetSelStart(),
nSelEnd = AkelPad.GetSelEnd();
var inputBuf = trim(AkelPad.GetSelText());
if(nSelStart == nSelEnd || inputBuf.length < 1)
error("Select text to operate");
var option = (WScript.Arguments.length ? trim(WScript.Arguments(0)) : 'decode');
var text = option == 'encode' ? quotedPrintable.encode(inputBuf) :
quotedPrintable.decode(inputBuf);
// var trailing = option == 'encode' ? 1 : 0;
AkelPad.ReplaceSel(text);
AkelPad.SetSel(nSelStart, nSelStart + text.length /* - trailing */ );
/* ******************* */
/* Auxiliary functions */
/* ******************* */
// trim spaces from beginning and end of a string
function trim(pStr)
{
return (typeof pStr == 'string' && pStr.length) ?
pStr.replace(/^\s+|\s+$/, '') : '';
}
// error handling
function error(s)
{
AkelPad.MessageBox(AkelPad.GetEditWnd(), s, WScript.ScriptName, 0x48);
WScript.Quit();
}
|
Decode/encode quoted-printable strings (selected in AkelPad editor) on the spot
Original code is from: https://github.com/mathiasbynens/quoted-printable
May be handy during reading email messages source.
Декодировать/кодировать quoted-printable выбранные в редакторе строки
Код был адаптирован для AkelPad'а (ссылку см. выше).
Может быть полезен при чтении оригиналов писем. |
|
Back to top |
|
 |
Diamen
Joined: 15 Aug 2008 Posts: 61
|
Posted: Mon May 22, 2017 6:35 pm Post subject: |
|
|
wm_copydata.js Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=32545#32545
// Version: 1.0 (2017-05-22)
// Author: Diamen
//
//
// Description(1033): WM_COPYDATA implementation
// Example: _WM_COPYDATA_Send("WindowsClass", "Command", 0, false);
function _WM_COPYDATA_Send(win, sString, dwData, post){
//_WM_COPYDATA_Send("PowerProMain", ".Lancia@test(321)", 0, false);
var cd=AkelPad.MemAlloc(_X64?24:12);
AkelPad.MemCopy(_PtrAdd(cd, 0), dwData, 3);
AkelPad.MemCopy(_PtrAdd(cd, (_X64?8:4)), sString.length+1, 3);
var cmd=AkelPad.MemAlloc(sString.length);
AkelPad.MemCopy(cmd, sString,0);
AkelPad.MemCopy(_PtrAdd(cd, (_X64?16:8)), cmd, 3);
var oSys=AkelPad.SystemFunction();
if(typeof win==="string"){win=oSys.Call("User32::FindWindowExW", 0, 0, win, 0);}
if(win){
if(post!==true){
AkelPad.SendMessage(win, 0x004A, 0, cd);
}else{
oSys.Call("user32::SendMessageTimeoutW", win, 0x004A, 0, cd, 1, 30000, 0);
}
post=oSys.GetLastError();
}
AkelPad.MemFree(cmd);
AkelPad.MemFree(cd);
return post;
} |
|
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|