WordPress.org

Make WordPress Core

Ticket #8775: miqro-8775.patch

File miqro-8775.patch, 3.7 KB (added by miqrogroove, 6 years ago)
  • src/wp-includes/formatting.php

     
    8686                // Pattern-based replacements of characters.
    8787                $dynamic = array();
    8888
     89                // Quoted Numbers like "42" or '42.00'
     90                if ( '"' !== $opening_quote && '"' !== $closing_quote ) {
     91                        $dynamic[ '/(?<=\A|' . $spaces . ')"(\d[\d\.\,]*)"/' ] = $opening_quote . '$1' . $closing_quote;
     92                }
     93                if ( "'" !== $opening_single_quote && "'" !== $closing_single_quote ) {
     94                        $dynamic[ '/(?<=\A|' . $spaces . ')\'(\d[\d\.\,]*)\'/' ] = $opening_single_quote . '$1' . $closing_single_quote;
     95                }
     96
    8997                // '99 '99s '99's (apostrophe)
    9098                if ( "'" !== $apos ) {
    9199                        $dynamic[ '/\'(?=\d)/' ] = $apos;
  • tests/phpunit/tests/formatting/WPTexturize.php

     
    154154        function test_wptexturize_quotes_around_numbers() {
    155155                $this->assertEquals('&#8220;12345&#8221;', wptexturize('"12345"'));
    156156                $this->assertEquals('&#8216;12345&#8217;', wptexturize('\'12345\''));
    157                 $this->assertEquals('&#8220;a 9&#8242; plus a &#8216;9&#8217;, maybe a 9&#8242; &#8216;9&#8217; &#8221;', wptexturize('"a 9\' plus a \'9\', maybe a 9\' \'9\' "'));
    158                 $this->assertEquals('<p>&#8216;99<br />&#8216;123&#8217;<br />&#8217;tis<br />&#8216;s&#8217;</p>', wptexturize('<p>\'99<br />\'123\'<br />\'tis<br />\'s\'</p>'));
     157                $this->assertEquals('&#8220;a 9&#8242; plus a &#8216;9&#8217;, maybe a 9&#8242; &#8216;9&#8217;&#8221;', wptexturize('"a 9\' plus a \'9\', maybe a 9\' \'9\'"'));
     158                $this->assertEquals('<p>&#8217;99<br />&#8216;123&#8217;<br />&#8217;tis<br />&#8216;s&#8217;</p>', wptexturize('<p>\'99<br />\'123\'<br />\'tis<br />\'s\'</p>'));
    159159        }
    160160
    161161        /**
     
    305305                                "word &#8217;99&#8217;s word",
    306306                        ),
    307307                        array(
    308                                 "word '99's word", // Due to the logic error, second apos becomes a prime.  See ticket #22823
    309                                 "word &#8217;99&#8242;s word",
    310                         ),
    311                         array(
    312                                 "word '99'samsonite",
    313                                 "word &#8217;99&#8242;samsonite",
    314                         ),
    315                         array(
    316308                                "according to our source, '33% of all students scored less than 50' on the test.", // Apostrophes and primes have priority over quotes
    317309                                "according to our source, &#8217;33% of all students scored less than 50&#8242; on the test.",
    318310                        ),
    319                         array(
    320                                 "word '99' word", // See ticket #8775
    321                                 "word &#8217;99&#8242; word",
    322                         ),
    323311                );
    324312        }
    325313
     
    994982                        ),
    995983                );
    996984        }
     985
     986        /**
     987         * Numbers inside of matching quotes get curly quotes instead of apostrophes and primes.
     988         *
     989         * @ticket 8775
     990         * @dataProvider data_quoted_numbers
     991         */
     992        function test_quoted_numbers( $input, $output ) {
     993                return $this->assertEquals( $output, wptexturize( $input ) );
     994        }
     995
     996        function data_quoted_numbers() {
     997                return array(
     998                        array(
     999                                'word "42.00" word',
     1000                                'word &#8220;42.00&#8221; word',
     1001                        ),
     1002                        array(
     1003                                'word "42.00"word',
     1004                                'word &#8220;42.00&#8221;word',
     1005                        ),
     1006                        array(
     1007                                "word '42.00' word",
     1008                                "word &#8216;42.00&#8217; word",
     1009                        ),
     1010                        array(
     1011                                "word '42.00'word",
     1012                                "word &#8216;42.00&#8217;word",
     1013                        ),
     1014                        array(
     1015                                'word "42" word',
     1016                                'word &#8220;42&#8221; word',
     1017                        ),
     1018                        array(
     1019                                'word "42,00" word',
     1020                                'word &#8220;42,00&#8221; word',
     1021                        ),
     1022                        array(
     1023                                'word "4,242.00" word',
     1024                                'word &#8220;4,242.00&#8221; word',
     1025                        ),
     1026                        array(
     1027                                "word '99's word", // Is this correct?
     1028                                "word &#8216;99&#8217;s word",
     1029                        ),
     1030                        array(
     1031                                "word '99'samsonite",
     1032                                "word &#8216;99&#8217;samsonite",
     1033                        ),
     1034                );
     1035        }
     1036
    9971037}