34 lines
665 B
Haskell
34 lines
665 B
Haskell
|
module KeyValueParser where
|
||
|
|
||
|
import Text.ParserCombinators.Parsec
|
||
|
|
||
|
parseKeyValue = do
|
||
|
key <- parseKey
|
||
|
char '='
|
||
|
value <- parseValue
|
||
|
return (key, value)
|
||
|
|
||
|
parseKey = many1 letter
|
||
|
|
||
|
parseValue =
|
||
|
do
|
||
|
openQuote <- char '"' <|> char '\''
|
||
|
value <- many1 letter
|
||
|
char openQuote
|
||
|
return value
|
||
|
<|>
|
||
|
do
|
||
|
value <- many1 letter
|
||
|
return value
|
||
|
|
||
|
parseString s = do
|
||
|
case (parse parseKeyValue "" s) of
|
||
|
Left err -> return ("Error " ++ show err)
|
||
|
Right (key, value) -> return ("Key: " ++ key ++ ", Value: " ++ value)
|
||
|
|
||
|
resource :: String -> IO String
|
||
|
resource text = do
|
||
|
parsedText <- mapM parseString (lines text)
|
||
|
return (unlines parsedText)
|
||
|
|