, text
, separator
, quotedStr
+ , qvalue
)
where
-import qualified Data.ByteString.Lazy.Char8 as B
-import Data.ByteString.Lazy.Char8 (ByteString)
import Data.List
import Network.HTTP.Lucu.Parser
--- |@'isCtl' c@ is True iff @0x20 <= @c@ < 0x7F@.
+-- |@'isCtl' c@ is 'Prelude.False' iff @0x20 <= @c@ < 0x7F@.
isCtl :: Char -> Bool
isCtl c
| c < '\x1f' = True
| c >= '\x7f' = True
| otherwise = False
--- |@'isSeparator' c@ is True iff c is one of HTTP separators.
+-- |@'isSeparator' c@ is 'Prelude.True' iff c is one of HTTP
+-- separators.
isSeparator :: Char -> Bool
isSeparator '(' = True
isSeparator ')' = True
isSeparator '\t' = True
isSeparator _ = False
--- |@'isChar' c@ is True iff @c <= 0x7f@.
+-- |@'isChar' c@ is 'Prelude.True' iff @c <= 0x7f@.
isChar :: Char -> Bool
isChar c
| c <= '\x7f' = True
qdtext = do c <- satisfy (/= '"')
return [c]
- quotedPair = do q <- char '\\'
+ quotedPair = do char '\\'
c <- satisfy isChar
return [c]
+
+-- |'qvalue' accepts a so-called qvalue.
+qvalue :: Parser Double
+qvalue = do x <- char '0'
+ xs <- option ""
+ $ do y <- char '.'
+ ys <- many digit -- 本當は三文字までに制限
+ return (y:ys)
+ return $ read (x:xs)
+ <|>
+ do x <- char '1'
+ xs <- option ""
+ $ do y <- char '.'
+ ys <- many (char '0') -- 本當は三文字までに制限
+ return (y:ys)
+ return $ read (x:xs)