WordPress.org

Make WordPress Core

Ticket #22692: miqro-22692.3.patch

File miqro-22692.3.patch, 3.2 KB (added by miqrogroove, 7 years ago)

A more robust solution conceived in IRC. Eliminates the \s sequence.

  • wp-includes/formatting.php

     
    3333
    3434        // No need to set up these static variables more than once
    3535        if ( ! isset( $static_characters ) ) {
     36                // Spaces include new lines, tabs, and the UTF-8 nbsp.
     37                // Replaces the PCRE \s sequence per ticket #22692.
     38                $spaces = apply_filters( 'texturize_spaces_regex', '[\r\n\t ]|\xC2\xA0' );
     39
    3640                /* translators: opening curly double quote */
    3741                $opening_quote = _x( '“', 'opening curly double quote' );
    3842                /* translators: closing curly double quote */
     
    7377                $static_characters = array_merge( array( '---', ' -- ', '--', ' - ', 'xn–', '...', '``', '\'\'', ' (tm)' ), $cockney );
    7478                $static_replacements = array_merge( array( $em_dash, ' ' . $em_dash . ' ', $en_dash, ' ' . $en_dash . ' ', 'xn--', '…', $opening_quote, $closing_quote, ' ™' ), $cockneyreplace );
    7579
     80                // Pattern-based replacements of static characters.
    7681                $dynamic = array();
    77                 if ( "'" != $apos ) {
    78                         $dynamic[ '/\'(\d\d(?:’|\')?s)/' ] = $apos . '$1'; // '99's
    79                         $dynamic[ '/\'(\d)/'                   ] = $apos . '$1'; // '99
    80                 }
     82
     83                // '99s (apostrophe)
     84                if ( "'" != $apos )
     85                        $dynamic[ '/\'(?=\d)/' ] = $apos;
     86
     87                // Single quote at start, or preceded by (, {, <, [, ", or spaces.
    8188                if ( "'" != $opening_single_quote )
    82                         $dynamic[ '/(\s|\A|[([{<]|")\'/'       ] = '$1' . $opening_single_quote; // opening single quote, even after (, {, <, [
     89                        $dynamic[ '/(?<=\A|[([{<"]|' . $spaces . ')\'/' ] = $opening_single_quote;
     90
     91                // 9" (double prime)
    8392                if ( '"' != $double_prime )
    84                         $dynamic[ '/(\d)"/'                    ] = '$1' . $double_prime; // 9" (double prime)
     93                        $dynamic[ '/(?<=\d)"/' ] = $double_prime;
     94
     95                // 9' (prime)
    8596                if ( "'" != $prime )
    86                         $dynamic[ '/(\d)\'/'                   ] = '$1' . $prime; // 9' (prime)
     97                        $dynamic[ '/(?<=\d)\'/' ] = $prime;
     98
     99                // Apostrophe in a word.  No spaces or double primes.
    87100                if ( "'" != $apos )
    88                         $dynamic[ '/(\S)\'([^\'\s])/'          ] = '$1' . $apos . '$2'; // apostrophe in a word
     101                        $dynamic[ '/(?<!' . $spaces . ')\'(?!\'|' . $spaces . ')/' ] = $apos;
     102
     103                // Double quote at start, or preceded by (, {, <, [, or spaces, and not followed by spaces.
    89104                if ( '"' != $opening_quote )
    90                         $dynamic[ '/(\s|\A|[([{<])"(?!\s)/'    ] = '$1' . $opening_quote . '$2'; // opening double quote, even after (, {, <, [
     105                        $dynamic[ '/(?<=\A|[([{<]|' . $spaces . ')"(?!' . $spaces . ')/' ] = $opening_quote;
     106
     107                // Any remaining double quotes.
    91108                if ( '"' != $closing_quote )
    92                         $dynamic[ '/"(\s|\S|\Z)/'              ] = $closing_quote . '$1'; // closing double quote
     109                        $dynamic[ '/"/' ] = $closing_quote;
     110
     111                // Single quotes followed by spaces.
    93112                if ( "'" != $closing_single_quote )
    94                         $dynamic[ '/\'([\s.]|\Z)/'             ] = $closing_single_quote . '$1'; // closing single quote
     113                        $dynamic[ '/\'(?=\Z|' . $spaces . ')/' ] = $closing_single_quote;
    95114
    96                 $dynamic[ '/\b(\d+)x(\d+)\b/'              ] = '$1&#215;$2'; // 9x9 (times)
     115                // 9x9 (times)
     116                $dynamic[ '/\b(\d+)x(\d+)\b/' ] = '$1&#215;$2';
    97117
    98118                $dynamic_characters = array_keys( $dynamic );
    99119                $dynamic_replacements = array_values( $dynamic );