From b8497c830edefe4ab3c2a7ecacc2785cb8ad12b6 Mon Sep 17 00:00:00 2001 From: Henning Thielemann Date: Sat, 12 Oct 2024 20:52:36 +0200 Subject: [PATCH] lib: Write.Spreadsheet.headerCell, addRowSpanHeader, rawTableContent: taken from Commands.Balance --- hledger-lib/Hledger/Write/Spreadsheet.hs | 23 +++++++++++++++++++ hledger/Hledger/Cli/Commands/Balance.hs | 21 +---------------- hledger/Hledger/Cli/CompoundBalanceCommand.hs | 2 +- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/hledger-lib/Hledger/Write/Spreadsheet.hs b/hledger-lib/Hledger/Write/Spreadsheet.hs index 9a66fa06b..a79923869 100644 --- a/hledger-lib/Hledger/Write/Spreadsheet.hs +++ b/hledger-lib/Hledger/Write/Spreadsheet.hs @@ -14,9 +14,12 @@ module Hledger.Write.Spreadsheet ( NumLines(..), noBorder, defaultCell, + headerCell, emptyCell, transposeCell, transpose, + addRowSpanHeader, + rawTableContent, ) where import Hledger.Data.Types (Amount) @@ -151,6 +154,9 @@ defaultCell text = cellContent = text } +headerCell :: (Lines borders) => Text -> Cell borders Text +headerCell text = (defaultCell text) {cellStyle = Head} + emptyCell :: (Lines border, Monoid text) => Cell border text emptyCell = defaultCell mempty @@ -163,3 +169,20 @@ transposeCell cell = transpose :: [[Cell border text]] -> [[Cell border text]] transpose = List.transpose . map (map transposeCell) + + +addRowSpanHeader :: + Cell border text -> + [[Cell border text]] -> [[Cell border text]] +addRowSpanHeader header rows = + case rows of + [] -> [] + [row] -> [header:row] + _ -> + zipWith (:) + (header{cellSpan = SpanVertical (length rows)} : + repeat header{cellSpan = Covered}) + rows + +rawTableContent :: [[Cell border text]] -> [[text]] +rawTableContent = map (map cellContent) diff --git a/hledger/Hledger/Cli/Commands/Balance.hs b/hledger/Hledger/Cli/Commands/Balance.hs index 627f024f7..afa9f0fa0 100644 --- a/hledger/Hledger/Cli/Commands/Balance.hs +++ b/hledger/Hledger/Cli/Commands/Balance.hs @@ -265,7 +265,6 @@ module Hledger.Cli.Commands.Balance ( ,multiBalanceReportAsSpreadsheetParts ,multiBalanceHasTotalsColumn ,addTotalBorders - ,addRowSpanHeader ,simpleDateSpanCell ,RowClass(..) -- ** Tests @@ -307,6 +306,7 @@ import Hledger.Cli.Utils import Hledger.Write.Csv (CSV, printCSV, printTSV) import Hledger.Write.Ods (printFods) import Hledger.Write.Html.Lucid (printHtml) +import Hledger.Write.Spreadsheet (rawTableContent, addRowSpanHeader, headerCell) import qualified Hledger.Write.Spreadsheet as Ods @@ -587,9 +587,6 @@ renderComponent topaligned oneline opts (acctname, dep, total) (FormatField ljus } -headerCell :: (Ods.Lines borders) => Text -> Ods.Cell borders Text -headerCell text = (Ods.defaultCell text) {Ods.cellStyle = Ods.Head} - registerQueryUrl :: [Text] -> Text registerQueryUrl query = Uri.render $ @@ -664,22 +661,6 @@ addTotalBorders = Ods.cellBorder = Ods.noBorder {Ods.borderTop = border}})) (Ods.DoubleLine : repeat Ods.NoLine) -rawTableContent :: [[Ods.Cell border text]] -> [[text]] -rawTableContent = map (map Ods.cellContent) - -addRowSpanHeader :: - Ods.Cell border text -> - [[Ods.Cell border text]] -> [[Ods.Cell border text]] -addRowSpanHeader header rows = - case rows of - [] -> [] - [row] -> [header:row] - _ -> - zipWith (:) - (header{Ods.cellSpan = Ods.SpanVertical (length rows)} : - repeat header{Ods.cellSpan = Ods.Covered}) - rows - setAccountAnchor :: Maybe Text -> [Text] -> Text -> Ods.Cell border text -> Ods.Cell border text setAccountAnchor base query acct cell = diff --git a/hledger/Hledger/Cli/CompoundBalanceCommand.hs b/hledger/Hledger/Cli/CompoundBalanceCommand.hs index 09d9c2ce9..6777465fd 100644 --- a/hledger/Hledger/Cli/CompoundBalanceCommand.hs +++ b/hledger/Hledger/Cli/CompoundBalanceCommand.hs @@ -378,7 +378,7 @@ compoundBalanceReportAsHtml ropts cbr = Total simpleDateSpanCell totalrow -- make a table of rendered lines of the report totals row & map (map (fmap wbToText)) - & addRowSpanHeader + & Spr.addRowSpanHeader ((Spr.defaultCell "Net:") {Spr.cellClass = Spr.Class "account"}) -- insert a headings column, with Net: on the first line only & addTotalBorders -- marking the first for special styling