Skip to content

Bump justhtml from 2.2.0 to 3.7.0#25177

Open
dependabot[bot] wants to merge 1 commit into
masterfrom
dependabot/pip/justhtml-3.7.0
Open

Bump justhtml from 2.2.0 to 3.7.0#25177
dependabot[bot] wants to merge 1 commit into
masterfrom
dependabot/pip/justhtml-3.7.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jul 22, 2026

Copy link
Copy Markdown
Contributor

Bumps justhtml from 2.2.0 to 3.7.0.

Release notes

Sourced from justhtml's releases.

Release v3.7.0

Fixed

  • Keep templates open in the head when they contain a processing instruction, matching the latest web-platform-tests tree-construction fixture.

Changed

  • Refresh the web-platform-tests tree-construction fixtures and comparison scores.
  • Make the correctness benchmark skip an optional html5-parser installation when its libxml2 ABI conflicts with lxml.

Release v3.6.1

Fixed

  • Keep processing instructions inside a scripting-disabled head noscript, and process them in body mode inside templates as required by the latest WHATWG parsing rules.

Changed

  • Move raw parser input/output regressions from Python unit tests into the shared tree-construction fixture format.

Release v3.6.0

Fixed

Note: The below are all minor parsing differences found when diffing against Chromium output, that is not covered in WPT's html5 parsing tests.

  • Add a formatting element that breaks out of foreign content (such as <i> inside <svg>) to the active formatting list, so it is reconstructed later. Previously, the breakout element was inserted but not tracked, so <b><svg><i></b>z dropped the reconstructed <i> around the trailing text and <svg><code><h2></code> lost the reconstructed <code>.
  • Start the body for a <noscript> start tag in the "after head" insertion mode instead of re-entering the head. The after-head metadata list does not include noscript, so markup such as </head><noscript> now places the element in the body.
  • Hand an end tag to the HTML rules when the foreign-content end-tag walk reaches a matching HTML element, rather than popping the foreign elements above it. Previously, <form><math></form> popped the <math> along with the form instead of splicing only the form out of the stack.
  • Clear back to the template contents before opening table structure in a template with no table element, so an open caption is closed. Previously, \<template><caption><tr> nested the row inside the caption instead of making it a sibling.
  • Switch the "in template" mode into the body for a non-head raw-text or RCDATA start tag (iframe, noembed, xmp, textarea), which are dispatched before the template-mode handler. Previously, a following table-structure tag such as the <td> in \<template><xmp></xmp><td> created a spurious cell instead of being dropped.
  • Ignore a </td> or </th> end tag in a template cell when the matching cell type is not in table scope. Previously, \<template><td></th>x closed the <td> on the mismatched </th>, so the following text became a sibling instead of staying in the cell.
  • Insert a non-breakout HTML-named start tag inside foreign content as a foreign element without running HTML in-body recovery. Foreign elements sharing a name with an HTML scope boundary or table foster target (an SVG or MathML td, tr, caption, ...) no longer stop scope walks or foster their children out. Previously, markup such as <p><svg><article>, <p><math><td><listing>, and <table><math><tr><d> broke out of or escaped the foreign subtree.
  • Ignore </body> and </html> whenever a select is open, not only when the select holds just options. Previously, an element retained inside the select (as in <select><o></body><!--x-->) let the end tag switch to the after-body mode, moving following content out of the select.
  • Close a raw-text or RCDATA element when its end tag name is terminated by / or a space even without a closing >. Previously, <style></style/x kept the unterminated end tag as text and left the element open.
  • Do not reconstruct the active formatting elements for rb, rp, rt, or rtc start tags. Previously, <div><tt></div><rt> wrapped the <rt> in a stale <tt> instead of inserting it directly.
  • Ignore </form> when the form element is not in scope, such as behind an open <table>. Previously, <form><table></form><table> removed the form from the stack, so the following table became a sibling of the form instead of nesting inside it.
  • Respect special-element blocking for generic end tags inside a template. Previously, \<template><dialog><object></dialog>e closed the dialog through the open <object> instead of ignoring the end tag, so following text escaped the object.
  • Place a comment after an explicit </head> between the head and body even when the head contains a template. Previously, <head>\<template></template></head><!--c--> kept the comment inside the head.
  • Process in-body base, link, and meta start tags with the in-head rules without reconstructing the active formatting elements. Previously, markup such as <p><u><section><meta> could wrongly wrap the metadata element in a stale formatting element instead of inserting it directly.
  • Check the script-data-double-escape-start terminator against the real following character. Previously, a <script immediately followed by </script> inside a script (for example <script><!--<script</script>) entered the double-escaped state and swallowed the closing tag, leaving the script element unclosed.
  • Pop foreign-content ancestors before applying the heading start-tag rule so a heading that breaks out of MathML or SVG closes an open heading. Previously, markup such as <h1><math><h3> nested the second heading inside the first instead of making it a sibling.
  • Ignore </html> and </body> end tags in the "in select" insertion mode instead of switching to the after-body/after-html modes. Previously, markup such as <select></html><!--c--> moved trailing comments out of the still-open select to the document level.
  • Restrict character foster parenting to HTML table elements. Previously, a foreign SVG or MathML element that merely shared a name with a table foster target (such as an SVG <tr>) had following text foster-parented out of the foreign subtree instead of kept as its child, as in <table><svg><tr>n.
  • Force quirks mode when a doctype has trailing junk after its name without a PUBLIC or SYSTEM keyword. Previously, <!DOCTYPE html foo> was treated as no-quirks, so a following <table> incorrectly closed an open <p>.
  • Ignore end tags other than </template> in the "in template" insertion mode. Previously, the </br> special case still ran, so \<template></br> created a stray <br> inside the template contents.
  • Let table-scoped end tags follow the foreign-content end-tag algorithm when the current node is a MathML or SVG element. Previously, an end tag such as </th> inside foreign content was routed to HTML table recovery, so <svg><th><o></th>0 left the foreign cell open and misplaced the following text.
  • Ignore </body> and </html> when no body element is in scope. Previously, an open scope marker such as <marquee>, <object>, or <applet> did not prevent the switch to the after-body mode, so following content such as a comment in <marquee></body><!--x--> was placed outside the still-open element.
  • Close an escaped script comment on <!-->, whose <!-- dashes already count toward the -->. Previously, <script><!--><script></script> treated the following <script> as a double-escape start and swallowed the closing tag, leaving the script element unclosed.
  • Push active-formatting markers only for HTML scope-marker elements. A foreign element sharing a name such as an SVG or MathML <td> no longer pushes a marker that would linger after the element is popped and block later formatting reconstruction, as in <p><a><math><td></td><listing>U.

