hacking in more date parsing.. today/tomorrow/yesterday
This commit is contained in:
		
							parent
							
								
									6c88197c6a
								
							
						
					
					
						commit
						4d49177117
					
				| @ -492,8 +492,8 @@ and maybe some others: | |||||||
| > 10/1 | > 10/1 | ||||||
| > 21 | > 21 | ||||||
| > october, oct | > october, oct | ||||||
| > this/next/last week/day/month/quarter/year |  | ||||||
| > yesterday, today, tomorrow | > yesterday, today, tomorrow | ||||||
|  | > this/next/last week/day/month/quarter/year | ||||||
| 
 | 
 | ||||||
| Note: only recognises month names in lowercase. | Note: only recognises month names in lowercase. | ||||||
| -} | -} | ||||||
| @ -507,9 +507,9 @@ smartdate = do | |||||||
|              ,try d |              ,try d | ||||||
|              ,try month |              ,try month | ||||||
|              ,try mon |              ,try mon | ||||||
| --              ,try today |              ,try parsetoday | ||||||
| --              ,try yesterday |              ,try yesterday | ||||||
| --              ,try tomorrow |              ,try tomorrow | ||||||
| --              ,try thiswhatever | --              ,try thiswhatever | ||||||
| --              ,try nextwhatever | --              ,try nextwhatever | ||||||
| --              ,try lastwhatever | --              ,try lastwhatever | ||||||
| @ -577,6 +577,12 @@ mon = do | |||||||
|   let i = maybe 0 (+1) $ (map toLower m) `elemIndex` mons |   let i = maybe 0 (+1) $ (map toLower m) `elemIndex` mons | ||||||
|   return ("",show i,"1") |   return ("",show i,"1") | ||||||
| 
 | 
 | ||||||
|  | parsetoday = string "today" >> return ("","","today") | ||||||
|  | yesterday = string "yesterday" >> return ("","","yesterday") | ||||||
|  | tomorrow = string "tomorrow" >> return ("","","tomorrow") | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| type TransactionMatcher = Transaction -> Bool | type TransactionMatcher = Transaction -> Bool | ||||||
| 
 | 
 | ||||||
| -- | Parse a --display expression which is a simple date predicate, | -- | Parse a --display expression which is a simple date predicate, | ||||||
|  | |||||||
							
								
								
									
										30
									
								
								Options.hs
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								Options.hs
									
									
									
									
									
								
							| @ -97,26 +97,32 @@ parseArguments = do | |||||||
| -- explicit ones, based on today's date. | -- explicit ones, based on today's date. | ||||||
| fixDates :: [Opt] -> IO [Opt] | fixDates :: [Opt] -> IO [Opt] | ||||||
| fixDates opts = do | fixDates opts = do | ||||||
|   ds <- today >>= return . dateComponents |   t <- today | ||||||
|   return $ map (fixopt ds) opts |   return $ map (fixopt t) opts | ||||||
|   where |   where | ||||||
|     fixopt ds (Begin s)   = Begin $ fixdate ds s |     fixopt t (Begin s)   = Begin $ fixdate t s | ||||||
|     fixopt ds (End s)     = End $ fixdate ds s |     fixopt t (End s)     = End $ fixdate t s | ||||||
|     fixopt ds (Display s) = -- hacky |     fixopt t (Display s) = -- hacky | ||||||
|         Display $ gsubRegexPRBy "\\[.+?\\]" fixbracketeddate s |         Display $ gsubRegexPRBy "\\[.+?\\]" fixbracketeddate s | ||||||
|         where fixbracketeddate s = "[" ++ (fixdate ds $ init $ tail s) ++ "]" |         where fixbracketeddate s = "[" ++ (fixdate t $ init $ tail s) ++ "]" | ||||||
|     fixopt _ o            = o |     fixopt _ o            = o | ||||||
| 
 | 
 | ||||||
| -- | Convert a fuzzy date string to an explicit yyyy/mm/dd date, using the | -- | Convert a fuzzy date string to an explicit yyyy/mm/dd date, using the | ||||||
| -- provided today's date for defaults. | -- provided today's date for defaults. | ||||||
| fixdate :: (Integer,Int,Int) -> String -> String | fixdate :: Date -> String -> String | ||||||
| fixdate (thisy,thism,thisd) s = printf "%04s/%02s/%02s" y' m' d' | fixdate t s = printf "%04s/%02s/%02s" y' m' d' | ||||||
|     where  |     where | ||||||
|  |       (ty,tm,td) = dateComponents t | ||||||
|       (y,m,d) = fromparse $ parsewith smartdate $ map toLower s |       (y,m,d) = fromparse $ parsewith smartdate $ map toLower s | ||||||
|       (y',m',d') = case (y,m,d) of  |       (y',m',d') = case (y,m,d) of  | ||||||
|                      ("","",d) -> (show thisy,show thism,d) |                      ("","","today") -> (show ty,show tm,show td) | ||||||
|                      ("",m,d)  -> (show thisy,m,d) |                      ("","","yesterday") -> (show y, show m, show d)  | ||||||
|                      otherwise -> (y,m,d) |                          where (y,m,d) = toGregorian $ addDays (-1) $ fromGregorian ty tm td | ||||||
|  |                      ("","","tomorrow") -> (show y, show m, show d)  | ||||||
|  |                          where (y,m,d) = toGregorian $ addDays 1 $ fromGregorian ty tm td | ||||||
|  |                      ("","",d)       -> (show ty,show tm,d) | ||||||
|  |                      ("",m,d)        -> (show ty,m,d) | ||||||
|  |                      otherwise       -> (y,m,d) | ||||||
| 
 | 
 | ||||||
| -- | Get the ledger file path from options, an environment variable, or a default | -- | Get the ledger file path from options, an environment variable, or a default | ||||||
| ledgerFilePathFromOpts :: [Opt] -> IO String | ledgerFilePathFromOpts :: [Opt] -> IO String | ||||||
|  | |||||||
							
								
								
									
										18
									
								
								Tests.hs
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								Tests.hs
									
									
									
									
									
								
							| @ -98,18 +98,24 @@ misc_tests = TestList [ | |||||||
|     assertparseequal timelog1 (parsewith timelog timelog1_str) |     assertparseequal timelog1 (parsewith timelog timelog1_str) | ||||||
|   ,                   |   ,                   | ||||||
|   "smartparsedate"     ~: do |   "smartparsedate"     ~: do | ||||||
|     ds@(y,m,d) <- today >>= return . dateComponents |     t <- today | ||||||
|     let str `gives` datestr = assertequal datestr (fixdate ds str) |     let (ty,tm,td) = dateComponents t | ||||||
|  |     let str `gives` datestr = assertequal datestr (fixdate t str) | ||||||
|     "1999-12-02" `gives` "1999/12/02" |     "1999-12-02" `gives` "1999/12/02" | ||||||
|     "1999.12.02" `gives` "1999/12/02" |     "1999.12.02" `gives` "1999/12/02" | ||||||
|     "1999/3/2"   `gives` "1999/03/02" |     "1999/3/2"   `gives` "1999/03/02" | ||||||
|     "2008/2"     `gives` "2008/02/01" |     "2008/2"     `gives` "2008/02/01" | ||||||
|     "20/2"       `gives` "0020/02/01" |     "20/2"       `gives` "0020/02/01" | ||||||
|     "1000"       `gives` "1000/01/01" |     "1000"       `gives` "1000/01/01" | ||||||
|     "4/2"        `gives` (printf "%04d/04/02" y) |     "4/2"        `gives` (printf "%04d/04/02" ty) | ||||||
|     "2"          `gives` (printf "%04d/%02d/02" y m) |     "2"          `gives` (printf "%04d/%02d/02" ty tm) | ||||||
|     "January"    `gives` (printf "%04d/01/01" y) |     "January"    `gives` (printf "%04d/01/01" ty) | ||||||
|     "feb"        `gives` (printf "%04d/02/01" y) |     "feb"        `gives` (printf "%04d/02/01" ty) | ||||||
|  |     "today"      `gives` (printf "%04d/%02d/%02d" ty tm td) | ||||||
|  |     let (y,m,d) = toGregorian $ addDays (-1) $ fromGregorian ty tm td | ||||||
|  |     "yesterday"  `gives` (printf "%04d/%02d/%02d" y m d) | ||||||
|  |     let (y,m,d) = toGregorian $ addDays 1 $ fromGregorian ty tm td | ||||||
|  |     "tomorrow"   `gives` (printf "%04d/%02d/%02d" y m d) | ||||||
|   ] |   ] | ||||||
| 
 | 
 | ||||||
| balancereportacctnames_tests = TestList  | balancereportacctnames_tests = TestList  | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user