| View previous topic :: View next topic |
| Author |
Message |
CleriC
Joined: 27 Mar 2012 Posts: 31
|
Posted: Tue Mar 27, 2012 4:29 pm Post subject: Форматтер кода XML и С++ |
|
|
Существуют ли для AkelPad плагины, которые форматируют код документов XML (расставляют отступы и пр.)?
Существуют ли плагины, которые делают тоже самое с кодом С++? |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2509 Location: Киев, Русь
|
Posted: Tue Mar 27, 2012 5:32 pm Post subject: |
|
|
| Смотрите сюда. На сколько я понимаю, Вам нужны HTML Tidy и AStyle. |
|
| Back to top |
|
 |
CleriC
Joined: 27 Mar 2012 Posts: 31
|
Posted: Wed Mar 28, 2012 5:17 am Post subject: |
|
|
Что-то у меня не получилось, подскажите, пожалуйста.
По поводу HTML TiDy:
Положил HTMLTidy.js и reformat.cfg в папку AkelPad\AkelFiles\Tools\HTMLTidy\ (как было указано в описании) но скрипт отказался вызываться, написал что должен лежать в \AkelFiles\Plugs\Scripts\ перенес файлы туда.
Еще положил ShowMenuEx.js в папку скриптов и ShowMenuCommon.js в папку AkelFiles\Plugs\Scripts\Include\ - без них тоже не работал.
Еще вот этот файл положил \AkelFiles\Plugs\Scripts\Params\HTMLTidy.param
tidy.exe скачал и положил в в \AkelFiles\Tools\HTMLTidy\
Открыл XML файл, запустил скрипт через эту менюшку: http://s2.ipicture.ru/uploads/20120328/a7RbZyTu.png
Написано - работает.
При первом запуске скрипта программа выдает контекстное меню:
http://s2.ipicture.ru/uploads/20120328/bK3AnqPn.png
Нажимаю Custom, вроде как скрипт запускается.
Подвесил команды на хоткей:
http://s2.ipicture.ru/uploads/20120328/1R44p6Uf.png
Вызываю - но форматирования не происходит. Вообще ничего не происходит.
С AStyle примерно тоже самое.
AStyle.js в скрипты, AStyle.param в параметры, AStyle.exe в AkelPad\AkelFiles\Tools\AStyle\
Запускаю скрипт, появляется контекстное меню. Нажимаю хоткей: курсор убегает в конец документа но с кодом не происходит никаких изменений, как был сдвинут к левому краю, так и остался.
Что я делаю не так? Судя по всему скрипт то запускается, но как сделать так что бы он сработал? Возможно что-то с настройками не так? AkelPad 4.7.3 x86. |
|
| Back to top |
|
 |
DV
Joined: 16 Nov 2006 Posts: 723 Location: Kyiv, Ukraine
|
Posted: Wed Mar 28, 2012 9:29 am Post subject: |
|
|
| Как по мне, то jsBeautifier.js отлично справляется. И не требует внешних программ. |
|
| Back to top |
|
 |
