Re: HTML Tidy bug (general) + Mac Tidy (BBTidy) suggestion

mech@eff.org (Stanton McCandlish) wrote:

>I've managed to generate similar errors with other text+markup in the form:
>
><SPAN CLASS="x"><P><SPAN CLASS="y">text</SPAN></P></SPAN>
>
>(That very example yields the same errors. Tidy doesn't realize that
>the first span is enclosing the <P>...</P>, and doesn't recognize that
>the second span has any attributes at all.)
>
>I suppose one can argue that <SPAN>...</SPAN> is only intended to be
>used within block elements and never surrounding them, though I don't
>see that specified in the HTML 4.0.1 spec anywhere

Then what is this:

<!ELEMENT SPAN - - (%inline;)*         -- generic language/style container -->

That says SPAN can only contain inline markup.  Paragraphs aren't inline
markup.  If you want to wrap a paragraph with another container, use
something that can wrap block or flow, like DIV:

<!ELEMENT DIV - - (%flow;)*            -- generic language/style container -->

> (and I'd have to
> argue against it if it is in there, since the element is widely used,
> and widely interpreted by agents, as having no such restriction,

The existence of tag-soup browsers is no excuse for elimination of all the
rules regarding the construction of an HTML document.  If you want to
produce invalid documents, Tidy is not the program or you.

> not to
> mention that <DIV>...</DIV> typically has undesirable spacing effects
> (linebreak before and after as if it were a <H#>...</H#>), leaving no
> real option but <SPAN>...</SPAN> for applying CLASS information w/o
> otherwise altering appearances, in many cases.

In case there's some confusion, let me provide an example:

<DIV CLASS="x"><P><SPAN CLASS="y">text</SPAN></P></DIV>

Replace the outer SPAN with DIV, not the inner SPAN (where you can't have
DIV).  The DIV here doesn't induce any spacing effects not already present
on the paragraph, so you don't have a reason for not using it in your
example.

If Tidy knew more about stylesheets (and had access to the stylesheets for
a page run through it) it could intelligently replace SPAN tags with DIV
and vice versa according to the user's intent rather that dropping them.
The problem arises when the stylesheet has defined SPAN.class or DIV.class
rather than generic classes, or styles applied to all SPAN and DIV tags.
-- 
         ,=<#)-=#  <http://www.war-of-the-worlds.org/>
    ,_--//--_,
 _-~_-(####)-_~-_  "Did you see that Parkins boy's body in the tunnels?" "Just
(#>_--'~--~`--_<#)  the photos.  Worst thing I've ever seen; kid had no face."

Received on Sunday, 30 April 2000 11:56:29 UTC