Scripts discussion (4)

Discuss and announce AkelPad plugins
  • Author
  • Message
Offline
Posts: 278
Joined: Mon Jun 20, 2011 8:33 am
Location: Электросталь

Post by yozhic »

texter, и TextReplacer.js тоже крашит AkelPad при вызове команд с использованием LogHighlight.js. Или крашит, или появляется alert от LogHighlight с сообщениями «Текст не выделен», «Консоль закрыта» и напрочь замораживает окно AkelPad так, что приходится вырубать его из диспетчера.

И ещё: RenameFileAs.js от Kley Вы специально взяли старую версию 2015-10-07? Последняя у него 2016-05-25.

Offline
Posts: 278
Joined: Mon Jun 20, 2011 8:33 am
Location: Электросталь

Post by yozhic »

Эх, похоже, я немного поторопился радоваться новому SearchReplace_extended.js: подсветка совпадений в консоли после нескольких запусков перестала работать по непонятной причине, а в интерфейсе окошка стали периодически исчезать radio-переключатели...
Image

Offline
Posts: 348
Joined: Mon Jun 03, 2019 2:33 am

Post by AZJIO »

yozhic
Попробуй как у тебя работает моя сборка. Вот оригинал LogHighLight.js если что. Он есть и в моей сборке.

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

Всем привет, давно не заходил, подскажите есть ли скрипт форматирования xml - чтобы из однострочный файл преобразовать в структуру.
Файлы до и после в архиве.
Если есть подобное для html и js тоже будет хорошо
xml.zip

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

