Source codeContentsIndex
Hledger.Read.Journal
Description

A reader for hledger's (and c++ ledger's) journal file format.

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.
Synopsis
reader :: Reader
format :: String
detect :: FilePath -> String -> Bool
parse :: FilePath -> String -> ErrorT String IO Journal
journalFile :: GenParser Char JournalContext JournalUpdate
emptyLine :: GenParser Char st ()
ledgercomment :: GenParser Char st String
ledgercommentline :: GenParser Char st String
ledgerExclamationDirective :: GenParser Char JournalContext JournalUpdate
ledgerInclude :: GenParser Char JournalContext JournalUpdate
ledgerAccountBegin :: GenParser Char JournalContext JournalUpdate
ledgerAccountEnd :: GenParser Char JournalContext JournalUpdate
ledgerModifierTransaction :: GenParser Char JournalContext ModifierTransaction
ledgerPeriodicTransaction :: GenParser Char JournalContext PeriodicTransaction
ledgerHistoricalPrice :: GenParser Char JournalContext HistoricalPrice
ledgerIgnoredPriceCommodity :: GenParser Char JournalContext JournalUpdate
ledgerDefaultCommodity :: GenParser Char JournalContext JournalUpdate
ledgerCommodityConversion :: GenParser Char JournalContext JournalUpdate
ledgerTagDirective :: GenParser Char JournalContext JournalUpdate
ledgerEndTagDirective :: GenParser Char JournalContext JournalUpdate
ledgerDefaultYear :: GenParser Char JournalContext JournalUpdate
ledgerTransaction :: GenParser Char JournalContext Transaction
ledgerdate :: GenParser Char JournalContext Day
ledgerfulldate :: GenParser Char JournalContext Day
ledgerpartialdate :: GenParser Char JournalContext Day
ledgerdatetime :: GenParser Char JournalContext LocalTime
ledgereffectivedate :: Day -> GenParser Char JournalContext Day
ledgerstatus :: GenParser Char st Bool
ledgercode :: GenParser Char st String
ledgerpostings :: GenParser Char JournalContext [Posting]
linebeginningwithspaces :: GenParser Char st String
ledgerposting :: GenParser Char JournalContext Posting
transactionaccountname :: GenParser Char JournalContext AccountName
ledgeraccountname :: GenParser Char st AccountName
postingamount :: GenParser Char st MixedAmount
someamount :: GenParser Char st MixedAmount
leftsymbolamount :: GenParser Char st MixedAmount
rightsymbolamount :: GenParser Char st MixedAmount
nosymbolamount :: GenParser Char st MixedAmount
commoditysymbol :: GenParser Char st String
quotedcommoditysymbol :: GenParser Char st String
simplecommoditysymbol :: 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)
Documentation
reader :: ReaderSource
format :: StringSource
detect :: FilePath -> String -> BoolSource
Does the given file path and data provide hledger's journal file format ?
parse :: FilePath -> String -> ErrorT String IO JournalSource
Parse and post-process a Journal from hledger's journal file format, or give an error.
journalFile :: GenParser Char JournalContext JournalUpdateSource
Top-level journal parser. Returns a single composite, I/O performing, error-raising JournalUpdate which can be applied to an empty journal to get the final result.
emptyLine :: GenParser Char st ()Source
ledgercomment :: GenParser Char st StringSource
ledgercommentline :: GenParser Char st StringSource
ledgerExclamationDirective :: GenParser Char JournalContext JournalUpdateSource
ledgerInclude :: GenParser Char JournalContext JournalUpdateSource
ledgerAccountBegin :: GenParser Char JournalContext JournalUpdateSource
ledgerAccountEnd :: GenParser Char JournalContext JournalUpdateSource
ledgerModifierTransaction :: GenParser Char JournalContext ModifierTransactionSource
ledgerPeriodicTransaction :: GenParser Char JournalContext PeriodicTransactionSource
ledgerHistoricalPrice :: GenParser Char JournalContext HistoricalPriceSource
ledgerIgnoredPriceCommodity :: GenParser Char JournalContext JournalUpdateSource
ledgerDefaultCommodity :: GenParser Char JournalContext JournalUpdateSource
ledgerCommodityConversion :: GenParser Char JournalContext JournalUpdateSource
ledgerTagDirective :: GenParser Char JournalContext JournalUpdateSource
ledgerEndTagDirective :: GenParser Char JournalContext JournalUpdateSource
ledgerDefaultYear :: GenParser Char JournalContext JournalUpdateSource
ledgerTransaction :: GenParser Char JournalContext TransactionSource
Try to parse a ledger entry. If we successfully parse an entry, check it can be balanced, and fail if not.
ledgerdate :: GenParser Char JournalContext DaySource
ledgerfulldate :: GenParser Char JournalContext DaySource
ledgerpartialdate :: GenParser Char JournalContext DaySource
Match a partial M/D date in a ledger, and also require that a default year directive was previously encountered.
ledgerdatetime :: GenParser Char JournalContext LocalTimeSource
ledgereffectivedate :: Day -> GenParser Char JournalContext DaySource
ledgerstatus :: GenParser Char st BoolSource
ledgercode :: GenParser Char st StringSource
ledgerpostings :: GenParser Char JournalContext [Posting]Source
linebeginningwithspaces :: GenParser Char st StringSource
ledgerposting :: GenParser Char JournalContext PostingSource
transactionaccountname :: GenParser Char JournalContext AccountNameSource
ledgeraccountname :: GenParser Char st AccountNameSource
Parse an account name. Account names may have single spaces inside them, and are terminated by two or more spaces. They should have one or more components of at least one character, separated by the account separator char.
postingamount :: GenParser Char st MixedAmountSource
Parse an amount, with an optional left or right currency symbol and optional price.
someamount :: GenParser Char st MixedAmountSource
leftsymbolamount :: GenParser Char st MixedAmountSource
rightsymbolamount :: GenParser Char st MixedAmountSource
nosymbolamount :: GenParser Char st MixedAmountSource
commoditysymbol :: GenParser Char st StringSource
quotedcommoditysymbol :: GenParser Char st StringSource
simplecommoditysymbol :: GenParser Char st StringSource
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.
numberpartsstartingwithdigit :: GenParser Char st (String, String)Source
numberpartsstartingwithpoint :: GenParser Char st (String, String)Source
Produced by Haddock version 2.6.1