Infocatcher
Joined: 06 Aug 2007 Posts: 1431
|
Posted: Wed Mar 28, 2012 9:55 am Post subject: |
|
|
Еще есть tabifier.js, отложенный до создания окошка с галочками, только вот что-то все никак не собраться.
А так мне хватает jsBeautifier.js, вот и ленюсь.  |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2509 Location: Киев, Русь
|
Posted: Wed Mar 28, 2012 10:04 am Post subject: |
|
|
CleriC
Наверное se7h не перепилил скрипты под Include, т.к. ShowMenuEx.js должен находиться в ..\Scripts\Include\.
Вот рабочая (в т.ч. и с использованием меню) версия скрипта AStyle.js | Code: | /// Process current file in AStyle http://astyle.sourceforge.net/astyle.html
// Version 1.2
//
// Usage:
// Call("Scripts::Main", 1, "AStyle.js", "`flags`")
//
// Or support ShowMenuEx.js if you do not specify a flags in argument:
// Call("Scripts::Main", 1, "AStyle.js")
var WshShell = new ActiveXObject("WScript.shell");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var pToolPath = AkelPad.GetAkelDir() + "\\AkelFiles\\Tools\\AStyle\\AStyle.exe";
var pToolFlags = "";
if (WScript.Arguments.length)
{
pToolFlags += WScript.Arguments(0);
}
else if (!pToolFlags)
{
if (! AkelPad.Include("ShowMenuEx.js")) WScript.Quit();
var pFlags = getSelectedMenuItem(POS_CURSOR, "", 0);
if (!pFlags) WScript.Quit();
pToolFlags += pFlags;
}
var hEditWnd = AkelPad.GetEditWnd();
var pTmpFile;
var pText;
if (pTmpFile = CreateTempFile())
{
AkelPad.SaveFile(hEditWnd, pTmpFile, 65001 /*UTF-8*/, true, false);
pToolPath = correctCommandLine(pToolPath);
pTmpFile = correctCommandLine(pTmpFile);
WshShell.Run("%COMSPEC% /c " + pToolPath + " " + pToolFlags + " " + pTmpFile, 0, true);
pText = AkelPad.ReadFile(pTmpFile);
setRedraw(hEditWnd, false);
var nCaretPos = AkelPad.GetSelStart();
AkelPad.SetSel(0, -1);
AkelPad.ReplaceSel(pText);
AkelPad.SetSel(nCaretPos, nCaretPos);
setRedraw(hEditWnd, true);
fso.DeleteFile(pTmpFile);
}
//Functions
function CreateTempFile()
{
var oTmpFolder;
var oTmpFile;
var pTmpName;
if (oTmpFolder = fso.GetSpecialFolder(2 /*TemporaryFolder*/))
{
pTmpName = fso.GetTempName();
if (oTmpFile = oTmpFolder.CreateTextFile(pTmpName))
oTmpFile.Close();
return (oTmpFolder.Path + "\\" + pTmpName);
}
return "";
}
function correctCommandLine(pPath)
{
if (pPath.search(/ /) != -1)
return "\"" + pPath + "\"";
else
return pPath;
}
function setRedraw(hWnd, bRedraw)
{
var oSys = AkelPad.SystemFunction();
AkelPad.SendMessage(hWnd, 11 /*WM_SETREDRAW*/, bRedraw, 0);
bRedraw && oSys.Call("user32::InvalidateRect", hWnd, 0, true);
} |
Только параметры надо правильно указывать так (в Custom используемые мной параметры):
| Code: | -b -N -o -t -S -w -Y -M -H -U -p = Custom
-A1 = Allman Style |
Я вообще файл параметров для данного скрипта не использую, т.к. мне надо всегда лишь 1 вариант, и я задаю его в аргументах при вызове скрипта:
| Code: | | -"AStyle форматирование кода" Call("Scripts::Main", 1, "AStyle.js", `"-b -N -o -t -S -w -Y -M -H -U -p"`) Icon("%a\AkelFiles\Plugs\Toolbar.dll", 28) | Такой вызов работает и со старой версией скрипта.
Что-то похожее и с HTMLTidy.js.
Строку
| Code: | | eval(AkelPad.ReadFile(AkelPad.GetAkelDir() + "\\AkelFiles\\Plugs\\Scripts\\ShowMenuEx.js")); | надо заменить на
| Code: | | if (! AkelPad.Include("ShowMenuEx.js")) WScript.Quit(); | И, возможно (я его просто не использую, потому точно не знаю), параметры передать по другому. Тут поэкспериментировать придётся или se7h как-то потрусить))
DV
Возможно, я не пробовал. |
|
| Back to top |
|
 |
