From d98d136fc74db895d6e43874b5619e37cb663c70 Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Sat, 20 Jun 2009 04:02:10 +0000 Subject: [PATCH] allow comment lines intermixed with posting lines --- Ledger/Parse.hs | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/Ledger/Parse.hs b/Ledger/Parse.hs index 0bdab12db..fb2b8fa22 100644 --- a/Ledger/Parse.hs +++ b/Ledger/Parse.hs @@ -260,6 +260,15 @@ ledgercomment = ) <|> return "" "comment" +ledgercommentline :: GenParser Char st String +ledgercommentline = do + many spacenonewline + s <- ledgercomment + optional newline + eof + return s + "comment" + ledgerModifierTransaction :: GenParser Char LedgerFileCtx ModifierTransaction ledgerModifierTransaction = do char '=' "modifier transaction" @@ -363,8 +372,23 @@ ledgerstatus = try (do { char '*' "status"; many1 spacenonewline; return Tru ledgercode :: GenParser Char st String ledgercode = try (do { char '(' "code"; code <- anyChar `manyTill` char ')'; many1 spacenonewline; return code } ) <|> return "" +-- Complicated to handle intermixed comment lines.. please make me better. ledgerpostings :: GenParser Char LedgerFileCtx [Posting] -ledgerpostings = many1 $ try ledgerposting +ledgerpostings = do + ctx <- getState + let p `parses` s = isRight $ parseWithCtx ctx p s + ls <- many1 linebeginningwithspaces + let ls' = filter (not . (ledgercommentline `parses`)) ls + guard (not $ null ls') + return $ map (fromparse . parseWithCtx ctx ledgerposting) ls' + "ledger postings" + +linebeginningwithspaces :: GenParser Char st String +linebeginningwithspaces = do + sp <- many1 spacenonewline + c <- nonspace + cs <- restofline + return $ sp ++ (c:cs) ++ "\n" ledgerposting :: GenParser Char LedgerFileCtx Posting ledgerposting = do