1 module Network.HTTP.Lucu.Parser.Http
2 ( isCtl -- Char -> Bool
3 , isSeparator -- Char -> Bool
4 , isChar -- Char -> Bool
5 , isToken -- Char -> Bool
6 , listOf -- Parser a -> Parser [a]
7 , token -- Parser String
10 , separator -- Parser Char
11 , quotedStr -- Parser String
15 import qualified Data.ByteString.Lazy.Char8 as B
16 import Data.ByteString.Lazy.Char8 (ByteString)
18 import Network.HTTP.Lucu.Parser
27 isSeparator :: Char -> Bool
28 isSeparator c = elem c "()<>@,;:\\\"/[]?={} \t"
31 isChar :: Char -> Bool
37 isToken :: Char -> Bool
38 isToken c = not (isCtl c || isSeparator c)
41 listOf :: Parser a -> Parser [a]
42 listOf p = do many lws
48 token :: Parser String
49 token = many1 $ satisfy isToken
53 lws = do s <- option "" crlf
54 xs <- many1 (sp <|> ht)
59 text = satisfy (\ c -> not (isCtl c))
62 separator :: Parser Char
63 separator = satisfy isSeparator
66 quotedStr :: Parser String
67 quotedStr = do char '"'
68 xs <- many (qdtext <|> quotedPair)
70 return $ foldr (++) "" xs
72 qdtext = do c <- satisfy (/= '"')
75 quotedPair = do q <- char '\\'