diff --git a/wp-includes/html-api/class-wp-html-tag-processor.php b/wp-includes/html-api/class-wp-html-tag-processor.php index 233d47eb8d..2b115dd156 100644 --- a/wp-includes/html-api/class-wp-html-tag-processor.php +++ b/wp-includes/html-api/class-wp-html-tag-processor.php @@ -3385,6 +3385,58 @@ class WP_HTML_Tag_Processor { return $this->comment_type; } + /** + * Returns the text of a matched comment or null if not on a comment type node. + * + * This method returns the entire text content of a comment node as it + * would appear in the browser. + * + * This differs from {@see ::get_modifiable_text()} in that certain comment + * types in the HTML API cannot allow their entire comment text content to + * be modified. Namely, "bogus comments" of the form `` + * will create a comment whose text content starts with `?`. Note that if + * that character were modified, it would be possible to change the node + * type. + * + * @since 6.7.0 + * + * @return string|null The comment text as it would appear in the browser or null + * if not on a comment type node. + */ + public function get_full_comment_text(): ?string { + if ( self::STATE_FUNKY_COMMENT === $this->parser_state ) { + return $this->get_modifiable_text(); + } + + if ( self::STATE_COMMENT !== $this->parser_state ) { + return null; + } + + switch ( $this->get_comment_type() ) { + case self::COMMENT_AS_HTML_COMMENT: + case self::COMMENT_AS_ABRUPTLY_CLOSED_COMMENT: + return $this->get_modifiable_text(); + + case self::COMMENT_AS_CDATA_LOOKALIKE: + return "[CDATA[{$this->get_modifiable_text()}]]"; + + case self::COMMENT_AS_PI_NODE_LOOKALIKE: + return "?{$this->get_tag()}{$this->get_modifiable_text()}?"; + + /* + * This represents "bogus comments state" from HTML tokenization. + * This can be entered by `html[ $this->text_starts_at - 1 ]; + $comment_start = '?' === $preceding_character ? '?' : ''; + return "{$comment_start}{$this->get_modifiable_text()}"; + } + + return null; + } + /** * Subdivides a matched text node, splitting NULL byte sequences and decoded whitespace as * distinct nodes prefixes. diff --git a/wp-includes/version.php b/wp-includes/version.php index 6ceac1f79f..fedbeb62b2 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.7-alpha-59074'; +$wp_version = '6.7-alpha-59075'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.