summaryrefslogtreecommitdiffstats
path: root/system
diff options
context:
space:
mode:
Diffstat (limited to 'system')
-rw-r--r--system/libraries/Typography.php37
1 files changed, 24 insertions, 13 deletions
diff --git a/system/libraries/Typography.php b/system/libraries/Typography.php
index 808a76953..27fa42192 100644
--- a/system/libraries/Typography.php
+++ b/system/libraries/Typography.php
@@ -235,26 +235,37 @@ class CI_Typography {
if ( ! isset($table))
{
- $table = array(
+ $table = array(
// nested smart quotes, opening and closing
// note that rules for grammar (English) allow only for two levels deep
// and that single quotes are _supposed_ to always be on the outside
// but we'll accommodate both
- '/(^|\W|\s)\'"/' => '$1‘“',
- '/\'"(\s|\W|$)/' => '’”$1',
- '/(^|\W|\s)"\'/' => '$1“‘',
- '/"\'(\s|\W|$)/' => '”’$1',
+ // Note that in all cases, whitespace is the primary determining factor
+ // on which direction to curl, with non-word characters like punctuation
+ // being a secondary factor only after whitespace is addressed.
+ '/\'"(\s|$)/' => '’”$1',
+ '/(^|\s)\'"/' => '$1‘“',
+ '/\'"(\W)/' => '’”$1',
+ '/(\W)\'"/' => '$1‘“',
+ '/"\'(\s|$)/' => '”’$1',
+ '/(^|\s)"\'/' => '$1“‘',
+ '/"\'(\W)/' => '”’$1',
+ '/(\W)"\'/' => '$1“‘',
// single quote smart quotes
- '/(^|\W|\s)\'/' => '$1‘',
- '/\'(\s|\W|$)/' => '’$1',
+ '/\'(\s|$)/' => '’$1',
+ '/(^|\s)\'/' => '$1‘',
+ '/\'(\W)/' => '’$1',
+ '/(\W)\'/' => '$1‘',
// double quote smart quotes
- '/(^|\W|\s)"/' => '$1“',
- '/"(\s|\W|$)/' => '”$1',
-
+ '/"(\s|$)/' => '”$1',
+ '/(^|\s)"/' => '$1“',
+ '/"(\W)/' => '”$1',
+ '/(\W)"/' => '$1“',
+
// apostrophes
- "/(\w)'(\w)/" => '$1’$2',
+ "/(\w)'(\w)/" => '$1’$2',
// Em dash and ellipses dots
'/\s?\-\-\s?/' => '—',
@@ -265,8 +276,8 @@ class CI_Typography {
// ampersands, if not a character entity
'/&(?!#?[a-zA-Z0-9]{2,};)/' => '&'
- );
- }
+ );
+ }
return preg_replace(array_keys($table), $table, $str);
}