import Text.Pandoc.Definition import qualified Data.Map.Strict as Map import Data.Time import Text.Pandoc.JSON import Data.Text (unpack, pack) import Data.Char (toLower) import Misc main :: IO () main = toJSONFilter \(Pandoc (Meta m) body) -> do m' <- Map.alterF reformat "date" m pure $ Pandoc (Meta m') body reformat :: Maybe MetaValue -> IO (Maybe MetaValue) reformat Nothing = pure Nothing reformat (Just (toText -> Just txt)) = do -- extra '-'s in %-m and %-d to allow leading zeroes to be skipped date <- parseTimeM True defaultTimeLocale "%Y-%-m-%-d" $ unpack txt let str = formatTime defaultTimeLocale "%A %-e %B %Y" (date :: Day) pure $ Just $ MetaString $ pack $ map toLower str reformat (Just d) = fail $ "date is\n" <> show d <> "\nwanted a string"