Scripts plugin

Discuss and announce AkelPad plugins
  • Author
  • Message
Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Instructor
Есть ли возможность быстро проверить, есть ли агрумент в списке агрументов, без анализа на вхождение в результате от GetArgLine?
GetArgValue со значением по умолчанию всё-таки возвращает значение, и непонятно, был ли там аргумент этот или нет. Хотелось бы иметь возможность анализа, и, в зависимости от этого, писать логику. Т.е. хотелось бы иметь метод, т.к. перед этим вызывался GetArgValue, и все параметры собственно уже были считаны и разобраны.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

KDJ
AkelPad.TextReplace(hEditWnd, "\\r", "", 0x00280001 /*FRF_BEGINNING|FRF_REGEXP|FRF_DOWN*/, true);
VladSh
Можно так:

Code: Select all

var nArgValue=AkelPad.GetArgValue("ArgName", undefined);

if (nArgValue == undefined)
  WScript.Echo("Not defined");
else
  WScript.Echo("Defined");

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Instructor
Oh, really. Sometimes I forget about the basic things. :lol:

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

Post by VladSh »

Instructor
Интересная возможность, прямо "из коробки" :) Спасибо!

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Напишу сюда:
Просьба Инструктору, ну или всем желающим/имеющим возможность проверить насколько проворно подхватывает Microsoft Visual Studio(любых версия которые есть в наличии) скрипты, и как хорошо работает вахта, точки останова и прочая функциональность.
(У меня почему-то только MSVS 7.0 ведет себя адекватно. 8.0 и 9.0 цепляются но будто бы оглохли,... но в чем причина предположить не могу ибо запускаются на отличной от 7.0 системе)

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

FeyFre
А как это сделать? Как задать такую точку останова, чтобы Студия на неё среагировала? И что такое "вахта"?

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

DV
Вахта, оно же дозор, оно же, внезапно, watch.
watch - это такая услуга среды отладки, которая позволяет инспектировать рабочие данные налаживаемого объекта: значения переменных а также элементарных выражений. По объективным причинам Вахта работает исключительно во время отладочного останова. Разделяют четыре вида вахты(и то по внешнему виду, суть одна и та же): классическая-ручная вахта, собственно везде она так и называется watch - программист обязан самостоятельно выбрать данные которые нужно отобразить, вахта автоматическая и локальная(Autos, Locals) отображают данные с которыми оперирует команда и значения доступные текущей области видимости соответственно(если конечно такие понятия доступны в технологии отладки), ну и последняя - мониторинг памяти в сыром виде(разработчик указывает адрес и среда отображает порцию данных как они лежат в памяти побайтово(некоторые среды позволяют приводить к другим базовым типам: слова, плавающие и пр), если такая технология предусмотрена отладкой(первый тип вахты в сыром виде).

1. Этот пункт нужен если по какой-либо причине JIT отладка скриптов отключена. Если она включена то JIT автоматически запустит студию.(JIT настраивается внутри каждой студии независимо, так что можете иметь 4 студии и JIT даст Вам выбрать в какой отлаживаться) Нужно студию подцепить к процессу в котором выполняются скрипты. Делается это также как и подцепиться к нативной отладке уже существующего процесса:
1) Запускаем AP
2) Запускаем студию
3) Идем в меню Debug выбираем пункт Attach to.../Processes (по ходу сориентируетесь)
4) Находим в списка нашу жертву
5) Выставляем тип отладки - скрипты(другие типы обязательно снять, на всякий случай), и жмем кнопку Attach/Debug
Студия немножко подумает и либо матернется что что-то пошло не так, либо молча успешно вцепится.
2. Как задать точку останова - вопрос хитрый. Не инвазивного в отлаживаемый скрипт метода я пока не знаю. Инвазивный такой:
1) Грязный метод. В коде скрипта кидаем какой-нибудь исключение. Запускаем скрипт, студия его ловит - мы в дамках. Но это конец скрипта, ибо пошагать мы не сможем, а не отловленное исключение будет поймано плагином и автоматически завершит скрипт. Подходит лишь для недоделанных скриптов на этапе разработки.
2) Воспользуемся документированным в ECMA262 финтом(12.15). А именно оператором debugger; Ставим его в начале скрипта и пускаем скрипт. И наблюдаем как всплывает JIT(выбираем студию), либо если уже вцепились - студия открывает текст нашего скрипта и показывает останов на этом операторе. Теперь мы можем преспокойно по наставлять точек останова, вахту, прошагать сколько нужно, ну и далее по списку.

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

Post by VladSh »

Ещё немного по определению позиции ошибки в коде.
Запуск такого скрипта

Code: Select all

var arr = new Array(3,5);
WScript.Echo(arr.indexOf(5));
даёт такое сообщение
Scripts плагин wrote:Скрипт: C:\Program Files\AkelPad\AkelFiles\Plugs\Scripts\test.js
Строка: 2
Символ: 1
Ошибка: Объект не поддерживает это свойство или метод

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

Post by Infocatcher »

VladSh wrote:даёт такое сообщение
Если запустить через wscript.exe, сообщение будет точно такое же. Так что вряд ли плагин тут может что-то сделать.

P.S.

Code: Select all

var arr = [3,5];
:)

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

Post by VladSh »

Infocatcher
Это я пробовал в первую очередь, но пытаясь indexOf завести дошёл и до такой жизни, как "new Array" :)

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

Post by Infocatcher »

VladSh
Да там вообще логика за гранью моего понимания: в IE9 есть и Array.prototype.indexOf(), и JSON.parse()/stringify(), даже Object.create() есть, но вот в WSH ничего этого нет.

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

Кмк, они забили на развитие WSH в пользу Павершелла
А indexOf у Array вообще нигде в спеках не указан.

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

Fr0sT wrote:А indexOf у Array вообще нигде в спеках не указан.
Это точно: http://www.w3schools.com/jsref/jsref_indexof_array.asp ;)
Хотя это же про "полноценный" JavaScript, а не про M$ JScript.

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

"полноценный" JavaScript какой версии? Знаете, их там тоже десяток, как и JScript.
Собственно в чем проблема? Прямо написано какую версию EcmaScript реализовано в конкретных версиях JScript. Весь JScript до версии поставляемой с IE9 приблизительно соответствует JavaScript 1.5, т.е. EcmaScript 3rd edition. indexOf и иже с ними появились в пятой редакции(см. Annex E.15). Так что возможно стоит писать максимально совместимо с интерпретатором для которого пишете, а не со стандартом который лежит в основе. Тем более что задачи сделать переносное на другой интерпретатор не стоит.

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

DV
блин, точно. А я поверил javascript.ru...
Post Reply