git.iko.soy/typeable/pandoc
on master help sign in
Avoid a pointless Text -> String conversion on output.
commit87ce1ffbd97f6cb2785f9fbf05f68d3185f50675 authorJohn MacFarlane <jgm@berkeley.edu> dateWed 7 Aug 2019, 09:23 (7 years ago) parentec55382
1 file changed+14−8
src/Text/Pandoc/App.hs+14−8
src/Text/Pandoc/App.hs+14−8
@@ -34,15 +34,16 @@ import Data.Maybe (fromMaybe, isJust, isNothing)
3434import qualified Data.Set as Set
3535import Data.Text (Text)
3636import qualified Data.Text as T
37+import qualified Data.Text.IO as TIO
3738import qualified Data.Text.Lazy as TL
38−import qualified Data.Text.Lazy.Encoding as TE
3939import qualified Data.Text.Encoding.Error as TE
40−import qualified Data.Text.Encoding.Error as TSE
40+import qualified Data.Text.Lazy.Encoding as TLE
4141import Network.URI (URI (..), parseURI)
4242import System.Directory (doesDirectoryExist)
4343import System.Exit (exitSuccess)
4444import System.FilePath
45−import System.IO (nativeNewline, stdout)
45+import System.IO (nativeNewline, stdout, hSetNewlineMode, hSetEncoding,
46+ NewlineMode(..), utf8)
4647import qualified System.IO as IO (Newline (..))
4748import Text.Pandoc
4849import Text.Pandoc.App.FormatHeuristics (formatFromFilePaths)
@@ -295,7 +296,7 @@ convertWithOpts opts = do
295296 case res of
296297 Right pdf -> writeFnBinary outputFile pdf
297298 Left err' -> throwError $ PandocPDFError $
298− TL.unpack (TE.decodeUtf8With TE.lenientDecode err')
299+ TL.unpack (TLE.decodeUtf8With TE.lenientDecode err')
299300
300301 Nothing -> do
301302 let addNl = if standalone
@@ -365,7 +366,7 @@ readSource src = case parseURI src of
365366 else BS.readFile fp
366367 E.catch (return $! UTF8.toText bs)
367368 (\e -> case e of
368− TSE.DecodeError _ (Just w) -> do
369+ TE.DecodeError _ (Just w) -> do
369370 case BS.elemIndex w bs of
370371 Just offset -> E.throwIO $
371372 PandocUTF8DecodingError fp offset w
@@ -384,6 +385,11 @@ writeFnBinary "-" = liftIO . BL.putStr
384385writeFnBinary f = liftIO . BL.writeFile (UTF8.encodePath f)
385386
386387writerFn :: MonadIO m => IO.Newline -> FilePath -> Text -> m ()
387−-- TODO this implementation isn't maximally efficient:
388−writerFn eol "-" = liftIO . UTF8.putStrWith eol . T.unpack
389−writerFn eol f = liftIO . UTF8.writeFileWith eol f . T.unpack
388+writerFn eol "-" t = liftIO $ do
389+ hSetNewlineMode stdout (NewlineMode eol eol)
390+ hSetEncoding stdout utf8
391+ TIO.putStr t
392+writerFn eol f t = liftIO $ do
393+ hSetNewlineMode stdout (NewlineMode eol eol)
394+ hSetEncoding stdout utf8
395+ TIO.writeFile f t