Make WordPress Core

Ticket #27426: miqro-27426.patch

File miqro-27426.patch, 6.5 KB (added by miqrogroove, 11 years ago)
  • src/wp-includes/formatting.php

     
    2424 * @uses $wp_cockneyreplace Array of formatted entities for certain common phrases
    2525 *
    2626 * @param string $text The text to be formatted
     27 * @param bool $reset Set to true for unit testing. Translated patterns will reset.
    2728 * @return string The string replaced with html entities
    2829 */
    29 function wptexturize($text) {
     30function wptexturize($text, $reset = false) {
    3031        global $wp_cockneyreplace;
    3132        static $static_characters, $static_replacements, $dynamic_characters, $dynamic_replacements,
    3233                $default_no_texturize_tags, $default_no_texturize_shortcodes, $run_texturize = true;
    3334
    34         if ( false === $run_texturize ) {
     35        // If there's nothing to do, just stop.
     36        if ( empty( $text ) || false === $run_texturize ) {
    3537                return $text;
    3638        }
    3739
    38         // No need to set up these static variables more than once
    39         if ( ! isset( $static_characters ) ) {
     40        // Set up static variables. Run once only.
     41        if ( $reset || ! isset( $static_characters ) ) {
    4042                /**
    4143                 * Filter whether to skip running `wptexturize()`.
    4244                 *
     
    118120                        $dynamic[ '/(?<=\A|[([{<"\-]|' . $spaces . ')\'/' ] = $opening_single_quote;
    119121                }
    120122
    121                 // Apostrophe in a word.  No spaces or double apostrophes.
     123                // Apostrophe in a word.  No spaces, periods, or double apostrophes.
    122124                if ( "'" != $apos ) {
    123                         $dynamic[ '/(?<!' . $spaces . ')\'(?!\Z|\'|' . $spaces . ')/' ] = $apos;
     125                        $dynamic[ '/(?<!' . $spaces . ')\'(?!\Z|\.|\'|' . $spaces . ')/' ] = $apos;
    124126                }
    125127
    126128                // 9" (double prime)
     
    158160                $dynamic_replacements = array_values( $dynamic );
    159161        }
    160162
    161         // If there's nothing to do, just stop.
    162         if ( empty( $text ) ) {
    163                 return $text;
    164         }
    165 
    166163        // Transform into regexp sub-expression used in _wptexturize_pushpop_element
    167164        // Must do this every time in case plugins use these filters in a context sensitive manner
    168165        /**
  • tests/phpunit/tests/formatting/WPTexturize.php

     
    12791279                        ),
    12801280                );
    12811281        }
     1282
     1283        /**
     1284         * Make sure translation actually works.
     1285         *
     1286         * Also make sure apostrophes and closing quotes aren't being confused by default.
     1287         *
     1288         * @ticket 12690
     1289         * @dataProvider data_tag_avoidance
     1290         */
     1291        function test_translate( $input, $output ) {
     1292                add_filter( 'gettext_with_context', array( 'Tests_Formatting_WPTexturize', 'filter_translate' ), 10, 4 );
     1293
     1294                $result = wptexturize( $input, true );
     1295
     1296                remove_filter( 'gettext_with_context', array( 'Tests_Formatting_WPTexturize', 'filter_translate' ), 10, 4 );
     1297                wptexturize( 'reset', true );
     1298
     1299                return $this->assertEquals( $output, $result );
     1300        }
     1301
     1302        function filter_translate($translations, $text, $context, $domain) {
     1303                switch ($text) {
     1304                        case '&#8211;' : return '!endash!';
     1305                        case '&#8212;' : return '!emdash!';
     1306                        case '&#8216;' : return '!openq1!';
     1307                        case '&#8217;' :
     1308                                if ( 'apostrophe' == $context ) {
     1309                                        return '!apos!';
     1310                                } else {
     1311                                        return '!closeq1!';
     1312                                }
     1313                        case '&#8220;' : return '!openq2!';
     1314                        case '&#8221;' : return '!closeq2!';
     1315                        case '&#8242;' : return '!prime1!';
     1316                        case '&#8243;' : return '!prime2!';
     1317                        default : return $translations;
     1318                }
     1319        }
     1320
     1321        function data_translate() {
     1322                return array(
     1323                        array(
     1324                                "word '99 word",
     1325                                "word !apos!99 word",
     1326                        ),
     1327                        array(
     1328                                "word'99 word",
     1329                                "word!apos!99 word",
     1330                        ),
     1331                        array(
     1332                                "word 'test sentence' word",
     1333                                "word !openq1!test sentence!closeq1! word",
     1334                        ),
     1335                        array(
     1336                                "'test sentence'",
     1337                                "!openq1!test sentence!closeq1!",
     1338                        ),
     1339                        array(
     1340                                'word "test sentence" word',
     1341                                'word !openq2!test sentence!closeq2! word',
     1342                        ),
     1343                        array(
     1344                                '"test sentence"',
     1345                                '!openq2!test sentence!closeq2!',
     1346                        ),
     1347                        array(
     1348                                "word 'word word",
     1349                                "word !openq1!word word",
     1350                        ),
     1351                        array(
     1352                                "word ('word word",
     1353                                "word (!openq1!word word",
     1354                        ),
     1355                        array(
     1356                                "word ['word word",
     1357                                "word [!openq1!word word",
     1358                        ),
     1359                        array(
     1360                                'word 99" word',
     1361                                'word 99!prime2! word',
     1362                        ),
     1363                        array(
     1364                                'word 99"word',
     1365                                'word 99!prime2!word',
     1366                        ),
     1367                        array(
     1368                                'word99" word',
     1369                                'word99!prime2! word',
     1370                        ),
     1371                        array(
     1372                                'word99"word',
     1373                                'word99!prime2!word',
     1374                        ),
     1375                        array(
     1376                                "word 99' word",
     1377                                "word 99!prime1! word",
     1378                        ),
     1379                        array(
     1380                                "word99' word",
     1381                                "word99!prime1! word",
     1382                        ),
     1383                        array(
     1384                                "word word's word",
     1385                                "word word!apos!s word",
     1386                        ),
     1387                        array(
     1388                                "word word'. word",
     1389                                "word word!closeq1!. word",
     1390                        ),
     1391                        array(
     1392                                "word ]'. word",
     1393                                "word ]!closeq1!. word",
     1394                        ),
     1395                        array(
     1396                                'word "word word',
     1397                                'word !openq2!word word',
     1398                        ),
     1399                        array(
     1400                                'word ("word word',
     1401                                'word (!openq2!word word',
     1402                        ),
     1403                        array(
     1404                                'word ["word word',
     1405                                'word [!openq2!word word',
     1406                        ),
     1407                        array(
     1408                                'word word" word',
     1409                                'word word!closeq2! word',
     1410                        ),
     1411                        array(
     1412                                'word word") word',
     1413                                'word word!closeq2!) word',
     1414                        ),
     1415                        array(
     1416                                'word word"] word',
     1417                                'word word!closeq2!] word',
     1418                        ),
     1419                        array(
     1420                                'word word"',
     1421                                'word word!closeq2!',
     1422                        ),
     1423                        array(
     1424                                'word word"word',
     1425                                'word word!closeq2!word',
     1426                        ),
     1427                        array(
     1428                                'test sentence".',
     1429                                'test sentence!closeq2!.',
     1430                        ),
     1431                        array(
     1432                                'test sentence."',
     1433                                'test sentence.!closeq2!',
     1434                        ),
     1435                        array(
     1436                                'test sentence." word',
     1437                                'test sentence.!closeq2! word',
     1438                        ),
     1439                        array(
     1440                                "word word' word",
     1441                                "word word!closeq1! word",
     1442                        ),
     1443                        array(
     1444                                "word word'. word",
     1445                                "word word!closeq1!. word",
     1446                        ),
     1447                        array(
     1448                                "word word'.word",
     1449                                "word word!closeq1!.word",
     1450                        ),
     1451                        array(
     1452                                "word word'",
     1453                                "word word!closeq1!",
     1454                        ),
     1455                        array(
     1456                                "test sentence'.",
     1457                                "test sentence!closeq1!.",
     1458                        ),
     1459                        array(
     1460                                "test sentence.'",
     1461                                "test sentence.!closeq1!",
     1462                        ),
     1463                        array(
     1464                                "test sentence'. word",
     1465                                "test sentence!closeq1!. word",
     1466                        ),
     1467                        array(
     1468                                "test sentence.' word",
     1469                                "test sentence.!closeq1! word",
     1470                        ),
     1471                        array(
     1472                                "word 'tain't word",
     1473                                "word !apos!tain!apos!t word",
     1474                        ),
     1475                        array(
     1476                                "word 'twere word",
     1477                                "word !apos!twere word",
     1478                        ),
     1479                        array(
     1480                                'word "42.00" word',
     1481                                'word !openq2!42.00!closeq2! word',
     1482                        ),
     1483                        array(
     1484                                "word '42.00' word",
     1485                                "word !openq1!42.00!closeq1! word",
     1486                        ),
     1487                );
     1488        }
    12821489}