{-# LANGUAGE CPP #-}
module System.IO.CodePage.Internal where
import System.IO (TextEncoding, latin1, utf8, utf16le, utf16be, utf32le, utf32be)
#ifdef WINDOWS
import qualified System.Win32.CodePage as Win32 (CodePage)
#else
import Data.Word (Word32)
#endif
type CodePage =
#ifdef WINDOWS
Win32.CodePage
#else
Word32
#endif
cp65001 :: CodePage
cp65001 :: Word32
cp65001 = Word32
65001
cp1200 :: CodePage
cp1200 :: Word32
cp1200 = Word32
1200
cp1201 :: CodePage
cp1201 :: Word32
cp1201 = Word32
1201
cp12000 :: CodePage
cp12000 :: Word32
cp12000 = Word32
12000
cp12001 :: CodePage
cp12001 :: Word32
cp12001 = Word32
12001
cp1252 :: CodePage
cp1252 :: Word32
cp1252 = Word32
1252
data Options = Options
{ Options -> Bool
chatty :: Bool
, Options -> NonWindowsBehavior
nonWindowsBehavior :: NonWindowsBehavior
}
defaultOptions :: Options
defaultOptions :: Options
defaultOptions = Options
{ chatty :: Bool
chatty = Bool
False
, nonWindowsBehavior :: NonWindowsBehavior
nonWindowsBehavior =
(Word32 -> TextEncoding) -> NonWindowsBehavior
nonWindowsFallbackCodePageEncoding Word32 -> TextEncoding
defaultFallbackCodePageEncoding
}
data NonWindowsBehavior
= NonWindowsDoNothing
| NonWindowsFallbackCodePageEncoding (CodePage -> TextEncoding)
nonWindowsDoNothing :: NonWindowsBehavior
nonWindowsDoNothing :: NonWindowsBehavior
nonWindowsDoNothing = NonWindowsBehavior
NonWindowsDoNothing
nonWindowsFallbackCodePageEncoding
:: (CodePage -> TextEncoding) -> NonWindowsBehavior
nonWindowsFallbackCodePageEncoding :: (Word32 -> TextEncoding) -> NonWindowsBehavior
nonWindowsFallbackCodePageEncoding = (Word32 -> TextEncoding) -> NonWindowsBehavior
NonWindowsFallbackCodePageEncoding
defaultFallbackCodePageEncoding :: CodePage -> TextEncoding
defaultFallbackCodePageEncoding :: Word32 -> TextEncoding
defaultFallbackCodePageEncoding Word32
cp
| Word32
cp Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
== Word32
cp65001
= TextEncoding
utf8
| Word32
cp Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
== Word32
cp1200
= TextEncoding
utf16le
| Word32
cp Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
== Word32
cp1201
= TextEncoding
utf16be
| Word32
cp Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
== Word32
cp12000
= TextEncoding
utf32le
| Word32
cp Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
== Word32
cp12001
= TextEncoding
utf32be
| Word32
cp Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
== Word32
cp1252
= TextEncoding
latin1
| Bool
otherwise
= [Char] -> TextEncoding
forall a. HasCallStack => [Char] -> a
error ([Char] -> TextEncoding) -> [Char] -> TextEncoding
forall a b. (a -> b) -> a -> b
$ [Char]
"Don't know fallback text encoding for CP" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Word32 -> [Char]
forall a. Show a => a -> [Char]
show Word32
cp