git.iko.soy/typeable/pandoc
on master help sign in
Writers.Shared: Changed metaToJSON a bit.

Now we handle metadata first, then variables. This way, meta-json variable will not contain representations of variables, only proper metadata.

commit03941ca9b0ce69140bb3ca1b4f0deef6d1c10ef3 authorJohn MacFarlane <jgm@berkeley.edu> dateSat 25 Feb 2017, 22:59 (10 years ago) parentbd5df46
1 file changed+17−4
src/Text/Pandoc/Writers/Shared.hs+17−4
src/Text/Pandoc/Writers/Shared.hs+17−4
@@ -32,6 +32,7 @@ module Text.Pandoc.Writers.Shared (
3232 metaToJSON
3333 , getField
3434 , setField
35+ , resetField
3536 , defField
3637 , tagWithAttrs
3738 , fixDisplayMath
@@ -65,13 +66,13 @@ metaToJSON :: Monad m
6566 -> m Value
6667metaToJSON opts blockWriter inlineWriter (Meta metamap)
6768 | isJust (writerTemplate opts) = do
68− let baseContext = foldl (\acc (x,y) -> setField x y acc) (Object H.empty)
69− $ writerVariables opts
7069 renderedMap <- Traversable.mapM
7170 (metaValueToJSON blockWriter inlineWriter)
7271 metamap
73− let metadata = M.foldWithKey defField baseContext renderedMap
74− return $ defField "meta-json" (toStringLazy $ encode metadata) metadata
72+ let metadata = M.foldWithKey defField (Object H.empty) renderedMap
73+ return $ foldl (\acc (x,y) -> resetField x y acc)
74+ (defField "meta-json" (toStringLazy $ encode metadata) metadata)
75+ (writerVariables opts)
7576 | otherwise = return (Object H.empty)
7677
7778metaValueToJSON :: Monad m
@@ -116,6 +117,18 @@ setField field val (Object hashmap) =
116117 _ -> toJSON [oldval, newval]
117118setField _ _ x = x
118119
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+
119132defField :: ToJSON a
120133 => String
121134 -> a