Release v3.5.0

Changed

... (truncated)

Changelog

Sourced from justhtml's changelog.

[3.7.0] - 2026-07-15

Fixed

  • Keep templates open in the head when they contain a processing instruction, matching the latest web-platform-tests tree-construction fixture.

Changed

  • Refresh the web-platform-tests tree-construction fixtures and comparison scores.
  • Make the correctness benchmark skip an optional html5-parser installation when its libxml2 ABI conflicts with lxml.

[3.6.1] - 2026-07-13

Fixed

  • Keep processing instructions inside a scripting-disabled head noscript, and process them in body mode inside templates as required by the latest WHATWG parsing rules.

Changed

  • Move raw parser input/output regressions from Python unit tests into the shared tree-construction fixture format.

[3.6.0] - 2026-07-13

Fixed

Note: The below are all minor parsing differences found when diffing against Chromium output, that is not covered in WPT's html5 parsing tests.

  • Add a formatting element that breaks out of foreign content (such as <i> inside <svg>) to the active formatting list, so it is reconstructed later. Previously, the breakout element was inserted but not tracked, so <b><svg><i></b>z dropped the reconstructed <i> around the trailing text and <svg><code><h2></code> lost the reconstructed <code>.
  • Start the body for a <noscript> start tag in the "after head" insertion mode instead of re-entering the head. The after-head metadata list does not include noscript, so markup such as </head><noscript> now places the element in the body.
  • Hand an end tag to the HTML rules when the foreign-content end-tag walk reaches a matching HTML element, rather than popping the foreign elements above it. Previously, <form><math></form> popped the <math> along with the form instead of splicing only the form out of the stack.
  • Clear back to the template contents before opening table structure in a template with no table element, so an open caption is closed. Previously, \<template><caption><tr> nested the row inside the caption instead of making it a sibling.
  • Switch the "in template" mode into the body for a non-head raw-text or RCDATA start tag (iframe, noembed, xmp, textarea), which are dispatched before the template-mode handler. Previously, a following table-structure tag such as the <td> in \<template><xmp></xmp><td> created a spurious cell instead of being dropped.
  • Ignore a </td> or </th> end tag in a template cell when the matching cell type is not in table scope. Previously, \<template><td></th>x closed the <td> on the mismatched </th>, so the following text became a sibling instead of staying in the cell.
  • Insert a non-breakout HTML-named start tag inside foreign content as a foreign element without running HTML in-body recovery. Foreign elements sharing a name with an HTML scope boundary or table foster target (an SVG or MathML td, tr, caption, ...) no longer stop scope walks or foster their children out. Previously, markup such as <p><svg><article>, <p><math><td><listing>, and <table><math><tr><d> broke out of or escaped the foreign subtree.
  • Ignore </body> and </html> whenever a select is open, not only when the select holds just options. Previously, an element retained inside the select (as in <select><o></body><!--x-->) let the end tag switch to the after-body mode, moving following content out of the select.
  • Close a raw-text or RCDATA element when its end tag name is terminated by / or a space even without a closing >. Previously, <style></style/x kept the unterminated end tag as text and left the element open.
  • Do not reconstruct the active formatting elements for rb, rp, rt, or rtc start tags. Previously, <div><tt></div><rt> wrapped the <rt> in a stale <tt> instead of inserting it directly.
  • Ignore </form> when the form element is not in scope, such as behind an open <table>. Previously, <form><table></form><table> removed the form from the stack, so the following table became a sibling of the form instead of nesting inside it.
  • Respect special-element blocking for generic end tags inside a template. Previously, \<template><dialog><object></dialog>e closed the dialog through the open <object> instead of ignoring the end tag, so following text escaped the object.
  • Place a comment after an explicit </head> between the head and body even when the head contains a template. Previously, <head>\<template></template></head><!--c--> kept the comment inside the head.
  • Process in-body base, link, and meta start tags with the in-head rules without reconstructing the active formatting elements. Previously, markup such as <p><u><section><meta> could wrongly wrap the metadata element in a stale formatting element instead of inserting it directly.
  • Check the script-data-double-escape-start terminator against the real following character. Previously, a <script immediately followed by </script> inside a script (for example <script><!--<script</script>) entered the double-escaped state and swallowed the closing tag, leaving the script element unclosed.
  • Pop foreign-content ancestors before applying the heading start-tag rule so a heading that breaks out of MathML or SVG closes an open heading. Previously, markup such as <h1><math><h3> nested the second heading inside the first instead of making it a sibling.
  • Ignore </html> and </body> end tags in the "in select" insertion mode instead of switching to the after-body/after-html modes. Previously, markup such as <select></html><!--c--> moved trailing comments out of the still-open select to the document level.
  • Restrict character foster parenting to HTML table elements. Previously, a foreign SVG or MathML element that merely shared a name with a table foster target (such as an SVG <tr>) had following text foster-parented out of the foreign subtree instead of kept as its child, as in <table><svg><tr>n.
  • Force quirks mode when a doctype has trailing junk after its name without a PUBLIC or SYSTEM keyword. Previously, <!DOCTYPE html foo> was treated as no-quirks, so a following <table> incorrectly closed an open <p>.
  • Ignore end tags other than </template> in the "in template" insertion mode. Previously, the </br> special case still ran, so \<template></br> created a stray <br> inside the template contents.
  • Let table-scoped end tags follow the foreign-content end-tag algorithm when the current node is a MathML or SVG element. Previously, an end tag such as </th> inside foreign content was routed to HTML table recovery, so <svg><th><o></th>0 left the foreign cell open and misplaced the following text.
  • Ignore </body> and </html> when no body element is in scope. Previously, an open scope marker such as <marquee>, <object>, or <applet> did not prevent the switch to the after-body mode, so following content such as a comment in <marquee></body><!--x--> was placed outside the still-open element.
  • Close an escaped script comment on <!-->, whose <!-- dashes already count toward the -->. Previously, <script><!--><script></script> treated the following <script> as a double-escape start and swallowed the closing tag, leaving the script element unclosed.
  • Push active-formatting markers only for HTML scope-marker elements. A foreign element sharing a name such as an SVG or MathML <td> no longer pushes a marker that would linger after the element is popped and block later formatting reconstruction, as in <p><a><math><td></td><listing>U.

... (truncated)

Commits
  • 594bc29 Release v3.7.0
  • d824b00 docs: Prepare 3.7.0 changelog
  • c5484f3 fix: Update correctness benchmark for all parsers
  • 5dbfd9d fix: Update handling of processing instructions to maintain open head templates
  • 6f4eae2 fix: Update selectolax dependency version to 0.4.11
  • 40d0d03 Release v3.6.1
  • c79d2f4 fix: Handle processing instructions in head templates
  • 5793c07 fix: Update handling of processing instructions for compliance with new WHATW...
  • 78acb46 refactor: Move testcases from unittests to .dat files for ease of sharing.
  • 1ea5e41 Release v3.6.0
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [justhtml](https://github.com/emilstenstrom/justhtml) from 2.2.0 to 3.7.0.
- [Release notes](https://github.com/emilstenstrom/justhtml/releases)
- [Changelog](https://github.com/EmilStenstrom/justhtml/blob/main/CHANGELOG.md)
- [Commits](EmilStenstrom/justhtml@v2.2.0...v3.7.0)

---
updated-dependencies:
- dependency-name: justhtml
  dependency-version: 3.7.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file python Pull requests that update Python code labels Jul 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file python Pull requests that update Python code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants