<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[58769] trunk/src/wp-includes: HTML API: Add PHP type annotations.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { white-space: pre-line; overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="https://core.trac.wordpress.org/changeset/58769">58769</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"https://core.trac.wordpress.org/changeset/58769","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>dmsnell</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2024-07-19 23:42:14 +0000 (Fri, 19 Jul 2024)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>HTML API: Add PHP type annotations.

This patch adds type annotations to internal and private methods of the HTML
API and the supporting WP_Token_Map. Annotations have not been added to the
public interfaces where it would likely crash a site if called wrong.

These annotations should help avoid unnecessary type-related bugs (as have
been uncovered in earlier work adding such annotations) and provide additional
guidance to developers when interacting with these classes in an IDE.

Developed in https://github.com/WordPress/wordpress-develop/pull/6753
Discussed in https://core.trac.wordpress.org/ticket/61399

Props dmsnell, jonsurrell.
See <a href="https://core.trac.wordpress.org/ticket/61399">#61399</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpincludesclasswptokenmapphp">trunk/src/wp-includes/class-wp-token-map.php</a></li>
<li><a href="#trunksrcwpincludeshtmlapiclasswphtmlactiveformattingelementsphp">trunk/src/wp-includes/html-api/class-wp-html-active-formatting-elements.php</a></li>
<li><a href="#trunksrcwpincludeshtmlapiclasswphtmldecoderphp">trunk/src/wp-includes/html-api/class-wp-html-decoder.php</a></li>
<li><a href="#trunksrcwpincludeshtmlapiclasswphtmlopenelementsphp">trunk/src/wp-includes/html-api/class-wp-html-open-elements.php</a></li>
<li><a href="#trunksrcwpincludeshtmlapiclasswphtmlprocessorstatephp">trunk/src/wp-includes/html-api/class-wp-html-processor-state.php</a></li>
<li><a href="#trunksrcwpincludeshtmlapiclasswphtmlprocessorphp">trunk/src/wp-includes/html-api/class-wp-html-processor.php</a></li>
<li><a href="#trunksrcwpincludeshtmlapiclasswphtmlspanphp">trunk/src/wp-includes/html-api/class-wp-html-span.php</a></li>
<li><a href="#trunksrcwpincludeshtmlapiclasswphtmlstackeventphp">trunk/src/wp-includes/html-api/class-wp-html-stack-event.php</a></li>
<li><a href="#trunksrcwpincludeshtmlapiclasswphtmltagprocessorphp">trunk/src/wp-includes/html-api/class-wp-html-tag-processor.php</a></li>
<li><a href="#trunksrcwpincludeshtmlapiclasswphtmltextreplacementphp">trunk/src/wp-includes/html-api/class-wp-html-text-replacement.php</a></li>
<li><a href="#trunksrcwpincludeshtmlapiclasswphtmltokenphp">trunk/src/wp-includes/html-api/class-wp-html-token.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpincludesclasswptokenmapphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/class-wp-token-map.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/class-wp-token-map.php      2024-07-19 15:54:41 UTC (rev 58768)
+++ trunk/src/wp-includes/class-wp-token-map.php        2024-07-19 23:42:14 UTC (rev 58769)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -280,7 +280,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return WP_Token_Map|null Token map, unless unable to create it.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public static function from_array( $mappings, $key_length = 2 ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public static function from_array( array $mappings, int $key_length = 2 ): ?WP_Token_Map {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $map             = new WP_Token_Map();
</span><span class="cx" style="display: block; padding: 0 10px">                $map->key_length = $key_length;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -328,7 +328,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                foreach ( $groups as $group_key => $group ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        usort(
</span><span class="cx" style="display: block; padding: 0 10px">                                $groups[ $group_key ],
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                static function ( $a, $b ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         static function ( array $a, array $b ): int {
</ins><span class="cx" style="display: block; padding: 0 10px">                                         return self::longest_first_then_alphabetical( $a[0], $b[0] );
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                        );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -385,7 +385,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return WP_Token_Map Map with precomputed data loaded.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public static function from_precomputed_table( $state ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public static function from_precomputed_table( $state ): ?WP_Token_Map {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $has_necessary_state = isset(
</span><span class="cx" style="display: block; padding: 0 10px">                        $state['storage_version'],
</span><span class="cx" style="display: block; padding: 0 10px">                        $state['key_length'],
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -439,7 +439,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $case_sensitivity Optional. Pass 'ascii-case-insensitive' to ignore ASCII case when matching. Default 'case-sensitive'.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether there's an entry for the given word in the map.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function contains( $word, $case_sensitivity = 'case-sensitive' ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function contains( string $word, string $case_sensitivity = 'case-sensitive' ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $ignore_case = 'ascii-case-insensitive' === $case_sensitivity;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                if ( $this->key_length >= strlen( $word ) ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -527,7 +527,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string|null Mapped value of lookup key if found, otherwise `null`.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function read_token( $text, $offset = 0, &$matched_token_byte_length = null, $case_sensitivity = 'case-sensitive' ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function read_token( string $text, int $offset = 0, &$matched_token_byte_length = null, $case_sensitivity = 'case-sensitive' ): ?string {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $ignore_case = 'ascii-case-insensitive' === $case_sensitivity;
</span><span class="cx" style="display: block; padding: 0 10px">                $text_length = strlen( $text );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -571,15 +571,16 @@
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><span class="cx" style="display: block; padding: 0 10px">         * Finds a match for a short word at the index.
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         * @since 6.6.0.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  * @since 6.6.0
</ins><span class="cx" style="display: block; padding: 0 10px">          *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         * @param string $text                       String in which to search for a lookup key.
-        * @param int    $offset                     Optional. How many bytes into the string where the lookup key ought to start. Default 0.
-        * @param ?int   &$matched_token_byte_length Optional. Holds byte-length of found lookup key if matched, otherwise not set. Default null.
-        * @param string $case_sensitivity           Optional. Pass 'ascii-case-insensitive' to ignore ASCII case when matching. Default 'case-sensitive'.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  * @param string   $text                       String in which to search for a lookup key.
+        * @param int      $offset                     Optional. How many bytes into the string where the lookup key ought to start. Default 0.
+        * @param int|null &$matched_token_byte_length Optional. Holds byte-length of found lookup key if matched, otherwise not set. Default null.
+        * @param string   $case_sensitivity           Optional. Pass 'ascii-case-insensitive' to ignore ASCII case when matching. Default 'case-sensitive'.
+        *
</ins><span class="cx" style="display: block; padding: 0 10px">          * @return string|null Mapped value of lookup key if found, otherwise `null`.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function read_small_token( $text, $offset, &$matched_token_byte_length, $case_sensitivity = 'case-sensitive' ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function read_small_token( string $text, int $offset = 0, &$matched_token_byte_length = null, $case_sensitivity = 'case-sensitive' ): ?string {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $ignore_case  = 'ascii-case-insensitive' === $case_sensitivity;
</span><span class="cx" style="display: block; padding: 0 10px">                $small_length = strlen( $this->small_words );
</span><span class="cx" style="display: block; padding: 0 10px">                $search_text  = substr( $text, $offset, $this->key_length );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -634,7 +635,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return array The lookup key/substitution values as an associate array.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function to_array() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function to_array(): array {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $tokens = array();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $at            = 0;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -696,7 +697,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $indent Optional. Use this string for indentation, or rely on the default horizontal tab character. Default "\t".
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string Value which can be pasted into a PHP source file for quick loading of table.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function precomputed_php_source_table( $indent = "\t" ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function precomputed_php_source_table( string $indent = "\t" ): string {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $i1 = $indent;
</span><span class="cx" style="display: block; padding: 0 10px">                $i2 = $i1 . $indent;
</span><span class="cx" style="display: block; padding: 0 10px">                $i3 = $i2 . $indent;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -801,7 +802,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $b Second string to compare.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return int -1 or lower if `$a` is less than `$b`; 1 or greater if `$a` is greater than `$b`, and 0 if they are equal.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private static function longest_first_then_alphabetical( $a, $b ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private static function longest_first_then_alphabetical( string $a, string $b ): int {
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( $a === $b ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return 0;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span></span></pre></div>
<a id="trunksrcwpincludeshtmlapiclasswphtmlactiveformattingelementsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/html-api/class-wp-html-active-formatting-elements.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/html-api/class-wp-html-active-formatting-elements.php       2024-07-19 15:54:41 UTC (rev 58768)
+++ trunk/src/wp-includes/html-api/class-wp-html-active-formatting-elements.php 2024-07-19 23:42:14 UTC (rev 58769)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -51,7 +51,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param WP_HTML_Token $token Look for this node in the stack.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the referenced node is in the stack of active formatting elements.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function contains_node( $token ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function contains_node( WP_HTML_Token $token ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                 foreach ( $this->walk_up() as $item ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        if ( $token->bookmark_name === $item->bookmark_name ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                return true;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -95,7 +95,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @param WP_HTML_Token $token Push this node onto the stack.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function push( $token ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function push( WP_HTML_Token $token ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                 /*
</span><span class="cx" style="display: block; padding: 0 10px">                 * > If there are already three elements in the list of active formatting elements after the last marker,
</span><span class="cx" style="display: block; padding: 0 10px">                 * > if any, or anywhere in the list if there are no markers, that have the same tag name, namespace, and
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -119,7 +119,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param WP_HTML_Token $token Remove this node from the stack, if it's there already.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the node was found and removed from the stack of active formatting elements.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function remove_node( $token ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function remove_node( WP_HTML_Token $token ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                 foreach ( $this->walk_up() as $position_from_end => $item ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        if ( $token->bookmark_name !== $item->bookmark_name ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                continue;
</span></span></pre></div>
<a id="trunksrcwpincludeshtmlapiclasswphtmldecoderphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/html-api/class-wp-html-decoder.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/html-api/class-wp-html-decoder.php  2024-07-19 15:54:41 UTC (rev 58768)
+++ trunk/src/wp-includes/html-api/class-wp-html-decoder.php    2024-07-19 23:42:14 UTC (rev 58769)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -31,7 +31,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *                                 Default 'case-sensitive'.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the attribute value starts with the given string.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public static function attribute_starts_with( $haystack, $search_text, $case_sensitivity = 'case-sensitive' ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public static function attribute_starts_with( $haystack, $search_text, $case_sensitivity = 'case-sensitive' ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $search_length = strlen( $search_text );
</span><span class="cx" style="display: block; padding: 0 10px">                $loose_case    = 'ascii-case-insensitive' === $case_sensitivity;
</span><span class="cx" style="display: block; padding: 0 10px">                $haystack_end  = strlen( $haystack );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -90,7 +90,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $text Text containing raw and non-decoded text node to decode.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string Decoded UTF-8 value of given text node.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public static function decode_text_node( $text ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public static function decode_text_node( $text ): string {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return static::decode( 'data', $text );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -110,7 +110,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $text Text containing raw and non-decoded attribute value to decode.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string Decoded UTF-8 value of given attribute value.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public static function decode_attribute( $text ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public static function decode_attribute( $text ): string {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return static::decode( 'attribute', $text );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -133,7 +133,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $text    Text document containing span of text to decode.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string Decoded UTF-8 string.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public static function decode( $context, $text ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public static function decode( $context, $text ): string {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $decoded = '';
</span><span class="cx" style="display: block; padding: 0 10px">                $end     = strlen( $text );
</span><span class="cx" style="display: block; padding: 0 10px">                $at      = 0;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -421,7 +421,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param int $code_point Which code point to convert.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string Converted code point, or `�` if invalid.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public static function code_point_to_utf8_bytes( $code_point ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public static function code_point_to_utf8_bytes( $code_point ): string {
</ins><span class="cx" style="display: block; padding: 0 10px">                 // Pre-check to ensure a valid code point.
</span><span class="cx" style="display: block; padding: 0 10px">                if (
</span><span class="cx" style="display: block; padding: 0 10px">                        $code_point <= 0 ||
</span></span></pre></div>
<a id="trunksrcwpincludeshtmlapiclasswphtmlopenelementsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/html-api/class-wp-html-open-elements.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/html-api/class-wp-html-open-elements.php    2024-07-19 15:54:41 UTC (rev 58768)
+++ trunk/src/wp-includes/html-api/class-wp-html-open-elements.php      2024-07-19 23:42:14 UTC (rev 58769)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -58,7 +58,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @since 6.6.0
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         * @var Closure
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  * @var Closure|null
</ins><span class="cx" style="display: block; padding: 0 10px">          */
</span><span class="cx" style="display: block; padding: 0 10px">        private $pop_handler = null;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -69,7 +69,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @since 6.6.0
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         * @var Closure
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  * @var Closure|null
</ins><span class="cx" style="display: block; padding: 0 10px">          */
</span><span class="cx" style="display: block; padding: 0 10px">        private $push_handler = null;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -83,7 +83,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @param Closure $handler The handler function.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function set_pop_handler( Closure $handler ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function set_pop_handler( Closure $handler ): void {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->pop_handler = $handler;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -97,7 +97,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @param Closure $handler The handler function.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function set_push_handler( Closure $handler ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function set_push_handler( Closure $handler ): void {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->push_handler = $handler;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -109,7 +109,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param WP_HTML_Token $token Look for this node in the stack.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the referenced node is in the stack of open elements.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function contains_node( $token ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function contains_node( WP_HTML_Token $token ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 foreach ( $this->walk_up() as $item ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        if ( $token->bookmark_name === $item->bookmark_name ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                return true;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -126,7 +126,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return int How many node are in the stack of open elements.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function count() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function count(): int {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return count( $this->stack );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -138,7 +138,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return WP_HTML_Token|null Last node in the stack of open elements, if one exists, otherwise null.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function current_node() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function current_node(): ?WP_HTML_Token {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $current_node = end( $this->stack );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                return $current_node ? $current_node : null;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -197,7 +197,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string[] $termination_list List of elements that terminate the search.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the element was found in a specific scope.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function has_element_in_specific_scope( $tag_name, $termination_list ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function has_element_in_specific_scope( string $tag_name, $termination_list ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 foreach ( $this->walk_up() as $node ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        if ( $node->node_name === $tag_name ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                return true;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -233,7 +233,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $tag_name Name of tag to check.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether given element is in scope.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function has_element_in_scope( $tag_name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function has_element_in_scope( string $tag_name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->has_element_in_specific_scope(
</span><span class="cx" style="display: block; padding: 0 10px">                        $tag_name,
</span><span class="cx" style="display: block; padding: 0 10px">                        array(
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -260,7 +260,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $tag_name Name of tag to check.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether given element is in scope.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function has_element_in_list_item_scope( $tag_name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function has_element_in_list_item_scope( string $tag_name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->has_element_in_specific_scope(
</span><span class="cx" style="display: block; padding: 0 10px">                        $tag_name,
</span><span class="cx" style="display: block; padding: 0 10px">                        array(
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -281,7 +281,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $tag_name Name of tag to check.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether given element is in scope.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function has_element_in_button_scope( $tag_name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function has_element_in_button_scope( string $tag_name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->has_element_in_specific_scope( $tag_name, array( 'BUTTON' ) );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -297,7 +297,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $tag_name Name of tag to check.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether given element is in scope.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function has_element_in_table_scope( $tag_name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function has_element_in_table_scope( string $tag_name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 throw new WP_HTML_Unsupported_Exception( 'Cannot process elements depending on table scope.' );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                return false; // The linter requires this unreachable code until the function is implemented and can return.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -323,7 +323,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $tag_name Name of tag to check.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the given element is in SELECT scope.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function has_element_in_select_scope( $tag_name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function has_element_in_select_scope( string $tag_name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 foreach ( $this->walk_up() as $node ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        if ( $node->node_name === $tag_name ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                return true;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -349,7 +349,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether a P is in BUTTON scope.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function has_p_in_button_scope() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function has_p_in_button_scope(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->has_p_in_button_scope;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -362,7 +362,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether a node was popped off of the stack.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function pop() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function pop(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $item = array_pop( $this->stack );
</span><span class="cx" style="display: block; padding: 0 10px">                if ( null === $item ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -387,7 +387,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $tag_name Name of tag that needs to be popped off of the stack of open elements.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether a tag of the given name was found and popped off of the stack of open elements.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function pop_until( $tag_name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function pop_until( string $tag_name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 foreach ( $this->walk_up() as $item ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        if ( 'context-node' === $item->bookmark_name ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                return true;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -419,7 +419,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @param WP_HTML_Token $stack_item Item to add onto stack.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function push( $stack_item ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function push( WP_HTML_Token $stack_item ): void {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->stack[] = $stack_item;
</span><span class="cx" style="display: block; padding: 0 10px">                $this->after_element_push( $stack_item );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -432,7 +432,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param WP_HTML_Token $token The node to remove from the stack of open elements.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the node was found and removed from the stack of open elements.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function remove_node( $token ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function remove_node( WP_HTML_Token $token ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( 'context-node' === $token->bookmark_name ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -502,7 +502,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param WP_HTML_Token|null $above_this_node Optional. Start traversing above this node,
</span><span class="cx" style="display: block; padding: 0 10px">         *                                            if provided and if the node exists.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function walk_up( $above_this_node = null ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function walk_up( ?WP_HTML_Token $above_this_node = null ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $has_found_node = null === $above_this_node;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                for ( $i = count( $this->stack ) - 1; $i >= 0; $i-- ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -534,7 +534,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @param WP_HTML_Token $item Element that was added to the stack of open elements.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function after_element_push( $item ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function after_element_push( WP_HTML_Token $item ): void {
</ins><span class="cx" style="display: block; padding: 0 10px">                 /*
</span><span class="cx" style="display: block; padding: 0 10px">                 * When adding support for new elements, expand this switch to trap
</span><span class="cx" style="display: block; padding: 0 10px">                 * cases where the precalculated value needs to change.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -567,7 +567,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @param WP_HTML_Token $item Element that was removed from the stack of open elements.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function after_element_pop( $item ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function after_element_pop( WP_HTML_Token $item ): void {
</ins><span class="cx" style="display: block; padding: 0 10px">                 /*
</span><span class="cx" style="display: block; padding: 0 10px">                 * When adding support for new elements, expand this switch to trap
</span><span class="cx" style="display: block; padding: 0 10px">                 * cases where the precalculated value needs to change.
</span></span></pre></div>
<a id="trunksrcwpincludeshtmlapiclasswphtmlprocessorstatephp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/html-api/class-wp-html-processor-state.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/html-api/class-wp-html-processor-state.php  2024-07-19 15:54:41 UTC (rev 58768)
+++ trunk/src/wp-includes/html-api/class-wp-html-processor-state.php    2024-07-19 23:42:14 UTC (rev 58769)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -333,7 +333,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @var WP_HTML_Open_Elements
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public $stack_of_open_elements = null;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public $stack_of_open_elements;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><span class="cx" style="display: block; padding: 0 10px">         * Tracks open formatting elements, used to handle mis-nested formatting element tags.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -346,7 +346,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @var WP_HTML_Active_Formatting_Elements
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public $active_formatting_elements = null;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public $active_formatting_elements;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><span class="cx" style="display: block; padding: 0 10px">         * Refers to the currently-matched tag, if any.
</span></span></pre></div>
<a id="trunksrcwpincludeshtmlapiclasswphtmlprocessorphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/html-api/class-wp-html-processor.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/html-api/class-wp-html-processor.php        2024-07-19 15:54:41 UTC (rev 58768)
+++ trunk/src/wp-includes/html-api/class-wp-html-processor.php  2024-07-19 23:42:14 UTC (rev 58769)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -159,7 +159,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @var WP_HTML_Processor_State
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private $state = null;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private $state;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><span class="cx" style="display: block; padding: 0 10px">         * Used to create unique bookmark names.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -208,7 +208,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @since 6.4.0
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         * @var closure
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  * @var Closure|null
</ins><span class="cx" style="display: block; padding: 0 10px">          */
</span><span class="cx" style="display: block; padding: 0 10px">        private $release_internal_bookmark_on_destruct = null;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -368,7 +368,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $this->state = new WP_HTML_Processor_State();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $this->state->stack_of_open_elements->set_push_handler(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        function ( WP_HTML_Token $token ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 function ( WP_HTML_Token $token ): void {
</ins><span class="cx" style="display: block; padding: 0 10px">                                 $is_virtual            = ! isset( $this->state->current_token ) || $this->is_tag_closer();
</span><span class="cx" style="display: block; padding: 0 10px">                                $same_node             = isset( $this->state->current_token ) && $token->node_name === $this->state->current_token->node_name;
</span><span class="cx" style="display: block; padding: 0 10px">                                $provenance            = ( ! $same_node || $is_virtual ) ? 'virtual' : 'real';
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -377,7 +377,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $this->state->stack_of_open_elements->set_pop_handler(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        function ( WP_HTML_Token $token ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 function ( WP_HTML_Token $token ): void {
</ins><span class="cx" style="display: block; padding: 0 10px">                                 $is_virtual            = ! isset( $this->state->current_token ) || ! $this->is_tag_closer();
</span><span class="cx" style="display: block; padding: 0 10px">                                $same_node             = isset( $this->state->current_token ) && $token->node_name === $this->state->current_token->node_name;
</span><span class="cx" style="display: block; padding: 0 10px">                                $provenance            = ( ! $same_node || $is_virtual ) ? 'virtual' : 'real';
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -390,7 +390,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 * a private method into WP_HTML_Token classes without
</span><span class="cx" style="display: block; padding: 0 10px">                 * exposing it to any public API.
</span><span class="cx" style="display: block; padding: 0 10px">                 */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $this->release_internal_bookmark_on_destruct = function ( $name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $this->release_internal_bookmark_on_destruct = function ( string $name ): void {
</ins><span class="cx" style="display: block; padding: 0 10px">                         parent::release_bookmark( $name );
</span><span class="cx" style="display: block; padding: 0 10px">                };
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -403,8 +403,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @since 6.7.0
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $message Explains support is missing in order to parse the current node.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         *
-        * @return mixed
</del><span class="cx" style="display: block; padding: 0 10px">          */
</span><span class="cx" style="display: block; padding: 0 10px">        private function bail( string $message ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $here  = $this->bookmarks[ $this->state->current_token->bookmark_name ];
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -457,7 +455,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string|null The last error, if one exists, otherwise null.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function get_last_error() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function get_last_error(): ?string {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->last_error;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -500,7 +498,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * }
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether a tag was matched.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function next_tag( $query = null ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function next_tag( $query = null ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $visit_closers = isset( $query['tag_closers'] ) && 'visit' === $query['tag_closers'];
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                if ( null === $query ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -590,7 +588,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function next_token() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function next_token(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->current_element = null;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                if ( isset( $this->last_error ) ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -643,7 +641,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">                return true;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
</del><span class="cx" style="display: block; padding: 0 10px">         /**
</span><span class="cx" style="display: block; padding: 0 10px">         * Indicates if the current tag token is a tag closer.
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -660,7 +657,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the current tag is a tag closer.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function is_tag_closer() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function is_tag_closer(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->is_virtual()
</span><span class="cx" style="display: block; padding: 0 10px">                        ? ( WP_HTML_Stack_Event::POP === $this->current_element->operation && '#tag' === $this->get_token_type() )
</span><span class="cx" style="display: block; padding: 0 10px">                        : parent::is_tag_closer();
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -674,7 +671,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the current token is virtual.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function is_virtual() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function is_virtual(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return (
</span><span class="cx" style="display: block; padding: 0 10px">                        isset( $this->current_element->provenance ) &&
</span><span class="cx" style="display: block; padding: 0 10px">                        'virtual' === $this->current_element->provenance
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -706,7 +703,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *                              May also contain the wildcard `*` which matches a single element, e.g. `array( 'SECTION', '*' )`.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the currently-matched tag is found at the given nested structure.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function matches_breadcrumbs( $breadcrumbs ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function matches_breadcrumbs( $breadcrumbs ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 // Everything matches when there are zero constraints.
</span><span class="cx" style="display: block; padding: 0 10px">                if ( 0 === count( $breadcrumbs ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return true;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -757,7 +754,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool|null Whether to expect a closer for the currently-matched node,
</span><span class="cx" style="display: block; padding: 0 10px">         *                   or `null` if not matched on any token.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function expects_closer( $node = null ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function expects_closer( $node = null ): ?bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $token_name = $node->node_name ?? $this->get_token_name();
</span><span class="cx" style="display: block; padding: 0 10px">                if ( ! isset( $token_name ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return null;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -788,7 +785,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $node_to_process Whether to parse the next node or reprocess the current node.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether a tag was matched.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function step( $node_to_process = self::PROCESS_NEXT_NODE ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function step( $node_to_process = self::PROCESS_NEXT_NODE ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 // Refuse to proceed if there was a previous error.
</span><span class="cx" style="display: block; padding: 0 10px">                if ( null !== $this->last_error ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -938,7 +935,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string[]|null Array of tag names representing path to matched node, if matched, otherwise NULL.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function get_breadcrumbs() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function get_breadcrumbs(): ?array {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->breadcrumbs;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -967,7 +964,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return int Nesting-depth of current location in the document.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function get_current_depth() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function get_current_depth(): int {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return count( $this->breadcrumbs );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -986,7 +983,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_initial() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_initial(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1005,7 +1002,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_before_html() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_before_html(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1024,7 +1021,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_before_head() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_before_head(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1043,7 +1040,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_in_head() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_in_head(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1062,7 +1059,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_in_head_noscript() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_in_head_noscript(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1081,7 +1078,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_after_head() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_after_head(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1100,7 +1097,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_in_body() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_in_body(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $token_name = $this->get_token_name();
</span><span class="cx" style="display: block; padding: 0 10px">                $token_type = $this->get_token_type();
</span><span class="cx" style="display: block; padding: 0 10px">                $op_sigil   = '#tag' === $token_type ? ( parent::is_tag_closer() ? '-' : '+' ) : '';
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1723,7 +1720,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_in_table() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_in_table(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1742,7 +1739,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_in_table_text() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_in_table_text(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1761,7 +1758,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_in_caption() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_in_caption(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1780,7 +1777,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_in_column_group() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_in_column_group(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1799,7 +1796,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_in_table_body() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_in_table_body(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1818,7 +1815,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_in_row() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_in_row(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1837,7 +1834,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_in_cell() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_in_cell(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1856,7 +1853,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_in_select() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_in_select(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $token_name = $this->get_token_name();
</span><span class="cx" style="display: block; padding: 0 10px">                $token_type = $this->get_token_type();
</span><span class="cx" style="display: block; padding: 0 10px">                $op_sigil   = '#tag' === $token_type ? ( parent::is_tag_closer() ? '-' : '+' ) : '';
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2037,7 +2034,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_in_select_in_table() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_in_select_in_table(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2056,7 +2053,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_in_template() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_in_template(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2075,7 +2072,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_after_body() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_after_body(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2094,7 +2091,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_in_frameset() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_in_frameset(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2113,7 +2110,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_after_frameset() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_after_frameset(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2132,7 +2129,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_after_after_body() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_after_after_body(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2151,7 +2148,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_after_after_frameset() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_after_after_frameset(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2170,7 +2167,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an element was found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function step_in_foreign_content() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function step_in_foreign_content(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2222,7 +2219,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string|null Name of currently matched tag in input HTML, or `null` if none found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function get_tag() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function get_tag(): ?string {
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( null !== $this->last_error ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return null;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2263,7 +2260,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the currently matched tag contains the self-closing flag.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function has_self_closing_flag() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function has_self_closing_flag(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->is_virtual() ? false : parent::has_self_closing_flag();
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2287,7 +2284,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string|null Name of the matched token.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function get_token_name() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function get_token_name(): ?string {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->is_virtual()
</span><span class="cx" style="display: block; padding: 0 10px">                        ? $this->current_element->token->node_name
</span><span class="cx" style="display: block; padding: 0 10px">                        : parent::get_token_name();
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2315,7 +2312,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string|null What kind of token is matched, or null.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function get_token_type() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function get_token_type(): ?string {
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( $this->is_virtual() ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        /*
</span><span class="cx" style="display: block; padding: 0 10px">                         * This logic comes from the Tag Processor.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2377,7 +2374,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string|bool $value The new attribute value.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an attribute value was set.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function set_attribute( $name, $value ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function set_attribute( $name, $value ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->is_virtual() ? false : parent::set_attribute( $name, $value );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2389,7 +2386,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $name The attribute name to remove.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an attribute was removed.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function remove_attribute( $name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function remove_attribute( $name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->is_virtual() ? false : parent::remove_attribute( $name );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2419,7 +2416,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $prefix Prefix of requested attribute names.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return array|null List of attribute names, or `null` when no tag opener is matched.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function get_attribute_names_with_prefix( $prefix ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function get_attribute_names_with_prefix( $prefix ): ?array {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->is_virtual() ? null : parent::get_attribute_names_with_prefix( $prefix );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2431,7 +2428,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $class_name The class name to add.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the class was set to be added.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function add_class( $class_name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function add_class( $class_name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->is_virtual() ? false : parent::add_class( $class_name );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2443,7 +2440,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $class_name The class name to remove.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the class was set to be removed.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function remove_class( $class_name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function remove_class( $class_name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->is_virtual() ? false : parent::remove_class( $class_name );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2455,7 +2452,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $wanted_class Look for this CSS class name, ASCII case-insensitive.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool|null Whether the matched tag contains the given class name, or null if not matched.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function has_class( $wanted_class ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function has_class( $wanted_class ): ?bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->is_virtual() ? null : parent::has_class( $wanted_class );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2499,7 +2496,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function get_modifiable_text() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function get_modifiable_text(): string {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->is_virtual() ? '' : parent::get_modifiable_text();
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2522,7 +2519,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string|null
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function get_comment_type() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function get_comment_type(): ?string {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->is_virtual() ? null : parent::get_comment_type();
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2537,7 +2534,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $bookmark_name Name of the bookmark to remove.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the bookmark already existed before removal.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function release_bookmark( $bookmark_name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function release_bookmark( $bookmark_name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return parent::release_bookmark( "_{$bookmark_name}" );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2558,7 +2555,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $bookmark_name Jump to the place in the document identified by this bookmark name.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the internal cursor was successfully moved to the bookmark's location.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function seek( $bookmark_name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function seek( $bookmark_name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 // Flush any pending updates to the document before beginning.
</span><span class="cx" style="display: block; padding: 0 10px">                $this->get_updated_html();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2729,7 +2726,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $bookmark_name Identifies this particular bookmark.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the bookmark was successfully created.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function set_bookmark( $bookmark_name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function set_bookmark( $bookmark_name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return parent::set_bookmark( "_{$bookmark_name}" );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2741,7 +2738,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $bookmark_name Name to identify a bookmark that potentially exists.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether that bookmark exists.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function has_bookmark( $bookmark_name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function has_bookmark( $bookmark_name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return parent::has_bookmark( "_{$bookmark_name}" );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2758,7 +2755,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @see https://html.spec.whatwg.org/#close-a-p-element
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function close_a_p_element() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function close_a_p_element(): void {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->generate_implied_end_tags( 'P' );
</span><span class="cx" style="display: block; padding: 0 10px">                $this->state->stack_of_open_elements->pop_until( 'P' );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2773,7 +2770,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string|null $except_for_this_element Perform as if this element doesn't exist in the stack of open elements.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function generate_implied_end_tags( $except_for_this_element = null ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function generate_implied_end_tags( ?string $except_for_this_element = null ): void {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $elements_with_implied_end_tags = array(
</span><span class="cx" style="display: block; padding: 0 10px">                        'DD',
</span><span class="cx" style="display: block; padding: 0 10px">                        'DT',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2809,7 +2806,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @see WP_HTML_Processor::generate_implied_end_tags
</span><span class="cx" style="display: block; padding: 0 10px">         * @see https://html.spec.whatwg.org/#generate-implied-end-tags
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function generate_implied_end_tags_thoroughly() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function generate_implied_end_tags_thoroughly(): void {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $elements_with_implied_end_tags = array(
</span><span class="cx" style="display: block; padding: 0 10px">                        'CAPTION',
</span><span class="cx" style="display: block; padding: 0 10px">                        'COLGROUP',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2851,7 +2848,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether any formatting elements needed to be reconstructed.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function reconstruct_active_formatting_elements() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function reconstruct_active_formatting_elements(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 /*
</span><span class="cx" style="display: block; padding: 0 10px">                 * > If there are no entries in the list of active formatting elements, then there is nothing
</span><span class="cx" style="display: block; padding: 0 10px">                 * > to reconstruct; stop this algorithm.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3074,7 +3071,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @see https://html.spec.whatwg.org/#adoption-agency-algorithm
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function run_adoption_agency_algorithm() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function run_adoption_agency_algorithm(): void {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $budget       = 1000;
</span><span class="cx" style="display: block; padding: 0 10px">                $subject      = $this->get_tag();
</span><span class="cx" style="display: block; padding: 0 10px">                $current_node = $this->state->stack_of_open_elements->current_node();
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3182,7 +3179,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @param WP_HTML_Token $token Name of bookmark pointing to element in original input HTML.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function insert_html_element( $token ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function insert_html_element( WP_HTML_Token $token ): void {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->state->stack_of_open_elements->push( $token );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3200,7 +3197,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $tag_name Name of element to check.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the element of the given name is in the special category.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public static function is_special( $tag_name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public static function is_special( $tag_name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $tag_name = strtoupper( $tag_name );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                return (
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3315,7 +3312,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $tag_name Name of HTML tag to check.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the given tag is an HTML Void Element.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public static function is_void( $tag_name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public static function is_void( $tag_name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $tag_name = strtoupper( $tag_name );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                return (
</span></span></pre></div>
<a id="trunksrcwpincludeshtmlapiclasswphtmlspanphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/html-api/class-wp-html-span.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/html-api/class-wp-html-span.php     2024-07-19 15:54:41 UTC (rev 58768)
+++ trunk/src/wp-includes/html-api/class-wp-html-span.php       2024-07-19 23:42:14 UTC (rev 58769)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -49,7 +49,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param int $start  Byte offset into document where replacement span begins.
</span><span class="cx" style="display: block; padding: 0 10px">         * @param int $length Byte length of span.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function __construct( $start, $length ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function __construct( int $start, int $length ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->start  = $start;
</span><span class="cx" style="display: block; padding: 0 10px">                $this->length = $length;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span></span></pre></div>
<a id="trunksrcwpincludeshtmlapiclasswphtmlstackeventphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/html-api/class-wp-html-stack-event.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/html-api/class-wp-html-stack-event.php      2024-07-19 15:54:41 UTC (rev 58768)
+++ trunk/src/wp-includes/html-api/class-wp-html-stack-event.php        2024-07-19 23:42:14 UTC (rev 58769)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -74,7 +74,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string        $operation  One of self::PUSH or self::POP.
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string        $provenance "virtual" or "real".
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function __construct( $token, $operation, $provenance ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function __construct( WP_HTML_Token $token, string $operation, string $provenance ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->token      = $token;
</span><span class="cx" style="display: block; padding: 0 10px">                $this->operation  = $operation;
</span><span class="cx" style="display: block; padding: 0 10px">                $this->provenance = $provenance;
</span></span></pre></div>
<a id="trunksrcwpincludeshtmlapiclasswphtmltagprocessorphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/html-api/class-wp-html-tag-processor.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/html-api/class-wp-html-tag-processor.php    2024-07-19 15:54:41 UTC (rev 58768)
+++ trunk/src/wp-includes/html-api/class-wp-html-tag-processor.php      2024-07-19 23:42:14 UTC (rev 58769)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -784,7 +784,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * }
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether a tag was matched.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function next_tag( $query = null ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function next_tag( $query = null ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->parse_query( $query );
</span><span class="cx" style="display: block; padding: 0 10px">                $already_found = 0;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -832,7 +832,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether a token was parsed.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function next_token() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function next_token(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->base_class_next_token();
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -851,7 +851,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether a token was parsed.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function base_class_next_token() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function base_class_next_token(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $was_at = $this->bytes_already_parsed;
</span><span class="cx" style="display: block; padding: 0 10px">                $this->after_tag();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1033,7 +1033,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the parse paused at the start of an incomplete token.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function paused_at_incomplete_token() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function paused_at_incomplete_token(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return self::STATE_INCOMPLETE_INPUT === $this->parser_state;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1112,7 +1112,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $wanted_class Look for this CSS class name, ASCII case-insensitive.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool|null Whether the matched tag contains the given class name, or null if not matched.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function has_class( $wanted_class ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function has_class( $wanted_class ): ?bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( self::STATE_MATCHED_TAG !== $this->parser_state ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return null;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1209,7 +1209,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $name Identifies this particular bookmark.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the bookmark was successfully created.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function set_bookmark( $name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function set_bookmark( $name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 // It only makes sense to set a bookmark if the parser has paused on a concrete token.
</span><span class="cx" style="display: block; padding: 0 10px">                if (
</span><span class="cx" style="display: block; padding: 0 10px">                        self::STATE_COMPLETE === $this->parser_state ||
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1242,7 +1242,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $name Name of the bookmark to remove.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the bookmark already existed before removal.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function release_bookmark( $name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function release_bookmark( $name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! array_key_exists( $name, $this->bookmarks ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1262,7 +1262,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $tag_name The uppercase tag name which will close the RAWTEXT region.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an end to the RAWTEXT region was found before the end of the document.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function skip_rawtext( $tag_name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function skip_rawtext( string $tag_name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 /*
</span><span class="cx" style="display: block; padding: 0 10px">                 * These two functions distinguish themselves on whether character references are
</span><span class="cx" style="display: block; padding: 0 10px">                 * decoded, and since functionality to read the inner markup isn't supported, it's
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1281,7 +1281,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $tag_name The uppercase tag name which will close the RCDATA region.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an end to the RCDATA region was found before the end of the document.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function skip_rcdata( $tag_name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function skip_rcdata( string $tag_name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $html       = $this->html;
</span><span class="cx" style="display: block; padding: 0 10px">                $doc_length = strlen( $html );
</span><span class="cx" style="display: block; padding: 0 10px">                $tag_length = strlen( $tag_name );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1369,7 +1369,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the script tag was closed before the end of the document.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function skip_script_data() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function skip_script_data(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $state      = 'unescaped';
</span><span class="cx" style="display: block; padding: 0 10px">                $html       = $this->html;
</span><span class="cx" style="display: block; padding: 0 10px">                $doc_length = strlen( $html );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1516,7 +1516,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether a tag was found before the end of the document.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function parse_next_tag() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function parse_next_tag(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->after_tag();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $html       = $this->html;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1906,7 +1906,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an attribute was found before the end of the document.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function parse_next_attribute() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function parse_next_attribute(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $doc_length = strlen( $this->html );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                // Skip whitespace and slashes.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2041,7 +2041,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @since 6.2.0
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function skip_whitespace() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function skip_whitespace(): void {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bytes_already_parsed += strspn( $this->html, " \t\f\r\n", $this->bytes_already_parsed );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2050,7 +2050,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @since 6.2.0
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function after_tag() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function after_tag(): void {
</ins><span class="cx" style="display: block; padding: 0 10px">                 /*
</span><span class="cx" style="display: block; padding: 0 10px">                 * There could be lexical updates enqueued for an attribute that
</span><span class="cx" style="display: block; padding: 0 10px">                 * also exists on the next tag. In order to avoid conflating the
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2111,7 +2111,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @see WP_HTML_Tag_Processor::$lexical_updates
</span><span class="cx" style="display: block; padding: 0 10px">         * @see WP_HTML_Tag_Processor::$classname_updates
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function class_name_updates_to_attributes_updates() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function class_name_updates_to_attributes_updates(): void {
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( count( $this->classname_updates ) === 0 ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2256,7 +2256,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param int $shift_this_point Accumulate and return shift for this position.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return int How many bytes the given pointer moved in response to the updates.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function apply_attributes_updates( $shift_this_point ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function apply_attributes_updates( int $shift_this_point ): int {
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! count( $this->lexical_updates ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return 0;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2353,7 +2353,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $bookmark_name Name to identify a bookmark that potentially exists.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether that bookmark exists.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function has_bookmark( $bookmark_name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function has_bookmark( $bookmark_name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return array_key_exists( $bookmark_name, $this->bookmarks );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2368,7 +2368,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $bookmark_name Jump to the place in the document identified by this bookmark name.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the internal cursor was successfully moved to the bookmark's location.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function seek( $bookmark_name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function seek( $bookmark_name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! array_key_exists( $bookmark_name, $this->bookmarks ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        _doing_it_wrong(
</span><span class="cx" style="display: block; padding: 0 10px">                                __METHOD__,
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2405,7 +2405,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param WP_HTML_Text_Replacement $b Second attribute update.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return int Comparison value for string order.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private static function sort_start_ascending( $a, $b ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private static function sort_start_ascending( WP_HTML_Text_Replacement $a, WP_HTML_Text_Replacement $b ): int {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $by_start = $a->start - $b->start;
</span><span class="cx" style="display: block; padding: 0 10px">                if ( 0 !== $by_start ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return $by_start;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2437,7 +2437,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $comparable_name The attribute name in its comparable form.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string|boolean|null Value of enqueued update if present, otherwise false.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function get_enqueued_attribute_value( $comparable_name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function get_enqueued_attribute_value( string $comparable_name ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( self::STATE_MATCHED_TAG !== $this->parser_state ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2588,7 +2588,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $prefix Prefix of requested attribute names.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return array|null List of attribute names, or `null` when no tag opener is matched.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function get_attribute_names_with_prefix( $prefix ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function get_attribute_names_with_prefix( $prefix ): ?array {
</ins><span class="cx" style="display: block; padding: 0 10px">                 if (
</span><span class="cx" style="display: block; padding: 0 10px">                        self::STATE_MATCHED_TAG !== $this->parser_state ||
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->is_closing_tag
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2623,7 +2623,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string|null Name of currently matched tag in input HTML, or `null` if none found.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function get_tag() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function get_tag(): ?string {
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( null === $this->tag_name_starts_at ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return null;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2661,7 +2661,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the currently matched tag contains the self-closing flag.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function has_self_closing_flag() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function has_self_closing_flag(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( self::STATE_MATCHED_TAG !== $this->parser_state ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2693,7 +2693,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the current tag is a tag closer.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function is_tag_closer() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function is_tag_closer(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return (
</span><span class="cx" style="display: block; padding: 0 10px">                        self::STATE_MATCHED_TAG === $this->parser_state &&
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->is_closing_tag
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2722,7 +2722,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string|null What kind of token is matched, or null.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function get_token_type() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function get_token_type(): ?string {
</ins><span class="cx" style="display: block; padding: 0 10px">                 switch ( $this->parser_state ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        case self::STATE_MATCHED_TAG:
</span><span class="cx" style="display: block; padding: 0 10px">                                return '#tag';
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2755,7 +2755,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string|null Name of the matched token.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function get_token_name() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function get_token_name(): ?string {
</ins><span class="cx" style="display: block; padding: 0 10px">                 switch ( $this->parser_state ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        case self::STATE_MATCHED_TAG:
</span><span class="cx" style="display: block; padding: 0 10px">                                return $this->get_tag();
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2801,7 +2801,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string|null
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function get_comment_type() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function get_comment_type(): ?string {
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( self::STATE_COMMENT !== $this->parser_state ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return null;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2829,7 +2829,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function get_modifiable_text() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function get_modifiable_text(): string {
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( null === $this->text_starts_at ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return '';
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2899,7 +2899,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string|bool $value The new attribute value.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an attribute value was set.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function set_attribute( $name, $value ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function set_attribute( $name, $value ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 if (
</span><span class="cx" style="display: block; padding: 0 10px">                        self::STATE_MATCHED_TAG !== $this->parser_state ||
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->is_closing_tag
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3042,7 +3042,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $name The attribute name to remove.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether an attribute was removed.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function remove_attribute( $name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function remove_attribute( $name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 if (
</span><span class="cx" style="display: block; padding: 0 10px">                        self::STATE_MATCHED_TAG !== $this->parser_state ||
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->is_closing_tag
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3120,7 +3120,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $class_name The class name to add.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the class was set to be added.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function add_class( $class_name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function add_class( $class_name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 if (
</span><span class="cx" style="display: block; padding: 0 10px">                        self::STATE_MATCHED_TAG !== $this->parser_state ||
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->is_closing_tag
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3141,7 +3141,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $class_name The class name to remove.
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the class was set to be removed.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function remove_class( $class_name ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function remove_class( $class_name ): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 if (
</span><span class="cx" style="display: block; padding: 0 10px">                        self::STATE_MATCHED_TAG !== $this->parser_state ||
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->is_closing_tag
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3165,7 +3165,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string The processed HTML.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function __toString() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function __toString(): string {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->get_updated_html();
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3178,7 +3178,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string The processed HTML.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function get_updated_html() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function get_updated_html(): string {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $requires_no_updating = 0 === count( $this->classname_updates ) && 0 === count( $this->lexical_updates );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                /*
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3300,7 +3300,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool Whether the given tag and its attribute match the search criteria.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        private function matches() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ private function matches(): bool {
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( $this->is_closing_tag && ! $this->stop_on_tag_closers ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span></span></pre></div>
<a id="trunksrcwpincludeshtmlapiclasswphtmltextreplacementphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/html-api/class-wp-html-text-replacement.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/html-api/class-wp-html-text-replacement.php 2024-07-19 15:54:41 UTC (rev 58768)
+++ trunk/src/wp-includes/html-api/class-wp-html-text-replacement.php   2024-07-19 23:42:14 UTC (rev 58769)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -56,7 +56,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param int    $length Byte length of span in document being replaced.
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $text   Span of text to insert in document to replace existing content from start to end.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function __construct( $start, $length, $text ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function __construct( int $start, int $length, string $text ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->start  = $start;
</span><span class="cx" style="display: block; padding: 0 10px">                $this->length = $length;
</span><span class="cx" style="display: block; padding: 0 10px">                $this->text   = $text;
</span></span></pre></div>
<a id="trunksrcwpincludeshtmlapiclasswphtmltokenphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/html-api/class-wp-html-token.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/html-api/class-wp-html-token.php    2024-07-19 15:54:41 UTC (rev 58768)
+++ trunk/src/wp-includes/html-api/class-wp-html-token.php      2024-07-19 23:42:14 UTC (rev 58769)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -72,12 +72,12 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @since 6.4.0
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         * @param string   $bookmark_name         Name of bookmark corresponding to location in HTML where token is found.
-        * @param string   $node_name             Name of node token represents; if uppercase, an HTML element; if lowercase, a special value like "marker".
-        * @param bool     $has_self_closing_flag Whether the source token contains the self-closing flag, regardless of whether it's valid.
-        * @param callable $on_destroy            Function to call when destroying token, useful for releasing the bookmark.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  * @param string        $bookmark_name         Name of bookmark corresponding to location in HTML where token is found.
+        * @param string        $node_name             Name of node token represents; if uppercase, an HTML element; if lowercase, a special value like "marker".
+        * @param bool          $has_self_closing_flag Whether the source token contains the self-closing flag, regardless of whether it's valid.
+        * @param callable|null $on_destroy            Optional. Function to call when destroying token, useful for releasing the bookmark.
</ins><span class="cx" style="display: block; padding: 0 10px">          */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function __construct( $bookmark_name, $node_name, $has_self_closing_flag, $on_destroy = null ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function __construct( string $bookmark_name, string $node_name, bool $has_self_closing_flag, ?callable $on_destroy = null ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->bookmark_name         = $bookmark_name;
</span><span class="cx" style="display: block; padding: 0 10px">                $this->node_name             = $node_name;
</span><span class="cx" style="display: block; padding: 0 10px">                $this->has_self_closing_flag = $has_self_closing_flag;
</span></span></pre>
</div>
</div>

</body>
</html>