22 lines
657 B
Haskell
22 lines
657 B
Haskell
import Text.Pandoc.Definition
|
|
import qualified Data.Map.Strict as Map
|
|
import Text.Pandoc.JSON
|
|
import Data.Text (Text)
|
|
import Misc
|
|
|
|
main :: IO ()
|
|
main = toJSONFilter \(Pandoc (Meta m) body) -> do
|
|
m' <- Map.alterF addSlugs "tags" m
|
|
pure $ Pandoc (Meta m') body
|
|
|
|
addSlugs :: Maybe MetaValue -> IO (Maybe MetaValue)
|
|
addSlugs Nothing = pure Nothing
|
|
addSlugs (Just (toTextList -> Just tags)) =
|
|
pure $ Just $ MetaList $ map addSlug1 tags
|
|
addSlugs (Just t) = fail $
|
|
"'tags' is\n" <> show t <> "\nwanted a list of strings"
|
|
|
|
addSlug1 :: Text -> MetaValue
|
|
addSlug1 tag = MetaMap $ Map.fromList
|
|
[("name", MetaString tag), ("slug", MetaString $ makeSlug tag)]
|