Formatting: maintain the content of HTML comments when they contain `<object>` tags. Add more tests for wpaitop().

Props miqrogroove.
Fixes #33645 for trunk.

git-svn-id: https://develop.svn.wordpress.org/trunk@33955 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Andrew Ozz 2015-09-08 22:54:08 +00:00
parent a4a469d887
commit bb6dee64ae
2 changed files with 43 additions and 4 deletions

View File

@ -496,7 +496,7 @@ function wpautop( $pee, $br = true ) {
$allblocks = '(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|form|map|area|blockquote|address|math|style|p|h[1-6]|hr|fieldset|legend|section|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary)';
// Add a single line break above block-level opening tags.
$pee = preg_replace('!(<' . $allblocks . '[^>]*>)!', "\n$1", $pee);
$pee = preg_replace('!(<' . $allblocks . '[\s/>])!', "\n$1", $pee);
// Add a double line break below block-level closing tags.
$pee = preg_replace('!(</' . $allblocks . '>)!', "$1\n\n", $pee);
@ -596,7 +596,9 @@ function wpautop( $pee, $br = true ) {
$pee = str_replace(array_keys($pre_tags), array_values($pre_tags), $pee);
// Restore newlines in all elements.
$pee = str_replace( " <!-- wpnl --> ", "\n", $pee );
if ( false !== strpos( $pee, '<!-- wpnl -->' ) ) {
$pee = str_replace( array( ' <!-- wpnl --> ', '<!-- wpnl -->' ), "\n", $pee );
}
return $pee;
}

View File

@ -328,6 +328,7 @@ Paragraph two.';
'summary',
);
// Check whitespace normalization.
$content = array();
foreach ( $blocks as $block ) {
@ -335,9 +336,37 @@ Paragraph two.';
}
$expected = join( "\n", $content );
$content = join( "\n\n", $content ); // WS difference
$input = join( "\n\n", $content ); // WS difference
$this->assertEquals( $expected, trim( wpautop( $content ) ) );
$this->assertEquals( $expected, trim( wpautop( $input ) ) );
$input = join( "", $content ); // WS difference
$this->assertEquals( $expected, trim( wpautop( $input ) ) );
// Check whitespace addition.
$content = array();
foreach ( $blocks as $block ) {
$content[] = "<$block/>";
}
$expected = join( "\n", $content );
$input = join( "", $content );
$this->assertEquals( $expected, trim( wpautop( $input ) ) );
// Check whitespace addition with attributes.
$content = array();
foreach ( $blocks as $block ) {
$content[] = "<$block attr='value'>foo</$block>";
}
$expected = join( "\n", $content );
$input = join( "", $content );
$this->assertEquals( $expected, trim( wpautop( $input ) ) );
}
/**
@ -420,6 +449,14 @@ Paragraph two.';
"Hello <!-- a\nhref='world' -->",
"<p>Hello <!-- a\nhref='world' --></p>\n",
),
array(
"Hello <!-- <object>\n<param>\n<param>\n<embed>\n</embed>\n</object>\n -->",
"<p>Hello <!-- <object>\n<param>\n<param>\n<embed>\n</embed>\n</object>\n --></p>\n",
),
array(
"Hello <!-- <object>\n<param/>\n<param/>\n<embed>\n</embed>\n</object>\n -->",
"<p>Hello <!-- <object>\n<param/>\n<param/>\n<embed>\n</embed>\n</object>\n --></p>\n",
),
/* Block elements inside comments will fail this test in all versions, it's not a regression.
array(
"Hello <!-- <hr> a\nhref='world' -->",