journal: support ledger3-compatible "apply account"

This commit is contained in:
Simon Michael 2016-01-29 07:39:13 -08:00
parent eaaaf6ddec
commit a2b989d898
4 changed files with 59 additions and 7 deletions

View File

@ -295,19 +295,19 @@ journalAddFile f j@Journal{files=fs} = j{files=fs++[f]}
accountdirectivep :: ParsecT [Char] JournalContext (ExceptT String IO) JournalUpdate accountdirectivep :: ParsecT [Char] JournalContext (ExceptT String IO) JournalUpdate
accountdirectivep = do accountdirectivep = do
string "account" (try $ string "apply" >> many1 spacenonewline >> string "account")
<|> string "account"
many1 spacenonewline many1 spacenonewline
parent <- accountnamep parent <- accountnamep
newline newline
pushParentAccount parent pushParentAccount parent
-- return $ return id
return $ ExceptT $ return $ Right id return $ ExceptT $ return $ Right id
enddirectivep :: ParsecT [Char] JournalContext (ExceptT String IO) JournalUpdate enddirectivep :: ParsecT [Char] JournalContext (ExceptT String IO) JournalUpdate
enddirectivep = do enddirectivep = do
string "end" string "end"
optional $ many1 spacenonewline >> string "apply" >> many1 spacenonewline >> string "account"
popParentAccount popParentAccount
-- return (return id)
return $ ExceptT $ return $ Right id return $ ExceptT $ return $ Right id
aliasdirectivep :: ParsecT [Char] JournalContext (ExceptT String IO) JournalUpdate aliasdirectivep :: ParsecT [Char] JournalContext (ExceptT String IO) JournalUpdate

View File

@ -596,10 +596,10 @@ $ hledger print
## Default parent account ## Default parent account
You can specify a parent account which will be prepended to all accounts You can specify a parent account which will be prepended to all accounts
within a section of the journal. Use the `account` directive like so: within a section of the journal. Use the `apply account` directive like so:
``` {.journal} ``` {.journal}
account home apply account home
2010/1/1 2010/1/1
food $10 food $10
@ -608,6 +608,8 @@ account home
end end
``` ```
(`!account`, `account`, and `end apply account` are also supported).
If `end` is omitted, the effect lasts to the end of the file. If `end` is omitted, the effect lasts to the end of the file.
The above is equivalent to: The above is equivalent to:

View File

@ -711,10 +711,10 @@ $ hledger print
##### Default parent account ##### Default parent account
You can specify a parent account which will be prepended to all accounts You can specify a parent account which will be prepended to all accounts
within a section of the journal. Use the `account` directive like so: within a section of the journal. Use the `apply account` directive like so:
``` {.journal} ``` {.journal}
account home apply account home
2010/1/1 2010/1/1
food $10 food $10
@ -723,6 +723,8 @@ account home
end end
``` ```
(`!account`, `account`, and `end apply account` are also supported).
If `end` is omitted, the effect lasts to the end of the file. If `end` is omitted, the effect lasts to the end of the file.
The above is equivalent to: The above is equivalent to:

View File

@ -0,0 +1,48 @@
# Accept three forms of the account directive
# . !account, !end (ledger 2, hledger)
hledger -f - accounts
<<<
!account a
2016/1/1
(b) 1
!end
2016/1/2
(c) 1
>>>
a:b
c
>>>=0
# . account, end (ledger 3 pre ?, hledger)
hledger -f - accounts
<<<
account a
2016/1/1
(b) 1
end
2016/1/2
(c) 1
>>>
a:b
c
>>>=0
# . apply account, end [apply account] (ledger 3, hledger)
# . now: apply account
hledger -f - accounts
<<<
apply account a
2016/1/1
(b) 1
end
apply account aa
2016/1/1
(b) 1
end apply account
2016/1/2
(c) 1
>>>
a:b
aa:b
c
>>>=0