frontmatter-0.1.0.0: src/Data/Frontmatter/Internal.hs
{-# LANGUAGE OverloadedStrings #-}
module Data.Frontmatter.Internal where
import Control.Applicative ((*>))
import Data.Attoparsec.ByteString
import Data.Attoparsec.ByteString.Char8
import Data.ByteString (ByteString)
import qualified Data.ByteString.Char8 as ByteString (pack)
-- |
-- A parser for a frontmatter; returns it as a 'ByteString'. Doesn't fail even
-- if it's empty. When it fails; returns a a IResult with the whole input
-- rather than consuming it.
frontmatter :: Parser ByteString
frontmatter = frontmatter' <?> "frontmatter"
where
frontmatter' = do
f <- frontmatterSeparator *> manyTill anyChar frontmatterSeparator
return $ ByteString.pack f
-- |
-- Internal parser for the frontmatter separator
frontmatterSeparator :: Parser ()
frontmatterSeparator = string "---" >> endOfLine