@@ -102,7 +102,8 @@ import qualified Data.ByteString as B
102102import qualified Data.ByteString.Lazy as BL
103103import qualified System.Environment as IO (lookupEnv)
104104import System.FilePath.Glob (match, compile)
105−import System.Directory (createDirectoryIfMissing)
105+import System.Directory (createDirectoryIfMissing, listDirectory,
106+ doesDirectoryExist)
106107import System.FilePath ((</>), (<.>), takeDirectory,
107108 takeExtension, dropExtension, isRelative, normalise)
108109import qualified System.FilePath.Glob as IO (glob)
@@ -478,13 +479,21 @@ newtype FileTree = FileTree {unFileTree :: M.Map FilePath FileInfo}
478479getFileInfo :: FilePath -> FileTree -> Maybe FileInfo
479480getFileInfo fp tree = M.lookup fp $ unFileTree tree
480481
482+-- | Add the specified file to the FileTree. If file
483+-- is a directory, add its contents recursively.
481484addToFileTree :: FileTree -> FilePath -> IO FileTree
482485addToFileTree (FileTree treemap) fp = do
483− contents <- B.readFile fp
484− mtime <- IO.getModificationTime fp
485− return $ FileTree $
486− M.insert fp FileInfo{ infoFileMTime = mtime
487− , infoFileContents = contents } treemap
486+ isdir <- doesDirectoryExist fp
487+ if isdir
488+ then do -- recursively add contents of directories
489+ fs <- map (fp </>) <$> listDirectory fp
490+ foldM addToFileTree (FileTree treemap) fs
491+ else do
492+ contents <- B.readFile fp
493+ mtime <- IO.getModificationTime fp
494+ return $ FileTree $
495+ M.insert fp FileInfo{ infoFileMTime = mtime
496+ , infoFileContents = contents } treemap
488497
489498newtype PandocPure a = PandocPure {
490499 unPandocPure :: ExceptT PandocError