From 57c537de413661317a13b51aabaa9d7074388a91 Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Fri, 12 Mar 2010 22:52:57 +0000 Subject: [PATCH] parsing: N, tag, end tag are now ignored; ledger sample.dat parses --- hledger-lib/Ledger/Parse.hs | 36 +++++++++++++++++++++ tests/parse-ledger-sample.test | 57 ++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 tests/parse-ledger-sample.test diff --git a/hledger-lib/Ledger/Parse.hs b/hledger-lib/Ledger/Parse.hs index fe1240aa7..eae454e77 100644 --- a/hledger-lib/Ledger/Parse.hs +++ b/hledger-lib/Ledger/Parse.hs @@ -92,6 +92,9 @@ ledgerFile = do items <- many ledgerItem , liftM (return . addPeriodicTransaction) ledgerPeriodicTransaction , liftM (return . addHistoricalPrice) ledgerHistoricalPrice , ledgerDefaultYear + , ledgerIgnoredPrice + , ledgerTagDirective + , ledgerEndTagDirective , emptyLine >> return (return id) , liftM (return . addTimeLogEntry) timelogentry ] @@ -295,6 +298,28 @@ ledgerHistoricalPrice = do restofline return $ HistoricalPrice date symbol price +ledgerIgnoredPrice :: GenParser Char LedgerFileCtx (ErrorT String IO (Journal -> Journal)) +ledgerIgnoredPrice = do + char 'N' "ignored-price commodity" + many1 spacenonewline + commoditysymbol + restofline + return $ return id + +ledgerTagDirective :: GenParser Char LedgerFileCtx (ErrorT String IO (Journal -> Journal)) +ledgerTagDirective = do + string "tag" "tag directive" + many1 spacenonewline + _ <- many1 nonspace + restofline + return $ return id + +ledgerEndTagDirective :: GenParser Char LedgerFileCtx (ErrorT String IO (Journal -> Journal)) +ledgerEndTagDirective = do + string "end tag" "end tag directive" + restofline + return $ return id + -- like ledgerAccountBegin, updates the LedgerFileCtx ledgerDefaultYear :: GenParser Char LedgerFileCtx (ErrorT String IO (Journal -> Journal)) ledgerDefaultYear = do @@ -635,6 +660,17 @@ tests_Parse = TestList [ assertParseEqual (parseWithCtx emptyCtx postingamount " $1.") (Mixed [Amount Commodity {symbol="$",side=L,spaced=False,comma=False,precision=0} 1 Nothing]) + ,"ledgerIgnoredPrice" ~: do + assertParse (parseWithCtx emptyCtx ledgerIgnoredPrice "N $\n") + + ,"ledgerTagDirective" ~: do + assertParse (parseWithCtx emptyCtx ledgerTagDirective "tag foo\n") + assertParse (parseWithCtx emptyCtx ledgerTagDirective "tag foo \n") + + ,"ledgerEndTagDirective" ~: do + assertParse (parseWithCtx emptyCtx ledgerEndTagDirective "end tag\n") + assertParse (parseWithCtx emptyCtx ledgerEndTagDirective "end tag \n") + ] price1_str = "P 2004/05/01 XYZ $55.00\n" diff --git a/tests/parse-ledger-sample.test b/tests/parse-ledger-sample.test new file mode 100644 index 000000000..d8a9a4808 --- /dev/null +++ b/tests/parse-ledger-sample.test @@ -0,0 +1,57 @@ +-f- +<<< +; -*- ledger -*- + +N $ + += /^Expenses:Books/ + (Liabilities:Taxes) -0.10 + +~ Monthly + Assets:Bank:Checking $500.00 + Income:Salary + +~ Yearly + Expenses:Donations $100.00 + Assets:Bank:Checking + +2004/05/01 * Checking balance + Assets:Bank:Checking $1,000.00 + Equity:Opening Balances + +2004/05/03=2004/05/01 * Investment balance + Assets:Brokerage 50 AAPL @ $30.00 + Equity:Opening Balances + +2004/05/14 * Páy dày + Assets:Bank:Checking 500.00€ + Income:Salary + +2004/05/14 * Another dày in which there is Páying + Asséts:Bánk:Chécking:Asséts:Bánk:Chécking $500.00 + Income:Salary + +2004/05/14 * Another dày in which there is Páying + Русский язык:Активы:Русский язык:Русский язык $1000.00 + Income:Salary + +tag foo + +2004/05/27 Book Store + Expenses:Books $20.00 + Expenses:Cards $40.00 + Expenses:Docs $30.00 + Liabilities:MasterCard + +end tag + +2004/05/27 (100) Credit card company + ; This is an xact note! + ; Sample: Value + Liabilities:MasterCard $20.00 + ; This is a posting note! + ; Sample: Another Value + ; :MyTag: + Assets:Bank:Checking + ; :AnotherTag: +>>>= 0