Использовать HTML Tidy для отступа HTML-кода?
Можно ли использовать HTML Tidy только для отступа HTML-кода?
Образец кода
<form action="?" method="get" accept-charset="utf-8">
<ul>
<li>
<label class="screenReader" for="q">Keywords</label><input type="text" name="q" value="" id="q" />
</li>
<li><input class="submit" type="submit" value="Search" /></li>
</ul>
</form>
Желаемый результат
<form action="?" method="get" accept-charset="utf-8">
<ul>
<li>
<label class="screenReader" for="q">Keywords</label><input type="text" name="q" value="" id="q"/>
</li>
<li><input class="submit" type="submit" value="Search"/></li>
</ul>
</form>
Если я запускаю его с помощью стандартной команды, tidy -f errs.txt -m index.html
тогда я получаю это
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Mac OS X (vers 31 October 2006 - Apple Inc. build 15.3.6), see www.w3.org">
<title></title>
</head>
<body>
<form action="?" method="get" accept-charset="utf-8">
<ul>
<li><label class="screenReader" for=
"q">Keywords</label><input type="text" name="q" value="" id=
"q"></li>
<li><input class="submit" type="submit" value="Search"></li>
</ul>
</form>
</body>
</html>
Как я могу опустить все лишние вещи и заставить их делать отступ в коде?
Простите, если это не та функция, которую предполагается поддерживать, какую библиотеку / инструмент я ищу?
7 ответов
Используйте файл конфигурации только с indent
, tidy-mark
, а также quiet
опции:
indent: auto
indent-spaces: 2
quiet: yes
tidy-mark: no
Назови это tidy_config.txt
и сохраните его в том же каталоге, что и файл.html. Запустите это так:
tidy -config tidy_config.txt index.html
Для дополнительной настройки используйте справочную страницу tidy, чтобы найти другие соответствующие параметры, такие как markup: no
или же force-output: yes
,
Я не нашел возможности "только переопределить - без каких-либо изменений". Следующий конфигурационный файл будет "восстанавливать" как можно меньше и (в основном) только переопределять отступ HTML. Tidy
все еще исправляя некоторые ошибочные условия, такие как дублированные (повторяющиеся) атрибуты.
#based on http://tidy.sourceforge.net/docs/quickref.html
#HTML, XHTML, XML Options Reference
anchor-as-name: no #?
doctype: omit
drop-empty-paras: no
fix-backslash: no
fix-bad-comments: no
fix-uri:no
hide-endtags: yes #?
#input-xml: yes #?
join-styles: no
literal-attributes: yes
lower-literals: no
merge-divs: no
merge-spans: no
output-html: yes
preserve-entities: yes
quote-ampersand: no
quote-nbsp: no
show-body-only: auto
#Diagnostics Options Reference
show-errors: 0
show-warnings: 0
#Pretty Print Options Reference
break-before-br: yes
indent: yes
indent-attributes: no #default
indent-spaces: 4
tab-size: 4
wrap: 132
wrap-asp: no
wrap-jste: no
wrap-php: no
wrap-sections: no
#Character Encoding Options Reference
char-encoding: utf8
#Miscellaneous Options Reference
force-output: yes
quiet: yes
tidy-mark: no
Например, следующий HTML-фрагмент
<div>
<div>
<p>
not closed para
<h1>
h1 head
</h1>
<ul>
<li>not closed li
<li>closed li</li>
</ul>
some text
</div>
</div>
будет изменен на
<div>
<div>
<p>
not closed para
<h1>
h1 head
</h1>
<ul>
<li>not closed li
<li>closed li
</ul>some text
</div>
</div>
Как вы можете заметить, hide-endtags: yes
скрывает закрытие </li>
от второй пули на входе. Настройка hide-endtags: no
- получим следующее:
<div>
<div>
<p>
not closed para
</p>
<h1>
h1 head
</h1>
<ul>
<li>not closed li
</li>
<li>closed li
</li>
</ul>some text
</div>
</div>
так, tidy
добавляет закрытие </p>
и закрытие </li>
до первой пули.
Я не нашел возможности сохранить все на входе и только заново сделать файл.
Вам нужна следующая опция:
tidy --show-body-only yes -i 4 -w 80 -m file.html
http://tidy.sourceforge.net/docs/quickref.html
-i 4
- отступ в 4 пробела (приборка никогда не использует вкладки)
-w 80
- перенос в столбец 80 (по умолчанию в моей системе: 68, очень узкий)
-m
- изменить файл на месте
(вы можете не указывать последний вариант и сначала проверить вывод)
Показывая только тело, естественно, опустить tidy-mark
(генератор meta
).
Еще один классный вариант:--quiet yes
- не печатает рекламу W3C и другой ненужный вывод (ошибки все еще сообщаются)
Чтобы ответить на первоначальный вопрос автора, используя Tidy для отступа HTML-кода, вот что я использую:
tidy --indent auto --quiet yes --show-body-only auto --show-errors 0 --wrap 0 input.html
input.html
<form action="?" method="get" accept-charset="utf-8">
<ul>
<li>
<label class="screenReader" for="q">Keywords</label><input type="text" name="q" value="" id="q" />
</li>
<li><input class="submit" type="submit" value="Search" /></li>
</ul>
</form>
Выход:
<form action="?" method="get" accept-charset="utf-8">
<ul>
<li><label class="screenReader" for="q">Keywords</label><input type="text" name="q" value="" id="q"></li>
<li><input class="submit" type="submit" value="Search"></li>
</ul>
</form>
Дополнительный HTML-код не добавлен. Ошибки подавлены. Чтобы узнать, что делает каждый вариант, лучше обратиться к официальной ссылке.
Я очень поздно на вечеринку:)
Но в вашем наборе настроек Tidy
отметка: нет
по умолчанию это установлено на да.
После этого Tidy не добавит мета-генератор тегов в ваш HTML.
Если вы хотите просто отформатировать любой полученный html, игнорировать ошибки и сделать хороший отступ в коде, это хороший лайнер, использующий
tidy
tidy --show-body-only yes -i 4 -w 80 -m -quiet --force-output y -wrap 0 2>/dev/null
Вы можете использовать его с
curl
тоже
curl -s someUrl | tidy --show-body-only yes -i 4 -w 80 -m -quiet --force-output y -wrap 0 2>/dev/null
Ни одно из решений на основе html tidy мне не помогло — все они в той или иной степени модифицировали контент, поэтому я создаю инструмент CLI и пакет Go https://github.com/ah/htmlformat на основе https://github.com. /эрикчианг/щенок
Он использует Gonet/html
пакет для анализа HTML и специальный модуль записи для записи содержимого с отступами.