diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Text/Pandoc/Templates.hs | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/Text/Pandoc/Templates.hs b/src/Text/Pandoc/Templates.hs index 7cfb697cf..887696159 100644 --- a/src/Text/Pandoc/Templates.hs +++ b/src/Text/Pandoc/Templates.hs @@ -43,10 +43,36 @@ used if @variable_name@ has a non-null value, otherwise the else section is used. -} -module Text.Pandoc.Templates (renderTemplate) where +module Text.Pandoc.Templates (renderTemplate, getDefaultTemplate) where import Text.ParserCombinators.Parsec import Control.Monad (liftM) +import qualified Control.Exception as E (try, IOException) +import System.FilePath +import System.Directory +import Prelude hiding (readFile) +import System.IO.UTF8 (readFile) +import Paths_pandoc + +-- | Get the default template, either from the application's user data +-- directory (~/.pandoc on unix) or from the cabal data directory. +getDefaultTemplate :: String -> IO (Either E.IOException String) +getDefaultTemplate format = do + ut <- getTemplateFromUserDataDirectory format + case ut of + Right t -> return $ Right t + Left _ -> getTemplateFromCabalDataDirectory format + +getTemplateFromUserDataDirectory :: String -> IO (Either E.IOException String) +getTemplateFromUserDataDirectory format = E.try $ do + userDir <- getAppUserDataDirectory "pandoc" + let templatePath = userDir </> "templates" </> format <.> "template" + readFile templatePath + +getTemplateFromCabalDataDirectory :: String -> IO (Either E.IOException String) +getTemplateFromCabalDataDirectory format = E.try $ do + templatePath <- getDataFileName $ "templates" </> format <.> "template" + readFile templatePath -- | Renders a template renderTemplate :: [(String,String)] -- ^ Assoc. list of values for variables |