git.iko.soy/typeable/pandoc
on master help sign in
Text.Pandoc.Class: add insertInFileTree (API change).
ddd6a89John MacFarlane
src/Text/Pandoc/Class.hs+13−7
@@ -81,6 +81,7 @@ module Text.Pandoc.Class ( PandocMonad(..)
81 , FileTree(..)
81 , FileTree(..)
82 , FileInfo(..)
82 , FileInfo(..)
83 , addToFileTree
83 , addToFileTree
84+ , insertInFileTree
84 , runIO
85 , runIO
85 , runIOorExplode
86 , runIOorExplode
86 , runPure
87 , runPure
@@ -141,7 +142,7 @@ import qualified System.Environment as IO (lookupEnv)
141import System.FilePath.Glob (match, compile)
142import System.FilePath.Glob (match, compile)
142import System.Directory (createDirectoryIfMissing, getDirectoryContents,
143import System.Directory (createDirectoryIfMissing, getDirectoryContents,
143 doesDirectoryExist)
144 doesDirectoryExist)
144−import System.FilePath ((</>), (<.>), takeDirectory,
145+import System.FilePath ((</>), (<.>), takeDirectory, makeRelative,
145 takeExtension, dropExtension, isRelative, normalise)
146 takeExtension, dropExtension, isRelative, normalise)
146import qualified System.FilePath.Glob as IO (glob)
147import qualified System.FilePath.Glob as IO (glob)
147import qualified System.Directory as IO (getModificationTime)
148import qualified System.Directory as IO (getModificationTime)
@@ -912,12 +913,13 @@ newtype FileTree = FileTree {unFileTree :: M.Map FilePath FileInfo}
912 deriving (Monoid)
913 deriving (Monoid)
913
914
914getFileInfo :: FilePath -> FileTree -> Maybe FileInfo
915getFileInfo :: FilePath -> FileTree -> Maybe FileInfo
915−getFileInfo fp tree = M.lookup fp $ unFileTree tree
916+getFileInfo fp tree =
917+ M.lookup (makeRelative "." fp) (unFileTree tree)
916
918
917-- | Add the specified file to the FileTree. If file
919-- | Add the specified file to the FileTree. If file
918-- is a directory, add its contents recursively.
920-- is a directory, add its contents recursively.
919addToFileTree :: FileTree -> FilePath -> IO FileTree
921addToFileTree :: FileTree -> FilePath -> IO FileTree
920−addToFileTree (FileTree treemap) fp = do
922+addToFileTree tree fp = do
921 isdir <- doesDirectoryExist fp
923 isdir <- doesDirectoryExist fp
922 if isdir
924 if isdir
923 then do -- recursively add contents of directories
925 then do -- recursively add contents of directories
@@ -925,13 +927,17 @@ addToFileTree (FileTree treemap) fp = do
925 isSpecial "." = True
927 isSpecial "." = True
926 isSpecial _ = False
928 isSpecial _ = False
927 fs <- (map (fp </>) . filter (not . isSpecial)) <$> getDirectoryContents fp
929 fs <- (map (fp </>) . filter (not . isSpecial)) <$> getDirectoryContents fp
928− foldM addToFileTree (FileTree treemap) fs
930+ foldM addToFileTree tree fs
929 else do
931 else do
930 contents <- B.readFile fp
932 contents <- B.readFile fp
931 mtime <- IO.getModificationTime fp
933 mtime <- IO.getModificationTime fp
932− return $ FileTree $
933− M.insert fp FileInfo{ infoFileMTime = mtime
934+ return $ insertInFileTree fp FileInfo{ infoFileMTime = mtime
934− , infoFileContents = contents } treemap
935+ , infoFileContents = contents } tree
936+
937+-- | Insert an ersatz file into the 'FileTree'.
938+insertInFileTree :: FilePath -> FileInfo -> FileTree -> FileTree
939+insertInFileTree fp info (FileTree treemap) =
940+ FileTree $ M.insert (makeRelative "." fp) info treemap
935
941
936newtype PandocPure a = PandocPure {
942newtype PandocPure a = PandocPure {
937 unPandocPure :: ExceptT PandocError
943 unPandocPure :: ExceptT PandocError
test/Tests/Readers/Org/Directive.hs+2−7
@@ -1,7 +1,6 @@
1{-# LANGUAGE OverloadedStrings #-}
1{-# LANGUAGE OverloadedStrings #-}
2module Tests.Readers.Org.Directive (tests) where
2module Tests.Readers.Org.Directive (tests) where
3
3
4−import Control.Arrow (second)
5import Data.Time (UTCTime (UTCTime), secondsToDiffTime)
4import Data.Time (UTCTime (UTCTime), secondsToDiffTime)
6import Data.Time.Calendar (Day (ModifiedJulianDay))
5import Data.Time.Calendar (Day (ModifiedJulianDay))
7import Test.Tasty (TestTree, testGroup)
6import Test.Tasty (TestTree, testGroup)
@@ -10,7 +9,6 @@ import Tests.Readers.Org.Shared ((=:), tagSpan)
10import Text.Pandoc
9import Text.Pandoc
11import Text.Pandoc.Builder
10import Text.Pandoc.Builder
12import qualified Data.ByteString as BS
11import qualified Data.ByteString as BS
13−import qualified Data.Map as Map
14import qualified Data.Text as T
12import qualified Data.Text as T
15
13
16testWithFiles :: (ToString c)
14testWithFiles :: (ToString c)
@@ -31,11 +29,8 @@ orgWithFiles fileDefs input =
31files :: [(FilePath, BS.ByteString)] -> FileTree
29files :: [(FilePath, BS.ByteString)] -> FileTree
32files fileDefs =
30files fileDefs =
33 let dummyTime = UTCTime (ModifiedJulianDay 125) (secondsToDiffTime 0)
31 let dummyTime = UTCTime (ModifiedJulianDay 125) (secondsToDiffTime 0)
34− fileInfo content = FileInfo
32+ in foldr (\(fp, bs) -> insertInFileTree fp (FileInfo dummyTime bs))
35− { infoFileMTime = dummyTime
33+ mempty fileDefs
36− , infoFileContents = content
37− }
38− in FileTree (Map.fromList (map (second fileInfo) fileDefs))
39
34
40tests :: [TestTree]
35tests :: [TestTree]
41tests =
36tests =