| View previous topic :: View next topic |
| Author |
Message |
VladSh
Joined: 29 Nov 2006 Posts: 2523 Location: Киев, Русь
|
Posted: Mon Sep 21, 2009 8:27 am Post subject: |
|
|
DelInsideSpaces.js
| Code: | ///Delete repeated spaces inside the text
///Убирает пустые символы внутри текста
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=5577#5577
// Version: 3.5 (2011.03.22)
if (! AkelPad.Include("selCompleteLine.js")) WScript.Quit();
oCh.runWithRedraw();
function process()
{
oCh.Text = oCh.getSelTextAll();
oCh.Text = oCh.Text.replace(/\ {2,}/g, ' '); //Убираем повторяющиеся пробелы
oCh.Text = oCh.Text.replace(/\t{2,}/g, '\t'); //Убираем повторяющиеся табуляции
} |
This script used selCompleteLine.js.
Last edited by VladSh on Wed Jul 20, 2011 11:09 am; edited 11 times in total |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2523 Location: Киев, Русь
|
Posted: Wed Sep 23, 2009 3:27 pm Post subject: |
|
|
OpenByLSC.js
| Code: | ///Open by Linked, Selected or Clipboard text: file (supported the opening of scripts from AkalPad directory), folder; url, ets...
///Предназначен для открытия автовыбором:
// • ссылок в браузере (из контекстного меню ссылок)
// • файлов (чаще всего скриптов) в AkelPad'е (работает при выделении текста либо по содержимому буфера; поддерживается открытие скриптов из ..\Scripts\Include\
// • папок (в Windoes Explorer'е), в т.ч. сетевых
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=5598#5598
// Version: 2.2 (2011.07.21)
//
// в меню ссылок: -"Открыть (автовыбор)" Call("Scripts::Main", 1, "OpenByLSC.js", `"%u"`)
// в диалоге скриптов для выделенного текста или того, что в буфере обмена, предлагается комбинация клавиш Alt+O
var slash = "\\";
//1. - проверяем в аргументах (L- Link); 2 - берём выделенный текст (S- Selected); 3 - берём содержимое буфера обмена (C - Clipboard)
var tObject = AkelPad.GetArgLine() || AkelPad.GetSelText() || AkelPad.GetClipboardText();
if (!tObject) WScript.Quit();
//Определяем: URL, Файл или Папка
if (tObject.indexOf("//") != -1)
{
openbyDefault(tObject); //URL
WScript.Quit();
}
var nPos = tObject.indexOf("AkelFiles");
if (nPos != -1 && nPos <= 4)
tObject = AkelPad.GetAkelDir() + correctSlashes(tObject); //кусок (не полный путь) сущности из дирректории AkelPad'а
nPos = tObject.lastIndexOf(".");
if (nPos != -1)
{
var nPosSlash = tObject.lastIndexOf(slash);
if (nPosSlash < nPos)
{ //Файл
if (nPosSlash <= 1) //имя скрипта из окна редактирования (и дирректории) AkelPad'а (со слэшами впереди)
tObject = tObject.replace(/\\/gm, "");
if (tObject.indexOf(slash) == -1)
tObject = AkelPad.GetAkelDir(6) /*ADTYPE_INCLUDE*/ + slash + tObject; //имя скрипта, например просто скопированное в буфер обмена (из ContextMenu-плагина или др.)
if (!openFile(tObject, false))
{
tObject = tObject.substr(tObject.lastIndexOf(slash) + 1); //выкусываем чисто имя скрипта
tObject = AkelPad.GetAkelDir(5) /*ADTYPE_SCRIPTS*/ + slash + tObject; //сначала искали в папке ..\Scripts\Include\, а теперь смотрим в ..\Scripts\
openFile(tObject, true);
}
WScript.Quit();
}
}
//Папка
openbyDefault(tObject);
function openbyDefault(tObject)
{
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Exec('rundll32.exe shell32, ShellExec_RunDLL "' + tObject + '"');
}
function openFile(tObject, bErrMsg)
{
tObject = correctSlashes(tObject);
var fso = new ActiveXObject("Scripting.FileSystemObject");
if (fso.FileExists(tObject) == true)
{
AkelPad.OpenFile(tObject);
return true;
}
else
{
if (bErrMsg) openbyDefault(tObject);
return false;
}
}
function correctSlashes(pPath)
{
return pPath.replace(/\\\\/g, slash);
} | Старое наименование скрипта OpenBySelected.js.
Т.к. из такого пути
| Code: | | D:\Docs\LN\ConnectToRDB\Notes and Domino Connectivity_(redp0115).pdf | ссылку сделать невозможно, то быстренько "наскриптил"
История изменений:
• 2009.10.31
Добавлено (подарок для програмеров): возможность из текущего скрипта быстро открывать подгружаемые скрипты!
Делаю так: на "ссылке", к примеру в строке:
| Code: | | eval(AkelPad.ReadFile(AkelPad.GetAkelDir() + "\\AkelFiles\\Plugs\\Scripts\\CommonFunctions.js")); | вызываю контекстное меню, жму "Select" - выделяется "ссылка" на скрипт, - потом жму комбинацию клавиш, вызывающую данный скрипт (у меня это Alt+O)!
• 2009.11.19
Изменено: теперь скрипт можно запускать из контекстного меню ссылок.
• 2011.07.19
Добавлено: поддержка поиска и открытия скриптов из папки ..\Scripts\Include\.
Last edited by VladSh on Thu Jul 21, 2011 2:36 pm; edited 13 times in total |
|
| Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 4684
|
Posted: Wed Oct 14, 2009 4:33 pm Post subject: |
|
|
ActiveColumnSwitch.js
| Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=5727#5727
// Version v1.1
//
//
//// Active column show/hide.
//
// How to use:
// Add button to Toolbar plugin:
//
// -"Active column" Call("Scripts::Main", 1, "ActiveColumnSwitch.js", `"%m" "%i"`) Icon(0)
// -"Local active column" Call("Scripts::Main", 1, "ActiveColumnSwitch.js", `"%m" "%i" -Local=true`)
//
/// Включить/выключить активный столбец.
//
// Как использовать:
// Добавляем кнопку в Toolbar плагин:
//
// -"Активный столбец" Call("Scripts::Main", 1, "ActiveColumnSwitch.js", `"%m" "%i"`) Icon(0)
// -"Активный столбец локально" Call("Scripts::Main", 1, "ActiveColumnSwitch.js", `"%m" "%i" -Local=true`)
//Arguments
var hToolbarHandle=0;
var nToolbarItemID=0;
if (WScript.Arguments.length >= 2)
{
hToolbarHandle=parseInt(WScript.Arguments(0));
nToolbarItemID=parseInt(WScript.Arguments(1));
}
var bLocal=AkelPad.GetArgValue("Local", false);
//Variables
var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit=AkelPad.GetEditWnd();
var dwOptions;
var bCheckButton=true;
if (hWndEdit)
{
if (bLocal)
{
dwOptions=AkelPad.SendMessage(hWndEdit, 3227 /*AEM_GETOPTIONS*/, 0, 0);
if (dwOptions & 0x400 /*AECO_ACTIVECOLUMN*/)
{
AkelPad.SendMessage(hWndEdit, 3228 /*AEM_SETOPTIONS*/, 4 /*AECOOP_XOR*/, 0x400 /*AECO_ACTIVECOLUMN*/);
bCheckButton=false;
}
else AkelPad.SendMessage(hWndEdit, 3228 /*AEM_SETOPTIONS*/, 2 /*AECOOP_OR*/, 0x400 /*AECO_ACTIVECOLUMN*/);
}
else
{
dwOptions=AkelPad.SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 69 /*FI_CARETOPTIONS*/, 0);
if (dwOptions & 0x2 /*CO_CARETVERTLINE*/)
{
dwOptions&=~0x2 /*CO_CARETVERTLINE*/;
bCheckButton=false;
}
else dwOptions|=0x2 /*CO_CARETVERTLINE*/;
AkelPad.SetFrameInfo(0, 17 /*FIS_CARETOPTIONS*/, dwOptions);
}
if (hToolbarHandle && nToolbarItemID)
AkelPad.SendMessage(hToolbarHandle, 1026 /*TB_CHECKBUTTON*/, nToolbarItemID, bCheckButton);
}
|
Last edited by Instructor on Wed Sep 12, 2012 5:55 pm; edited 4 times in total |
|
| Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 4684
|
Posted: Sat Oct 24, 2009 5:29 am Post subject: |
|
|
SelectRange.js
| Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=5808#5808
// Version v1.0
//
//
//// Select range of lines.
var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit=AkelPad.GetEditWnd();
var pInputText;
var lpRangeArray;
var nMinLine;
var nMaxLine;
var nMinLineIndex;
var nMaxLineIndex;
if (hMainWnd)
{
nMinLine=AkelPad.SendMessage(hWndEdit, 1078 /*EM_EXLINEFROMCHAR*/, 0, AkelPad.GetSelStart());
nMaxLine=AkelPad.SendMessage(hWndEdit, 1078 /*EM_EXLINEFROMCHAR*/, 0, AkelPad.GetSelEnd());
if (pInputText=AkelPad.InputBox(hMainWnd, WScript.ScriptName, "LineStart-LineEnd", nMinLine + "-" + nMaxLine))
{
if (lpRangeArray=pInputText.split("-"))
{
if (lpRangeArray.length == 1)
{
nMinLineIndex=AkelPad.SendMessage(hWndEdit, 187 /*EM_LINEINDEX*/, lpRangeArray[0], 0);
AkelPad.SetSel(nMinLineIndex, nMinLineIndex);
}
else if (lpRangeArray.length == 2)
{
nMinLineIndex=AkelPad.SendMessage(hWndEdit, 187 /*EM_LINEINDEX*/, lpRangeArray[0], 0);
nMaxLineIndex=AkelPad.SendMessage(hWndEdit, 187 /*EM_LINEINDEX*/, lpRangeArray[1], 0);
AkelPad.SetSel(nMinLineIndex, nMaxLineIndex);
}
}
}
} |
Last edited by Instructor on Fri Mar 25, 2011 5:29 pm; edited 3 times in total |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2523 Location: Киев, Русь
|
Posted: Mon Oct 26, 2009 2:54 pm Post subject: |
|
|
SaveAs.js
| Code: | ///"Save as ..." by analogy with the way it makes MS Word
///"Сохранить как..." по аналогии с тем, как это делает MS Word
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=5837#5837
// Version: 2.16 (2012.09.11)
//
// -"Сохранить как..." Call("Scripts::Main", 1, "SaveAs.js")
// -"Сохранить в js..." Call("Scripts::Main", 1, "SaveAs.js", `"js"`)
var pAllText = AkelPad.GetTextRange(0, -1); //берём весь текст
if (! AkelPad.Include("CommonFunctions.js")) WScript.Quit();
var pSelText = AkelPad.GetSelText(); //если есть выделенный текст, то значит из него, а не из первой строки, будем брать наименование будущего файла
var hWndEdit = AkelPad.GetEditWnd();
var pCurrentFile = AkelPad.GetEditFile(hWndEdit);
var pInitialFile = pSelText || pCurrentFile || pAllText; //начальный текст для возможного имени файла
//Определяем расширение будущего файла; значение в аргументах приоритетнее
var fileExt = AkelPad.GetArgLine() || GetFileExt(pCurrentFile);
if (!fileExt) {
if (AkelPad.Include("CoderFunctions.js"))
fileExt = GetSyntaxAliasExtension(hWndEdit);
}
if (fileExt == "bbc") fileExt = ""; //bbc важно только для подсветки, а для сохранения то, что указано в настроках проги; если нужно bbc, то его можно выбрать в диалоге
if (pInitialFile && (pInitialFile != pCurrentFile))
pInitialFile = getFileNameByFirstRow(pInitialFile); //получение возможного имени файла по его первой строке
pInitialFile = FileDialogDefault(false, pInitialFile, fileExt); //выдаём в диалоге - можно поменять
if (pInitialFile)
{
pInitialFile = CorrectFileNameFull(pInitialFile);
if (pInitialFile)
{
//Проверка, возможно новое расширение было добавлено к уже существующему
var dFile = SeparateFile(pInitialFile);
var tmpFileName = GetFileNameOnly(pInitialFile);
if (dFile.name.length != tmpFileName.length)
pInitialFile = dFile.path + tmpFileName + "." + dFile.ext; //то, что было введено в диалоге, приоритетнее!
//Проверка на существование файла с таким именем
fso = new ActiveXObject("Scripting.FileSystemObject");
if (fso.FileExists(pInitialFile) == true)
{
if (AkelPad.MessageBox(AkelPad.GetMainWnd(), "File '" + pInitialFile + "' already exist! Replace it?!", "AkelPad message...", 48+4) != 6) WScript.Quit();
//Закрытие текущего файла и его вкладки
AkelPad.Command(4324 /*IDM_WINDOW_FILECLOSE*/);
AkelPad.Command(4318 /*IDM_WINDOW_FRAMECLOSE*/);
}
if (pCurrentFile)
{
CreateByFile(hWndEdit);
AkelPad.ReplaceSel(pAllText);
}
//внешнее сохранение файла
AkelPad.SaveFile(0, pInitialFile);
}
}
//Берём первую строку, как это делает MS Word
function getFileNameByFirstRow(pInitialFile)
{
var pTmpFile = pInitialFile.replace(new RegExp("^[" + " \t\r" + "]+", "gm"), "");
pTmpFile = pTmpFile.split(/\r/)[0]
return CorrectFileName(pTmpFile);
} | Старое (ну очень старое) наименование скрипта SaveFileDialog.js.
This script used CommonFunctions.js.
Примеры использования:
| Code: | | Call("Scripts::Main", 1, "SaveAs.js", `"js"`) | если расширение задано в диалоге, то оно будет самым приоритетным при определении расширения сохраняемого файла, т.е. в данном случае js.
| Code: | | Call("Scripts::Main", 1, "SaveAs.js") | если расширение не задано в аргументах, то будет производиться определение и подстановка в таком порядке:
• по расширению текущего файла;
если файл новый (расширения у него нет):
• по синтаксической теме, применённой к данному файлу;
• из настроек программы;
• если ничего не определено, то подставится расширение "по умолчанию" для файлов, указанное в скрипте (txt).
Расширение можно изменить в диалоге.
Посадил этот скрипт на пиктограмму "Save As..." тулбара, а по Ctrl+S и контекстных меню оставил стандартную команду 
Last edited by VladSh on Thu Dec 20, 2012 2:01 pm; edited 32 times in total |
|
| Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 4684
|
Posted: Mon Nov 02, 2009 1:11 pm Post subject: |
|
|
ReplaceNoUndo.js
| Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=5891#5891
// Version v1.0
//
//
//// Turn off undo while replace dialog is open.
var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit=AkelPad.GetEditWnd();
var nUndoLimit;
var lpType;
if (hMainWnd)
{
if (lpType=AkelPad.MemAlloc(4 /*sizeof(int)*/))
{
nUndoLimit=AkelPad.SendMessage(hWndEdit, 3084 /*AEM_GETUNDOLIMIT*/, 0, 0);
AkelPad.SendMessage(hWndEdit, 3079 /*AEM_EMPTYUNDOBUFFER*/, 0, 0);
AkelPad.SendMessage(hWndEdit, 3085 /*AEM_SETUNDOLIMIT*/, 0, 0);
AkelPad.Command(4161 /*IDM_EDIT_REPLACE*/);
for (;;)
{
//Wait for closing replace dialog
AkelPad.SendMessage(hMainWnd, 1275 /*AKD_GETMODELESS*/, 0, lpType);
if (AkelPad.MemRead(lpType, 3 /*DT_DWORD*/) == 4 /*MLT_REPLACE*/)
WScript.Sleep(100);
else
break;
}
AkelPad.SendMessage(hWndEdit, 3085 /*AEM_SETUNDOLIMIT*/, nUndoLimit, 0);
AkelPad.MemFree(lpType);
}
} |
Last edited by Instructor on Fri Mar 25, 2011 5:42 pm; edited 3 times in total |
|
| Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 4684
|
Posted: Thu Nov 19, 2009 1:07 pm Post subject: |
|
|
SelPoint.js
| Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=6064#6064
// Version v1.0
//
//
//// Selection point. First call sets selection start point, second call make selection.
var oSet=AkelPad.ScriptSettings();
var nRegSelStart=-1;
var nCurSelStart=AkelPad.GetSelStart();
if (oSet.Begin(WScript.ScriptBaseName, 0x1 /*POB_READ*/))
{
nRegSelStart=oSet.Read("StartPos", 1 /*PO_DWORD*/);
oSet.End();
}
if (oSet.Begin(WScript.ScriptBaseName, 0x2 /*POB_SAVE*/))
{
if (nRegSelStart != -1)
{
if (nRegSelStart != nCurSelStart)
{
AkelPad.SetSel(nRegSelStart, nCurSelStart);
oSet.Write("StartPos", 1 /*PO_DWORD*/, -1);
}
}
else oSet.Write("StartPos", 1 /*PO_DWORD*/, nCurSelStart);
oSet.End();
} |
Last edited by Instructor on Fri Mar 25, 2011 5:49 pm; edited 4 times in total |
|
| Back to top |
|
 |
