lib: Write.Spreadsheet.headerCell, addRowSpanHeader, rawTableContent: taken from Commands.Balance

This commit is contained in:
Henning Thielemann 2024-10-12 20:52:36 +02:00 committed by Simon Michael
parent b8570c2aa0
commit b8497c830e
3 changed files with 25 additions and 21 deletions

View File

@ -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)

View File

@ -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 =

View File

@ -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