IO.hs revision d5a8d891500a642ce629854857fc00b7c21aec47
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder{-# LANGUAGE CPP #-}
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder{- |
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederModule : $Header$
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederDescription : wrapper module for changed IO handling since ghc-6.12.1
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederCopyright : (c) Christian Maeder DFKI GmbH 2010
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederLicense : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederMaintainer : Christian.Maeder@dfki.de
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederStability : provisional
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederPortability : portable
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maederreading and writing files changed between ghc-6.10.4 and ghc-6.12.1 from
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maederlatin1 to utf8.
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederThis module allows to continue reading and writing latin1 (HetCASL) files.
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederHowever, this module does not support to write utf8 files with ghc-6.10.4 or
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maederearlier versions.
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederThe encoding only effects the contents. The encoding of file names is always
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maederutf8.
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder-}
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maedermodule Common.IO
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder ( Enc (..)
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder , readEncFile
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder , writeEncFile
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder ) where
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maederimport System.IO
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maederdata Enc = Latin1 | Utf8
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederreadEncFile :: Enc -> String -> IO String
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederwriteEncFile :: Enc -> String -> String -> IO ()
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder#if __GLASGOW_HASKELL__ < 612
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederreadEncFile _ = readFile
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederwriteEncFile _ = writeFile
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder#else
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederreadEncFile c f = case c of
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder Utf8 -> readFile f
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder Latin1 -> do
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder hdl <- openFile f ReadMode
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder hSetEncoding hdl latin1
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder hGetContents hdl
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederwriteEncFile c f txt = case c of
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder Utf8 -> writeFile f txt
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder Latin1 -> withFile f WriteMode $ \ hdl -> do
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder hSetEncoding hdl latin1
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder hPutStr hdl txt
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder#endif