module Text.XML.HXT.Parser.ProtocolHandlerUtil
( parseContentType
)
where
import Text.XML.HXT.DOM.XmlKeywords
import Text.XML.HXT.DOM.Util ( stringToUpper
, stringTrim
)
import qualified Text.ParserCombinators.Parsec as P
parseContentType :: P.Parser [(String, String)]
parseContentType :: Parser [([Char], [Char])]
parseContentType
= forall tok st a. GenParser tok st a -> GenParser tok st a
P.try ( do
[([Char], [Char])]
mimeType <- ( do
[Char]
mt <- forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
P.many (forall s (m :: * -> *) u.
Stream s m Char =>
[Char] -> ParsecT s u m Char
P.noneOf [Char]
";")
forall {m :: * -> *}. Monad m => [Char] -> m [([Char], [Char])]
rtMT [Char]
mt
)
[([Char], [Char])]
charset <- ( do
Char
_ <- forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
P.char Char
';'
[Char]
_ <- forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
P.many (forall s (m :: * -> *) u.
Stream s m Char =>
[Char] -> ParsecT s u m Char
P.oneOf [Char]
" \t'")
[Char]
_ <- forall s (m :: * -> *) u.
Stream s m Char =>
[Char] -> ParsecT s u m [Char]
P.string [Char]
"charset="
Char
_ <- forall s (m :: * -> *) t a u.
Stream s m t =>
a -> ParsecT s u m a -> ParsecT s u m a
P.option Char
'"' (forall s (m :: * -> *) u.
Stream s m Char =>
[Char] -> ParsecT s u m Char
P.oneOf [Char]
"\"'")
[Char]
cs <- forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m [a]
P.many1 (forall s (m :: * -> *) u.
Stream s m Char =>
[Char] -> ParsecT s u m Char
P.noneOf [Char]
"\"'")
forall (m :: * -> *) a. Monad m => a -> m a
return [ ([Char]
transferEncoding, [Char] -> [Char]
stringToUpper [Char]
cs) ]
)
forall (m :: * -> *) a. Monad m => a -> m a
return ([([Char], [Char])]
mimeType forall a. [a] -> [a] -> [a]
++ [([Char], [Char])]
charset)
)
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
P.<|>
( do
[Char]
mt <- forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
P.many (forall s (m :: * -> *) u.
Stream s m Char =>
[Char] -> ParsecT s u m Char
P.noneOf [Char]
";")
forall {m :: * -> *}. Monad m => [Char] -> m [([Char], [Char])]
rtMT [Char]
mt
)
where
rtMT :: [Char] -> m [([Char], [Char])]
rtMT [Char]
mt = forall (m :: * -> *) a. Monad m => a -> m a
return [ ([Char]
transferMimeType, [Char] -> [Char]
stringTrim [Char]
mt) ]