Scripts discussion (1)
- Author
- Message
-
Offline
- Posts: 124
- Joined: Tue Jun 03, 2008 10:32 pm
-
Offline
- Site Admin
- Posts: 6311
- Joined: Thu Jul 06, 2006 7:20 am
Ясно. В функции SetRedraw необходимо
заменить на
Code: Select all
oFunction.AddParameter(false);
Code: Select all
oFunction.AddParameter(true);
-
Offline
- Site Admin
- Posts: 6311
- Joined: Thu Jul 06, 2006 7:20 am
В новой версии SearchReplace.js вы можете для этого раскомментировать:Xephon wrote:Подскажите, а есть ли возможность при замене с помощью регулярных выражений проводить замену на табуляцию или символ новой строки? При подстановке \t в строку замены, замена происходит непосредственно на "\t", а не на табуляцию.
Code: Select all
pReplaceWithEsc=pReplaceWithEsc.replace(/(?:\\r\\n|\\r|\\n)/g, "\r");
pReplaceWithEsc=pReplaceWithEsc.replace(/\\t/g, "\t");
-
Offline
- Posts: 124
- Joined: Tue Jun 03, 2008 10:32 pm
-
Offline
- Posts: 1862
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
Гм, по-моему, лучше вот так: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");
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.
);
-
Offline
- Site Admin
- Posts: 6311
- Joined: Thu Jul 06, 2006 7:20 am
-
Offline
- Posts: 124
- Joined: Tue Jun 03, 2008 10:32 pm
Обнаружил странный глюк: когда в регулярном выражении присутствует positive look-ahead assertion, то кнопка "Заменить" работает аналогично кнопке "Найти", т.е. только подсвечивает найденное, но не заменяет. При этом кнопка "Заменить все" работает как надо.
[Added] Заглянул в скрипт и понял, что глюк не странный, а вполне закономерный. Сначала создается выделение, соответствующее искомому выражению, а потом замена производится в выделении, но т.к. тект соотвествующий positive look-ahead assertion не включается в выделение, то соотвествие пропадает. С negative look-ahead assertion соотвествие сохряняется.
[Added] Заглянул в скрипт и понял, что глюк не странный, а вполне закономерный. Сначала создается выделение, соответствующее искомому выражению, а потом замена производится в выделении, но т.к. тект соотвествующий positive look-ahead assertion не включается в выделение, то соотвествие пропадает. С negative look-ahead assertion соотвествие сохряняется.
-
Offline
- Posts: 124
- Joined: Tue Jun 03, 2008 10:32 pm
Поправил скрипт, чтобы кнопка "Заменить" работала, когда присутствует 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;
}
...
//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;
}
-
Offline
- Posts: 30
- Joined: Thu Aug 21, 2008 9:31 pm
Перекодировка русских SMS
GSM модем (Nokia D211) ноутбука может получать SMS'ки, но русские буквы показываются кракозябрами. Оказалось, что их код получен по принципу: hex=ANSI-80h.
Хотелось бы иметь плагин, выполняющий обратную перекодировку ВЫДЕЛЕННОГО текста: ANSI=hex+80h, но не хочется разбираться с тонкостями написания скриптов.
Может кто поможет?
Хотелось бы иметь плагин, выполняющий обратную перекодировку ВЫДЕЛЕННОГО текста: ANSI=hex+80h, но не хочется разбираться с тонкостями написания скриптов.
Может кто поможет?
-
Offline
- Posts: 1862
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
scriptToBookmarklet.js
Делает из нормально написанного скрипта букмарклет: удаляет переносы строк и комментарии.
Результат копируется в буфер обмена.
Если в 17-й строке заменить
scriptToBookmarklet(false);
на
scriptToBookmarklet(true);
, то дополнительно производится замена любой последовательности пробельных символов на один пробел (что нужно учитывать при написании кода).
P.S. Для того, чтобы не происходило удаление штук вида «http://abc», за комментарии считаются только «//» после любого пробельного символа.
[UPD]
Добавил восстановление выделения.
Делает из нормально написанного скрипта букмарклет: удаляет переносы строк и комментарии.
Результат копируется в буфер обмена.
Если в 17-й строке заменить
scriptToBookmarklet(false);
на
scriptToBookmarklet(true);
, то дополнительно производится замена любой последовательности пробельных символов на один пробел (что нужно учитывать при написании кода).
P.S. Для того, чтобы не происходило удаление штук вида «http://abc», за комментарии считаются только «//» после любого пробельного символа.
[UPD]
Добавил восстановление выделения.
-
Offline
- Posts: 1862
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
encodeHTML.js
Заменяет символы <, >, & и " на <, >, & и " соответственно.
decodeHTML.js
Осуществляет обратную замену.
P.S. Если в ближайшее время не всплывут какие-нибудь глюки, или не окажется, что я что-то забыл, добавлю скрипты в сборник.
Заменяет символы <, >, & и " на <, >, & и " соответственно.
decodeHTML.js
Осуществляет обратную замену.
P.S. Если в ближайшее время не всплывут какие-нибудь глюки, или не окажется, что я что-то забыл, добавлю скрипты в сборник.
-
Offline
- Posts: 15
- Joined: Thu Nov 29, 2007 2:15 pm
- Location: St. Petersburg