@@ -80,6 +80,7 @@ import Codec.Archive.Zip (Archive, fromArchive, emptyArchive)
80import Data.Unique (hashUnique)
80import Data.Unique (hashUnique)
81import qualified Data.Unique as IO (newUnique)
81import qualified Data.Unique as IO (newUnique)
82import qualified Text.Pandoc.Shared as IO ( readDataFile
82import qualified Text.Pandoc.Shared as IO ( readDataFile
83+ , readDefaultDataFile
83 , openURL )
84 , openURL )
84import qualified Text.Pandoc.UTF8 as UTF8
85import qualified Text.Pandoc.UTF8 as UTF8
85import Text.Pandoc.Compat.Time (UTCTime)
86import Text.Pandoc.Compat.Time (UTCTime)
@@ -152,6 +153,8 @@ class (Functor m, Applicative m, Monad m, MonadError PandocError m)
152 -- | Read the strict ByteString contents from a file path,
153 -- | Read the strict ByteString contents from a file path,
153 -- raising an error on failure.
154 -- raising an error on failure.
154 readFileStrict :: FilePath -> m B.ByteString
155 readFileStrict :: FilePath -> m B.ByteString
156+ -- | Read file from from Cabal data directory.
157+ readDefaultDataFile :: FilePath -> m B.ByteString
155 -- | Read file from specified user data directory or,
158 -- | Read file from specified user data directory or,
156 -- if not found there, from Cabal data directory.
159 -- if not found there, from Cabal data directory.
157 readDataFile :: Maybe FilePath -> FilePath -> m B.ByteString
160 readDataFile :: Maybe FilePath -> FilePath -> m B.ByteString
@@ -326,6 +329,7 @@ instance PandocMonad PandocIO where
326 Left e -> throwError $ PandocHttpError u e
329 Left e -> throwError $ PandocHttpError u e
327 readFileLazy s = liftIOError BL.readFile s
330 readFileLazy s = liftIOError BL.readFile s
328 readFileStrict s = liftIOError B.readFile s
331 readFileStrict s = liftIOError B.readFile s
332+ readDefaultDataFile fname = liftIOError IO.readDefaultDataFile fname
329 readDataFile mfp fname = liftIOError (IO.readDataFile mfp) fname
333 readDataFile mfp fname = liftIOError (IO.readDataFile mfp) fname
330 glob = liftIO . IO.glob
334 glob = liftIO . IO.glob
331 getModificationTime fp = liftIOError IO.getModificationTime fp
335 getModificationTime fp = liftIOError IO.getModificationTime fp
@@ -602,11 +606,11 @@ instance PandocMonad PandocPure where
602 case infoFileContents <$> getFileInfo fp fps of
606 case infoFileContents <$> getFileInfo fp fps of
603 Just bs -> return bs
607 Just bs -> return bs
604 Nothing -> throwError $ PandocResourceNotFound fp
608 Nothing -> throwError $ PandocResourceNotFound fp
605− readDataFile Nothing "reference.docx" =
609+ readDefaultDataFile "reference.docx" =
606 (B.concat . BL.toChunks . fromArchive) <$> getsPureState stReferenceDocx
610 (B.concat . BL.toChunks . fromArchive) <$> getsPureState stReferenceDocx
607− readDataFile Nothing "reference.odt" =
611+ readDefaultDataFile "reference.odt" =
608 (B.concat . BL.toChunks . fromArchive) <$> getsPureState stReferenceODT
612 (B.concat . BL.toChunks . fromArchive) <$> getsPureState stReferenceODT
609− readDataFile Nothing fname = do
613+ readDefaultDataFile fname = do
610 let fname' = if fname == "MANUAL.txt" then fname else "data" </> fname
614 let fname' = if fname == "MANUAL.txt" then fname else "data" </> fname
611 readFileStrict fname'
615 readFileStrict fname'
612 readDataFile (Just userDir) fname = do
616 readDataFile (Just userDir) fname = do
@@ -614,6 +618,7 @@ instance PandocMonad PandocPure where
614 case infoFileContents <$> getFileInfo (userDir </> fname) userDirFiles of
618 case infoFileContents <$> getFileInfo (userDir </> fname) userDirFiles of
615 Just bs -> return bs
619 Just bs -> return bs
616 Nothing -> readDataFile Nothing fname
620 Nothing -> readDataFile Nothing fname
621+ readDataFile Nothing fname = readDefaultDataFile fname
618 glob s = do
623 glob s = do
619 FileTree ftmap <- getsPureState stFiles
624 FileTree ftmap <- getsPureState stFiles
@@ -640,6 +645,7 @@ instance PandocMonad m => PandocMonad (ParsecT s st m) where
640 openURL = lift . openURL
645 openURL = lift . openURL
641 readFileLazy = lift . readFileLazy
646 readFileLazy = lift . readFileLazy
642 readFileStrict = lift . readFileStrict
647 readFileStrict = lift . readFileStrict
648+ readDefaultDataFile = lift . readDefaultDataFile
643 readDataFile mbuserdir = lift . readDataFile mbuserdir
649 readDataFile mbuserdir = lift . readDataFile mbuserdir
644 glob = lift . glob
650 glob = lift . glob
645 getModificationTime = lift . getModificationTime
651 getModificationTime = lift . getModificationTime
@@ -668,6 +674,7 @@ instance PandocMonad m => PandocMonad (ReaderT r m) where
668 openURL = lift . openURL
674 openURL = lift . openURL
669 readFileLazy = lift . readFileLazy
675 readFileLazy = lift . readFileLazy
670 readFileStrict = lift . readFileStrict
676 readFileStrict = lift . readFileStrict
677+ readDefaultDataFile = lift . readDefaultDataFile
671 readDataFile mbuserdir = lift . readDataFile mbuserdir
678 readDataFile mbuserdir = lift . readDataFile mbuserdir
672 glob = lift . glob
679 glob = lift . glob
673 getModificationTime = lift . getModificationTime
680 getModificationTime = lift . getModificationTime
@@ -684,6 +691,7 @@ instance (PandocMonad m, Monoid w) => PandocMonad (WriterT w m) where
684 openURL = lift . openURL
691 openURL = lift . openURL
685 readFileLazy = lift . readFileLazy
692 readFileLazy = lift . readFileLazy
686 readFileStrict = lift . readFileStrict
693 readFileStrict = lift . readFileStrict
694+ readDefaultDataFile = lift . readDefaultDataFile
687 readDataFile mbuserdir = lift . readDataFile mbuserdir
695 readDataFile mbuserdir = lift . readDataFile mbuserdir
688 glob = lift . glob
696 glob = lift . glob
689 getModificationTime = lift . getModificationTime
697 getModificationTime = lift . getModificationTime
@@ -700,6 +708,7 @@ instance (PandocMonad m, Monoid w) => PandocMonad (RWST r w st m) where
700 openURL = lift . openURL
708 openURL = lift . openURL
701 readFileLazy = lift . readFileLazy
709 readFileLazy = lift . readFileLazy
702 readFileStrict = lift . readFileStrict
710 readFileStrict = lift . readFileStrict
711+ readDefaultDataFile = lift . readDefaultDataFile
703 readDataFile mbuserdir = lift . readDataFile mbuserdir
712 readDataFile mbuserdir = lift . readDataFile mbuserdir
704 glob = lift . glob
713 glob = lift . glob
705 getModificationTime = lift . getModificationTime
714 getModificationTime = lift . getModificationTime
@@ -716,6 +725,7 @@ instance PandocMonad m => PandocMonad (StateT st m) where
716 openURL = lift . openURL
725 openURL = lift . openURL
717 readFileLazy = lift . readFileLazy
726 readFileLazy = lift . readFileLazy
718 readFileStrict = lift . readFileStrict
727 readFileStrict = lift . readFileStrict
728+ readDefaultDataFile = lift . readDefaultDataFile
719 readDataFile mbuserdir = lift . readDataFile mbuserdir
729 readDataFile mbuserdir = lift . readDataFile mbuserdir
720 glob = lift . glob
730 glob = lift . glob
721 getModificationTime = lift . getModificationTime
731 getModificationTime = lift . getModificationTime