diff options
author | John MacFarlane <jgm@berkeley.edu> | 2012-06-22 21:24:02 +0200 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2012-06-24 10:58:15 +0200 |
commit | cc39c313c5eeedf8bc1693e0d80a510891a7fc4d (patch) | |
tree | 41a2a5bd8f2b14700fc0c9365690afa34572a1c5 /src/pandoc.hs | |
parent | c24b7991aa48c8628308ffddd22cee23e3126926 (diff) |
Don't encode/decode file paths if base >= 4.5.
Prior to base 4.5 (and perhaps earlier - check), filepaths and command
line arguments were treated as unencoded lists of bytes, not unicode
strings, so we had to work around that by encoding and decoding
them. This commit adds CPP checks for base 4.5 that disable the
encoding/decoding.
Fixes a bug with multilingual filenames when pandoc was compiled
with ghc 7.4. Closes #540.
Diffstat (limited to 'src/pandoc.hs')
-rw-r--r-- | src/pandoc.hs | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/pandoc.hs b/src/pandoc.hs index 34d136aa8..7e9646c94 100644 --- a/src/pandoc.hs +++ b/src/pandoc.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} {- Copyright (C) 2006-2012 John MacFarlane <jgm@berkeley.edu> @@ -56,8 +57,21 @@ import Network.HTTP (simpleHTTP, mkRequest, getResponseBody, RequestMethod(..)) import Network.URI (parseURI, isURI, URI(..)) import qualified Data.ByteString.Lazy as B import Data.ByteString.Lazy.UTF8 (toString ) -import Codec.Binary.UTF8.String (decodeString, encodeString) import Text.CSL.Reference (Reference(..)) +#if MIN_VERSION_base(4,5,0) +#else +import Codec.Binary.UTF8.String (decodeString, encodeString) +#endif + +encodePath, decodeArg :: FilePath -> FilePath +#if MIN_VERSION_base(4,5,0) +encodePath = id +decodeArg = id +#else +encodePath = encodeString +decodeArg = decodeString +#endif + copyrightMessage :: String copyrightMessage = "\nCopyright (C) 2006-2012 John MacFarlane\n" ++ @@ -745,7 +759,7 @@ defaultWriterName x = main :: IO () main = do - rawArgs <- liftM (map decodeString) getArgs + rawArgs <- liftM (map decodeArg) getArgs prg <- getProgName let compatMode = (prg == "hsmarkdown") @@ -1023,7 +1037,7 @@ main = do else return doc1 let writeBinary :: B.ByteString -> IO () - writeBinary = B.writeFile (encodeString outputFile) + writeBinary = B.writeFile (encodePath outputFile) let writerFn :: FilePath -> String -> IO () writerFn "-" = UTF8.putStr |