module Tintin.Render where import Tintin.Core import Tintin.Capabilities.Logging as Logging import Tintin.Capabilities.Filesystem as Filesystem import Tintin.Capabilities.Process as Process import Tintin.Domain.HtmlFile as HtmlFile import Tintin.Domain.DocumentationFile as DocumentationFile import Tintin.Domain.Project as Project import Tintin.Html.Templating as Templating import Tintin.Errors as Errors import qualified Data.Text as Text perform :: ( Has Logging.Capability eff , Has Filesystem.Capability eff , Has Process.Capability eff ) => [DocumentationFile.Value] -> Effectful eff [HtmlFile.Value] perform docFiles = do Logging.debug "Rendering" (errors, htmlFiles) <- docFiles |> map HtmlFile.fromDocumentationFile |> mapM HtmlFile.run |$> partitionEithers unless (null errors) (Errors.showAndDie errors) return htmlFiles writeOutput :: ( Has Logging.Capability eff , Has Filesystem.Capability eff ) => OutputDirectory -> Project.Info -> Effectful eff () writeOutput (OutputDirectory od) info = do Filesystem.makeDirectory (Filesystem.Path od) Logging.debug "Writing HTML output" forM_ (Project.pages info) $ \page -> do let newContent = Templating.wrap info page let slash = if "/" `Text.isSuffixOf` od then "" else "/" Filesystem.writeFile (Filesystem.Path $ od <> slash <> Project.filename page) newContent