<?php class Token_Counting_HTML_Processor extends WP_HTML_Processor { /** * List of tokens that have already been seen. * * @var array<string, int> */ public $token_seen_count = array(); /** * Gets next token. * * @return bool Whether next token was matched. */ public function next_token(): bool { $result = parent::next_token(); if ( $this->get_token_type() === '#tag' ) { $token_name = ( $this->is_tag_closer() ? '-' : '+' ) . $this->get_tag(); } else { $token_name = $this->get_token_name(); } if ( ! isset( $this->token_seen_count[ $token_name ] ) ) { $this->token_seen_count[ $token_name ] = 1; } else { ++$this->token_seen_count[ $token_name ]; } return $result; } }