Safe Haskell | None |
---|---|
Language | Haskell2010 |
Hledger.Read.JournalReader
Description
A reader for hledger's journal file format (http://hledger.org/MANUAL.html#the-journal-file). hledger's journal format is a compatible subset of c++ ledger's (http://ledger-cli.org/3.0/doc/ledger3.html#Journal-Format), so this reader should handle many ledger files as well. Example:
2012/3/24 gift expenses:gifts $10 assets:cash
Journal format supports the include directive which can read files in other formats, so the other file format readers need to be importable here. Some low-level journal syntax parsers which those readers also use are therefore defined separately in Hledger.Read.Common, avoiding import cycles.
- reader :: Reader
- genericSourcePos :: SourcePos -> GenericSourcePos
- parseAndFinaliseJournal :: ErroringJournalParser ParsedJournal -> Bool -> FilePath -> Text -> ExceptT String IO Journal
- runJournalParser :: Monad m => TextParser m a -> Text -> m (Either (ParseError Char Dec) a)
- rjp :: Monad m => TextParser m a -> Text -> m (Either (ParseError Char Dec) a)
- runErroringJournalParser :: ErroringJournalParser a -> Text -> IO (Either String a)
- rejp :: ErroringJournalParser a -> Text -> IO (Either String a)
- getParentAccount :: ErroringJournalParser AccountName
- journalp :: ErroringJournalParser ParsedJournal
- directivep :: ErroringJournalParser ()
- defaultyeardirectivep :: ErroringJournalParser ()
- marketpricedirectivep :: ErroringJournalParser MarketPrice
- datetimep :: ErroringJournalParser LocalTime
- datep :: JournalStateParser m Day
- modifiedaccountnamep :: ErroringJournalParser AccountName
- postingp :: Maybe Day -> ErroringJournalParser Posting
- statusp :: TextParser m ClearedStatus
- emptyorcommentlinep :: ErroringJournalParser ()
- followingcommentp :: ErroringJournalParser Text
- accountaliasp :: TextParser m AccountAlias
- tests_Hledger_Read_JournalReader :: Test
Reader
Parsing utils
parseAndFinaliseJournal :: ErroringJournalParser ParsedJournal -> Bool -> FilePath -> Text -> ExceptT String IO Journal Source #
Given a parsec ParsedJournal parser, file path and data string, parse and post-process a ready-to-use Journal, or give an error.
runJournalParser :: Monad m => TextParser m a -> Text -> m (Either (ParseError Char Dec) a) Source #
Run a journal parser with a null journal-parsing state.
rjp :: Monad m => TextParser m a -> Text -> m (Either (ParseError Char Dec) a) Source #
Run a journal parser with a null journal-parsing state.
runErroringJournalParser :: ErroringJournalParser a -> Text -> IO (Either String a) Source #
Run an error-raising journal parser with a null journal-parsing state.
rejp :: ErroringJournalParser a -> Text -> IO (Either String a) Source #
Run an error-raising journal parser with a null journal-parsing state.
Parsers used elsewhere
journalp :: ErroringJournalParser ParsedJournal Source #
A journal parser. Accumulates and returns a ParsedJournal, which should be finalised/validated before use.
>>>
rejp (journalp <* eof) "2015/1/1\n a 0\n"
Right Journal with 1 transactions, 1 accounts
directivep :: ErroringJournalParser () Source #
Parse any journal directive and update the parse state accordingly. Cf http://hledger.org/manual.html#directives, http://ledger-cli.org/3.0/doc/ledger3.html#Command-Directives
datetimep :: ErroringJournalParser LocalTime Source #
Parse a date and time in YYYYMMDD HH:MM[:SS][+-ZZZZ] format. Hyphen (-) and period (.) are also allowed as date separators. The year may be omitted if a default year has been set. Seconds are optional. The timezone is optional and ignored (the time is always interpreted as a local time). Leading zeroes may be omitted (except in a timezone).
datep :: JournalStateParser m Day Source #
Parse a date in YYYYMMDD format. Hyphen (-) and period (.) are also allowed as separators. The year may be omitted if a default year has been set. Leading zeroes may be omitted.
modifiedaccountnamep :: ErroringJournalParser AccountName Source #
> parsewith twoorthreepartdatestringp "2016/01/2"
Right "2016012" twoorthreepartdatestringp = do n1 <- some digitChar c <- datesepchar n2 <- some digitChar mn3 optional $ char c> some digitChar return $ n1 ++ c:n2 ++ maybe "" (c:) mn3
Parse an account name, then apply any parent account prefix and/or account aliases currently in effect.
followingcommentp :: ErroringJournalParser Text Source #
Parse a possibly multi-line comment following a semicolon.