@@ -76,7 +76,7 @@ import qualified System.IO as IO (Newline (..))
7676import System.IO.Error (isDoesNotExistError)
7777import Text.Pandoc
7878import Text.Pandoc.BCP47 (Lang (..), parseBCP47)
79−import Text.Pandoc.Builder (setMeta)
79+import Text.Pandoc.Builder (setMeta, deleteMeta)
8080import Text.Pandoc.Highlighting (highlightingStyles)
8181import Text.Pandoc.Lua (LuaException (..), runLuaFilter)
8282import Text.Pandoc.PDF (makePDF)
@@ -494,7 +494,7 @@ convertWithOpts opts = do
494494 ( (if isJust (optExtractMedia opts)
495495 then fillMediaBag
496496 else return)
497− >=> return . flip (foldr addMetadata) metadata
497+ >=> return . addMetadata metadata
498498 >=> applyLuaFilters datadir (optLuaFilters opts) format
499499 >=> maybe return extractMedia (optExtractMedia opts)
500500 >=> applyTransforms transforms
@@ -722,8 +722,11 @@ defaultOpts = Opt
722722 , optStripComments = False
723723 }
724724
725−addMetadata :: (String, String) -> Pandoc -> Pandoc
726−addMetadata (k, v) (Pandoc meta bs) = Pandoc meta' bs
725+addMetadata :: [(String, String)] -> Pandoc -> Pandoc
726+addMetadata kvs pdc = foldr addMeta (removeMetaKeys kvs pdc) kvs
727+
728+addMeta :: (String, String) -> Pandoc -> Pandoc
729+addMeta (k, v) (Pandoc meta bs) = Pandoc meta' bs
727730 where meta' = case lookupMeta k meta of
728731 Nothing -> setMeta k v' meta
729732 Just (MetaList xs) ->
@@ -731,6 +734,9 @@ addMetadata (k, v) (Pandoc meta bs) = Pandoc meta' bs
731734 Just x -> setMeta k (MetaList [x, v']) meta
732735 v' = readMetaValue v
733736
737+removeMetaKeys :: [(String,String)] -> Pandoc -> Pandoc
738+removeMetaKeys kvs pdc = foldr (deleteMeta . fst) pdc kvs
739+
734740readMetaValue :: String -> MetaValue
735741readMetaValue s = case decode (UTF8.fromString s) of
736742 Just (Yaml.String t) -> MetaString $ T.unpack t