parsing: allow numbers in commodities if double-quoted, like ledger
This commit is contained in:
		
							parent
							
								
									f92270dfa8
								
							
						
					
					
						commit
						6977a0eecb
					
				| @ -464,7 +464,16 @@ nosymbolamount = do | |||||||
|   <?> "no-symbol amount" |   <?> "no-symbol amount" | ||||||
| 
 | 
 | ||||||
| commoditysymbol :: GenParser Char st String | commoditysymbol :: GenParser Char st String | ||||||
| commoditysymbol = many1 (noneOf "@-.0123456789;\n ") <?> "commodity symbol" | commoditysymbol = (quotedcommoditysymbol <|> | ||||||
|  |                    many1 (noneOf "0123456789-.@;\n \"") | ||||||
|  |                   ) <?> "commodity symbol" | ||||||
|  | 
 | ||||||
|  | quotedcommoditysymbol :: GenParser Char st String | ||||||
|  | quotedcommoditysymbol = do | ||||||
|  |   char '"' | ||||||
|  |   s <- many1 $ noneOf "-.@;\n \"" | ||||||
|  |   char '"' | ||||||
|  |   return s | ||||||
| 
 | 
 | ||||||
| priceamount :: GenParser Char st (Maybe MixedAmount) | priceamount :: GenParser Char st (Maybe MixedAmount) | ||||||
| priceamount = | priceamount = | ||||||
| @ -608,9 +617,11 @@ tests_Parse = TestList [ | |||||||
|     assertBool "ledgeraccountname rejects an empty leading component" (isLeft $ parsewith ledgeraccountname ":b:c") |     assertBool "ledgeraccountname rejects an empty leading component" (isLeft $ parsewith ledgeraccountname ":b:c") | ||||||
|     assertBool "ledgeraccountname rejects an empty trailing component" (isLeft $ parsewith ledgeraccountname "a:b:") |     assertBool "ledgeraccountname rejects an empty trailing component" (isLeft $ parsewith ledgeraccountname "a:b:") | ||||||
| 
 | 
 | ||||||
|  ,"ledgerposting" ~: |  ,"ledgerposting" ~: do | ||||||
|     assertParseEqual (parseWithCtx emptyCtx ledgerposting "  expenses:food:dining  $10.00\n")  |     assertParseEqual (parseWithCtx emptyCtx ledgerposting "  expenses:food:dining  $10.00\n")  | ||||||
|                      (Posting False "expenses:food:dining" (Mixed [dollars 10]) "" RegularPosting Nothing) |                      (Posting False "expenses:food:dining" (Mixed [dollars 10]) "" RegularPosting Nothing) | ||||||
|  |     assertBool "ledgerposting parses a quoted commodity with numbers" | ||||||
|  |                    (isRight $ parseWithCtx emptyCtx ledgerposting "  a  1 \"DE123\"\n") | ||||||
| 
 | 
 | ||||||
|   ,"someamount" ~: do |   ,"someamount" ~: do | ||||||
|      let -- | compare a parse result with a MixedAmount, showing the debug representation for clarity |      let -- | compare a parse result with a MixedAmount, showing the debug representation for clarity | ||||||
|  | |||||||
							
								
								
									
										22
									
								
								tests/commodities.test
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								tests/commodities.test
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | |||||||
|  | # a commodity may contain/end with numbers, if double quoted | ||||||
|  | # 1. without quotes, fail. XXX parse error should be clearer here | ||||||
|  | -f- print | ||||||
|  | <<< | ||||||
|  | 2010-04-05 x | ||||||
|  |    a   10 DE0002635307 | ||||||
|  |    b | ||||||
|  | >>>2 /parse error.* | ||||||
|  | unexpected "0" | ||||||
|  | expecting comment or new-line/ | ||||||
|  | >>>= 1 | ||||||
|  | # 2. with quotes | ||||||
|  | -f- print | ||||||
|  | <<< | ||||||
|  | 2010-04-05 x | ||||||
|  |    a   10 "DE0002635307" | ||||||
|  |    b | ||||||
|  | >>> | ||||||
|  | 2010/04/05 x | ||||||
|  |     a  10 DE0002635307 | ||||||
|  |     b  -10 DE0002635307 | ||||||
|  | 
 | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user