{-# LANGUAGE OverloadedStrings #-} module Projmd.Template ( producePage ) where import qualified Data.Text as T import Data.Text.Lazy ( toStrict ) import Data.Text.Template import Text.Printf import Projmd.Project producePage :: String -> String -> [Project] -> String producePage templateString date projects = T.unpack $ toStrict $ substitute (T.pack templateString) context where context = mkContext [ ("projmd_projects", formatAllProjects projects) , ("projmd_date", T.pack date) ] -- Create 'Context' from association list. mkContext :: [(T.Text, T.Text)] -> Context mkContext assocs x = maybe err id . lookup x $ assocs where err = error $ "Could not find key: " ++ T.unpack x formatAllProjects :: [Project] -> T.Text formatAllProjects ps = let colors = cycle ["#EDEAE1", "white"] in T.unlines $ "" : map formatProject (zip colors ps) ++ ["
"] formatProject :: (String, Project) -> T.Text formatProject (bgcol, p) = T.pack $ printf " %s%ssource" bgcol (pPage p) (pName p) (pSynopsis p) (pSource p)