diff options
-rw-r--r-- | pandoc.cabal | 4 | ||||
-rw-r--r-- | src/Text/Pandoc/Templates.hs | 28 |
2 files changed, 29 insertions, 3 deletions
diff --git a/pandoc.cabal b/pandoc.cabal index 4c4d020a0..185727ffe 100644 --- a/pandoc.cabal +++ b/pandoc.cabal @@ -195,10 +195,10 @@ Library Text.Pandoc.Writers.RST, Text.Pandoc.Writers.MediaWiki, Text.Pandoc.Writers.RTF, - Text.Pandoc.Writers.S5 + Text.Pandoc.Writers.S5, + Text.Pandoc.Templates Other-Modules: Text.Pandoc.XML, Text.Pandoc.TH, - Text.Pandoc.Templates Paths_pandoc Extensions: CPP, TemplateHaskell, FlexibleInstances Ghc-Options: -O2 -Wall 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 |