Почему? Когда я вручную заменяю "AkelPad.GetSelText(2 /*\n*/);" на "AkelPad.GetSelText(/*2\n*/);" все работает.
Posted: Mon Aug 01, 2011 7:44 am
by Instructor
Xephon
Я про опцию "Многострочно".
Posted: Mon Aug 01, 2011 10:44 am
by Xephon
При отключенной опции "Многострочно" ^ соответствует началу файла, $ соответствует концу файла. При включенной - ^ соответствует началу каждой строки, $ соответствует концу каждой строки. Именно такое поведение и наблюдается с "AkelPad.GetSelText();", что я расцениваю, как "все работает". Или я чего-то не понимаю?
Posted: Mon Aug 01, 2011 1:58 pm
by Instructor
Xephon
Хм. Может версия jscript.dll у вас более новая - у меня на WinXP 5.7.0.16599 при "AkelPad.GetSelText();" с вкл. "Многострочно","С начала" и поиске "^.+$" - выделяет с начала до конца документа.
Posted: Mon Aug 01, 2011 2:23 pm
by Xephon
WinXP, jscript.dll 5.7.6002.22589
Раз такой глюк наблюдается, тогда не стоит ничего менять, т.к. это может навредить людям, у которых другая версия jscript.dll. Я продолжу менять скрипт вручную.
Instructor, я так быстро начал проверять версию jscript.dll, что на регулярное выражение почти и не посмотрел. "^.+$" - и должен выделять с начала до конца документа, ведь плюс - жадный квантификатор, а в отсутствие в тексте "\n", точку ничто не может остановить. Чтобы выделить одну строку, надо использовать "^.+?$" при включенной опции "Многострочно". При отключенной опции это выражение будет также выделять весь текст в файле.
Posted: Mon Aug 01, 2011 5:35 pm
by Xephon
В новом SearchReplace.js проблема размеров окна осталась. Указанные в "rcMinMaxDialogRect={left:400, top:234, right:0, bottom:234};" размеры похоже не масштабируются под другие dpi. Для 120 dpi нужно, чтобы было top:292, bottom:292. Плюс перестал сохраняться размер диалога.
Posted: Mon Aug 01, 2011 5:39 pm
by Instructor
Xephon wrote:В новом SearchReplace.js проблема размеров окна осталась.
Обновленный скрипт похоже на работе остался
Posted: Mon Aug 01, 2011 6:11 pm
by Instructor
Xephon
Сделано заново, скрипт залит. Не проверял - должно работать.
Posted: Mon Aug 01, 2011 6:44 pm
by Xephon
Instructor wrote:должно работать
Работоспособность подтверждаю.
Транслитерация
Posted: Wed Aug 03, 2011 5:05 pm
by uavso
Для перекодировки букв из русских в украинские и наоборот (прямая и обратная транслитерация _одним_ скриптом) попытался изменить скрипт транслитерации. Но не передается
pArraySource.length
и цикл не работает.
// Ru-Ua.js
// Convert keyboard layout Ua->Ru
//Options
var pArraySource=new Array("э","Э","Ы", "ы","Ъ","ъ","Ё","ё");
var pArrayTarget=new Array("є","Є","І", "і","Ї","ї","Ґ","ґ");
//Variables
var hMainWnd=AkelPad.GetMainWnd();
var nSelStart;
var nSelEnd;
var pSelText;
var pResult;
if (hMainWnd)
{
nSelStart=AkelPad.GetSelStart();
nSelEnd=AkelPad.GetSelEnd();
if (nSelStart == nSelEnd)
AkelPad.SetSel(0, -1);
pSelText=AkelPad.GetSelText();
pResult=ConvertLayout(pSelText, pArraySource, pArrayTarget);
AkelPad.ReplaceSel(pResult);
if (nSelStart == nSelEnd)
AkelPad.SetSel(0, -1);
else
AkelPad.SetSel(nSelStart, nSelStart + pResult.length);
}
//Functions
function ConvertLayout(pText, pArraySource, pArrayTarget)
{
var p,s;
var i,j;
s="";
for (j=0; j < pText.length; ++j)
{
p=pText[j];i=0;
while (i < pArraySource.length)
{
if (p=pArraySource[i]) {p=pArrayTarget[i];i=pArraySource.length;
//s=s+"|"+parseInt(i)+pArraySource[i];
//s=s+parseint(pArraySource.length)
//вот здесь возникает ошибка //////////////////////////////////
};
i=i+1;
}
//pText[j]=p;
s=s+p;
}
s="="+s+"="+parseInt(pArraySource.length);
//ptext=parseInt(pArraySource.length);
return s;//pText;
}
Posted: Wed Aug 03, 2011 5:28 pm
by uavso
конечно, для прямой и обратной перекодировки, массивы в предыдущем скрипте должны быть исправлены.
Но это не решает проблему, поскольку вообще замена правильно не идет
var pArraySource=new Array("э","Э","Ы", "ы","Ъ","ъ","Ё","ё","є","Є","І","і","Ї","ї","Ґ","ґ");
var pArrayTarget=new Array("є","Є","І", "і","Ї","ї","Ґ","ґ","э","Э","Ы","ы","Ъ","ъ","Ё","ё");
var pArraySource=new Array("э","Э","Ы", "ы","Ъ","ъ","Ё","ё","є","Є","І","і","Ї","ї","Ґ","ґ");
var pArrayTarget=new Array("є","Є","І", "і","Ї","ї","Ґ","ґ","э","Э","Ы","ы","Ъ","ъ","Ё","ё");