oyaebu
Joined: 11 Oct 2009 Posts: 15
|
Posted: Mon Jan 18, 2010 3:28 pm Post subject: |
|
|
Дошли-таки руки до старой задумки.
PassGen.js | Code: | // description = Password Generator
// copypizded from http://javascript.internet.com/passwords/password-generator.html
//var AkelPad=new ActiveXObject("AkelPad.document");
//AkelPad.ReplaceSel('Test');
function getRandomNum(lbound, ubound) {
return (Math.floor(Math.random() * (ubound - lbound)) + lbound);
}
function getRandomChar(number, lower, upper, other, extra) {
var numberChars = "0123456789";
var lowerChars = "abcdefghijklmnopqrstuvwxyz";
var upperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var otherChars = "`~!@#$%^&*()-_=+[{]}\\|;:'\",<.>/? ";
var charSet = extra;
if (number == true)
charSet += numberChars;
if (lower == true)
charSet += lowerChars;
if (upper == true)
charSet += upperChars;
if (other == true)
charSet += otherChars;
return charSet.charAt(getRandomNum(0, charSet.length));
}
function getPassword(length, extraChars, firstNumber, firstLower, firstUpper, firstOther,
latterNumber, latterLower, latterUpper, latterOther) {
var rc = "";
if (length > 0)
rc = rc + getRandomChar(firstNumber, firstLower, firstUpper, firstOther, extraChars);
for (var idx = 1; idx < length; ++idx) {
rc = rc + getRandomChar(latterNumber, latterLower, latterUpper, latterOther, extraChars);
}
return rc;
}
function getRandomInt(min, max)
{
return Math.floor(Math.random() * (max - min + 1)) + min;
}
var pLength = getRandomInt(12,19);
var extraChars = '';
var firstNumber = true;
var firstLower = true;
var firstUpper = true;
var firstOther = false;
var latterNumber = true;
var latterLower = true;
var latterUpper = true;
var latterOther = false;
AkelPad.ReplaceSel(getPassword(pLength, extraChars, firstNumber, firstLower,
firstUpper, firstOther, latterNumber, latterLower,
latterUpper, latterOther)); |
Осталось узнать, как добавить кнопку, вызывающую это дело, на тулбар. |
|
| Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 4684
|
Posted: Fri Feb 12, 2010 5:17 pm Post subject: |
|
|
DuplicateLines.js
| Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=6504#6504
// Version v1.1
//
//
//// Duplicate selected lines.
var hWndEdit=AkelPad.GetEditWnd();
var pSelText;
var pLinesArray;
var pResultArray=new Array();
var nLinesIndex;
var nResultIndex=0;
if (hWndEdit)
{
if (AkelPad.GetSelStart() == AkelPad.GetSelEnd())
SelectCaretLine(hWndEdit);
if (pSelText=AkelPad.GetSelText())
{
if (pLinesArray=pSelText.split("\r"))
{
for (nLinesIndex=0; nLinesIndex < pLinesArray.length; ++nLinesIndex)
{
pResultArray[nResultIndex++]=pLinesArray[nLinesIndex];
pResultArray[nResultIndex++]=pLinesArray[nLinesIndex];
}
pSelText=pResultArray.join("\r");
}
AkelPad.ReplaceSel(pSelText, true);
}
}
function SelectCaretLine(hWnd)
{
var nCaretOffset=AkelPad.GetSelStart();
var nCaretLine;
var nLineStart;
var nLineEnd;
nCaretLine=AkelPad.SendMessage(hWnd, 1078 /*EM_EXLINEFROMCHAR*/, 0, nCaretOffset);
nLineStart=AkelPad.SendMessage(hWnd, 187 /*EM_LINEINDEX*/, nCaretLine, 0);
nLineEnd=nLineStart + AkelPad.SendMessage(hWnd, 193 /*EM_LINELENGTH*/, nCaretOffset, 0);
AkelPad.SetSel(nLineStart, nLineEnd);
}
|
Last edited by Instructor on Mon Oct 01, 2012 11:56 am; edited 4 times in total |
|
| Back to top |
|
 |
