Scripts discussion (1)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Paulus
Какая версия AkelPad'а и Scripts плагина? Запуск скрипта производился из Scripts плагина?

Offline
Posts: 15
Joined: Thu Nov 29, 2007 2:15 pm
Location: St. Petersburg

Post by Paulus »

Instructor wrote: Какая версия Scripts плагина?
была старая... теперь всё работает.

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

Post by Infocatcher »

Немного дополнил. :roll:

scriptToBookmarklet.js
[-] Скорее всего, в Windows 2000 скрипт покажет кукиш (флаг m и нежадные квантификаторы)...
[*] Должно лучше обрабатывать многострочные комментарии.
[+] «Тихое» копирование заменено на вывод диалога.

Ну, и для Windows 2000:
scriptToBookmarklet_w2k.js
Вот только возможности проверить работоспособность в ближайшее время не предвидится.

P.S. Сервер отдает файлы как utf-8, тогда как настоящая кодировка – windows-1251.

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

Post by Infocatcher »

Исправил выделение текста: encodeHTML.js, decodeHTML.js.

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

Post by Infocatcher »

scriptToBookmarklet.js (Windows XP+)
scriptToBookmarklet_w2k.js (Windows 2000+)
Добавлена возможность запуска через

Code: Select all

Call("Scripts::Main", 1, "scriptToBookmarklet.js", "-savespaces", 0)
для сохранения пробелов.

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

Post by Infocatcher »

highlighter.js
Теперь можно указывать расширение в параметрах запуска скрипта:

Code: Select all

Call("Scripts::Main", 1, "highlighter.js", "html", 0)
[UPD]
Заменил encodeHTML.js и decodeHTML.js на convertHTML.js:

Code: Select all

Call("Scripts::Main", 1, "convertHTML.js", "-encode", 0)
– кодировать HTML

Code: Select all

Call("Scripts::Main", 1, "convertHTML.js", "", 0)
– декодировать HTML

Или можно править значение параметра

Code: Select all

var useDecode = true;
(Аргумент "-encode" имеет больший приоритет.)

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

Post by Infocatcher »

highlighter.js
Для .highlight файлов теперь предлагается первое расширение из настроек подсветки (удобно тестировать и редактировать подсветку).


getLinks.js
Вытаскивает ссылки из текста.
Делалось от нечего делать, но, может, кому пригодится. Правда, скрипт особо не тестировался на богатых ссылками текстах. :)

P.S. Кстати, хотелось бы видеть такое же поведение у плагина LinkExtract – чтобы результат выдавался в новом окне, а не замещал текущий текст.

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

Post by Infocatcher »

Таки не прошло и года. :D

toggleComments.js
Комментирует выделенные строки / текущую строку / выделенный текст.
При наличии комментирования – снимает его.

Умеет работать с одно- и многострочными комментариями.
Сами комментарии выбираются в зависимости от расширения редактируемого файла, список известных расширений можно дополнять.
Удаляет комментарии вида «///комментарий» и «/***комментарий***/».

Умеет распознавать «вложенные» области с другим типом комментирования (например, блоки <script> и <style> в HTML). Распознавалка также может правиться и дополняться.

Также возможно опциональное добавление пробелов после комментирующих символов.
Для отключения (помимо прямого указания в коде) можно использовать запуск в виде

Code: Select all

Call("Scripts::Main", 1, "toggleComments.js", "-nospaces", 0)
Вроде, ничего не забыл. :)

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

Post by VladSh »

Infocatcher
Здравствуйте!

О5 Вас побеспокою по нескольким вопросам:

1. punctuationFixer.js.

Ситуация

Code: Select all

выпвар- варвпр
не исправляется вообще,

а ситуация

Code: Select all

выпвар -варвпр
преобразуется в

Code: Select all

выпвар  – варвпр
т.е. перед дефисом образуется 2 пробела.
Само проще переделать, наверное, количество пробелов корректировать уже после этой замены.

Ещё у меня к Вам просьба - вынести замену "тире на дефис" в отдельный replace и поставить там коммент, чтобы его можно было легко найти и закоментить, если, допустим, кто-то не использует такую замену.


