{-# LANGUAGE TemplateHaskell #-}
module Shakebook.Defaults where
import Control.Comonad.Cofree
import Control.Monad.Extra
import Data.Aeson as A
import Development.Shake.Plus
import RIO
import qualified RIO.ByteString.Lazy as LBS
import qualified RIO.Map as M
import qualified RIO.Text as T
import RIO.Time
import Path as P
import Shakebook.Conventions
import Shakebook.Data
import Shakebook.Pandoc
import Text.DocTemplates
import Text.Pandoc.Definition
import Text.Pandoc.Options
defaultMonthUrlFormat :: UTCTime -> String
defaultMonthUrlFormat = formatTime defaultTimeLocale "%Y-%m"
defaultPrettyMonthFormat :: UTCTime -> String
defaultPrettyMonthFormat = formatTime defaultTimeLocale "%B, %Y"
defaultPrettyTimeFormat :: UTCTime -> String
defaultPrettyTimeFormat = formatTime defaultTimeLocale "%A, %B %d, %Y"
defaultMonthUrlFragment :: UTCTime -> Text
defaultMonthUrlFragment t = T.pack $ "/posts/months/" <> defaultMonthUrlFormat t
defaultEnrichPost :: Value -> Value
defaultEnrichPost = enrichTeaser "<!--more-->"
. enrichTagLinks ("/posts/tags/" <>)
. enrichPrettyDate defaultPrettyTimeFormat
defaultMarkdownReaderOptions :: ReaderOptions
defaultMarkdownReaderOptions = def { readerExtensions = pandocExtensions }
defaultHtml5WriterOptions :: WriterOptions
defaultHtml5WriterOptions = def { writerHTMLMathMethod = MathJax ""}
defaultLatexWriterOptions :: WriterOptions
defaultLatexWriterOptions = def { writerTableOfContents = True
, writerVariables = Context $ M.fromList [
("geometry", SimpleVal "margin=3cm")
, ("fontsize", SimpleVal "10")
, ("linkcolor",SimpleVal "blue")]
}
defaultVideoReplacement :: Text -> Text -> Inline
defaultVideoReplacement baseUrl = \x -> Str $ "[Video available at [" <> baseUrl <> "/" <> x <> "]"
buildPDF :: (MonadThrow m, MonadAction m, MonadReader r m, HasSbConfig r) => Cofree [] (Path Rel File) -> Path Rel File -> FilePath -> m ()
buildPDF toc meta out = view sbConfigL >>= \SbConfig {..} -> do
k <- mapM (readMDFileIn sbMdRead sbSrcDir) toc
a <- readMDFileIn sbMdRead sbSrcDir meta
z <- replaceUnusableImages [".mp4"] (defaultVideoReplacement sbBaseUrl) $ foldr (<>) a $ progressivelyDemoteHeaders k
needPandocImagesIn sbOutDir z
let z' = prefixAllImages sbOutDir z
f <- makePDFLaTeX defaultLatexWriterOptions z'
either (throwM . PandocActionException . show) (LBS.writeFile out) f