WordPress.org

Make WordPress Core

Ticket #2691: 2691.4.diff

File 2691.4.diff, 4.2 KB (added by adamsilverstein, 2 years ago)
  • src/wp-includes/formatting.php

    diff --git a/src/wp-includes/formatting.php b/src/wp-includes/formatting.php
    index 80e1545..7149d47 100644
    a b function wpautop( $pee, $br = true ) { 
    550550
    551551        // Optionally insert line breaks.
    552552        if ( $br ) {
     553
     554                // Multi-line HTML comments. (Opening)
     555                $pee = preg_replace_callback( '/<\!\-.*?\n/s', '_autop_newline_preservation_helper', $pee );
     556
     557                // Multi-line HTML comments. (Closing)
     558                $pee = preg_replace_callback( '/\->.*?\n/s', '_autop_newline_preservation_helper', $pee );
     559
    553560                // Replace newlines that shouldn't be touched with a placeholder.
    554561                $pee = preg_replace_callback('/<(script|style).*?<\/\\1>/s', '_autop_newline_preservation_helper', $pee);
    555562
    function wpautop( $pee, $br = true ) { 
    563570                $pee = str_replace('<WPPreserveNewline />', "\n", $pee);
    564571        }
    565572
     573        // No <p> around HTML comment
     574        if ( strpos( $pee, '<!-' ) !== false ) {
     575                $pee = preg_replace( '|<p>\s*<\!-|', '<!-', $pee );
     576
     577                // Remove the tailing paragraph if this paragraph starts as a comment.
     578                if ( 0 === strpos( $pee, '<!-' ) ) {
     579                        $pee = preg_replace( '|\-->\s*</p>|', '-->', $pee );
     580                }
     581        }
     582
    566583        // If a <br /> tag is after an opening or closing block tag, remove it.
    567584        $pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*<br />!', "$1", $pee);
    568585
    function wpautop( $pee, $br = true ) { 
    570587        $pee = preg_replace('!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)!', '$1', $pee);
    571588        $pee = preg_replace( "|\n</p>$|", '</p>', $pee );
    572589
     590        // No <br /> after HTML comment
     591        $pee = preg_replace( "|(\-\->.*[^</p>])\n|", "$1<br />\n", $pee );
     592        $pee = str_replace( "--><br />\n","-->\n", $pee );
     593
    573594        // Replace placeholder <pre> tags with their original content.
    574595        if ( !empty($pre_tags) )
    575596                $pee = str_replace(array_keys($pre_tags), array_values($pre_tags), $pee);
  • tests/phpunit/tests/formatting/Autop.php

    diff --git a/tests/phpunit/tests/formatting/Autop.php b/tests/phpunit/tests/formatting/Autop.php
    index b92af0f..9564d60 100644
    a b Paragraph two.'; 
    430430        }
    431431
    432432        /**
     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                        ),
     472                );
     473        }
     474
     475        /**
    433476         * Do not allow newlines within HTML elements to become mangled.
    434477         *
    435478         * @ticket 33106
    Paragraph two.'; 
    450493                                "<p>Hello <!-- a\nhref='world' --></p>\n",
    451494                        ),
    452495                        array(
    453                                 "Hello <!-- <object>\n<param>\n<param>\n<embed>\n</embed>\n</object>\n -->",
     496                                "Hello <!-- <object>\n<param>\n<param>\n<embed>\n</embed>\n</object>\n -->\n",
    454497                                "<p>Hello <!-- <object>\n<param>\n<param>\n<embed>\n</embed>\n</object>\n --></p>\n",
    455498                        ),
    456499                        array(
  • tests/phpunit/tests/media.php

    diff --git a/tests/phpunit/tests/media.php b/tests/phpunit/tests/media.php
    index 6b1ec96..6d7a379 100644
    a b EOF; 
    972972https://youtube.com/watch?v=TEST01YRHA0<br />
    973973<script><!--
    974974my_function();
    975 // --> </script><br />
    976 https://youtube.com/watch?v=TEST02YRHA0<br />
     975// --> </script>
     976https://youtube.com/watch?v=TEST02YRHA0
    977977<a href="http://www.example.com/embed/TEST03YRHA0">http://www.example.com/embed/TEST03YRHA0</a><br />
    978978http://www.example.com/embed/TEST04YRHA0<br />
    979979Stop.</p>
    980980
    981981EOF;
    982 
    983982                $result = apply_filters( 'the_content', $content );
    984983                $this->assertEquals( $expected, $result );
    985984        }