parsing: ignore cleared flags at the start of postings, parse account name correctly

This commit is contained in:
Simon Michael 2010-11-13 20:20:04 +00:00
parent 27a0900ea9
commit d7617fe154
3 changed files with 61 additions and 1 deletions

View File

@ -932,6 +932,10 @@ need to make small edits to restore compatibility for one or the other.
hledger does not allow separate dates for individual postings, unlike c++ hledger does not allow separate dates for individual postings, unlike c++
ledger. ledger.
Likewise, hledger does not support per-posting cleared status. It does
ignore a cleared flag (`*`) at the start of a posting, so that the account
name is parsed correctly.
#### Features not supported #### Features not supported
c++ ledger features not currently supported include: modifier and periodic c++ ledger features not currently supported include: modifier and periodic

View File

@ -388,7 +388,7 @@ ledgereffectivedate actualdate = do
return edate return edate
ledgerstatus :: GenParser Char JournalContext Bool ledgerstatus :: GenParser Char JournalContext Bool
ledgerstatus = try (do { many1 spacenonewline; char '*' <?> "status"; return True } ) <|> return False ledgerstatus = try (do { many spacenonewline; char '*' <?> "status"; return True } ) <|> return False
ledgercode :: GenParser Char JournalContext String ledgercode :: GenParser Char JournalContext String
ledgercode = try (do { many1 spacenonewline; char '(' <?> "code"; code <- anyChar `manyTill` char ')'; return code } ) <|> return "" ledgercode = try (do { many1 spacenonewline; char '(' <?> "code"; code <- anyChar `manyTill` char ')'; return code } ) <|> return ""
@ -442,6 +442,7 @@ ledgerposting :: GenParser Char JournalContext Posting
ledgerposting = do ledgerposting = do
many1 spacenonewline many1 spacenonewline
status <- ledgerstatus status <- ledgerstatus
many spacenonewline
account <- transactionaccountname account <- transactionaccountname
let (ptype, account') = (postingTypeFromAccountName account, unbracket account) let (ptype, account') = (postingTypeFromAccountName account, unbracket account)
amount <- postingamount amount <- postingamount

55
tests/cleared-marker.test Normal file
View File

@ -0,0 +1,55 @@
# report cleared transactions only
#
bin/hledger -f- print --cleared
<<<
2010/1/1 x
a 1
b
2010/1/2 * x
a 1
b
2010/1/3 *
a 1
b
>>>
2010/01/02 * x
a 1
b -1
2010/01/03 *
a 1
b -1
# report uncleared transactions only
bin/hledger -f- print --uncleared
<<<
2010/1/1 x
a 1
b
2010/1/2 * x
a 1
b
2010/1/3 *
a 1
b
>>>
2010/01/01 x
a 1
b -1
# we don't yet support cleared postings, except we should ignore the marker when parsing them
bin/hledger -f- balance --no-total
<<<
2010/1/1
a 1
*a 2
* a 4
b
>>>
7 a
-7 b