diff --git a/src/wp-includes/formatting.php b/src/wp-includes/formatting.php index 46922c752a..55321a15c5 100644 --- a/src/wp-includes/formatting.php +++ b/src/wp-includes/formatting.php @@ -127,10 +127,10 @@ function wptexturize( $text, $reset = false ) { // '99' and '99" are ambiguous among other patterns; assume it's an abbreviated year at the end of a quotation. if ( "'" !== $apos || "'" !== $closing_single_quote ) { - $dynamic[ '/\'(\d\d)\'(?=\Z|[.,)}\-\]]|>|' . $spaces . ')/' ] = $apos . '$1' . $closing_single_quote; + $dynamic[ '/\'(\d\d)\'(?=\Z|[.,:;!?)}\-\]]|>|' . $spaces . ')/' ] = $apos . '$1' . $closing_single_quote; } if ( "'" !== $apos || '"' !== $closing_quote ) { - $dynamic[ '/\'(\d\d)"(?=\Z|[.,)}\-\]]|>|' . $spaces . ')/' ] = $apos . '$1' . $closing_quote; + $dynamic[ '/\'(\d\d)"(?=\Z|[.,:;!?)}\-\]]|>|' . $spaces . ')/' ] = $apos . '$1' . $closing_quote; } // '99 '99s '99's (apostrophe) But never '9 or '99% or '999 or '99.0. @@ -150,7 +150,7 @@ function wptexturize( $text, $reset = false ) { // Apostrophe in a word. No spaces, double apostrophes, or other punctuation. if ( "'" !== $apos ) { - $dynamic[ '/(?assertEquals('Class of ’99', wptexturize("Class of '99")); $this->assertEquals('Class of ’99’s', wptexturize("Class of '99's")); $this->assertEquals('‘Class of ’99’', wptexturize("'Class of '99'")); + $this->assertEquals('‘Class of ’99’ ', wptexturize("'Class of '99' ")); + $this->assertEquals('‘Class of ’99’.', wptexturize("'Class of '99'.")); + $this->assertEquals('‘Class of ’99’, she said', wptexturize("'Class of '99', she said")); + $this->assertEquals('‘Class of ’99’:', wptexturize("'Class of '99':")); + $this->assertEquals('‘Class of ’99’;', wptexturize("'Class of '99';")); + $this->assertEquals('‘Class of ’99’!', wptexturize("'Class of '99'!")); + $this->assertEquals('‘Class of ’99’?', wptexturize("'Class of '99'?")); $this->assertEquals('‘Class of ’99’s’', wptexturize("'Class of '99's'")); $this->assertEquals('‘Class of ’99’s’', wptexturize("'Class of '99’s'")); //$this->assertEquals('“Class of 99”', wptexturize("\"Class of 99\"")); $this->assertEquals('“Class of ’99”', wptexturize("\"Class of '99\"")); $this->assertEquals('{“Class of ’99”}', wptexturize("{\"Class of '99\"}")); $this->assertEquals(' “Class of ’99” ', wptexturize(" \"Class of '99\" ")); + $this->assertEquals(' “Class of ’99”.', wptexturize(" \"Class of '99\".")); + $this->assertEquals(' “Class of ’99”, she said', wptexturize(" \"Class of '99\", she said")); + $this->assertEquals(' “Class of ’99”:', wptexturize(" \"Class of '99\":")); + $this->assertEquals(' “Class of ’99”;', wptexturize(" \"Class of '99\";")); + $this->assertEquals(' “Class of ’99”!', wptexturize(" \"Class of '99\"!")); + $this->assertEquals(' “Class of ’99”?', wptexturize(" \"Class of '99\"?")); $this->assertEquals('}”Class of ’99″{', wptexturize("}\"Class of '99\"{")); // Not a quotation, may be between two other quotations. } @@ -701,6 +714,26 @@ class Tests_Formatting_WPTexturize extends WP_UnitTestCase { 'test sentence".', 'test sentence”.', ), + array( + 'test sentence",', + 'test sentence”,', + ), + array( + 'test sentence":', + 'test sentence”:', + ), + array( + 'test sentence";', + 'test sentence”;', + ), + array( + 'test sentence"!', + 'test sentence”!', + ), + array( + 'test sentence"?', + 'test sentence”?', + ), array( 'test sentence."', 'test sentence.”', @@ -746,6 +779,22 @@ class Tests_Formatting_WPTexturize extends WP_UnitTestCase { "word word', she said", "word word’, she said", ), + array( + "word word': word", + "word word’: word", + ), + array( + "word word'; word", + "word word’; word", + ), + array( + "word word'! word", + "word word’! word", + ), + array( + "word word'? word", + "word word’? word", + ), array( "word word'- word", "word word’- word",