diff --git a/hledger/Hledger/Cli/Register.hs b/hledger/Hledger/Cli/Register.hs index 62793ea83..b6cade419 100644 --- a/hledger/Hledger/Cli/Register.hs +++ b/hledger/Hledger/Cli/Register.hs @@ -70,7 +70,12 @@ tests_postingsReportAsText = [ -- @ postingsReportItemAsText :: CliOpts -> PostingsReportItem -> String 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 totalwidth = case widthFromOpts opts of Left _ -> defaultWidth -- shouldn't happen @@ -85,17 +90,24 @@ postingsReportItemAsText opts (mdate, mdesc, p, b) = | otherwise = (r', r'+1) where r = remaining - 2 r' = r `div` 2 - date = maybe (replicate datewidth ' ') (printf ("%-"++show datewidth++"s") . showDate) mdate - desc = maybe (replicate descwidth ' ') (printf ("%-"++show descwidth++"s") . take descwidth . elideRight descwidth) mdesc - acct = printf ("%-"++(show acctwidth)++"s") a - where - a = bracket $ elideAccountName awidth $ paccount p - (bracket, awidth) = case ptype p of + [datew,descw,acctw,amtw,balw] = map show [datewidth,descwidth,acctwidth,amtwidth,balwidth] + + date = maybe "" showDate mdate + desc = maybe "" (take descwidth . elideRight descwidth) mdesc + acct = parenthesise $ elideAccountName awidth $ paccount p + where + (parenthesise, awidth) = case ptype p of BalancedVirtualPosting -> (\s -> "["++s++"]", acctwidth-2) - VirtualPosting -> (\s -> "("++s++")", acctwidth-2) - _ -> (id,acctwidth) - amt = padleft amtwidth $ showMixedAmountWithoutPrice $ pamount p - bal = padleft balwidth $ showMixedAmountWithoutPrice b + VirtualPosting -> (\s -> "("++s++")", acctwidth-2) + _ -> (id,acctwidth) + amt = showMixedAmountWithoutPrice $ pamount p + 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 -- showPostingWithBalanceForVty showtxninfo p b = postingsReportItemAsText defreportopts $ mkpostingsReportItem showtxninfo p b diff --git a/tests/misc/amount-rendering.test b/tests/misc/amount-rendering.test index 5a5aeb244..91f9c0eb9 100644 --- a/tests/misc/amount-rendering.test +++ b/tests/misc/amount-rendering.test @@ -24,10 +24,10 @@ hledgerdev -f - register c ; a euro and a dollar >>> 2010/01/01 a EUR 1 EUR 1 - EUR 1 - b USD 1 USD 1 - EUR -1 - c USD -1 0 + b USD 1 EUR 1 + USD 1 + c EUR -1 + USD -1 0 >>>=0 # 3. balance