parsing: ignore ledger-style balance assertions ("= BAL" after a posting's amount)
This commit is contained in:
parent
e4e4681649
commit
28baf926f7
@ -488,6 +488,7 @@ posting = do
|
|||||||
account <- modifiedaccountname
|
account <- modifiedaccountname
|
||||||
let (ptype, account') = (accountNamePostingType account, unbracket account)
|
let (ptype, account') = (accountNamePostingType account, unbracket account)
|
||||||
amount <- spaceandamountormissing
|
amount <- spaceandamountormissing
|
||||||
|
_ <- balanceassertion
|
||||||
many spacenonewline
|
many spacenonewline
|
||||||
(inlinecomment, inlinetag) <- inlinecomment
|
(inlinecomment, inlinetag) <- inlinecomment
|
||||||
(nextlinecomments, nextlinetags) <- commentlines
|
(nextlinecomments, nextlinetags) <- commentlines
|
||||||
@ -516,6 +517,9 @@ tests_posting = [
|
|||||||
|
|
||||||
assertBool "posting parses a quoted commodity with numbers"
|
assertBool "posting parses a quoted commodity with numbers"
|
||||||
(isRight $ parseWithCtx nullctx posting " a 1 \"DE123\"\n")
|
(isRight $ parseWithCtx nullctx posting " a 1 \"DE123\"\n")
|
||||||
|
|
||||||
|
,"posting parses a balance assertion" ~: do
|
||||||
|
assertBool "" (isRight $ parseWithCtx nullctx posting " a 1 \"DE123\" =$1\n")
|
||||||
]
|
]
|
||||||
|
|
||||||
-- | Parse an account name, then apply any parent account prefix and/or account aliases currently in effect.
|
-- | Parse an account name, then apply any parent account prefix and/or account aliases currently in effect.
|
||||||
@ -564,8 +568,8 @@ tests_spaceandamountormissing = [
|
|||||||
assertParseEqual (parseWithCtx nullctx spaceandamountormissing "") missingmixedamt
|
assertParseEqual (parseWithCtx nullctx spaceandamountormissing "") missingmixedamt
|
||||||
]
|
]
|
||||||
|
|
||||||
-- | Parse an amount, with an optional left or right currency symbol and
|
-- | Parse an amount, optionally with a left or right currency symbol,
|
||||||
-- optional price.
|
-- price, and/or (ignored) ledger-style balance assertion.
|
||||||
amount :: GenParser Char JournalContext MixedAmount
|
amount :: GenParser Char JournalContext MixedAmount
|
||||||
amount = try leftsymbolamount <|> try rightsymbolamount <|> nosymbolamount
|
amount = try leftsymbolamount <|> try rightsymbolamount <|> nosymbolamount
|
||||||
|
|
||||||
@ -656,6 +660,16 @@ priceamount =
|
|||||||
return $ Just $ UnitPrice a))
|
return $ Just $ UnitPrice a))
|
||||||
<|> return Nothing
|
<|> return Nothing
|
||||||
|
|
||||||
|
balanceassertion :: GenParser Char JournalContext (Maybe MixedAmount)
|
||||||
|
balanceassertion =
|
||||||
|
try (do
|
||||||
|
many spacenonewline
|
||||||
|
char '='
|
||||||
|
many spacenonewline
|
||||||
|
a <- amount -- XXX should restrict to a simple amount
|
||||||
|
return $ Just a)
|
||||||
|
<|> return Nothing
|
||||||
|
|
||||||
-- | Parse a numeric quantity for its value and display attributes. Some
|
-- | Parse a numeric quantity for its value and display attributes. Some
|
||||||
-- international number formats (cf
|
-- international number formats (cf
|
||||||
-- http://en.wikipedia.org/wiki/Decimal_separator) are accepted: either
|
-- http://en.wikipedia.org/wiki/Decimal_separator) are accepted: either
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user