|
|
Clean up your Web pages
with HTML TIDY
This version 13th January 2000
Copyright © 1998-2000 W3C, see tidy.c for
copyright notice.
With many thanks to
Hewlett Packard for financial support during the development
of this software!
How to use Tidy | Downloading Tidy
Integration with other Software | Acknowledgements
To get the latest version of Tidy please visit the original
version of this page at:
http://www.w3.org/People/Raggett/tidy/. Courtesy of Netmind,
you can register for email reminders when new versions of tidy
become available.
The public email list devoted to HTML Tidy is: <html-tidy@w3.org>. To subscribe
send an email to html-tidy-request@w3.org with the word subscribe
in the subject line (include the word unsubscribe if you want to
unsubscribe). The archive for
this list is accessible online. Please use this list to report
errors or enhancement requests. See the release notes for information
on recent changes. Your feedback is welcome!
If you find HTML Tidy useful and you would like to say thanks,
then please send me a (paper) postcard or other souvenir from the
area in which you live along with a few words on what you are
using Tidy for. It will be fun to map out where Tidy users are to
be found! My postal address is given at
the end of this file.
Tutorials for HTML and CSS
If you are just starting off and would like to know more about
how to author Web pages, you may find my guide to HTML and CSS
helpful. Please send me feedback on this, and I will do my best
to further improve it.
Support for Word2000
Tidy can now perform wonders on HTML saved from Microsoft Word
2000! Word bulks out HTML files with stuff for round-tripping
presentation between HTML and Word. If you are more concerned
about using HTML on the Web, check out Tidy's "Word-2000" config option! Of course Tidy does a
good job on Word'97 files as well!
Introduction to TIDY
When editing HTML it's easy to make mistakes. Wouldn't it be
nice if there was a simple way to fix these mistakes
automatically and tidy up sloppy editing into nicely layed out
markup? Well now there is! Dave Raggett's HTML TIDY is a free
utility for doing just that. It also works great on the
atrociously hard to read markup generated by specialized HTML
editors and conversion tools, and can help you identify where you
need to pay further attention on making your pages more
accessible to people with disabilities.
Tidy is able to fix up a wide range of problems and to bring
to your attention things that you need to work on yourself. Each
item found is listed with the line number and column so that you
can see where the problem lies in your markup. Tidy won't
generate a cleaned up version when there are problems that it
can't be sure of how to handle. These are logged as "errors"
rather than "warnings".
Tidy features in a
recent article on XHTML by webreview.com.
Examples of TIDY at work
Tidy corrects the markup in a way that matches where possible
the observed rendering in popular browsers from Netscape and
Microsoft. Here are just a few examples of how TIDY perfects your
HTML for you:
- Missing or mismatched end tags are detected and
corrected
<h1>heading
<h2>subheading</h3>
is mapped to
<h1>heading</h1>
<h2>subheading</h2>
- End tags in the wrong order are corrected:
<p>here is a para <b>bold <i>bold italic</b> bold?</i> normal?
is mapped to
<p>here is a para <b>bold <i>bold italic</i> bold?</b> normal?
- Fixes problems with heading emphasis
<h1><i>italic heading</h1>
<p>new paragraph
In Netscape and Internet Explorer this causes everything
following the heading to be in the heading font size, not the
desired effect at all!
Tidy maps the example to
<h1><i>italic heading</i></h1>
<p>new paragraph
- Recovers from mixed up tags
<i><h1>heading</h1></i>
<p>new paragraph <b>bold text
<p>some more bold text
Tidy maps this to
<h1><i>heading</i></h1>
<p>new paragraph <b>bold text</b>
<p><b>some more bold text</b>
- Getting the <hr> in the right place:
<h1><hr>heading</h1>
<h2>sub<hr>heading</h2>
Tidy maps this to
<hr>
<h1>heading</h1>
<h2>sub</h2>
<hr>
<h2>heading</h2>
- Adding the missing "/" in end tags for anchors:
<a href="#refs">References<a>
Tidy maps this to
<a href="#refs">References</a>
- Perfecting lists by putting in tags missed out:
<body>
<li>1st list item
<li>2nd list item
is mapped to
<body>
<ul>
<li>1st list item</li>
<li>2nd list item</li>
</ul>
- Missing quotes around attribute values are added
Tidy inserts quote marks around all attribute values for you.
It can also detect when you have forgotten the closing quote
mark, although this is something you will have to fix
yourself.
- Unknown/Proprietary attributes are reported
Tidy has a comprehensive knowledge of the attributes defined
in the HTML 4.0 recommendation from W3C. This often allows you to
spot where you have mistyped an attribute or value.
- Proprietary elements are recognized and reported as
such.
Tidy will even work out which version of HTML you are using
and insert the appropriate DOCTYPE element, as per the W3C
recommendations.
- Tags lacking a terminating '>' are spotted
This is something you then have to fix yourself as Tidy is
unsure of where the > should be inserted.
Layout style
You can choose which style you want Tidy to use when it
generates the cleaned up markup: for instance whether you like
elements to indent their contents or not. Several people have
asked if Tidy could preserve the original layout. I am sorry to
say that this would be very hard to support due to the way Tidy
is implemented. Tidy starts by building a clean parse tree from
the source file. The parse tree doesn't contain any information
about the original layout. Tidy then pretty prints the parse tree
using the current layout options. Trying to preserve the original
layout would interact badly with the repair operations needed to
build a clean parse tree and considerably complicate the
code.
Some browsers can screw up the right alignment of text
depending on how you layout headings. As an example,
consider:
<h1 align="right">
Heading
</h1>
<h1 align="right">Heading</h1>
Both of these should be rendered the same. Sadly a common
browser bug fails to trim trailing whitespace and misaligns the
first heading. HTML Tidy will protect you from this bug, except
when you set the indent option to "yes".
Setting the indent option to yes can also cause problems with
table layout for some browsers:
<td><img src="foo.gif"></td>
<td><img src="foo.gif"></td>
will look slightly different from:
<td>
<img src="foo.gif">
</td>
<td>
<img src="foo.gif">
</td>
You can avoid such quirks by using indent: no or
indent: auto in the config file.
Internationalization issues
Tidy offers you a choice of character encodings: US ASCII, ISO
Latin-1, UTF-8 and the ISO 2022 family of 7 bit encodings. The
full set of HTML 4.0 entities are defined. Cleaned up output uses
HTML entity names for characters when appropriate. Otherwise
characters outside the normal range are output as numeric
character entities. Tidy defaults to assuming you want the output
to be in US ASCII. Tidy doesn't yet recognize the use of the HTML
meta element for specifying the character encoding.
Accessibility
Tidy offers advice on accessibility problems for people using
non-graphical browsers. The most common thing you will see is the
suggestion you add a summary attribute to table elements. The
idea is to provide a summary of the table's role and structure
suitable for use with aural browsers.
Cleaning up presentational markup
Many tools generate HTML with an excess of FONT, NOBR and
CENTER tags. Tidy's -clean option will replace them by
style properties and rules using CSS. This makes the markup
easier to read and maintain as well as reducing the file size!
Tidy is expected to get smarter at this in the future.
Some pages rely on the presentation effects of isolated
<p> or </p> tags.Tidy deletes empty paragraph and
heading elements etc. The use of empty paragraph elements is not
recommended for adding vertical whitespace. Instead use style
sheets, or the <br> element. Tidy won't discard paragraphs
only containing a nonbreaking space
Teaching Tidy about new tags!
You can teach Tidy about new tags by declaring them in the
configuration file, the syntax is:
new-inline-tags: tag1, tag2, tag3
new-empty-tags: tag1, tag2, tag3
new-blocklevel-tags: tag1, tag2, tag3
new-pre-tags: tag1, tag2, tag3
The same tag can be defined as empty and as inline or as empty
and as block.
These declarations can be combined to define an a new empty
inline or empty block element, but you are not advised to declare
tags as being both inline and block!
Note that the new tags can only appear where Tidy expects
inline or block-level tags respectively. This means you can't
(yet) place new tags within the document head or other contexts
with restricted content models. So far the most popular use of
this feature is to allow Tidy to be applied to Cold Fusion
files.
I am working on ways to make it easy to customize
the permitted document syntax using assertion
grammars, and hope to apply this to a much smarter version of
Tidy for release later this year or early next year.
Limited support for ASP, JSTE and PHP
Tidy is somewhat aware of the preprocessing language called
ASP which uses a pseudo element syntax <% ... %>
to include preprocessor directives. ASP is normally interpreted
by the web server before delivery to the browser. JSTE shares the
same syntax, but sometimes also uses <# ... #>.
Tidy can also cope with another such language called PHP, which
uses the syntax <?php ... ?>
Tidy will cope with ASP, JSTE and PHP pseudo elements within
element content and as replacements for attributes, for
example:
<option <% if rsSchool.Fields("ID").Value
= session("sessSchoolID")
then Response.Write("selected") %>
value='<%=rsSchool.Fields("ID").Value%>'>
<%=rsSchool.Fields("Name").Value%>
(<%=rsSchool.Fields("ID").Value%>)
</option>
Note that Tidy doesn't understand the scripting language used
within psuedo elements and attributes, and can easily get
confused. Tidy may report missing attributes when these are
hidden within preprocessor code. Tidy can also get things wrong
if the code includes quote marks, e.g. if the example above is
changed to:
value="<%=rsSchool.Fields("ID").Value%>"
Tidy will now see the quote mark preceding ID as ending the
attribute value, and proceed to complain about what follows. Note
you can choose whether to allow line wrapping on spaces within
pseudo elements or not using the wrap-asp option. If you
used ASP, JSTE or PHP to create a start tag, but placed the end
tag explicitly in the markup, Tidy won't be able to match them
up, and will delete the end tag for you. So in this case you are
advise to make the start tag explicit and to use ASP, JSTE or PHP
for just the attributes, e.g.
<a href="<%=random.site()%>">do you feel lucky?</a>
Tidy allows you to control whether line wrapping is enabled
for ASP, JSTE and PHP instructions, see the wrap-asp, wrap-jste
and wrap-php config options, respectively.
I regret that Tidy does not support Tango preprocessing
instructions which look like:
<@if variable_1='a'>
do something
<@else>
do nothing
</@if>
<@include <@cgi><@appfilepath>includes/message.html>
Tidy supports another preprocessing syntax called "Tango", but
only for attribute values. Adding support for pseudo elements
written in Tango looks as if it would be quite tough, so I would
like to gauge the level of interest before committing to this
work.
Limited support for XML
XML processors compliant with W3C's XML 1.0 recommendation are
very picky about which files they will accept. Tidy can help you
to fix errors that cause your XML files to be rejected. Tidy
doesn't yet recognize all XML features though, e.g. it doesn't
understand CDATA sections or DTD subsets.
Creating Slides
The -slides option allows you to burst a single HTML
file into a number of linked slides. Each H2 element in the input
file is treated as delimiting the start of the next slide. The
slides are named slide1.html, slide2.html, slide3.html etc. This
is a relatively new feature and ideas are welcomed as to how to
improve it. In particular, I plan to add support to the
configuration file for setting the style sheet for slides and for
customizing the slides via a template.
I would be interested in hearing from anyone who can offer
help with using Javascript for adding dynamic effects to slides,
for instance similar to those available in Microsoft
PowerPoint.
Indenting text for a better layout
Indenting the content of elements makes the markup easier to
read. Tidy can do this for all elements or just for those where
it's needed. The auto-indent mode has been used below to avoid
indenting the content of title, p and li elements:
<html>
<head>
<title>Test document</title>
</head>
<body>
<p>para which has enough text to cause a line break,
and so test the wrapping mechanism for long lines.</p>
<pre>
This is
<em>genuine
preformatted</em>
text
</pre>
<ul>
<li>1st list item</li>
<li>2nd list item</li>
</ul>
<!-- end comment -->
</body>
</html>
Indenting the content does increase the size of the file, so
you may prefer Tidy's default style:
<html>
<head>
<title>Test document</title>
</head>
<body>
<p>para which has enough text to cause a line break,
and so test the wrapping mechanism for long lines.</p>
<pre>This is
<em>genuine
preformatted</em>
text
</pre>
<ul>
<li>1st list item </li>
<li>2nd list item</li>
</ul>
<!-- end comment -->
</body>
</html>
tidy [[options] filename]*
HTML tidy is not (yet) a windows program. If you run tidy
without any arguments, it will just sit there waiting to read
markup on the stdin stream. Tidy's input and output default to
stdin and stdout respectively. Errors are written to stderr but
can be redirected to a file with the -f filename
option.
I generally use the -m option to get tidy to update the
original file, and if the file is particularly bad I also use the
-f option to write the errors to a file to make it easier to
review them. Tidy supports a small set of character encoding
options. The default is ASCII, which makes it easy to edit markup
in regular text editors.
For instance:
tidy -f errs.txt -m index.html
which runs tidy on the file "index.html" updating it in place
and writing the error messages to the file "errs.txt". Its a good
idea to save your work before tidying it, as with all complex
software, tidy may have bugs. If you find any please let me
know!
Thanks to Jacek Niedziela, The Win32 executable for tidy is
now able to example wild cards in filenames. This utilizes the
setargv library supplied with VC++.
Tidy writes errors to stderr, and won't be paused by the more
command. A work around is to redirect stderr to stdout as
follows. This works on Unix and Windows NT, but not on other
platforms. My thanks to Markus Wolf for this tip!
tidy file.html 2>&1 | more
Tidy's Options
To get a list of available options use:
tidy -help
You should see something like this:
options for tidy vers: 14th April 1999
-config file read config file
-indent or -i indent element content
-omit or -o omit optional endtags
-wrap 72 wrap text at column 72 (default is 68)
-upper or -u force tags to upper case (default is lower)
-clean or -c replace font, nobr & center tags by CSS
-raw don't o/p entities for chars 128 to 255
-ascii use ASCII for output, Latin-1 for input
-latin1 use Latin-1 for both input and output
-utf8 use UTF-8 for both input and output
-iso2022 use ISO2022 for both input and output
-numeric or -n output numeric rather than named entities
-modify or -m to modify original files
-errors or -e show only error messages
-quiet or -q suppress non-essential output
-f file write errors to file
-xml use this when input is in XML
-asxml to convert HTML to XML
-slides to burst into slides on h2 elements
-help list command line options
-version show release date
Input and Output default to stdin/stdout respectively. Single
letter options apart from -f may be combined as in: tidy -f
errs.txt -imu foo.html
Matej Vela <vela@debian.org> has written a Unix man page for Tidy, but for the
latest details on config options and for the release notes please
visit this page:
http://www.w3.org/People/Raggett/tidy.
Tidy now supports a configuration file, and this is now much
the most convenient way to configure Tidy. Assuming you have
created a config file named "config.txt" (the name doesn't
matter), you can instruct Tidy to use it via the command line
option -config config.txt, e.g.
tidy -config config.txt file1.html file2.html
Alternatively, you can name the default config file via the
environment variable named "HTML_TIDY". Note this should be the
absolute path since you are likely to want to run Tidy in
different directories. You can also set a config file at compile
time by defining CONFIG_FILE as the path string, see
platform.h.
You can now set config options on the command line by
preceding the name of the option immediately (no intervening
space) by "--", for example:
tidy --break-before-br true --show-warnings false
The following options are supported:
- tidy-mark: bool
- If set to yes (the default) Tidy will add a meta
element to the document head to indicate that the document has
been tidied. To suppress this, set tidy-mark to no. Tidy
won't add a meta element if one is already present.
- markup: bool
- Determines whether Tidy generates a pretty printed version of
the markup. Bool values are either yes or no.
Note that Tidy won't generate a pretty printed version if it
finds unknown tags, or missing trailing quotes on attribute
values, or missing trailing '>' on tags. The default is
yes.
- wrap: number
- Sets the right margin for line wrapping. Tidy tries to wrap
lines so that they do not exceed this length. The default is 66.
Set wrap to zero if you want to disable line wrapping.
- wrap-attributes: bool
- If set to yes, attribute values may be wrapped across lines
for easier editing. The default is no. This option can be set
independently of wrap-scriptlets
- wrap-script-literals: bool
- If set to yes, this allows lines to be wrapped within string
literals that appear in script attributes. The default is
no. The example shows how Tidy wraps a really really long
script string literal inserting a backslash character before the
linebreak:
<a href="somewhere.html" onmouseover="document.status = '...some \
really, really, really, really, really, really, really, really, \
really, really long string..';">test</a>
- wrap-asp: bool
- If set to no, this prevents lines from being wrapped within
ASP pseudo elements, which look like: <% ... %>.
The default is yes.
- wrap-jste: bool
- If set to no, this prevents lines from being wrapped within
JSTE pseudo elements, which look like: <# ... #>.
The default is yes.
- wrap-php: bool
- If set to no, this prevents lines from being wrapped within
PHP pseudo elements. The default is yes.
- tab-size: number
- Sets the number of columns between successive tab stops. The
default is 4. It is used to map tabs to spaces when reading
files. Tidy never outputs files with tabs.
- indent: no, yes or auto
- If set to yes Tidy will indent block-level tags. The
default is no. If set to auto Tidy will decide
whether or not to indent the content of tags such as title,
h1-h6, li, td, th, or p depending on whether or not the content
includes a block-level element.
- indent-spaces: number
- Sets the number of spaces to indent content when indentation
is enabled. The default is 2 spaces.
- indent-attributes: bool
- If set to yes, each attribute will begin on a new
line. The default is no.
- hide-endtags: bool
- If set to yes, optional end-tags will be omitted
when generating the pretty printed markup. This option is ignored
if you are outputting to XML. The default is no.
- input-xml: bool
- If set to yes, Tidy will use the XML parser rather
than the error correcting HTML parser. The default is
no.
- output-xml: bool
- If set to yes, Tidy will use generate the pretty
printed output writing it as well-formed XML. Any entities not
defined in XML 1.0 will be written as numeric entities to allow
them to be parsed by an XML parser. The tags and attributes will
be in the case used in the input document, regardless of other
options. The default is no.
- add-xml-pi: bool
- If set to yes, Tidy will add the XML processing
instruction when outputting XML or XHTML. The default is
yes. Note that if the input document includes an XML PI,
then it will appear in the output independent of the value of
this option.
- output-xhtml: bool
- If set to yes, Tidy will generate the pretty printed
output writing it as extensible HTML. The default is no.
This option causes Tidy to set the doctype and default namespace
as appropriate to XHTML. If a doctype or namespace is given they
will checked for consistency with the content of the document. In
the case of an inconsistency, the corrected values will appear in
the output. For XHTML, entities can be written as named or
numeric entities according to the value of the "numeric-entities"
property. The tags and attributes will be output in the case used
in the input document, regardless of other options.
- doctype: omit, auto, strict, loose or
<fpi>
- This property controls the doctype declaration generated by
Tidy. If set to omit the output file won't contain a
doctype declaration. If set to auto (the default) Tidy
will use an educated guess based upon the contents of the
document. If set to strict, Tidy will set the doctype to
the strict DTD. If set to loose, the doctype is set to
the loose (transitional) DTD. Alternatively, you can supply a
string for the formal public identifier (fpi) for example:
-
doctype: "-//ACME//DTD HTML 3.14159//EN"
- If you specify the fpi for an XHTML document, Tidy will set
the system identifier to the empty string. Tidy leaves the
document type for generic XML documents unchanged.
- char-encoding: raw, ascii, latin1, utf8 or
iso2022
- Determines how Tidy interprets character streams. For
ascii, Tidy will accept Latin-1 character values, but will
use entities for all characters whose value > 127. For
raw, Tidy will output values above 127 without translating
them into entities. For latin1 characters above 255 will
be written as entities. For utf8, Tidy assumes that both
input and output is encoded as UTF-8. You can use
iso2022 for files encoded using the ISO2022 family of
encodings e.g. ISO 2022-JP. The default is ascii
- numeric-entities: bool
- Causes entities other than the basic XML 1.0 named entities
to be written in the numeric rather than the named entity form.
The default is no
- quote-marks: bool
- If set to yes, this causes " characters to be written out as
" as is preferred by some editing environments. The
apostrophe character ' is written out as ' since many web
browsers don't yet support '. The default is
no.
- quote-nbsp: bool
- If set, this causes non-breaking space characters to be
written out as entities. The default is yes.
- quote-ampersand: bool
- If set to yes, this causes unadorned & characters to be
written out as &. The default is yes.
- assume-xml-procins: bool
- If set to yes, this changes the parsing of processing
instructions to require ?> as the terminator rather than >.
The default is no. This option is automatically set if
the input is in XML.
- fix-backslash: bool
- If set to yes, this causes backslash characters "\" in URLs
to be replaced by forward slashes "/". The default is
yes.
- break-before-br: bool
- If set, Tidy will output a line break before each <br>
element. The default is no.
- uppercase-tags: bool
- Causes tag names to be output in upper case. The default is
no resulting in lowercase, except for XML input where
the original case is preserved.
- uppercase-attributes: bool
- Causes attribute names to be output in upper case. The
default is no resulting in lowercase, except for XML
where the original case is preserved.
- word-2000: bool
- If set, Tidy will go to great pains to strip out all the
surplus stuff Microsoft Word 2000 inserts when you save Word
documents as "Web pages". The default is no. Note that
Tidy doesn't yet know what to do with VML markup from Word, but
in future I hope to be able to map VML to SVG.
Microsoft has developed its own optional filter for exporting to
HTML, and the 2.0 version is much improved. You can download the
filter free from the
Microsoft Office Update site.
- clean: bool
- If set, causes Tidy to strip out surplus presentational tags
and attributes replacing them by style rules and structural
markup as appropriate. It works well on the html saved from
Microsoft Office'97. The default is no.
- logical-emphasis: bool
- If set, causes Tidy to replace any occurrence of i by em and
any occurrence of b by strong. In both cases, the attributes are
preserved unchanged. The default is no. This option can
now be set independently of the clean and drop-font-tags
options.
- drop-empty-paras: bool
- If set to yes, empty paragraphs will be discarded. If set to
no, empty paragraphs are replaced by a pair of
br
elements as HTML4 precludes empty paragraphs. The default is
yes.
- drop-font-tags: bool
- If set together with the clean option (see above), Tidy will
discard font and center tags rather than creating the
corresponding style rules. The default is no.
- enclose-text: bool
- If set, this causes Tidy to enclose any text it finds in the
body element within a p element. This is useful when you want to
take an existing html file and use it with a style sheet. Any
text at the body level will screw up the margins, but wrap the
text within a p element and all is well! The default is
no.
- fix-bad-comments: bool
- If set, this causes Tidy to replace unexpected hyphens with
"=" characters when it comes across adjacent hyphens The default
is yes. This option is provided for users of Cold
Fusion which uses the comment syntax: <!--- --->
- alt-text: string
- This allows you to set the default alt text for img
attributes. This feature is dangerous as it suppresses further
accessibility warnings. YOU ARE RESPONSIBLE FOR MAKING YOUR
DOCUMENTS ACCESSIBLE TO PEOPLE WHO CAN'T SEE THE
IMAGES!!!
- write-back: bool
- If set, Tidy will write back the tidied markup to the same
file it read from. The default is no. You are advised to
keep copies of important files before tidying them as on rare
occasions the result may not always be what you expect.
- keep-time: bool
- If set, Tidy won't alter the last modified time for files it
writes back to. The default is yes. This allows you to
tidy files without effecting which ones will be uploaded to the
Web server when using a tool such as 'SiteCopy'.
- error-file: filename
- Writes errors and warnings to the named file rather than to
stderr.
- show-warnings: bool
- If set to no, warnings are suppressed. This can be useful
when a few errors are hidden in a flurry of warnings. The default
is yes.
- quiet: bool
- If set to yes, Tidy won't output the welcome message or the
summary of the numbers of errors and warnings. The default is
no.
- split: bool
- If set to yes Tidy will use the input file to create
a sequence of slides, splitting the markup prior to each
successive <h2>. You can see an example of the results in a
recent talk I made on XHTML. The slides are written to
"slide1.html", "slide2.html" etc. The default is
no.
- new-empty-tags: tag1, tag2, tag3
- Use this to declare new empty inline tags. The option takes a
space or comma separated list of tag names. Unless you declare
new tags, Tidy will refuse to generate a tidied file if the input
includes previously unknown tags. Remember to also declare empty
tags as either inline or blocklevel, see below.
- new-inline-tags: tag1, tag2, tag3
- Use this to declare new non-empty inline tags. The option
takes a space or comma separated list of tag names. Unless you
declare new tags, Tidy will refuse to generate a tidied file if
the input includes previously unknown tags.
- new-blocklevel-tags: tag1, tag2, tag3
- Use this to declare new block-level tags. The option takes a
space or comma separated list of tag names. Unless you declare
new tags, Tidy will refuse to generate a tidied file if the input
includes previously unknown tags. Note you can't change the
content model for elements such as table, ul, ol and dl. This is
explained in more detail in the release notes.
- new-pre-tags: tag1, tag2, tag3
- Use this to declare new tags that are to be processed in
exactly the same way as HTML's pre element. The option takes a
space or comma separated list of tag names. Unless you declare
new tags, Tidy will refuse to generate a tidied file if the input
includes previously unknown tags. Note you can't as yet add new
CDATA elements (similar to script).
Sample Config File
This is just an example to get you started.
// sample config file for HTML tidy
indent: auto
indent-spaces: 2
wrap: 72
markup: yes
output-xml: no
input-xml: no
show-warnings: yes
numeric-entities: yes
quote-marks: yes
quote-nbsp: yes
quote-ampersand: no
break-before-br: no
uppercase-tags: no
uppercase-attributes: no
char-encoding: latin1
new-inline-tags: cfif, cfelse, math, mroot,
mrow, mi, mn, mo, msqrt, mfrac, msubsup, munderover,
munder, mover, mmultiscripts, msup, msub, mtext,
mprescripts, mtable, mtr, mtd, mth
new-blocklevel-tags: cfoutput, cfquery
new-empty-tags: cfelse
If you want to run Tidy from a Perl or other scripting
language you may find it of value to inspect the result returned
by Tidy when it exits: 0 if everything is fine, 1 if there were
warnings and 2 if there were errors. This is an example using
Perl:
if (close(TIDY) == 0) {
my $exitcode = $? >> 8;
if ($exitcode == 1) {
printf STDERR "tidy issued warning messages\n";
} elsif ($exitcode == 2) {
printf STDERR "tidy issued error messages\n";
} else {
die "tidy exited with code: $exitcode\n";
}
} else {
printf STDERR "tidy detected no errors\n";
}
If you are prepared to maintain a public URL for
HTML Tidy compiled for a specific platform, please let me know so
that I can add a link to your page. This will avoid the need for
me to update this page whenever you recompile.
You can also incorporate Tidy as part of a larger program, for
instance in HTML editors or HTML transformation tools used for
import filters, or for when you want to customize Web content to
get the best out of different kinds of browsers. Imagine
authoring clean HTML with CSS and at a touch of a button
producing variants that look great and work reliably on a large
variety of different browsers, taking into account the quirks of
each. For instance, providing the ability to tune content for
different versions of Netscape and Internet Explorer, and for
browsers running on set-top boxes for televisions, handheld and
palmtop devices, cell phones, and voice browsers. I am happy to
quote for software development for such tools.
Andy Quick <ac.quick@sympatico.ca>
maintains a Java port of Tidy, so you can now integrate Tidy into
your Java applications. Andy is tracking the releases of Tidy in
C (this page). More information is available on Andy's home page.
The code is in ANSI C and uses the C standard library for i/o.
The parser works top down, building a complete parse tree in
memory. Document text is held as Unicode represented as UTF-8 in
a character buffer that expands as needed. The code has so far
been tested on Windows'95, Windows'98, Windows NT, Windows 2000,
Linux, FreeBSD, NetBSD, Ultrix, OSF, OS/MP, IRIX, NeXtStep,
MacOS, BeOS, OS/2, AIX, Amiga, Atari, SunOS, Solaris, IRIX and
HP-UX, amongst others.
Here is a link to the Open Source copyright
notice and license.
- tidy13jan00.tgz
- gzipped tar file for source code (Unix line ends)
- tidy13jan00.zip
- zipped source code (Windows line ends)
- platform.h,
html.h
- the include files with common definitions
- config.c
- support for customizing Tidy via config files
- lexer.c
- lexical analysis and buffer management
- parser.c
- HTML and XML parsers
- tags.c
- dictionary of tags and their properties
- attrs.c
- dictionary of attributes and their properties
- istack.c
- stack of active inline elements
- entities.c
- dictionary of entities
- clean.c
- smarts for cleaning up presentational markup
- pprint.c
- pretty printing for HTML and XML
- localize.c
- Change this file to localize tidy's messages
- tidy.c
- main() and error reporting routines
- Makefile
- Makefile for gcc
- Unix Man page
- Maintained by Matej Vela <vela@debian.org>
Conventions for whether lines end with CRLF, LF or CR vary
from one system to another. I have included the C source for a
utility tab2space which can be used to ensure that files
use the line end convention of your choice, and to expand tabs to
spaces.
tab2space -t4 -unix *.h *.c
tab2space -tabs -unix Makefile
Note use of "-tabs" to ensure that tabs are preserved in the
Makefile (it won't work without them!).
For those of you on Unix, here is a script you can use to
strip carriage returns:
#!/bin/sh
echo Stripping Carriage Returns from files...
for i
do
# If a writable file
if [ -f $i ]
then
if [ -w $i ]
then
echo $i
# strip CRs from input and output to temp file
tr -d '\015' < $i > toix.tmp
mv toix.tmp $i
else
echo $i: write-protected
fi
else
echo $i: not a file
fi
done
Save this script to a file, e.g. "scripcr" and use
"chmod +x stripcr" to make it executable. You can then
run it as "stripcr *.c *.h Overview.html Makefile"
I would like to thank the many people who have written to me
with suggestions for improvements or reporting bugs. Your help
has been invaluable.
Jonathan Adair, Drew Adams, Osma
Ahvenlampi, Carsten Allefeld, Richard Allsebrook, Jacob Sparre
Andersen, Joe D'Andrea, Jerry Andrews, Bruce Aron, Takuya Asada,
Edward Avis, Nick B, Chang Hyun Baek, Nick B, Denis Barbier,
Chuck Baslock, Christer Bernerus, Yu Jian Bin, Alexander Biron,
Keith Blakemore-Noble, Eric Blossom, ochen M. Braun, David
Brooke, Andy Brown, Keith B. Brown, Andreas Buchholz, Maurice
Buxton, Jelks Cabaniss, John Cappelletti, Trevor Carden, Terry
Cassidy, Mathew Cepl, Kendall Clark, Rob Clark, Jeremy Clulow,
Dan Connolly, Larry Cousin, Ken Cox, Luis M. Cruz, John Cumming,
Ian Davey, Keith Davies, Ciaran Deignan, David Duffy, Emma
Duke-Williams, Tamminen Eero, Bodo Eing, Baruch Even, David
Fallon, Claus André Färber, Stephanie Foott, Darren
Forcier, Martin Fouts, Frederik Fouvry, Rene Fritz, Stephen
Fuqua, Martin Gallwey, Francisco Guardiola, David Getchell,
Michael Giroux, Guus Goos, Léa Gris, Juha Häikiö,
David Halliday, Vlad Harchev, Shane Harrelson, Andre Hinrichs,
Bjoern Hoehrmann, G. Ken Holman, Bill Homer, Craig Horman, Jack
Horsfield, Nigel Horspool, Pao-Hsi Huang, Marc Jauvin, Rick
Jelliffe, Peter Jeremy, Craig Johnson, Charles LaFountain, Steven
Lobo, Zdenek Kabelac, Michael Kay, Axel Kielhorn, Konstantinos
Kleisouris, Johannes Koch, Daniel Kohn, Rudy Kohut, Allan
Kuchinsky, Volker Kuhlmann, Michael LaStella, Steve Lee, Tony
Leneis, Nick Leverton, Todd Lewis, Dietmar Lippold, Gert-Jan C.
Lokhorst, John Love-Jensen, Satwinder Mangat, Anton Marsden, Bede
McCall, Shane McCarron, Thomas McGuigan, Ian McKellar, Al
Medeiros, Chris Nappin, Ann Navarro, Jacek Niedziela, Morten
Blinksbjerg Nielsen, Kenichi Numata, Allan Odgaard, Matt Oshry,
Gerald Oskoboiny, Paul Ossenbruggen, Ernst Paalvast, Christian
Pantel, Dimitri Papadopoulos, Steven Pemberton, Lee Anne
Phillips, Xavier Plantefeve, Karl Prinz, Andy Quick, Thomas
Ribbrock, Ross L. Richardson, Philip Riebold, Erik Rossen, Dan
Rudman, Peter Ruevski, Christian Ruetgers, Klaus Johannes Rusch,
John Russell, Eric Schindler, J. Schlauch, Christian
Schüler, Klaus Alexander Seistrup, Jim Seymour, Kazuyoshi
Shimizu, Geoff Sinclair, Jo Smith, Paul Smith, Steve Spilker,
Rafi Stern, Michael J. Suzio, Zac Thompson, Eric Thorbjornsen,
Oren Tirosh, John Tobler, Omri Traub, Loïc Trégan,
Jason Tribbeck, Simon Trimmer, Steffen Ullrich, Stuart Updegrave,
Charles A. Upsdell, Jussi Vestman, Larry W. Virden, Daniel
Vogelheim, Jez Wain, Randy Waki, Paul Ward, Yudong Yang, Jeff
Young, Johannes Zellner, Christian Zuckschwerdt
73b Ground Corner
Holt
Wiltshire
BA14 6RT
United Kingdom
Dave
Raggett <dsr@w3.org> is
an engineer from Hewlett
Packard's UK
Laboratories, and works on assignment to the World Wide Web
Consortium, where he is the W3C lead for HTML, Math and Voice
Browsers.
|