28 lines
742 B
Haskell
28 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
|