* Replace Parsec with Megaparsec (see #289) This builds upon PR #289 by @rasendubi * Revert renaming of parseWithState to parseWithCtx * Fix doctests * Update for Megaparsec 5 * Specialize parser to improve performance * Pretty print errors * Swap StateT and ParsecT This is necessary to get the correct backtracking behavior, i.e. discard state changes if the parsing fails.
		
			
				
	
	
		
			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 /10: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 /9:25/
 | |
| >>>=1
 |