WP_HTML_Tag_Processor::after_tag()

In this article

This function’s access is marked private. This means it is not intended for use by plugin or theme developers, only by core. It is listed here for completeness.

Applies attribute updates and cleans up once a tag is fully parsed.

Source

}

$has_value = '=' === $this->html[ $this->bytes_already_parsed ];
if ( $has_value ) {
	++$this->bytes_already_parsed;
	$this->skip_whitespace();
	if ( $this->bytes_already_parsed >= $doc_length ) {
		$this->parser_state = self::STATE_INCOMPLETE_INPUT;

		return false;
	}

	switch ( $this->html[ $this->bytes_already_parsed ] ) {
		case "'":
		case '"':
			$quote                      = $this->html[ $this->bytes_already_parsed ];
			$value_start                = $this->bytes_already_parsed + 1;
			$end_quote_at               = strpos( $this->html, $quote, $value_start );
			$end_quote_at               = false === $end_quote_at ? $doc_length : $end_quote_at;
			$value_length               = $end_quote_at - $value_start;
			$attribute_end              = $end_quote_at + 1;
			$this->bytes_already_parsed = $attribute_end;
			break;

		default:
			$value_start                = $this->bytes_already_parsed;
			$value_length               = strcspn( $this->html, "> \t\f\r\n", $value_start );
			$attribute_end              = $value_start + $value_length;
			$this->bytes_already_parsed = $attribute_end;
	}
} else {
	$value_start   = $this->bytes_already_parsed;
	$value_length  = 0;
	$attribute_end = $attribute_start + $name_length;
}

if ( $attribute_end >= $doc_length ) {
	$this->parser_state = self::STATE_INCOMPLETE_INPUT;

	return false;
}

if ( $this->is_closing_tag ) {
	return true;
}

/*
 * > There must never be two or more attributes on
 * > the same start tag whose names are an ASCII
 * > case-insensitive match for each other.
 *     - HTML 5 spec
 *

Changelog

VersionDescription
6.2.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.