{-# 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 :: CodePage
cp65001 = CodePage
65001
cp1200 :: CodePage
cp1200 :: CodePage
cp1200 = CodePage
1200
cp1201 :: CodePage
cp1201 :: CodePage
cp1201 = CodePage
1201
cp12000 :: CodePage
cp12000 :: CodePage
cp12000 = CodePage
12000
cp12001 :: CodePage
cp12001 :: CodePage
cp12001 = CodePage
12001
cp1252 :: CodePage
cp1252 :: CodePage
cp1252 = CodePage
1252
data Options = Options
{ Options -> Bool
chatty :: Bool
, Options -> NonWindowsBehavior
nonWindowsBehavior :: NonWindowsBehavior
}
defaultOptions :: Options
defaultOptions :: Options
defaultOptions = Options :: Bool -> NonWindowsBehavior -> Options
Options
{ chatty :: Bool
chatty = Bool
False
, nonWindowsBehavior :: NonWindowsBehavior
nonWindowsBehavior =
(CodePage -> TextEncoding) -> NonWindowsBehavior
nonWindowsFallbackCodePageEncoding CodePage -> TextEncoding
defaultFallbackCodePageEncoding
}
data NonWindowsBehavior
= NonWindowsDoNothing
| NonWindowsFallbackCodePageEncoding (CodePage -> TextEncoding)
nonWindowsDoNothing :: NonWindowsBehavior
nonWindowsDoNothing :: NonWindowsBehavior
nonWindowsDoNothing = NonWindowsBehavior
NonWindowsDoNothing
nonWindowsFallbackCodePageEncoding
:: (CodePage -> TextEncoding) -> NonWindowsBehavior
nonWindowsFallbackCodePageEncoding :: (CodePage -> TextEncoding) -> NonWindowsBehavior
nonWindowsFallbackCodePageEncoding = (CodePage -> TextEncoding) -> NonWindowsBehavior
NonWindowsFallbackCodePageEncoding
defaultFallbackCodePageEncoding :: CodePage -> TextEncoding
defaultFallbackCodePageEncoding :: CodePage -> TextEncoding
defaultFallbackCodePageEncoding CodePage
cp
| CodePage
cp CodePage -> CodePage -> Bool
forall a. Eq a => a -> a -> Bool
== CodePage
cp65001
= TextEncoding
utf8
| CodePage
cp CodePage -> CodePage -> Bool
forall a. Eq a => a -> a -> Bool
== CodePage
cp1200
= TextEncoding
utf16le
| CodePage
cp CodePage -> CodePage -> Bool
forall a. Eq a => a -> a -> Bool
== CodePage
cp1201
= TextEncoding
utf16be
| CodePage
cp CodePage -> CodePage -> Bool
forall a. Eq a => a -> a -> Bool
== CodePage
cp12000
= TextEncoding
utf32le
| CodePage
cp CodePage -> CodePage -> Bool
forall a. Eq a => a -> a -> Bool
== CodePage
cp12001
= TextEncoding
utf32be
| CodePage
cp CodePage -> CodePage -> Bool
forall a. Eq a => a -> a -> Bool
== CodePage
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]
++ CodePage -> [Char]
forall a. Show a => a -> [Char]
show CodePage
cp