lib: Rename alignCell to textCell, minor cleanups.
This commit is contained in:
parent
9ad0eef69b
commit
217bfc5e74
@ -246,11 +246,11 @@ postingAsLines elideamount onelineamounts pstoalignwith p =
|
|||||||
-- could be removed and we could just keep everything as a Text Builder, but
|
-- could be removed and we could just keep everything as a Text Builder, but
|
||||||
-- would require adding trailing spaces to 42 failing tests.
|
-- would require adding trailing spaces to 42 failing tests.
|
||||||
postingblocks = [map T.stripEnd . T.lines . TL.toStrict $
|
postingblocks = [map T.stripEnd . T.lines . TL.toStrict $
|
||||||
render [ alignCell BottomLeft statusandaccount
|
render [ textCell BottomLeft statusandaccount
|
||||||
, alignCell BottomLeft " "
|
, textCell BottomLeft " "
|
||||||
, Cell BottomLeft [amt]
|
, Cell BottomLeft [amt]
|
||||||
, Cell BottomLeft [assertion]
|
, Cell BottomLeft [assertion]
|
||||||
, alignCell BottomLeft samelinecomment
|
, textCell BottomLeft samelinecomment
|
||||||
]
|
]
|
||||||
| amt <- shownAmounts]
|
| amt <- shownAmounts]
|
||||||
render = renderRow def{tableBorders=False, borderSpaces=False} . Group NoLine . map Header
|
render = renderRow def{tableBorders=False, borderSpaces=False} . Group NoLine . map Header
|
||||||
|
|||||||
@ -223,7 +223,7 @@ budgetReportAsText :: ReportOpts -> BudgetReport -> TL.Text
|
|||||||
budgetReportAsText ropts@ReportOpts{..} budgetr = TB.toLazyText $
|
budgetReportAsText ropts@ReportOpts{..} budgetr = TB.toLazyText $
|
||||||
TB.fromText title <> TB.fromText "\n\n" <>
|
TB.fromText title <> TB.fromText "\n\n" <>
|
||||||
renderTableB def{tableBorders=False,prettyTable=pretty_tables_}
|
renderTableB def{tableBorders=False,prettyTable=pretty_tables_}
|
||||||
(alignCell TopLeft) (alignCell TopRight) (uncurry showcell) displayTableWithWidths
|
(textCell TopLeft) (textCell TopRight) (uncurry showcell) displayTableWithWidths
|
||||||
where
|
where
|
||||||
title = "Budget performance in " <> showDateSpan (periodicReportSpan budgetr)
|
title = "Budget performance in " <> showDateSpan (periodicReportSpan budgetr)
|
||||||
<> (case value_ of
|
<> (case value_ of
|
||||||
|
|||||||
@ -62,7 +62,7 @@ import Text.Printf (printf)
|
|||||||
import Hledger.Utils.Parse
|
import Hledger.Utils.Parse
|
||||||
import Hledger.Utils.Regex (toRegex', regexReplace)
|
import Hledger.Utils.Regex (toRegex', regexReplace)
|
||||||
import Text.Tabular (Header(..), Properties(..))
|
import Text.Tabular (Header(..), Properties(..))
|
||||||
import Text.Tabular.AsciiWide (Align(..), TableOpts(..), alignCell, renderRow)
|
import Text.Tabular.AsciiWide (Align(..), TableOpts(..), textCell, renderRow)
|
||||||
import Text.WideString (charWidth, strWidth)
|
import Text.WideString (charWidth, strWidth)
|
||||||
|
|
||||||
|
|
||||||
@ -185,16 +185,13 @@ unbracket s
|
|||||||
-- Treats wide characters as double width.
|
-- Treats wide characters as double width.
|
||||||
concatTopPadded :: [String] -> String
|
concatTopPadded :: [String] -> String
|
||||||
concatTopPadded = TL.unpack . renderRow def{tableBorders=False, borderSpaces=False}
|
concatTopPadded = TL.unpack . renderRow def{tableBorders=False, borderSpaces=False}
|
||||||
. Group NoLine . map (Header . cell)
|
. Group NoLine . map (Header . textCell BottomLeft . T.pack)
|
||||||
where cell = alignCell BottomLeft . T.pack
|
|
||||||
|
|
||||||
-- | Join several multi-line strings as side-by-side rectangular strings of the same height, bottom-padded.
|
-- | Join several multi-line strings as side-by-side rectangular strings of the same height, bottom-padded.
|
||||||
-- Treats wide characters as double width.
|
-- Treats wide characters as double width.
|
||||||
concatBottomPadded :: [String] -> String
|
concatBottomPadded :: [String] -> String
|
||||||
concatBottomPadded = TL.unpack . renderRow def{tableBorders=False, borderSpaces=False}
|
concatBottomPadded = TL.unpack . renderRow def{tableBorders=False, borderSpaces=False}
|
||||||
. Group NoLine . map (Header . cell)
|
. Group NoLine . map (Header . textCell TopLeft . T.pack)
|
||||||
where cell = alignCell TopLeft . T.pack
|
|
||||||
|
|
||||||
|
|
||||||
-- | Join multi-line strings horizontally, after compressing each of
|
-- | Join multi-line strings horizontally, after compressing each of
|
||||||
-- them to a single line with a comma and space between each original line.
|
-- them to a single line with a comma and space between each original line.
|
||||||
|
|||||||
@ -66,15 +66,18 @@ module Hledger.Utils.Text
|
|||||||
where
|
where
|
||||||
|
|
||||||
import Data.Char (digitToInt)
|
import Data.Char (digitToInt)
|
||||||
import Data.List (transpose)
|
import Data.Default (def)
|
||||||
#if !(MIN_VERSION_base(4,11,0))
|
#if !(MIN_VERSION_base(4,11,0))
|
||||||
import Data.Semigroup ((<>))
|
import Data.Semigroup ((<>))
|
||||||
#endif
|
#endif
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
|
import qualified Data.Text.Lazy as TL
|
||||||
import qualified Data.Text.Lazy.Builder as TB
|
import qualified Data.Text.Lazy.Builder as TB
|
||||||
|
|
||||||
import Hledger.Utils.Test ((@?=), test, tests)
|
import Hledger.Utils.Test ((@?=), test, tests)
|
||||||
|
import Text.Tabular (Header(..), Properties(..))
|
||||||
|
import Text.Tabular.AsciiWide (Align(..), TableOpts(..), textCell, renderRow)
|
||||||
import Text.WideString (WideBuilder(..), wbToText, wbUnpack, charWidth, textWidth)
|
import Text.WideString (WideBuilder(..), wbToText, wbUnpack, charWidth, textWidth)
|
||||||
|
|
||||||
|
|
||||||
@ -196,8 +199,7 @@ textUnbracket s
|
|||||||
-- Treats wide characters as double width.
|
-- Treats wide characters as double width.
|
||||||
textConcatTopPadded :: [Text] -> Text
|
textConcatTopPadded :: [Text] -> Text
|
||||||
textConcatTopPadded = TL.toStrict . renderRow def{tableBorders=False, borderSpaces=False}
|
textConcatTopPadded = TL.toStrict . renderRow def{tableBorders=False, borderSpaces=False}
|
||||||
. Group NoLine . map (Header . cell)
|
. Group NoLine . map (Header . textCell BottomLeft)
|
||||||
where cell = alignCell BottomLeft
|
|
||||||
|
|
||||||
-- -- | Join several multi-line strings as side-by-side rectangular strings of the same height, bottom-padded.
|
-- -- | Join several multi-line strings as side-by-side rectangular strings of the same height, bottom-padded.
|
||||||
-- -- Treats wide characters as double width.
|
-- -- Treats wide characters as double width.
|
||||||
@ -253,9 +255,6 @@ textConcatTopPadded = TL.toStrict . renderRow def{tableBorders=False, borderSpac
|
|||||||
-- ypadded = ls ++ replicate (difforzero h sh) ""
|
-- ypadded = ls ++ replicate (difforzero h sh) ""
|
||||||
-- xpadded = map (padleft sw) ypadded
|
-- xpadded = map (padleft sw) ypadded
|
||||||
|
|
||||||
difforzero :: (Num a, Ord a) => a -> a -> a
|
|
||||||
difforzero a b = maximum [(a - b), 0]
|
|
||||||
|
|
||||||
-- -- | Convert a multi-line string to a rectangular string left-padded to the specified width.
|
-- -- | Convert a multi-line string to a rectangular string left-padded to the specified width.
|
||||||
-- -- Treats wide characters as double width.
|
-- -- Treats wide characters as double width.
|
||||||
-- padleft :: Int -> String -> String
|
-- padleft :: Int -> String -> String
|
||||||
|
|||||||
@ -46,8 +46,8 @@ emptyCell :: Cell
|
|||||||
emptyCell = Cell TopRight []
|
emptyCell = Cell TopRight []
|
||||||
|
|
||||||
-- | Create a single-line cell from the given contents with its natural width.
|
-- | Create a single-line cell from the given contents with its natural width.
|
||||||
alignCell :: Align -> Text -> Cell
|
textCell :: Align -> Text -> Cell
|
||||||
alignCell a x = Cell a . map (\x -> WideBuilder (fromText x) (textWidth x)) $ if T.null x then [""] else T.lines x
|
textCell a x = Cell a . map (\x -> WideBuilder (fromText x) (textWidth x)) $ if T.null x then [""] else T.lines x
|
||||||
|
|
||||||
-- | Return the width of a Cell.
|
-- | Return the width of a Cell.
|
||||||
cellWidth :: Cell -> Int
|
cellWidth :: Cell -> Int
|
||||||
@ -57,7 +57,7 @@ cellWidth (Cell _ xs) = fromMaybe 0 . maximumMay $ map wbWidth xs
|
|||||||
-- | Render a table according to common options, for backwards compatibility
|
-- | Render a table according to common options, for backwards compatibility
|
||||||
render :: Bool -> (rh -> Text) -> (ch -> Text) -> (a -> Text) -> Table rh ch a -> TL.Text
|
render :: Bool -> (rh -> Text) -> (ch -> Text) -> (a -> Text) -> Table rh ch a -> TL.Text
|
||||||
render pretty fr fc f = renderTable def{prettyTable=pretty} (cell . fr) (cell . fc) (cell . f)
|
render pretty fr fc f = renderTable def{prettyTable=pretty} (cell . fr) (cell . fc) (cell . f)
|
||||||
where cell = alignCell TopRight
|
where cell = textCell TopRight
|
||||||
|
|
||||||
-- | Render a table according to various cell specifications>
|
-- | Render a table according to various cell specifications>
|
||||||
renderTable :: TableOpts -- ^ Options controlling Table rendering
|
renderTable :: TableOpts -- ^ Options controlling Table rendering
|
||||||
|
|||||||
@ -425,11 +425,11 @@ renderBalanceReportItem opts (acctname, depth, total) =
|
|||||||
|
|
||||||
-- | Render one StringFormat component for a balance report item.
|
-- | Render one StringFormat component for a balance report item.
|
||||||
renderComponent :: Bool -> ReportOpts -> (AccountName, Int, MixedAmount) -> StringFormatComponent -> Cell
|
renderComponent :: Bool -> ReportOpts -> (AccountName, Int, MixedAmount) -> StringFormatComponent -> Cell
|
||||||
renderComponent _ _ _ (FormatLiteral s) = alignCell TopLeft s
|
renderComponent _ _ _ (FormatLiteral s) = textCell TopLeft s
|
||||||
renderComponent topaligned opts (acctname, depth, total) (FormatField ljust mmin mmax field) = case field of
|
renderComponent topaligned opts (acctname, depth, total) (FormatField ljust mmin mmax field) = case field of
|
||||||
DepthSpacerField -> Cell align [WideBuilder (TB.fromText $ T.replicate d " ") d]
|
DepthSpacerField -> Cell align [WideBuilder (TB.fromText $ T.replicate d " ") d]
|
||||||
where d = maybe id min mmax $ depth * fromMaybe 1 mmin
|
where d = maybe id min mmax $ depth * fromMaybe 1 mmin
|
||||||
AccountField -> alignCell align $ formatText ljust mmin mmax acctname
|
AccountField -> textCell align $ formatText ljust mmin mmax acctname
|
||||||
TotalField -> Cell align . pure $ showamt total
|
TotalField -> Cell align . pure $ showamt total
|
||||||
_ -> Cell align [mempty]
|
_ -> Cell align [mempty]
|
||||||
where
|
where
|
||||||
@ -622,7 +622,7 @@ balanceReportAsTable opts@ReportOpts{average_, row_total_, balancetype_}
|
|||||||
balanceReportTableAsText :: ReportOpts -> Table T.Text T.Text MixedAmount -> TB.Builder
|
balanceReportTableAsText :: ReportOpts -> Table T.Text T.Text MixedAmount -> TB.Builder
|
||||||
balanceReportTableAsText ReportOpts{..} =
|
balanceReportTableAsText ReportOpts{..} =
|
||||||
Tab.renderTableB def{tableBorders=False, prettyTable=pretty_tables_}
|
Tab.renderTableB def{tableBorders=False, prettyTable=pretty_tables_}
|
||||||
(Tab.alignCell TopLeft) (Tab.alignCell TopRight) showamt
|
(Tab.textCell TopLeft) (Tab.textCell TopRight) showamt
|
||||||
where
|
where
|
||||||
showamt = Cell TopRight . pure . showMixedAmountB oneLine{displayColour=color_, displayMaxWidth=mmax}
|
showamt = Cell TopRight . pure . showMixedAmountB oneLine{displayColour=color_, displayMaxWidth=mmax}
|
||||||
mmax = if no_elide_ then Nothing else Just 32
|
mmax = if no_elide_ then Nothing else Just 32
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user