Scripts discussion (3)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Posts: 1162
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

VladSh

Code: Select all

function getArg(argName, defaultVal) {
	return typeof args[argName] == "undefined" // argName in args
		? defaultVal
		: args[argName];
}
Она?
Клонировал гитхаб, скопировал всё с первого коммита (07.09.2012 13:09:22) Push all current releases и поиском нашёл самую маленькую функцию getArg() (в convertEscapes.js).

В чём плюс по сравнению с более свежей версией или AkelPad.GetArgValue()?

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

Post by VladSh »

Skif_off
Нет, это наверное уж очень раннее)

Есть строка, к примеру:

Code: Select all

-param1="-ddg=\"gh\" -dgv" -param2=-ygr -param3=45
и в идеале надо так распарсить, чтобы получилась такая структура:

Code: Select all

params = {'param1': '-ddg=\"gh\" -dgv', 'param2': '-ygr', 'param3': 45}
Ну а вообще хотя бы правильно разбить на массив:

Code: Select all

param1="-ddg=\"gh\" -dgv"
param2="-ygr"
param3=45
а дальше уже в цикле можно было бы пройтись, поделить через "=" и собрать в вышеуказанную структуру.

Offline
Posts: 1162
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

VladSh wrote:Нет, это наверное уж очень раннее)
Не, скорее наоборот :)
Как оказалось, забыл удалить, пробежался,

Code: Select all

// Read arguments:
var args = {};
for(var i = 0, argsCount = WScript.Arguments.length; i < argsCount; i++)
	if(/^-(\w+)(=(.+))?$/i.test(WScript.Arguments(i)))
		args[RegExp.$1.toLowerCase()] = RegExp.$3 ? eval(RegExp.$3) : true;
function getArg(argName, defaultVal) {
	return typeof args[argName] == "undefined" // argName in args
		? defaultVal
		: args[argName];
}
//////
function getArg(argName, defaultVal) {
	var args = {};
	for(var i = 0, argsCount = WScript.Arguments.length; i < argsCount; i++)
		if(/^[-\/](\w+)(=(.+))?$/i.test(WScript.Arguments(i)))
			args[RegExp.$1.toLowerCase()] = RegExp.$3 ? eval(RegExp.$3) : true;
	getArg = function(argName, defaultVal) {
		argName = argName.toLowerCase();
		return typeof args[argName] == "undefined" // argName in args
			? defaultVal
			: args[argName];
	};
	return getArg(argName, defaultVal);
}
//////
function getArgOrPref(name, type, defaultVal) {
	var argVal = getArg(name);
	return argVal === undefined
		? saveOptions
			? prefs.get(name, type, defaultVal)
			: defaultVal
		: argVal;
}

Первое и второе - одно и то же, получается. Просто первый, более старый вариант, был объединён.

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

Post by Infocatcher »

VladSh wrote:Нет, это наверное уж очень раннее)
Это вообще фрагмент, там разбора нету.
Примерно вот так:

Code: Select all

function getArg(argName, defaultVal) {
	var args = {};
	for(var i = 0, argsCount = WScript.Arguments.length; i < argsCount; ++i)
		if(/^[-\/](\w+)(=(.+))?$/i.test(WScript.Arguments(i)))
			args[RegExp.$1.toLowerCase()] = RegExp.$3 ? eval(RegExp.$3) : true;
	getArg = function(argName, defaultVal) {
		argName = argName.toLowerCase();
		return typeof args[argName] == "undefined" // argName in args
			? defaultVal
			: args[argName];
	};
	return getArg(argName, defaultVal);
}
Еще могли быть варианты без поддержки -arg для упрощения -arg=true.

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

Post by VladSh »

Infocatcher
Да, я этот вариант смотрел в converter.js прежде чем написать сюда. Пытался его преобразовать в парсинг строки (чтобы было вообще без WScript.Arguments, а чтобы на вход в функцию подавалась строка из параметров), но не получилось...

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

