X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=GHC%2FIO%2FEncoding.hs;h=9f56966e0bcc6267438ecaf496383e8b92571d79;hb=41e8fba828acbae1751628af50849f5352b27873;hp=f192ab8e217d3b7a39148f9b4261d696aad20b30;hpb=207e64ee80ef749dbb46df0fa6a134b19d5a42a5;p=ghc-base.git diff --git a/GHC/IO/Encoding.hs b/GHC/IO/Encoding.hs index f192ab8..9f56966 100644 --- a/GHC/IO/Encoding.hs +++ b/GHC/IO/Encoding.hs @@ -1,4 +1,6 @@ -{-# OPTIONS_GHC -XNoImplicitPrelude -funbox-strict-fields #-} +{-# LANGUAGE CPP, NoImplicitPrelude #-} +{-# OPTIONS_GHC -funbox-strict-fields #-} + ----------------------------------------------------------------------------- -- | -- Module : GHC.IO.Encoding @@ -30,6 +32,9 @@ import GHC.IO.Encoding.Types import GHC.Word #if !defined(mingw32_HOST_OS) import qualified GHC.IO.Encoding.Iconv as Iconv +#else +import qualified GHC.IO.Encoding.CodePage as CodePage +import Text.Read (reads) #endif import qualified GHC.IO.Encoding.Latin1 as Latin1 import qualified GHC.IO.Encoding.UTF8 as UTF8 @@ -96,7 +101,7 @@ localeEncoding :: TextEncoding #if !defined(mingw32_HOST_OS) localeEncoding = Iconv.localeEncoding #else -localeEncoding = Latin1.latin1 +localeEncoding = CodePage.localeEncoding #endif -- | Look up the named Unicode encoding. May fail with @@ -122,6 +127,9 @@ localeEncoding = Latin1.latin1 -- * a suffix of @\/\/TRANSLIT@ will choose a replacement character -- for illegal sequences or code points. -- +-- On Windows, you can access supported code pages with the prefix +-- @CP@; for example, @\"CP1250\"@. +-- mkTextEncoding :: String -> IO TextEncoding #if !defined(mingw32_HOST_OS) mkTextEncoding = Iconv.mkTextEncoding @@ -133,6 +141,8 @@ mkTextEncoding "UTF-16BE" = return utf16be mkTextEncoding "UTF-32" = return utf32 mkTextEncoding "UTF-32LE" = return utf32le mkTextEncoding "UTF-32BE" = return utf32be +mkTextEncoding ('C':'P':n) + | [(cp,"")] <- reads n = return $ CodePage.codePageEncoding cp mkTextEncoding e = ioException (IOError Nothing NoSuchThing "mkTextEncoding" ("unknown encoding:" ++ e) Nothing Nothing)