CleriC
Joined: 27 Mar 2012 Posts: 31
|
Posted: Thu Mar 29, 2012 5:04 am Post subject: |
|
|
jsBeautifier.js заработал - действительно самый просто вариант - всего один файл положить в папку скрипты. Посмотрю на что он способен.
Можно настроить таким образом, что бы после форматирования документа он не выделял текст и оставлял курсор на том месте где он и был? А то весь текст выделен и теряешь место где стоял курсор.
При форматировании текста С++ jsBeautifier строки с #define компонует в одну строку:
http://s2.ipicture.ru/uploads/20120329/QP0ina1r.png
Это настраивается?
Умеет ли jsBeautifier проверять целостность кода? Хотя бы предупреждать, если какой-то тег не закрыт? |
|
| Back to top |
|
 |
Infocatcher
Joined: 06 Aug 2007 Posts: 1431
|
Posted: Thu Mar 29, 2012 7:43 am Post subject: |
|
|
| Quote: | | Можно настроить таким образом, что бы после форматирования документа он не выделял текст и оставлял курсор на том месте где он и был? А то весь текст выделен и теряешь место где стоял курсор. |
Положение прокрутки должно сохраняться.
С восстановлением курсора сложнее. Теоретически – сделать можно, надо пробовать.
Только вот для точного восстановления надо или метки добавлять (а чтобы не сломать парсер, надо при этом учитывать синтаксис, так что восстановится в пределах «слова»), или запоминать, что находится слева (причем или без пробелов, или с заменой группы пробелов на один). Во втором случае это дополнительное выделение памяти. Впрочем, кого это сейчас волнует?
| Quote: | | При форматировании текста С++ ... |
С этим ничего не поделаешь – все же скрипт предназначен для JavaScript. Все-таки это всего лишь побочный эффект от схожего синтаксиса.
| Quote: | | Умеет ли jsBeautifier проверять целостность кода? Хотя бы предупреждать, если какой-то тег не закрыт? |
Не умеет, но можно оформить предложение – вдруг добавит кто. |
|
| Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 4640
|
Posted: Thu Mar 29, 2012 7:52 am Post subject: |
|
|
C++:
1. Скачиваем AStyle.
2. Помещаем файл AStyle.exe в папку "[AkelPad]\AkelFiles\Tools".
3. Создаем вызов в ToolBar или ContextMenu или HotKeys плагине:
| Code: | | -"C++ beautifier" Call("Log::Output", 1, `"%a\AkelFiles\Tools\AStyle.exe" --style=allman`, "", "", "", -1, -1, 1052673) Icon(0) |
HTML:
1. Скачиваем HTML Tidy.
2. Помещаем файл Tidy.exe в папку "[AkelPad]\AkelFiles\Tools".
3. Создаем вызов в ToolBar или ContextMenu или HotKeys плагине:
| Code: | | -"HTML beautifier" Call("Log::Output", 1, `"%a\AkelFiles\Tools\Tidy.exe" -utf8 --indent auto --quiet yes --wrap 0 --show-errors 0`, "", "", "", 65001, 65001, 1052673) Icon(0) |
XML:
1. Скачиваем HTML Tidy.
2. Помещаем файл Tidy.exe в папку "[AkelPad]\AkelFiles\Tools".
3. Создаем вызов в ToolBar или ContextMenu или HotKeys плагине:
| Code: | | -"XML beautifier" Call("Log::Output", 1, `"%a\AkelFiles\Tools\Tidy.exe" -utf8 -xml --indent auto --quiet yes --wrap 0 --show-errors 0`, "", "", "", 65001, 65001, 1052673) Icon(0) |
Требуется Log плагин версии 2.4 или выше.
Last edited by Instructor on Fri Mar 30, 2012 3:02 pm; edited 3 times in total |
|
| Back to top |
|
 |
