parsing: if there is no description, don't require a space after the transaction date

This commit is contained in:
Simon Michael 2010-04-15 20:44:04 +00:00
parent 5083255ed3
commit 77f64a7ddf
2 changed files with 21 additions and 8 deletions

View File

@ -391,12 +391,13 @@ ledgerDefaultYear = do
ledgerTransaction :: GenParser Char LedgerFileCtx Transaction
ledgerTransaction = do
date <- ledgerdate <?> "transaction"
edate <- try (ledgereffectivedate date <?> "effective date") <|> return Nothing
status <- ledgerstatus
code <- ledgercode
description <- many1 spacenonewline >> liftM rstrip (many (noneOf ";\n") <?> "description")
comment <- ledgercomment <|> return ""
restofline
edate <- optionMaybe (ledgereffectivedate date) <?> "effective date"
status <- ledgerstatus <?> "cleared flag"
code <- ledgercode <?> "transaction code"
(description, comment) <-
(do {many1 spacenonewline; d <- liftM rstrip (many (noneOf ";\n")); c <- ledgercomment <|> return ""; newline; return (d, c)} <|>
do {many spacenonewline; c <- ledgercomment <|> return ""; newline; return ("", c)}
) <?> "description and/or comment"
postings <- ledgerpostings
let t = txnTieKnot $ Transaction date edate status code description comment postings ""
case balanceTransaction t of
@ -433,7 +434,7 @@ ledgerdatetime = do
let tod = TimeOfDay (read h) (read m) (maybe 0 (fromIntegral.read) s)
return $ LocalTime day tod
ledgereffectivedate :: Day -> GenParser Char LedgerFileCtx (Maybe Day)
ledgereffectivedate :: Day -> GenParser Char LedgerFileCtx Day
ledgereffectivedate actualdate = do
char '='
-- kludgy way to use actual date for default year
@ -444,7 +445,7 @@ ledgereffectivedate actualdate = do
when (isJust y) $ setYear $ fromJust y
return r
edate <- withDefaultYear actualdate ledgerdate
return $ Just edate
return edate
ledgerstatus :: GenParser Char st Bool
ledgerstatus = try (do { many1 spacenonewline; char '*' <?> "status"; return True } ) <|> return False

View File

@ -0,0 +1,12 @@
# 1. accept a blank description
./hledger -f-
<<<
2010/1/1
a 1
b
# 2. same, but no separator space after the date
./hledger -f-
<<<
2010/1/1
a 1
b