summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b>2009-12-31 01:11:30 +0000
committerfiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b>2009-12-31 01:11:30 +0000
commitfad620c0042fd55de44c0624c9ac8c726b6311c2 (patch)
treecbc10ec750f18c175ead4dbfd88bddbb45cb9363
parent9eb435d3c138e6ff9d057f7349a9d87d6a1975bc (diff)
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
-rw-r--r--src/Text/Pandoc/Shared.hs9
-rw-r--r--src/Text/Pandoc/Templates.hs19
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