Added test case to test flexibility.
Updated old test case 443678, which is better with this fix.

This fixes #523 and tries to be as general as possible. Right now the fix is
only applied if the prev or next tag is a body level div, but perhaps should
be applied for anything that's acting as block level element. In any case,
the specific bug is killed.
This commit is contained in:
Jim Derry 2021-08-26 15:59:33 -04:00
parent a873a190e1
commit b5d28d7d30
6 changed files with 102 additions and 1 deletions

View file

@ -0,0 +1,4 @@
# Config for test case.
tidy-mark: no
indent: no
wrap: 99999

View file

@ -0,0 +1,28 @@
<!--
This test case is for issue #523, in which a space is placed after the
closing tag of certain elements. For example below, a space is added after
the first script closing tag and after the img tag.
-->
<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
<script type="text/javascript">
</script>
<script type="text/javascript">
</script>
<h1>Hello</h1>
<script type="text/javascript">
</script>
<img src="hi.jpg">
<script type="text/javascript">
</script>
<p>This is a block level element, and as such, is capable of inlining inline elements.<script type="text/javascript">let x = "Hello, world"</script> Scripts are inline elements, so this script should be included in the flow.</p>
<script type="text/javascript"></script><img src="bye.jpg"><script type="text/javascript"></script>
<hr>
<p>This is another paragraph with an <img src="meh.jpg"> tag inline.</p>
<img src="one.jpg"><img src="two.jpg"><img src="three.jpg">
</body>
</html>

View file

@ -0,0 +1,27 @@
<!--
This test case is for issue #523, in which a space is placed after the
closing tag of certain elements. For example below, a space is added after
the first script closing tag and after the img tag.
-->
<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
<script type="text/javascript"></script>
<script type="text/javascript"></script>
<h1>Hello</h1>
<script type="text/javascript"></script><img src="hi.jpg">
<script type="text/javascript"></script>
<p>This is a block level element, and as such, is capable of inlining inline elements.
<script type="text/javascript">
let x = "Hello, world"
</script> Scripts are inline elements, so this script should be included in the flow.</p>
<script type="text/javascript"></script><img src="bye.jpg">
<script type="text/javascript"></script>
<hr>
<p>This is another paragraph with an <img src="meh.jpg"> tag inline.</p>
<img src="one.jpg"><img src="two.jpg"><img src="three.jpg">
</body>
</html>

View file

@ -0,0 +1,26 @@
line 19 column 1 - Warning: <img> lacks "alt" attribute
line 23 column 41 - Warning: <img> lacks "alt" attribute
line 25 column 38 - Warning: <img> lacks "alt" attribute
line 26 column 1 - Warning: <img> lacks "alt" attribute
line 26 column 20 - Warning: <img> lacks "alt" attribute
line 26 column 39 - Warning: <img> lacks "alt" attribute
Info: Document content looks like HTML5
Tidy found 6 warnings and 0 errors!
The alt attribute should be used to give a short description
of an image; longer descriptions should be given with the
longdesc attribute which takes a URL linked to the description.
These measures are needed for people using non-graphical browsers.
For further advice on how to make your pages accessible
see https://www.w3.org/WAI/GL.
About HTML Tidy: https://github.com/htacg/tidy-html5
Bug reports and comments: https://github.com/htacg/tidy-html5/issues
Official mailing list: https://lists.w3.org/Archives/Public/public-htacg/
Latest HTML specification: https://html.spec.whatwg.org/multipage/
Validate your HTML documents: https://validator.w3.org/nu/
Lobby your company to join the W3C: https://www.w3.org/Consortium
Do you speak a language other than English, or a different variant of
English? Consider helping us to localize HTML Tidy. For details please see
https://github.com/htacg/tidy-html5/blob/master/README/LOCALIZE.md

View file

@ -414,6 +414,14 @@ static Bool CleanLeadingWhitespace(TidyDocImpl* ARG_UNUSED(doc), Node* node)
if (node->parent->tag && node->parent->tag->parser == TY_(ParseScript))
return no;
/* #523, prevent blank spaces after script if the next item is script.
* This is actually more generalized as, if the preceding element is
* a body level script, then indicate that we want to clean leading
* whitespace.
*/
if ( node->prev && nodeIsSCRIPT(node->prev) && nodeIsBODY(node->prev->parent) )
return yes;
/* <p>...<br> <em>...</em>...</p> */
if (nodeIsBR(node->prev))
return yes;
@ -454,6 +462,14 @@ static Bool CleanTrailingWhitespace(TidyDocImpl* doc, Node* node)
if (node->parent->tag && node->parent->tag->parser == TY_(ParseScript))
return no;
/* #523, prevent blank spaces after script if the next item is script.
* This is actually more generalized as, if the next element is
* a body level script, then indicate that we want to clean trailing
* whitespace.
*/
if ( node->next && nodeIsSCRIPT(node->next) && nodeIsBODY(node->next->parent) )
return yes;
next = node->next;
/* <p>... </p> */