@@ -27,7 +27,8 @@ module Text.Pandoc.App.Opt (
28import Control.Monad.Except (MonadIO, liftIO, throwError, (>=>), foldM)
28import Control.Monad.Except (MonadIO, liftIO, throwError, (>=>), foldM)
29import Control.Monad.State.Strict (StateT, modify, gets)
29import Control.Monad.State.Strict (StateT, modify, gets)
30−import System.FilePath ( addExtension, (</>), takeExtension )
30+import System.FilePath ( addExtension, (</>), takeExtension, takeDirectory )
31+import System.Directory ( canonicalizePath )
31import Data.Char (isLower, toLower)
32import Data.Char (isLower, toLower)
32import Data.Maybe (fromMaybe)
33import Data.Maybe (fromMaybe)
33import GHC.Generics hiding (Meta)
34import GHC.Generics hiding (Meta)
@@ -189,7 +190,8 @@ instance (PandocMonad m, MonadIO m)
189 toText _ = ""
190 toText _ = ""
190 parseYAML n = failAtNode n "Expected a mapping"
191 parseYAML n = failAtNode n "Expected a mapping"
192−resolveVarsInOpt :: (PandocMonad m, MonadIO m) => Opt -> m Opt
193+resolveVarsInOpt :: forall m. (PandocMonad m, MonadIO m)
194+ => Opt -> StateT DefaultsState m Opt
193resolveVarsInOpt
195resolveVarsInOpt
195 { optTemplate = oTemplate
197 { optTemplate = oTemplate
@@ -263,6 +265,7 @@ resolveVarsInOpt
268+ resolveVars :: FilePath -> StateT DefaultsState m FilePath
266 resolveVars [] = return []
269 resolveVars [] = return []
267 resolveVars ('$':'{':xs) =
270 resolveVars ('$':'{':xs) =
268 let (ys, zs) = break (=='}') xs
271 let (ys, zs) = break (=='}') xs
@@ -272,6 +275,12 @@ resolveVarsInOpt
272 val <- lookupEnv' ys
275 val <- lookupEnv' ys
273 (val ++) <$> resolveVars (drop 1 zs)
276 (val ++) <$> resolveVars (drop 1 zs)
274 resolveVars (c:cs) = (c:) <$> resolveVars cs
277 resolveVars (c:cs) = (c:) <$> resolveVars cs
278+ lookupEnv' :: String -> StateT DefaultsState m String
280+ mbCurDefaults <- gets curDefaults
282+ (fmap takeDirectory . liftIO . canonicalizePath)
275 lookupEnv' "USERDATA" = do
284 lookupEnv' "USERDATA" = do
276 mbodatadir <- mapM resolveVars oDataDir
285 mbodatadir <- mapM resolveVars oDataDir
277 mbdatadir <- getUserDataDir
286 mbdatadir <- getUserDataDir