git.iko.soy/typeable/pandoc
on master help sign in
Writers.Shared: Changed metaToJSON a bit.
03941caJohn MacFarlane
src/Text/Pandoc/Writers/Shared.hs+17−4
@@ -32,6 +32,7 @@ module Text.Pandoc.Writers.Shared (
32 metaToJSON
32 metaToJSON
33 , getField
33 , getField
34 , setField
34 , setField
35+ , resetField
35 , defField
36 , defField
36 , tagWithAttrs
37 , tagWithAttrs
37 , fixDisplayMath
38 , fixDisplayMath
@@ -65,13 +66,13 @@ metaToJSON :: Monad m
65 -> m Value
66 -> m Value
66metaToJSON opts blockWriter inlineWriter (Meta metamap)
67metaToJSON opts blockWriter inlineWriter (Meta metamap)
67 | isJust (writerTemplate opts) = do
68 | isJust (writerTemplate opts) = do
68− let baseContext = foldl (\acc (x,y) -> setField x y acc) (Object H.empty)
69− $ writerVariables opts
70 renderedMap <- Traversable.mapM
69 renderedMap <- Traversable.mapM
71 (metaValueToJSON blockWriter inlineWriter)
70 (metaValueToJSON blockWriter inlineWriter)
72 metamap
71 metamap
73− let metadata = M.foldWithKey defField baseContext renderedMap
72+ let metadata = M.foldWithKey defField (Object H.empty) renderedMap
73+ return $ foldl (\acc (x,y) -> resetField x y acc)
74− return $ defField "meta-json" (toStringLazy $ encode metadata) metadata
74+ (defField "meta-json" (toStringLazy $ encode metadata) metadata)
75+ (writerVariables opts)
75 | otherwise = return (Object H.empty)
76 | otherwise = return (Object H.empty)
76
77
77metaValueToJSON :: Monad m
78metaValueToJSON :: Monad m
@@ -116,6 +117,18 @@ setField field val (Object hashmap) =
116 _ -> toJSON [oldval, newval]
117 _ -> toJSON [oldval, newval]
117setField _ _ x = x
118setField _ _ x = x
118
119
120+resetField :: ToJSON a
121+ => String
122+ -> a
123+ -> Value
124+ -> Value
125+-- | Reset a field of a JSON object. If the field already has a value,
126+-- the new value replaces it.
127+-- This is a utility function to be used in preparing template contexts.
128+resetField field val (Object hashmap) =
129+ Object $ H.insert (T.pack field) (toJSON val) hashmap
130+resetField _ _ x = x
131+
119defField :: ToJSON a
132defField :: ToJSON a
120 => String
133 => String
121 -> a
134 -> a