levilevi
Joined: 16 Nov 2009 Posts: 5
|
Posted: Wed Mar 31, 2010 4:12 pm Post subject: Create a new text file in current editing file directory |
|
|
My first script, base on some other scripts:D
createfile.js
| Code: | /// Create a new text file in current editing file directory
var AkelPad=new ActiveXObject("AkelPad.document");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var hMainWnd=AkelPad.GetMainWnd();
var szFile=AkelPad.GetEditFile(0);
var szDir=GetParent(szFile);
var pName="";
if (hMainWnd)
{
pName=AkelPad.InputBox(hMainWnd, "Create a New Text", "Give it a name", ".txt");
if (pName!=".txt" && pName!=0)
{
var pNewFileFullName = szDir + '\\' + pName
if (!fso.FileExists(pNewFileFullName))
var NewFile = fso.CreateTextFile(pNewFileFullName)
AkelPad.SendMessage(hMainWnd, 273 /*WM_COMMAND*/, 4422 /*IDM_NONMENU_FILECLOSE*/, 0);
AkelPad.OpenFile(pNewFileFullName, 0, 0, 0);
AkelPad.Call("Explorer::Main", 2); //Refresh Explorer plugin's directory
}
}
//Functions
function GetParent(file)
{
var i;
for (i=file.length - 1; i >= 0; --i)
{
if (file.charAt(i) == '\\')
return file.substr(0, i);
}
} |
|
|
| Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 4684
|
Posted: Sat Apr 03, 2010 4:20 am Post subject: |
|
|
TabsToSpaces.js
| Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=7081#7081
// Version v1.2
//
//
//// Convert tabulation to space.
var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit=AkelPad.GetEditWnd();
var bColumnSel;
var nTabStop;
var nInitColumn=0;
var nColumn;
var nSpaceCount;
var pSelText;
var pResult;
var pSpaces;
var lpSel;
var a;
var b;
if (hMainWnd)
{
if (lpSel=AkelPad.MemAlloc(_X64?56:28 /*sizeof(AESELECTION)*/))
{
if (AkelPad.SendMessage(hWndEdit, 3125 /*AEM_GETSEL*/, 0, lpSel))
nInitColumn=AkelPad.SendMessage(hWndEdit, 3147 /*AEM_INDEXTOCOLUMN*/, 0, lpSel /*AESELECTION.crSel.ciMin*/);
else
AkelPad.SetSel(0, -1);
bColumnSel=AkelPad.SendMessage(hWndEdit, 3127 /*AEM_GETCOLUMNSEL*/, 0, 0);
nTabStop=AkelPad.SendMessage(hWndEdit, 3239 /*AEM_GETTABSTOP*/, 0, 0);
AkelPad.MemFree(lpSel);
}
else WScript.Quit();
//Scan selection
pSelText=AkelPad.GetSelText();
pResult="";
for (a=0, b=0, nColumn=nInitColumn; b < pSelText.length; ++b)
{
if (pSelText.charAt(b) == '\t')
{
nSpaceCount=nTabStop - nColumn % nTabStop;
nColumn+=nSpaceCount;
for (pSpaces=""; nSpaceCount; --nSpaceCount)
pSpaces=pSpaces + " ";
pResult+=pSelText.substr(a, b - a) + pSpaces;
a=b + 1;
}
else if (pSelText.charAt(b) == '\r')
nColumn=bColumnSel?nInitColumn:0;
else
++nColumn;
}
pResult+=pSelText.substr(a, b - a);
//Replace selection
AkelPad.ReplaceSel(pResult, true);
}
|
Last edited by Instructor on Sat Feb 26, 2011 7:04 pm; edited 5 times in total |
|
| Back to top |
|
 |