CleriC
Joined: 27 Mar 2012 Posts: 31
|
Posted: Thu Mar 29, 2012 7:55 am Post subject: |
|
|
| Infocatcher wrote: | Положение прокрутки должно сохраняться.
|
Да, оно действительно сохраняется. Если с курсором все так сложно - фиг с ним.
Еще пару вопросов:
Можно ли настроить jsBeautifier таким образом, что бы содержимое внутри тега не переносилось на следующиую строку.
Вот поясняющий скриншот:
http://s1.ipicture.ru/uploads/20120329/csfhHy2s.png
У меня есть длинный тег <group id="СЗ" name="Статическое зондирование" fullname="Оборудование для статического зондирования" img="" order="1">
jsBeautifier переносит кусок img="" order="1"> на следующую строку (см. скрин 4 и 5 строчки). Этого можно избежать?
Второй вопрос, возможно не к бьютифаеру, а к настройкам самого акельпада. Можно ли сделать так, что бы длинный текст в одну строчку, при включении опции "Перенос по словам", начинался не с самого левого края, а с того места какому тегу он принадлежит. Опять же скриншот:
http://s1.ipicture.ru/uploads/20120329/ZWHtxWin.png
Строка №7 очень длинная, но мне нужно видеть ее на экране. При этом сбивается выравнивание по тегам (то, чего я собственно добивался от бьютифаера). Можно ли настроить так, что бы текст шел от нарисованной красной линии? |
|
| Back to top |
|
 |
Infocatcher
Joined: 06 Aug 2007 Posts: 1431
|
Posted: Thu Mar 29, 2012 8:19 am Post subject: |
|
|
| Quote: | | что бы содержимое внутри тега не переносилось на следующиую строку |
Можно, надо запустить с дополнительным аргументом
-maxChar=число
При особом желании можно даже
-maxChar=Infinity
| Quote: | | возможно не к бьютифаеру, а к настройкам самого акельпада |
Пожалуй, было бы удобно. Лишь бы отключить можно было.
Впрочем, ни AkelPad, ни jsBeautifier такого не умеют. |
|
| Back to top |
|
 |
CleriC
Joined: 27 Mar 2012 Posts: 31
|
Posted: Thu Mar 29, 2012 8:43 am Post subject: |
|
|
| Infocatcher wrote: |
Можно, надо запустить с дополнительным аргументом
-maxChar=число
При особом желании можно даже
-maxChar=Infinity |
Поэкспериментирую.
| Quote: | | Впрочем, ни AkelPad, ни jsBeautifier такого не умеют. |
Жалко, ну да ладно.
Вот еще вопрос. Когда работаешь файлами где есть какая-то отбивка справа (например XML), хотелось, что бы курсор переводился не на начало строки, а выравнивался по тегу внутри которого он находится.
Вот скриншот:
http://s1.ipicture.ru/uploads/20120329/AZYb7XAe.png
Находясь на строчке 253 я нажимаю Enter и курсор переводится на новую строку - в начало 254. А хотелось бы что бы он переводился на уровень тега (помечено красным). Такое возможно?
Где в AkelPad-е можно посмотреть путь до открытого файла? (в заголовке только имя) |
|
| Back to top |
|
 |
Infocatcher
Joined: 06 Aug 2007 Posts: 1431
|
Posted: Thu Mar 29, 2012 9:35 am Post subject: |
|
|
| Quote: | | что бы курсор переводился не на начало строки, а выравнивался по тегу внутри которого он находится |
меню Настройки – Сохранять отступы слева
| Quote: | | Где в AkelPad-е можно посмотреть путь до открытого файла? (в заголовке только имя) |
Если включить (P)MDI-режим, в заголовке будет путь:
Настройки – Оконный режим |
|
| Back to top |
|
 |
Infocatcher
Joined: 06 Aug 2007 Posts: 1431
|
Posted: Thu Mar 29, 2012 10:45 am Post subject: |
|
|
| CleriC wrote: | | Если с курсором все так сложно - фиг с ним. |
Вроде, получилось подкрутить исходный скрипт: https://github.com/einars/js-beautify/pull/109
Осталось понять, как в AkelPad'е не просто восстанавливать положение прокрутки, а пересчитывать с учетом изменений. |
|
| Back to top |
|
 |
Fr0sT
Joined: 24 Jul 2007 Posts: 850
|
Posted: Thu Mar 29, 2012 11:14 am Post subject: |
|
|
| Кстати насчет maxChar. Можно ли сделать, чтобы по дефолту разбивка была отключена? Либо чтобы срабатывала установкой значения в 0. |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|