mirror of
https://github.com/simonmichael/hledger.git
synced 2024-12-26 20:02:27 +03:00
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
|
||||
-- would require adding trailing spaces to 42 failing tests.
|
||||
postingblocks = [map T.stripEnd . T.lines . TL.toStrict $
|
||||
render [ alignCell BottomLeft statusandaccount
|
||||
, alignCell BottomLeft " "
|
||||
render [ textCell BottomLeft statusandaccount
|
||||
, textCell BottomLeft " "
|
||||
, Cell BottomLeft [amt]
|
||||
, Cell BottomLeft [assertion]
|
||||
, alignCell BottomLeft samelinecomment
|
||||
, textCell BottomLeft samelinecomment
|
||||
]
|
||||
| amt <- shownAmounts]
|
||||
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 $
|
||||
TB.fromText title <> TB.fromText "\n\n" <>
|
||||
renderTableB def{tableBorders=False,prettyTable=pretty_tables_}
|
||||
(alignCell TopLeft) (alignCell TopRight) (uncurry showcell) displayTableWithWidths
|
||||
(textCell TopLeft) (textCell TopRight) (uncurry showcell) displayTableWithWidths
|
||||
where
|
||||
title = "Budget performance in " <> showDateSpan (periodicReportSpan budgetr)
|
||||
<> (case value_ of
|
||||
|
@ -62,7 +62,7 @@ import Text.Printf (printf)
|
||||
import Hledger.Utils.Parse
|
||||
import Hledger.Utils.Regex (toRegex', regexReplace)
|
||||
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)
|
||||
|
||||
|
||||
@ -185,16 +185,13 @@ unbracket s
|
||||
-- Treats wide characters as double width.
|
||||
concatTopPadded :: [String] -> String
|
||||
concatTopPadded = TL.unpack . renderRow def{tableBorders=False, borderSpaces=False}
|
||||
. Group NoLine . map (Header . cell)
|
||||
where cell = alignCell BottomLeft . T.pack
|
||||
. Group NoLine . map (Header . textCell BottomLeft . T.pack)
|
||||
|
||||
-- | Join several multi-line strings as side-by-side rectangular strings of the same height, bottom-padded.
|
||||
-- Treats wide characters as double width.
|
||||
concatBottomPadded :: [String] -> String
|
||||
concatBottomPadded = TL.unpack . renderRow def{tableBorders=False, borderSpaces=False}
|
||||
. Group NoLine . map (Header . cell)
|
||||
where cell = alignCell TopLeft . T.pack
|
||||
|
||||
. Group NoLine . map (Header . textCell TopLeft . T.pack)
|
||||
|
||||
-- | Join multi-line strings horizontally, after compressing each of
|
||||
-- them to a single line with a comma and space between each original line.
|
||||
|
@ -66,15 +66,18 @@ module Hledger.Utils.Text
|
||||
where
|
||||
|
||||
import Data.Char (digitToInt)
|
||||
import Data.List (transpose)
|
||||
import Data.Default (def)
|
||||
#if !(MIN_VERSION_base(4,11,0))
|
||||
import Data.Semigroup ((<>))
|
||||
#endif
|
||||
import Data.Text (Text)
|
||||
import qualified Data.Text as T
|
||||
import qualified Data.Text.Lazy as TL
|
||||
import qualified Data.Text.Lazy.Builder as TB
|
||||
|
||||
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)
|
||||
|
||||
|
||||
@ -196,8 +199,7 @@ textUnbracket s
|
||||
-- Treats wide characters as double width.
|
||||
textConcatTopPadded :: [Text] -> Text
|
||||
textConcatTopPadded = TL.toStrict . renderRow def{tableBorders=False, borderSpaces=False}
|
||||
. Group NoLine . map (Header . cell)
|
||||
where cell = alignCell BottomLeft
|
||||
. Group NoLine . map (Header . textCell BottomLeft)
|
||||
|
||||
-- -- | Join several multi-line strings as side-by-side rectangular strings of the same height, bottom-padded.
|
||||
-- -- Treats wide characters as double width.
|
||||
@ -253,9 +255,6 @@ textConcatTopPadded = TL.toStrict . renderRow def{tableBorders=False, borderSpac
|
||||
-- ypadded = ls ++ replicate (difforzero h sh) ""
|
||||
-- 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.
|
||||
-- -- Treats wide characters as double width.
|
||||
-- padleft :: Int -> String -> String
|
||||
|
@ -46,8 +46,8 @@ emptyCell :: Cell
|
||||
emptyCell = Cell TopRight []
|
||||
|
||||
-- | Create a single-line cell from the given contents with its natural width.
|
||||
alignCell :: 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 :: Align -> Text -> Cell
|
||||
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.
|
||||
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 :: 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)
|
||||
where cell = alignCell TopRight
|
||||
where cell = textCell TopRight
|
||||
|
||||
-- | Render a table according to various cell specifications>
|
||||
renderTable :: TableOpts -- ^ Options controlling Table rendering
|
||||
|
@ -425,11 +425,11 @@ renderBalanceReportItem opts (acctname, depth, total) =
|
||||
|
||||
-- | Render one StringFormat component for a balance report item.
|
||||
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
|
||||
DepthSpacerField -> Cell align [WideBuilder (TB.fromText $ T.replicate d " ") d]
|
||||
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
|
||||
_ -> Cell align [mempty]
|
||||
where
|
||||
@ -622,7 +622,7 @@ balanceReportAsTable opts@ReportOpts{average_, row_total_, balancetype_}
|
||||
balanceReportTableAsText :: ReportOpts -> Table T.Text T.Text MixedAmount -> TB.Builder
|
||||
balanceReportTableAsText ReportOpts{..} =
|
||||
Tab.renderTableB def{tableBorders=False, prettyTable=pretty_tables_}
|
||||
(Tab.alignCell TopLeft) (Tab.alignCell TopRight) showamt
|
||||
(Tab.textCell TopLeft) (Tab.textCell TopRight) showamt
|
||||
where
|
||||
showamt = Cell TopRight . pure . showMixedAmountB oneLine{displayColour=color_, displayMaxWidth=mmax}
|
||||
mmax = if no_elide_ then Nothing else Just 32
|
||||
|
Loading…
Reference in New Issue
Block a user