@@ -55,19 +55,26 @@ stringToHtml str = escapePreservingRegex stringToHtmlString (mkRegex "\"|(&[[:al
5555stringToSmartHtml :: String -> String
5656stringToSmartHtml =
5757 let escapeDoubleQuotes =
58− gsub "(\"|"|'')" "”" . -- rest are right quotes
59− gsub "([[:space:]])(\"|")" "\\1“" . -- never right quo after space
60− gsub "(\"|"|``)('|`|‘)([^[:punct:][:space:]])" "“‘\\3" . -- "'word left
61− gsub "(\"|"|``)([^[:punct:][:space:]])" "“\\2" -- "word left
58+ gsub "(\"|")" "”" . -- rest are right quotes
59+ gsub "(\"|")(&r[sd]quo;)" "”\\2" . -- never left quo before right quo
60+ gsub "(&l[sd]quo;)(\"|")" "\\2“" . -- never right quo after left quo
61+ gsub "([ \t])(\"|")" "\\1“" . -- never right quo after space
62+ gsub "(\"|")([^,.;:!?^) \t-])" "“\\2" . -- "word left
63+ gsub "(\"|")('|`|‘)" "”’" . -- right if it got through last filter
64+ gsub "(\"|")('|`|‘)([^,.;:!?^) \t-])" "“‘\\3" . -- "'word left
65+ gsub "``" "“" .
66+ gsub "''" "”"
6267 escapeSingleQuotes =
6368 gsub "'" "’" . -- otherwise right
64− gsub "([[:space:]])'" "\\1‘" . -- never right quo after space
69+ gsub "'(&r[sd]quo;)" "’\\1" . -- never left quo before right quo
70+ gsub "(&l[sd]quo;)'" "\\1‘" . -- never right quo after left quo
71+ gsub "([ \t])'" "\\1‘" . -- never right quo after space
6572 gsub "`" "‘" . -- ` is left
66− gsub "([^[:punct:][:space:]])'" "\\1’" . -- word' right
73+ gsub "([^,.;:!?^) \t-])'" "\\1’" . -- word' right
74+ gsub "^('|`)([^,.;:!?^) \t-])" "‘\\2" . -- 'word left
6775 gsub "('|`)(\"|"|“|``)" "‘“" . -- '"word left
68− gsub "^('|`)([^[:punct:][:space:]])" "‘\\2" . -- 'word left
69− gsub "([^[:punct:][:space:]])'(s|S)" "\\1’\\2" . -- possessive
70− gsub "([[:space:]])'([^[:punct:][:space:]])" "\\1‘\\2" . -- 'word left
76+ gsub "([^,.;:!?^) \t-])'(s|S)" "\\1’\\2" . -- possessive
77+ gsub "([[:space:]])'([^,.;:!?^) \t-])" "\\1‘\\2" . -- 'word left
7178 gsub "'([0-9][0-9](s|S))" "’\\1" -- '80s - decade abbrevs.
7279 escapeDashes = gsub " ?-- ?" "—" .
7380 gsub " ?--- ?" "—" .