Scripts discussion (2)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

KDJ
спасибо, буду разбираться, особенно порадовало диалоговое окно

Скрин

:D

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

Post by VladSh »

Instructor
Как подключаемая библиотека это здорово!
Спасибо.

Добавлено:
Большая просьба, - сделайте пожалуйста чтобы структура была такого вида: [идентификатор, MF_NORMAL, текст пункта меню] - идентификатор ведь обязателен, потому и спереди, а текст иногда может быть опциональным, т.о. количество элементов структуры м.б. меньше (в некоторых случаях можно это анализировать).

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

Post by Instructor »

VladSh
Порядок такой: ["Текст", MF_NORMAL, ПользовательскиеДанные1, ПользовательскиеДанные2, ...]. В пользовательских данных может передаваться идентификатор, либо что-то другое, либо не указываться. Т.е. как раз таки параметры после MF_* не влияют на работоспособность функции ShowMenu, поэтому могут быть опущены.

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

Post by VladSh »

Instructor
То есть идентификатор необязателен? А если надо будет установить/снять галку у определённого пункта меню, то как анализировать, по тексту? Насколько помню, всегда уникальный идентификатор был самым важным, а к нему уже опции.

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

Post by Instructor »

VladSh
Можно по индексу в массиве, можно по тексту, можно через пользовательские данные.

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

Post by VladSh »

Andrey_A_A wrote:скрипт ConsoleRun.js ведёт себя странно, либо опрокидывает AkelPad, либо подвисает вся система
Исправлено.
• упразднены ShowMenuCommon.js и ShowMenuAlt.js, переработан ShowMenuEx.js (теперь он использует ShowMenu.js из дистрибутива Scripts-плагина);
• также изменены: ExecuteScriptMenu.js и XMLGetAttrValues.js.
Переработан CaretSelect.js.

Offline
Posts: 176
Joined: Sat Dec 24, 2011 4:05 pm

Post by F. Phoenix »

F. Phoenix wrote:Набросок: CoderFunctions.js
Основываясь на примерах документации, дополнил:

Code: Select all

//*** СИНТАКСИЧЕСКАЯ ТЕМА ***\\

// Устанавливает синтаксическую тему по указанному расширению.
function SetSyntax(pAlias)
{
	AkelPad.Call("Coder::Settings", 1, pAlias);
}

// Возвращает имя используемого coder-файла.
function GetSyntaxFile(hWndEdit)
{
	if (arguments.length == 0) hWndEdit = AkelPad.GetEditWnd();
	if (!hWndEdit) return "";
	
	var pFile="", lpFile;
	if (lpFile=AkelPad.MemAlloc(256))
	{
		AkelPad.Call("Coder::Settings", 16, hWndEdit, lpFile, 256);
		pFile=AkelPad.MemRead(lpFile, 1  /*DT_UNICODE*/);
		AkelPad.MemFree(lpFile);
	}
	return pFile;
}

// Возвращает псевдоним синтаксического файла, установленного вручную
// (расширение, по которому тот был установлен).
// Если же тема была определена автоматически, возвращает имя документа.
function GetSyntaxAlias()
{
	var hWndEdit = AkelPad.GetEditWnd(), hDocEdit = AkelPad.GetEditDoc();
	if (!hWndEdit || !hDocEdit) return "";
	
	var pAlias="", lpAlias;
	if (lpAlias=AkelPad.MemAlloc(256 * 2 /*sizeof(wchar_t)*/))
	{
		AkelPad.CallW("Coder::Settings", 18 /*DLLA_CODER_GETALIAS*/, hWndEdit, hDocEdit, lpAlias, 0);
		pAlias=AkelPad.MemRead(lpAlias, 1 /*DT_UNICODE*/);
		AkelPad.MemFree(lpAlias);
	}
	return pAlias;
}

