Помогите написать скрипт

Russian main discussion
  • Author
  • Message
Offline
Posts: 173
Joined: Mon Dec 06, 2010 9:53 am
Location: г.Харьков, Русь

Post by San_dr »

создал из стандартного тулбара, скопировав его ToolBar-TextMain.dll и такой - же файл ToolBar-TextMain.ini из стандартного (временно, пока не настрою как полноэкранный)
поместил FullScreenWithToolBar.js в папку скриптов, создал пункты меню

Code: Select all

  SEPARATOR
  -"С тулбаром по умолчанию" Call(ScriptsMain, 1, FullScreenWithToolBar.js) 
  -"С тулбаром для работы с текстом" Call(ScriptsMain, 1, FullScreenWithToolBar.js, ToolBar-TextMain) 
при вызове любого пункта краш с сообщением
Image
что не так?
переименовывал новые ini и dll в ToolBarMain - то же самое. TextMain - аналогично
Last edited by San_dr on Tue May 22, 2012 7:11 pm, edited 1 time in total.

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

Post by KDJ »

San_dr
You have to copy exactly, what VladSh wrote in the script:

Code: Select all

-"С тулбаром по умолчанию" Call("Scripts::Main", 1, "FullScreenWithToolBar.js")
-"С тулбаром для работы с текстом" Call("Scripts::Main", 1, "FullScreenWithToolBar.js", "ToolBar-Text::Main")
And file name is ToolBar-Text.dll.

Offline
Posts: 173
Joined: Mon Dec 06, 2010 9:53 am
Location: г.Харьков, Русь

Post by San_dr »

KDJ
Спасибо, все получилось
Image
ну, что еще сказать про эту замечательную программу...
я давно говорю, что польский джаз глубже и умней американского! :)))))))

Offline
Posts: 2
Joined: Fri Jul 06, 2012 11:58 am

Post by alok »

Привет всем! Есть текст вида:
любой текст
любой текст
любой текст
любой текст
любой текст

любой текст
любой текст
любой текст
любой текст

Необходимо, чтобы после каждых 3 непустых строк добавлялся перевод строки:
любой текст
любой текст
любой текст

любой текст
любой текст

любой текст
любой текст
любой текст

любой текст
Как это сделать? :roll:

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

Post by VladSh »

alok
Как-то

Code: Select all

var lineSepDefault = 3;
var pBreak = "\r";
var sContent = AkelPad.GetTextRange(0, -1);
var arrLines = sContent.split(pBreak);
var kBorder;
var bEmptyLine;

for (i = 0; i < arrLines.length; i++) {
	if (arrLines[i].length != 0)
	{
		kBorder = arrLines.length - i;
		if (kBorder > lineSepDefault) kBorder = lineSepDefault;
		
		for (k = 0; k < kBorder; k++) {
			bEmptyLine = (arrLines[i + k].length == 0);
			if (bEmptyLine) break;
		}
		i += (k - 1);
		
		if ((k == lineSepDefault) && !bEmptyLine)
			arrLines[i] += pBreak;
	}
}

AkelPad.SetSel(0, -1);
AkelPad.ReplaceSel(arrLines.join(pBreak));
.
Можно было бегать по строке с помощью indexOf (и так наверное было бы быстрее), но мне не захотелось.

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

Post by Infocatcher »

А вот вариант из серии «теперь у нас есть две проблемы», на регулярных выражениях:

Что: ([^\n\r]+(\r\n?|\n)){3}(?!(\r\n?|\n))
Чем: \0\n

Если через SearchReplace.js, то заменять на $&\n

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

Post by VladSh »

Infocatcher
Для интереса скопировал "Что" и $&\n в SearchReplace.js, поставил галку "Регулярные выражения", но оно не работает.

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

Post by Infocatcher »

VladSh
Странно, у меня работает.
Если только это старая версия JScript, не умеющая (?! ...)

Offline
Posts: 2
Joined: Fri Jul 06, 2012 11:58 am

Post by alok »

VladSh wrote:alok Как-то так
Спасибо большое, работает!!!!
Infocatcher wrote:А вот вариант из серии «теперь у нас есть две проблемы», на регулярных выражениях:

Что: ([^\n\r]+(\r\n?|\n)){3}(?!(\r\n?|\n))
Чем: \0\n

Если через SearchReplace.js, то заменять на $&\n
Описал как:
pContent = pContent.replace(/([^\n\r]+(\r\n?|\n)){3}(?!(\r\n?|\n))/gm, "\0\n");
Занулило данные. Но все равно спасибо.

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

Post by Infocatcher »

alok
\0 – это для встроенного диалога замены.
Вот так работает:

Code: Select all

AkelPad.ReplaceSel(
	AkelPad.GetSelText()
		.replace(/([^\n\r]+(\r\n?|\n)){3}(?!(\r\n?|\n))/g, "$&\r")
);
Там еще тонкость в том, что находит-то любой вариант перевода строки, а замена делается на вполне конкретный.
Или можно вот так:

