parsing: read files in universal newline mode
Line endings other than the unix style, are now accepted in journal and rules files.
This commit is contained in:
		
							parent
							
								
									7b6a59123d
								
							
						
					
					
						commit
						af5c0e80e0
					
				| @ -63,7 +63,6 @@ import System.Time (getClockTime) | ||||
| import Hledger.Data | ||||
| import Hledger.Utils | ||||
| import Prelude hiding (readFile) | ||||
| import Hledger.Utils.UTF8IOCompat (readFile) | ||||
| 
 | ||||
| 
 | ||||
| -- standard reader exports | ||||
| @ -196,7 +195,7 @@ includedirective = do | ||||
|                 Right (ju,_) -> combineJournalUpdates [return $ journalAddFile (filepath,txt), ju] `catchError` (throwError . (inIncluded ++)) | ||||
|                 Left err     -> throwError $ inIncluded ++ show err | ||||
|       where readFileOrError pos fp = | ||||
|                 ErrorT $ liftM Right (readFile fp) `C.catch` | ||||
|                 ErrorT $ liftM Right (readFile' fp) `C.catch` | ||||
|                   \e -> return $ Left $ printf "%s reading %s:\n%s" (show pos) fp (show (e::C.IOException)) | ||||
| 
 | ||||
| journalAddFile :: (FilePath,String) -> Journal -> Journal | ||||
|  | ||||
| @ -40,6 +40,7 @@ import Data.Tree | ||||
| import Debug.Trace | ||||
| import System.Directory (getHomeDirectory) | ||||
| import System.FilePath((</>), isRelative) | ||||
| import System.IO | ||||
| import Test.HUnit | ||||
| import Text.ParserCombinators.Parsec | ||||
| import Text.Printf | ||||
| @ -490,3 +491,10 @@ expandPath curdir p = (if isRelative p then (curdir </>) else id) `liftM` expand | ||||
| firstJust ms = case dropWhile (==Nothing) ms of | ||||
|     [] -> Nothing | ||||
|     (md:_) -> md | ||||
| 
 | ||||
| -- | Read a file in universal newline mode, handling whatever newline convention it may contain. | ||||
| readFile' :: FilePath -> IO String | ||||
| readFile' name =  do | ||||
|   h <- openFile name ReadMode | ||||
|   hSetNewlineMode h universalNewlineMode | ||||
|   hGetContents h | ||||
|  | ||||
| @ -141,7 +141,7 @@ openBrowserOn u = trybrowsers browsers u | ||||
| -- indicating whether we did anything. | ||||
| writeFileWithBackupIfChanged :: FilePath -> String -> IO Bool | ||||
| writeFileWithBackupIfChanged f t = do | ||||
|   s <- readFile f | ||||
|   s <- readFile' f | ||||
|   if t == s then return False | ||||
|             else backUpFile f >> writeFile f t >> return True | ||||
| 
 | ||||
| @ -151,7 +151,7 @@ writeFileWithBackup :: FilePath -> String -> IO () | ||||
| writeFileWithBackup f t = backUpFile f >> writeFile f t | ||||
| 
 | ||||
| readFileStrictly :: FilePath -> IO String | ||||
| readFileStrictly f = readFile f >>= \s -> C.evaluate (length s) >> return s | ||||
| readFileStrictly f = readFile' f >>= \s -> C.evaluate (length s) >> return s | ||||
| 
 | ||||
| -- | Back up this file with a (incrementing) numbered suffix, or give an error. | ||||
| backUpFile :: FilePath -> IO () | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user