]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/Parser/Http.hs
data/mime.types
[Lucu.git] / Network / HTTP / Lucu / Parser / Http.hs
index c1b30fc208c1d6bbbb787911f642c52de7ef3288..93fc14d9c80077cf3f2ba63270b215c8fc3f7442 100644 (file)
@@ -2,6 +2,8 @@ module Network.HTTP.Lucu.Parser.Http
     ( isCtl       -- Char -> Bool
     , isSeparator -- Char -> Bool
     , isChar      -- Char -> Bool
+    , isToken     -- Char -> Bool
+    , listOf      -- Parser a -> Parser [a]
     , token       -- Parser String
     , lws         -- Parser String
     , text        -- Parser Char
@@ -18,7 +20,7 @@ import           Network.HTTP.Lucu.Parser
 isCtl :: Char -> Bool
 isCtl c
     | c <  '\x1f' = True
-    | c == '\x7f' = True
+    | c >= '\x7f' = True
     | otherwise  = False
 
 
@@ -32,8 +34,19 @@ isChar c
     | otherwise   = False
 
 
+isToken :: Char -> Bool
+isToken c = not (isCtl c || isSeparator c)
+
+
+listOf :: Parser a -> Parser [a]
+listOf p = do many lws
+              sepBy p (do many lws
+                          char ','
+                          many lws)
+
+
 token :: Parser String
-token = many1 $ satisfy (\ c -> not (isCtl c || isSeparator c))
+token = many1 $ satisfy isToken
 
 
 lws :: Parser String
@@ -54,13 +67,11 @@ quotedStr :: Parser String
 quotedStr = do char '"'
                xs <- many (qdtext <|> quotedPair)
                char '"'
-               return $ foldr (++) "" (["\""] ++ xs ++ ["\""])
+               return $ foldr (++) "" xs
     where
-      qdtext = char '"' >> fail ""
-               <|>
-               do c <- text
+      qdtext = do c <- satisfy (/= '"')
                   return [c]
 
       quotedPair = do q <- char '\\'
                       c <- satisfy isChar
-                      return [q, c]
+                      return [c]