[wp-trac] [WordPress Trac] #62521: HTML Processor virtual token seek does not seek to correct location

WordPress Trac noreply at wordpress.org
Fri Nov 22 10:09:31 UTC 2024


#62521: HTML Processor virtual token seek does not seek to correct location
--------------------------+-----------------------------
 Reporter:  jonsurrell    |      Owner:  (none)
     Type:  defect (bug)  |     Status:  new
 Priority:  normal        |  Milestone:  Awaiting Review
Component:  HTML API      |    Version:  6.7
 Severity:  normal        |   Keywords:
  Focuses:                |
--------------------------+-----------------------------
 {{{#!php
 <?php
 $processor = WP_HTML_Processor::create_full_parser( 'text only' );

 $advance_and_log_tag = function () use ( $processor ) {
         assert( $processor->next_tag( array( 'tag_closers' => 'visit' ) )
 );
         echo str_repeat( '  ', $processor->get_current_depth() ) .
                 ( $processor->is_tag_closer() ? '  /' : '' ) .
                 $processor->get_token_name() .
                 "\n";
 };

 $advance_and_log_tag();
 $advance_and_log_tag();
 $advance_and_log_tag();
 $advance_and_log_tag();
 // Now at `<BODY>` virtual token, not present in the HTML string.
 assert( 'BODY' === $processor->get_token_name() && !
 $processor->is_tag_closer() );
 assert( $processor->set_bookmark( 'apparently <BODY> open tag' ) );
 $advance_and_log_tag();
 $advance_and_log_tag();
 // Now at `</HTML>` virtual token, not present in the HTML string.
 assert( $processor->seek( 'apparently <BODY> open tag' ) );
 // Expected to return to `<BODY>` open tag.
 echo $processor->get_token_name() . "\n";
 // prints: #text
 assert( 'BODY' === $processor->get_token_name() );
 // AssertionError!
 }}}

 The above prints:

 {{{
   HTML
     HEAD
     /HEAD
     BODY
     /BODY
   /HTML
 #text

 Fatal error: Uncaught AssertionError: assert('BODY' ===
 $processor->get_token_name()) …
 }}}

 Seeking relies on moving to a specific location in the HTML string and
 advancing to the next token at that location. This means that seeking to
 virtual tokens unsupported.

 Attempting to set a bookmark at a virtual token should return `false` and
 refuse to set the bookmark.

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/62521>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list