aboutsummaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/Writers/HTML.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Text/Pandoc/Writers/HTML.hs')
-rw-r--r--src/Text/Pandoc/Writers/HTML.hs25
1 files changed, 16 insertions, 9 deletions
diff --git a/src/Text/Pandoc/Writers/HTML.hs b/src/Text/Pandoc/Writers/HTML.hs
index f0283dd48..1f1258753 100644
--- a/src/Text/Pandoc/Writers/HTML.hs
+++ b/src/Text/Pandoc/Writers/HTML.hs
@@ -55,19 +55,26 @@ stringToHtml str = escapePreservingRegex stringToHtmlString (mkRegex "\"|(&[[:al
stringToSmartHtml :: String -> String
stringToSmartHtml =
let escapeDoubleQuotes =
- gsub "(\"|"|'')" "”" . -- rest are right quotes
- gsub "([[:space:]])(\"|")" "\\1“" . -- never right quo after space
- gsub "(\"|"|``)('|`|‘)([^[:punct:][:space:]])" "“‘\\3" . -- "'word left
- gsub "(\"|"|``)([^[:punct:][:space:]])" "“\\2" -- "word left
+ gsub "(\"|")" "”" . -- rest are right quotes
+ gsub "(\"|")(&r[sd]quo;)" "”\\2" . -- never left quo before right quo
+ gsub "(&l[sd]quo;)(\"|")" "\\2“" . -- never right quo after left quo
+ gsub "([ \t])(\"|")" "\\1“" . -- never right quo after space
+ gsub "(\"|")([^,.;:!?^) \t-])" "“\\2" . -- "word left
+ gsub "(\"|")('|`|‘)" "”’" . -- right if it got through last filter
+ gsub "(\"|")('|`|‘)([^,.;:!?^) \t-])" "“‘\\3" . -- "'word left
+ gsub "``" "“" .
+ gsub "''" "”"
escapeSingleQuotes =
gsub "'" "’" . -- otherwise right
- gsub "([[:space:]])'" "\\1‘" . -- never right quo after space
+ gsub "'(&r[sd]quo;)" "’\\1" . -- never left quo before right quo
+ gsub "(&l[sd]quo;)'" "\\1‘" . -- never right quo after left quo
+ gsub "([ \t])'" "\\1‘" . -- never right quo after space
gsub "`" "‘" . -- ` is left
- gsub "([^[:punct:][:space:]])'" "\\1’" . -- word' right
+ gsub "([^,.;:!?^) \t-])'" "\\1’" . -- word' right
+ gsub "^('|`)([^,.;:!?^) \t-])" "‘\\2" . -- 'word left
gsub "('|`)(\"|"|“|``)" "‘“" . -- '"word left
- gsub "^('|`)([^[:punct:][:space:]])" "‘\\2" . -- 'word left
- gsub "([^[:punct:][:space:]])'(s|S)" "\\1’\\2" . -- possessive
- gsub "([[:space:]])'([^[:punct:][:space:]])" "\\1‘\\2" . -- 'word left
+ gsub "([^,.;:!?^) \t-])'(s|S)" "\\1’\\2" . -- possessive
+ gsub "([[:space:]])'([^,.;:!?^) \t-])" "\\1‘\\2" . -- 'word left
gsub "'([0-9][0-9](s|S))" "’\\1" -- '80s - decade abbrevs.
escapeDashes = gsub " ?-- ?" "—" .
gsub " ?--- ?" "—" .