cnnnc
Joined: 12 Jan 2008 Posts: 115 Location: Shantou, China
|
Posted: Sat Apr 17, 2010 1:18 am Post subject: NumberCount.js by cnnnc |
|
|
NumberCount.js
| Code: | /// NumberCount.js (2012-12-15) by cnnnc.
// Insert text or/and a sequence of Num/RandomNum to Begin or/and End of every line.
// EscSeq is allowed in "String":
// \\ - backslash
// \r - line feed
// \n - new line
// \t - tabulation
// \N - Decimal number sequence
// \H - Hexadecimal number sequence
// $1 - original line
//
// If Num is not checked, \N be treated as is.
// If there is more \N, more Step will be done in one line. When "Lazy mode" CheckBox is checked, all \N in one line will be same.
// Float Number is allowed in "First" and "Step/End".
// Negative number is allowed in "First","Step/End" and "WIDTH".
//
// Num can be from "First" to END(According to the lines of Selection) Up/Down by "Step".
// RandomNum is between "First" and "End".
// Num/RandomNum can be formatted in fixed WIDTH, and PaddingChar default is at Begin of Num/RandomNum.
// if WIDTH<0, PaddingChar be Added to the end of Num/RandomNum.
//
// Support the localization language files.
//
// 2 way of run this script:
// 1.) GUI without arguments, arguments saved to ini after executed.
// This script show a messagebox to tell you how long be spent on your large text when more than 1.4 s.
// 2.) No GUI but with arguments, and never read and write the Arguments from/to ini.
// Example:
// -"LineNumber" Call("Scripts::Main", 1, "NumberCount.js", `-Str="\N|$1" -Num=1 -Rand=0 -Lazy=0 -First=1 -Step=1 -Width=4 -Pad=" "`)
try
{
var hMainWnd=AkelPad.GetMainWnd();
}
catch (oError)
{
WScript.Quit();
}
var oSys =AkelPad.SystemFunction();
var pScriptName =WScript.ScriptName;
var sStr =AkelPad.GetArgValue("Str" , "$1");
var bNum =AkelPad.GetArgValue("Num" , 0);
var bRand =AkelPad.GetArgValue("Rand" , 0);
var bLazy =AkelPad.GetArgValue("Lazy" , 0);
var nFirst=AkelPad.GetArgValue("First", 1);
var nStep =AkelPad.GetArgValue("Step" , 1);
var nWidth=AkelPad.GetArgValue("Width", 1);
var sPad =AkelPad.GetArgValue("Pad" , "0");
var bHex=false;
// Without GUI
if (AkelPad.GetArgLine(0))
{
if (isNaN(nFirst)){nFirst=1;}
if (isNaN(nStep)){nStep=1;}
if (isNaN(nWidth)){nWidth=1;}
if (bRand)
{
bNum=true;
}
NumberCount();
WScript.Quit();
}
// With GUI
var hInstanceDLL=AkelPad.GetInstanceDll();
var pClassName ="AkelPad::Scripts::"+pScriptName+"::"+oSys.Call("kernel32::GetCurrentProcessId");
var hWndDialog;
var lpBuffer;
var nStrings=10;
var lpStrings=[];
var oSet=AkelPad.ScriptSettings();
var nBegSelIn = 0;
var nEndSelIn = 0;
var nMaxLen = 1024;
if (oSet.Begin(WScript.ScriptBaseName, 0x1 /*POB_READ*/))
{
//Read settings
bNum =oSet.Read("Num" , 1 /*PO_DWORD*/ );
bRand =oSet.Read("Rand" , 1 /*PO_DWORD*/ );
bLazy =oSet.Read("Lazy" , 1 /*PO_DWORD*/ );
nFirst=oSet.Read("First", 3 /*PO_STRING*/, 1);
nStep =oSet.Read("Step" , 3 /*PO_STRING*/, 1);
nWidth=oSet.Read("Width", 1 /*PO_DWORD*/ , 1);
sPad =oSet.Read("Pad" , 3 /*PO_STRING*/);
//String
for (i=0; i<nStrings; i+=1)
{
lpStrings[i]=oSet.Read("String"+i, 3 /*PO_STRING*/);
if (typeof lpStrings[i]=="undefined"){break;}
}
if (typeof lpStrings[0]!="undefined"){sStr=lpStrings[0];}
oSet.End();
}
if (typeof lpStrings[0]=="undefined"){lpStrings[0]=sStr;}
var sTxtStr ="String";
var sTxtNum ="Number";
var sTxtRand ="Random";
var sTxtLazy ="Lazy mode";
var sTxtFirst ="First";
var sTxtStep ="Step";
var sTxtEnd ="End";
var sTxtWidth ="Width";
var sTxtPad ="Padding char";
var sTxtSeconds ="Seconds";
var sTxtOK ="OK";
var sTxtCancel ="Cancel";
var sTxtBackSlace ="backslash";
var sTxtReturn ="return";
var sTxtLineFeed ="line feed";
var sTxtTabulation ="tabulation";
var sTxtNumberSequence="number sequence";
var sTxtHexNumSequence="Hex number sequence";
var sTxtOriginalLine ="original line";
var sTxtEmpty ="Empty";
var fso =new ActiveXObject("Scripting.FileSystemObject");
var pLangFile=AkelPad.GetAkelDir(5)+ "\\Langs\\" + pScriptName.substring(0, pScriptName.lastIndexOf("."))+"_"+AkelPad.GetLangId().toString()+".lng";
var nError;
if (fso.FileExists(pLangFile))
{
try
{
AkelPad.Include("..\\Langs\\"+pScriptName.substring(0, pScriptName.lastIndexOf("."))+"_"+AkelPad.GetLangId().toString()+".lng");
}
catch (nError)
{
}
}
var aWnd =[];
var IDC_CBB_STR =1000;
var IDC_STATIC_STR =1001;
var IDC_SYNTEX =1002;
var IDC_NUM =1003;
var IDC_RAND =1004;
var IDC_LAZY =1005;
var IDC_STATIC_FIRST=1006;
var IDC_EDT_FIRST =1007;
var IDC_STATIC_STEP =1008;
var IDC_EDT_STEP =1009;
var IDC_STATIC_WIDTH=1010;
var IDC_EDT_WIDTH =1011;
var IDC_STATIC_PAD =1012;
var IDC_EDT_PAD =1013;
var IDC_OK =1014;
var IDC_CANCEL =1015;
var WNDTYPE =0;
var WND =1;
var WNDEXSTY=2;
var WNDSTY =3;
var WNDX =4;
var WNDY =5;
var WNDW =6;
var WNDH =7;
var WNDTXT =8;
//0x50000000 - WS_VISIBLE|WS_CHILD
//0x50010000 - WS_VISIBLE|WS_CHILD|WS_TABSTOP
//0x50010003 - WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTOCHECKBOX
//0x50210042 - WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_VSCROLL|CBS_DROPDOWN|CBS_AUTOHSCROLL
//0x58010000 - WS_VISIBLE|WS_CHILD|WS_DISABLED|WS_TABSTOP|BS_PUSHBUTTON
//0x58010003 - WS_VISIBLE|WS_CHILD|WS_DISABLED|WS_TABSTOP|BS_AUTOCHECKBOX
//0x58010080 - WS_VISIBLE|WS_CHILD|WS_DISABLED|WS_TABSTOP|ES_AUTOHSCROLL
//Windows WNDTYPE, WND, WNDEXSTY, WNDSTY,WNDX,WNDY,WNDW,WNDH, WNDTXT
aWnd[IDC_CBB_STR ]=["COMBOBOX", 0, 0, 0x50210042, 95, 5, 228, 160, sStr];
aWnd[IDC_STATIC_STR ]=["STATIC", 0, 0, 0x50000000, 5, 8, 85, 20, sTxtStr];
aWnd[IDC_SYNTEX ]=["BUTTON", 0, 0, 0x50010000, 303, 30, 20, 20, " > "];
aWnd[IDC_NUM ]=["BUTTON", 0, 0, 0x50010003, 5, 33, 85, 20, sTxtNum];
aWnd[IDC_RAND ]=["BUTTON", 0, 0, 0x58010003, 95, 33, 85, 20, sTxtRand];
aWnd[IDC_LAZY ]=["BUTTON", 0, 0, 0x58010003, 185, 33, 85, 20, sTxtLazy];
aWnd[IDC_STATIC_FIRST]=["STATIC", 0, 0, 0x50000000, 5, 58, 85, 20, sTxtFirst];
aWnd[IDC_EDT_FIRST ]=[ "EDIT", 0, 0x200, 0x58010080, 95, 55, 100, 20, nFirst];
aWnd[IDC_STATIC_STEP ]=["STATIC", 0, 0, 0x50000000, 5, 83, 85, 20, sTxtStep];
aWnd[IDC_EDT_STEP ]=[ "EDIT", 0, 0x200, 0x58010080, 95, 80, 100, 20, nStep];
aWnd[IDC_STATIC_WIDTH]=["STATIC", 0, 0, 0x50000000, 5, 108, 85, 20, sTxtWidth];
aWnd[IDC_EDT_WIDTH ]=[ "EDIT", 0, 0x200, 0x58010080, 95, 105, 100, 20,nWidth.toString()];
aWnd[IDC_STATIC_PAD ]=["STATIC", 0, 0, 0x50000000, 5, 133, 85, 20, sTxtPad];
aWnd[IDC_EDT_PAD ]=[ "EDIT", 0, 0x200, 0x58010080, 95, 130, 50, 20, sPad];
aWnd[IDC_OK ]=["BUTTON", 0, 0, 0x58010000, 263, 105, 60, 20, sTxtOK];
aWnd[IDC_CANCEL ]=["BUTTON", 0, 0, 0x50010000, 263, 130, 60, 20, sTxtCancel];
if (AkelPad.WindowRegisterClass(pClassName))
{
lpBuffer=AkelPad.MemAlloc(nMaxLen * _TSIZE);
if (lpBuffer)
{
//Create dialog
hWndDialog=oSys.Call("user32::CreateWindowEx"+_TCHAR,
0, //dwExStyle
pClassName, //lpClassName
0, //lpWindowName
0x90CA0000, //WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX
0, //x
0, //y
333, //nWidth
180, //nHeight
hMainWnd, //hWndParent
0, //ID
hInstanceDLL, //hInstance
DialogCallback); //Script function callback. To use it class must be registered by WindowRegisterClass.
if (hWndDialog)
{
//Allow other scripts running
AkelPad.ScriptNoMutex();
//Message loop
AkelPad.WindowGetMessage();
}
AkelPad.MemFree(lpBuffer);
}
AkelPad.WindowUnregisterClass(pClassName);
}
else
{
hWndDialog=oSys.Call("user32::FindWindowEx"+_TCHAR, 0, 0, pClassName, 0);
if (hWndDialog)
{
if (oSys.Call("user32::IsIconic", hWndDialog)){oSys.Call("user32::ShowWindow", hWndDialog, 9 /*SW_RESTORE*/);}
AkelPad.SendMessage(hWndDialog, 7 /*WM_SETFOCUS*/, 0, 0);
}
}
function DialogCallback(hWnd, uMsg, wParam)
{
if (uMsg==1) //WM_CREATE
{
var hGuiFont=oSys.Call("gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/);
//Dialog caption
oSys.Call("user32::SetWindowText"+_TCHAR, hWnd, pScriptName);
//Create window
for (i=1000; i<aWnd.length; i+=1)
{
aWnd[i][WND]=oSys.Call("user32::CreateWindowEx"+_TCHAR,
aWnd[i][WNDEXSTY], //dwExStyle
aWnd[i][WNDTYPE], //lpClassName
0, //lpWindowName
aWnd[i][WNDSTY], //dwStyle
aWnd[i][WNDX], //x
aWnd[i][WNDY], //y
aWnd[i][WNDW], //nWidth
aWnd[i][WNDH], //nHeight
hWnd, //hWndParent
i, //ID
hInstanceDLL, //hInstance
0); //lpParam
//Set font and text
SetWindowFontAndText(aWnd[i][WND], hGuiFont, aWnd[i][WNDTXT]);
}
//Fill combobox
for (i=0; i<nStrings && typeof lpStrings[i]!="undefined"; i+=1)
{
AkelPad.MemCopy(lpBuffer, lpStrings[i], _TSTR);
AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x143 /*CB_ADDSTRING*/, 0, lpBuffer);
}
AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x14E /*CB_SETCURSEL*/, 0, 0);
//Checks
if (bNum)
{
AkelPad.SendMessage(aWnd[IDC_NUM][WND], 241 /*BM_SETCHECK*/, 1 /*BST_CHECKED*/, 0);
EnableNumWin(bNum);
}
if (bRand)
{
AkelPad.SendMessage(aWnd[IDC_RAND][WND], 241 /*BM_SETCHECK*/, 1 /*BST_CHECKED*/, 0);
oSys.Call("user32::SetWindowText"+_TCHAR, aWnd[IDC_STATIC_STEP][WND], sTxtEnd);
}
if (bLazy)
{
AkelPad.SendMessage(aWnd[IDC_LAZY][WND], 241 /*BM_SETCHECK*/, 1 /*BST_CHECKED*/, 0);
}
//Center dialog
CenterWindow(hMainWnd, hWnd);
}
else if (uMsg==7) //WM_SETFOCUS
{
oSys.Call("user32::SetFocus", aWnd[IDC_CBB_STR][WND]);
}
else if (uMsg==256) //WM_KEYDOWN
{
if (wParam==27) //VK_ESCAPE
{
//Escape key pushes Cancel button
oSys.Call("user32::PostMessage"+_TCHAR, hWnd, 273 /*WM_COMMAND*/, IDC_CANCEL, 0);
}
else if (wParam==13) //VK_RETURN
{
if (oSys.Call("user32::IsWindowEnabled", aWnd[IDC_OK][WND]))
{
//Return key pushes OK button
oSys.Call("user32::PostMessage"+_TCHAR, hWnd, 273 /*WM_COMMAND*/, IDC_OK, 0);
}
}
}
else if (uMsg==273) //WM_COMMAND
{
nLowParam = LoWord(wParam);
nHiwParam = HiWord(wParam);
bCloseCB1 = 1;
if (nLowParam==IDC_NUM ||
nLowParam==IDC_CBB_STR ||
nLowParam==IDC_EDT_FIRST ||
nLowParam==IDC_EDT_STEP ||
nLowParam==IDC_EDT_WIDTH)
{
if (nLowParam==IDC_NUM)
{
bNum=AkelPad.SendMessage(aWnd[IDC_NUM][WND], 240 /*BM_GETCHECK*/, 0, 0);
EnableNumWin(bNum);
}
else if (nLowParam == IDC_CBB_STR)
{
if (nHiwParam == 3 /*CBN_SETFOCUS*/)
{
SetWindowFontAndText(aWnd[IDC_CBB_STR][WND], hGuiFont, sStr);
AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x0142 /*CB_SETEDITSEL*/, 0, MkLong(nBegSelIn, nEndSelIn));
}
else if (nHiwParam == 10 /*CBN_SELENDCANCEL*/)
{
nBegSelIn = LoWord(AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x140 /*CB_GETEDITSEL*/, 0, 0));
nEndSelIn = HiWord(AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x140 /*CB_GETEDITSEL*/, 0, 0));
}
else if (nHiwParam == 5 /*CBN_EDITCHANGE*/)
{
nBegSelIn = LoWord(AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x140 /*CB_GETEDITSEL*/, 0, 0));
nEndSelIn = HiWord(AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x140 /*CB_GETEDITSEL*/, 0, 0));
oSys.Call("user32::GetWindowText" + _TCHAR, aWnd[IDC_CBB_STR][WND], lpBuffer, nMaxLen);
sStr = AkelPad.MemRead(lpBuffer, _TSTR);
}
else if (nHiwParam == 1 /*CBN_SELCHANGE*/)
{
nNumStrIn = AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x147 /*CB_GETCURSEL*/, 0, 0);
AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x148 /*CB_GETLBTEXT*/, nNumStrIn, lpBuffer);
pStrIn = AkelPad.MemRead(lpBuffer, _TSTR);
}
else if (nHiwParam == 7 /*CBN_DROPDOWN*/)
{
bCloseCB2 = 0;
}
else if (nHiwParam == 8 /*CBN_CLOSEUP*/)
{
bCloseCB2 = 1;
}
}
if (bNum)
{
if (DisableBtnOK(aWnd[IDC_EDT_FIRST][WND])){return;}
if (DisableBtnOK(aWnd[IDC_EDT_STEP][WND])){return;}
if (DisableBtnOK(aWnd[IDC_EDT_WIDTH][WND])){return;}
sStr=GetWindowText(aWnd[IDC_CBB_STR][WND]);
if (sStr.search(/\\N/g) == -1 && sStr.search(/\\H/g) == -1){return;}
}
oSys.Call("user32::EnableWindow", aWnd[IDC_OK][WND], (oSys.Call("user32::GetWindowTextLength"+_TCHAR, aWnd[IDC_CBB_STR][WND])) ? true : false);
}
else if (nLowParam==IDC_RAND)
{
bRand=AkelPad.SendMessage(aWnd[IDC_RAND][WND], 240 /*BM_GETCHECK*/, 0, 0);
oSys.Call("user32::SetWindowText"+_TCHAR, aWnd[IDC_STATIC_STEP][WND], (bRand) ? sTxtEnd : sTxtStep);
}
else if (nLowParam==IDC_LAZY)
{
bLazy=AkelPad.SendMessage(aWnd[IDC_LAZY][WND], 240 /*BM_GETCHECK*/, 0, 0);
}
else if (nLowParam==IDC_SYNTEX)
{
if (!AkelPad.Include("ShowMenu.js"))
{
AkelPad.MessageBox(hWnd, sTxtIncShowMenuJs, pScriptName, 0 /*MB_OK*/);
}
else
{
//Variables
var lpItems;
var nItem;
lpItems=[["$1\t"+sTxtOriginalLine, MF_NORMAL, 101],
["\\N\t"+sTxtNumberSequence, MF_NORMAL, 102],
["\\H\t"+sTxtHexNumSequence, MF_NORMAL, 103],
["", MF_SEPARATOR],
["\\\\\t"+sTxtBackSlace, MF_NORMAL, 104],
["\\r\t"+sTxtReturn, MF_NORMAL, 105],
["\\n\t"+sTxtLineFeed, MF_NORMAL, 106],
["\\t\t"+sTxtTabulation, MF_NORMAL, 107],
["", MF_SEPARATOR],
[sTxtEmpty, (oSys.Call("user32::GetWindowTextLength"+_TCHAR, aWnd[IDC_CBB_STR][WND])) ? MF_NORMAL|MF_LAST : MF_NORMAL|MF_GRAYED|MF_LAST, 108]];
nItem=ShowMenu(lpItems, POS_CURSOR, POS_CURSOR);
if (nItem == -1)
{
}
else
{
nItem=lpItems[nItem][2];
switch (nItem)
{
case 101 : FunToIn("$1");
break;
case 102 : FunToIn("\\N");
break;
case 103 : FunToIn("\\H");
break;
case 104 : FunToIn("\\\\");
break;
case 105 : FunToIn("\\r");
break;
case 106 : FunToIn("\\n");
break;
case 107 : FunToIn("\\t");
break;
case 108 :
sStr = "";
oSys.Call("user32::SetFocus", aWnd[IDC_CBB_STR][WND]);
break;
}
}
}
}
else if (nLowParam==IDC_OK)
{
//String
sStr=GetWindowText(aWnd[IDC_CBB_STR][WND]);
if (nStrings)
{
for (i=0; i<nStrings && typeof lpStrings[i]!="undefined"; i+=1)
{
if (lpStrings[i]==sStr)
{
AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x144 /*CB_DELETESTRING*/, i, 0);
DeleteFromArray(lpStrings, i, 1);
}
}
InsertInArray(lpStrings, sStr, 0);
if (lpStrings.length>nStrings){DeleteFromArray(lpStrings, -1, 1);}
AkelPad.MemCopy(lpBuffer, sStr, _TSTR);
AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x14A /*CB_INSERTSTRING*/, 0, lpBuffer);
AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x14E /*CB_SETCURSEL*/, 0, 0);
}
if (bNum)
{
sPad =GetWindowText(aWnd[IDC_EDT_PAD][WND]);
nFirst=GetWindowText(aWnd[IDC_EDT_FIRST][WND]);
nStep =GetWindowText(aWnd[IDC_EDT_STEP][WND]);
nFirstCur=GetWindowText(aWnd[IDC_EDT_FIRST][WND],"n");
nStepCur =GetWindowText(aWnd[IDC_EDT_STEP][WND] ,"n");
nWidth=parseInt(GetWindowText(aWnd[IDC_EDT_WIDTH][WND],"n"),10);
}
var d=new Date();
var t=d.getTime();
NumberCount();
var d=new Date();
t=(d.getTime()-t)/1000;
if (Math.round(t)>1){AkelPad.MessageBox(hWndDialog, " "+t.toFixed(3)+" "+sTxtSeconds, pScriptName, 0 /*MB_OK*/);}
}
else if (nLowParam==IDC_CANCEL)
{
oSys.Call("user32::PostMessage"+_TCHAR, hWnd, 16 /*WM_CLOSE*/, 0, 0);
}
}
else if (uMsg==16) //WM_CLOSE
{
if (oSet.Begin(WScript.ScriptBaseName, 0x2 /*POB_SAVE*/))
{
//Save settings
oSet.Write("Num" , 1 /*PO_DWORD*/ , bNum);
oSet.Write("Rand" , 1 /*PO_DWORD*/ , bRand);
oSet.Write("Lazy" , 1 /*PO_DWORD*/ , bLazy);
oSet.Write("First", 3 /*PO_STRING*/, nFirst);
oSet.Write("Step" , 3 /*PO_STRING*/, nStep);
oSet.Write("Width", 1 /*PO_DWORD*/ , nWidth);
oSet.Write("Pad" , 3 /*PO_STRING*/, sPad);
//Save string history
for (i=0; i<nStrings && typeof lpStrings[i]!="undefined"; i+=1)
{
oSet.Write("String"+i, 3 /*PO_STRING*/, lpStrings[i]);
}
oSet.End();
}
//Destroy dialog
oSys.Call("user32::DestroyWindow", hWnd);
}
else if (uMsg==2) //WM_DESTROY
{
//Exit message loop
oSys.Call("user32::PostQuitMessage", 0);
}
}
function GetWindowText(hWnd,cType)
{
oSys.Call("user32::GetWindowText"+_TCHAR, hWnd, lpBuffer, nMaxLen);
var pStrExp=AkelPad.MemRead(lpBuffer, _TSTR);
if (cType=="n")
{
if (pStrExp==""){pStrExp="1";}
return Number(pStrExp);
}
else {return pStrExp;}
}
function Pad(nCurrentNum,m)
{
var pNumText;
var nLen;
var cPadding="";
if (bHex)
{
pNumText=nCurrentNum.toString(16);
}
else
{
pNumText=nCurrentNum.toFixed(m);
}
if (nCurrentNum<0){pNumText="-"+pNumText.substr(1);}
nLen=Math.abs(nWidth)-pNumText.length+1;
while ((nLen-=1)>0)
{
cPadding+=sPad;
}
if (nWidth<0){pNumText += cPadding;}
else {pNumText=cPadding+pNumText;}
return pNumText;
}
function EnableNumWin(bNum)
{
oSys.Call("user32::EnableWindow", aWnd[IDC_RAND][WND] , bNum);
oSys.Call("user32::EnableWindow", aWnd[IDC_LAZY][WND] , bNum);
oSys.Call("user32::EnableWindow", aWnd[IDC_EDT_FIRST][WND], bNum);
oSys.Call("user32::EnableWindow", aWnd[IDC_EDT_STEP][WND] , bNum);
oSys.Call("user32::EnableWindow", aWnd[IDC_EDT_WIDTH][WND], bNum);
oSys.Call("user32::EnableWindow", aWnd[IDC_EDT_PAD][WND] , bNum);
}
function NumberCount()
{
//Variables
var hWndEdit=AkelPad.GetEditWnd();
var nSelState=0;
var SELECTALL=0;
var NORMALSEL=1;
var COLUMNSEL=2;
var pSelText;
//Esc-sequences
var sEscStr=sStr.replace(/\\\\/g, "\0");
sEscStr=sEscStr.replace(/\\r\\n|\\r|\\n/g, "\1");
sEscStr=sEscStr.replace(/\\t/g, "\t");
sEscStr=sEscStr.replace(/\0/g, "\\");
if (bNum && sEscStr.indexOf("\\H") != -1)
{
sEscStr=sEscStr.replace(/\\H/g, "\0");
bHex=true;
}
if (bNum){sEscStr=sEscStr.replace(/\\N/g, "\0");}
if (AkelPad.IsAkelEdit()){AkelPad.SendMessage(hWndEdit, 3185 /*AEM_LOCKSCROLL*/, 3 /*SB_BOTH*/, true);}
SetRedraw(hWndEdit, false);
if (AkelPad.SendMessage(hWndEdit, 3125 /*AEM_GETSEL*/, 0, 0))
{
if (AkelPad.SendMessage(hWndEdit, 3127 /*AEM_GETCOLUMNSEL*/, 0, 0))
{
nSelState=COLUMNSEL;
pSelText =AkelPad.GetSelText(2);
}
else
{
nSelState =NORMALSEL;
var nSelStart=AkelPad.GetSelStart();
var nSelEnd =AkelPad.GetSelEnd();
SelCompleteLine(hWndEdit, nSelStart, nSelEnd);
nSelStart=AkelPad.GetSelStart();
pSelText =AkelPad.GetSelText(2);
var pLastStr =pSelText.charAt(pSelText.length-1);
if (pLastStr=="\n")
{
pSelText=pSelText.substr(0, pSelText.length-1);
CollectGarbage();
}
}
}
else
{
pSelText =AkelPad.GetTextRange(0, -1, 2);
}
var oPattern=new RegExp("(^.*$)", "mg");
pSelText=pSelText.replace(oPattern, sEscStr);
CollectGarbage();
if (bNum && sEscStr.indexOf("\0")!=-1)
{
pSelText=pSelText.split("\0");
CollectGarbage();
var m=0;
if (nFirstCur==undefined) var nFirstCur=Number(nFirst);
if (nStepCur==undefined) var nStepCur=Number(nStep);
if (nFirstCur!=parseInt(nFirstCur,10) || nStepCur!=parseInt(nStepCur,10))
{
var r1,r2;
try{r1=nFirstCur.toString().split(".")[1].length;}catch(e){r1=0;}
try{r2=nStepCur.toString().split(".")[1].length;}catch(e){r2=0;}
m=Math.max(r1,r2);
}
var nCurrentNum=(bRand) ? nFirstCur+(nStepCur-nFirstCur)*Math.random() : nFirstCur;
var pNumText;
if (!bHex && (nWidth==1 || nWidth==0 || nWidth ==-1))
{
for (i=0; i<pSelText.length-1; i+=1)
{
pNumText=nCurrentNum.toFixed(m);
pSelText[i]=pSelText[i]+pNumText;
if (!bLazy || bLazy && (pSelText[i+1].indexOf("\n")!=-1))
{
nCurrentNum=(bRand) ? nFirstCur+(nStepCur-nFirstCur)*Math.random() : nCurrentNum+nStepCur;
}
}
}
else
{
for (i=0; i<pSelText.length-1; i+=1)
{
pNumText=Pad(nCurrentNum,m);
pSelText[i]=pSelText[i]+pNumText;
if (!bLazy || bLazy && (pSelText[i+1].indexOf("\n")!=-1))
{
nCurrentNum=(bRand) ? nFirstCur+(nStepCur-nFirstCur)*Math.random() : nCurrentNum+nStepCur;
}
}
}
pSelText=pSelText.join("");
CollectGarbage();
}
pSelText=pSelText.replace(/\1/g, "\n");
CollectGarbage();
if (nSelState==COLUMNSEL)
{
dwOptions=AkelPad.SendMessage(hWndEdit, 3227 /*AEM_GETOPTIONS*/, 0, 0);
if (!(dwOptions & 0x40 /*AECO_PASTESELECTCOLUMN*/)){AkelPad.SendMessage(hWndEdit, 3228 /*AEM_SETOPTIONS*/, 2 /*AECOOP_OR*/, 0x40 /*AECO_PASTESELECTCOLUMN*/);}
AkelPad.ReplaceSel(pSelText);
if (!(dwOptions & 0x40 /*AECO_PASTESELECTCOLUMN*/)){AkelPad.SendMessage(hWndEdit, 3228 /*AEM_SETOPTIONS*/, 4 /*AECOOP_XOR*/, 0x40 /*AECO_PASTESELECTCOLUMN*/);}
}
else if (nSelState==NORMALSEL)
{
if (pLastStr=="\n")
{
pSelText=pSelText+"\n";
CollectGarbage();
}
AkelPad.ReplaceSel(pSelText);
nSelEnd=AkelPad.GetSelEnd();
AkelPad.SetSel(nSelStart,nSelEnd);
}
else if (nSelState==SELECTALL)
{
AkelPad.SetSel(0, -1);
AkelPad.ReplaceSel(pSelText);
}
if (AkelPad.IsAkelEdit()){AkelPad.SendMessage(hWndEdit, 3185 /*AEM_LOCKSCROLL*/, 3 /*SB_BOTH*/, false);}
SetRedraw(hWndEdit, true);
pSelText=null;
CollectGarbage();
}
function DisableBtnOK(hWnd)
{
oSys.Call("user32::GetWindowText"+_TCHAR, hWnd, lpBuffer, nMaxLen);
var pStrExp=AkelPad.MemRead(lpBuffer, _TSTR);
if (pStrExp==""){pStrExp="1";}
if (isNaN(Number(pStrExp)))
{
oSys.Call("user32::EnableWindow", aWnd[IDC_OK][WND], false);
oSys.Call("user32::SetFocus", hWnd);
return true;
}
}
function InsertInArray(lpArray, lpItem, nPos)
{
//For MS JScript backward compatibility
var i;
if (nPos<0){nPos=lpArray.length+nPos+1;}
if (nPos<0){nPos=0;}
if (nPos>lpArray.length){nPos=lpArray.length;}
for (i=lpArray.length; i >= 0; i-=1)
{
if (i==nPos)
{
lpArray[i]=lpItem;
break;
}
lpArray[i]=lpArray[i-1];
}
}
function DeleteFromArray(lpArray, nPos, nCount)
{
//For MS JScript backward compatibility
var i;
if (nPos<0){nPos=lpArray.length+nPos;}
if (nPos<0 || nPos >= lpArray.length){return;}
if (nPos+nCount >= lpArray.length){nCount=lpArray.length-nPos;}
for (i=nPos; i+nCount<lpArray.length; i+=1)
{
lpArray[i]=lpArray[i+nCount];
}
lpArray.length-=nCount;
}
function SetWindowFontAndText(hWnd, hFont, pText)
{
if (hFont){AkelPad.SendMessage(hWnd, 48 /*WM_SETFONT*/, hFont, 1);}
AkelPad.MemCopy(lpBuffer, pText.toString().substr(0, 255).replace(/\r$/, ""), _TSTR);
oSys.Call("user32::SetWindowText"+_TCHAR, hWnd, lpBuffer);
}
function SetRedraw(hWnd, bRedraw)
{
AkelPad.SendMessage(hWnd, 11 /*WM_SETREDRAW*/, bRedraw, 0);
if (bRedraw){oSys.Call("user32::InvalidateRect", hWnd, 0, true);}
}
function RectToArray(lpRect, rcRect)
{
rcRect.left =AkelPad.MemRead(lpRect , 3 /*DT_DWORD*/);
rcRect.top =AkelPad.MemRead(lpRect+4 , 3 /*DT_DWORD*/);
rcRect.right =AkelPad.MemRead(lpRect+8 , 3 /*DT_DWORD*/);
rcRect.bottom=AkelPad.MemRead(lpRect+12, 3 /*DT_DWORD*/);
return rcRect;
}
function CenterWindow(hWndParent, hWnd)
{
var lpRect;
var rcWndParent=[];
var rcWnd=[];
var X;
var Y;
lpRect=AkelPad.MemAlloc(16);
if (lpRect) //sizeof(RECT)
{
if (!hWndParent){hWndParent=oSys.Call("user32::GetDesktopWindow");}
oSys.Call("user32::GetWindowRect", hWndParent, lpRect);
RectToArray(lpRect, rcWndParent);
oSys.Call("user32::GetWindowRect", hWnd, lpRect);
RectToArray(lpRect, rcWnd);
//Center window
X=rcWndParent.left+((rcWndParent.right-rcWndParent.left)/2-(rcWnd.right-rcWnd.left)/2);
Y=rcWndParent.top +((rcWndParent.bottom-rcWndParent.top)/2-(rcWnd.bottom-rcWnd.top)/2);
oSys.Call("user32::SetWindowPos", hWnd, 0, X, Y, 0, 0, 0x15 /*SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE*/);
AkelPad.MemFree(lpRect);
}
}
function SelCompleteLine(hWnd, nMinSel, nMaxSel)
{
if (nMinSel<nMaxSel)
{
var nMinLine =AkelPad.SendMessage(hWnd, 1078 /*EM_EXLINEFROMCHAR*/, 0, nMinSel);
var nMaxLine =AkelPad.SendMessage(hWnd, 1078 /*EM_EXLINEFROMCHAR*/, 0, nMaxSel);
var nMinLineIndex =AkelPad.SendMessage(hWnd, 187 /*EM_LINEINDEX*/, nMinLine, 0);
var nMaxLineIndex =AkelPad.SendMessage(hWnd, 187 /*EM_LINEINDEX*/, nMaxLine, 0);
var nMaxLineLength=AkelPad.SendMessage(hWnd, 193 /*EM_LINELENGTH*/, nMaxSel, 0);
if (nMaxLineIndex==nMaxSel){nMaxLine-=1;}
else if (nMaxLineLength){nMaxSel=nMaxLineIndex+nMaxLineLength+1;}
nMinSel=nMinLineIndex;
AkelPad.SetSel(nMinSel, nMaxSel);
return nMaxLine-nMinLine+1;
}
return 0;
}
function FunToIn(pTxt)
{
if (pTxt.indexOf("(...)") > -1)
{
pTxt = pTxt.replace("...", sStr.substring(nBegSelIn, nEndSelIn));
sStr = sStr.substr(0, nBegSelIn) + pTxt + sStr.substr(nEndSelIn);
if (nBegSelIn == nEndSelIn)
{
nBegSelIn = nBegSelIn + pTxt.length - 1;
nEndSelIn = nBegSelIn;
}
else
{
nBegSelIn = nBegSelIn + pTxt.indexOf("(") + 1;
nEndSelIn = nEndSelIn + pTxt.indexOf("(") + 1;
}
}
else if (pTxt.indexOf("(") > -1)
{
sStr = sStr.substr(0, nBegSelIn) + pTxt + sStr.substr(nEndSelIn);
nBegSelIn = nBegSelIn + pTxt.indexOf("(") + 1;
nEndSelIn = nBegSelIn;
}
else
{
sStr = sStr.substr(0, nBegSelIn) + pTxt + sStr.substr(nEndSelIn);
nBegSelIn = nBegSelIn + pTxt.length;
nEndSelIn = nBegSelIn;
}
oSys.Call("user32::SetFocus", aWnd[IDC_CBB_STR][WND]);
}
function LoWord(nParam)
{
return (nParam & 0xffff);
}
function HiWord(nParam)
{
return ((nParam >> 16) & 0xffff);
}
function MkLong(nLoWord, nHiWord)
{
return (nHiWord << 16) | (nLoWord & 0xffff);
} |
- Insert text or/and a sequence of Num/RandomNum to Begin or/and End of every line. May be need ShowMenu.js
This is my first release JS. Base on some other scripts.
NumberCount_1033.lng
| Code: | sTxtStr ="String";
sTxtNum ="Number";
sTxtRand ="Random";
sTxtLazy ="Lazy mode";
sTxtFirst ="First";
sTxtStep ="Step";
sTxtEnd ="End";
sTxtWidth ="Width";
sTxtPad ="Padding char";
sTxtSeconds ="Seconds";
sTxtOK ="OK";
sTxtCancel ="Cancel";
var sTxtBackSlace ="backslash";
var sTxtReturn ="return";
var sTxtLineFeed ="line feed";
var sTxtTabulation ="tabulation";
var sTxtNumberSequence="number sequence";
var sTxtHexNumSequence="Hex number sequence";
var sTxtOriginalLine ="original line";
var sTxtEmpty ="Empty"; |
Last edited by cnnnc on Mon Dec 17, 2012 1:06 am; edited 8 times in total |
|
| Back to top |
|
 |
