Bracketed posting dates were fragile; they worked only if you wrote full 10-character dates. Also some semantics were a bit unclear. Now they should be robust, and have been documented more clearly. This is a legacy undocumented Ledger syntax, but it improves compatibility and might be preferable to the more verbose "date:" tags if you write posting dates often (as I do). Internally, bracketed posting dates are no longer considered to be tags. Journal comment, tag, and posting date parsers have been reworked, all with doctests. Also the journal parser types generally have been tightened up and clarified, making it much easier to know how to combine and run them. There's now -- | A parser of strings with generic user state, monad and return type. type StringParser u m a = ParsecT String u m a -- | A string parser with journal-parsing state. type JournalParser m a = StringParser JournalContext m a -- | A journal parser that runs in IO and can throw an error mid-parse. type ErroringJournalParser a = JournalParser (ExceptT String IO) a and corresponding convenience functions (and short aliases) for running them.
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # 1. posting dates can be set with a tag. Also the year can be
 | |
| # inferred from the transaction. If there are multiple tags, the first
 | |
| # is used. Date separators /-. are allowed.
 | |
| hledger -f- register
 | |
| <<<
 | |
| 2000/1/2
 | |
|    a  0   ; date: 3/4,  date: 4-5, date:6.7
 | |
| >>> /^2000\/03\/04/
 | |
| >>>=0
 | |
| 
 | |
| # 2. If the date: or date2: tags do not have a valid simple date
 | |
| # value, there should be a corresponding error at the right position
 | |
| hledger -f- register
 | |
| <<<
 | |
| comment
 | |
| Journal comment to prevent this being parsed as a timedot file
 | |
| end comment
 | |
| 
 | |
| 2000/1/1
 | |
|    a  0   ; date: 3.31
 | |
| 
 | |
| 2000/1/2
 | |
|    b  0
 | |
|        ; date: 3.32
 | |
| 
 | |
| >>>2 /line 10, column 19/
 | |
| >>>=1
 | |
| 
 | |
| # 3. Ledger's bracketed date syntax is also supported: `[DATE]`,
 | |
| # `[DATE=DATE2]` or `[=DATE2]`. This is equivalent to using `date:` or
 | |
| # `date2:` tags.
 | |
| hledger -f- register --date2
 | |
| <<<
 | |
| 2000/1/2
 | |
|    a  0   ; [=3-4]
 | |
| >>> /^2000\/03\/04/
 | |
| >>>=0
 | |
| 
 | |
| # 4. Date parsing and error reporting activates for square brackets
 | |
| # containing only `0123456789/-.=` characters.
 | |
| hledger -f- register
 | |
| <<<
 | |
| comment
 | |
| Journal comment to prevent this being parsed as a timedot file
 | |
| end comment
 | |
| 
 | |
| 2000/1/2
 | |
|    a  0   ; [3/4 ] space, causes this to be ignored
 | |
| 
 | |
| 2000/1/2
 | |
|    b  0   ; [1/1=1/2/3/4] bad second date, should error
 | |
| 
 | |
| >>>2 /line 9, column 25/
 | |
| >>>=1
 |