git-svn-id: http://svn.automattic.com/wordpress/trunk@11345 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
603abd463e
commit
0f7d055621
|
@ -28,12 +28,14 @@
|
||||||
*/
|
*/
|
||||||
function wptexturize($text) {
|
function wptexturize($text) {
|
||||||
global $wp_cockneyreplace;
|
global $wp_cockneyreplace;
|
||||||
$next = true;
|
|
||||||
$has_pre_parent = false;
|
|
||||||
$output = '';
|
$output = '';
|
||||||
$curl = '';
|
$curl = '';
|
||||||
$textarr = preg_split('/(<.*>|\[.*\])/Us', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
|
$textarr = preg_split('/(<.*>|\[.*\])/Us', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
|
||||||
$stop = count($textarr);
|
$stop = count($textarr);
|
||||||
|
$no_texturize_tags = apply_filters('no_texturize_tags', array('pre', 'code', 'kbd', 'style', 'script', 'tt'));
|
||||||
|
$no_texturize_shortcodes = apply_filters('no_texturize_shortcodes', array('code'));
|
||||||
|
$no_texturize_tags_stack = array();
|
||||||
|
$no_texturize_shortcodes_stack = array();
|
||||||
|
|
||||||
// if a plugin has provided an autocorrect array, use it
|
// if a plugin has provided an autocorrect array, use it
|
||||||
if ( isset($wp_cockneyreplace) ) {
|
if ( isset($wp_cockneyreplace) ) {
|
||||||
|
@ -53,19 +55,15 @@ function wptexturize($text) {
|
||||||
for ( $i = 0; $i < $stop; $i++ ) {
|
for ( $i = 0; $i < $stop; $i++ ) {
|
||||||
$curl = $textarr[$i];
|
$curl = $textarr[$i];
|
||||||
|
|
||||||
if ( !empty($curl) && '<' != $curl{0} && '[' != $curl{0} && $next && !$has_pre_parent) { // If it's not a tag
|
if ( !empty($curl) && '<' != $curl{0} && '[' != $curl{0}
|
||||||
|
&& empty($no_texturize_shortcodes_stack) && empty($no_texturize_tags_stack)) { // If it's not a tag
|
||||||
// static strings
|
// static strings
|
||||||
$curl = str_replace($static_characters, $static_replacements, $curl);
|
$curl = str_replace($static_characters, $static_replacements, $curl);
|
||||||
// regular expressions
|
// regular expressions
|
||||||
$curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl);
|
$curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl);
|
||||||
} elseif (strpos($curl, '<tt') !== false || strpos($curl, '<code') !== false || strpos($curl, '<kbd') !== false || strpos($curl, '<style') !== false || strpos($curl, '<script') !== false) {
|
|
||||||
$next = false;
|
|
||||||
} elseif (strpos($curl, '<pre') !== false) {
|
|
||||||
$has_pre_parent = true;
|
|
||||||
} elseif (strpos($curl, '</pre>') !== false) {
|
|
||||||
$has_pre_parent = false;
|
|
||||||
} else {
|
} else {
|
||||||
$next = true;
|
wptexturize_pushpop_element($curl, $no_texturize_tags_stack, $no_texturize_tags, '<', '>');
|
||||||
|
wptexturize_pushpop_element($curl, $no_texturize_shortcodes_stack, $no_texturize_shortcodes, '[', ']');
|
||||||
}
|
}
|
||||||
|
|
||||||
$curl = preg_replace('/&([^#])(?![a-zA-Z1-4]{1,8};)/', '&$1', $curl);
|
$curl = preg_replace('/&([^#])(?![a-zA-Z1-4]{1,8};)/', '&$1', $curl);
|
||||||
|
@ -75,6 +73,21 @@ function wptexturize($text) {
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function wptexturize_pushpop_element($text, &$stack, $disabled_elements, $opening = '<', $closing = '>') {
|
||||||
|
$o = preg_quote($opening);
|
||||||
|
$c = preg_quote($closing);
|
||||||
|
foreach($disabled_elements as $element) {
|
||||||
|
if (preg_match('/^'.$o.$element.'\b/', $text)) array_push($stack, $element);
|
||||||
|
if (preg_match('/^'.$o.'\/'.$element.$c.'/', $text)) {
|
||||||
|
$last = array_pop($stack);
|
||||||
|
// disable texturize until we find a closing tag of our type (e.g. <pre>)
|
||||||
|
// even if there was invalid nesting before that
|
||||||
|
// Example: in the case <pre>sadsadasd</code>"baba"</pre> "baba" won't be texturized
|
||||||
|
if ($last != $element) array_push($stack, $last);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Accepts matches array from preg_replace_callback in wpautop() or a string.
|
* Accepts matches array from preg_replace_callback in wpautop() or a string.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue