- do all filters in one go - do all post lists in one run of the program - only write files if they are changed (so make repeats less work) - simplify pandoc command for meta pages (this might not actually make a difference)
27 lines
742 B
Haskell
27 lines
742 B
Haskell
module NiceDate (niceDate) where
|
|
|
|
import Text.Pandoc.Definition
|
|
import qualified Data.Map.Strict as Map
|
|
import Misc
|
|
import Control.Monad.Writer
|
|
import Data.Monoid
|
|
|
|
niceDate :: Meta -> Meta
|
|
niceDate (Meta m) =
|
|
let (res', mdate) = run $ Map.alterF reformat' "date" m
|
|
res = maybe m (\d -> Map.insert "date-iso" d res') mdate in
|
|
Meta res
|
|
|
|
type T = Writer (Alt Maybe MetaValue)
|
|
|
|
run :: T a -> (a, Maybe MetaValue)
|
|
run = fmap getAlt . runWriter
|
|
|
|
reformat' :: Maybe MetaValue -> T (Maybe MetaValue)
|
|
reformat' Nothing = pure Nothing
|
|
reformat' (Just d) = do tell $ pure d; pure $ reformat d
|
|
|
|
reformat :: MetaValue -> Maybe MetaValue
|
|
reformat (toText -> Just txt) =
|
|
MetaString . showDate <$> parseIsoDate txt
|
|
reformat _ = Nothing
|