dataenc 0.9 → 0.10.1
raw patch · 8 files changed
+113/−73 lines, 8 files
Files
- dataenc.cabal +1/−1
- src/Codec/Binary/Base16.hs +14/−9
- src/Codec/Binary/Base32.hs +21/−16
- src/Codec/Binary/Base32Hex.hs +21/−16
- src/Codec/Binary/Base64.hs +17/−12
- src/Codec/Binary/Base64Url.hs +11/−5
- src/Codec/Binary/DataEncoding.hs +11/−2
- src/Codec/Binary/Uu.hs +17/−12
dataenc.cabal view
@@ -1,5 +1,5 @@ name: dataenc-version: 0.9+version: 0.10.1 license: LGPL license-file: COPYING.LESSER author: Magnus Therning
src/Codec/Binary/Base16.hs view
@@ -23,6 +23,7 @@ module Codec.Binary.Base16 ( encode , decode+ , decode' , chop , unchop ) where@@ -59,17 +60,21 @@ in map (encodeArray !) $ foldr (\ o l -> (splitOctet o) ++ l) [] os -- {{{1 decode--- | Decode data.-decode :: String- -> Maybe [Word8]-decode s = let+-- | Decode data (lazy).+decode' :: String+ -> [Maybe Word8]+decode' = let dec [] = []- dec (o1:o2:os) =- (o1 `shiftL` 4 .|. o2) : dec os+ dec (Just o1:Just o2:os) =+ Just (o1 `shiftL` 4 .|. o2) : dec os+ dec _ = [Nothing] in- if (length s `mod` 2 == 0)- then liftM dec $ sequence $ map (flip M.lookup decodeMap) s- else Nothing+ dec . map (flip M.lookup decodeMap)++-- | Decode data (strict).+decode :: String+ -> Maybe [Word8]+decode = sequence . decode' -- {{{1 chop -- | Chop up a string in parts.
src/Codec/Binary/Base32.hs view
@@ -23,6 +23,7 @@ module Codec.Binary.Base32 ( encode , decode+ , decode' , chop , unchop ) where@@ -99,38 +100,42 @@ in (foldr (\ i s -> (encodeArray ! i) : s) "" [i1, i2, i3, i4, i5, i6, i7, i8]) ++ (encode os) -- {{{1 decode--- | Decode data.-decode :: String- -> Maybe [Word8]-decode s = let+-- | Decode data (lazy).+decode' :: String+ -> [Maybe Word8]+decode' = let dec [] = []- dec [eo1, eo2] = [eo1 `shiftL` 3 .|. eo2 `shiftR` 2]- dec [eo1, eo2, eo3, eo4] = let+ dec [Just eo1, Just eo2] = [Just (eo1 `shiftL` 3 .|. eo2 `shiftR` 2)]+ dec [Just eo1, Just eo2, Just eo3, Just eo4] = let o1 = eo1 `shiftL` 3 .|. eo2 `shiftR` 2 o2 = eo2 `shiftL` 6 .|. eo3 `shiftL` 1 .|. eo4 `shiftR` 4- in [o1, o2]- dec [eo1, eo2, eo3, eo4, eo5] = let+ in [Just o1, Just o2]+ dec [Just eo1, Just eo2, Just eo3, Just eo4, Just eo5] = let o1 = eo1 `shiftL` 3 .|. eo2 `shiftR` 2 o2 = eo2 `shiftL` 6 .|. eo3 `shiftL` 1 .|. eo4 `shiftR` 4 o3 = eo4 `shiftL` 4 .|. eo5 `shiftR` 1- in [o1, o2, o3]- dec [eo1, eo2, eo3, eo4, eo5, eo6, eo7] = let+ in [Just o1, Just o2, Just o3]+ dec [Just eo1, Just eo2, Just eo3, Just eo4, Just eo5, Just eo6, Just eo7] = let o1 = eo1 `shiftL` 3 .|. eo2 `shiftR` 2 o2 = eo2 `shiftL` 6 .|. eo3 `shiftL` 1 .|. eo4 `shiftR` 4 o3 = eo4 `shiftL` 4 .|. eo5 `shiftR` 1 o4 = eo5 `shiftL` 7 .|. eo6 `shiftL` 2 .|. eo7 `shiftR` 3- in [o1, o2, o3, o4]- dec (eo1:eo2:eo3:eo4:eo5:eo6:eo7:eo8:eos) = let+ in [Just o1, Just o2, Just o3, Just o4]+ dec (Just eo1:Just eo2:Just eo3:Just eo4:Just eo5:Just eo6:Just eo7:Just eo8:eos) = let o1 = eo1 `shiftL` 3 .|. eo2 `shiftR` 2 o2 = eo2 `shiftL` 6 .|. eo3 `shiftL` 1 .|. eo4 `shiftR` 4 o3 = eo4 `shiftL` 4 .|. eo5 `shiftR` 1 o4 = eo5 `shiftL` 7 .|. eo6 `shiftL` 2 .|. eo7 `shiftR` 3 o5 = eo7 `shiftL` 5 .|. eo8- in o1:o2:o3:o4:o5:(dec eos)+ in Just o1:Just o2:Just o3:Just o4:Just o5:(dec eos)+ dec _ = [Nothing] in- if (length s `mod` 8 == 0)- then liftM dec $ sequence $ map (flip M.lookup decodeMap) (filter (/= '=') s)- else Nothing+ dec . map (flip M.lookup decodeMap) . takeWhile (/= '=')++-- | Decode data (strict).+decode :: String+ -> Maybe [Word8]+decode = sequence . decode' -- {{{1 chop -- | Chop up a string in parts.
src/Codec/Binary/Base32Hex.hs view
@@ -23,6 +23,7 @@ module Codec.Binary.Base32Hex ( encode , decode+ , decode' , chop , unchop ) where@@ -102,38 +103,42 @@ in (foldr (\ i s -> (encodeArray ! i) : s) "" [i1, i2, i3, i4, i5, i6, i7, i8]) ++ (encode os) -- {{{1 decode--- | Decode data.-decode :: String- -> Maybe [Word8]-decode s = let+-- | Decode data (lazy).+decode' :: String+ -> [Maybe Word8]+decode' = let dec [] = []- dec [eo1, eo2] = [eo1 `shiftL` 3 .|. eo2 `shiftR` 2]- dec [eo1, eo2, eo3, eo4] = let+ dec [Just eo1, Just eo2] = [Just (eo1 `shiftL` 3 .|. eo2 `shiftR` 2)]+ dec [Just eo1, Just eo2, Just eo3, Just eo4] = let o1 = eo1 `shiftL` 3 .|. eo2 `shiftR` 2 o2 = eo2 `shiftL` 6 .|. eo3 `shiftL` 1 .|. eo4 `shiftR` 4- in [o1, o2]- dec [eo1, eo2, eo3, eo4, eo5] = let+ in [Just o1, Just o2]+ dec [Just eo1, Just eo2, Just eo3, Just eo4, Just eo5] = let o1 = eo1 `shiftL` 3 .|. eo2 `shiftR` 2 o2 = eo2 `shiftL` 6 .|. eo3 `shiftL` 1 .|. eo4 `shiftR` 4 o3 = eo4 `shiftL` 4 .|. eo5 `shiftR` 1- in [o1, o2, o3]- dec [eo1, eo2, eo3, eo4, eo5, eo6, eo7] = let+ in [Just o1, Just o2, Just o3]+ dec [Just eo1, Just eo2, Just eo3, Just eo4, Just eo5, Just eo6, Just eo7] = let o1 = eo1 `shiftL` 3 .|. eo2 `shiftR` 2 o2 = eo2 `shiftL` 6 .|. eo3 `shiftL` 1 .|. eo4 `shiftR` 4 o3 = eo4 `shiftL` 4 .|. eo5 `shiftR` 1 o4 = eo5 `shiftL` 7 .|. eo6 `shiftL` 2 .|. eo7 `shiftR` 3- in [o1, o2, o3, o4]- dec (eo1:eo2:eo3:eo4:eo5:eo6:eo7:eo8:eos) = let+ in [Just o1, Just o2, Just o3, Just o4]+ dec (Just eo1:Just eo2:Just eo3:Just eo4:Just eo5:Just eo6:Just eo7:Just eo8:eos) = let o1 = eo1 `shiftL` 3 .|. eo2 `shiftR` 2 o2 = eo2 `shiftL` 6 .|. eo3 `shiftL` 1 .|. eo4 `shiftR` 4 o3 = eo4 `shiftL` 4 .|. eo5 `shiftR` 1 o4 = eo5 `shiftL` 7 .|. eo6 `shiftL` 2 .|. eo7 `shiftR` 3 o5 = eo7 `shiftL` 5 .|. eo8- in o1:o2:o3:o4:o5:(dec eos)+ in Just o1:Just o2:Just o3:Just o4:Just o5:(dec eos)+ dec _ = [Nothing] in- if (length s `mod` 8 == 0)- then liftM dec $ sequence $ map (flip M.lookup decodeMap) (filter (/= '=') s)- else Nothing+ dec . map (flip M.lookup decodeMap) . takeWhile (/= '=')++-- | Decode data (strict).+decode :: String+ -> Maybe [Word8]+decode = sequence . decode' -- {{{1 chop -- | Chop up a string in parts.
src/Codec/Binary/Base64.hs view
@@ -23,6 +23,7 @@ module Codec.Binary.Base64 ( encode , decode+ , decode' , chop , unchop ) where@@ -90,25 +91,29 @@ in (foldr (\ i s -> (encodeArray ! i) : s) "" [i1, i2, i3, i4]) ++ encode os -- {{{1 decode--- | Decode data.-decode :: String- -> Maybe [Word8]-decode s = let+-- | Decode data (lazy).+decode' :: String+ -> [Maybe Word8]+decode' = let dec [] = []- dec [eo1, eo2] = [eo1 `shiftL` 2 .|. eo2 `shiftR` 4]- dec [eo1, eo2, eo3] = let+ dec [Just eo1, Just eo2] = [Just (eo1 `shiftL` 2 .|. eo2 `shiftR` 4)]+ dec [Just eo1, Just eo2, Just eo3] = let o1 = eo1 `shiftL` 2 .|. eo2 `shiftR` 4 o2 = eo2 `shiftL` 4 .|. eo3 `shiftR` 2- in [o1, o2]- dec (eo1:eo2:eo3:eo4:eos) = let+ in [Just o1, Just o2]+ dec (Just eo1:Just eo2:Just eo3:Just eo4:eos) = let o1 = eo1 `shiftL` 2 .|. eo2 `shiftR` 4 o2 = eo2 `shiftL` 4 .|. eo3 `shiftR` 2 o3 = eo3 `shiftL` 6 .|. eo4- in o1:o2:o3:(dec eos)+ in Just o1:Just o2:Just o3:(dec eos)+ dec _ = [Nothing] in- if (length s `mod` 4 == 0)- then liftM dec $ sequence $ map (flip M.lookup decodeMap) (filter (/= '=') s)- else Nothing+ dec . map (flip M.lookup decodeMap) . takeWhile (/= '=')++-- | Decode data (strict).+decode :: String+ -> Maybe [Word8]+decode = sequence . decode' -- {{{1 chop -- | Chop up a string in parts.
src/Codec/Binary/Base64Url.hs view
@@ -23,6 +23,7 @@ module Codec.Binary.Base64Url ( encode , decode+ , decode' , chop , unchop ) where@@ -44,15 +45,20 @@ in map swapUrlChar $ Base64.encode os -- {{{1 decode--- | Decode data.-decode :: String- -> Maybe [Word8]-decode cs = let+-- | Decode data (lazy).+decode' :: String+ -> [Maybe Word8]+decode' = let unSwapUrlChar c = case c of '-' -> '+' '_' -> '/' _ -> c- in Base64.decode $ map unSwapUrlChar cs+ in Base64.decode' . map unSwapUrlChar++-- | Decode data (strict).+decode :: String+ -> Maybe [Word8]+decode = sequence . decode' -- {{{1 chop -- | Chop up a string in parts.
src/Codec/Binary/DataEncoding.hs view
@@ -18,13 +18,15 @@ -- | Data encoding module. ----- It exposes several instances of 'DataCoded', one for each data encoding+-- It exposes several instances of 'DataCodec', one for each data encoding -- implemented in the library without causing the name clashing that would -- result from importing the individual encoding modules. -- module Codec.Binary.DataEncoding- ( encode+ ( DataCodec+ , encode , decode+ , decode' , chop , unchop , base16@@ -50,6 +52,7 @@ data DataCodec = DataCodec { encode :: [Word8] -> String, decode :: String -> Maybe [Word8],+ decode' :: String -> [Maybe Word8], chop :: Int -> String -> [String], unchop :: [String] -> String }@@ -61,6 +64,7 @@ base16 = DataCodec { encode=Base16.encode, decode=Base16.decode,+ decode'=Base16.decode', chop=Base16.chop, unchop=Base16.unchop }@@ -72,6 +76,7 @@ base32 = DataCodec { encode=Base32.encode, decode=Base32.decode,+ decode'=Base32.decode', chop=Base32.chop, unchop=Base32.unchop }@@ -83,6 +88,7 @@ base32Hex = DataCodec { encode=Base32Hex.encode, decode=Base32Hex.decode,+ decode'=Base32Hex.decode', chop=Base32Hex.chop, unchop=Base32Hex.unchop }@@ -94,6 +100,7 @@ base64 = DataCodec { encode=Base64.encode, decode=Base64.decode,+ decode'=Base64.decode', chop=Base64.chop, unchop=Base64.unchop }@@ -105,6 +112,7 @@ base64Url = DataCodec { encode=Base64Url.encode, decode=Base64Url.decode,+ decode'=Base64Url.decode', chop=Base64Url.chop, unchop=Base64Url.unchop }@@ -116,6 +124,7 @@ uu = DataCodec { encode=Uu.encode, decode=Uu.decode,+ decode'=Uu.decode', chop=Uu.chop, unchop=Uu.unchop }
src/Codec/Binary/Uu.hs view
@@ -24,6 +24,7 @@ module Codec.Binary.Uu ( encode , decode+ , decode' , chop , unchop ) where@@ -91,25 +92,29 @@ in (foldr (\ i s -> (encodeArray ! i) : s) "" [i1, i2, i3, i4]) ++ encode os -- {{{1 decode--- | Decode data.-decode :: String- -> Maybe [Word8]-decode s = let+-- | Decode data (lazy).+decode' :: String+ -> [Maybe Word8]+decode' = let dec [] = []- dec [eo1, eo2] = [eo1 `shiftL` 2 .|. eo2 `shiftR` 4]- dec [eo1, eo2, eo3] = let+ dec [Just eo1, Just eo2] = [Just (eo1 `shiftL` 2 .|. eo2 `shiftR` 4)]+ dec [Just eo1, Just eo2, Just eo3] = let o1 = eo1 `shiftL` 2 .|. eo2 `shiftR` 4 o2 = eo2 `shiftL` 4 .|. eo3 `shiftR` 2- in [o1, o2]- dec (eo1:eo2:eo3:eo4:eos) = let+ in [Just o1, Just o2]+ dec (Just eo1:Just eo2:Just eo3:Just eo4:eos) = let o1 = eo1 `shiftL` 2 .|. eo2 `shiftR` 4 o2 = eo2 `shiftL` 4 .|. eo3 `shiftR` 2 o3 = eo3 `shiftL` 6 .|. eo4- in o1:o2:o3:(dec eos)+ in Just o1:Just o2:Just o3:(dec eos)+ dec _ = [Nothing] in- if (length s `mod` 4 /= 1)- then liftM dec $ sequence $ map (flip M.lookup decodeMap) s- else Nothing+ dec . map (flip M.lookup decodeMap)++-- | Decode data (strict).+decode :: String+ -> Maybe [Word8]+decode = sequence . decode' -- {{{1 chop -- | Chop up a string in parts. Each string in the resulting list is prepended