This way, we can declare DynEncoding an instance of Show darcs-hash:20070827020833-a4fee-a84635bf911573022b780c17b2085ff814302b3e
31 lines
784 B
Haskell
31 lines
784 B
Haskell
module Data.Encoding.CP1258
|
|
(CP1258(..)) where
|
|
|
|
import Data.Array ((!),Array)
|
|
import Data.Word (Word8)
|
|
import Data.ByteString (all)
|
|
import Data.Map (Map,lookup,member)
|
|
import Data.Encoding.Base
|
|
import Prelude hiding (lookup,all)
|
|
import Control.Exception (throwDyn)
|
|
|
|
data CP1258 = CP1258 deriving Show
|
|
|
|
instance Encoding CP1258 where
|
|
encode _ = encodeSinglebyte (\c -> case lookup c encodeMap of
|
|
Just v -> v
|
|
Nothing -> throwDyn (HasNoRepresentation c))
|
|
encodable _ c = member c encodeMap
|
|
decode _ = decodeSinglebyte (decodeArr!)
|
|
decodable _ = all (\w -> decodeArr!w /= '\xFFFD')
|
|
|
|
decodeArr :: Array Word8 Char
|
|
#ifndef __HADDOCK__
|
|
decodeArr = $(decodingArray "CP1258.TXT")
|
|
#endif
|
|
|
|
encodeMap :: Map Char Word8
|
|
#ifndef __HADDOCK__
|
|
encodeMap = $(encodingMap "CP1258.TXT")
|
|
#endif
|