{-# LANGUAGE OverloadedStrings , PackageImports #-} -- http://www.ietf.org/rfc/rfc2046.txt -- -- Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types module Network.Parser.Rfc2046 where import Control.Monad (join) import Control.Applicative as A hiding (many) import Data.Attoparsec import qualified Data.Attoparsec.Char8 as AC import qualified Data.Attoparsec.FastSet as F (fromList, memberWord8) import Data.ByteString as W import Data.ByteString.Char8 as C import Data.ByteString.Internal (c2w, w2c) import Data.Word (Word8) import Prelude hiding (take, takeWhile) import Network.Parser.RfcCommon import Network.Parser.Rfc2234 import Network.Parser.Rfc2045 import qualified Data.Map as M import Prelude hiding (id) -- Prelude.map Data.Char.ord "'()+_,-./:=?" bcharsnospaceSet' :: [Word8] bcharsnospaceSet' = [39,40,41,43,95,44,45,46,47,58,61,63] bcharsnospace_pred :: Word8 -> Bool bcharsnospace_pred w = digit_pred w || alpha_pred w || F.memberWord8 w (F.fromList bcharsnospaceSet') bcharsnospace :: Parser Word8 bcharsnospace = satisfy bcharsnospace_pred bchars = bcharsnospace <|> satisfy (== 32) -- TODO: 0*69 bcharsnospace boundary = many1 bchars dash-boundary = word8 45 *> word8 45 *> boundary