AkelPad Forum Index AkelPad
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Scripts discussion (1)
Goto page Previous  1, 2, 3, 4, 5 ... 95, 96, 97  Next
 
Post new topic   This topic is locked: you cannot edit posts or make replies.    AkelPad Forum Index -> Plugins
View previous topic :: View next topic  
Author Message
Xephon



Joined: 03 Jun 2008
Posts: 123

PostPosted: Sat Aug 09, 2008 4:40 pm    Post subject: Reply with quote

AkelPad 4.0.0 Final
Scripts plugin v3.5

Upd: Заметил, что такое происходит, если конец файла находится в пределах экрана. Тогда после замены виден значек конца файла, после которого идут удаленные фантомные строки и старый значек конца файла.
Если конец файла за экраном, то все нормально.
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5293

PostPosted: Sat Aug 09, 2008 5:30 pm    Post subject: Reply with quote

Ясно. В функции SetRedraw необходимо
Code:
oFunction.AddParameter(false);

заменить на
Code:
oFunction.AddParameter(true);
Back to top
View user's profile Send private message Send e-mail
Xephon



Joined: 03 Jun 2008
Posts: 123

PostPosted: Sat Aug 09, 2008 6:15 pm    Post subject: Reply with quote

Спасибо, заработало как надо.

Скажите, а есть ли в планах, хотя бы отдаленных, появление регулярных выражений в стандартных диалогах?
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5293

PostPosted: Tue Sep 30, 2008 11:58 am    Post subject: Reply with quote

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
View user's profile Send private message Send e-mail
Xephon



Joined: 03 Jun 2008
Posts: 123

PostPosted: Tue Sep 30, 2008 4:46 pm    Post subject: Reply with quote

Большое спасибо, очень полезное обновление.
Еще одно пожелание по поводу диалога SearchReplace, думаю его реализация была бы полезно всем, кто часто пользуется регулярными выражениями: хотелось бы сохранять 10 последних использованных вариантов, как это сделано в диалоге обычной замены.
Back to top
View user's profile Send private message
Infocatcher



Joined: 06 Aug 2007
Posts: 1602

PostPosted: Tue Sep 30, 2008 5:39 pm    Post subject: Reply with quote

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
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5293

PostPosted: Thu Oct 02, 2008 8:32 am    Post subject: Reply with quote

Infocatcher
Quote:
...
– тогда можно будет использовать «\\n» для получения «\n» и «\n» для перевода строки.
В новой версии скрипта учтена данная ситуация.

Xephon
Теперь можно не редактировать скрипт - в диалоге SearchReplace.js появилась галочка "Esc-последовательности".
Back to top
View user's profile Send private message Send e-mail
Xephon



Joined: 03 Jun 2008
Posts: 123

PostPosted: Sun Oct 05, 2008 4:58 pm    Post subject: Reply with quote

Обнаружил странный глюк: когда в регулярном выражении присутствует positive look-ahead assertion, то кнопка "Заменить" работает аналогично кнопке "Найти", т.е. только подсвечивает найденное, но не заменяет. При этом кнопка "Заменить все" работает как надо.

[Added] Заглянул в скрипт и понял, что глюк не странный, а вполне закономерный. Сначала создается выделение, соответствующее искомому выражению, а потом замена производится в выделении, но т.к. тект соотвествующий positive look-ahead assertion не включается в выделение, то соотвествие пропадает. С negative look-ahead assertion соотвествие сохряняется.
Back to top
View user's profile Send private message
Xephon



Joined: 03 Jun 2008
Posts: 123

PostPosted: Thu Oct 09, 2008 12:26 am    Post subject: Reply with quote

Поправил скрипт, чтобы кнопка "Заменить" работала, когда присутствует 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
View user's profile Send private message
Xephon



Joined: 03 Jun 2008
Posts: 123

PostPosted: Thu Oct 09, 2008 1:01 pm    Post subject: Reply with quote

Поиск и одиночная замена не работают, если в регулярном выражении нет ничего, кроме look-ahead assertion, т.к. при этом выделение пустое. Есть функция, позволяющая из скрипта помещать курсор в заданную позицию?
Back to top
View user's profile Send private message
LEN



Joined: 21 Aug 2008
Posts: 28

PostPosted: Sat Nov 08, 2008 8:28 pm    Post subject: Перекодировка русских SMS Reply with quote

GSM модем (Nokia D211) ноутбука может получать SMS'ки, но русские буквы показываются кракозябрами. Оказалось, что их код получен по принципу: hex=ANSI-80h.

Хотелось бы иметь плагин, выполняющий обратную перекодировку ВЫДЕЛЕННОГО текста: ANSI=hex+80h, но не хочется разбираться с тонкостями написания скриптов.

Может кто поможет?
Back to top
View user's profile Send private message
Fr0sT



Joined: 24 Jul 2007
Posts: 876

PostPosted: Wed Nov 26, 2008 7:47 am    Post subject: Reply with quote

Посмотрел на скрипт SearchReplace и понял, что с помощью данного плагина можно фактически написать на JS новый Акель))
Единственное замечание: там в конце куча if-ов, туда так и просится switch.
Back to top
View user's profile Send private message
Infocatcher



Joined: 06 Aug 2007
Posts: 1602

PostPosted: Tue Mar 10, 2009 8:38 pm    Post subject: Reply with quote

scriptToBookmarklet.js
Делает из нормально написанного скрипта букмарклет: удаляет переносы строк и комментарии.
Результат копируется в буфер обмена.

Если в 17-й строке заменить
scriptToBookmarklet(false);
на
scriptToBookmarklet(true);
, то дополнительно производится замена любой последовательности пробельных символов на один пробел (что нужно учитывать при написании кода).

P.S. Для того, чтобы не происходило удаление штук вида «http://abc», за комментарии считаются только «//» после любого пробельного символа.

[UPD]
Добавил восстановление выделения.
Back to top
View user's profile Send private message
Infocatcher



Joined: 06 Aug 2007
Posts: 1602

PostPosted: Wed Mar 11, 2009 10:44 pm    Post subject: Reply with quote

encodeHTML.js
Заменяет символы <, >, & и " на &lt;, &gt;, &amp; и &quot; соответственно.

decodeHTML.js
Осуществляет обратную замену.

P.S. Если в ближайшее время не всплывут какие-нибудь глюки, или не окажется, что я что-то забыл, добавлю скрипты в сборник. Smile
Back to top
View user's profile Send private message
Paulus



Joined: 29 Nov 2007
Posts: 15
Location: St. Petersburg

PostPosted: Fri Mar 13, 2009 1:58 pm    Post subject: Reply with quote

я установил плугин "scripts", зарегистрировал его батником, но теперь при запуске любого скрипта вылезает сообщение: akelpad's window not found ... видимо ему надо чтобы akelpad был запущен, но ведь он запущен, в чем же дело?
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   This topic is locked: you cannot edit posts or make replies.    AkelPad Forum Index -> Plugins All times are GMT
Goto page Previous  1, 2, 3, 4, 5 ... 95, 96, 97  Next
Page 4 of 97

 
Jump to:  
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


SourceForge.net Logo Powered by phpBB © 2001, 2005 phpBB Group