Использовать HTML Tidy для отступа HTML-кода? - PullRequest
31 голосов
/ 22 августа 2011

Можно ли использовать 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>

Как я могу опустить все лишние вещи и заставить их делать отступ в коде?

Простите, если это не та функция, которую предполагается поддерживать, какую библиотеку / инструмент я ищу?

Ответы [ 5 ]

21 голосов
/ 20 января 2012

Используйте файл конфигурации только с параметрами 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.

19 голосов
/ 12 марта 2014

Я не нашел возможности "только переопределить - без изменений".Следующий конфигурационный файл будет "восстанавливать" как можно меньше и (в основном) только заново делать отступ 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> к первой пуле.

Я не нашелвозможность сохранить все на входе и только заново создать отступ для файла.

11 голосов
/ 19 февраля 2014

Вам понадобится следующая опция:

tidy --show-body-only yes -i 4 -w 80 -m file.html

http://tidy.sourceforge.net/docs/quickref.html#show-body-only

-i 4 - отступ в 4 пробела (приборка никогда не использует табуляции)

-w 80 -перенести в столбец 80 (по умолчанию в моей системе: 68, очень узкий)

-m - изменить файл на месте

(вы можете пропустить последний вариант и сначала проверить вывод)

Отображение только тела, естественно, пропустит tidy-mark (генератор meta).

Другие интересные опции: --quiet yes - не печатает рекламу W3C и другие ненужныевывод (ошибки все еще сообщаются)

3 голосов
/ 19 января 2016

Чтобы ответить на исходный вопрос автора, используя 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-код не добавлен. Ошибки подавлены. Чтобы узнать, что делает каждая опция, лучше обратиться к официальному справочнику .

3 голосов
/ 23 января 2014

Я очень опоздал на вечеринку :)

Но в вашем файле настроек установлено

tidy-mark: no

по умолчанию для этого установлено значение yes.

После этого Tidy не добавит метатег метагенератора в ваш HTML.

...