diff --git a/wp-includes/html-api/class-wp-html-processor.php b/wp-includes/html-api/class-wp-html-processor.php index 64fd23924e..52735f29e6 100644 --- a/wp-includes/html-api/class-wp-html-processor.php +++ b/wp-includes/html-api/class-wp-html-processor.php @@ -27,6 +27,7 @@ * - Unwrapping a tag by removing its parent. * - Inserting and removing nodes. * - Reading and changing inner content. + * - Navigating up or around HTML structure. * * ## Usage * @@ -66,7 +67,7 @@ * `array( 'IMG' )` matches all IMG elements and `array( 'P', 'IMG' )` * matches all IMG elements directly inside a P element. To ensure that no * partial matches erroneously match it's possible to specify in a query - * the full breadcrumb match. + * the full breadcrumb match all the way down from the root HTML element. * * Example: * @@ -76,7 +77,7 @@ * * $html = ''; * // ---- Matches here. - * $processor->next_tag( array( 'breadcrumbs' => array( 'FIGURE', 'IMG', 'FIGCAPTION', 'EM' ) ) ); + * $processor->next_tag( array( 'breadcrumbs' => array( 'FIGURE', 'FIGCAPTION', 'EM' ) ) ); * * $html = '
'; * // ----- Matches here, because IMG must be a direct child of the implicit BODY. @@ -100,7 +101,8 @@ * * - Links: A. * - The formatting elements: B, BIG, CODE, EM, FONT, I, SMALL, STRIKE, STRONG, TT, U. - * - Containers: DIV, FIGCAPTION, FIGURE. + * - Containers: DIV, FIGCAPTION, FIGURE, SPAN. + * - Form elements: BUTTON. * - Paragraph: P. * - Void elements: IMG. * @@ -116,7 +118,9 @@ * - Markup involving only those tags listed above. * - Fully-balanced and non-overlapping tags. * - HTML with unexpected tag closers. + * - Some unbalanced or overlapping tags. * - P tags after unclosed P tags. + * - BUTTON tags after unclosed BUTTON tags. * - A tags after unclosed A tags that don't involve any active formatting elements. * * @since 6.4.0 @@ -126,7 +130,10 @@ */ class WP_HTML_Processor extends WP_HTML_Tag_Processor { /** - * HTML processing requires more bookmarks than basic tag processing. + * The maximum number of bookmarks allowed to exist at any given time. + * + * HTML processing requires more bookmarks than basic tag processing, + * so this class constant from the Tag Processor is overwritten. * * @since 6.4.0 * @@ -137,6 +144,8 @@ class WP_HTML_Processor extends WP_HTML_Tag_Processor { /** * Static query for instructing the Tag Processor to visit every token. * + * @access private + * * @since 6.4.0 * * @var array @@ -158,8 +167,15 @@ class WP_HTML_Processor extends WP_HTML_Tag_Processor { /** * Used to create unique bookmark names. * + * This class sets a bookmark for every tag in the HTML document that it encounters. + * The bookmark name is auto-generated and increments, starting with `1`. These are + * internal bookmarks and are automatically released when the referring WP_HTML_Token + * goes out of scope and is garbage-collected. + * * @since 6.4.0 * + * @see WP_HTML_Processor::$release_internal_bookmark_on_destruct + * * @var int */ private $bookmark_counter = 0; @@ -186,7 +202,7 @@ class WP_HTML_Processor extends WP_HTML_Tag_Processor { * * @var closure */ - private $release_internal_bookmark = null; + private $release_internal_bookmark_on_destruct = null; /* * Public Interface Functions @@ -258,10 +274,14 @@ class WP_HTML_Processor extends WP_HTML_Tag_Processor { /** * Constructor. * + * Do not use this method. Use the static creator methods instead. + * * @access private * * @since 6.4.0 * + * @see WP_HTML_Processor::createFragment() + * * @param string $html HTML to process. * @param string|null $use_the_static_create_methods_instead This constructor should not be called manually. */ @@ -287,7 +307,7 @@ class WP_HTML_Processor extends WP_HTML_Tag_Processor { * a private method into WP_HTML_Token classes without * exposing it to any public API. */ - $this->release_internal_bookmark = function ( $name ) { + $this->release_internal_bookmark_on_destruct = function ( $name ) { parent::release_bookmark( $name ); }; } @@ -298,13 +318,15 @@ class WP_HTML_Processor extends WP_HTML_Tag_Processor { * Various situations lead to parsing failure but this class will * return `false` in all those cases. To determine why something * failed it's possible to request the last error. This can be - * helpful to know if it's possible to fix something or to give up. + * helpful to know to distinguish whether a given tag couldn't + * be found or if content in the document caused the processor + * to give up and abort processing. * * Example * - * $p = WP_HTML_Processor::createFragment( '