From fad620c0042fd55de44c0624c9ac8c726b6311c2 Mon Sep 17 00:00:00 2001 From: fiddlosopher Date: Thu, 31 Dec 2009 01:11:30 +0000 Subject: Changed readDataFile to look first in user data directory. This way all of the pandoc data files can be overridden by user files. git-svn-id: https://pandoc.googlecode.com/svn/trunk@1693 788f1e2b-df1e-0410-8736-df70ead52e1b --- src/Text/Pandoc/Shared.hs | 9 ++++++--- src/Text/Pandoc/Templates.hs | 19 +------------------ 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/src/Text/Pandoc/Shared.hs b/src/Text/Pandoc/Shared.hs index e913d5d0b..ddce396fb 100644 --- a/src/Text/Pandoc/Shared.hs +++ b/src/Text/Pandoc/Shared.hs @@ -118,13 +118,13 @@ import Data.Char ( toLower, toUpper, ord, isLower, isUpper, isAlpha, import Data.List ( find, isPrefixOf, intercalate ) import Network.URI ( parseURI, URI (..), isAllowedInURI ) import System.Directory +import System.FilePath ( FilePath, () ) import Prelude hiding ( putStrLn, writeFile, readFile, getContents ) import System.IO.UTF8 import Data.Generics import qualified Control.Monad.State as S import Control.Monad (join) import Paths_pandoc (getDataFileName) - -- -- List processing -- @@ -1033,6 +1033,9 @@ inDirectory path action = do setCurrentDirectory oldDir return result --- | Read file from the Cabal data directory. +-- | Read file from user data directory or, if not found there, from +-- Cabal data directory. On unix the user data directory is @$HOME/.pandoc@. readDataFile :: FilePath -> IO String -readDataFile fname = getDataFileName fname >>= readFile +readDataFile fname = do + userDir <- getAppUserDataDirectory "pandoc" + catch (readFile $ userDir fname) (\_ -> getDataFileName fname >>= readFile) diff --git a/src/Text/Pandoc/Templates.hs b/src/Text/Pandoc/Templates.hs index 75989fbcd..5c21cc8be 100644 --- a/src/Text/Pandoc/Templates.hs +++ b/src/Text/Pandoc/Templates.hs @@ -49,11 +49,7 @@ 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 Text.Pandoc.Shared (readDataFile) -import Paths_pandoc -- | Get the default template, either from the application's user data -- directory (~/.pandoc on unix) or from the cabal data directory. @@ -62,21 +58,8 @@ getDefaultTemplate "native" = return $ Right "" getDefaultTemplate "odt" = getDefaultTemplate "opendocument" getDefaultTemplate format = do let format' = takeWhile (/='+') format -- strip off "+lhs" if present - ut <- getTemplateFromUserDataDirectory format' - case ut of - Right t -> return $ Right t - Left _ -> getTemplateFromCabalDataDirectory format' + E.try $ readDataFile $ "templates" format' <.> "template" -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 $ - readDataFile $ "templates" format <.> "template" - -- | Renders a template renderTemplate :: [(String,String)] -- ^ Assoc. list of values for variables -> String -- ^ Template -- cgit v1.2.3