Parsers for standard ledger and timelog files.
- parseLedgerFile :: FilePath -> ErrorT String IO RawLedger
- printParseError :: Show a => a -> IO ()
- data LedgerFileCtx = Ctx {}
- emptyCtx :: LedgerFileCtx
- pushParentAccount :: String -> GenParser tok LedgerFileCtx ()
- popParentAccount :: GenParser tok LedgerFileCtx ()
- getParentAccount :: GenParser tok LedgerFileCtx String
- parseLedger :: FilePath -> String -> ErrorT String IO RawLedger
- ledgerFile :: GenParser Char LedgerFileCtx (ErrorT String IO (RawLedger -> RawLedger))
- ledgerDirective :: GenParser Char LedgerFileCtx (ErrorT String IO (RawLedger -> RawLedger))
- ledgerInclude :: GenParser Char LedgerFileCtx (ErrorT String IO (RawLedger -> RawLedger))
- expandPath :: MonadIO m => FilePath -> m FilePath
- ledgerAccountBegin :: GenParser Char LedgerFileCtx (ErrorT String IO (RawLedger -> RawLedger))
- ledgerAccountEnd :: GenParser Char LedgerFileCtx (ErrorT String IO (RawLedger -> RawLedger))
- emptyLine :: GenParser Char st ()
- ledgercomment :: GenParser Char st String
- ledgerModifierEntry :: GenParser Char LedgerFileCtx ModifierEntry
- ledgerPeriodicEntry :: GenParser Char LedgerFileCtx PeriodicEntry
- ledgerHistoricalPrice :: GenParser Char LedgerFileCtx HistoricalPrice
- ledgerEntry :: GenParser Char LedgerFileCtx Entry
- ledgerdate :: GenParser Char st Day
- ledgerdatetime :: GenParser Char st UTCTime
- ledgerstatus :: GenParser Char st Bool
- ledgercode :: GenParser Char st String
- ledgertransactions :: GenParser Char LedgerFileCtx [RawTransaction]
- ledgertransaction :: GenParser Char LedgerFileCtx RawTransaction
- normaltransaction :: GenParser Char LedgerFileCtx RawTransaction
- virtualtransaction :: GenParser Char LedgerFileCtx RawTransaction
- balancedvirtualtransaction :: GenParser Char LedgerFileCtx RawTransaction
- transactionaccountname :: GenParser Char LedgerFileCtx AccountName
- ledgeraccountname :: GenParser Char st String
- transactionamount :: GenParser Char st MixedAmount
- leftsymbolamount :: GenParser Char st MixedAmount
- rightsymbolamount :: GenParser Char st MixedAmount
- nosymbolamount :: GenParser Char st MixedAmount
- commoditysymbol :: GenParser Char st String
- priceamount :: GenParser Char st (Maybe MixedAmount)
- amountquantity :: GenParser Char st (Double, Int, Bool)
- numberparts :: GenParser Char st (String, String)
- numberpartsstartingwithdigit :: GenParser Char st (String, String)
- numberpartsstartingwithpoint :: GenParser Char st (String, String)
- timelog :: GenParser Char LedgerFileCtx TimeLog
- timelogentry :: GenParser Char LedgerFileCtx TimeLogEntry
- datedisplayexpr :: GenParser Char st (Transaction -> Bool)
Documentation
printParseError :: Show a => a -> IO ()Source
data LedgerFileCtx Source
pushParentAccount :: String -> GenParser tok LedgerFileCtx ()Source
expandPath :: MonadIO m => FilePath -> m FilePathSource
ledgerAccountBegin :: GenParser Char LedgerFileCtx (ErrorT String IO (RawLedger -> RawLedger))Source
emptyLine :: GenParser Char st ()Source
Parse a RawLedger from either a ledger file or a timelog file. It tries first the timelog parser then the ledger parser; this means parse errors for ledgers are useful while those for timelogs are not.
Parse a ledger file. Here is the ledger grammar from the ledger 2.5 manual:
The ledger file format is quite simple, but also very flexible. It supports many options, though typically the user can ignore most of them. They are summarized below. The initial character of each line determines what the line means, and how it should be interpreted. Allowable initial characters are: NUMBER A line beginning with a number denotes an entry. It may be followed by any number of lines, each beginning with whitespace, to denote the entrys account transactions. The format of the first line is: DATE[=EDATE] [*|!] [(CODE)] DESC If * appears after the date (with optional eective date), it indicates the entry is cleared, which can mean whatever the user wants it t omean. If ! appears after the date, it indicates d the entry is pending; i.e., tentatively cleared from the users point of view, but not yet actually cleared. If a CODE appears in parentheses, it may be used to indicate a check number, or the type of the transaction. Following these is the payee, or a description of the transaction. The format of each following transaction is: ACCOUNT AMOUNT [; NOTE] The ACCOUNT may be surrounded by parentheses if it is a virtual transactions, or square brackets if it is a virtual transactions that must balance. The AMOUNT can be followed by a per-unit transaction cost, by specifying AMOUNT, or a complete transaction cost with @ AMOUNT. Lastly, the NOTE may specify an actual and/or eective date for the transaction by using the syntax [ACTUAL_DATE] or [=EFFECTIVE_DATE] or [ACTUAL_DATE=EFFECtIVE_DATE]. = An automated entry. A value expression must appear after the equal sign. After this initial line there should be a set of one or more transactions, just as if it were normal entry. If the amounts of the transactions have no commodity, they will be applied as modifiers to whichever real transaction is matched by the value expression. ~ A period entry. A period expression must appear after the tilde. After this initial line there should be a set of one or more transactions, just as if it were normal entry. ! A line beginning with an exclamation mark denotes a command directive. It must be immediately followed by the command word. The supported commands are: !include Include the stated ledger file. !account The account name is given is taken to be the parent of all transac- tions that follow, until !end is seen. !end Ends an account block. ; A line beginning with a colon indicates a comment, and is ignored. Y If a line begins with a capital Y, it denotes the year used for all subsequent entries that give a date without a year. The year should appear immediately after the Y, for example: Y2004. This is useful at the beginning of a file, to specify the year for that file. If all entries specify a year, however, this command has no eect. P Specifies a historical price for a commodity. These are usually found in a pricing history file (see the -Q option). The syntax is: P DATE SYMBOL PRICE N SYMBOL Indicates that pricing information is to be ignored for a given symbol, nor will quotes ever be downloaded for that symbol. Useful with a home currency, such as the dollar ($). It is recommended that these pricing options be set in the price database file, which defaults to ~/.pricedb. The syntax for this command is: N SYMBOL D AMOUNT Specifies the default commodity to use, by specifying an amount in the expected format. The entry command will use this commodity as the default when none other can be determined. This command may be used multiple times, to set the default flags for dierent commodities; whichever is seen last is used as the default commodity. For example, to set US dollars as the default commodity, while also setting the thousands flag and decimal flag for that commodity, use: D $1,000.00 C AMOUNT1 = AMOUNT2 Specifies a commodity conversion, where the first amount is given to be equiv- alent to the second amount. The first amount should use the decimal precision desired during reporting: C 1.00 Kb = 1024 bytes i, o, b, h These four relate to timeclock support, which permits ledger to read timelog files. See the timeclocks documentation for more info on the syntax of its timelog files.
See Tests for sample data.
ledgerdate :: GenParser Char st DaySource
ledgerstatus :: GenParser Char st BoolSource
ledgercode :: GenParser Char st StringSource
ledgeraccountname :: GenParser Char st StringSource
account names may have single spaces inside them, and are terminated by two or more spaces
priceamount :: GenParser Char st (Maybe MixedAmount)Source
amountquantity :: GenParser Char st (Double, Int, Bool)Source
parse a ledger-style numeric quantity and also return the number of digits to the right of the decimal point and whether thousands are separated by comma.
numberparts :: GenParser Char st (String, String)Source
parse the two strings of digits before and after a possible decimal point. The integer part may contain commas, or either part may be empty, or there may be no point.
timelog :: GenParser Char LedgerFileCtx TimeLogSource
Parse a timelog file. Here is the timelog grammar, from timeclock.el 2.6:
A timelog contains data in the form of a single entry per line. Each entry has the form: CODE YYYYMMDD HH:MM:SS [COMMENT] CODE is one of: b, h, i, o or O. COMMENT is optional when the code is i, o or O. The meanings of the codes are: b Set the current time balance, or "time debt". Useful when archiving old log data, when a debt must be carried forward. The COMMENT here is the number of seconds of debt. h Set the required working time for the given day. This must be the first entry for that day. The COMMENT in this case is the number of hours in this workday. Floating point amounts are allowed. i Clock in. The COMMENT in this case should be the name of the project worked on. o Clock out. COMMENT is unnecessary, but can be used to provide a description of how the period went, for example. O Final clock out. Whatever project was being worked on, it is now finished. Useful for creating summary reports.
Example:
i 20070310 12:26:00 hledger o 20070310 17:26:02
datedisplayexpr :: GenParser Char st (Transaction -> Bool)Source