module Celtchar.Metadata
( parseMetadata
) where
import Data.String
import Data.Void (Void)
import Text.Megaparsec
import Text.Megaparsec.Char
parseMetadata :: (Stream a, Token a ~ Char, IsString b)
=> String
-> a
-> Either (ParseError Char Void) (Maybe b, b)
parseMetadata = runParser (do
metadata <- try metadata <|> return Nothing
text <- manyTill anyChar eof
return (metadata, fromString text))
where
metadata = do
space
some $ char '-'
char '\n'
space
m <- manyTill anyChar (try $ do char '\n'
some $ char '-'
char '\n')
space
return $ Just $ fromString m