bluestone
Joined: 19 Apr 2010 Posts: 4
|
Posted: Tue Apr 20, 2010 6:34 am Post subject: Jion lines together |
|
|
Jion lines together
| Code: |
var AkelPad=new ActiveXObject("AkelPad.document");
var WshShell=new ActiveXObject("WScript.shell");
var IDC_INPUT_PREPEND =1001
var IDC_INPUT_APPEND =1002
var IDC_INPUT_SEPARATOR =1003
var IDC_OK =1004
var IDC_CANCEL =1005
var IDC_STATIC =-1
var hMainWnd=AkelPad.GetMainWnd();
var oSys=AkelPad.SystemFunction();
var pScriptName=WScript.ScriptName;
var hInstanceDLL=AkelPad.GetInstanceDll();
var bAkelEdit=AkelPad.IsAkelEdit();
var hWndDialog;
var hWndStatic3;
var hWndSeparator;
var hWndStatic1;
var hWndPrepend;
var hWndStatic2;
var hWndAppend;
var hWndOK;
var hWndCancel;
var hGuiFont;
var lpBuffer;
var pStrPrepend = "";
var pStrAppend = "";
var pStrSeparator = "";
var nStrSeparatorLen;
var _TCHAR;
var _TSTR;
var _TSIZE;
if (hMainWnd)
{
if (ScriptEngineMajorVersion() <= 5 && ScriptEngineMinorVersion() < 5)
{
AkelPad.MessageBox(hMainWnd, "JScript version is less than 5.5.", pScriptName, 48 /*MB_ICONEXCLAMATION*/);
WScript.Quit();
}
if (AkelPad.IsOldWindows())
{
_TCHAR="A";
_TSTR=0 /*DT_ANSI*/;
_TSIZE=1 /*sizeof(char)*/;
}
else
{
_TCHAR="W";
_TSTR=1 /*DT_UNICODE*/;
_TSIZE=2 /*sizeof(wchar_t)*/;
}
if (AkelPad.WindowRegisterClass(pScriptName))
{
if (lpBuffer=AkelPad.MemAlloc(256 * _TSIZE))
{
//Create dialog
AkelPad.MemCopy(lpBuffer, pScriptName, _TSTR);
hWndDialog=oSys.Call("user32::CreateWindowEx" + _TCHAR,
0, //dwExStyle
lpBuffer, //lpClassName
0, //lpWindowName
0x90CA0000,
0, //x
0, //y
360, //nWidth
110, //nHeight
hMainWnd, //hWndParent
0, //ID
hInstanceDLL, //hInstance
DialogCallback);
if (hWndDialog)
{
//Disable main window, to make dialog modal
oSys.Call("user32::EnableWindow", hMainWnd, false);
//Message loop
AkelPad.WindowGetMessage();
}
AkelPad.MemFree(lpBuffer);
}
AkelPad.WindowUnregisterClass(pScriptName);
}
}
function DialogCallback(hWnd, uMsg, wParam, lParam)
{
if (uMsg == 1) //WM_CREATE
{
try
{
pStrPrepend=WshShell.RegRead("HKCU\\Software\\Akelsoft\\AkelPad\\Plugs\\Scripts\\LinesJoin\\Prepend");
pStrAppend=WshShell.RegRead("HKCU\\Software\\Akelsoft\\AkelPad\\Plugs\\Scripts\\LinesJoin\\Append");
pStrSeparator=WshShell.RegRead("HKCU\\Software\\Akelsoft\\AkelPad\\Plugs\\Scripts\\LinesJoin\\Separator");
}
catch (nError)
{
}
hGuiFont=oSys.Call("gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/);
//Dialog caption
AkelPad.MemCopy(lpBuffer, pScriptName, _TSTR);
oSys.Call("user32::SetWindowText" + _TCHAR, hWnd, lpBuffer);
////Static window
//Create window
AkelPad.MemCopy(lpBuffer, "STATIC", _TSTR);
hWndStatic1=oSys.Call("user32::CreateWindowEx" + _TCHAR,
0, //dwExStyle
lpBuffer, //lpClassName
0, //lpWindowName
0x50000000, //WS_VISIBLE|WS_CHILD
10, //x
10, //y
60, //nWidth
23, //nHeight
hWnd, //hWndParent
IDC_STATIC, //ID
hInstanceDLL, //hInstance
0); //lpParam
//Set font and text
SetWindowFontAndText(hWndStatic1, hGuiFont, "Prepend:");
////Edit window
//Create window
AkelPad.MemCopy(lpBuffer, "EDIT", _TSTR);
hWndPrepend=oSys.Call("user32::CreateWindowEx" + _TCHAR,
0x200, //WS_EX_CLIENTEDGE
lpBuffer, //lpClassName
0, //lpWindowName
0x50010080, //WS_VISIBLE|WS_CHILD|WS_TABSTOP|ES_AUTOHSCROLL
60, //x
10, //y
45, //nWidth
23, //nHeight
hWnd, //hWndParent
IDC_INPUT_PREPEND, //ID
hInstanceDLL, //hInstance
0); //lpParam
//Set font and text
SetWindowFontAndText(hWndPrepend, hGuiFont, pStrPrepend);
////Static window
//Create window
AkelPad.MemCopy(lpBuffer, "STATIC", _TSTR);
hWndStatic2=oSys.Call("user32::CreateWindowEx" + _TCHAR,
0, //dwExStyle
lpBuffer, //lpClassName
0, //lpWindowName
0x50000000, //WS_VISIBLE|WS_CHILD
110, //x
10, //y
60, //nWidth
23, //nHeight
hWnd, //hWndParent
IDC_STATIC, //ID
hInstanceDLL, //hInstance
0); //lpParam
//Set font and text
SetWindowFontAndText(hWndStatic2, hGuiFont, "Append:");
////Edit window
//Create window
AkelPad.MemCopy(lpBuffer, "EDIT", _TSTR);
hWndAppend=oSys.Call("user32::CreateWindowEx" + _TCHAR,
0x200, //WS_EX_CLIENTEDGE
lpBuffer, //lpClassName
0, //lpWindowName
0x50010080, //WS_VISIBLE|WS_CHILD|WS_TABSTOP|ES_AUTOHSCROLL
152, //x
10, //y
45, //nWidth
23, //nHeight
hWnd, //hWndParent
IDC_INPUT_APPEND, //ID
hInstanceDLL, //hInstance
0); //lpParam
//Set font and text
SetWindowFontAndText(hWndAppend, hGuiFont, pStrAppend);
////Static window
//Create window
AkelPad.MemCopy(lpBuffer, "STATIC", _TSTR);
hWndStatic3=oSys.Call("user32::CreateWindowEx" + _TCHAR,
0, //dwExStyle
lpBuffer, //lpClassName
0, //lpWindowName
0x50000000, //WS_VISIBLE|WS_CHILD
203, //x
10, //y
60, //nWidth
23, //nHeight
hWnd, //hWndParent
IDC_STATIC, //ID
hInstanceDLL, //hInstance
0); //lpParam
//Set font and text
SetWindowFontAndText(hWndStatic3, hGuiFont, "Separator:");
////Edit window
//Create window
AkelPad.MemCopy(lpBuffer, "EDIT", _TSTR);
hWndSeparator=oSys.Call("user32::CreateWindowEx" + _TCHAR,
0x200, //WS_EX_CLIENTEDGE
lpBuffer, //lpClassName
0, //lpWindowName
0x50010080, //WS_VISIBLE|WS_CHILD|WS_TABSTOP|ES_AUTOHSCROLL
265, //x
10, //y
80, //nWidth
23, //nHeight
hWnd, //hWndParent
IDC_INPUT_SEPARATOR, //ID
hInstanceDLL, //hInstance
0); //lpParam
//Set font and text
SetWindowFontAndText(hWndSeparator, hGuiFont, pStrSeparator);
////OK button window
//Create window
AkelPad.MemCopy(lpBuffer, "BUTTON", _TSTR);
hWndOK=oSys.Call("user32::CreateWindowEx" + _TCHAR,
0, //dwExStyle
lpBuffer, //lpClassName
0, //lpWindowName
0x50010000, //WS_VISIBLE|WS_CHILD|WS_TABSTOP
179, //x
50, //y
75, //nWidth
23, //nHeight
hWnd, //hWndParent
IDC_OK, //ID
hInstanceDLL, //hInstance
0); //lpParam
//Set font and text
SetWindowFontAndText(hWndOK, hGuiFont, "OK");
////Cancel button window
//Create window
AkelPad.MemCopy(lpBuffer, "BUTTON", _TSTR);
hWndCancel=oSys.Call("user32::CreateWindowEx" + _TCHAR,
0, //dwExStyle
lpBuffer, //lpClassName
0, //lpWindowName
0x50010000, //WS_VISIBLE|WS_CHILD|WS_TABSTOP
260, //x
50, //y
75, //nWidth
23, //nHeight
hWnd, //hWndParent
IDC_CANCEL, //ID
hInstanceDLL, //hInstance
0); //lpParam
//Set font and text
SetWindowFontAndText(hWndCancel, hGuiFont, "Cancel");
//Center dialog
CenterWindow(hMainWnd, hWnd);
}
else if (uMsg == 7) //WM_SETFOCUS
{
oSys.Call("user32::SetFocus", hWndSeparator);
}
else if (uMsg == 256) //WM_KEYDOWN
{
if (wParam == 27) //VK_ESCAPE
{
//Escape key pushes Cancel button
oSys.Call("user32::PostMessage" + _TCHAR, hWndDialog, 273 /*WM_COMMAND*/, IDC_CANCEL, 0);
}
else if (wParam == 13) //VK_RETURN
{
//Return key pushes OK button
oSys.Call("user32::PostMessage" + _TCHAR, hWndDialog, 273 /*WM_COMMAND*/, IDC_OK, 0);
}
}
else if (uMsg == 273) //WM_COMMAND
{
if ((wParam & 0xffff) == IDC_INPUT_SEPARATOR)
{
nStrSeparatorLen=oSys.Call("user32::GetWindowTextLength" + _TCHAR, hWndSeparator);
if (nStrSeparatorLen)
{
oSys.Call("user32::EnableWindow", hWndOK, true);
}
else
{
oSys.Call("user32::EnableWindow", hWndOK, false);
}
}
else if ((wParam & 0xffff) == IDC_OK)
{
oSys.Call("user32::GetWindowText" + _TCHAR, hWndSeparator, lpBuffer, 256);
pStrSeparator=AkelPad.MemRead(lpBuffer, _TSTR);
oSys.Call("user32::GetWindowText" + _TCHAR, hWndAppend, lpBuffer, 256);
pStrAppend=AkelPad.MemRead(lpBuffer, _TSTR);
oSys.Call("user32::GetWindowText" + _TCHAR, hWndPrepend, lpBuffer, 256);
pStrPrepend=AkelPad.MemRead(lpBuffer, _TSTR);
oSys.Call("user32::EnableWindow", hWndOK, false);
LinesJoin();
oSys.Call("user32::PostMessage" + _TCHAR, hWndDialog, 16 /*WM_CLOSE*/, 0, 0);
}
else if ((wParam & 0xffff) == IDC_CANCEL)
{
oSys.Call("user32::PostMessage" + _TCHAR, hWndDialog, 16 /*WM_CLOSE*/, 0, 0);
}
}
else if (uMsg == 16) //WM_CLOSE
{
//Enable main window
oSys.Call("user32::EnableWindow", hMainWnd, true);
WshShell.RegWrite("HKCU\\Software\\Akelsoft\\AkelPad\\Plugs\\Scripts\\LinesJoin\\Prepend", pStrPrepend, "REG_SZ");
WshShell.RegWrite("HKCU\\Software\\Akelsoft\\AkelPad\\Plugs\\Scripts\\LinesJoin\\Append", pStrAppend, "REG_SZ");
WshShell.RegWrite("HKCU\\Software\\Akelsoft\\AkelPad\\Plugs\\Scripts\\LinesJoin\\Separator", pStrSeparator
, "REG_SZ");
//Destroy dialog
oSys.Call("user32::DestroyWindow", hWnd);
}
else if (uMsg == 2) //WM_DESTROY
{
//Exit message loop
oSys.Call("user32::PostQuitMessage", 0);
}
return 0;
}
function LinesJoin() {
var hWndEdit=AkelPad.GetEditWnd();
var pSelText;
var pArray;
var pResult;
var nSelStart;
var nSelEnd;
nSelStart=AkelPad.GetSelStart();
nSelEnd=AkelPad.GetSelEnd();
if (nSelStart == nSelEnd)
AkelPad.SetSel(0, -1);
else
SelCompliteLine(hWndEdit, nSelStart, nSelEnd);
nSelStart=AkelPad.GetSelStart();
nSelEnd=AkelPad.GetSelEnd();
pSelText=AkelPad.GetSelText(2 /*\n*/);
if (!bAkelEdit)
pSelText=pSelText.replace(/\r/g, "\n");
pResult="";
pArray = pSelText.split("\n");
i = pArray.length-1;
if(pArray[i].length > 0) {
i = i + 1;
}
if (pStrPrepend.length > 0)
{
for (var j=0; j<i;j++) {
pArray[j] = pStrPrepend + pArray[j];
}
}
if (pStrAppend.length > 0)
{
for (var j=0; j<i;j++) {
pArray[j] = pArray[j] + pStrAppend;
}
}
pResult = pArray.join(pStrSeparator);
AkelPad.ReplaceSel(pResult);
AkelPad.SetSel(nSelStart, nSelStart);
AkelPad.SetSel(nSelStart, nSelStart + pResult.length);
}
//************************************************//
//Common Functions
//************************************************//
function SetWindowFontAndText(hWnd, hFont, pText)
{
var lpWindowText;
AkelPad.SendMessage(hWnd, 48 /*WM_SETFONT*/, hFont, true);
if (lpWindowText=AkelPad.MemAlloc(256 * _TSIZE))
{
AkelPad.MemCopy(lpWindowText, pText.substr(0, 255), _TSTR);
oSys.Call("user32::SetWindowText" + _TCHAR, hWnd, lpWindowText);
AkelPad.MemFree(lpWindowText);
}
}
function RectToArray(lpRect, rcRect)
{
rcRect.left=AkelPad.MemRead(lpRect, 3 /*DT_DWORD*/);
rcRect.top=AkelPad.MemRead(lpRect + 4, 3 /*DT_DWORD*/);
rcRect.right=AkelPad.MemRead(lpRect + 8, 3 /*DT_DWORD*/);
rcRect.bottom=AkelPad.MemRead(lpRect + 12, 3 /*DT_DWORD*/);
return rcRect;
}
function CenterWindow(hWndParent, hWnd)
{
var lpRect;
var rcWndParent=[];
var rcWnd=[];
var X;
var Y;
if (lpRect=AkelPad.MemAlloc(16)) //sizeof(RECT)
{
if (!hWndParent)
hWndParent=oSys.Call("user32::GetDesktopWindow");
oSys.Call("user32::GetWindowRect", hWndParent, lpRect);
RectToArray(lpRect, rcWndParent);
oSys.Call("user32::GetWindowRect", hWnd, lpRect);
RectToArray(lpRect, rcWnd);
//Center window
X=rcWndParent.left + ((rcWndParent.right - rcWndParent.left) / 2 - (rcWnd.right - rcWnd.left) / 2);
Y=rcWndParent.top + ((rcWndParent.bottom - rcWndParent.top) / 2 - (rcWnd.bottom - rcWnd.top) / 2);
oSys.Call("user32::SetWindowPos", hWnd, 0, X, Y, 0, 0, 0x15 /*SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE*/);
AkelPad.MemFree(lpRect);
}
}
function SelCompliteLine(hWnd, nMinSel, nMaxSel)
{
var nMinLine;
var nMaxLine;
var nMinLineIndex;
var nMaxLineIndex;
var nMaxLineLength;
if (nMinSel < nMaxSel)
{
nMinLine=AkelPad.SendMessage(hWnd, 1078 /*EM_EXLINEFROMCHAR*/, 0, nMinSel);
nMaxLine=AkelPad.SendMessage(hWnd, 1078 /*EM_EXLINEFROMCHAR*/, 0, nMaxSel);
nMinLineIndex=AkelPad.SendMessage(hWnd, 187 /*EM_LINEINDEX*/, nMinLine, 0);
nMaxLineIndex=AkelPad.SendMessage(hWnd, 187 /*EM_LINEINDEX*/, nMaxLine, 0);
nMaxLineLength=AkelPad.SendMessage(hWnd, 193 /*EM_LINELENGTH*/, nMaxSel, 0);
if (nMaxLineIndex == nMaxSel) --nMaxLine;
else if (nMaxLineLength) nMaxSel=nMaxLineIndex + nMaxLineLength + 1;
nMinSel=nMinLineIndex;
AkelPad.SetSel(nMinSel, nMaxSel);
return nMaxLine - nMinLine + 1;
}
return 0;
}
|
|
|
| Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1081 Location: Poland
|
Posted: Thu Apr 29, 2010 7:09 pm Post subject: |
|
|
I modified SplitSwitch.js, the script written by Instructor.
Now, menu options can be given in any order.
SplitSwitch_alternative.js
| Code: |
/// Split window switch for AkelPad 4.4.4
//
// How to use:
// Add menu to ContextMenu plugin:
//
// "Split window"
// {
// -"Four panes" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4212" "1" "4"`)
// -"Two vertical panes" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4213" "2" "4"`)
// -"Two horizontal panes" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4214" "3" "4"`)
// SEPARATOR
// -"Remove split" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4215" "4" "4"`)
// }
//
// or in a different order:
//
// {
// -"Two vertical panes" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4213" "1" "4"`)
// -"Two horizontal panes" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4214" "2" "4"`)
// -"Four panes" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4212" "3" "4"`)
// SEPARATOR
// -"Remove split" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4215" "4" "4"`)
// }
//
/// Переключение между режимами разделения окна.
//
// Как использовать:
// Добавляем меню в ContextMenu плагин:
//
// "Разделить окно"
// {
// -"Четыре части" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4212" "1" "4"`)
// -"Две вертикальные части" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4213" "2" "4"`)
// -"Две горизонтальные части" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4214" "3" "4"`)
// SEPARATOR
// -"Убрать разделение" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4215" "4" "4"`)
// }
//
// или в другом порядке:
//
// {
// -"Две вертикальные части" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4213" "1" "4"`)
// -"Две горизонтальные части" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4214" "2" "4"`)
// -"Четыре части" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4212" "3" "4"`)
// SEPARATOR
// -"Убрать разделение" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4215" "4" "4"`)
// }
//Arguments
var nMenuHandle=0;
var nItemID=0;
var nAction=0;
var nOpt=0;
var nLastOpt=0;
if (WScript.Arguments.length >= 5)
{
nMenuHandle=parseInt(WScript.Arguments(0));
nItemID=parseInt(WScript.Arguments(1));
nAction=parseInt(WScript.Arguments(2));
nOpt=parseInt(WScript.Arguments(3));
nLastOpt=parseInt(WScript.Arguments(4));
}
var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit=AkelPad.GetEditWnd();
var oFunction=AkelPad.SystemFunction();
var nFirstIdInGroup;
var nLastIdInGroup;
if (hMainWnd)
{
if (nMenuHandle && nItemID && nAction && nOpt && nLastOpt)
{
nFirstIdInGroup=nItemID - nOpt + 1;
nLastIdInGroup=nItemID - nOpt + nLastOpt;
if (nAction == 4215 /*IDM_VIEW_SPLIT_WINDOW_OFF*/)
nItemID=-1;
//Turn off
if (AkelPad.SendMessage(hWndEdit, 3447 /*AEM_GETMASTER*/, 0, 0))
AkelPad.SendMessage(hMainWnd, 273 /*WM_COMMAND*/, 4212 /*IDM_VIEW_SPLIT_WINDOW_ALL*/, 0);
//Turn on
if (nAction != 4215 /*IDM_VIEW_SPLIT_WINDOW_OFF*/)
AkelPad.SendMessage(hMainWnd, 273 /*WM_COMMAND*/, nAction, 0);
//Set radio button
oFunction.AddParameter(nMenuHandle);
oFunction.AddParameter(nFirstIdInGroup);
oFunction.AddParameter(nLastIdInGroup);
oFunction.AddParameter(nItemID);
oFunction.AddParameter(0x0 /*MF_BYCOMMAND*/);
oFunction.Call("user32::CheckMenuRadioItem");
}
}
|
PS: Since version 4.7.0 the function performed by the script is built into AkelPad.
Last edited by KDJ on Sun Dec 04, 2011 9:25 pm; edited 3 times in total |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2523 Location: Киев, Русь
|
Posted: Wed May 26, 2010 10:42 am Post subject: онлайн-перевод выделенного текста с помощью Google |
|
|
InternetRequest.js | Code: | ///Internet request for formed url in the arguments
///Интернет-запрос по сформированному в аргументах URL
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=7303#7303
// Version: 2.1 (24.06.2010)
if (WScript.Arguments.length == 1)
{
var pSelText = AkelPad.GetSelText();
if (pSelText)
{
var pLink = WScript.Arguments(0).replace("\\s", pSelText);
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run('\"' + pLink + '\"');
}
} |
Использование (из контекстного меню окна редактирования):
| Code: | "Интернет" Icon("%a\AkelFiles\Plugs\Toolbar\alink.ico")
{
-"Перевести: Auto -> Ru (Google)" Call("Scripts::Main", 1, "InternetRequest.js", `"http://translate.google.com/#auto|ru|\s"`)
} | подробнее см. контекстные меню.
Last edited by VladSh on Thu Jul 21, 2011 2:15 pm; edited 3 times in total |
|
| 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
|