d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder{-# LANGUAGE CPP #-}
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederDescription : wrapper module for changed IO handling since ghc-6.12.1
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederCopyright : (c) Christian Maeder DFKI GmbH 2010
98890889ffb2e8f6f722b00e265a211f13b5a861Corneliu-Claudiu ProdescuLicense : GPLv2 or higher, see LICENSE.txt
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederMaintainer : Christian.Maeder@dfki.de
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederStability : provisional
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederPortability : portable
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maederreading and writing files changed between ghc-6.10.4 and ghc-6.12.1 from
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maederlatin1 to utf8.
46c318705d1532d90572abf9ee869016583d985bTill MossakowskiThis module allows to continue reading and writing latin1 (DOL) files.
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederHowever, this module does not support to write utf8 files with ghc-6.10.4 or
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maederearlier versions.
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederThe encoding only effects the contents. The encoding of file names is always
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder , readEncFile
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder , writeEncFile
9db2bd64088c7e5935b94dd9c3ad5cdc24f48814Christian Maeder , catchIOException
9db2bd64088c7e5935b94dd9c3ad5cdc24f48814Christian Maederimport Control.Exception as Exception
9db2bd64088c7e5935b94dd9c3ad5cdc24f48814Christian MaedercatchIOException :: a -> IO a -> IO a
9db2bd64088c7e5935b94dd9c3ad5cdc24f48814Christian MaedercatchIOException d a = catchJust (\ e ->
9db2bd64088c7e5935b94dd9c3ad5cdc24f48814Christian Maeder fromException e :: Maybe IOException) a . const $ return d
96ae1a1d2197d0e0d5b80da2474b64c456feb1b0Christian Maederdata Enc = Latin1 | Utf8 deriving Show
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederreadEncFile :: Enc -> String -> IO String
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederwriteEncFile :: Enc -> String -> String -> IO ()
b2a02ef0183a671777294e069307bba893ca3ebeChristian Maeder-- | set encoding of stdin and stdout
b2a02ef0183a671777294e069307bba893ca3ebeChristian MaedersetStdEnc :: Enc -> IO ()
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder#if __GLASGOW_HASKELL__ < 612
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederreadEncFile _ = readFile
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederwriteEncFile _ = writeFile
b2a02ef0183a671777294e069307bba893ca3ebeChristian MaedersetStdEnc _ = return ()
605065f212e589cd3ea24be7db99a71aeb858215Christian MaederreadEncFile c f = do
605065f212e589cd3ea24be7db99a71aeb858215Christian Maeder hdl <- openFile f ReadMode
605065f212e589cd3ea24be7db99a71aeb858215Christian Maeder hSetEncoding hdl $ case c of
605065f212e589cd3ea24be7db99a71aeb858215Christian Maeder Latin1 -> latin1
605065f212e589cd3ea24be7db99a71aeb858215Christian Maeder hGetContents hdl
605065f212e589cd3ea24be7db99a71aeb858215Christian MaederwriteEncFile c f txt = withFile f WriteMode $ \ hdl -> do
605065f212e589cd3ea24be7db99a71aeb858215Christian Maeder hSetEncoding hdl $ case c of
605065f212e589cd3ea24be7db99a71aeb858215Christian Maeder Latin1 -> latin1
605065f212e589cd3ea24be7db99a71aeb858215Christian Maeder hPutStr hdl txt
605065f212e589cd3ea24be7db99a71aeb858215Christian MaedersetStdEnc c = do
605065f212e589cd3ea24be7db99a71aeb858215Christian Maeder hSetEncoding stdin $ case c of
605065f212e589cd3ea24be7db99a71aeb858215Christian Maeder Latin1 -> latin1
605065f212e589cd3ea24be7db99a71aeb858215Christian Maeder hSetEncoding stdout $ case c of
605065f212e589cd3ea24be7db99a71aeb858215Christian Maeder Latin1 -> latin1