dhall-docs-1.0.12: src/Dhall/Docs/Markdown.hs
{-| Contains all utilities related to markdown processing
-}
module Dhall.Docs.Markdown
( MarkdownParseError(..)
, MMark
, parseMarkdown
, markdownToHtml
, MMark.render
) where
import Data.Text (Text)
import Lucid
import Path (File, Path, Rel)
import Text.MMark (MMarkErr, MMark)
import Text.Megaparsec (ParseErrorBundle (..))
import qualified Path
import qualified Text.MMark as MMark
-- | Wrapper around `MMarkErr` errors
newtype MarkdownParseError = MarkdownParseError
{ unwrap :: ParseErrorBundle Text MMarkErr
}
{-| Takes a text that could contain markdown and returns the generated HTML.
If an error occurs while parsing, it also returns the error information.
-}
markdownToHtml
:: Path Rel File -- ^ Used by `Mmark.parse` for error messages
-> Text -- ^ Text to parse
-> Either MarkdownParseError (Html ())
markdownToHtml relFile contents =
MMark.render <$> parseMarkdown relFile contents
{-| Takes a text that could contain markdown and returns either the parsed
markdown or, if parsing fails, the error information.
-}
parseMarkdown
:: Path Rel File -- ^ Used by `Mmark.parse` for error messages
-> Text -- ^ Text to parse
-> Either MarkdownParseError MMark
parseMarkdown relFile contents =
case MMark.parse (Path.fromRelFile relFile) contents of
Left err -> Left MarkdownParseError { unwrap = err }
Right mmark -> Right mmark