sitepipe-0.1.0: src/SitePipe/Readers.hs
module SitePipe.Readers
(
-- * Built-in readers
markdownReader
, textReader
-- * Reader Generators
, mkPandocReader
) where
import Text.Pandoc
import Control.Monad.Catch
-- | Given any standard pandoc reader (see "Text.Pandoc"; e.g. 'readMarkdown', 'readDocX')
-- makes a resource reader compatible with 'SitePipe.Files.resourceLoader'.
--
-- > docs <- resourceLoader (mkPandocReader readDocX) ["docs/*.docx"]
mkPandocReader :: (ReaderOptions -> String -> (Either PandocError Pandoc)) -> String -> IO String
mkPandocReader pReader content = writeHtmlString def <$> runPandocReader (pReader def) content
-- | Runs the Pandoc reader handling errors.
runPandocReader :: (MonadThrow m) => (String -> Either PandocError Pandoc) -> String -> m Pandoc
runPandocReader panReader source =
case panReader source of
Left err -> throwM err
Right pandoc -> return pandoc
-- | Reads markdown files into html
markdownReader :: String -> IO String
markdownReader = mkPandocReader readMarkdown
-- | Reads text files without processing
textReader :: String -> IO String
textReader = return