Page 4 of 97
Posted: Sat Aug 09, 2008 4:40 pm
by Xephon
AkelPad 4.0.0 Final
Scripts plugin v3.5
Upd: Заметил, что такое происходит, если конец файла находится в пределах экрана. Тогда после замены виден значек конца файла, после которого идут удаленные фантомные строки и старый значек конца файла.
Если конец файла за экраном, то все нормально.
Posted: Sat Aug 09, 2008 5:30 pm
by Instructor
Ясно. В функции SetRedraw необходимо
заменить на
Posted: Sat Aug 09, 2008 6:15 pm
by Xephon
Спасибо, заработало как надо.
Скажите, а есть ли в планах, хотя бы отдаленных, появление регулярных выражений в стандартных диалогах?
Posted: Tue Sep 30, 2008 11:58 am
by Instructor
Xephon wrote:Подскажите, а есть ли возможность при замене с помощью регулярных выражений проводить замену на табуляцию или символ новой строки? При подстановке \t в строку замены, замена происходит непосредственно на "\t", а не на табуляцию.
В новой версии SearchReplace.js вы можете для этого раскомментировать:
Code: Select all
pReplaceWithEsc=pReplaceWithEsc.replace(/(?:\\r\\n|\\r|\\n)/g, "\r");
pReplaceWithEsc=pReplaceWithEsc.replace(/\\t/g, "\t");
Posted: Tue Sep 30, 2008 4:46 pm
by Xephon
Большое спасибо, очень полезное обновление.
Еще одно пожелание по поводу диалога SearchReplace, думаю его реализация была бы полезно всем, кто часто пользуется регулярными выражениями: хотелось бы сохранять 10 последних использованных вариантов, как это сделано в диалоге обычной замены.
Posted: Tue Sep 30, 2008 5:39 pm
by Infocatcher
Instructor wrote:В новой версии SearchReplace.js вы можете для этого раскомментировать:
Code: Select all
pReplaceWithEsc=pReplaceWithEsc.replace(/(?:\\r\\n|\\r|\\n)/g, "\r");
pReplaceWithEsc=pReplaceWithEsc.replace(/\\t/g, "\t");
Гм, по-моему, лучше вот так:
Code: Select all
pReplaceWithEsc=pReplaceWithEsc.replace(/(^|[^\\])(?:\\r\\n|\\r|\\n)/g, "$1\r");
pReplaceWithEsc=pReplaceWithEsc.replace(/(^|[^\\])\\t/g, "$1\t");
pReplaceWithEsc=pReplaceWithEsc.replace(/\\(\\[rnt])/g, "$1");
– тогда можно будет использовать «\\n» для получения «\n» и «\n» для перевода строки.
P.S. И не проще ли делать, например, так:
Code: Select all
function addParameters() {
for(var i = 0; i < arguments.length; i++)
oFunction.AddParameter(arguments[i]);
}
//Create dialog
AkelPad.MemCopy(lpBuffer, pScriptName, DT_ANSI);
addParameters(
0,
lpBuffer,
0,
0x90CA0000, //WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX
0,
0,
392,
223,
hMainWnd,
0, //ID
hInstanceDLL,
DialogCallbackA //Script function callback. To use it class must be registered by WindowRegisterClass.
);
Posted: Thu Oct 02, 2008 8:32 am
by Instructor
Infocatcher
...
– тогда можно будет использовать «\\n» для получения «\n» и «\n» для перевода строки.
В новой версии скрипта учтена данная ситуация.
Xephon
Теперь можно не редактировать скрипт - в диалоге SearchReplace.js появилась галочка "Esc-последовательности".
Posted: Sun Oct 05, 2008 4:58 pm
by Xephon
Обнаружил странный глюк: когда в регулярном выражении присутствует positive look-ahead assertion, то кнопка "Заменить" работает аналогично кнопке "Найти", т.е. только подсвечивает найденное, но не заменяет. При этом кнопка "Заменить все" работает как надо.
[Added] Заглянул в скрипт и понял, что глюк не странный, а вполне закономерный. Сначала создается выделение, соответствующее искомому выражению, а потом замена производится в выделении, но т.к. тект соотвествующий positive look-ahead assertion не включается в выделение, то соотвествие пропадает. С negative look-ahead assertion соотвествие сохряняется.
Posted: Thu Oct 09, 2008 12:26 am
by Xephon
Поправил скрипт, чтобы кнопка "Заменить" работала, когда присутствует look-ahead assertion. Т.к. скрипт довольно большой, укажу только измененнные куски (мои добавления/исправления выделены жирным):
...
//Options
var pFindIt="";
var pReplaceWith="";
var bSensitive=false;
var bMultiline=false;
var bEscSequences=false;
var nDirection=DN_DOWN;
var oIsLookAhead=new RegExp("\\(\\?=");
...
...
function SearchReplace()
{
var hWndInitialEdit;
var hWndCurrentEdit;
var oPattern;
var oCutOffPattern;
var pSelText;
var pArray;
var pResult;
var pCutLookAhead;
var nInitialSelStart;
var nInitialSelEnd;
var nSelStart;
var nSelEnd;
var nError;
var nResult=-1;
var i;
hWndInitialEdit=AkelPad.GetEditWnd();
hWndCurrentEdit=hWndInitialEdit;
oPattern=new RegExp(pFindIt, (bSensitive?"":"i") + (nButton == BT_REPLACEALL || nDirection & DN_UP?"g":"") + (bMultiline?"m":""));
if (oIsLookAhead.test(pFindIt) === true)
{
pCutLookAhead = LAAssertion(pFindIt);
oCutOffPattern = new RegExp(pCutLookAhead, (bSensitive?"":"i") + (bMultiline?"m":""));
}
else
oCutOffPattern = oPattern;
while (1)
{
nInitialSelStart=AkelPad.GetSelStart();
nInitialSelEnd=AkelPad.GetSelEnd();
if (nButton == BT_REPLACE)
{
if (nInitialSelStart != nInitialSelEnd)
{
pSelText=AkelPad.GetSelText();
if (pArray=pSelText.match(oCutOffPattern))
{
if (pArray.index == 0 && pArray[0].length == (nInitialSelEnd - nInitialSelStart))
{
pResult=pSelText.replace(oCutOffPattern, pReplaceWithEsc);
AkelPad.ReplaceSel(pResult);
nInitialSelStart=AkelPad.GetSelStart();
nInitialSelEnd=AkelPad.GetSelEnd();
}
}
}
nButton=BT_FINDNEXT;
}
...
...
function LAAssertion(pTestPattern)
{
var pStartLookAhead = pTestPattern.match(oIsLookAhead);
var pSymbol = "";
var pResult = "";
var nOpenParenthesis = 1;
var nCloseParentesis = 0;
var nStartLookAhead = pStartLookAhead.index;
var nCounter = nStartLookAhead + 1;
while (nOpenParenthesis != nCloseParentesis)
{
pSymbol = pTestPattern.charAt(nCounter);
if (pSymbol == "(")
nOpenParenthesis++;
if (pSymbol == ")")
nCloseParentesis++;
nCounter++;
}
pResult = pTestPattern.substring(0,nStartLookAhead) + pTestPattern.substring(nCounter,pTestPattern.length);
return pResult;
}
Posted: Thu Oct 09, 2008 1:01 pm
by Xephon
Поиск и одиночная замена не работают, если в регулярном выражении нет ничего, кроме look-ahead assertion, т.к. при этом выделение пустое. Есть функция, позволяющая из скрипта помещать курсор в заданную позицию?
Перекодировка русских SMS
Posted: Sat Nov 08, 2008 8:28 pm
by LEN
GSM модем (Nokia D211) ноутбука может получать SMS'ки, но русские буквы показываются кракозябрами. Оказалось, что их код получен по принципу: hex=ANSI-80h.
Хотелось бы иметь плагин, выполняющий обратную перекодировку ВЫДЕЛЕННОГО текста: ANSI=hex+80h, но не хочется разбираться с тонкостями написания скриптов.
Может кто поможет?
Posted: Wed Nov 26, 2008 7:47 am
by Fr0sT
Посмотрел на скрипт SearchReplace и понял, что с помощью данного плагина можно фактически написать на JS новый Акель))
Единственное замечание: там в конце куча if-ов, туда так и просится switch.
Posted: Tue Mar 10, 2009 8:38 pm
by Infocatcher
scriptToBookmarklet.js
Делает из нормально написанного скрипта
букмарклет: удаляет переносы строк и комментарии.
Результат копируется в буфер обмена.
Если в 17-й строке заменить
scriptToBookmarklet(
false);
на
scriptToBookmarklet(
true);
, то дополнительно производится замена любой последовательности пробельных символов на один пробел (что нужно учитывать при написании кода).
P.S. Для того, чтобы не происходило удаление штук вида «
http://abc», за комментарии считаются только «//» после любого пробельного символа.
[UPD]
Добавил восстановление выделения.
Posted: Wed Mar 11, 2009 10:44 pm
by Infocatcher
encodeHTML.js
Заменяет символы
<,
>,
& и
" на
<,
>,
& и
" соответственно.
decodeHTML.js
Осуществляет обратную замену.
P.S. Если в ближайшее время не всплывут какие-нибудь глюки, или не окажется, что я что-то забыл, добавлю скрипты в сборник.

Posted: Fri Mar 13, 2009 1:58 pm
by Paulus
я установил плугин "scripts", зарегистрировал его батником, но теперь при запуске любого скрипта вылезает сообщение: akelpad's window not found ... видимо ему надо чтобы akelpad был запущен, но ведь он запущен, в чем же дело?