1 module Network.HTTP.Lucu.Parser.Http
2 ( isCtl -- Char -> Bool
3 , isSeparator -- Char -> Bool
4 , isChar -- Char -> Bool
5 , token -- Parser String
8 , separator -- Parser Char
9 , quotedStr -- Parser String
13 import qualified Data.ByteString.Lazy.Char8 as B
14 import Data.ByteString.Lazy.Char8 (ByteString)
16 import Network.HTTP.Lucu.Parser
25 isSeparator :: Char -> Bool
26 isSeparator c = elem c "()<>@,;:\\\"/[]?={} \t"
29 isChar :: Char -> Bool
35 token :: Parser String
36 token = many1 $ satisfy (\ c -> not (isCtl c || isSeparator c))
40 lws = do s <- option "" crlf
41 xs <- many1 (sp <|> ht)
46 text = satisfy (\ c -> not (isCtl c))
49 separator :: Parser Char
50 separator = satisfy isSeparator
53 quotedStr :: Parser String
54 quotedStr = do char '"'
55 xs <- many (qdtext <|> quotedPair)
57 return $ foldr (++) "" (["\""] ++ xs ++ ["\""])
59 qdtext = char '"' >> fail ""
64 quotedPair = do q <- char '\\'