Post by Infocatcher »

VladSh
Хм, мне кажется, лучше разбитие строки на отдельные аргументы оставить программе, чем вручную какие-нибудь экранированные кавычки выцеплять. Да и чтобы логика обработки была везде одинаковая.
Как по мне, или делать перебор аргументов, или сразу JSON и передавать (ну, чтобы вся строка AkelPad.GetArgLine() была js-объектом).

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

Post by VladSh »

Infocatcher
Вы дали просто гениальное предложение - я на json перейду!


Я бы с удовольствием использовал механизм AkelPad'а для парсинга аргументов, но нет такого метода в Scripts-плагине, чтобы на вход получал строку. У меня нет аргументов. Строку с таким образом заданными параметрами я получаю из конфиг-файлов.
Если я каким-то образом попытаюсь схимичить и подсунуть в агрументы свою строку, чтобы воспользоваться методом GetArgValue, то я запорю аргументы моего скрипта... Если можно было как-то добавить к уже существующим, то было бы вообще здорово!

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

Post by Instructor »

VladSh wrote:Не могли бы Вы немножечко усовершенствовать скрипт GetNumberMembers.js?
Хотелось бы дополнительный параметр output, который бы позволял указать, куда выводить результат:
- 0 - заменять в окне редактирования (как есть сейчас);
- 1 - вывести в панель Log-плагина;
- 2 - ну ещё можно было бы вывести в окошке InputBox, чтобы можно было сразу же скопировать. Но это необязательно, можно скопировать и из панели Log-плагина, только будет чуть больше действий.
GetNumberMembers.js v1.1

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

Post by VladSh »

Instructor wrote:GetNumberMembers.js v1.1
Люблю, чтобы знаки "=", "+", "|" и т.д. с обеих сторон отделялись пробелами (типографские правила - лучше для восприятия, - не сливается в единую строку), но и так гораздо больше, чем хотелось. Спасибо!

Offline
Posts: 47
Joined: Fri Mar 27, 2015 7:46 am

PluginText.js

Post by Akuro »

PluginText.js - I just came upon this gem and this is awesome. 8) :!:
GREAT way to customize - many thanks.

One small issue: When editing files, I get an error message by coder plugin, telling me that akelmenu.coder contains unknown variable "${Num_Alt}" that doesnt exist in the current theme - no matter what theme I try. When I click Continue it doesn't seem to have a problem, so no big deal. Just wondering if I am missing something important here?

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

Post by KDJ »

Akuro
New version of akelmenu.coder:
https://github.com/Infocatcher/AkelPad_ ... menu.coder

This file contains two non-standard variables: "CMD" and "NUM_ALT".
Two ways to solve the problem:
1. Add these variables to the list (Coder plugin settings -> General)
2. In akelmenu.coder, replace all: "CMD" with "COMM" and "NUM_ALT" with "NUM".

Offline
Posts: 47
Joined: Fri Mar 27, 2015 7:46 am

Post by Akuro »

Thank you. Went with the 2nd suggestion, carefully replacing those words one at a time. All seems good now.

Is there a reason the downloaded coders start with an _underscore?
I removed it - to make them look and fit in with the other coders. Maybe that was a mistake and the _underscrore was meant to stay in place?

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

Post by KDJ »

Akuro
Infocatcher wrote:All files are prefixed to avoid overrides after update.
https://github.com/Infocatcher/AkelPad_coder

Offline
Posts: 47
Joined: Fri Mar 27, 2015 7:46 am

Post by Akuro »

Thanks.

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

Post by Infocatcher »

Хм, а это так и задумано?

Code: Select all

WScript.Echo(_PtrAdd(100000000, 1)) // 100000001
WScript.Echo(_PtrAdd(5000000000, 1)) // 1
Правда, у меня только x86 есть, на x64 посчитает правильно?
Locked