@@ -161,26 +161,11 @@ options =
162 , Option "d" ["defaults"]
162 , Option "d" ["defaults"]
164− (\arg opt -> runIOorExplode $ do
164+ (\arg opt -> do
165− setVerbosity $ optVerbosity opt
166− let fp = if null (takeExtension arg)
165+ let fp' = if null (takeExtension arg)
167− then addExtension arg "yaml"
166+ then addExtension arg "yaml"
168− else arg
167+ else arg
169− dataDirs <- liftIO defaultUserDataDirs
168+ foldM applyDefaults opt [fp']
170− let fps = case optDataDir opt of
171− Nothing -> (fp : map (</> ("defaults" </> fp))
173− Just dd -> [fp, dd </> "defaults" </> fp]
174− fp' <- fromMaybe fp <$> findFile fps
175− inp <- readFileLazy fp'
176− case Y.decode1 inp of
177− Right (f :: Opt -> Opt) -> return $ f opt
178− Left (errpos, errmsg) -> throwError $
180− "Error parsing " ++ fp' ++ " line " ++
181− show (Y.posLine errpos) ++ " column " ++
182− show (Y.posColumn errpos) ++ ":\n" ++ errmsg
@@ -995,6 +980,25 @@ splitField s =
995 (k,_:v) -> (k,v)
980 (k,_:v) -> (k,v)
996 (k,[]) -> (k,"true")
981 (k,[]) -> (k,"true")
983+-- | Apply defaults from --defaults file.
984+applyDefaults :: Opt -> FilePath -> IO Opt
985+applyDefaults opt fp = runIOorExplode $ do
986+ setVerbosity $ optVerbosity opt
987+ dataDirs <- liftIO defaultUserDataDirs
988+ let fps = case optDataDir opt of
989+ Nothing -> (fp : map (</> ("defaults" </> fp))
991+ Just dd -> [fp, dd </> "defaults" </> fp]
992+ fp' <- fromMaybe fp <$> findFile fps
993+ inp <- readFileLazy fp'
994+ case Y.decode1 inp of
995+ Right (f :: Opt -> Opt) -> return $ f opt
996+ Left (errpos, errmsg) -> throwError $
998+ "Error parsing " ++ fp' ++ " line " ++
999+ show (Y.posLine errpos) ++ " column " ++
1000+ show (Y.posColumn errpos) ++ ":\n" ++ errmsg
998lookupHighlightStyle :: PandocMonad m => String -> m Style
1002lookupHighlightStyle :: PandocMonad m => String -> m Style
999lookupHighlightStyle s
1003lookupHighlightStyle s
1000 | takeExtension s == ".theme" = -- attempt to load KDE theme
1004 | takeExtension s == ".theme" = -- attempt to load KDE theme