// Проверяет ассоциацию текущей синтаксической темы с указанным расширением.
function CheckSyntaxExtension(pAlias)
{
	var lpActive;
	var bActive=false;

	if (lpActive=AkelPad.MemAlloc(4 /*sizeof(BOOL)*/))
	{
		AkelPad.CallW("Coder::Settings", 12, pAlias, lpActive);
		bActive=AkelPad.MemRead(lpActive, 3 /*DT_DWORD*/);
		AkelPad.MemFree(lpActive);
	}
	return bActive;
}

// Возвращает массив расширений текущей синтаксической темы.
function GetSyntaxExtensions(hWndEdit)
{
	var pText = AkelPad.ReadFile(AkelPad.GetAkelDir(4) + "\\Coder\" + GetSyntaxFile(hWndEdit), 0xD).replace(/\r\n?/g, "\n");
	var mSection = pText.match(/^Files:\s*?\n((?:(?:\*\..*?|;.*?|\s*?)\n)+)/m);
	var mResult = mSection[1].match(/^\*\.\w+/gmi);
	for (var i = 0; i < mResult.length; i++) mResult[i] = mResult[i].substr(1);
	return mResult;
}


//*** ЦВЕТОВАЯ ТЕМА ***\\

// Устанавливает цветовую тему по имени.
function SetColorTheme(pName)
{
	AkelPad.CallW("Coder::Settings", 5, pName);
}

// Возвращает имя активной цветовой темы.
function GetColorTheme(hWndEdit)
{
	var pVarTheme="";
	var lpVarTheme;

	if (lpVarTheme=AkelPad.MemAlloc(256 * 2 /*sizeof(wchar_t)*/))
	{
		AkelPad.CallW("Coder::Settings", 20, hWndEdit, lpVarTheme, 256);
		pVarTheme=AkelPad.MemRead(lpVarTheme, 1 /*DT_UNICODE*/);
		AkelPad.MemFree(lpVarTheme);
	}
	return pVarTheme;
}

// Проверяет активность цветовой темы с указанным именем.
function CheckColorTheme(pName)
{
	var lpActive;
	var bActive=false;

	if (lpActive=AkelPad.MemAlloc(4 /*sizeof(BOOL)*/))
	{
		AkelPad.CallW("Coder::Settings", 14, pName, lpActive);
		bActive=AkelPad.MemRead(lpActive, 3 /*DT_DWORD*/);
		AkelPad.MemFree(lpActive);
	}
	return bActive;
}


Как я и предполагал, со всеми расширениями темы вполне работает 12й вызов. В функции 18го же hWndEdit бесполезен, т.к. нужен еще hDocEdit, а функция GetEditDoc() всегда основывается на активном документа... т.е. как я понимаю, тут либо добавлять эти параметры исключительно в целях опцтимизации (чтоб не запрашивать у Акела один и тот же дескриптор по нескольку раз), либо как-то дополнить, чтоб можно было получить дескриптор документа на основе указанного окна.

Offline
Posts: 122
Joined: Sat Mar 19, 2011 10:20 pm

Post by DrakonHaSh »

Code: Select all

\n<?php\n    $scan_subdirs = isset($_POST[\'subdirs\']) ? $_POST[\'subdirs\'] : false;\n    //$scan_subdirs = isset($_POST[\'subdirs\']) ? $_POST[\'subdirs\'] : false;\n?>\n
\n=>\nвызываем CodePoster.js из Scripts по Запустить] =>\n<pre><?php\n $scan_subdirs = isset($_POST[\'subdirs\']) ? $_POST[\'subdirs\'] : false;\n //$scan_subdirs = isset(<pre>${result}</pre>POST[\'subdirs\']) ? <pre>${result}</pre>POST[\'subdirs\'] : false;\n?>\n</pre>* Подсвечено с помощью скрипта CodePoster.js для AkelPad\n\n$_ в закомментированной строке превратилось в <pre>${result}</pre>

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

Post by VladSh »

Infocatcher wrote:Нечто вроде: insertTag-test.js
Работает, можно "финалить" :)
F. Phoenix wrote:Набросок: CoderFunctions.js
Я туда ещё добавил функцию GetSyntaxAliasExtension и так, по мелочи.. + отступы порасставлял вокруг =, чтобы текст скрипта нормально читался:

Code: Select all

///Скрипт-"библиотека", содержащая функции для работы с Coder-плагином
// © Instructor, F. Phoenix, VladSh
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=19641#p19641
// Version: ? (2013.08.01)

var fCoderHighLight = "Coder::HighLight";
var fCoderSettings = "Coder::Settings";

//*** СИНТАКСИЧЕСКАЯ ТЕМА ***\\

// Устанавливает синтаксическую тему по указанному расширению.
function SetSyntax(pExt) {
	AkelPad.Call(fCoderSettings, 1, pExt);
}

// Возвращает имя используемого coder-файла.
function GetSyntaxFile(hWndEdit) {
	if (arguments.length == 0) hWndEdit = AkelPad.GetEditWnd();
	if (!hWndEdit) return "";

	var pFile = "", lpFile;
	if (lpFile = AkelPad.MemAlloc(256)) {
		AkelPad.Call(fCoderSettings, 16, hWndEdit, lpFile, 256);
		pFile = AkelPad.MemRead(lpFile, 1  /*DT_UNICODE*/);
		AkelPad.MemFree(lpFile);
	}
	return pFile;
}

// Возвращает псевдоним синтаксического файла, установленного вручную
// (расширение, по которому тот был установлен).
// Если же тема была определена автоматически, возвращает имя документа.
function GetSyntaxAlias() {
	var hWndEdit = AkelPad.GetEditWnd(), hDocEdit = AkelPad.GetEditDoc();
	if (!hWndEdit || !hDocEdit) return "";

	var pAlias = "", lpAlias;
	if (lpAlias = AkelPad.MemAlloc(256 * 2 /*sizeof(wchar_t)*/)) {
		AkelPad.CallW(fCoderSettings, 18 /*DLLA_CODER_GETALIAS*/, hWndEdit, hDocEdit, lpAlias, 0);
		pAlias = AkelPad.MemRead(lpAlias, 1 /*DT_UNICODE*/);
		AkelPad.MemFree(lpAlias);
	}
	return pAlias;
}

// Возвращает расширение из псевдонима синтаксического файла
function GetSyntaxAliasExtension() {
	var ext = "";
	var syntaxAlias = GetSyntaxAlias();
	if (syntaxAlias) {
		ext = syntaxAlias.split('.');
		ext = ext[ext.length-1]		//всё после последней точки
	}
	return ext;
}

// Проверяет ассоциацию текущей синтаксической темы с указанным расширением.
function CheckSyntaxExtension(pAlias) {
	var lpActive;
	var bActive = false;

	if (lpActive = AkelPad.MemAlloc(4 /*sizeof(BOOL)*/)) {
		AkelPad.CallW(fCoderSettings, 12, pAlias, lpActive);
		bActive = AkelPad.MemRead(lpActive, 3 /*DT_DWORD*/);
		AkelPad.MemFree(lpActive);
	}
	return bActive;
}

// Возвращает массив расширений текущей синтаксической темы.
function GetSyntaxExtensions(hWndEdit) {
	var pText = AkelPad.ReadFile(AkelPad.GetAkelDir(4) + "\\Coder\" + GetSyntaxFile(hWndEdit), 0xD).replace(/\r\n?/g, "\n");
	var mSection = pText.match(/^Files:\s*?\n((?:(?:\*\..*?|;.*?|\s*?)\n)+)/m);
	var mResult = mSection[1].match(/^\*\.\w+/gmi);
	for (var i = 0; i < mResult.length; i++) mResult[i] = mResult[i].substr(1);
	return mResult;
}


//*** ЦВЕТОВАЯ ТЕМА ***\\

// Устанавливает цветовую тему по имени.
function SetColorTheme(pName) {
	AkelPad.CallW(fCoderSettings, 5, pName);
}

// Возвращает имя активной цветовой темы.
function GetColorTheme(hWndEdit) {
	var pVarTheme = "";
	var lpVarTheme;

	if (lpVarTheme = AkelPad.MemAlloc(256 * 2 /*sizeof(wchar_t)*/)) {
		AkelPad.CallW(fCoderSettings, 20, hWndEdit, lpVarTheme, 256);
		pVarTheme = AkelPad.MemRead(lpVarTheme, 1 /*DT_UNICODE*/);
		AkelPad.MemFree(lpVarTheme);
	}
	return pVarTheme;
}

// Проверяет активность цветовой темы с указанным именем.
function CheckColorTheme(pName) {
	var lpActive;
	var bActive = false;

	if (lpActive = AkelPad.MemAlloc(4 /*sizeof(BOOL)*/)) {
		AkelPad.CallW(fCoderSettings, 14, pName, lpActive);
		bActive = AkelPad.MemRead(lpActive, 3 /*DT_DWORD*/);
		AkelPad.MemFree(lpActive);
	}
	return bActive;
}

В принципе можно помещать в коллекцию скриптов, у себя в скриптах вовсю пользую его - уже изменил CommonFunctions.js, NewFilebyRecent.js, SaveAs.js, OpenCoderParamsFile.js.

Добавлено:
Изменено TranslateWithGoogleAPI.js - выбор вариантов в диалоге был неинтуитивен и неудобен, поэтому изменён порядок: теперь Yes заменяет выделенный текст, No - копирует в буфер. Соответственно поменялись местами значения 0 и 1 параметра resType, передаваемого в аргументах.
Last edited by VladSh on Wed Dec 11, 2013 9:18 am, edited 1 time in total.

Offline
Posts: 176
Joined: Sat Dec 24, 2011 4:05 pm

Post by F. Phoenix »

Хм, явоскрипту проще из переменных чтоль строки брать, чем напрямую?
И какой там ужасный пэкмен перед нашими никами - он же нас сожрет :shock:


Image



А еще я тут твой перевод регесп-тестера подправил... точнее, наброски-то вообще сделал сразу, как KDJ локализуемую версию выложил, а тута смержил + разметку кнопок в скрипте чутка изменил: так вроде и на русском, и на инглише неплохо смотрится.

Code: Select all

/********************************
RegExpTestJS.js - ver. 2012-09-05
Interface language
Language:      Russian (1049)
Translated by: forum community
*********************************/
pTxtCaption   = "Отладчик регулярных выражений JavaScript";
pTxtRegExp    = "Регулярное выражение (RE)";
pTxtSource    = "RE.source";
pTxtEscape    = "&Экранировать";
pTxtUnEscape  = "&Деэкранир.";
pTxtRE        = "RE";
pTxtIgCase    = "&ignoreCase";
pTxtGlobal    = "&global";
pTxtMultiL    = "&multiline";
pTxtNewLine   = "Переносы:";
pTxtCollect   = "&Коллекция";
pTxtNLWin     = "Win (\\r\\n)";
pTxtNLUnix    = "Unix (\\n)";
pTxtNLMac     = "Mac (\\r)";
pTxtString    = "Строка с данными для обработки (Str)";
pTxtAction    = "Операция";
pTxtMeTest    = "RE.test(Str)";
pTxtMeExec    = "RE.exec(Str)";
pTxtMeSearch  = "Str.search(RE)";
pTxtMeMatch   = "Str.match(RE)";
pTxtMeSplit   = "Str.split(RE)";
pTxtMeReplace = "Str.replace(RE,With):";
pTxtResult    = "Результат";
pTxtLastInd   = "RE.lastIndex=";
pTxtResetInd  = "Сбросить &индекс";
pTxtArray     = "Array";
pTxtEmpArray  = "empty Array";
pTxtGlobPro   = "Свойства глобального объекта RegExp";
pTxtTest      = "Тест";
pTxtHelp      = "Справка";
pTxtOpaqMinus = "Прозрачн. +";
pTxtOpaqPlus  = "Прозрачн. -";
pTxtClose     = "Закрыть";
pTxtCopyPaste = "Копия";
pTxtCopy      = "Копия";
pTxtCopyCB    = "Копировать в буфер";
pTxtCopyAP    = "Копировать в AkelPad";
pTxtPasteCB   = "Вставить из буфера";
pTxtPasteAP   = "Вставить из AkelPad";
pTxtNoRE      = "Регулярное выражение отсутствует."
pTxtNoStr     = "Строка для тестирования отсутствует.";
pTxtRECollect = "Коллекция шаблонов";
pTxtName      = "Наименование";
pTxtValue     = "Значение";
pTxtAdd       = "Добавить (Ins)";
pTxtRename    = "Переим. (F2)";
pTxtDelete    = "Удалить (Del)";
pTxtOK        = "OK (Enter)";
pTxtAddRE     = "Новый шаблон";
pTxtRenRE     = "Переименование шаблона";
pTxtNewName   = "Новое имя";
pTxtREExist   = "Шаблон уже сохранен под именем ";
pTxtNameExist = "Данное наименование уже существует: ";
pTxtREHelp    = "Справка по регулярным выражениям";
pTxtHelpText  = "\tМодификаторы, использующиеся для поиска\r\ni\t\tне различать строчные и заглавные буквы\r\ng\t\tглобальный поиск (обрабатываются все совпадения\r\n\t\tс шаблоном поиска)\r\nm\t\tмногострочный поиск\r\n\r\n\tНаборы символов, использующиеся для поиска\r\nВыражение\tОписание\r\n[abc]\t\tНайти любой, указанный в скобках, символ\r\n[^abc]\t\tНайти любой символ, исключая те, что в скобках\r\n[0-9]\t\tНайти любую цифру от 0 до 9\r\n[A-Z]\t\tНайти любой символ в верхнем регистре от A до Z\r\n[a-z]\t\tНайти любой символ в нижнем регистре от a до z\r\n[A-z]\t\tНайти любой символ от A в верхнем регистре до z\r\n\t\tв нижнем регистре\r\n[adgk]\t\tНайти любой символ из заданного набора\r\n[^adgk]\t\tНайти любой символ кроме данного набора\r\n(red|blue|green)\tНайти любое из перечисленных вхождений\r\n\r\n\tСпециальные метасимволы\r\n.\t\tНайдёт любой символ, кроме переводов строк: \\n, \\r,\r\n\t\t\\u2028 или \\u2029 (можно использовать [\\s\\S] для\r\n\t\tпоиска любого символа, включая переводы строк)\r\n\\w\t\tНайдёт любой символ латинского алфавита, включая\r\n\t\tбуквы, цифры и знак подчеркивания\r\n\\W\t\tНайдет любой не-(лат.)словесный символ\r\n\\d\t\tНайдёт цифру из любого алфавита (у нас же юникод);\r\n\t\tиспльзуйте [0-9], чтобы найти только обычные цифры\r\n\\D\t\tНайдет нецифровой символ (все алфавиты)\r\n\\s\t\tНайдет любой пробельный символ, включая пробел,\r\n\t\tтабуляцию, переводы строки и другие юникодные\r\n\t\tпробельные символы\r\n\\S\t\tНайдет любой символ, кроме пробельного\r\n\\b\t\tНаходит границу слов латинских алфавитов, например\r\n\t\tпробел; не путать с [\\b]!\r\n\\B\t\tНаходит совпадения не по границам слов\r\n\\0\t\tНайдет символ NUL; не добавляйте в конец другие\r\n\t\tцифры\r\n\\n\t\tНаходит символ новой строки\r\n\\f\t\tНаходит символ прогона (form-feed)\r\n\\r\t\tНаходит символ возврата каретки\r\n\\t\t\tНаходит символ обычной табуляции\r\n\\v\t\tНаходит символ вертикальной табуляции\r\n\\hhh\t\tНаходит символ, заданный восьмеричным числом hhh\r\n\\xhh\t\tНаходит символ, заданный шестнадцатиричным\r\n\t\tчислом, с кодом hh (2 шестнадцатиричных цифры)\r\n\\uhhhh\t\tНаходит юникодный символ, заданный\r\n\t\tшестнадцатиричным числом, с кодом hhhh\r\n\t\t(4 шестнадцатиричных цифры)\r\n\r\n\tКвантификаторы\r\n^\t\tОбозначает начало входных данных; если установлен\r\n\t\tфлаг многострочного поиска \"m\", то также сработает\r\n\t\tпри начале новой строки\r\n$\t\tОбозначает конец входных данных; если установлен\r\n\t\tфлаг многострочного поиска, то также сработает\r\n\t\tв конце строки\r\nx(?=y)\t\tНаходит x, только если за x следует y\r\nx(?!y)\t\tНаходит x, только если за x не следует y\r\n+\t\tОбозначает повторение предшествующего элемента\r\n\t\t1 или более раз, эквивалентно {1,}\r\n*\t\tОбозначает повторение предшествующего элемента\r\n\t\t0 или более раз\r\n?\t\tОбозначает, что предшествующий элемент может\r\n\t\tкак присутствовать, так и отсутствовать\r\n{n}\t\tНаходит ровно n повторений предшествующего\r\n\t\tэлемента\r\n{n,}\t\tНаходит n и более повторений предшествующего\r\n\t\tэлемента\r\n{n,m}\t\tНаходит от n до m повторений предшествующего\r\n\t\tэлемента\r\n\r\n\tСвойства объекта RegExp\r\nglobal\t\tПоказывает, был ли включен флаг поиска всех\r\n\t\tсовпадений \"g\"\r\nignoreCase\tПоказывает, был ли включен флаг\r\n\t\tрегистронезависимого поиска \"i\"\r\nmultiline\t\tПоказывает, был ли включен флаг многострочного\r\n\t\tпоиска \"m\"\r\nlastIndex\t\tИндекс, с которого начинать следующий поиск\r\nsource\t\tТекст RegExp-паттерна\r\n\r\n\tМетоды объекта RegExp\r\ncompile()\t\tКомпилирует регулярное выражение\r\nexec()\t\tПри совпадении возвращает массив и обновляет\r\n\t\tсвойства объекта RegExp, если совпадений нет,\r\n\t\tвозвращает null\r\ntest()\t\tИспользуется, чтобы выяснить, есть ли совпадения\r\n\t\tрегулярного выражения со строкой (аналогично\r\n\t\tString#search), возвращает true или false; чтобы\r\n\t\tполучить сами совпадения, используйте exec или\r\n\t\tString#match\r\ntoString()\t\tВыводит строковое представление объекта RegExp,\r\n\t\tт.е. \"/паттерн/\"\r\n\t________________________________________________\r\n\tИсточники: http://www.w3schools.com,  http://javascript.ru";


(Скачать вместе со скриптом);

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

Post by Infocatcher »

viewtopic.php?p=18304
Infocatcher wrote:Можно как-нибудь починить возможность доступа к глобальному объекту?

Code: Select all

var global = this;
global.x = {};
WScript.Echo(x);
Выдает
Ошибка: Объект не поддерживает это свойство или метод
Код: 800A01B6
Источник: Ошибка выполнения Microsoft JScript
Финт ушами №1:

Code: Select all

var _exports = (function() {
	var a = 1;
	var b = 2;

	return {
		libA: a,
		libB: b
	};
})();

if(_exports && AkelPad.IsInclude()) // this.foo doesn't work: http://akelpad.sourceforge.net/forum/viewtopic.php?p=18304#p18304
	for(var _p in _exports)
		eval("if(!_p) var _p = _exports._p;".replace(/_p/g, _p));
_exports = _p = undefined;
Финт ушами №2:

Code: Select all

(function() {
	var a = 1;
	var b = 2;

	if(AkelPad.IsInclude()) {
		// this.foo = ... doesn't work:
		// http://akelpad.sourceforge.net/forum/viewtopic.php?p=18304#p18304
		// But declarations without "var" becomes global
		var _exports = {
			libA: a,
			libB: b
		};
		var _f = [];
		for(var _p in _exports)
			_f[_f.length] = _p + " = e." + _p + ";";
		// Go to the global scope
		new Function("e", _f.join("\n"))(_exports);
	}
})();
Упрощенный финт ушами №2 (только если экспортируемые имена не используются):

Code: Select all

(function() {
	var a = 1;
	var b = 2;

	if(AkelPad.IsInclude()) {
		// this.foo = ... doesn't work:
		// http://akelpad.sourceforge.net/forum/viewtopic.php?p=18304#p18304
		// But declarations without "var" becomes global
		libA = a;
		libB = b;
	}
})();
Использование:

Code: Select all

AkelPad.Include("lib.js");
WScript.Echo(libA + "\n" + libB);
Правда, только первый вариант делает проверку на наличие переменной с таким именем.
Но там, если есть такая необходимость, все просто:

Code: Select all

if(typeof global == "undefined")
	global = internal;

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

Post by VladSh »

F. Phoenix wrote:Хм, явоскрипту проще из переменных чтоль строки брать, чем напрямую?
Не легче. Просто использование констант исключает лишние возможные ошибки. Тем более, что кто-то может подключить скрипт и заюзать константу.
F. Phoenix wrote:И какой там ужасный пэкмен перед нашими никами - он же нас сожрет
Это шутка :)
F. Phoenix wrote:А еще я тут твой перевод регесп-тестера подправил...
Считаю, что всё переводить не нужно; причины:
- некоторые надписи не влезают в кнопки (я сначала перевёл почти всё, но потом вернул обратно);
- некоторые надписи привычнее на английском (все програмеры к ним уже привыкли).
В итоге к себе скопировал:

Code: Select all

pTxtRECollect = "Коллекция шаблонов...";
pTxtAddRE     = "Новый шаблон...";
pTxtRenRE     = "Переименование шаблона...";
т.к. оно точнее.
Многоточие в конце потому, что оно много где используется в заголовках модальных диалоговых окон.

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

Post by Infocatcher »

VladSh wrote:Многоточие в конце потому, что оно много где используется в заголовках модальных диалоговых окон.
Многоточие обычно ставят, когда действие элемента управления подразумевает еще необходимость сделать какой-нибудь выбор после нажатия. Ну, как «Сохранить как…» еще спрашивает, куда сохранять.
А вот в заголовках, вроде бы, ни к чему многоточие. Я тут посмотрел... кажется, только в AkelPad'е «Настройки...» в заголовке окна. :)

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

Post by Andrey_A_A »

Instructor скрипт

ActiveColumnSwitch.js

всегда запускается с программой, выключаешь, перезагружаешься он опять активный

Code: Select all

"Активный столбец вкл/выкл" +Call("Scripts::Main", 1, "ActiveColumnSwitch.js", `"%m" "%i"`)
как при отключении, чтобы он не запускался с программой?

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

Post by VladSh »

Infocatcher wrote:Многоточие обычно ставят, когда действие элемента управления подразумевает еще необходимость сделать какой-нибудь выбор после нажатия.
Спасибо за пояснение! Но не совсем понятно, что есть "выбор", кнопки "Ок" и "Отмена" тоже вроде выбор. В чём тут соль?
Andrey_A_A wrote:как при отключении, чтобы он не запускался с программой?
Может, + убрать перед Call?
Locked