diff options
author | Derek Jones <derek.jones@ellislab.com> | 2008-11-18 16:24:20 +0100 |
---|---|---|
committer | Derek Jones <derek.jones@ellislab.com> | 2008-11-18 16:24:20 +0100 |
commit | b859df894145b8a41609958917cf394fc46b8b10 (patch) | |
tree | 74a9b71c715abe929f0e9370c2a372ab81e105db /system/libraries | |
parent | c630bcfca816f625b8cd70a1a7467a77c8065bbd (diff) |
Smart curly quotes! Spaces trump all, then worry about \W, you can't convert them all at once or either your opening or your ending (whichever you process first) is going to be too greedy.
Diffstat (limited to 'system/libraries')
-rw-r--r-- | system/libraries/Typography.php | 37 |
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); } |