register: optimise postingsReportItemAsText a bit
Avoid concatTopPadded when rendering register output, making that command faster when there's a lot of output.
This commit is contained in:
parent
101719d3cb
commit
b499ea85eb
@ -70,7 +70,12 @@ tests_postingsReportAsText = [
|
|||||||
-- @
|
-- @
|
||||||
postingsReportItemAsText :: CliOpts -> PostingsReportItem -> String
|
postingsReportItemAsText :: CliOpts -> PostingsReportItem -> String
|
||||||
postingsReportItemAsText opts (mdate, mdesc, p, b) =
|
postingsReportItemAsText opts (mdate, mdesc, p, b) =
|
||||||
concatTopPadded [date, " ", desc, " ", acct, " ", amt, " ", bal]
|
intercalate "\n" $
|
||||||
|
[printf ("%-"++datew++"s %-"++descw++"s %-"++acctw++"s %"++amtw++"s %"++balw++"s")
|
||||||
|
date desc acct amtfirstline balfirstline]
|
||||||
|
++
|
||||||
|
[printf (spacer ++ "%"++amtw++"s %"++balw++"s") a b | (a,b) <- zip amtrest balrest ]
|
||||||
|
|
||||||
where
|
where
|
||||||
totalwidth = case widthFromOpts opts of
|
totalwidth = case widthFromOpts opts of
|
||||||
Left _ -> defaultWidth -- shouldn't happen
|
Left _ -> defaultWidth -- shouldn't happen
|
||||||
@ -85,17 +90,24 @@ postingsReportItemAsText opts (mdate, mdesc, p, b) =
|
|||||||
| otherwise = (r', r'+1)
|
| otherwise = (r', r'+1)
|
||||||
where r = remaining - 2
|
where r = remaining - 2
|
||||||
r' = r `div` 2
|
r' = r `div` 2
|
||||||
date = maybe (replicate datewidth ' ') (printf ("%-"++show datewidth++"s") . showDate) mdate
|
[datew,descw,acctw,amtw,balw] = map show [datewidth,descwidth,acctwidth,amtwidth,balwidth]
|
||||||
desc = maybe (replicate descwidth ' ') (printf ("%-"++show descwidth++"s") . take descwidth . elideRight descwidth) mdesc
|
|
||||||
acct = printf ("%-"++(show acctwidth)++"s") a
|
date = maybe "" showDate mdate
|
||||||
|
desc = maybe "" (take descwidth . elideRight descwidth) mdesc
|
||||||
|
acct = parenthesise $ elideAccountName awidth $ paccount p
|
||||||
where
|
where
|
||||||
a = bracket $ elideAccountName awidth $ paccount p
|
(parenthesise, awidth) = case ptype p of
|
||||||
(bracket, awidth) = case ptype p of
|
|
||||||
BalancedVirtualPosting -> (\s -> "["++s++"]", acctwidth-2)
|
BalancedVirtualPosting -> (\s -> "["++s++"]", acctwidth-2)
|
||||||
VirtualPosting -> (\s -> "("++s++")", acctwidth-2)
|
VirtualPosting -> (\s -> "("++s++")", acctwidth-2)
|
||||||
_ -> (id,acctwidth)
|
_ -> (id,acctwidth)
|
||||||
amt = padleft amtwidth $ showMixedAmountWithoutPrice $ pamount p
|
amt = showMixedAmountWithoutPrice $ pamount p
|
||||||
bal = padleft balwidth $ showMixedAmountWithoutPrice b
|
bal = showMixedAmountWithoutPrice b
|
||||||
|
(amtlines, ballines) = (lines amt, lines bal)
|
||||||
|
(amtlen, ballen) = (length amtlines, length ballines)
|
||||||
|
numlines = max amtlen ballen
|
||||||
|
(amtfirstline:amtrest) = take numlines $ amtlines ++ repeat "" -- posting amount is top-aligned
|
||||||
|
(balfirstline:balrest) = take numlines $ replicate (numlines - ballen) "" ++ ballines -- balance amount is bottom-aligned
|
||||||
|
spacer = replicate (totalwidth - (amtwidth + 2 + balwidth)) ' '
|
||||||
|
|
||||||
-- XXX
|
-- XXX
|
||||||
-- showPostingWithBalanceForVty showtxninfo p b = postingsReportItemAsText defreportopts $ mkpostingsReportItem showtxninfo p b
|
-- showPostingWithBalanceForVty showtxninfo p b = postingsReportItemAsText defreportopts $ mkpostingsReportItem showtxninfo p b
|
||||||
|
|||||||
@ -24,10 +24,10 @@ hledgerdev -f - register
|
|||||||
c ; a euro and a dollar
|
c ; a euro and a dollar
|
||||||
>>>
|
>>>
|
||||||
2010/01/01 a EUR 1 EUR 1
|
2010/01/01 a EUR 1 EUR 1
|
||||||
EUR 1
|
b USD 1 EUR 1
|
||||||
b USD 1 USD 1
|
USD 1
|
||||||
EUR -1
|
c EUR -1
|
||||||
c USD -1 0
|
USD -1 0
|
||||||
>>>=0
|
>>>=0
|
||||||
|
|
||||||
# 3. balance
|
# 3. balance
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user