diff --git a/Ledger.hs b/Ledger.hs index 50359de78..9c3bab131 100644 --- a/Ledger.hs +++ b/Ledger.hs @@ -8,22 +8,22 @@ import Amount import Account import AccountName import Transaction -import LedgerFile +import RawLedger -rawLedgerTransactions :: LedgerFile -> [Transaction] +rawLedgerTransactions :: RawLedger -> [Transaction] rawLedgerTransactions = txns . entries where txns :: [LedgerEntry] -> [Transaction] txns es = concat $ map flattenEntry $ zip es (iterate (+1) 1) -rawLedgerAccountNamesUsed :: LedgerFile -> [AccountName] +rawLedgerAccountNamesUsed :: RawLedger -> [AccountName] rawLedgerAccountNamesUsed = accountNamesFromTransactions . rawLedgerTransactions -rawLedgerAccountNames :: LedgerFile -> [AccountName] +rawLedgerAccountNames :: RawLedger -> [AccountName] rawLedgerAccountNames = sort . expandAccountNames . rawLedgerAccountNamesUsed -rawLedgerAccountNameTree :: LedgerFile -> Tree AccountName +rawLedgerAccountNameTree :: RawLedger -> Tree AccountName rawLedgerAccountNameTree l = accountNameTreeFrom $ rawLedgerAccountNames l @@ -38,7 +38,7 @@ instance Show Ledger where -- 1. filter based on account/description patterns, if any -- 2. cache per-account info -- 3. figure out the precision(s) to use -cacheLedger :: LedgerFile -> (Regex,Regex) -> Ledger +cacheLedger :: RawLedger -> (Regex,Regex) -> Ledger cacheLedger l pats = let lprecision = maximum $ map (precision . amount) $ rawLedgerTransactions l @@ -66,9 +66,9 @@ cacheLedger l pats = -- description patterns, if any, and which have at least one -- transaction matching one of the account patterns, if any. -- No description or account patterns implies match all. -filterLedgerEntries :: (Regex,Regex) -> LedgerFile -> LedgerFile -filterLedgerEntries (acctpat,descpat) (LedgerFile ms ps es f) = - LedgerFile ms ps filteredentries f +filterLedgerEntries :: (Regex,Regex) -> RawLedger -> RawLedger +filterLedgerEntries (acctpat,descpat) (RawLedger ms ps es f) = + RawLedger ms ps filteredentries f where filteredentries :: [LedgerEntry] filteredentries = (filter matchdesc $ filter (any matchtxn . etransactions) es) @@ -84,9 +84,9 @@ filterLedgerEntries (acctpat,descpat) (LedgerFile ms ps es f) = -- | in each ledger entry, filter out transactions which do not match -- the account patterns, if any. (Entries are no longer balanced -- after this.) -filterLedgerTransactions :: (Regex,Regex) -> LedgerFile -> LedgerFile -filterLedgerTransactions (acctpat,descpat) (LedgerFile ms ps es f) = - LedgerFile ms ps (map filterentrytxns es) f +filterLedgerTransactions :: (Regex,Regex) -> RawLedger -> RawLedger +filterLedgerTransactions (acctpat,descpat) (RawLedger ms ps es f) = + RawLedger ms ps (map filterentrytxns es) f where filterentrytxns l@(LedgerEntry _ _ _ _ _ ts _) = l{etransactions=filter matchtxn ts} matchtxn t = case matchRegex acctpat (taccount t) of diff --git a/Models.hs b/Models.hs index af9488942..72a8d6f78 100644 --- a/Models.hs +++ b/Models.hs @@ -8,7 +8,7 @@ module Models ( module LedgerEntry, module TimeLog, module Transaction, - -- module LedgerFile, + -- module RawLedger, module Account, module Ledger, ) @@ -23,7 +23,7 @@ import LedgerTransaction import LedgerEntry import TimeLog import Transaction -import LedgerFile +import RawLedger import Account import Ledger diff --git a/Parse.hs b/Parse.hs index 62c7e57ee..2dfbb66df 100644 --- a/Parse.hs +++ b/Parse.hs @@ -125,7 +125,7 @@ parseLedgerAndDo opts pats cmd = do case parsed of Left err -> parseError err Right l -> cmd $ cacheLedger l pats -parseLedgerFile :: String -> IO (Either ParseError LedgerFile) +parseLedgerFile :: String -> IO (Either ParseError RawLedger) parseLedgerFile "-" = fmap (parse ledgerfile "-") $ hGetContents stdin parseLedgerFile f = parseFromFile ledgerfile f @@ -159,10 +159,10 @@ reservedOp = P.reservedOp lexer -- parsers -ledgerfile :: Parser LedgerFile +ledgerfile :: Parser RawLedger ledgerfile = ledger <|> ledgerfromtimelog -ledger :: Parser LedgerFile +ledger :: Parser RawLedger ledger = do -- for now these must come first, unlike ledger modifier_entries <- many ledgermodifierentry @@ -171,7 +171,7 @@ ledger = do entries <- (many ledgerentry) "entry" final_comment_lines <- ledgernondatalines eof - return $ LedgerFile modifier_entries periodic_entries entries (unlines final_comment_lines) + return $ RawLedger modifier_entries periodic_entries entries (unlines final_comment_lines) ledgernondatalines :: Parser [String] ledgernondatalines = many (ledgerdirective <|> -- treat as comments @@ -331,7 +331,7 @@ o 2007/03/10 17:26:02 @ -} -ledgerfromtimelog :: Parser LedgerFile +ledgerfromtimelog :: Parser RawLedger ledgerfromtimelog = do tl <- timelog return $ ledgerFromTimeLog tl diff --git a/LedgerFile.hs b/RawLedger.hs similarity index 70% rename from LedgerFile.hs rename to RawLedger.hs index 3ca941b18..665cc22d5 100644 --- a/LedgerFile.hs +++ b/RawLedger.hs @@ -1,4 +1,4 @@ -module LedgerFile +module RawLedger where import qualified Data.Map as Map @@ -8,8 +8,8 @@ import AccountName import LedgerEntry -instance Show LedgerFile where - show l = printf "LedgerFile with %d entries" +instance Show RawLedger where + show l = printf "RawLedger with %d entries" ((length $ entries l) + (length $ modifier_entries l) + (length $ periodic_entries l)) diff --git a/Tests.hs b/Tests.hs index afa248dc6..5c65f2b7b 100644 --- a/Tests.hs +++ b/Tests.hs @@ -200,7 +200,7 @@ ledger7_str = "\ \ assets:checking \n\ \\n" --" -ledger7 = LedgerFile +ledger7 = RawLedger [] [] [ diff --git a/TimeLog.hs b/TimeLog.hs index 014c0e879..e97ad0177 100644 --- a/TimeLog.hs +++ b/TimeLog.hs @@ -6,7 +6,7 @@ import Currency import Amount import LedgerTransaction import LedgerEntry -import LedgerFile +import RawLedger instance Show TimeLogEntry where show t = printf "%s %s %s" (show $ tlcode t) (tldatetime t) (tlcomment t) @@ -14,9 +14,9 @@ instance Show TimeLogEntry where instance Show TimeLog where show tl = printf "TimeLog with %d entries" $ length $ timelog_entries tl -ledgerFromTimeLog :: TimeLog -> LedgerFile +ledgerFromTimeLog :: TimeLog -> RawLedger ledgerFromTimeLog tl = - LedgerFile [] [] (entriesFromTimeLogEntries $ timelog_entries tl) "" + RawLedger [] [] (entriesFromTimeLogEntries $ timelog_entries tl) "" entriesFromTimeLogEntries :: [TimeLogEntry] -> [LedgerEntry] diff --git a/Types.hs b/Types.hs index a3eff6bc8..e74bfbd8f 100644 --- a/Types.hs +++ b/Types.hs @@ -69,7 +69,7 @@ data TimeLog = TimeLog { } deriving (Eq) -- | a parsed ledger file -data LedgerFile = LedgerFile { +data RawLedger = RawLedger { modifier_entries :: [ModifierEntry], periodic_entries :: [PeriodicEntry], entries :: [LedgerEntry], @@ -95,7 +95,7 @@ data Account = Account { -- | a ledger with account information cached for faster queries data Ledger = Ledger { - rawledger :: LedgerFile, + rawledger :: RawLedger, accountnametree :: Tree AccountName, accounts :: Map.Map AccountName Account, lprecision :: Int diff --git a/hledger.hs b/hledger.hs index f75fffac3..ce8aff5fc 100644 --- a/hledger.hs +++ b/hledger.hs @@ -28,7 +28,7 @@ hledger ("Main") "Ledger" "Account" "Transaction" - "LedgerFile" + "RawLedger" "LedgerEntry" "LedgerTransaction" "AccountName" @@ -107,7 +107,7 @@ balance opts pats = do $ ghci hledger.hs GHCi, version 6.8.2: http://www.haskell.org/ghc/ :? for help Loading package base ... linking ... done. -Ok, modules loaded: Utils, Main, Tests, Parse, Models, Ledger, LedgerFile, LedgerEntry, Amount, Currency, Types, LedgerTransaction, AccountName, Transaction, Account, TimeLog, Options. +Ok, modules loaded: Utils, Main, Tests, Parse, Models, Ledger, RawLedger, LedgerEntry, Amount, Currency, Types, LedgerTransaction, AccountName, Transaction, Account, TimeLog, Options. Prelude Main> l <- myledger <..snip..> Ledger with 628 entries, 128 accounts @@ -129,14 +129,14 @@ $ ghci hledger.hs myledger :: IO Ledger myledger = do parsed <- ledgerFilePath [] >>= parseLedgerFile - let ledgerfile = either (\_ -> LedgerFile [] [] [] "") id parsed + let ledgerfile = either (\_ -> RawLedger [] [] [] "") id parsed return $ cacheLedger ledgerfile (wildcard,wildcard) -- | return a Ledger parsed from the given file path ledgerfromfile :: String -> IO Ledger ledgerfromfile f = do parsed <- ledgerFilePath [File f] >>= parseLedgerFile - let ledgerfile = either (\_ -> LedgerFile [] [] [] "") id parsed + let ledgerfile = either (\_ -> RawLedger [] [] [] "") id parsed return $ cacheLedger ledgerfile (wildcard,wildcard) accountnamed :: AccountName -> IO Account