2 а в toggleComments.js добавьте пожалуйста виды комментариев для *.lss, чтобы не забылось.
- однострочный - символ ' (как и в *.vbs);
- блоковый:

Code: Select all

%REM
   ...
   ...
%END REM

3. getLinks.js сейчас, к сожалению, работает только для http. Можно ли сделать, чтобы скриптом учитывались все префиксы из настроек программы (вкладка "Дополнительно")?


С уважением!

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

Post by Infocatcher »

VladSh wrote:1. punctuationFixer.js
Я тут уже начал потихоньку все переделывать:
_punctuationFixer.js
Комментариев стало чуть больше. :)
Пока пусть будут сразу оба, но потом, я думаю, останется только один. :D
Ещё у меня к Вам просьба - вынести замену "тире на дефис" в отдельный replace и поставить там коммент, чтобы его можно было легко найти и закоментить, если, допустим, кто-то не использует такую замену.
В старой версии тире задавалось в виде параметра:

Code: Select all

new PunctuationFixer("\u2013")
– можно задать "-".

В новой – задается в самом начале.
2 а в toggleComments.js добавьте пожалуйста виды комментариев для *.lss, чтобы не забылось.
Добавил.

Да, все же я кое-что забыл.
Еще скрипт умеет удалять несколько вариантов комментирования (например, { ... } и (* ... *) в Pascal/Delphi).

3. getLinks.js сейчас, к сожалению, работает только для http. Можно ли сделать, чтобы скриптом учитывались все префиксы из настроек программы (вкладка "Дополнительно")?
Сейчас за ссылку считается примерно следующее:
<буквы_от_a_до_z>://<не_пробелы>
С некоторыми ограничениями.

А вытаскивать ссылки по абстрактному протоколу довольно сложно – может натаскать лишнего.
Хотя можно попробовать нечто вроде

Code: Select all

/[a-z]+:[^\s'"]+/i
[a-z]+ – один и более символ от a до z
[^\s'"]+ – все, кроме пробельных символов и кавычек (тоже хотя бы один символ)

Пока что добавил mailto:...@... (опять же, в ближайшее время могут случиться интернациональные домены навроде http://пример.испытание/) и убрал необходимость наличия точки в имени «домена» (у меня не определялось «chrome://browser/content/browser.xul» – тоже, в общем-то, ссылка).
В любом случае надо видеть, какая именно ссылка не определяется. :)
Надо подумать над ограничениями, накладываемыми на ссылки...

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

Post by Infocatcher »

_punctuationFixer.js
Подправил расстановку пробелов вокруг тире в районе скобок:
text-(text -> text - (text
text)-text -> text) - text

А также сделал обрамление смайликов пробелами.
И засунул аббревиатуры, написанные строчными буквами, в исключения.

[UPD]
Изменил определение ссылок (они исключаются из обработки) – посмотрим, что из этого выйдет. :)

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

Post by VladSh »

Infocatcher

Оперативно! 8)

1. _punctuationFixer.js - обнаружились ещё некоторые баги:

- в скобках перед последней скобкой и точкой ставится пробел, пример: (... и проч. )
- в десятичных 1,5 выглядит как 1, 5.

2. toggleComments.js:

- не снимается блочный комментарий (пределах одного скрипта сделать это, понятно, трудно... по моему, для снятия комментов лучше сделать отдельный скрипт, как было у меня);
- при проставлении блочного коммента не производится сдвиг текста вправо /упс, это я перепутал с CtrlDown)))/.

3. getLinks.js - здесь, скороее, не баги, а фичи:

- ссылка понимается только если она начинается с символа в нижнем регистре. Если первым символом идёт большая буква, то она обрезается. /Если это трудно поправить, то буду конечно корректировать ссылки... Среда-зараза, в которой я работаю, автоматом генерит ссылки, в которых протокол с большой буквы, и никак на это не повлиять.../(
- не обрабатываются сетевые пути, т.е. всё, что ничинается с "\\".

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

Post by Infocatcher »

VladSh wrote:1. _punctuationFixer.js
[кусь]
- в скобках перед последней скобкой и точкой ставится пробел, пример: (... и проч. )
Подправил, правда, не факт, что всё. :)
- в десятичных 1,5 выглядит как 1, 5.
Исключил числа с дробной частью из обработки.
2. toggleComments.js:

- не снимается блочный комментарий (пределах одного скрипта сделать это, понятно, трудно... по моему, для снятия комментов лучше сделать отдельный скрипт, как было у меня);
Пример в студию!
Хотя некорректная обработка при выделении нескольких блочных комментариев действительно имела место быть – исправил.
Теперь

Code: Select all

var ignoreBlockCommentsInSel = true;
Разрешает дальнейшую обработку при выделении нескольких блочных комментариев. При false выдаст сообщение и ничего комментировать не будет.

Ну а скрипты разделять – если только с точки зрения увеличения производительности. А то комментарии внутри комментариев далеко не все компиляторы / интерпретаторы переваривают, а мы тут возьмем и случайно лишнего накомментируем. :D

Вот такая простая проверка:

Code: Select all

	var comments = new Comments(
		ext, commentsSets, commentsMultipleSets,
		cmmParams,
		addSpaces, commentsMultipleEnabled
	);
	selParams = comments.toggleComments(selParams);
заменяем на

Code: Select all

	var d0 = new Date();
	var comments = new Comments(
		ext, commentsSets, commentsMultipleSets,
		cmmParams,
		addSpaces, commentsMultipleEnabled
	);
	selParams = comments.toggleComments(selParams);
	WScript.Echo(new Date() - d0);
У меня больше 50 миллисекунд не выдает – для файлов разумных размеров, разумеется. Так что основное время, видимо, уходит на запуск wscript.exe. Или на интерпретацию кода. Только вот как отделить одно от другого, я не знаю.
Ну, и, скажем,

Code: Select all

messageBox(locale.getStr("blockCommentsInSel"));
на время проверки лучше закомментировать.

3. getLinks.js
[кусь]
- ссылка понимается только если она начинается с символа в нижнем регистре. Если первым символом идёт большая буква, то она обрезается.
Подправил. Всего-то нужно было добавить к регулярному выражению флаг «i». :)
- не обрабатываются сетевые пути, т.е. всё, что ничинается с "\".
Хотелось бы видеть пример ссылки.

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

Post by VladSh »

Побуду-ка ещё бета-тестером :D

1. _punctuationFixer.js:

а). Между закрывающейся скобкой и символами : ; , вставляется пробел (что интересно - перед точкой не вставляется):

Code: Select all

текст):  ->  текст) :
б). Между дефисом и закрывающим уголком '>' вставляется пробел
Я часто пользуюсь символом следования из математики '->', а после преобразования получается '– >'.

в). После отработки скрипта весть текст остаётся выделенным (если обрабатывался весь файл). Лучше, конечно же, для наглядности после отработки скрипта устанавливать курсор в место последнего изменения, но из простоты можно просто переводить курсор на строку ниже первоначального положения, чтобы было видно, что скрипт отработал.

Да, ещё (интересно просто), почему файл скрипта начинается с подчёркивания?

2. toggleComments.js:
Infocatcher wrote:У меня больше 50 миллисекунд не выдает – для файлов разумных размеров, разумеется. Так что основное время, видимо, уходит на запуск wscript.exe. Или на интерпретацию кода. Только вот как отделить одно от другого, я не знаю.
Это да... Мне сейчас достался ноут - 2-й Celeron, 600MHz, 128 ОЗУ, с установленной XP, - я полностью прочувствовал, как запускаются скрипты :-) :-(

Но я немного о другом - чтобы было 2 скрипта: один проставляет комменты, а другой снимает. Тогда их можно посадить на 2 разные комбинации клавиш.
Снятие блочных комментов, собственно, хоть и по простому, но уже реализовано - просто тыкаешь курсором куда-то в середину закоментированного блока, а скрипт уже сам находит где открывающийся, а где закрывающийся "тэги", и снимает их.
Я просто думал, что Ваш скрипт также и снимает их - тогда лучше разделять.

По имеющемуся скрипту: если тыкнуть просто в строчку с кодом, ничего не выделяя, мне кажется, раньше было проставлении обычного комментария //, сейчас же вставляется /**/. Думаю, стоит вернуть обратно, т.к. в наборе символов /**/ особого смысла нет. Другое дело, если в строке что-то выделено, - тогда да!

3. getLinks.js:

Ссылкой это, конечно, трудно назвать - обычный сетевой путь; пример:

Code: Select all

\\Store\softstore\drivers
но в настройках проги в "Префиксах" я добавил \\ и теперь этот "текст" работает как ссылка, т.е. при клике в окне explorer'а открывается указанная дирректория. Удобно 8)

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

Post by Infocatcher »

VladSh wrote:Побуду-ка ещё бета-тестером :D
Да-да, так оно гораздо быстрее правится. :)
1. _punctuationFixer.js:

а). Между закрывающейся скобкой и символами : ; , вставляется пробел (что интересно - перед точкой не вставляется):
Таки да:
.replace(/[\t ]*\)[\t ]*([^.!?])/g, ") $1"); // text)text -> text) text
[\t ] – символ табуляции или пробел
[\t ]* – любое количество таких символов
\) – скобка
[^.!?] – любой символ, кроме «.», «!» и «?» (а : ; , тут как раз и не учитываются :))
([^.!?]) – запоминает то, что в скобках (вместо $1 – первая пара скобок – будет подставлено совпавшее с этой маской выражение)
Вот так. :)
б). Между дефисом и закрывающим уголком '>' вставляется пробел
Тогда не будем обрабатывать конструкции вида
«->», «=>», «==>», «<=>»
в). После отработки скрипта весть текст остаётся выделенным (если обрабатывался весь файл). Лучше, конечно же, для наглядности после отработки скрипта устанавливать курсор в место последнего изменения, но из простоты можно просто переводить курсор на строку ниже первоначального положения, чтобы было видно, что скрипт отработал.
Если только втыкать на место курсора маркер в виде псевдослучайной строки, а потом его удалять и ставить туда курсор. Последнее изменение при таком раскладе выделить проще (точнее, это не должно сказаться на работе предыдущих замен). А вот что делать с положением прокрутки, я не знаю.
По-другому никак, видимо – пересчитывать положение при заменах весьма проблемно и может сказаться на быстродействии.
Да, ещё (интересно просто), почему файл скрипта начинается с подчёркивания?
Ну, punctuationFixer.js пока что тоже есть. :D
А вообще, у меня сейчас почти все свои скрипты так названы – чтобы выделялись.
Это да... Мне сейчас достался ноут - 2-й Celeron, 600MHz, 128 ОЗУ, с установленной XP, - я полностью прочувствовал, как запускаются скрипты :-) :-(
Нда, жестоко...
Я просто думал, что Ваш скрипт также и снимает их - тогда лучше разделять.
Да, вроде, снимает он – комментарии эти, если видит.
Хотя можно попробовать приделать запуск с параметрами – для разделения функций.
По имеющемуся скрипту: если тыкнуть просто в строчку с кодом, ничего не выделяя, мне кажется, раньше было проставлении обычного комментария //, сейчас же вставляется /**/. Думаю, стоит вернуть обратно, т.к. в наборе символов /**/ особого смысла нет. Другое дело, если в строке что-то выделено, - тогда да!
Там какбэ не написано «вставить сюда /**/». :) К тому же, я не могу это воспроизвести – если возможны оба типа комментирования, у меня комментируется текущая строка в виде
//вся строка до конца
3. getLinks.js:

Ссылкой это, конечно, трудно назвать - обычный сетевой путь; пример:

Code: Select all

\\Store\softstore\drivers
Если не учитывать, что, скажем, локализованный Total Commander умеет нечто вроде

Code: Select all

\\\Редактор реестра\HKEY_CURRENT_USER\
, то это лечится. Добавил – вроде, работает.

Надо бы сделать текстовый файлик с разными хитрыми ссылками для тестирования... :roll:

__________________________________________

toggleComments.js
Сообщение «Выделено несколько блочных комментариев» выдавалось при отключенной перерисовке (что было видно при перемещении окошка) – исправил.
Locked