Code: Select all

AkelPad.ReplaceSel(
	AkelPad.GetSelText()
		.replace(/([^\n\r]+(\r\n?|\n)){3}(?!(\r\n?|\n))/g, "$&$2")
);

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

Post by VladSh »

Infocatcher
У меня на WinXP sp3 не работает ни один из приведенных вариантов.

Offline
Posts: 88
Joined: Sun Jun 03, 2012 8:15 am

Post by Visitor7 »

VladSh, тоже XPsp3, оба работают: ([^\n\r]+(\r\n?|\n)){3}(?!(\r\n?|\n)) R: \0\2 SR: $&$2
Infocatcher, у меня в скрипте с \n и \r заморачиваться бесполезно. При поиске \n вроде вообще не работает, а \r находит любое завершение строки. При замене \r ставит то завершение строки, которое установлено по умолчанию в меню "формат новой строки". А \n странно себя ведет при замене. Если она попадает после завершения строки, то игнорируется, а если после символа, то добавляет перенос строки по умолчанию. Вот так работает для любых завершений строк: .replace(/([^\r]+\r){3}(?!\r)/g, "$&\r");
В SearchReplace наоборот: (.+\n){3}(?!\n) и $&\n
А вот в Replace поиск действует так же как в SearchReplace(кроме .), но замена чувствительна и \r в замене обозначает именно символ \r, а \n - \n. Поэтому вот так: ([^\n]+(\n)){3}(?!\n) и \0\2

Offline
Posts: 14
Joined: Thu Aug 16, 2012 6:52 pm

Post by vadim »

Мне нужна программа, расширяющая возможности AkelPad, но я не знаю что это должно быть, плагин или скрипт. Мне посоветовали обратиться сюда, т.к. ее вроде возможно реализовать при помощи скрипта. Ничего подобного я на форуме не нашел (может плохо искал).

Программа должна уметь делать примерно следующее. В одну из вкладок загружается структурированный файл, информация в котором помещена внутри специальных меток (что-то типа тегов в HTML файлах). Каждая пара меток уникальна.

Пример: <01>информация 1</01>; <02>информация 2</02> и т.д.

Во вторую вкладку помещается шаблон со вставленными аналогичными метками, но без информации.

Пример: <H2><01></01></H2> <P><02></02></P>

Необходимо, чтобы после запуска требуемой мне программы информация скопировалась из меток вкладки файла с информацией в соответствующие метки вкладки с шаблоном, а метки в шаблоне, после копирования, уничтожились.

Пример: <H2>информация 1</H2> <P>информация 2</P>

Информация для копирования ищется во всех неактивированных вкладках и переносится в активированную.
Уничтожать или нет метки в шаблоне устанавливается в настройках.
В настройках прописывается список из каких меток в какие должна копироваться информация.

Вот что примерно требуется. Если нужно, могу написать подробнее, предоставить примеры файлов.

Не взялся бы кто-нибудь написать такой скрипт, и что для этого требуется от меня?
Пишите в личку.

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

Post by KDJ »

vadim
Try this script:

Code: Select all

/**************************************
Usage
1. AkelPad in MDI/PMDI mode.
2. Open only two files:
   - first - template file,
   - next - file with info.
3. Run this script.
4. If not errors, result is in new tab.
**************************************/

var sText = AkelPad.GetTextRange(0, -1);
var oRE   = /(<([\s\S]+?)>)([\s\S]+?)(<\/\2>)/g;
var aInfo = [];
var aExec;
var i;

while (aExec = oRE.exec(sText))
  aInfo.push([aExec[1] + aExec[4], aExec[3]]);

if (aInfo.length)
{
  AkelPad.Command(4316 /*IDM_WINDOW_FRAMENEXT*/);
  sText = AkelPad.GetTextRange(0, -1);

  for (i = 0; i < aInfo.length; ++i)
  {
    oRE   = new RegExp(Escape(aInfo[i][0]), "g");
    sText = sText.replace(oRE, function(sMatch, nPos, sString) {return aInfo[i][1];} );
  }

  AkelPad.Command(4101 /*IDM_FILE_NEW)*/);
//  AkelPad.SetSel(0, -1);

  AkelPad.ReplaceSel(sText);
}

function Escape(sStr)
{
  return sStr.replace(/[\\.^$+*?|()\[\]{}]/g, "\\$&");
}

Offline
Posts: 6
Joined: Fri Oct 26, 2012 5:58 am

Ведение лога событий.

Post by sasa236 »

Есть необходимость в лог-файле, где бы отражалось дата и имя открытых и напечатанных файлов (в т.ч. и напечатанных в пакетном режиме).
Просьба помочь практически, т.к. в скриптах не силен.
Post Reply