Форматтер кода XML и С++

Russian main discussion
  • Author
  • Message
Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

CleriC wrote:Выдает 5.8.
Хм, ну, вроде, новый, у меня такую же версию выводит.
CleriC wrote:35: появляются 3 знака табуляции перед словами «Инженерные изыскания»
Угу, вижу. Если получится сделать компактный пример для демонстрации, можно будет пожаловаться сюда.
CleriC wrote:49-50, 96-97, 116-117: на новую строку переносится </p>
По идее, это нормальное поведение для не строчных тэгов, был бы в конце текст, а не закрывающий тэг, не перенесло бы.
CleriC wrote:51-53 и 71-73: <p> и </p> в разных строках
Хм, у меня там

Code: Select all

		<p>
			<h4>Основные параметры зондов, используемых в комплекте ТЕСТ-К4.</h4>
		</p>
выходит, вполне ожидаемо развернуло.
Разве что можно попробовать добавить "p" в -unformattedTags, но результаты могут быть странными.
CleriC wrote:112-113: параметр to тега <link_row уехал на новую строку
125: слишком длинная строка, 183 символа
Ага, вижу, тоже надо авторам библиотеки жаловаться.
CleriC wrote:ЗЫ С -wrapLineLength тоже самое.
Ну да, это просто замена для -maxChar, работать должно точно так же.

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

Post by Infocatcher »

Пока что вот так:
https://github.com/beautify-web/js-beautify/issues/607
Во всяком случае стало понятно, что проблема в принудительных переносах после задания wrap_line_length.

Offline
Posts: 41
Joined: Tue Mar 27, 2012 4:25 pm

Post by CleriC »

Infocatcher wrote:По идее, это нормальное поведение для не строчных тэгов, был бы в конце текст, а не закрывающий тэг, не перенесло бы.
Ну вот эти переносы </p> расстраивают. И <p> то добавлять в unformattedTags не хочется, внутри <p> надо ведь порядок наводить. Возможно есть какая-то настройка, что бы пример вида:

Code: Select all

<p><h4>test</h4></p>
Оставлять в таком же виде? (не разность открывающий и закрывающий теги <p> на разные строки).
Ну и в примере вида:

Code: Select all

<p>Тест <b>Тест</b></p>
Не уносить </p> на новую строку?

Проблема
112-113: параметр to тега <link_row уехал на новую строку
Решается ПОВТОРНЫМ запуском скрипта. Уж не знаю в чем тут дело.
Оригинальный текст:

Code: Select all

		<p>После подачи питания, контроллер проводит самодиагностику, и автоматически переходит в РАБОЧИЙ РЕЖИМ.</p>
		<p>В РАБОЧЕМ РЕЖИМЕ, после ввода параметров опыта (номер, шаг отсчетов и глубина зондирования), текущие
			отсчеты сохраняются в контроллере при нажатии кнопки «ПУСК». Одновременно, они распечатываются
			на минипринтере. Управлять контроллером для записи данных зондирования можно при помощи <link_row to="РК.05.01.01">Радиокнопки РК-11</link_row>.</p>
Форматируем 1 раз:

Code: Select all

		<p>После подачи питания, контроллер проводит самодиагностику, и автоматически переходит в РАБОЧИЙ
			РЕЖИМ.</p>
		<p>В РАБОЧЕМ РЕЖИМЕ, после ввода параметров опыта (номер, шаг отсчетов и глубина зондирования), текущие
			отсчеты сохраняются в контроллере при нажатии кнопки «ПУСК». Одновременно, они распечатываются
			на минипринтере. Управлять контроллером для записи данных зондирования можно при помощи
			<link_row
			to="РК.05.01.01">Радиокнопки РК-11</link_row>.</p>
Форматируем второй раз:

Code: Select all

		<p>После подачи питания, контроллер проводит самодиагностику, и автоматически переходит в РАБОЧИЙ
			РЕЖИМ.
		</p>
		<p>В РАБОЧЕМ РЕЖИМЕ, после ввода параметров опыта (номер, шаг отсчетов и глубина зондирования), текущие
			отсчеты сохраняются в контроллере при нажатии кнопки «ПУСК». Одновременно, они распечатываются
			на минипринтере. Управлять контроллером для записи данных зондирования можно при помощи
			<link_row to="РК.05.01.01">Радиокнопки РК-11</link_row>.</p>
Правда закрывающий тег </p> после слова «РЕЖИМ» уехал на новую строку (почему, кстати?)

Offline
Posts: 41
Joined: Tue Mar 27, 2012 4:25 pm

Post by CleriC »

Можно ли, еще, как-то избежать того, что закрывающая часть тега «/>» уезжает на другую строку?

Code: Select all

<row param="Диапазон измерения удельного сопротивления грунта по конусу (исполнение 1), МПа" val="0,2-50"
			/>
Я понимаю, что это с -wrapLineLength связано, но все-таки, выглядит очень странно.

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

Post by Instructor »

VladSh wrote:

Code: Select all

-"Tidy форматирование XML" Call("Log::Output", 1, `"%a\AkelFiles\Tools\Tidy.exe" -utf8 -xml --indent auto --indent-spaces 3 --quiet yes --wrap 0 --show-errors 0`, "", "", "", 65001, 65001, 1052673)
-"Tidy форматирование HTML" Call("Log::Output", 1, `"%a\AkelFiles\Tools\Tidy.exe" -utf8 --indent auto --indent-spaces 3 --quiet yes --wrap 0 --show-errors 1`, "", "", "", 65001, 65001, 1052673)
не выводят сообщение в окошко Log::Output.
У вас используется --show-errors 1 для HTML, а не выводятся в панель вывода потому-что "1052673".

