module Text.Hakyll.Context
( ContextManipulation
, renderValue
, renderDate
) where
import qualified Data.Map as M
import qualified Data.ByteString.Lazy.Char8 as B
import System.Locale (defaultTimeLocale)
import System.FilePath (takeFileName)
import Text.Template (Context)
import Data.Time.Format (parseTime, formatTime)
import Data.Time.Clock (UTCTime)
import Data.Maybe (fromMaybe)
import Text.Hakyll.Regex (substitute)
type ContextManipulation = Context -> Context
renderValue :: String
-> String
-> (B.ByteString -> B.ByteString)
-> ContextManipulation
renderValue src dst f context = case M.lookup (B.pack src) context of
Nothing -> context
(Just value) -> M.insert (B.pack dst) (f value) context
renderDate :: String
-> String
-> String
-> ContextManipulation
renderDate key format defaultValue context =
M.insert (B.pack key) (B.pack value) context
where value = fromMaybe defaultValue pretty
pretty = do filePath <- M.lookup (B.pack "path") context
let dateString = substitute "^([0-9]*-[0-9]*-[0-9]*).*" "\\1"
(takeFileName $ B.unpack filePath)
time <- parseTime defaultTimeLocale
"%Y-%m-%d"
dateString :: Maybe UTCTime
return $ formatTime defaultTimeLocale format time