IO.hs revision 98890889ffb2e8f6f722b00e265a211f13b5a861
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias{-# LANGUAGE CPP #-}
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias{- |
658187feb755694eb5ff29561bda7109c22c743cAlexis TsogiasModule : $Header$
658187feb755694eb5ff29561bda7109c22c743cAlexis TsogiasDescription : wrapper module for changed IO handling since ghc-6.12.1
658187feb755694eb5ff29561bda7109c22c743cAlexis TsogiasCopyright : (c) Christian Maeder DFKI GmbH 2010
658187feb755694eb5ff29561bda7109c22c743cAlexis TsogiasLicense : GPLv2 or higher, see LICENSE.txt
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias
658187feb755694eb5ff29561bda7109c22c743cAlexis TsogiasMaintainer : Christian.Maeder@dfki.de
658187feb755694eb5ff29561bda7109c22c743cAlexis TsogiasStability : provisional
658187feb755694eb5ff29561bda7109c22c743cAlexis TsogiasPortability : portable
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogiasreading and writing files changed between ghc-6.10.4 and ghc-6.12.1 from
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogiaslatin1 to utf8.
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias
658187feb755694eb5ff29561bda7109c22c743cAlexis TsogiasThis module allows to continue reading and writing latin1 (HetCASL) files.
658187feb755694eb5ff29561bda7109c22c743cAlexis TsogiasHowever, this module does not support to write utf8 files with ghc-6.10.4 or
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogiasearlier versions.
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias
658187feb755694eb5ff29561bda7109c22c743cAlexis TsogiasThe encoding only effects the contents. The encoding of file names is always
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogiasutf8.
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias-}
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogiasmodule Common.IO
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias ( Enc (..)
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias , readEncFile
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias , writeEncFile
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias , setStdEnc
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias ) where
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogiasimport System.IO
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogiasdata Enc = Latin1 | Utf8
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias
658187feb755694eb5ff29561bda7109c22c743cAlexis TsogiasreadEncFile :: Enc -> String -> IO String
658187feb755694eb5ff29561bda7109c22c743cAlexis TsogiaswriteEncFile :: Enc -> String -> String -> IO ()
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias-- | set encoding of stdin and stdout
658187feb755694eb5ff29561bda7109c22c743cAlexis TsogiassetStdEnc :: Enc -> IO ()
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias#if __GLASGOW_HASKELL__ < 612
658187feb755694eb5ff29561bda7109c22c743cAlexis TsogiasreadEncFile _ = readFile
658187feb755694eb5ff29561bda7109c22c743cAlexis TsogiaswriteEncFile _ = writeFile
658187feb755694eb5ff29561bda7109c22c743cAlexis TsogiassetStdEnc _ = return ()
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias#else
658187feb755694eb5ff29561bda7109c22c743cAlexis TsogiasreadEncFile c f = case c of
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias Utf8 -> readFile f
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias Latin1 -> do
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias hdl <- openFile f ReadMode
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias hSetEncoding hdl latin1
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias hGetContents hdl
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias
658187feb755694eb5ff29561bda7109c22c743cAlexis TsogiaswriteEncFile c f txt = case c of
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias Utf8 -> writeFile f txt
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias Latin1 -> withFile f WriteMode $ \ hdl -> do
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias hSetEncoding hdl latin1
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias hPutStr hdl txt
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias
658187feb755694eb5ff29561bda7109c22c743cAlexis TsogiassetStdEnc c = case c of
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias Utf8 -> return ()
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias Latin1 -> do
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias hSetEncoding stdin latin1
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias hSetEncoding stdout latin1
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias#endif
658187feb755694eb5ff29561bda7109c22c743cAlexis Tsogias