Scripts discussion (1)
- Author
- Message
-
Offline
- Posts: 1862
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
Немного дополнил.
scriptToBookmarklet.js
[-] Скорее всего, в Windows 2000 скрипт покажет кукиш (флаг m и нежадные квантификаторы)...
[*] Должно лучше обрабатывать многострочные комментарии.
[+] «Тихое» копирование заменено на вывод диалога.
Ну, и для Windows 2000:
scriptToBookmarklet_w2k.js
Вот только возможности проверить работоспособность в ближайшее время не предвидится.
P.S. Сервер отдает файлы как utf-8, тогда как настоящая кодировка – windows-1251.
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:
Исправил выделение текста: encodeHTML.js, decodeHTML.js.
-
Offline
- Posts: 1862
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
scriptToBookmarklet.js (Windows XP+)
scriptToBookmarklet_w2k.js (Windows 2000+)
Добавлена возможность запуска черездля сохранения пробелов.
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:
highlighter.js
Теперь можно указывать расширение в параметрах запуска скрипта:
[UPD]
Заменил encodeHTML.js и decodeHTML.js на convertHTML.js:
– кодировать HTML
– декодировать HTML
Или можно править значение параметра
(Аргумент "-encode" имеет больший приоритет.)
Теперь можно указывать расширение в параметрах запуска скрипта:
Code: Select all
Call("Scripts::Main", 1, "highlighter.js", "html", 0)
Заменил encodeHTML.js и decodeHTML.js на convertHTML.js:
Code: Select all
Call("Scripts::Main", 1, "convertHTML.js", "-encode", 0)
Code: Select all
Call("Scripts::Main", 1, "convertHTML.js", "", 0)
Или можно править значение параметра
Code: Select all
var useDecode = true;
-
Offline
- Posts: 1862
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
highlighter.js
Для .highlight файлов теперь предлагается первое расширение из настроек подсветки (удобно тестировать и редактировать подсветку).
getLinks.js
Вытаскивает ссылки из текста.
Делалось от нечего делать, но, может, кому пригодится. Правда, скрипт особо не тестировался на богатых ссылками текстах.
P.S. Кстати, хотелось бы видеть такое же поведение у плагина LinkExtract – чтобы результат выдавался в новом окне, а не замещал текущий текст.
Для .highlight файлов теперь предлагается первое расширение из настроек подсветки (удобно тестировать и редактировать подсветку).
getLinks.js
Вытаскивает ссылки из текста.
Делалось от нечего делать, но, может, кому пригодится. Правда, скрипт особо не тестировался на богатых ссылками текстах.
P.S. Кстати, хотелось бы видеть такое же поведение у плагина LinkExtract – чтобы результат выдавался в новом окне, а не замещал текущий текст.
-
Offline
- Posts: 1862
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
Таки не прошло и года.
toggleComments.js
Комментирует выделенные строки / текущую строку / выделенный текст.
При наличии комментирования – снимает его.
Умеет работать с одно- и многострочными комментариями.
Сами комментарии выбираются в зависимости от расширения редактируемого файла, список известных расширений можно дополнять.
Удаляет комментарии вида «///комментарий» и «/***комментарий***/».
Умеет распознавать «вложенные» области с другим типом комментирования (например, блоки <script> и <style> в HTML). Распознавалка также может правиться и дополняться.
Также возможно опциональное добавление пробелов после комментирующих символов.
Для отключения (помимо прямого указания в коде) можно использовать запуск в виде
Вроде, ничего не забыл.
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:
Infocatcher
Здравствуйте!
О5 Вас побеспокою по нескольким вопросам:
1. punctuationFixer.js.
Ситуация не исправляется вообще,
а ситуация преобразуется в т.е. перед дефисом образуется 2 пробела.
Само проще переделать, наверное, количество пробелов корректировать уже после этой замены.
Ещё у меня к Вам просьба - вынести замену "тире на дефис" в отдельный replace и поставить там коммент, чтобы его можно было легко найти и закоментить, если, допустим, кто-то не использует такую замену.
2 а в toggleComments.js добавьте пожалуйста виды комментариев для *.lss, чтобы не забылось.
- однострочный - символ ' (как и в *.vbs);
- блоковый:
3. getLinks.js сейчас, к сожалению, работает только для http. Можно ли сделать, чтобы скриптом учитывались все префиксы из настроек программы (вкладка "Дополнительно")?
С уважением!
Здравствуйте!
О5 Вас побеспокою по нескольким вопросам:
1. punctuationFixer.js.
Ситуация
Code: Select all
выпвар- варвпр
а ситуация
Code: Select all
выпвар -варвпр
Code: Select all
выпвар – варвпр
Само проще переделать, наверное, количество пробелов корректировать уже после этой замены.
Ещё у меня к Вам просьба - вынести замену "тире на дефис" в отдельный 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:
Я тут уже начал потихоньку все переделывать:VladSh wrote:1. punctuationFixer.js
_punctuationFixer.js
Комментариев стало чуть больше.
Пока пусть будут сразу оба, но потом, я думаю, останется только один.
В старой версии тире задавалось в виде параметра:Ещё у меня к Вам просьба - вынести замену "тире на дефис" в отдельный 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
[^\s'"]+ – все, кроме пробельных символов и кавычек (тоже хотя бы один символ)
Пока что добавил mailto:...@... (опять же, в ближайшее время могут случиться интернациональные домены навроде http://пример.испытание/) и убрал необходимость наличия точки в имени «домена» (у меня не определялось «chrome://browser/content/browser.xul» – тоже, в общем-то, ссылка).
В любом случае надо видеть, какая именно ссылка не определяется.
Надо подумать над ограничениями, накладываемыми на ссылки...
-
Offline
- Posts: 1862
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
_punctuationFixer.js
Подправил расстановку пробелов вокруг тире в районе скобок:
text-(text -> text - (text
text)-text -> text) - text
А также сделал обрамление смайликов пробелами.
И засунул аббревиатуры, написанные строчными буквами, в исключения.
[UPD]
Изменил определение ссылок (они исключаются из обработки) – посмотрим, что из этого выйдет.
Подправил расстановку пробелов вокруг тире в районе скобок:
text-(text -> text - (text
text)-text -> text) - text
А также сделал обрамление смайликов пробелами.
И засунул аббревиатуры, написанные строчными буквами, в исключения.
[UPD]
Изменил определение ссылок (они исключаются из обработки) – посмотрим, что из этого выйдет.
-
Offline
- Posts: 3217
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
Infocatcher
Оперативно!
1. _punctuationFixer.js - обнаружились ещё некоторые баги:
- в скобках перед последней скобкой и точкой ставится пробел, пример: (... и проч. )
- в десятичных 1,5 выглядит как 1, 5.
2. toggleComments.js:
- не снимается блочный комментарий (пределах одного скрипта сделать это, понятно, трудно... по моему, для снятия комментов лучше сделать отдельный скрипт, как было у меня);
- при проставлении блочного коммента не производится сдвиг текста вправо /упс, это я перепутал с CtrlDown)))/.
3. getLinks.js - здесь, скороее, не баги, а фичи:
- ссылка понимается только если она начинается с символа в нижнем регистре. Если первым символом идёт большая буква, то она обрезается. /Если это трудно поправить, то буду конечно корректировать ссылки... Среда-зараза, в которой я работаю, автоматом генерит ссылки, в которых протокол с большой буквы, и никак на это не повлиять.../(
- не обрабатываются сетевые пути, т.е. всё, что ничинается с "\\".
Оперативно!
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:
Подправил, правда, не факт, что всё.VladSh wrote:1. _punctuationFixer.js
[кусь]
- в скобках перед последней скобкой и точкой ставится пробел, пример: (... и проч. )
Исключил числа с дробной частью из обработки.- в десятичных 1,5 выглядит как 1, 5.
Пример в студию!2. toggleComments.js:
- не снимается блочный комментарий (пределах одного скрипта сделать это, понятно, трудно... по моему, для снятия комментов лучше сделать отдельный скрипт, как было у меня);
Хотя некорректная обработка при выделении нескольких блочных комментариев действительно имела место быть – исправил.
Теперь
Code: Select all
var ignoreBlockCommentsInSel = true;
Ну а скрипты разделять – если только с точки зрения увеличения производительности. А то комментарии внутри комментариев далеко не все компиляторы / интерпретаторы переваривают, а мы тут возьмем и случайно лишнего накомментируем.
Вот такая простая проверка:
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);
Ну, и, скажем,
Code: Select all
messageBox(locale.getStr("blockCommentsInSel"));
Подправил. Всего-то нужно было добавить к регулярному выражению флаг «i».3. getLinks.js
[кусь]
- ссылка понимается только если она начинается с символа в нижнем регистре. Если первым символом идёт большая буква, то она обрезается.
Хотелось бы видеть пример ссылки.- не обрабатываются сетевые пути, т.е. всё, что ничинается с "\".
-
Offline
- Posts: 3217
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
Побуду-ка ещё бета-тестером
1. _punctuationFixer.js:
а). Между закрывающейся скобкой и символами : ; , вставляется пробел (что интересно - перед точкой не вставляется):
б). Между дефисом и закрывающим уголком '>' вставляется пробел
Я часто пользуюсь символом следования из математики '->', а после преобразования получается '– >'.
в). После отработки скрипта весть текст остаётся выделенным (если обрабатывался весь файл). Лучше, конечно же, для наглядности после отработки скрипта устанавливать курсор в место последнего изменения, но из простоты можно просто переводить курсор на строку ниже первоначального положения, чтобы было видно, что скрипт отработал.
Да, ещё (интересно просто), почему файл скрипта начинается с подчёркивания?
2. toggleComments.js:
Но я немного о другом - чтобы было 2 скрипта: один проставляет комменты, а другой снимает. Тогда их можно посадить на 2 разные комбинации клавиш.
Снятие блочных комментов, собственно, хоть и по простому, но уже реализовано - просто тыкаешь курсором куда-то в середину закоментированного блока, а скрипт уже сам находит где открывающийся, а где закрывающийся "тэги", и снимает их.
Я просто думал, что Ваш скрипт также и снимает их - тогда лучше разделять.
По имеющемуся скрипту: если тыкнуть просто в строчку с кодом, ничего не выделяя, мне кажется, раньше было проставлении обычного комментария //, сейчас же вставляется /**/. Думаю, стоит вернуть обратно, т.к. в наборе символов /**/ особого смысла нет. Другое дело, если в строке что-то выделено, - тогда да!
3. getLinks.js:
Ссылкой это, конечно, трудно назвать - обычный сетевой путь; пример:
но в настройках проги в "Префиксах" я добавил \\ и теперь этот "текст" работает как ссылка, т.е. при клике в окне explorer'а открывается указанная дирректория. Удобно
1. _punctuationFixer.js:
а). Между закрывающейся скобкой и символами : ; , вставляется пробел (что интересно - перед точкой не вставляется):
Code: Select all
текст): -> текст) :
Я часто пользуюсь символом следования из математики '->', а после преобразования получается '– >'.
в). После отработки скрипта весть текст остаётся выделенным (если обрабатывался весь файл). Лучше, конечно же, для наглядности после отработки скрипта устанавливать курсор в место последнего изменения, но из простоты можно просто переводить курсор на строку ниже первоначального положения, чтобы было видно, что скрипт отработал.
Да, ещё (интересно просто), почему файл скрипта начинается с подчёркивания?
2. toggleComments.js:
Это да... Мне сейчас достался ноут - 2-й Celeron, 600MHz, 128 ОЗУ, с установленной XP, - я полностью прочувствовал, как запускаются скриптыInfocatcher wrote:У меня больше 50 миллисекунд не выдает – для файлов разумных размеров, разумеется. Так что основное время, видимо, уходит на запуск wscript.exe. Или на интерпретацию кода. Только вот как отделить одно от другого, я не знаю.
Но я немного о другом - чтобы было 2 скрипта: один проставляет комменты, а другой снимает. Тогда их можно посадить на 2 разные комбинации клавиш.
Снятие блочных комментов, собственно, хоть и по простому, но уже реализовано - просто тыкаешь курсором куда-то в середину закоментированного блока, а скрипт уже сам находит где открывающийся, а где закрывающийся "тэги", и снимает их.
Я просто думал, что Ваш скрипт также и снимает их - тогда лучше разделять.
По имеющемуся скрипту: если тыкнуть просто в строчку с кодом, ничего не выделяя, мне кажется, раньше было проставлении обычного комментария //, сейчас же вставляется /**/. Думаю, стоит вернуть обратно, т.к. в наборе символов /**/ особого смысла нет. Другое дело, если в строке что-то выделено, - тогда да!
3. getLinks.js:
Ссылкой это, конечно, трудно назвать - обычный сетевой путь; пример:
Code: Select all
\\Store\softstore\drivers
-
Offline
- Posts: 1862
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
Да-да, так оно гораздо быстрее правится.VladSh wrote:Побуду-ка ещё бета-тестером
Таки да:1. _punctuationFixer.js:
а). Между закрывающейся скобкой и символами : ; , вставляется пробел (что интересно - перед точкой не вставляется):
[\t ] – символ табуляции или пробел.replace(/[\t ]*\)[\t ]*([^.!?])/g, ") $1"); // text)text -> text) text
[\t ]* – любое количество таких символов
\) – скобка
[^.!?] – любой символ, кроме «.», «!» и «?» (а : ; , тут как раз и не учитываются )
([^.!?]) – запоминает то, что в скобках (вместо $1 – первая пара скобок – будет подставлено совпавшее с этой маской выражение)
Вот так.
Тогда не будем обрабатывать конструкции видаб). Между дефисом и закрывающим уголком '>' вставляется пробел
«->», «=>», «==>», «<=>»
Если только втыкать на место курсора маркер в виде псевдослучайной строки, а потом его удалять и ставить туда курсор. Последнее изменение при таком раскладе выделить проще (точнее, это не должно сказаться на работе предыдущих замен). А вот что делать с положением прокрутки, я не знаю.в). После отработки скрипта весть текст остаётся выделенным (если обрабатывался весь файл). Лучше, конечно же, для наглядности после отработки скрипта устанавливать курсор в место последнего изменения, но из простоты можно просто переводить курсор на строку ниже первоначального положения, чтобы было видно, что скрипт отработал.
По-другому никак, видимо – пересчитывать положение при заменах весьма проблемно и может сказаться на быстродействии.
Ну, punctuationFixer.js пока что тоже есть.Да, ещё (интересно просто), почему файл скрипта начинается с подчёркивания?
А вообще, у меня сейчас почти все свои скрипты так названы – чтобы выделялись.
Нда, жестоко...Это да... Мне сейчас достался ноут - 2-й Celeron, 600MHz, 128 ОЗУ, с установленной XP, - я полностью прочувствовал, как запускаются скрипты
Да, вроде, снимает он – комментарии эти, если видит.Я просто думал, что Ваш скрипт также и снимает их - тогда лучше разделять.
Хотя можно попробовать приделать запуск с параметрами – для разделения функций.
Там какбэ не написано «вставить сюда /**/». К тому же, я не могу это воспроизвести – если возможны оба типа комментирования, у меня комментируется текущая строка в видеПо имеющемуся скрипту: если тыкнуть просто в строчку с кодом, ничего не выделяя, мне кажется, раньше было проставлении обычного комментария //, сейчас же вставляется /**/. Думаю, стоит вернуть обратно, т.к. в наборе символов /**/ особого смысла нет. Другое дело, если в строке что-то выделено, - тогда да!
//вся строка до конца
Если не учитывать, что, скажем, локализованный Total Commander умеет нечто вроде3. getLinks.js:
Ссылкой это, конечно, трудно назвать - обычный сетевой путь; пример:Code: Select all
\\Store\softstore\drivers
Code: Select all
\\\Редактор реестра\HKEY_CURRENT_USER\
Надо бы сделать текстовый файлик с разными хитрыми ссылками для тестирования...
__________________________________________
toggleComments.js
Сообщение «Выделено несколько блочных комментариев» выдавалось при отключенной перерисовке (что было видно при перемещении окошка) – исправил.