lib,cli: bal uses new amount display functions, no longer needs to strip ansi.
This commit is contained in:
parent
e50a8c0f34
commit
a2b7a03fc4
@ -20,6 +20,8 @@ module Hledger.Reports.MultiBalanceReport (
|
|||||||
compoundBalanceReportWith,
|
compoundBalanceReportWith,
|
||||||
|
|
||||||
tableAsText,
|
tableAsText,
|
||||||
|
trimBorder,
|
||||||
|
leftAlignRowHeaders,
|
||||||
|
|
||||||
sortRows,
|
sortRows,
|
||||||
sortRowsLike,
|
sortRowsLike,
|
||||||
@ -597,14 +599,15 @@ dbg'' s = let p = "multiBalanceReport" in Hledger.Utils.dbg5 (p++" "++s)
|
|||||||
-- common rendering helper, XXX here for now
|
-- common rendering helper, XXX here for now
|
||||||
tableAsText :: ReportOpts -> (a -> String) -> Table String String a -> String
|
tableAsText :: ReportOpts -> (a -> String) -> Table String String a -> String
|
||||||
tableAsText (ReportOpts{pretty_tables_ = pretty}) showcell =
|
tableAsText (ReportOpts{pretty_tables_ = pretty}) showcell =
|
||||||
unlines
|
trimBorder
|
||||||
. trimborder
|
|
||||||
. lines
|
|
||||||
. render pretty id id showcell
|
. render pretty id id showcell
|
||||||
. align
|
. leftAlignRowHeaders
|
||||||
where
|
|
||||||
trimborder = drop 1 . init . map (drop 1 . init)
|
trimBorder :: String -> String
|
||||||
align (Table l t d) = Table l' t d
|
trimBorder = unlines . map (drop 1 . init) . drop 1 . init . lines
|
||||||
|
|
||||||
|
leftAlignRowHeaders :: Table String ch a -> Table String ch a
|
||||||
|
leftAlignRowHeaders (Table l t d) = Table l' t d
|
||||||
where
|
where
|
||||||
acctswidth = maximum' $ map strWidth (headerContents l)
|
acctswidth = maximum' $ map strWidth (headerContents l)
|
||||||
l' = padRightWide acctswidth <$> l
|
l' = padRightWide acctswidth <$> l
|
||||||
|
|||||||
@ -40,6 +40,7 @@ module Hledger.Utils.String (
|
|||||||
-- * wide-character-aware layout
|
-- * wide-character-aware layout
|
||||||
charWidth,
|
charWidth,
|
||||||
strWidth,
|
strWidth,
|
||||||
|
strWidthAnsi,
|
||||||
takeWidth,
|
takeWidth,
|
||||||
fitString,
|
fitString,
|
||||||
fitStringMulti,
|
fitStringMulti,
|
||||||
@ -334,11 +335,19 @@ takeWidth w (c:cs) | cw <= w = c:takeWidth (w-cw) cs
|
|||||||
-- see also http://unicode.org/reports/tr11/#Description
|
-- see also http://unicode.org/reports/tr11/#Description
|
||||||
|
|
||||||
-- | Calculate the render width of a string, considering
|
-- | Calculate the render width of a string, considering
|
||||||
-- wide characters (counted as double width), ANSI escape codes
|
-- wide characters (counted as double width), and line breaks
|
||||||
-- (not counted), and line breaks (in a multi-line string, the longest
|
-- (in a multi-line string, the longest line determines the
|
||||||
-- line determines the width).
|
-- width).
|
||||||
strWidth :: String -> Int
|
strWidth :: String -> Int
|
||||||
strWidth = maximum . (0:) . map (foldr (\a b -> charWidth a + b) 0) . lines . stripAnsi
|
strWidth = maximum . (0:) . map (foldr (\a b -> charWidth a + b) 0) . lines
|
||||||
|
|
||||||
|
-- | Like strWidth, but also strips ANSI escape sequences before
|
||||||
|
-- calculating the width.
|
||||||
|
--
|
||||||
|
-- This is no longer used in code, as widths are calculated before
|
||||||
|
-- adding ANSI escape sequences, but is being kept around for now.
|
||||||
|
strWidthAnsi :: String -> Int
|
||||||
|
strWidthAnsi = strWidth . stripAnsi
|
||||||
|
|
||||||
-- | Strip ANSI escape sequences from a string.
|
-- | Strip ANSI escape sequences from a string.
|
||||||
--
|
--
|
||||||
|
|||||||
@ -263,7 +263,7 @@ import System.Console.CmdArgs.Explicit as C
|
|||||||
import Lucid as L
|
import Lucid as L
|
||||||
import Text.Printf (printf)
|
import Text.Printf (printf)
|
||||||
import Text.Tabular as T
|
import Text.Tabular as T
|
||||||
--import Text.Tabular.AsciiWide
|
import Text.Tabular.AsciiWide (renderWidth)
|
||||||
|
|
||||||
import Hledger
|
import Hledger
|
||||||
import Hledger.Cli.CliOptions
|
import Hledger.Cli.CliOptions
|
||||||
@ -609,11 +609,11 @@ balanceReportAsTable opts@ReportOpts{average_, row_total_, balancetype_}
|
|||||||
-- console output. Amounts with more than two commodities will be elided
|
-- console output. Amounts with more than two commodities will be elided
|
||||||
-- unless --no-elide is used.
|
-- unless --no-elide is used.
|
||||||
balanceReportTableAsText :: ReportOpts -> Table String String MixedAmount -> String
|
balanceReportTableAsText :: ReportOpts -> Table String String MixedAmount -> String
|
||||||
balanceReportTableAsText ropts@ReportOpts{..} = tableAsText ropts showamt
|
balanceReportTableAsText ReportOpts{..} =
|
||||||
|
trimBorder . renderWidth pretty_tables_ id id showamt . leftAlignRowHeaders
|
||||||
where
|
where
|
||||||
showamt
|
showamt = showMixedOneLine showAmountWithoutPrice Nothing mmax color_
|
||||||
| no_elide_ = showMixedAmountOneLineWithoutPrice color_
|
mmax = if no_elide_ then Nothing else Just 22
|
||||||
| otherwise = showMixedAmountElided color_
|
|
||||||
|
|
||||||
|
|
||||||
tests_Balance = tests "Balance" [
|
tests_Balance = tests "Balance" [
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user