WordPress.org

Make WordPress Core

Ticket #2691: 2691.6.diff

File 2691.6.diff, 5.6 KB (added by adamsilverstein, 5 months ago)
  • src/wp-includes/formatting.php

    diff --git src/wp-includes/formatting.php src/wp-includes/formatting.php
    index b5c4982141..e57626f294 100644
    function wpautop( $pee, $br = true ) { 
    576576
    577577        // Optionally insert line breaks.
    578578        if ( $br ) {
     579
     580                // Multi-line HTML comments. (Opening)
     581                $pee = preg_replace_callback( '/<\!\-.*?\n/s', '_autop_newline_preservation_helper', $pee );
     582
     583                // Multi-line HTML comments. (Closing)
     584                $pee = preg_replace_callback( '/\->.*?\n/s', '_autop_newline_preservation_helper', $pee );
     585
    579586                // Replace newlines that shouldn't be touched with a placeholder.
    580587                $pee = preg_replace_callback( '/<(script|style).*?<\/\\1>/s', '_autop_newline_preservation_helper', $pee );
    581588
    function wpautop( $pee, $br = true ) { 
    589596                $pee = str_replace( '<WPPreserveNewline />', "\n", $pee );
    590597        }
    591598
     599        // No <p> around HTML comment
     600        if ( strpos( $pee, '<!-' ) !== false ) {
     601                $pee = preg_replace( '|<p>\s*<\!-|', '<!-', $pee );
     602
     603                // Remove the tailing paragraph if this paragraph starts as a comment.
     604                if ( 0 === strpos( $pee, '<!-' ) ) {
     605                        $pee = preg_replace( '|\-->\s*</p>|', '-->', $pee );
     606                }
     607        }
     608
    592609        // If a <br /> tag is after an opening or closing block tag, remove it.
    593610        $pee = preg_replace( '!(</?' . $allblocks . '[^>]*>)\s*<br />!', '$1', $pee );
    594611
    function wpautop( $pee, $br = true ) { 
    596613        $pee = preg_replace( '!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)!', '$1', $pee );
    597614        $pee = preg_replace( "|\n</p>$|", '</p>', $pee );
    598615
     616        // No <br /> after HTML comment
     617        $pee = preg_replace( "|(\-\->.*[^</p>])\n|", "$1<br />\n", $pee );
     618        $pee = str_replace( "--><br />\n","-->\n", $pee );
     619
    599620        // Replace placeholder <pre> tags with their original content.
    600621        if ( ! empty( $pre_tags ) ) {
    601622                $pee = str_replace( array_keys( $pre_tags ), array_values( $pre_tags ), $pee );
  • tests/phpunit/tests/formatting/Autop.php

    diff --git tests/phpunit/tests/formatting/Autop.php tests/phpunit/tests/formatting/Autop.php
    index 3f44949fe2..949e59c8cd 100644
    Paragraph two.'; 
    429429                $this->assertEquals( $expected, trim( wpautop( $content ) ) );
    430430        }
    431431
     432        /**
     433         * Do not allow HTML comments to get wrapped in p tags.
     434         *
     435         * @dataProvider data_html_comments
     436         * @ticket 2691
     437         */
     438        function test_html_comments( $input, $expected ) {
     439                $this->assertEquals( $expected, trim( wpautop( $input ) ) );
     440        }
     441
     442        function data_html_comments() {
     443                return array(
     444                        array(
     445                                "<!-- HTML Comment -->",
     446                                "<!-- HTML Comment -->",
     447                        ),
     448                        array(
     449                                "<!-- HTML\nmultiline\nComment -->",
     450                                "<!-- HTML\nmultiline\nComment -->",
     451                        ),
     452                        array(
     453                                "Line One.\n<!-- HTML Comment -->Line Two\nLine Three.",
     454                                "<p>Line One.<br />
     455<!-- HTML Comment -->Line Two<br />
     456Line Three.</p>",
     457                        ),
     458                        array(
     459                                "<p>Line One.\n<!-- HTML Comment -->Line Two</p>\nLine Three.",
     460                                "<p>Line One.<br />
     461<!-- HTML Comment -->Line Two</p>
     462<p>Line Three.</p>",
     463                        ),
     464                        array(
     465                                "Line One.\n<!-- HTML\nComment -->\nLine Three.",
     466                                "<p>Line One.<br />
     467<!-- HTML
     468Comment -->
     469Line Three.</p>",
     470                        ),
     471                        array(
     472                                '<script type="text/javascript"><!--
     473google_ad_client = "xxxxxxxx";
     474google_ad_width = 120;
     475google_ad_height = 60;
     476google_ad_format = "120x60_as_rimg";
     477google_cpa_choice = "CAAQ2eOZzgEaCD4zuVkdzt_CKI-293M";
     478//--></script>',
     479                                '<p><script type="text/javascript"><!--
     480google_ad_client = "xxxxxxxx";
     481google_ad_width = 120;
     482google_ad_height = 60;
     483google_ad_format = "120x60_as_rimg";
     484google_cpa_choice = "CAAQ2eOZzgEaCD4zuVkdzt_CKI-293M";
     485//--></script></p>',
     486                        ),
     487                        array(
     488                                '<!-- wp:paragraph -->
     489<p><del>This is a paragraph.</del></p>
     490<!-- /wp:paragraph -->
     491<!-- wp:client/custom-block {"title":"This is the title"} /-->
     492<!-- wp:paragraph -->
     493<!-- /wp:paragraph -->',
     494                                '<!-- wp:paragraph -->
     495<p><del>This is a paragraph.</del></p>
     496<!-- /wp:paragraph -->
     497<!-- wp:client/custom-block {"title":"This is the title"} /-->
     498<!-- wp:paragraph -->
     499<!-- /wp:paragraph -->'
     500                        ),
     501                );
     502        }
     503
    432504        /**
    433505         * Do not allow newlines within HTML elements to become mangled.
    434506         *
    Paragraph two.'; 
    450522                                "<p>Hello <!-- a\nhref='world' --></p>\n",
    451523                        ),
    452524                        array(
    453                                 "Hello <!-- <object>\n<param>\n<param>\n<embed>\n</embed>\n</object>\n -->",
     525                                "Hello <!-- <object>\n<param>\n<param>\n<embed>\n</embed>\n</object>\n -->\n",
    454526                                "<p>Hello <!-- <object>\n<param>\n<param>\n<embed>\n</embed>\n</object>\n --></p>\n",
    455527                        ),
    456528                        array(
    line 2<br/> 
    558630                $this->assertEquals( $expected2, trim( wpautop( $content2 ) ) );
    559631        }
    560632
     633        /**
     634         * @ticket 2833
     635         */
     636        function test_that_styles_dont_get_extra_brs() {
     637                $content = '<style type="text/css>
     638.matt { color: #FFFFFF; }
     639</style>';
     640                $expected = '<style type="text/css>
     641.matt { color: #FFFFFF; }
     642</style>';
     643
     644                $this->assertEquals( $expected, trim( wpautop( $content ) ) );
     645        }
     646
     647
    561648}
     649
  • tests/phpunit/tests/media.php

    diff --git tests/phpunit/tests/media.php tests/phpunit/tests/media.php
    index d9c34e5b9d..20c5aabeff 100644
    EOF; 
    12401240https://youtube.com/watch?v=TEST01YRHA0<br />
    12411241<script><!--
    12421242my_function();
    1243 // --> </script><br />
    1244 https://youtube.com/watch?v=TEST02YRHA0<br />
     1243// --> </script>
     1244https://youtube.com/watch?v=TEST02YRHA0
    12451245<a href="http://www.example.com/embed/TEST03YRHA0">http://www.example.com/embed/TEST03YRHA0</a><br />
    12461246http://www.example.com/embed/TEST04YRHA0<br />
    12471247Stop.</p>
    12481248
    12491249EOF;
    1250 
    12511250                $result = apply_filters( 'the_content', $content );
    12521251                $this->assertEquals( $expected, $result );
    12531252        }