27 lines
877 B
Haskell
27 lines
877 B
Haskell
import Text.Pandoc.Definition
|
|
import qualified Data.Map.Strict as Map
|
|
import Text.Pandoc.JSON
|
|
import Misc
|
|
import Control.Monad.Writer
|
|
import Data.Monoid
|
|
|
|
-- | replaces the @date@ field, which starts in YYYY-MM-DD format, with
|
|
-- something prettier
|
|
main :: IO ()
|
|
main = toJSONFilter \(Meta m) -> do
|
|
(res', mdate) <- run $ Map.alterF reformat' "date" m
|
|
let res = maybe m (\d -> Map.insert "date-iso" d res') mdate
|
|
pure $ Meta res
|
|
|
|
type T = WriterT (Alt Maybe MetaValue) IO
|
|
|
|
run :: T a -> IO (a, Maybe MetaValue)
|
|
run = fmap (fmap getAlt) . runWriterT
|
|
|
|
reformat' :: Maybe MetaValue -> T (Maybe MetaValue)
|
|
reformat' Nothing = pure Nothing
|
|
reformat' (Just d) = do tell $ pure d; Just <$> reformat d
|
|
|
|
reformat :: MetaValue -> T MetaValue
|
|
reformat (toText -> Just txt) = MetaString . showDate <$> parseIsoDate txt
|
|
reformat d = fail $ "date is\n" <> show d <> "\nwanted a string"
|