@@ -16,7 +16,7 @@ module Text.Pandoc.Writers.RTF ( writeRTF
1616import Control.Monad.Except (catchError, throwError)
1717import Control.Monad
1818import qualified Data.ByteString as B
19−import Data.Char (chr, isDigit, ord)
19+import Data.Char (chr, isDigit, ord, isAlphaNum)
2020import qualified Data.Map as M
2121import Data.Text (Text)
2222import qualified Data.Text as T
@@ -137,15 +137,21 @@ handleUnicode = T.concatMap $ \c ->
137137
138138-- | Escape special characters.
139139escapeSpecial :: Text -> Text
140−escapeSpecial = escapeStringUsing $
141− [ ('\t',"\\tab ")
142− , ('\8216',"\\u8216'")
143− , ('\8217',"\\u8217'")
144− , ('\8220',"\\u8220\"")
145− , ('\8221',"\\u8221\"")
146− , ('\8211',"\\u8211-")
147− , ('\8212',"\\u8212-")
148− ] <> backslashEscapes "{\\}"
140+escapeSpecial t
141+ | T.all isAlphaNum t = t
142+ | otherwise = T.concatMap escChar t
143+ where
144+ escChar '\t' = "\\tab "
145+ escChar '\8216' = "\\u8216'"
146+ escChar '\8217' = "\\u8217'"
147+ escChar '\8220' = "\\u8220\""
148+ escChar '\8221' = "\\u8221\""
149+ escChar '\8211' = "\\u8211-"
150+ escChar '\8212' = "\\u8212-"
151+ escChar '{' = "\\{"
152+ escChar '}' = "\\}"
153+ escChar '\\' = "\\\\"
154+ escChar c = T.singleton c
149155
150156-- | Escape strings as needed for rich text format.
151157stringToRTF :: Text -> Text