Do not process <pre> tags with wpautop, replace them with placeholders, process the rest of the content and then put them back. Part props kurtpayne, see #19855
git-svn-id: http://svn.automattic.com/wordpress/trunk@20307 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
bffbb455b1
commit
b358b4accc
|
@ -2982,6 +2982,34 @@ function get_current_theme() {
|
|||
return wp_get_theme()->get('Name');
|
||||
}
|
||||
|
||||
/**
|
||||
* Accepts matches array from preg_replace_callback in wpautop() or a string.
|
||||
*
|
||||
* Ensures that the contents of a <<pre>>...<</pre>> HTML block are not
|
||||
* converted into paragraphs or line-breaks.
|
||||
*
|
||||
* @since 1.2.0
|
||||
* @deprecated 3.4.0
|
||||
*
|
||||
* @param array|string $matches The array or string
|
||||
* @return string The pre block without paragraph/line-break conversion.
|
||||
*/
|
||||
function clean_pre($matches) {
|
||||
_deprecated_function( __FUNCTION__, '3.4' );
|
||||
|
||||
if ( is_array($matches) )
|
||||
$text = $matches[1] . $matches[2] . "</pre>";
|
||||
else
|
||||
$text = $matches;
|
||||
|
||||
$text = str_replace('<br />', '', $text);
|
||||
$text = str_replace('<p>', "\n", $text);
|
||||
$text = str_replace('</p>', '', $text);
|
||||
|
||||
return $text;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add callbacks for image header display.
|
||||
*
|
||||
|
|
|
@ -172,30 +172,6 @@ function _wptexturize_pushpop_element($text, &$stack, $disabled_elements, $openi
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Accepts matches array from preg_replace_callback in wpautop() or a string.
|
||||
*
|
||||
* Ensures that the contents of a <<pre>>...<</pre>> HTML block are not
|
||||
* converted into paragraphs or line-breaks.
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @param array|string $matches The array or string
|
||||
* @return string The pre block without paragraph/line-break conversion.
|
||||
*/
|
||||
function clean_pre($matches) {
|
||||
if ( is_array($matches) )
|
||||
$text = $matches[1] . $matches[2] . "</pre>";
|
||||
else
|
||||
$text = $matches;
|
||||
|
||||
$text = str_replace('<br />', '', $text);
|
||||
$text = str_replace('<p>', "\n", $text);
|
||||
$text = str_replace('</p>', '', $text);
|
||||
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Replaces double line-breaks with paragraph elements.
|
||||
*
|
||||
|
@ -207,14 +183,42 @@ function clean_pre($matches) {
|
|||
* @since 0.71
|
||||
*
|
||||
* @param string $pee The text which has to be formatted.
|
||||
* @param int|bool $br Optional. If set, this will convert all remaining line-breaks after paragraphing. Default true.
|
||||
* @param bool $br Optional. If set, this will convert all remaining line-breaks after paragraphing. Default true.
|
||||
* @return string Text which has been converted into correct paragraph tags.
|
||||
*/
|
||||
function wpautop($pee, $br = 1) {
|
||||
function wpautop($pee, $br = true) {
|
||||
$pre_tags = array();
|
||||
|
||||
if ( trim($pee) === '' )
|
||||
return '';
|
||||
|
||||
$pee = $pee . "\n"; // just to make things a little easier, pad the end
|
||||
|
||||
if ( strpos($pee, '<pre') !== false ) {
|
||||
$pee_parts = explode( '</pre>', $pee );
|
||||
$last_pee = array_pop($pee_parts);
|
||||
$pee = '';
|
||||
$i = 0;
|
||||
|
||||
foreach ( $pee_parts as $pee_part ) {
|
||||
$start = strpos($pee_part, '<pre');
|
||||
|
||||
// Malformed html?
|
||||
if ( $start === false ) {
|
||||
$pee .= $pee_part;
|
||||
continue;
|
||||
}
|
||||
|
||||
$name = "<pre wp-pre-tag-$i></pre>";
|
||||
$pre_tags[$name] = substr( $pee_part, $start ) . '</pre>';
|
||||
|
||||
$pee .= substr( $pee_part, 0, $start ) . $name;
|
||||
$i++;
|
||||
}
|
||||
|
||||
$pee .= $last_pee;
|
||||
}
|
||||
|
||||
$pee = preg_replace('|<br />\s*<br />|', "\n\n", $pee);
|
||||
// Space things out a little
|
||||
$allblocks = '(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|option|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)';
|
||||
|
@ -246,10 +250,11 @@ function wpautop($pee, $br = 1) {
|
|||
}
|
||||
$pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*<br />!', "$1", $pee);
|
||||
$pee = preg_replace('!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)!', '$1', $pee);
|
||||
if (strpos($pee, '<pre') !== false)
|
||||
$pee = preg_replace_callback('!(<pre[^>]*>)(.*?)</pre>!is', 'clean_pre', $pee );
|
||||
$pee = preg_replace( "|\n</p>$|", '</p>', $pee );
|
||||
|
||||
if ( !empty($pre_tags) )
|
||||
$pee = str_replace(array_keys($pre_tags), array_values($pre_tags), $pee);
|
||||
|
||||
return $pee;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue