lib: Parser now accepts .. as a synonym for to in date ranges.
This commit is contained in:
		
							parent
							
								
									935abd1842
								
							
						
					
					
						commit
						be25fe360e
					
				| @ -912,7 +912,7 @@ lastthisnextthing = do | |||||||
| -- resolving any relative start/end dates (only; it is not needed for | -- resolving any relative start/end dates (only; it is not needed for | ||||||
| -- parsing the reporting interval). | -- parsing the reporting interval). | ||||||
| -- | -- | ||||||
| -- >>> let p = parsePeriodExpr (parsedate "2008/11/26") | -- >>> let p = parsePeriodExpr (parsedate "2008-11-26") | ||||||
| -- >>> p "from Aug to Oct" | -- >>> p "from Aug to Oct" | ||||||
| -- Right (NoInterval,DateSpan 2008-08-01..2008-09-30) | -- Right (NoInterval,DateSpan 2008-08-01..2008-09-30) | ||||||
| -- >>> p "aug to oct" | -- >>> p "aug to oct" | ||||||
| @ -927,15 +927,17 @@ lastthisnextthing = do | |||||||
| -- Right (DayOfMonth 2,DateSpan ..) | -- Right (DayOfMonth 2,DateSpan ..) | ||||||
| -- >>> p "every 2nd day" | -- >>> p "every 2nd day" | ||||||
| -- Right (DayOfMonth 2,DateSpan ..) | -- Right (DayOfMonth 2,DateSpan ..) | ||||||
|  | -- >>> p "every 2nd day 2009.." | ||||||
|  | -- Right (DayOfMonth 2,DateSpan 2009-01-01..) | ||||||
| -- >>> p "every 2nd day 2009-" | -- >>> p "every 2nd day 2009-" | ||||||
| -- Right (DayOfMonth 2,DateSpan 2009-01-01..) | -- Right (DayOfMonth 2,DateSpan 2009-01-01..) | ||||||
| -- >>> p "every 29th Nov" | -- >>> p "every 29th Nov" | ||||||
| -- Right (DayOfYear 11 29,DateSpan ..) | -- Right (DayOfYear 11 29,DateSpan ..) | ||||||
| -- >>> p "every 29th nov -2009" | -- >>> p "every 29th nov ..2009" | ||||||
| -- Right (DayOfYear 11 29,DateSpan ..2008-12-31) | -- Right (DayOfYear 11 29,DateSpan ..2008-12-31) | ||||||
| -- >>> p "every nov 29th" | -- >>> p "every nov 29th" | ||||||
| -- Right (DayOfYear 11 29,DateSpan ..) | -- Right (DayOfYear 11 29,DateSpan ..) | ||||||
| -- >>> p "every Nov 29th 2009-" | -- >>> p "every Nov 29th 2009.." | ||||||
| -- Right (DayOfYear 11 29,DateSpan 2009-01-01..) | -- Right (DayOfYear 11 29,DateSpan 2009-01-01..) | ||||||
| -- >>> p "every 11/29 from 2009" | -- >>> p "every 11/29 from 2009" | ||||||
| -- Right (DayOfYear 11 29,DateSpan 2009-01-01..) | -- Right (DayOfYear 11 29,DateSpan 2009-01-01..) | ||||||
| @ -951,9 +953,9 @@ lastthisnextthing = do | |||||||
| -- Right (DayOfMonth 2,DateSpan ..) | -- Right (DayOfMonth 2,DateSpan ..) | ||||||
| -- >>> p "every 2nd day" | -- >>> p "every 2nd day" | ||||||
| -- Right (DayOfMonth 2,DateSpan ..) | -- Right (DayOfMonth 2,DateSpan ..) | ||||||
| -- >>> p "every 2nd day 2009-" | -- >>> p "every 2nd day 2009.." | ||||||
| -- Right (DayOfMonth 2,DateSpan 2009-01-01..) | -- Right (DayOfMonth 2,DateSpan 2009-01-01..) | ||||||
| -- >>> p "every 2nd day of month 2009-" | -- >>> p "every 2nd day of month 2009.." | ||||||
| -- Right (DayOfMonth 2,DateSpan 2009-01-01..) | -- Right (DayOfMonth 2,DateSpan 2009-01-01..) | ||||||
| periodexprp :: Day -> TextParser m (Interval, DateSpan) | periodexprp :: Day -> TextParser m (Interval, DateSpan) | ||||||
| periodexprp rdate = do | periodexprp rdate = do | ||||||
| @ -1072,7 +1074,7 @@ doubledatespanp rdate = do | |||||||
|   optional (string' "from" >> skipMany spacenonewline) |   optional (string' "from" >> skipMany spacenonewline) | ||||||
|   b <- smartdate |   b <- smartdate | ||||||
|   skipMany spacenonewline |   skipMany spacenonewline | ||||||
|   optional (choice [string' "to", string' "-"] >> skipMany spacenonewline) |   optional (choice [string' "to", string "..", string' "-"] >> skipMany spacenonewline) | ||||||
|   DateSpan (Just $ fixSmartDate rdate b) . Just . fixSmartDate rdate <$> smartdate |   DateSpan (Just $ fixSmartDate rdate b) . Just . fixSmartDate rdate <$> smartdate | ||||||
| 
 | 
 | ||||||
