From 2b1c01059974bbfdfc50f26c4e3c815742385de1 Mon Sep 17 00:00:00 2001 From: fiddlosopher Date: Thu, 31 Dec 2009 01:10:49 +0000 Subject: [PATCH] Added getDefaultTemplate to Templates. Exposed Templates module in API. git-svn-id: https://pandoc.googlecode.com/svn/trunk@1688 788f1e2b-df1e-0410-8736-df70ead52e1b --- pandoc.cabal | 4 ++-- 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