WordPress.org

Make WordPress Core

Ticket #2691: 2691.2.diff

File 2691.2.diff, 3.0 KB (added by collinsinternet, 4 years ago)

Adjustments to formatting.php to accommodate HTML comments.

  • src/wp-includes/formatting.php

     
    449449        $pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee);
    450450
    451451        if ( $br ) {
    452                 $pee = preg_replace_callback('/<(script|style).*?<\/\\1>/s', '_autop_newline_preservation_helper', $pee);
     452                $pee = preg_replace_callback('/<\!\-.*?\n/s', '_autop_newline_preservation_helper', $pee); // multi-line HTML comments. (Opening)
     453                $pee = preg_replace_callback('/\->.*?\n/s', '_autop_newline_preservation_helper', $pee); // multi-line HTML comments. (Closing)
     454                $pee = preg_replace_callback('/<(script|style|\!).*?<\/\\1>/s', '_autop_newline_preservation_helper', $pee);
    453455                $pee = preg_replace('|(?<!<br />)\s*\n|', "<br />\n", $pee); // optionally make line breaks
    454456                $pee = str_replace('<WPPreserveNewline />', "\n", $pee);
    455457        }
    456458
     459        if ( strpos( $pee, '<!-' ) !== false ) {
     460                // no P around HTML comment
     461                $pee = preg_replace( '|<p>\s*<\!-|', '<!-', $pee );
     462                $pee = preg_replace( '|\->\s*</p>|', '->', $pee );
     463        }
     464       
    457465        $pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*<br />!', "$1", $pee);
    458466        $pee = preg_replace('!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)!', '$1', $pee);
    459467        $pee = preg_replace( "|\n</p>$|", '</p>', $pee );
     468        $pee = preg_replace( "|(\->.*)\n|", "$1<br />\n", $pee ); // no BR after HTML comment
     469        $pee=str_replace("-><br />\n","->\n",$pee);
    460470
     471       
    461472        if ( !empty($pre_tags) )
    462473                $pee = str_replace(array_keys($pre_tags), array_values($pre_tags), $pee);
    463474
  • tests/phpunit/tests/formatting/Autop.php

     
    399399
    400400                $this->assertEquals( $expected, trim( wpautop( $content ) ) );
    401401        }
     402       
     403        /**
     404         * @group 2691
     405         */
     406        function test_autop_multi_line_html_comment(){
     407                $content="<!-- HTML Comment \n";
     408                $content.="Next line -->\n";
     409       
     410                $expected="<!-- HTML Comment \n";
     411                $expected.="Next line -->";
     412               
     413                $this->assertEquals(trim($expected),trim(wpautop($content)));
    402414}
     415               
     416        /**
     417         * @group 2691
     418         */
     419        function test_autop_single_line_html_comment(){
     420                $content="<!-- HTML Comment -->";
     421                $this->assertEquals(trim($content),trim(wpautop($content)));
     422        }
     423       
     424        /**
     425         * @group 2691
     426         */
     427        function test_autop_enclosed_comment(){
     428                $content="Line One.\n";
     429                $content.="<!-- HTML Comment -->\n";
     430                $content.="Line Three.";
     431       
     432                $expected="<p>Line One.<br />\n";
     433                $expected.="<!-- HTML Comment -->\n";
     434                $expected.="Line Three.</p>";
     435               
     436                $this->assertEquals($expected,trim(wpautop($content)));
     437        }
     438       
     439        /**
     440         * @group 2691
     441         */
     442        function test_autop_enclosed_comment_with_text(){
     443                $content="Line One.\n";
     444                $content.="<!-- HTML Comment -->Line Two\n";
     445                $content.="Line Three.";
     446       
     447                $expected="<p>Line One.<br />\n";
     448                $expected.="<!-- HTML Comment -->Line Two<br />\n";
     449                $expected.="Line Three.</p>";
     450
     451                $this->assertEquals($expected,trim(wpautop($content)));
     452        }
     453}