| fromdatespanp :: Day -> TextParser m DateSpan | fromdatespanp :: Day -> TextParser m DateSpan | ||||||
| @ -1084,14 +1086,14 @@ fromdatespanp rdate = do | |||||||
|     , |     , | ||||||
|     do |     do | ||||||
|       d <- smartdate |       d <- smartdate | ||||||
|       string' "-" |       choice [string "..", string' "-"] | ||||||
|       return d |       return d | ||||||
|     ] |     ] | ||||||
|   return $ DateSpan (Just $ fixSmartDate rdate b) Nothing |   return $ DateSpan (Just $ fixSmartDate rdate b) Nothing | ||||||
| 
 | 
 | ||||||
| todatespanp :: Day -> TextParser m DateSpan | todatespanp :: Day -> TextParser m DateSpan | ||||||
| todatespanp rdate = do | todatespanp rdate = do | ||||||
|   choice [string' "to", string' "until", string' "-"] >> skipMany spacenonewline |   choice [string' "to", string' "until", string "..", string' "-"] >> skipMany spacenonewline | ||||||
|   DateSpan Nothing . Just . fixSmartDate rdate <$> smartdate |   DateSpan Nothing . Just . fixSmartDate rdate <$> smartdate | ||||||
| 
 | 
 | ||||||
| justdatespanp :: Day -> TextParser m DateSpan | justdatespanp :: Day -> TextParser m DateSpan | ||||||
|  | |||||||
| @ -918,16 +918,16 @@ Some notes: | |||||||
| 
 | 
 | ||||||
| Examples: | Examples: | ||||||
| 
 | 
 | ||||||
| |                   |                                                                                             | | |                    |                                                                                             | | ||||||
| |-------------------|---------------------------------------------------------------------------------------------| | |--------------------|---------------------------------------------------------------------------------------------| | ||||||
| | `-b 2016/3/17`    | begin on St. Patrick’s day 2016                                                             | | | `-b 2016/3/17`     | begin on St. Patrick’s day 2016                                                             | | ||||||
| | `-e 12/1`         | end at the start of december 1st of the current year (11/30 will be the last date included) | | | `-e 12/1`          | end at the start of december 1st of the current year (11/30 will be the last date included) | | ||||||
| | `-b thismonth`    | all transactions on or after the 1st of the current month                                   | | | `-b thismonth`     | all transactions on or after the 1st of the current month                                   | | ||||||
| | `-p thismonth`    | all transactions in the current month                                                       | | | `-p thismonth`     | all transactions in the current month                                                       | | ||||||
| | `date:2016/3/17-` | the above written as queries instead                                                        | | | `date:2016/3/17..` | the above written as queries instead (`..` can also be replaced with `-`)                   | | ||||||
| | `date:-12/1`      |                                                                                             | | | `date:..12/1`      |                                                                                             | | ||||||
| | `date:thismonth-` |                                                                                             | | | `date:thismonth..` |                                                                                             | | ||||||
| | `date:thismonth`  |                                                                                             | | | `date:thismonth`   |                                                                                             | | ||||||
| 
 | 
 | ||||||
| ## Report intervals | ## Report intervals | ||||||
| 
 | 
 | ||||||
| @ -951,14 +951,14 @@ hledger always treats start dates as inclusive and end dates as exclusive: | |||||||
| `-p "from 2009/1/1 to 2009/4/1"` | `-p "from 2009/1/1 to 2009/4/1"` | ||||||
| 
 | 
 | ||||||
| Keywords like "from" and "to" are optional, and so are the spaces, as long | Keywords like "from" and "to" are optional, and so are the spaces, as long | ||||||
| as you don't run two dates together. "to" can also be written as "-". | as you don't run two dates together. "to" can also be written as ".." or "-". | ||||||
| These are equivalent to the above: | These are equivalent to the above: | ||||||
| 
 | 
 | ||||||
| |                          | | |                           | | ||||||
| |--------------------------| | |---------------------------| | ||||||
| | `-p "2009/1/1 2009/4/1"` | | | `-p "2009/1/1 2009/4/1"`  | | ||||||
| | `-p2009/1/1to2009/4/1`   | | | `-p2009/1/1to2009/4/1`    | | ||||||
| | `-p2009/1/1-2009/4/1`    | | | `-p2009/1/1..2009/4/1`    | | ||||||
| 
 | 
 | ||||||
| Dates are [smart dates](#smart-dates), so if the current year is 2009, the | Dates are [smart dates](#smart-dates), so if the current year is 2009, the | ||||||
| above can also be written as: | above can also be written as: | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user