Andrey_A_A wrote:...скрипт форматирования xml ... для html и js тоже будет хорошо
Для JS -- jsBeautifier.js от Infocatcher
Для XML/HTML -- специальных кажется нет, но есть "обертки" для использования Tidy от VladSh (сам Tidy прячется тут http://www.html-tidy.org/).
Оба скрипта есть в актуальных авторских коллекциях.

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

opk44, спасибо за наводку, думал есть готовые решения, чтобы не писать самому.. Нашёл пример реализации на Autoit через MSXML.
По любому спасибо.

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

opk44 wrote:Для JS -- jsBeautifier.js от Infocatcher
jsBeautifier.js в том числе поддерживает и HTML (и как следствие, на первый взгляд, приемлемо работает и с XML).

Offline
Posts: 3234
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

opk44 wrote:Для XML/HTML -- специальных кажется нет, но есть "обертки" для использования Tidy от VladSh (сам Tidy прячется тут http://www.html-tidy.org/).
Там такая история...
Стояла у меня какая-то старая версия, которая работала. Потом, спустя много лет, я один раз обновил саму утилиту tidy, потом другой, и закончилось тем, что я так и не смог потом заставить это работать. Какие-то серьёзные изменения разработчиком (он там не стесняется менять API, - от версии к версии об обратной совместимости говорить не приходится), которые сильно затронули формат вызова и флаги. Несколько дней я пытался подобрать флаги, но так ничего и не получилось. Там, где раньше код генерировался без ошибок, теперь валится множество ошибок и предупреждений.
Т.о. этот вариант на данный момент не рабочий, я им сам не пользуюсь.
Если кто-то подхватит и разберётся, будет очень хорошо. Но брать из моей сборки tidy и затачиваться на ту версию не имеет смысла, - сейчас API более-менее стабилизировался (последний релиз - июль этого года, и с августа больше коммитов нет), так что лучше восстанавливать работоспособность под неё.

Offline
Posts: 3234
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

AZJIO
Ссылки по Вашим сообщениям 1 и 2 добавлены, правки внесены. Спасибо.

Offline
Posts: 3234
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

tidy

Post by VladSh »

И снова по поводу tidy.js.
Как оказалось, скрипт работает! Я перепробовал exe и dll версий 5.8.0 (stable) и tidy-5.9.14 (pre-release) и оказалось, что та гора ошибок, которые выдавал старый tydy, ушла. Видимо старые версии просто не поддерживали новую html5-вёрстку, а я подумал, что оно не работает...

Осталось непонятное - 'line 51 column 103 - Warning: unescaped & or unknown entity "&hl"' на строке:

Code: Select all

		<li id="navextra2"><a href="//google.com/cse/home?cx=005032125877213764876:7_djx8ukuso&hl=ru">Поиск |Google</a></li>
Вертикальной палкой указал позицию курсора. Да, "&hl" есть, но не на позиции 103, а в href. Это известный баг.
Плохо, что это предупреждение мешает выполнить форматирование с помощью tydy. Может конечно есть флаг, который отключает предупреждения валидации при форматировании...
Если кто знает, подскажите, буду очень благодарен.

Но вообще связка tydy.js + tydy работает. Её даже AZJIO использует в свое сборке.

Offline
Posts: 3234
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Infocatcher
Взял код отключения скрола из скрипта converter.js, а он оказывается не работает...
Нашёл рабочий код у камрада KDJ :)

Переписал свой как-то так:

Code: Select all

var sText = "трам-парам-пам-пам...";

setRedraw(hWndEdit, false);
try {
	var lpPoint = AkelPad.MemAlloc(_X64 ? 16 :  8 /*sizeof(POINT)*/);
	if (lpPoint) {
		//AkelPad.SendMessage(hWndEdit, 1245 /*EM_GETSCROLLPOS*/, 0, lpPoint);
		AkelPad.SendMessage(hWndEdit, 3179 /*AEM_GETSCROLLPOS*/, 0, lpPoint);
		
		AkelPad.SetSel(0, -1);
		AkelPad.ReplaceSel(sText);
		
		//AkelPad.SendMessage(hWndEdit, 1246 /*EM_SETSCROLLPOS*/, 0, lpPoint);
		AkelPad.SendMessage(hWndEdit, 3180 /*AEM_SETSCROLLPOS*/, 0, lpPoint);
		AkelPad.MemFree(lpPoint);
	}
	else {
		AkelPad.SetSel(0, -1);
		AkelPad.ReplaceSel(sText);
	}
}
finally {
	setRedraw(hWndEdit, true);
}
Закомментированными, для наглядности, оставил нерабочие строки из converter.js.

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

VladSh wrote:Infocatcher
Взял код отключения скрола из скрипта converter.js, а он оказывается не работает...
Хм, странно. У меня, на первый взгляд, работает:

Code: Select all

var oSys = AkelPad.SystemFunction();

insertNoScroll(new Array(101).join("Test\n"));


function insertNoScroll(str, selectAll) {
	noScroll(function() {
		selectAll && AkelPad.SetSel(0, -1);
		//var ss = AkelPad.GetSelStart();
		AkelPad.ReplaceSel(str, true);
		//if(ss != AkelPad.GetSelStart())
		//	AkelPad.SetSel(ss, ss + str.length);
	});
}
function noScroll(func, hWndEdit) {
	if(!hWndEdit)
		hWndEdit = AkelPad.GetEditWnd();
	var lpPoint = AkelPad.MemAlloc(8 /*sizeof(POINT)*/);
	if(!lpPoint)
		return;
	setRedraw(hWndEdit, false);
	AkelPad.SendMessage(hWndEdit, 1245 /*EM_GETSCROLLPOS*/, 0, lpPoint);

	func();

	AkelPad.SendMessage(hWndEdit, 1246 /*EM_SETSCROLLPOS*/, 0, lpPoint);
	setRedraw(hWndEdit, true);
	AkelPad.MemFree(lpPoint);
}
function setRedraw(hWnd, bRedraw) {
	AkelPad.SendMessage(hWnd, 11 /*WM_SETREDRAW*/, bRedraw, 0);
	bRedraw && oSys.Call("user32::InvalidateRect", hWnd, 0, true);
}
Попробовал отключить +Call("Scroll::NoScroll") – все равно выглядит работающим.

Offline
Posts: 3234
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Infocatcher wrote:...все равно выглядит работающим.
Отсюда:
EM_* сообщения RichEdit'a. Посылаются окну редактирования. См. MSDN.
AEM_* сообщения AkelEdit'а. Посылаются окну редактирования. См. AkelEdit.h.
EM_* - это было давно; в том контексте применения, где API AkelEdit и RichEdit совпадают, оно будет работать, а где нет, то нет (вот как в моём случае).

Offline
Posts: 12
Joined: Tue May 05, 2020 11:39 pm

Post by Arhaall »

Господа, а никто не пробовал обновлять или модифицировать скрипт jsBeautifier.js от уважаемого Infocatcher? А то он (скрипт, а не Infocatcher конечно же) с приватными полями в классах работать не обучен и в результате их названия портит малость (убирает пробел перед # и ставит после #). Может кто мог-бы исправить это досадное недоразумение?

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

(отсюда)
Arhaall wrote:Господа, а никто не пробовал обновлять или модифицировать скрипт jsBeautifier.js от уважаемого Infocatcher? А то он (скрипт, а не Infocatcher конечно же) с приватными полями в классах работать не обучен и в результате их названия портит малость (убирает пробел перед # и ставит после #). Может кто мог-бы исправить это досадное недоразумение?
В разрабатываемой версии, основанной на более свежих оригинальных скриптах, должно работать корректно: https://github.com/Infocatcher/AkelPad_ ... f8fe793c8c
Post Reply