diff --git a/BalanceCommand.hs b/BalanceCommand.hs index 4a2c1eea3..ffea8a44f 100644 --- a/BalanceCommand.hs +++ b/BalanceCommand.hs @@ -114,12 +114,12 @@ import Utils -- | Print a balance report. -printbalance :: [Opt] -> [String] -> Ledger -> IO () -printbalance opts args l = putStr $ balancereport opts args l +balance :: [Opt] -> [String] -> Ledger -> IO () +balance opts args l = putStr $ showBalanceReport opts args l -- | Generate balance report output for a ledger, based on options. -balancereport :: [Opt] -> [String] -> Ledger -> String -balancereport opts args l = acctsstr ++ totalstr +showBalanceReport :: [Opt] -> [String] -> Ledger -> String +showBalanceReport opts args l = acctsstr ++ totalstr where acctsstr = concatMap (showAccountTreeWithBalances acctnamestoshow) $ subs treetoshow totalstr = if isZeroAmount total diff --git a/Ledger/Entry.hs b/Ledger/Entry.hs index 3403f69a9..820808507 100644 --- a/Ledger/Entry.hs +++ b/Ledger/Entry.hs @@ -87,9 +87,6 @@ showEntry e = showaccountname s = printf "%-34s" s showcomment s = if (length s) > 0 then " ; "++s else "" -showEntries :: [Entry] -> String -showEntries = concatMap showEntry - entrySetPrecision :: Int -> Entry -> Entry entrySetPrecision p (Entry d s c desc comm ts prec) = Entry d s c desc comm (map (ledgerTransactionSetPrecision p) ts) prec diff --git a/PrintCommand.hs b/PrintCommand.hs index d558c3a10..5bf272bf2 100644 --- a/PrintCommand.hs +++ b/PrintCommand.hs @@ -14,6 +14,9 @@ printcommandtests = TestList [ ] -- | Print ledger entries in standard format. -printentries :: [Opt] -> [String] -> Ledger -> IO () -printentries opts args l = putStr $ showEntries $ setprecisions $ entries $ rawledger l +print' :: [Opt] -> [String] -> Ledger -> IO () +print' opts args l = putStr $ showEntries opts args l + +showEntries :: [Opt] -> [String] -> Ledger -> String +showEntries opts args l = concatMap showEntry $ setprecisions $ entries $ rawledger l where setprecisions = map (entrySetPrecision (lprecision l)) diff --git a/RegisterCommand.hs b/RegisterCommand.hs index a60ce3b40..0d118383e 100644 --- a/RegisterCommand.hs +++ b/RegisterCommand.hs @@ -14,8 +14,8 @@ registercommandtests = TestList [ ] -- | Print a register report. -printregister :: [Opt] -> [String] -> Ledger -> IO () -printregister opts args l = putStr $ showTransactionsWithBalances opts args l +register :: [Opt] -> [String] -> Ledger -> IO () +register opts args l = putStr $ showTransactionsWithBalances opts args l showTransactionsWithBalances :: [Opt] -> [String] -> Ledger -> String showTransactionsWithBalances opts args l = diff --git a/Tests.hs b/Tests.hs index 3f884ab1a..ddc5a66f6 100644 --- a/Tests.hs +++ b/Tests.hs @@ -102,7 +102,7 @@ balancecommandtests = \ $-2 income\n\ \ $1 liabilities\n\ \" --" - (balancereport [] [] l) + (showBalanceReport [] [] l) , "balance report with showsubs" ~: do @@ -119,7 +119,7 @@ balancecommandtests = \ $-1 salary\n\ \ $1 liabilities:debts\n\ \" --" - (balancereport [ShowSubs] [] l) + (showBalanceReport [ShowSubs] [] l) , "balance report with account pattern o" ~: do @@ -130,7 +130,7 @@ balancecommandtests = \--------------------\n\ \ $-1\n\ \" --" - (balancereport [] ["o"] l) + (showBalanceReport [] ["o"] l) , "balance report with account pattern o and showsubs" ~: do @@ -143,7 +143,7 @@ balancecommandtests = \--------------------\n\ \ $-1\n\ \" --" - (balancereport [ShowSubs] ["o"] l) + (showBalanceReport [ShowSubs] ["o"] l) , "balance report with account pattern a" ~: do @@ -157,7 +157,7 @@ balancecommandtests = \--------------------\n\ \ $-1\n\ \" --" - (balancereport [] ["a"] l) + (showBalanceReport [] ["a"] l) , "balance report with account pattern e" ~: do @@ -169,7 +169,7 @@ balancecommandtests = \ $-2 income\n\ \ $1 liabilities:debts\n\ \" --" - (balancereport [] ["e"] l) + (showBalanceReport [] ["e"] l) , "balance report with unmatched parent of two matched subaccounts" ~: do @@ -180,7 +180,7 @@ balancecommandtests = \--------------------\n\ \ $-1\n\ \" --" - (balancereport [] ["cash","saving"] l) + (showBalanceReport [] ["cash","saving"] l) ] -- | Assert a parsed thing equals some expected thing, or print a parse error. diff --git a/Utils.hs b/Utils.hs index 5620b2b99..13a9c9544 100644 --- a/Utils.hs +++ b/Utils.hs @@ -1,22 +1,6 @@ {-| -Utilities for top-level modules. See also "Ledger.Utils". - -There are some helpers here for working with your ledger in ghci. Examples: - -> $ rm -f *.o Ledger/*.o -> $ ghci hledger.hs -> *Main> l <- myledger -> Ledger with 696 entries, 132 accounts: -> ... -> *Main> printbalance [] [] l -> ... -> *Main> printregister [] [] l -> ... -> *Main> accounts l -> ... -> *Main> myaccount "expenses:food:groceries" -> Account expenses:food:groceries with 60 transactions +Utilities for top-level modules and/or ghci. See also "Ledger.Utils". -} diff --git a/hledger.hs b/hledger.hs index ff7f81a65..d43eaf82e 100644 --- a/hledger.hs +++ b/hledger.hs @@ -10,18 +10,43 @@ This is a minimal haskell clone of John Wiegley's ledger simple ledger-compatible register & balance reports from a plain text ledger file, and demonstrates a functional implementation of ledger. +You can use the command line: + +> $ hledger --help + +or ghci: + +> $ ghci hledger +> > l <- ledgerfromfile "sample.ledger" +> > balance [] [] l +> $-1 assets +> $2 expenses +> $-2 income +> $1 liabilities:debts +> > register [] ["income","expenses"] l +> 2007/01/01 income income:salary $-1 $-1 +> 2007/01/01 gift income:gifts $-1 $-2 +> 2007/01/01 eat & shop expenses:food $1 $-1 +> expenses:supplies $1 0 + -} -module Main +module Main ( + module Utils, + module Options, + module BalanceCommand, + module PrintCommand, + module RegisterCommand, +) where import qualified Data.Map as Map (lookup) -import Options import Ledger +import Utils +import Options import BalanceCommand import PrintCommand import RegisterCommand import Tests -import Utils main :: IO () @@ -32,9 +57,9 @@ main = do run cmd opts args | Help `elem` opts = putStr usage | Version `elem` opts = putStr version - | cmd `isPrefixOf` "balance" = parseLedgerAndDo opts args printbalance - | cmd `isPrefixOf` "print" = parseLedgerAndDo opts args printentries - | cmd `isPrefixOf` "register" = parseLedgerAndDo opts args printregister + | cmd `isPrefixOf` "balance" = parseLedgerAndDo opts args balance + | cmd `isPrefixOf` "print" = parseLedgerAndDo opts args print' + | cmd `isPrefixOf` "register" = parseLedgerAndDo opts args register | cmd `isPrefixOf` "test" = runtests >> return () | otherwise = putStr usage