Для тестирования HTML можете использовать следующий вызов:

Code: Select all

-"HTML tester" Call("Log::Output", 1, `"%a\AkelFiles\Tools\Tidy.exe" -utf8 --indent auto --quiet yes --wrap 0 -errors`, "", "^line (\d+) column (\d+)", "/GOTOLINE=\1:\2", 65001, 65001, 4096) Icon(0)

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

Post by VladSh »

Instructor wrote:Для тестирования HTML можете использовать следующий вызов:

Code: Select all

-"HTML tester" Call("Log::Output", 1, `"%a\AkelFiles\Tools\Tidy.exe" -utf8 --indent auto --quiet yes --wrap 0 -errors`, "", "^line (\d+) column (\d+)", "/GOTOLINE=\1:\2", 65001, 65001, 4096) Icon(0)
Подскажите пожалуйста, как сделать то же самое на скрипте, но чтобы если валидация пройдена, то консоль не выводить, а выдать сообщение "всё ok"?

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

Post by Instructor »

VladSh wrote:...если валидация пройдена, то консоль не выводить, а выдать сообщение "всё ok"?
Требуется Log плагин версии 4.5 или выше:

Code: Select all

var hMainWnd=AkelPad.GetMainWnd();

AkelPad.Call("Log::Output", 1, '"' + AkelPad.GetAkelDir() + '\\AkelFiles\\Tools\\Tidy.exe" -utf8 --indent auto --quiet yes --wrap 0 -errors', "", "^line (\\d+) column (\\d+)", "/GOTOLINE=\\1:\\2", 65001, 65001, 4160 /*64+4096*/)
while (GetExecState())
  WScript.Sleep(100);
if (GetExitCode() == 0)
{
  AkelPad.Call("Log::Output", 6);
  WScript.Echo("OK");
}
else AkelPad.SendMessage(hMainWnd, 1278 /*AKD_DOCK*/, 0x200 /*DK_SHOW*/, GetOutputDock());

function GetExecState()
{
  var lpState;
  var nState=0;

  if (lpState=AkelPad.MemAlloc(4 /*sizeof(DWORD)*/))
  {
    AkelPad.Call("Log::Output", 3, lpState);
    nState=AkelPad.MemRead(lpState, 3 /*DT_DWORD*/);
    AkelPad.MemFree(lpState);
  }
  return nState;
}

function GetExitCode()
{
  var lpCode;
  var nCode=0;

  if (lpCode=AkelPad.MemAlloc(4 /*sizeof(DWORD)*/))
  {
    AkelPad.Call("Log::Output", 3, 0, 0, 0, 0, lpCode);
    nCode=AkelPad.MemRead(lpCode, 3 /*DT_DWORD*/);
    AkelPad.MemFree(lpCode);
  }
  return nCode;
}

function GetOutputDock()
{
  var lpDock;
  var hDock=0;

  if (lpDock=AkelPad.MemAlloc(_X64?8:4 /*sizeof(DOCK *)*/))
  {
    AkelPad.Call("Log::Output", 2, 0, lpDock);
    hDock=AkelPad.MemRead(lpDock, 2 /*DT_QWORD*/);
    AkelPad.MemFree(lpDock);
  }
  return hDock;
}
Last edited by Instructor on Thu Feb 12, 2015 6:38 am, edited 1 time in total.

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

Post by VladSh »

Instructor wrote:ValidateTidy.js
Запрос потянул серьёзные изменения в Log-плагине, но, думаю, это полезно. Огромное Вам спасибо!

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

tidy.js
Подскажите пожалуйста, как поправить?

Добавлено:
Ещё заметил, даже при старом Log-плагине, - вызов из контекстного меню приводит к переходу к строке в окне редактирования при даблклике на "ошибке" в панели Log-плагина, а вызов из скрипта формирует текст в панели Log-плагина, но при даблклике на "ошибке" перехода к нужной строке не происходит.
Last edited by VladSh on Fri Mar 27, 2015 7:10 pm, edited 2 times in total.

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

Post by Instructor »

VladSh
В ValidateTidy.js была не экранирована обратная косая черта:
AkelPad.Call("Log::Output", 1, '"' + AkelPad.GetAkelDir() + '\\AkelFiles\\Tools\\Tidy.exe" -utf8 --indent auto --quiet yes --wrap 0 -errors', "", "^line (\\d+) column (\\d+)", "/GOTOLINE=\\1:\\2", 65001, 65001, 4160 /*64+4096*/)

Offline
Posts: 41
Joined: Tue Mar 27, 2012 4:25 pm

Post by CleriC »

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

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

Post by Infocatcher »

CleriC
Да там почти все связано с принудительным переносом, вроде бы как, а насчет него разработчики пока только метки развесили – стало быть, воспроизвели, но еще не починили.

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

Post by VladSh »

Instructor wrote:не экранирована обратная косая черта
Да, спасибо, теперь переход происходит.
А на втором вызове AkelPad всё же продолжает крэшиться.

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 »

Instructor wrote:Какой код, на каком тексте?
Код чуть выше давал - tidy.js (я в нём уже удвоил слэши).

На тексте - вставляю любой xml-шаблон с помощью Template-плагина, затем вызываю скрипт "Убрать все переводы строк", после чего запускаю жму кнопку:

Code: Select all

-"Formatting test" Call("Scripts::Main", 1, "tidy.js", `-action=1 -filetype="-xml"`)
и на строке 29 (что внутри блока else) AkelPad крэшится.

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

Post by Instructor »

VladSh
Исправлено. Будет доступно после релиза 4.9.3.
Post Reply