| View previous topic :: View next topic |
| Author |
Message |
Xephon
Joined: 03 Jun 2008 Posts: 117
|
Posted: Sat Aug 09, 2008 4:40 pm Post subject: |
|
|
AkelPad 4.0.0 Final
Scripts plugin v3.5
Upd: Заметил, что такое происходит, если конец файла находится в пределах экрана. Тогда после замены виден значек конца файла, после которого идут удаленные фантомные строки и старый значек конца файла.
Если конец файла за экраном, то все нормально. |
|
| Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 4682
|
Posted: Sat Aug 09, 2008 5:30 pm Post subject: |
|
|
Ясно. В функции SetRedraw необходимо
| Code: | | oFunction.AddParameter(false); |
заменить на
| Code: | | oFunction.AddParameter(true); |
|
|
| Back to top |
|
 |
Xephon
Joined: 03 Jun 2008 Posts: 117
|
Posted: Sat Aug 09, 2008 6:15 pm Post subject: |
|
|
Спасибо, заработало как надо.
Скажите, а есть ли в планах, хотя бы отдаленных, появление регулярных выражений в стандартных диалогах? |
|
| Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 4682
|
Posted: Tue Sep 30, 2008 11:58 am Post subject: |
|
|
| Xephon wrote: | | Подскажите, а есть ли возможность при замене с помощью регулярных выражений проводить замену на табуляцию или символ новой строки? При подстановке \t в строку замены, замена происходит непосредственно на "\t", а не на табуляцию. | В новой версии SearchReplace.js вы можете для этого раскомментировать:
| Code: | pReplaceWithEsc=pReplaceWithEsc.replace(/(?:\\r\\n|\\r|\\n)/g, "\r");
pReplaceWithEsc=pReplaceWithEsc.replace(/\\t/g, "\t"); |
|
|
| Back to top |
|
 |
Xephon
Joined: 03 Jun 2008 Posts: 117
|
Posted: Tue Sep 30, 2008 4:46 pm Post subject: |
|
|
Большое спасибо, очень полезное обновление.
Еще одно пожелание по поводу диалога SearchReplace, думаю его реализация была бы полезно всем, кто часто пользуется регулярными выражениями: хотелось бы сохранять 10 последних использованных вариантов, как это сделано в диалоге обычной замены. |
|
| Back to top |
|
 |
Infocatcher
Joined: 06 Aug 2007 Posts: 1440
|
Posted: Tue Sep 30, 2008 5:39 pm Post subject: |
|
|
| Instructor wrote: | В новой версии SearchReplace.js вы можете для этого раскомментировать:
| Code: | pReplaceWithEsc=pReplaceWithEsc.replace(/(?:\\r\\n|\\r|\\n)/g, "\r");
pReplaceWithEsc=pReplaceWithEsc.replace(/\\t/g, "\t"); |
|
Гм, по-моему, лучше вот так:
| Code: | 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: | 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.
); |
|
|
| Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 4682
|
Posted: Thu Oct 02, 2008 8:32 am Post subject: |
|
|
Infocatcher
| Quote: | ...
– тогда можно будет использовать «\\n» для получения «\n» и «\n» для перевода строки. | В новой версии скрипта учтена данная ситуация.
Xephon
Теперь можно не редактировать скрипт - в диалоге SearchReplace.js появилась галочка "Esc-последовательности". |
|
| Back to top |
|
 |
Xephon
Joined: 03 Jun 2008 Posts: 117
|
Posted: Sun Oct 05, 2008 4:58 pm Post subject: |
|
|
Обнаружил странный глюк: когда в регулярном выражении присутствует positive look-ahead assertion, то кнопка "Заменить" работает аналогично кнопке "Найти", т.е. только подсвечивает найденное, но не заменяет. При этом кнопка "Заменить все" работает как надо.
[Added] Заглянул в скрипт и понял, что глюк не странный, а вполне закономерный. Сначала создается выделение, соответствующее искомому выражению, а потом замена производится в выделении, но т.к. тект соотвествующий positive look-ahead assertion не включается в выделение, то соотвествие пропадает. С negative look-ahead assertion соотвествие сохряняется. |
|
| Back to top |
|
 |
Xephon
Joined: 03 Jun 2008 Posts: 117
|
Posted: Thu Oct 09, 2008 12:26 am Post subject: |
|
|
Поправил скрипт, чтобы кнопка "Заменить" работала, когда присутствует 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;
} |
|
| Back to top |
|
 |
Xephon
Joined: 03 Jun 2008 Posts: 117
|
Posted: Thu Oct 09, 2008 1:01 pm Post subject: |
|
|
| Поиск и одиночная замена не работают, если в регулярном выражении нет ничего, кроме look-ahead assertion, т.к. при этом выделение пустое. Есть функция, позволяющая из скрипта помещать курсор в заданную позицию? |
|
| Back to top |
|
 |
LEN
Joined: 21 Aug 2008 Posts: 23
|
Posted: Sat Nov 08, 2008 8:28 pm Post subject: Перекодировка русских SMS |
|
|
GSM модем (Nokia D211) ноутбука может получать SMS'ки, но русские буквы показываются кракозябрами. Оказалось, что их код получен по принципу: hex=ANSI-80h.
Хотелось бы иметь плагин, выполняющий обратную перекодировку ВЫДЕЛЕННОГО текста: ANSI=hex+80h, но не хочется разбираться с тонкостями написания скриптов.
Может кто поможет? |
|
| Back to top |
|
 |
Fr0sT
Joined: 24 Jul 2007 Posts: 855
|
Posted: Wed Nov 26, 2008 7:47 am Post subject: |
|
|
Посмотрел на скрипт SearchReplace и понял, что с помощью данного плагина можно фактически написать на JS новый Акель))
Единственное замечание: там в конце куча if-ов, туда так и просится switch. |
|
| Back to top |
|
 |
Infocatcher
Joined: 06 Aug 2007 Posts: 1440
|
Posted: Tue Mar 10, 2009 8:38 pm Post subject: |
|
|
scriptToBookmarklet.js
Делает из нормально написанного скрипта букмарклет: удаляет переносы строк и комментарии.
Результат копируется в буфер обмена.
Если в 17-й строке заменить
scriptToBookmarklet(false);
на
scriptToBookmarklet(true);
, то дополнительно производится замена любой последовательности пробельных символов на один пробел (что нужно учитывать при написании кода).
P.S. Для того, чтобы не происходило удаление штук вида «http://abc», за комментарии считаются только «//» после любого пробельного символа.
[UPD]
Добавил восстановление выделения. |
|
| Back to top |
|
 |
Infocatcher
Joined: 06 Aug 2007 Posts: 1440
|
Posted: Wed Mar 11, 2009 10:44 pm Post subject: |
|
|
encodeHTML.js
Заменяет символы <, >, & и " на <, >, & и " соответственно.
decodeHTML.js
Осуществляет обратную замену.
P.S. Если в ближайшее время не всплывут какие-нибудь глюки, или не окажется, что я что-то забыл, добавлю скрипты в сборник.  |
|
| Back to top |
|
 |
Paulus
Joined: 29 Nov 2007 Posts: 15 Location: St. Petersburg
|
Posted: Fri Mar 13, 2009 1:58 pm Post subject: |
|
|
| я установил плугин "scripts", зарегистрировал его батником, но теперь при запуске любого скрипта вылезает сообщение: akelpad's window not found ... видимо ему надо чтобы akelpad был запущен, но ведь он запущен, в чем же дело? |
|
| 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
|