36 lines
889 B
Haskell
36 lines
889 B
Haskell
{-# LANGUAGE CPP,TemplateHaskell #-}
|
|
{- | Implements ISO 8859-3 encoding, alias latin-3, alias south european
|
|
-}
|
|
module Data.Encoding.ISO88593
|
|
(ISO88593(..)) where
|
|
|
|
import Data.Array ((!),Array)
|
|
import Data.Word (Word8)
|
|
import Data.Map (Map,lookup,member)
|
|
import Data.Encoding.Base
|
|
import Prelude hiding (lookup)
|
|
import Control.Exception (throwDyn)
|
|
|
|
data ISO88593 = ISO88593 deriving Show
|
|
|
|
enc :: Char -> Word8
|
|
enc c = case lookup c encodeMap of
|
|
Just v -> v
|
|
Nothing -> throwDyn (HasNoRepresentation c)
|
|
|
|
instance Encoding ISO88593 where
|
|
encode _ = encodeSinglebyte enc
|
|
encodeLazy _ = encodeSinglebyteLazy enc
|
|
encodable _ c = member c encodeMap
|
|
decode _ = decodeSinglebyte (decodeArr!)
|
|
|
|
decodeArr :: Array Word8 Char
|
|
#ifndef __HADDOCK__
|
|
decodeArr = $(decodingArray "8859-3.TXT")
|
|
#endif
|
|
|
|
encodeMap :: Map Char Word8
|
|
#ifndef __HADDOCK__
|
|
encodeMap = $(encodingMap "8859-3.TXT")
|
|
#endif
|