aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2018-04-26 09:40:27 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2018-04-26 12:23:25 -0700
commit3ed4861c6290ab51cc45ba585237b33d96a0c03c (patch)
treec9374169241fbfa821ef6ca54e759f6294807a43 /src
parenteef1c211f58f0a2ffc6c500bd2158569b83fca1f (diff)
downloadpandoc-3ed4861c6290ab51cc45ba585237b33d96a0c03c.tar.gz
Make `--ascii` work with `ms` and `man` output.
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/App.hs24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/Text/Pandoc/App.hs b/src/Text/Pandoc/App.hs
index e9778fffc..b5683ca87 100644
--- a/src/Text/Pandoc/App.hs
+++ b/src/Text/Pandoc/App.hs
@@ -52,7 +52,7 @@ import Data.Aeson (defaultOptions)
import Data.Aeson.TH (deriveJSON)
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as B
-import Data.Char (toLower, toUpper)
+import Data.Char (toLower, toUpper, isAscii, ord)
import Data.List (find, intercalate, isPrefixOf, isSuffixOf, sort)
import qualified Data.Map as M
import Data.Maybe (fromMaybe, isJust, isNothing)
@@ -513,16 +513,18 @@ convertWithOpts opts = do
let htmlFormat = format `elem`
["html","html4","html5","s5","slidy",
"slideous","dzslides","revealjs"]
- handleEntities = if (htmlFormat ||
- format == "docbook4" ||
- format == "docbook5" ||
- format == "docbook") && optAscii opts
- then toEntities
- else id
+ escape
+ | optAscii opts
+ , htmlFormat || format == "docbook4" ||
+ format == "docbook5" || format == "docbook" =
+ toEntities
+ | optAscii opts
+ , format == "ms" || format == "man" = groffEscape
+ | otherwise = id
addNl = if standalone
then id
else (<> T.singleton '\n')
- output <- (addNl . handleEntities) <$> f writerOptions doc
+ output <- (addNl . escape) <$> f writerOptions doc
writerFn eol outputFile =<<
if optSelfContained opts && htmlFormat
-- TODO not maximally efficient; change type
@@ -530,6 +532,12 @@ convertWithOpts opts = do
then T.pack <$> makeSelfContained (T.unpack output)
else return output
+groffEscape :: Text -> Text
+groffEscape = T.concatMap toUchar
+ where toUchar c
+ | isAscii c = T.singleton c
+ | otherwise = T.pack $ printf "\\[u%04X]" (ord c)
+
type Transform = Pandoc -> Pandoc
isTextFormat :: String -> Bool