RST writer: don't backslash-escape word-internal punctuation.

Closes #3978.
This commit is contained in:
John MacFarlane
2017-10-16 20:39:19 -07:00
parent d8804f4747
commit cba18c19a6
3 changed files with 25 additions and 16 deletions
+18 -15
View File
@@ -169,21 +169,24 @@ pictToRST (label, (attr, src, _, mbtarget)) = do
-- | Escape special characters for RST.
escapeString :: WriterOptions -> String -> String
escapeString _ [] = []
escapeString opts (c:cs) =
case c of
_ | c `elem` ['\\','`','*','_','|'] -> '\\':c:escapeString opts cs
'\'' | isEnabled Ext_smart opts -> '\\':'\'':escapeString opts cs
'"' | isEnabled Ext_smart opts -> '\\':'"':escapeString opts cs
'-' | isEnabled Ext_smart opts ->
case cs of
'-':_ -> '\\':'-':escapeString opts cs
_ -> '-':escapeString opts cs
'.' | isEnabled Ext_smart opts ->
case cs of
'.':'.':rest -> '\\':'.':'.':'.':escapeString opts rest
_ -> '.':escapeString opts cs
_ -> c : escapeString opts cs
escapeString = escapeString' True
where
escapeString' _ _ [] = []
escapeString' firstChar opts (c:cs) =
case c of
_ | c `elem` ['\\','`','*','_','|'] &&
(firstChar || null cs) -> '\\':c:escapeString' False opts cs
'\'' | isEnabled Ext_smart opts -> '\\':'\'':escapeString' False opts cs
'"' | isEnabled Ext_smart opts -> '\\':'"':escapeString' False opts cs
'-' | isEnabled Ext_smart opts ->
case cs of
'-':_ -> '\\':'-':escapeString' False opts cs
_ -> '-':escapeString' False opts cs
'.' | isEnabled Ext_smart opts ->
case cs of
'.':'.':rest -> '\\':'.':'.':'.':escapeString' False opts rest
_ -> '.':escapeString' False opts cs
_ -> c : escapeString' False opts cs
titleToRST :: PandocMonad m => [Inline] -> [Inline] -> RST m Doc
titleToRST [] _ = return empty
+6
View File
@@ -0,0 +1,6 @@
```
% pandoc -t rst
foo_bar*baz
^D
foo_bar*baz
```
+1 -1
View File
@@ -772,7 +772,7 @@ Just a `URL </url/>`__.
`URL and title </url/>`__
`with\_underscore </url/with_underscore>`__
`with_underscore </url/with_underscore>`__
`Email link <mailto:nobody@nowhere.net>`__