module Data.SCargot.Rivest where
import Data.ByteString (ByteString)
import qualified Data.ByteString as BS
import qualified Data.ByteString.Base64 as B64
import Data.Text (Text)
import qualified Data.Text as T
pToken :: Parser ByteString
pToken = do
x <- char (isAlpha || isTokenPunct)
xs <- takeWhile1 (isAlpha || isDigit || isTokenPunct)
isTokenPunct :: Char -> Bool
isTokenPunct c = c `elem` "-./_:*+="
pWithLength :: Parser ByteString
pWithLength = do
n <- takeWhile1 isDigit
pFindType (Just (read (T.unpack n)))
pFindType :: Maybe Int -> Parser ByteString
pFindType len = do
c <- peekChar
case c of
':' -> case len of
Just l -> pVerbatim l
Nothing -> fail "Verbatim encoding without length given"
'"' -> pQuoted len
'#' -> pHex len
'{' -> pBase64Verbatim len
'|' -> pBase64 len
_ -> case len of
Just _ -> fail "Unexpected length field"
Nothing -> pToken
pQuoted :: Maybe Int -> Parser ByteString
pQuoted = do
char '"'
ss <- many1 quoteChar
char '"'
return ss
pHex :: Parser ByteString
pHex = do
pVerbatim :: Int -> Parser ByteString
pVerbatim = do
char ':'
take n
pBase64Verbatim :: Maybe Int -> Parser ByteString
pBase64Verbatim = undefined
pBase64 :: Maybe Int -> Parser ByteString
pBase64 = undefined