module Canteven.Template (
readFileAsStrLiteral,
readFileAsMarkdown
) where
import Data.Default (def)
import Data.Functor ((<$>))
import Language.Haskell.TH (Exp, Q, runIO, stringE)
import Language.Haskell.TH.Syntax (qAddDependentFile)
import Text.Blaze.Html.Renderer.String (renderHtml)
import Text.Markdown (markdown)
import qualified Data.ByteString.Lazy as LBS
import qualified Data.Text.Lazy as TL
import qualified Data.Text.Lazy.Encoding as TLE
readFileAsStrLiteral
:: FilePath
-> Q Exp
readFileAsStrLiteral path = do
qAddDependentFile path
contents <- runIO $ readFile path
stringE contents
readFileAsMarkdown
:: FilePath
-> Q Exp
readFileAsMarkdown filename = do
qAddDependentFile filename
fileContent <- runIO $ TLE.decodeUtf8 <$> LBS.readFile filename
stringE $ renderMarkdown fileContent
where
renderMarkdown :: TL.Text -> String
renderMarkdown = renderHtml . markdown def