diff options
author | Raúl Benencia <rul@kalgan.cc> | 2013-09-05 19:36:33 -0300 |
---|---|---|
committer | Raúl Benencia <rul@kalgan.cc> | 2013-09-05 19:36:33 -0300 |
commit | 41b53ca04b6d52457f331930e8fea68416498882 (patch) | |
tree | ee63ce86ab4d9a4fc09637a0d5d4015e9f3c9956 /Rfc1342.hs | |
parent | 84fa12fef1736d04ee79e40cebaadadda262f063 (diff) |
New project tree structure
Diffstat (limited to 'Rfc1342.hs')
-rw-r--r-- | Rfc1342.hs | 57 |
1 files changed, 0 insertions, 57 deletions
diff --git a/Rfc1342.hs b/Rfc1342.hs deleted file mode 100644 index c2dad42..0000000 --- a/Rfc1342.hs +++ /dev/null @@ -1,57 +0,0 @@ -{- A simple RFC1342 decoder. - - - - Copyright 2013 Raúl Benencia <rul@kalgan.cc> - - - - Licensed under the GNU GPL version 3 or higher - - - -} -module Rfc1342 (decodeField) where - -import qualified Codec.Binary.Base64 as B64 -import qualified Codec.Binary.QuotedPrintable as QP - -import Data.Char (toLower, isSpace, chr) -import Data.List(isPrefixOf) -import Data.Word (Word8) - -import Data.Encoding(decodeString) - --- Encoding imports. If you want to support more encodings, just add'em here. -import Data.Encoding.UTF8 -import Data.Encoding.ISO88591 -import Data.Encoding.ISO88592 -import Data.Encoding.ISO88598 -import Data.Encoding.ISO88599 - -decodeField :: String -> String -decodeField ('=':'?':cs) = decodeWithCharset dec rest - where (encoding, rest) = span (\c -> c /= '?') cs - dec = case (map toLower encoding) of - "utf-8" -> decodeString UTF8 - "iso-8859-1" -> decodeString ISO88591 - "iso-8859-2" -> decodeString ISO88592 - "iso-8859-8" -> decodeString ISO88598 - "iso-8859-9" -> decodeString ISO88599 - _ -> id -decodeField [] = [] -decodeField (c:cs) = c:decodeField cs - -decodeWithCharset dec [] = [] -decodeWithCharset dec ('?':c:'?':cs) | toLower c == 'b' = dataDecodeWith B64.decode - | toLower c == 'q' = dataDecodeWith QP.decode - | otherwise = cs - where (encoded, rest') = span (\c -> c /= '?') cs - rest = if "?=" `isPrefixOf` rest' - then drop 2 rest' - else rest' - dataDecodeWith datadec = (_2spc . dec . unwrap . datadec $ encoded) ++ decodeField rest -- ++ (decodeField $ dropWhile isSpace rest) - -unwrap :: Maybe [Word8] -> String -unwrap Nothing = [] -unwrap (Just str) = bytesToString str - -bytesToString :: [Word8] -> String -bytesToString = map (chr . fromIntegral) - --- Sometimes an underscore represents the SPACE character -_2spc = map (\x -> if x == '_' then ' ' else x)
\ No newline at end of file |